[
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: [mikepenz]\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "content": "## About this issue\n\n- Briefly describe the issue\n- How can the issue be reproduced / sample code\n\n## Details\n- [ ] Used library version\n- [ ] Used support library version\n- [ ] Used gradle build tools version\n- [ ] Used tooling / Android Studio version\n- [ ] Other used libraries, potential conflicting libraries\n\n## Checklist\n\n- [ ] Searched for [similar issues](https://github.com/mikepenz/MaterialDrawer/issues)\n- [ ] Checked out the [sample application](https://github.com/mikepenz/MaterialDrawer/tree/develop/app)\n- [ ] Read the [README](https://github.com/mikepenz/MaterialDrawer/blob/develop/README.md)\n- [ ] Checked out the [CHANGELOG](https://github.com/mikepenz/MaterialDrawer/releases)\n- [ ] Read the [FAQ](https://github.com/mikepenz/MaterialDrawer/blob/develop/FAQ.md)\n- [ ] Checked out the [MIGRATION GUIDE](https://github.com/mikepenz/MaterialDrawer/blob/develop/MIGRATION.md)\n"
  },
  {
    "path": ".github/ci-gradle.properties",
    "content": "org.gradle.daemon=true\norg.gradle.parallel=true\norg.gradle.workers.max=2\norg.gradle.jvmargs=-Xmx6G\norg.gradle.caching=true\norg.gradle.configureondemand=true\n# parallel kapt\nkapt.use.worker.api=true\n"
  },
  {
    "path": ".github/config/configuration.json",
    "content": "{\n  \"categories\": [\n    {\n      \"title\": \"## 🚀 Features\",\n      \"labels\": [\n        \"feature\"\n      ]\n    },\n    {\n      \"title\": \"## 🐛 Fixes\",\n      \"labels\": [\n        \"fix\"\n      ]\n    },\n    {\n      \"title\": \"## 🧪 Tests\",\n      \"labels\": [\n        \"test\"\n      ]\n    },\n    {\n      \"title\": \"## 💬 Other\",\n      \"labels\": [\n        \"other\",\n        \"dependencies\"\n      ]\n    }\n  ]\n}"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\""
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "# Thanks to https://github.com/coil-kt/coil/blob/master/.github/workflows/ci.yml\nname: CI\n\non:\n  push:\n    tags:\n      - '*'\n  pull_request:\n\njobs:\n  build:\n    name: Build\n    runs-on: ubuntu-latest\n    steps:\n      - name: Checkout\n        uses: actions/checkout@v6\n        with:\n          fetch-depth: 100\n\n      - uses: actions/setup-java@v4\n        with:\n          distribution: 'zulu'\n          java-version: |\n            11\n            15\n            17\n\n      - name: Setup Gradle\n        uses: gradle/actions/setup-gradle@v4\n\n      - name: Validate gradle wrapper\n        uses: gradle/actions/wrapper-validation@v4\n\n      - name: Copy CI gradle.properties\n        run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties\n\n\n      - name: Build Debug\n        run: ./gradlew clean app:assembleDebug\n\n      - name: Run Lint\n        if: github.event_name  == 'pull_request'\n        run: ./gradlew lintDebug\n\n      - name: Setup Ruby\n        if: github.event_name  == 'pull_request'\n        uses: ruby/setup-ruby@v1\n        with:\n          ruby-version: '3.3'\n          bundler-cache: true\n\n      - name: Run Danger\n        if: github.event_name  == 'pull_request'\n        run: |\n          gem install danger\n          bundle exec danger --dangerfile=Dangerfile --danger_id=danger-pr\n        env:\n          DANGER_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Prepare Keystore and Local.\n        if: startsWith(github.ref, 'refs/tags/')\n        run: |\n          echo \"${{ secrets.KEYSTORE }}\" > opensource.jks.asc\n          gpg -d --passphrase \"${{ secrets.KEYSTORE_PASSPHRASE }}\" --batch \"opensource.jks.asc\" > \"app/opensource.jks\"\n\n      - name: Build Release App\n        if: startsWith(github.ref, 'refs/tags/')\n        run: ./gradlew app:assembleRelease app:bundleRelease -P\"com.mikepenz.android.signing.enabled\"=\"true\" -P\"com.mikepenz.android.signing.storeFile\"=\"opensource.jks\" -P\"com.mikepenz.android.signing.storePassword\"=\"${{ secrets.STORE_PASSWORD }}\" -P\"com.mikepenz.android.signing.keyAlias\"=\"${{ secrets.KEY_ALIAS }}\" -P\"com.mikepenz.android.signing.keyPassword\"=\"${{ secrets.KEY_PASSWORD }}\"\n\n      - name: Relase Sonatype\n        if: startsWith(github.ref, 'refs/tags/')\n        run: |\n          ./gradlew build -x test -x lint\n          ./gradlew materialdrawer:publishAllPublicationsToMavenCentralRepository -x test -x lint -Plibrary_only --no-configure-on-demand --no-parallel\n          ./gradlew materialdrawer-nav:publishAllPublicationsToMavenCentralRepository -x test -x lint -Plibrary_nav_only  --no-configure-on-demand --no-parallel\n          ./gradlew materialdrawer-iconics:publishAllPublicationsToMavenCentralRepository -x test -x lint -Plibrary_iconics_only --no-configure-on-demand --no-parallel\n        env:\n          ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.NEXUS_USERNAME }}\n          ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.NEXUS_PASSWORD }}\n          ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.SIGNING_KEY_ID }}\n          ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_PRIVATE_KEY }}\n          ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_PASSWORD }}\n\n      - name: Collect artifacts\n        run: |\n          COLLECT_PWD=${PWD}\n          mkdir -p \"artifacts\"\n          find . -name \"*.apk\" -type f -exec cp {} \"artifacts\" \\;\n          find . -name \"*.aab\" -type f -exec cp {} \"artifacts\" \\;\n\n      - name: Archive Artifacts\n        uses: actions/upload-artifact@v7\n        with:\n          name: \"App-Artifacts\"\n          path: artifacts/*\n\n      - name: Build Changelog\n        id: github_release\n        uses: mikepenz/release-changelog-builder-action@v6\n        if: startsWith(github.ref, 'refs/tags/')\n        with:\n          configuration: \".github/config/configuration.json\"\n          ignorePreReleases: ${{ !contains(github.ref, '-') }}\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n\n      - name: Release\n        uses: mikepenz/action-gh-release@v2\n        if: startsWith(github.ref, 'refs/tags/')\n        with:\n          body: ${{steps.github_release.outputs.changelog}}\n          prerelease: ${{ contains(github.ref, '-rc') || contains(github.ref, '-b') || contains(github.ref, '-a') }}\n          files: artifacts/*\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}"
  },
  {
    "path": ".github/workflows/gradle-dependency-submission.yml",
    "content": "name: Gradle Dependency Submission\non:\n  push:\n    branches:\n      - develop\n\njobs:\n  gradle-dependency-detection:\n    runs-on: ubuntu-latest\n    # The Dependency Submission API requires write permission\n    permissions:\n      contents: write\n    steps:\n      - name: 'Checkout Repository'\n        uses: actions/checkout@v6\n\n      - uses: actions/setup-java@v4\n        with:\n          distribution: 'zulu'\n          java-version: |\n            11\n            15\n            17\n\n      - name: Copy CI gradle.properties\n        run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties\n\n      - name: Checkout Gradle Build Cache\n        uses: actions/cache@v4\n        with:\n          path: |\n            ~/.gradle/caches\n            ~/.gradle/wrapper\n            !~/.gradle/wrapper/dists/**/gradle*.zip\n          key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}\n          restore-keys: |\n            gradle-${{ runner.os }}-\n\n      - name: Submit Dependency Graph\n        uses: mikepenz/gradle-dependency-submission@main\n        with:\n          gradle-build-module: :app\n          gradle-build-configuration: debugCompileClasspath\n          sub-module-mode: INDIVIDUAL_DEEP"
  },
  {
    "path": ".gitignore",
    "content": "# Built application files\n*.apk\n*.ap_\n\n# Files for the Dalvik VM\n*.dex\n\n# Java class files\n*.class\n\n# Generated files\nbin/\ngen/\n\n# Gradle files\n.gradle/\nbuild/\n/*/build/\n\n# Local configuration file (sdk path, etc)\nlocal.properties\n\n# Proguard folder generated by Eclipse\nproguard/\n\n# Log Files\n*.log\n\n#IntelliJ files\n*.iml\n.idea/\nfunctiongraphic.psd\n\n/.kotlin"
  },
  {
    "path": "Dangerfile",
    "content": "github.dismiss_out_of_range_messages\n\n# Make it more obvious that a PR is a work in progress and shouldn't be merged yet.\nhas_wip_label = github.pr_labels.any? { |label| label.include? \"Engineers at work\" }\nhas_wip_title = github.pr_title.include? \"[WIP]\"\n\nif has_wip_label || has_wip_title\n\twarn(\"PR is marked as Work in Progress\")\nend\n\n# Ensure the PR is not marked as DO NOT MERGE\nfail(\"PR specifies label DO NOT MERGE\") if github.pr_labels.any? { |label| label.include? \"DO NOT MERGE\" }\n\n# Warn when there is a big PR\nwarn(\"Big PR\") if git.lines_of_code > 5000\n\nFile.open(\"settings.gradle.kts\", \"r\") do |file_handle|\n  file_handle.each_line do |setting|\n    if setting.include? \"include\"\n        gradleModule = setting[10, setting.length-13]\n\n        # AndroidLint\n        androidLintFile = String.new(gradleModule + \"/build/reports/lint-results.xml\")\n        androidLintDebugFile = String.new(gradleModule + \"/build/reports/lint-results-debug.xml\")\n        if File.file?(androidLintFile) || File.file?(androidLintDebugFile)\n            android_lint.skip_gradle_task = true\n            android_lint.severity = \"Warning\"\n            if File.file?(androidLintFile)\n                android_lint.report_file = androidLintFile\n            else\n                android_lint.report_file = androidLintDebugFile\n            end\n            android_lint.filtering = true\n            android_lint.lint(inline_mode: true)\n        end\n\n        # Detekt\n        detektFile = String.new(gradleModule + \"/build/reports/detekt.xml\")\n        if File.file?(detektFile)\n            kotlin_detekt.report_file = detektFile\n            kotlin_detekt.skip_gradle_task = true\n            kotlin_detekt.severity = \"warning\"\n            kotlin_detekt.filtering = true\n            kotlin_detekt.detekt(inline_mode: true)\n        end\n    end\n  end\nend"
  },
  {
    "path": "FAQ/accountheader_single_profile_without_dropdown.md",
    "content": "# How can i use the AccountHeader with just one profile and disable the dropdown?\n\nThis can be simply achieved by adding  `headerView.selectionListEnabledForSingleProfile = false` to the\n`Builder` of the `AccountHeader`. This will then disable the dropdown and hide the arrow from the\nheader.\n\n## Sample code\n\n```kotlin\nheaderView.selectionListEnabledForSingleProfile = false\n```\n\n## Links\n * https://github.com/mikepenz/MaterialDrawer/issues/615\n * https://github.com/mikepenz/MaterialDrawer/issues/454\n * https://github.com/mikepenz/MaterialDrawer/issues/443\n * https://github.com/mikepenz/MaterialDrawer/issues/350\n"
  },
  {
    "path": "FAQ/howto_modify_add_custom_draweritems.md",
    "content": "# How do I change existing or add my own CustomDrawerItems to the MaterialDrawer?\n\nPlease head over here on how to implement a proper CustomDrawerItem:\n- http://stackoverflow.com/a/32543209/325479\n- http://stackoverflow.com/a/32542999/325479\n\nOr you check out custom drawer item implementations here:\n- https://github.com/mikepenz/MaterialDrawer/tree/develop/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems\n\nYou might also find some answers here:\n- https://github.com/mikepenz/MaterialDrawer/issues?utf8=%E2%9C%93&q=CustomDrawerItem\n"
  },
  {
    "path": "FAQ/howto_use_different_sub_library_version.md",
    "content": "# How do I use different versions of the sub dependencies like the support libraries?\n\nThis can be really easy achieved by providing a resolutionStrategy to your build.\n\n## Sample code\nSimple add the following to your modules build.gradle. It allows you to define whatever version you need for the sub dependencies. \n\n```xml\n\nconfigurations.all {\n    resolutionStrategy.force \"com.android.support:support-v4:${versions.androidX}\"\n    resolutionStrategy.force \"com.android.support:appcompat-v7:${versions.androidX}\"\n    resolutionStrategy.force \"com.android.support:cardview-v7:${versions.androidX}\"\n    resolutionStrategy.force \"com.android.support:recyclerview-v7:${versions.androidX}\"\n    resolutionStrategy.force \"com.android.support:design:${versions.androidX}\"\n    resolutionStrategy.force \"com.android.support:support-annotations:${versions.androidX}\"\n}\n```\n\nhttps://github.com/mikepenz/MaterialDrawer/blob/develop/app/build.gradle\n"
  },
  {
    "path": "FAQ/opening-drawer-from-espresso.md",
    "content": "### Q: How to open the drawer from an instrumental test written with Espresso?\n### A: \n\nFirst, you need a add `espresso-contrib` to your project. It has the needed `DrawerActions` class.\n\n`androidTestCompile 'com.android.support.test.espresso:espresso-contrib:2.2.2'`\n\nThen, you need to open the drawer with his `openDrawer()` method and the drawer layout ID. The generated one is `R.id.material_drawer_layout`\n\n`onView(withId(R.id.material_drawer_layout)).perform(DrawerActions.open());`\n"
  },
  {
    "path": "FAQ/when_to_use_this_library.md",
    "content": "### Developer:\nSince there is MaterialDrawer in Support Library, could you give a couple of points why to use your library instead of from Support Library one?\n\n### Author:\nWell, that really depends on the use case of the drawer in this project, and which functionalities + which customizations are needed. \nThe MaterialDrawer was created long before Google came up with their drawer in the design support libraries. \n\nBasically, the one of Google is definitely great and I recommend it to being used in all cases where it is enough. I am a fan of keeping\nthings as simple as possible, as it will have the great effect on the user experience. So if this project only needs a very minimal drawer\nimplementation, with just `Main` items, no `profile` functionality, and no great flexibility (no custom items, no custom styles, ... no advanced API for doing stuff programmatically) then you should definitely consider using the one from the design library. \n\nIf you have a more advanced use case, like using the profile switcher, the profile page, custom items like different sizes, or checkboxes, etc then you might want to stay with my library. \n"
  },
  {
    "path": "FAQ.md",
    "content": "# FAQ / WIKI\n\nThis is the official **MaterialDrawer** FAQ/Wiki. People can contribute to it through pull requests.\nEach question and it's answer is hosted in a separate file within the FAQ folder.\n\n## MaterialDrawer\n\n* [Should I use this library or Material Drawer from the Support library?](FAQ/when_to_use_this_library.md)\n* [How do I make the drawer appear underneath the Toolbar?](FAQ/howto_show_drawer_under_toolbar.md)\n* [How do I create a Multi-pane layout with MaterialDrawer for tablets?](FAQ/howto_show_drawer_in_tablet_multipane.md)\n* [Why is there whitespace where the status bar should be while my theme is set as fullscreen ?](FAQ/status_bar_whitespace.md)\n* [How do I change existing or add my own CustomDrawerItems to the MaterialDrawer?](FAQ/howto_modify_add_custom_draweritems.md)\n* [How to use different dependency library versions](FAQ/howto_use_different_sub_library_version.md)\n\n## AccountHeader\n\n* [How can I use the AccountHeader with just one profile and disable the dropdown?](FAQ/accountheader_single_profile_without_dropdown.md)\n\n## Testing\n\n* [How can I open the drawer from an instrumental test written with Espresso?](FAQ/opening-drawer-from-espresso.md)\n\n\n## CustomDrawerItem's\n\n* [A custom SecondaryDrawerItem that takes different name when its on disabled state](https://gist.github.com/AngleV/400377184386193c985d905bd97f2d40)\n\n## Asked super frequently\n\n### How can i create a drawer without a default selection\n```kotlin\n//just set the selection to -1\nslider.setSelectionAtPosition(-1)\n```\n\n### Can I lock the Drawer\nAs the MaterialDrawer will just create a normal DrawerLayout (with some magic around it) everything a normal\nDrawerLayout can do is also available in the MaterialDrawer.\n```kotlin\ndrawerLayout.setDrawerLockMode(int lockMode); //or (int lockMode, int edgeGravity)\n```"
  },
  {
    "path": "Gemfile",
    "content": "# frozen_string_literal: true\n\nsource \"https://rubygems.org\"\n\ngit_source(:github) {|repo_name| \"https://github.com/#{repo_name}\" }\n\ngem 'danger'\ngem 'danger-android_lint'\ngem 'danger-kotlin_detekt'"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright 2021 Mike Penz\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"
  },
  {
    "path": "MIGRATION.md",
    "content": "### Upgrade Notes\n\n#### v8.0.0\n\n- Ground up refactor of the way the `MaterialDrawer` is used and integrated into the app.\n- Please consider carefully before upgrading to this version.\n- Prior to v8 the `Drawer` would automatically inject the `DrawerLayout` into the layout hierarchy, apply window flags, and take over control of the `ActionBarDrawerToggle`.\n  - This may seem convenient for easy usecases, but created big problems for more advanced implementations where taking over window insets is expected\n  - v8 will no longer do any of this, and gives back all the control to the developer, no more unexpected layout flags, changes to the layout hierarchy or anything similar.\n- The core principle behind v8 is to offer just the UI and give back all control to developers.\n- Additionally v8 eliminates dependencies on `Materialize`, `Android-Iconics`\n- v8 also now comes with better theming support and better dark mode support\n- As v8 is ground up different in the way it is set up it is recommended to re-read the README and check out the sample again\n- Basic upgrade procedure:\n  - Add `DrawerLayout` into your layout\n  - Add `MaterialDrawerSliderView` as child to the `DrawerLayout`\n  - Find the reference to the `MaterialDrawerSliderView` in your `Activity` / `Fragment`\n  - Use the `MaterialDrawerSliderView` to fill the list / do updates\n- Basic upgrade prodedure for the `AccountHeader`:\n  - Create an instance of the `AccountHeaderView`\n  - Attach to the slider via `attachToSliderView(slider)`\n- Additionally v8 is more optimized for Kotlin meaning all legacy `with(*)` methods were replaced (kept as extension functions as legacy support) with properties\n\n##### Note\n- Please report if additional upgrade notes are required\n\n\n#### v7.0.0\n\nNow library is kotlin-first.\n\n* this release contains a big amount of changes, including many breaking API changes to make its implementation easier, and make the APIs better compatible with kotlin. \n* please note that the interface for items changed in the `FastAdapter` as such migrating to the new version will require more effort. \n\n\n* Update `FastAdapter` to v4 and make all relevant adjustments to the provided `DrawerItem`s\n  * Check the `FastAdapter` changelog and [migration guide](https://github.com/mikepenz/FastAdapter/blob/develop/MIGRATION.md)\n* Update `Android-Iconics` to v4\n  * Ensure to update `Android-Iconics` for your project, and use the updated kotlin icon dependencies\n  * See the migration notes for `Android-Iconics` if you run into problems\n* The general interfaces and everything stayed the same, and mainly everything was migrated to kotlin\n\nIf you have any issues during the migration, or any questions come up please open a github issue so we can improve the migration guide or the documentation.\n\n#### v6.1.1\n* Further adjustments for the theme to properly meet the new material 2 design guidelines.\n```xml\n<item name=\"material_drawer_header_selection_subtext\">@color/material_drawer_header_selection_subtext</item> <!-- Defines the color of the subtext item in the header -->\n```\n\n#### v6.1.0-rc01.2\n* With the introduction of the material 2 design behaviour, new theme attributes were added.\n```xml\n<item name=\"material_drawer_selected_legacy\">@color/material_drawer_selected</item> <!-- Defines the color if legacy style (Material 1, is enabled) -->\n<item name=\"material_drawer_legacy_style\">true</item> <!-- Enables legacy Material 1 style -->\n```\n* Reworked the header views to be a lot more simple by using a `ConstraintLayout`\n  * Any previously custom headers require to be adjusted to the new structure. (The statusbar `Guideline` is required, for example)\n* The viewHolder.item has no longer the item itself as tag directly. It is now defined with an id `R.id.material_drawer_item`. `ViewHolder.itemView.getTag(R.id.material_drawer_item)` will now return the `IDrawerItem`.\n\n#### v6.1.0-rc01\n* Final upgrade to the new shiny androidX dependencies :)\n\n#### v6.0.3\n**IMPORTANT IF YOU USE THE FASTADAPTER OR ABOUTLIBRARIES**\n* You have to update your FastAdapter dependency to v3.2.1 with this release\n* See the MIGRATION information of the FastAdapter https://github.com/mikepenz/FastAdapter/blob/develop/MIGRATION.md\n\n#### v6.0.0\n**IMPORTANT IF YOU USE THE FASTADAPTER OR ABOUTLIBRARIES**\n* You have to update your FastAdapter dependency to v3.0.0 with this release\n* See the MIGRATION information of the FastAdapter https://github.com/mikepenz/FastAdapter/blob/develop/MIGRATION.md\n\n#### v5.9.0 & v5.9.2\n**IMPORTANT IF YOU USE THE FASTADAPTER OR ABOUTLIBRARIES**\n* You have to update your FastAdapter dependency to v2.5.0 with this release\n* See the MIGRATION information of the FastAdapter https://github.com/mikepenz/FastAdapter/blob/develop/MIGRATION.md\n\n#### v5.8.0\n**IMPORTANT IF YOU USE THE FASTADAPTER OR ABOUTLIBRARIES**\n* You have to update your FastAdapter dependency to v2.1.0 with this release\n* See the MIGRATION information of the FastAdapter https://github.com/mikepenz/FastAdapter/blob/develop/MIGRATION.md\n\n#### v5.7.0\n**IMPORTANT IF YOU IMPLEMENT CUSTOM-DRAWER-ITEMS OR USE THE FASTADAPTER**\n* You have to update your `FastAdapter` dependency to v2.0.0 with this release\n* If you have `CustomDrawerItem`'s not based on the `AbstractDrawerITems` make sure you implement the `unbindView` method, and the new required methods\n* See the MIGRATION information of the **FastAdapter** https://github.com/mikepenz/FastAdapter/blob/develop/MIGRATION.md\n\n#### v5.6.0\n**IMPORTANT IF YOU IMPLEMENT CUSTOM-DRAWER-ITEMS OR USE THE FASTADAPTER**\n* This release brings a breaking interface change. Your items now have to implement `bindView(ViewHolder holder, List payloads)` instead of `bindView(VH holder)`. \n * The additional payload can be used to implement a more performant view updating when only parts of the item have changed. Please also refer to the `DiffUtils` which may provide the payload.\n\n#### v5.5.1\n* add `void set(ImageView imageView, Uri uri, Drawable placeholder, String tag);` to `IDrawerImageLoader` interface, similar to the `tag` provided in the placeholder method\n\n#### v5.5.0\n* **Dropping support for API < 14. New MinSdkVersion is 14**\n\n#### v5.3.3 -> 5.3.4\n* If you use the `FastAdapter` please read the upgrade notes for v1.6.0 (https://github.com/mikepenz/FastAdapter/releases/tag/v1.6.0)\n\n#### v5.3.1 -> v5.3.2\n* the `withOnMiniDrawerItemClickListener` was renamed to `withOnMiniDrawerItemOnClickListener`\n* added new separate `OnMiniDrawerItemClickListener` which allows to hook into the default behavior, and prevent it if necessary\n * NOTE: this one now uses the `withOnMiniDrawerItemClickListener` method.\n\n#### v5.2.0 -> v5.2.1\n* the `SecondaryDrawerItem` is now a subclass of the `PrimaryDrawerItem` (extends `PrimaryDrawerItem`). If you have an `if` which checks for the type with `instanceOf` make sure you check for the `SecondaryDrawerItem` first. (`secondaryDrawerItem instanceOf PrimaryDrawerItem == true`)\n\n#### v5.1.6 -> 5.1.8\n* if you use the `FastAdapter` please check out the release notes of v1.4.0 (https://github.com/mikepenz/FastAdapter/releases/tag/v1.4.0)\n\n#### v5.0.0 -> 5.0.5\n* the `expanding` functionality is now handled by the `FastAdapter` so the toggling code is no longer needed. See the following diff for the change (just the `DrawerActivity`) https://github.com/mikepenz/MaterialDrawer/commit/88e9bdf8cccaac5aaf567ac6ffe682aeccba4f29\n\n#### v4.6.0 -> v5.0.0\n* the identifier was changed from `int` to `long` as the internal adapter (FastAdapter) uses `long` to identify items (as the `Adapter` does)\n* v5.0.0 no longer sets the `FULL_SCREEN` flag to get the drawer below the `StatusBar` it now uses the `fitsSystemWindows` everywhere. This should improve compatiblity with a lot of things like the `CoordinatorLayout` and should also improve compatiblity with future Android updates\n* removed the following methods:\n * DrawerUIUtils.getScreenWidth -> moved to UIUtils from the `Materialize` library\n * DrawerBuilder.withTranslucentStatusBarProgrammatically -> no longer necessary as we now depend on the `fitsSystemWindows` flag\n * `StatusBarColor` can now be set via the `Drawer.getDrawerLayout().setStatusBarBackgroundColor(color)`\n * DrawerBuilder.keyboardSupportEnabled -> `KeyboardUtil` should no  longer be necessary\n* `StatusBar` on **API < 21** is no longer colored, because of the changed way how we display the `Drawer` under the `StatusBar`\n* `DrawerItems` changed. Please take a look at the `CustomDrawerItems` from the sample or the default ones, to add the changes to your `CustomDrawerItems`\n* ...\n\n#### v4.5.9 -> v4.6.0\n* it is now possible to let the `Drawer` manage the `MiniDrawer`. Enable this via `withGenerateMiniDrawer(true)`. Afterwards remove the `MiniDrawer` calls inside the listeners, those are now done within the `Drawer`. You can get the `MiniDrawer` result object via `Drawer.getMiniDrawer();`\n\n#### v4.3.7 -> v4.4.3\n* added new method `withHeaderPadding` to the drawer and `withPaddingBelowHeader` to the header to control the padding separately from the `divider`which can be controlled via `withHeaderDivider`\n\n#### v4.3.7\n* depends on the latest `v23.1.0` **support libraries**. Those also require you to have `compileSDKVersion 23`\n\n#### v4.2.0 -> v4.3.0\n* new `placeholder(Context ctx, String tag)` to the `IDrawerImageLoader` interface\n* new `AbstractDrawerImageLoader` to simplify the `DrawerImageLoader` usage. See the new implementation in the `CustomApplication`\n* to keep the old behavior just change from `new DrawerImageLoader.IDrawerImageLoader() {` to `new AbstractDrawerImageLoader() {` for the `DrawerImageLoader.init`\n* add new `tag` to the placeholder, to be able to define different placeholders for different targets\n\n#### v4.2.0\n* no more need to define an identifier for the items, they get one automatically. if you do not have logics which require you to do so, you are safe to forget about the identifier now.\n\n#### v4.0.2 -> v4.0.7\n* renamed `setDivider()` to `withDivider`\n* remove `setTypeface()` use `withTypeface()` instead\n\n#### v4.0.0 -> v4.0.2\n* `getCurrentSelection()` will now return the `identifier` of the current selection or `null`\n* `getCurrentSelectedPosition()` was added\n* renamed all `*Footer*` methods to `*StickyFooter*` to prevent confusion\n\n#### < v4.0.0\n\n##### Common changes\n* depends on the latest `v23` **support libraries**. Those also require you to have `compileSDKVersion 23`\n* change the `onItemClick` listener to `onItemClick(View view, int i, IDrawerItem iDrawerItem)`\n* modify the import of the `AccountHeader` and `AccountHeaderBuilder` to\n```gradle\nimport com.mikepenz.materialdrawer.AccountHeader\nimport com.mikepenz.materialdrawer.AccountHeaderBuilder\n```\n* the `identifier` should now be set for the `DrawerItems` as it is used now as default for all update/modify/.. actions\n* rename `withCheckable()` to `withSelectable()`\n* rename `set*` methods of the `DrawerItems` to `with*` methods as those were renamed\n* rename all methods like `setSelection`, `setFooterSelection`, `removeItem`, ... to `*ByPosition` (added the **ByPosition**)\n* rename all methods like `setSelectionByIdentifier`, `setFooterSelectionByIdentifier`, ... to `setSelection`, `setFooterSelection` (removed the **ByIdentifier**)\n* change `updateName`, `updateIcon`, `updateBadge` those methods take now an `identifier` and the specific `Holder` object\n* all `get*` methods of the `DrawerItems` will now return a `Holder` object for the specific type, making it easier to work with types like `String`, `StringRes`, `Color`, `ColorRes`, `ColorInt`, ..\n\n##### Android-Iconics (icon font)\n* the MaterialDrawer now only includes the `core` of the Android-Iconics project\n * add the fonts you use https://github.com/mikepenz/Android-Iconics#2-choose-your-desired-fonts\n* pre MaterialDrawer v4.0.0 following fonts were included\n```gradle\ncompile 'com.mikepenz:google-material-typeface:1.2.0.1@aar' //Google Material Design Icons\ncompile 'com.mikepenz:fontawesome-typeface:4.4.0.1@aar' //FontAwesome **NOTE:** the packagename changed for this font\n```\n\n##### Advanced usage changes\n* changed the `ListView` to a `RecyclerView`\n * rename methods with `*ListView*` to `*RecyclerView*`\n* the `IDrawerItem` interface was extended to better reflect a `RecyclerView` and to improve performance\n * added an `AbstractDrawerItem` to implement some common methods\n * see the [SectionDrawerItem](https://github.com/mikepenz/MaterialDrawer/blob/feature/refactoring/library/src/main/java/com/mikepenz/materialdrawer/model/SectionDrawerItem.java) for an easy example\n"
  },
  {
    "path": "README.md",
    "content": "# MaterialDrawer\n\n... the flexible, easy to use, all in one drawer library for your Android project.\n\n-------\n\n<p align=\"center\">\n    <a href=\"#whats-included-\">What's included 🚀</a> &bull;\n    <a href=\"#setup\">Setup 🛠️</a> &bull;\n    <a href=\"MIGRATION.md\">Migration Guide 🧬</a> &bull;\n    <a href=\"FAQ.md\">WIKI / FAQ 📖</a> &bull;\n    <a href=\"#used-by\">Used by</a> &bull;\n    <a href=\"https://play.google.com/store/apps/details?id=com.mikepenz.materialdrawer.app\">Sample App</a>\n</p>\n\n-------\n\n### What's included 🚀\n- **the easiest possible integration**\n- **uses the androidX support libraries**\n- compatible down to **API Level 16**\n- includes an **AccountSwitcher**\n- quick and simple api\n- follows the **NEW Google Material Design Guidelines**\n- use **vector** (.svg) icons and **icon fonts** via the [Android-Iconics](https://github.com/mikepenz/Android-Iconics) integration\n - **Google Material Design Icons**, Google **Material Community** Design Icons, FontAwesome and more\n- comes with various **themes** which help to get your own themes clean\n- modify the colors on the go\n- comes with multiple default drawer items\n- based on a **RecyclerView**\n- **RTL** support\n- Gmail like **MiniDrawer**\n- expandable items\n- **badge** support\n- define custom drawer items\n- tested and **stable**\n- sticky footer or headers\n- **absolutely NO limits**\n- NavController support by @petretiandrea\n\n> If you upgrade from < 8.0.0 follow the [MIGRATION GUIDE](https://github.com/mikepenz/MaterialDrawer/blob/develop/MIGRATION.md)\n\n# Preview\n\n## Screenshots 🎉\n![Image](DEV/github/screenshots_combined.jpg)\n\n# Setup\n\n## Latest releases 🛠\n\n- Kotlin && M3 && JVM\n  17 | [v10.0.0-b01](https://github.com/mikepenz/MaterialDrawer/tree/v10.0.0-b01)\n- Kotlin && Material 3 | [v9.0.2](https://github.com/mikepenz/MaterialDrawer/tree/v9.0.2)\n- Kotlin | [v8.4.5](https://github.com/mikepenz/MaterialDrawer/tree/v8.4.5) (Provided as-is only)\n- Java && AndroidX | [v6.1.2](https://github.com/mikepenz/MaterialDrawer/tree/v6.1.2) (Provided as-is only)\n- Java && AppCompat | [v6.0.9](https://github.com/mikepenz/MaterialDrawer/tree/v6.0.9) (Provided as-is only)\n\n### 1. Provide the gradle dependency\n\nThe latest release is available\non [Maven Central](https://search.maven.org/artifact/com.mikepenz/materialdrawer/9.0.1/aar).\n\n```gradle\nimplementation(\"com.mikepenz:materialdrawer:${latestRelease}\")\n```\n\n```gradle\n//required support lib modules\nimplementation \"androidx.appcompat:appcompat:${versions.appcompat}\"\nimplementation \"androidx.recyclerview:recyclerview:${versions.recyclerView}\"\nimplementation \"androidx.annotation:annotation:${versions.annotation}\"\nimplementation \"com.google.android.material:material:1.5.0-alpha05\" // requires at least 1.5.0-x\nimplementation \"androidx.constraintlayout:constraintlayout:${versions.constraintLayout}\"\n```\n\n[NavController Support @ Maven Central](https://search.maven.org/artifact/com.mikepenz/materialdrawer-nav/9.0.1/aar).\n\n```gradle\n// Add for NavController support\nimplementation \"com.mikepenz:materialdrawer-nav:${lastestMaterialDrawerRelease}\"\n```\n\n[Android-Iconics Support @ Maven Central](https://search.maven.org/artifact/com.mikepenz/materialdrawer-iconics/9.0.1/aar)\n.\n\n```gradle\n// Add for Android-Iconics support\nimplementation \"com.mikepenz:materialdrawer-iconics:${lastestMaterialDrawerRelease}\"\n```\n\n### 2. Add the `Drawer` into the XML\n\nThe `MaterialDrawerSliderView` has to be provided as child of the `DrawerLayout` and will as such act as the slider\n\n```kotlin\n<androidx.drawerlayout.widget.DrawerLayout xmlns : android =\"http://schemas.android.com/apk/res/android\"\nxmlns:app = \"http://schemas.android.com/apk/res-auto\"\nandroid:id = \"@+id/root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\">\n\n    ... your content ...\n\n    <com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\n        android:id=\"@+id/slider\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"start\"\n        android:fitsSystemWindows=\"true\" />\n</androidx.drawerlayout.widget.DrawerLayout>\n```\n### 3. Add the `DrawerStyle` to your theme\n\n```xml\n<style name=\"SampleApp.DayNight\" parent=\"Theme.Material3.DayNight.NoActionBar\">\n    ...\n    <item name=\"materialDrawerStyle\">@style/Widget.MaterialDrawerStyle</item>\n    <item name=\"materialDrawerHeaderStyle\">@style/Widget.MaterialDrawerHeaderStyle</item>\n    ...\n</style>\n```\n\nGreat. Your drawer is now ready to use.\n\n### Note\n\n> Using v9.x with Material 3 theming requires a `Material3` theme as base for the activity.\n\n# Additional Setup\n### Add items and adding some functionality\n\n```kotlin\n//if you want to update the items at a later time it is recommended to keep it in a variable\nval item1 = PrimaryDrawerItem().apply { nameRes = R.string.drawer_item_home; identifier = 1 }\nval item2 = SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_settings; identifier = 2 }\n\n// get the reference to the slider and add the items\nslider.itemAdapter.add(\n\t    item1,\n\t    DividerDrawerItem(),\n\t    item2,\n\t    SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_settings }\n)\n\n// specify a click listener\nslider.onDrawerItemClickListener = { v, drawerItem, position ->\n    // do something with the clicked item :D\n    false\n}\n```\n\n### Selecting an item\n```kotlin\n//set the selection to the item with the identifier 1\nslider.setSelection(1)\n//set the selection to the item with the identifier 2\nslider.setSelection(item2)\n//set the selection and also fire the `onItemClick`-listener\nslider.setSelection(1, true)\n```\n\nBy default, when a drawer item is clicked, it becomes the new selected item. If this isn't the expected behavior,\nyou can disable it for this item using `isSelectable = false`:\n```kotlin\nSecondaryDrawerItem().apply { nameRes = R.string.drawer_item_dialog; isSelectable = false }\n```\n\n### Modify items or the drawer\n\n```kotlin\n//modify an item of the drawer\nitem1.apply {\n  nameText = \"A new name for this drawerItem\"; badge = StringHolder(\"19\")\n  badgeStyle = BadgeStyle().apply { textColor = ColorHolder.fromColor(Color.WHITE); color = ColorHolder.fromColorRes(R.color.md_red_700) }\n}\n//notify the drawer about the updated element. it will take care about everything else\nslider.updateItem(item1)\n\n//to update only the name, badge, icon you can also use one of the quick methods\nslider.updateName(1, \"A new name\")\n\n//the result object also allows you to add new items, remove items, add footer, sticky footer, ..\nslider.addItem(DividerDrawerItem())\nslider.addStickyFooterItem(PrimaryDrawerItem().apply { nameTest = \"StickyFooter\" })\n\n//remove items with an identifier\nslider.removeItem(2)\n\n//open / close the drawer\nslider.drawerLayout?.openDrawer(slider)\nslider.drawerLayout?.closeDrawer(slider)\n\n//get the reference to the `DrawerLayout` itself\nslider.drawerLayout\n```\n\n### Add profiles and an AccountHeader\n```kotlin\n// Create the AccountHeader\nheaderView = AccountHeaderView(this).apply {\n    attachToSliderView(slider) // attach to the slider\n    addProfiles(\n        ProfileDrawerItem().apply { nameText = \"Mike Penz\"; descriptionText = \"mikepenz@gmail.com\"; iconRes = R.drawable.profile; identifier = 102 }\n    )\n    onAccountHeaderListener = { view, profile, current ->\n        // react to profile changes\n        false\n    }\n    withSavedInstance(savedInstanceState)\n}\n```\n\n### Android-Iconics support\nThe MaterialDrawer provides an extension for the [Android-Iconics](https://github.com/mikepenz/Android-Iconics) library. This allows you to create your `DrawerItems` with an icon from any font.\n\nChoose the fonts you need. [Available Fonts](https://github.com/mikepenz/Android-Iconics#2-choose-your-desired-fonts)\n\n```gradle\n// Add for Android-Iconics support\nimplementation \"com.mikepenz:materialdrawer-iconics:${lastestMaterialDrawerRelease}\"\n\n// fonts\nimplementation 'com.mikepenz:google-material-typeface:x.y.z@aar' //Google Material Icons\nimplementation 'com.mikepenz:fontawesome-typeface:x.y.z@aar'     //FontAwesome\n```\n\n```kotlin\n//now you can simply use any icon of the Google Material Icons font\nPrimaryDrawerItem().apply { iconicsIcon = GoogleMaterial.Icon.gmd_wb_sunny }\n//Or an icon from FontAwesome\nSecondaryDrawerItem().apply { iconicsIcon = FontAwesomeBrand.Icon.fab_github }\n```\n\n# Advanced Setup\n\nFor advanced usecases. Please have a look at the provided sample activities.\n\n## Load images via url\nThe MaterialDrawer supports fetching images from URLs and setting them for the Profile icons. As the MaterialDrawer does not contain an ImageLoading library\nthe dev can choose his own implementation (Picasso, Glide, ...). This has to be done, before the first image should be loaded via URL. (Should be done in the Application, but any other spot before loading the first image is working too)\n* SAMPLE using [PICASSO](https://github.com/square/picasso)\n* [SAMPLE](https://github.com/mikepenz/MaterialDrawer/blob/develop/app/src/main/java/com/mikepenz/materialdrawer/app/CustomApplication.kt) using [GLIDE](https://github.com/bumptech/glide)\n\n```kotlin\n//initialize and create the image loader logic\nDrawerImageLoader.init(object : AbstractDrawerImageLoader() {\n    override fun set(imageView: ImageView, uri: Uri, placeholder: Drawable) {\n        Picasso.get().load(uri).placeholder(placeholder).into(imageView)\n    }\n\n    override fun cancel(imageView: ImageView) {\n        Picasso.get().cancelRequest(imageView)\n    }\n    \n    /*\n    override fun set(imageView: ImageView, uri: Uri, placeholder: Drawable, tag: String?) {\n        super.set(imageView, uri, placeholder, tag)\n    }\n\n    override fun placeholder(ctx: Context): Drawable {\n        return super.placeholder(ctx)\n    }\n\n    override fun placeholder(ctx: Context, tag: String?): Drawable {\n        return super.placeholder(ctx, tag)\n    }\n    */\n})\n```\n\nAn implementation with [GLIDE v4](https://github.com/mikepenz/MaterialDrawer/blob/develop/app/src/main/java/com/mikepenz/materialdrawer/app/CustomApplication.kt) (See tag v6.1.1 for glide v3 sample) can be found in the sample application\n\n## JVM Target 1.8\n\n```\n// Since 8.1.0 the drawer includes core ktx 1.3.0 which requires jvm 1.8\nkotlinOptions {\n    jvmTarget = \"1.8\"\n}\n```\n## Style the drawer 🖌️\n\n### Custom style - styles.xml\nCreate your custom style. If you don't need a custom theme see the next section, how you can set the colors just by overwriting the original colors.\n\n```xml\n// define a custom drawer style\n<style name=\"Widget.MaterialDrawerStyleCustom\" parent=\"Widget.MaterialDrawerStyle\">\n    <item name=\"materialDrawerInsetForeground\">#4000</item>\n    <!-- MaterialDrawer specific values -->\n    <item name=\"materialDrawerBackground\">?colorSurface</item>\n    <item name=\"materialDrawerPrimaryText\">@color/color_drawer_item_text</item>\n    <item name=\"materialDrawerPrimaryIcon\">@color/color_drawer_item_text</item>\n    <item name=\"materialDrawerSecondaryText\">@color/color_drawer_item_text</item>\n    <item name=\"materialDrawerSecondaryIcon\">@color/color_drawer_item_text</item>\n    <item name=\"materialDrawerDividerColor\">?colorOutline</item>\n    <item name=\"materialDrawerSelectedBackgroundColor\">?colorSecondaryContainer</item>\n</style>\n\n// define a custom header style\n<style name=\"Widget.MaterialDrawerHeaderStyleCustom\" parent=\"\">\n    <item name=\"materialDrawerCompactStyle\">true</item>\n    <item name=\"materialDrawerHeaderSelectionText\">?colorOnSurface</item>\n    <item name=\"materialDrawerHeaderSelectionSubtext\">?colorOnSurface</item>\n</style>\n\n// define the custom styles for the theme\n<style name=\"SampleApp\" parent=\"Theme.Material3.Light.NoActionBar\">\n    ...\n    <item name=\"materialDrawerStyle\">@style/Widget.MaterialDrawerStyleCustom</item>\n    <item name=\"materialDrawerHeaderStyle\">@style/Widget.MaterialDrawerHeaderStyleCustom</item>\n    ...\n</style>\n```\n\n### Adjust BezelImageView style\n\nOverwrite the Style of the BezelImageView for the whole MaterialDrawer\n   \n```xml\n<style name=\"BezelImageView\">\n    <item name=\"biv_maskDrawable\">@drawable/material_drawer_rectangle_mask</item>\n    <item name=\"biv_drawCircularShadow\">false</item>\n    <item name=\"biv_selectorOnPress\">@color/material_drawer_primary</item>\n    <item name=\"android:scaleType\">centerInside</item>\n</style>\n```\n\n# Used by\n(feel free to send me new projects)\n\n* [Screener](https://play.google.com/store/apps/details?id=de.toastcode.screener)\n* [Meldmail](https://play.google.com/store/apps/details?id=com.meldmail)\n* [Academic Schedule](https://play.google.com/store/apps/details?id=com.auebcsschedule.ppt)\n* [Sprit Club](https://play.google.com/store/apps/details?id=at.idev.spritpreise)\n* [StickyNotes](https://play.google.com/store/apps/details?id=com.jsvmsoft.stickynotes)\n* [MLManager](https://github.com/javiersantos/MLManager)\n* [Fimpl](https://play.google.com/store/apps/details?id=com.danielZET.fimpl)\n* [Teacher Gradebook](https://play.google.com/store/apps/details?id=com.apolosoft.cuadernoprofesor)\n* [AS Sales Management](https://play.google.com/store/apps/details?id=com.armsoft.mtrade)\n* [Sporza Voetbal](http://play.google.com/store/apps/details?id=be.vrt.mobile.android.sporza.voetbal)\n* [Atmosphere](https://play.google.com/store/apps/details?id=com.peakpocketstudios.atmosphere)\n* [Fitness Challenge](https://play.google.com/store/apps/details?id=com.isidroid.fitchallenge)\n* [I'm Reading Quran - Kur'an Okuyorum](https://play.google.com/store/apps/details?id=com.homemade.kuranokuma)\n* [Makota Money Manager](https://play.google.com/store/apps/details?id=be.jatra.makota)\n* [Companion for Band](https://github.com/adithya321/Companion-for-Band)\n* [Recipedia](https://play.google.com/store/apps/details?id=com.md.recipedia)\n* [Right Сourse - ruble course](https://play.google.com/store/apps/details?id=com.currency.work.currencychecker)\n* [Gameru](https://play.google.com/store/apps/details?id=net.gameru)\n* [Boost for reddit](https://play.google.com/store/apps/details?id=com.rubenmayayo.reddit)\n* [Calendula](https://github.com/citiususc/calendula)\n* [MyTimes](https://github.com/debo1994/MyTimes)\n* [VoIP By Antisip](https://play.google.com/store/apps/details?id=com.antisip.vbyantisip)\n* [MBox - One Place for Entertainment](https://play.google.com/store/apps/details?id=com.paperwrrk.android.mbox)\n* [D Notes - Smart and Material Note Taking](https://play.google.com/store/apps/details?id=com.dvdb.bergnotes)\n* [Moviebase](https://play.google.com/store/apps/details?id=com.moviebase)\n* [MyFuelLog2](https://play.google.com/store/apps/details?id=com.acty.myfuellog2)\n* [MECSol](https://play.google.com/store/apps/details?id=tk.rlta.mecsol)\n* [3D Geeks: Thingiverse Browser for 3D Printing](https://play.google.com/store/apps/details?id=work.twob.threed)\n* [Tusky: Mastodon Client for Android](https://github.com/tuskyapp/Tusky)\n* [Tibia Live](https://tibia.space/)\n* [Walkaholic](https://play.google.com/store/apps/details?id=com.walkaholic.hikeapp)\n* [Pachli: Mastodon Client](https://pachli.app)\n\n# Articles about the MaterialDrawer\n* [java-help.ru - MaterialDrawer tutorial](http://java-help.ru/material-navigationdrawer/)\n* [MaterialDrawer in multiple activities](https://android.jlelse.eu/android-using-navigation-drawer-across-multiple-activities-the-easiest-way-b011f152aebd)\n\n\n# Credits\n\n- Mirosław Stanek - [GitHub](https://github.com/frogermcs)\n\t- For his InstaMaterial concept and the idea of inflating the drawerLayout [InstaMaterial Concept](http://frogermcs.github.io/InstaMaterial-concept-part-7-navigation-drawer/)\n\n- Lunae Luman - [Behance](https://www.behance.net/gallery/18526001/Material-Wallpaper) for the Header Image\n\n# Developed By\n\n- Mike Penz\n  - [mikepenz.dev](https://mikepenz.dev) - [blog.mikepenz.dev](https://blog.mikepenz.dev) - <mikepenz@gmail.com>\n  - [paypal.me/mikepenz](http://paypal.me/mikepenz)\n  - [Automatic changelog generation action](https://github.com/marketplace/actions/release-changelog-builder)\n\n# License\n\n    Copyright 2021 Mike Penz\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"
  },
  {
    "path": "app/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "app/build.gradle.kts",
    "content": "plugins {\n    id(\"com.mikepenz.convention.android-application\")\n    id(\"com.mikepenz.convention.kotlin\")\n    id(\"com.mikepenz.aboutlibraries.plugin\")\n    id(\"androidx.navigation.safeargs.kotlin\")\n}\n\nandroid {\n    namespace = \"com.mikepenz.materialdrawer.app\"\n\n    defaultConfig {\n        multiDexEnabled = true\n        setProperty(\"archivesBaseName\", \"MaterialDrawer-v$versionName-c$versionCode\")\n    }\n\n    productFlavors {\n    }\n\n    buildFeatures {\n        viewBinding = true\n    }\n\n    packaging {\n        resources {\n            excludes.add(\"META-INF/library-core_release.kotlin_module\")\n            excludes.add(\"META-INF/library_release.kotlin_module\")\n        }\n    }\n}\n\ndependencies {\n    implementation(project(\":materialdrawer\"))\n    implementation(project(\":materialdrawer-iconics\"))\n    implementation(project(\":materialdrawer-nav\"))\n\n    implementation(libs.google.material)\n\n    implementation(libs.androidx.cardView)\n    implementation(libs.androidx.recyclerView)\n    implementation(libs.androidx.navigation.fragment)\n    implementation(libs.androidx.navigation.ui)\n\n    // used to showcase how to load images\n    implementation(\"io.coil-kt:coil:2.7.0\")\n\n    //used to provide different itemAnimators for the RecyclerView\n    //https://github.com/mikepenz/ItemAnimators\n    implementation(libs.itemAnimators.core)\n\n    // used to provide out of the box icon font support. simplifies development,\n    // and provides scalable icons. the core is very very light\n    // https://github.com/mikepenz/Android-Iconics\n    implementation(libs.iconics.core)\n\n    // used to generate the Open Source section\n    // https://github.com/mikepenz/AboutLibraries\n    implementation(baseLibs.aboutlibraries.view)\n\n    // used to provide the MiniDrawer to normal Drawer crossfade effect via a SlidingPane layout\n    // --> https://github.com/mikepenz/MaterialDrawer/blob/develop/app/src/main/java/com/mikepenz/materialdrawer/app/MiniDrawerActivity.java\n    // https://github.com/mikepenz/Crossfader\n    implementation(\"com.mikepenz:crossfader:1.6.0@aar\")\n    // used to provide the two step crossfade DrawerLayout. Which allows to have a mini layout which transforms to a normal layout within the drawer\n    // --> https://github.com/mikepenz/MaterialDrawer/blob/develop/app/src/main/java/com/mikepenz/materialdrawer/app/CrossfadeDrawerLayoutActvitiy.java\n    // https://github.com/mikepenz/CrossfadeDrawerLayout\n    implementation(\"com.mikepenz:crossfadedrawerlayout:1.1.0@aar\")\n\n    // icon fonts used inside the sample\n    // https://github.com/mikepenz/Android-Iconics\n    implementation(\"com.mikepenz:google-material-typeface:4.0.0.2-kotlin@aar\")\n    implementation(\"com.mikepenz:fontawesome-typeface:5.13.3.0-kotlin@aar\")\n    implementation(\"com.mikepenz:octicons-typeface:11.1.0.0-kotlin@aar\")\n\n\n    implementation(\"androidx.multidex:multidex:2.0.1\")\n\n    implementation(\"androidx.slidingpanelayout:slidingpanelayout:1.1.0\") {\n        version {\n            strictly(\"1.1.0\")\n        }\n    }\n    implementation(\"androidx.swiperefreshlayout:swiperefreshlayout:1.1.0\")\n\n\n}\n\nconfigurations.configureEach {\n    resolutionStrategy.force(libs.fastAdapter.core)\n    resolutionStrategy.force(libs.iconics.core)\n}"
  },
  {
    "path": "app/gradle.properties",
    "content": "com.mikepenz.compose.enabled=false"
  },
  {
    "path": "app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /Entwicklung/android-sdk/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the proguardFiles\n# directive in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\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"
  },
  {
    "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.INTERNET\" />\n\n    <application\n        android:name=\".CustomApplication\"\n        android:allowBackup=\"true\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:roundIcon=\"@mipmap/ic_launcher_round\"\n        android:theme=\"@style/SampleApp.DayNight\"\n        tools:ignore=\"GoogleAppIndexingWarning\">\n        <!-- android:supportsRtl=\"true\" -->\n        <activity\n            android:name=\".DrawerActivity\"\n            android:label=\"@string/app_name\"\n            android:exported=\"true\"\n            android:theme=\"@style/SampleApp.DayNight\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n        <activity\n            android:name=\".CompactHeaderDrawerActivity\"\n            android:label=\"@string/app_name\"\n            android:theme=\"@style/SampleApp.DayNight.Compact\" />\n        <activity\n            android:name=\".PersistentDrawerActivity\"\n            android:label=\"@string/app_name\"\n            android:theme=\"@style/SampleApp.DayNight.Persistent\" />\n        <activity\n            android:name=\".ActionBarActivity\"\n            android:theme=\"@style/SampleApp.DayNight.DarkActionBar\" />\n        <activity\n            android:name=\".MenuDrawerActivity\"\n            android:theme=\"@style/SampleApp.DayNight\" />\n        <activity\n            android:name=\".MultiDrawerActivity\"\n            android:theme=\"@style/SampleApp.DayNight\" />\n        <activity\n            android:name=\".AdvancedActivity\"\n            android:theme=\"@style/SampleApp.DayNight\" />\n        <activity\n            android:name=\".EmbeddedDrawerActivity\"\n            android:theme=\"@style/SampleApp.DayNight\" />\n        <activity\n            android:name=\".MiniDrawerActivity\"\n            android:theme=\"@style/SampleApp.DayNight\" />\n        <activity\n            android:name=\".FullscreenDrawerActivity\"\n            android:theme=\"@style/SampleApp.DayNight\" />\n        <activity\n            android:name=\".FragmentActivity\"\n            android:theme=\"@style/SampleApp.DayNight\" />\n        <activity\n            android:name=\".CollapsingToolbarActivity\"\n            android:theme=\"@style/SampleApp.DayNight\" />\n        <activity\n            android:name=\".CrossfadeDrawerLayoutActvitiy\"\n            android:theme=\"@style/SampleApp.DayNight\" />\n        <activity\n            android:name=\".NavControllerActivity\"\n            android:label=\"NavControllerExample\"\n            android:theme=\"@style/SampleApp.DayNight\" />\n    </application>\n\n</manifest>"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/ActionBarActivity.kt",
    "content": "package com.mikepenz.materialdrawer.app\n\nimport android.os.Bundle\nimport android.view.MenuItem\nimport android.widget.Toast\nimport androidx.appcompat.app.AppCompatActivity\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesome\nimport com.mikepenz.materialdrawer.app.databinding.ActivitySampleActionbarBinding\nimport com.mikepenz.materialdrawer.iconics.iconicsIcon\nimport com.mikepenz.materialdrawer.model.PrimaryDrawerItem\nimport com.mikepenz.materialdrawer.model.SecondaryDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.Nameable\nimport com.mikepenz.materialdrawer.model.interfaces.nameRes\n\nclass ActionBarActivity : AppCompatActivity() {\n    private lateinit var binding: ActivitySampleActionbarBinding\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        //supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);\n        super.onCreate(savedInstanceState)\n        binding = ActivitySampleActionbarBinding.inflate(layoutInflater).also {\n            setContentView(it.root)\n        }\n        setTitle(R.string.drawer_item_action_bar_drawer)\n\n        binding.slider.apply {\n            itemAdapter.add(\n                    PrimaryDrawerItem().apply {\n                        nameRes = R.string.drawer_item_home\n                        iconicsIcon = FontAwesome.Icon.faw_home\n                    },\n                    SecondaryDrawerItem().apply {\n                        nameRes = R.string.drawer_item_settings\n                        iconicsIcon = FontAwesome.Icon.faw_cog\n                    }\n            )\n            onDrawerItemClickListener = { _, drawerItem, _ ->\n                if (drawerItem is Nameable) {\n                    Toast.makeText(this@ActionBarActivity, (drawerItem as Nameable).name!!.getText(this@ActionBarActivity), Toast.LENGTH_SHORT).show()\n                }\n                false\n            }\n            setSavedInstance(savedInstanceState)\n        }\n\n        supportActionBar?.setDisplayHomeAsUpEnabled(true)\n        supportActionBar?.setHomeButtonEnabled(false)\n    }\n\n    override fun onSaveInstanceState(_outState: Bundle) {\n        //add the values which need to be saved from the drawer to the bundle\n        super.onSaveInstanceState(binding.slider.saveInstanceState(_outState))\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        return when (item.itemId) {\n            android.R.id.home -> {\n                onBackPressed()\n                true\n            }\n            else -> super.onOptionsItemSelected(item)\n        }\n    }\n\n    override fun onBackPressed() {\n        //handle the back press :D close the drawer first and if the drawer is closed close the activity\n        if (binding.root.isDrawerOpen(binding.slider)) {\n            binding.root.closeDrawer(binding.slider)\n        } else {\n            super.onBackPressed()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/AdvancedActivity.kt",
    "content": "package com.mikepenz.materialdrawer.app\n\nimport android.content.res.Configuration\nimport android.os.Bundle\nimport android.view.Menu\nimport android.view.MenuItem\nimport android.widget.Toast\nimport androidx.appcompat.app.ActionBarDrawerToggle\nimport androidx.appcompat.app.AppCompatActivity\nimport androidx.appcompat.widget.PopupMenu\nimport com.mikepenz.iconics.IconicsDrawable\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesome\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesomeBrand\nimport com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial\nimport com.mikepenz.iconics.utils.actionBar\nimport com.mikepenz.iconics.utils.backgroundColorRes\nimport com.mikepenz.iconics.utils.paddingDp\nimport com.mikepenz.iconics.utils.sizeDp\nimport com.mikepenz.materialdrawer.app.databinding.ActivitySampleBinding\nimport com.mikepenz.materialdrawer.app.drawerItems.CustomPrimaryDrawerItem\nimport com.mikepenz.materialdrawer.app.drawerItems.CustomUrlPrimaryDrawerItem\nimport com.mikepenz.materialdrawer.app.drawerItems.OverflowMenuDrawerItem\nimport com.mikepenz.materialdrawer.holder.ColorHolder\nimport com.mikepenz.materialdrawer.holder.ImageHolder\nimport com.mikepenz.materialdrawer.holder.StringHolder\nimport com.mikepenz.materialdrawer.iconics.iconicsIcon\nimport com.mikepenz.materialdrawer.model.*\nimport com.mikepenz.materialdrawer.model.interfaces.*\nimport com.mikepenz.materialdrawer.util.addStickyDrawerItems\nimport com.mikepenz.materialdrawer.widget.AccountHeaderView\n\nclass AdvancedActivity : AppCompatActivity() {\n    private lateinit var binding: ActivitySampleBinding\n\n    private lateinit var headerView: AccountHeaderView\n    private lateinit var actionBarDrawerToggle: ActionBarDrawerToggle\n\n    private lateinit var profile: IProfile\n    private lateinit var profile2: IProfile\n    private lateinit var profile3: IProfile\n    private lateinit var profile4: IProfile\n    private lateinit var profile5: IProfile\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        binding = ActivitySampleBinding.inflate(layoutInflater).also {\n            setContentView(it.root)\n        }\n\n        // Handle Toolbar\n        setSupportActionBar(binding.toolbar)\n        supportActionBar?.setDisplayHomeAsUpEnabled(true)\n        supportActionBar?.setHomeButtonEnabled(true)\n        supportActionBar?.setTitle(R.string.drawer_item_advanced_drawer)\n\n        actionBarDrawerToggle = ActionBarDrawerToggle(this, binding.root, binding.toolbar, com.mikepenz.materialdrawer.R.string.material_drawer_open, com.mikepenz.materialdrawer.R.string.material_drawer_close)\n\n        // Create a few sample profile\n        profile = ProfileDrawerItem().apply { nameText = \"Mike Penz\"; descriptionText = \"mikepenz@gmail.com\"; iconRes = R.drawable.profile }\n        profile2 = ProfileDrawerItem().apply { nameText = \"Max Muster\"; descriptionText = \"max.mustermann@gmail.com\"; iconRes = R.drawable.profile2; identifier = 2 }\n        profile3 = ProfileDrawerItem().apply { nameText = \"Felix House\"; descriptionText = \"felix.house@gmail.com\"; iconRes = R.drawable.profile3 }\n        profile4 = ProfileDrawerItem().apply { nameText = \"Mr. X\"; descriptionText = \"mister.x.super@gmail.com\"; iconRes = R.drawable.profile4; identifier = 4 }\n        profile5 = ProfileDrawerItem().apply { nameText = \"Batman\"; descriptionText = \"batman@gmail.com\"; iconRes = R.drawable.profile5 }\n\n        // Create the AccountHeader\n        buildHeader(false, savedInstanceState)\n\n        binding.slider.apply {\n            itemAdapter.add(\n                    PrimaryDrawerItem().apply { nameRes = R.string.drawer_item_home; iconicsIcon = FontAwesome.Icon.faw_home },\n                    //here we use a customPrimaryDrawerItem we defined in our sample app\n                    //this custom DrawerItem extends the PrimaryDrawerItem so it just overwrites some methods\n                    OverflowMenuDrawerItem().apply {\n                        nameRes = R.string.drawer_item_menu_drawer_item; descriptionRes = R.string.drawer_item_menu_drawer_item_desc; menu = R.menu.fragment_menu\n                        onMenuItemClickListener = PopupMenu.OnMenuItemClickListener { item ->\n                            Toast.makeText(this@AdvancedActivity, item.title, Toast.LENGTH_SHORT).show()\n                            false\n                        }\n                        iconicsIcon = GoogleMaterial.Icon.gmd_filter_center_focus\n                    },\n                CustomPrimaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_free_play; iconicsIcon = FontAwesome.Icon.faw_gamepad; background =\n                    ColorHolder.fromColorRes(R.color.colorAccent)\n                },\n                PrimaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_custom; descriptionText = \"This is a description\"; iconicsIcon = FontAwesome.Icon.faw_eye\n                },\n                CustomUrlPrimaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_fragment_drawer; description = StringHolder(R.string.drawer_item_fragment_drawer_desc); iconUrl =\n                    \"https://avatars3.githubusercontent.com/u/1476232?v=3&s=460\"\n                },\n                SectionDrawerItem().apply { nameRes = R.string.drawer_item_section_header },\n                SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_settings; iconicsIcon = FontAwesome.Icon.faw_cart_plus },\n                SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_help; iconicsIcon = FontAwesome.Icon.faw_database; isEnabled = false },\n                SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_open_source; iconicsIcon = FontAwesomeBrand.Icon.fab_github },\n                SecondaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_contact; tag = \"Bullhorn\"; iconDrawable =\n                    IconicsDrawable(this@AdvancedActivity, GoogleMaterial.Icon.gmd_add).apply { actionBar(); paddingDp = 5 }; isIconTinted = true\n                },\n                SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_help; iconicsIcon = FontAwesome.Icon.faw_question; isEnabled = false }\n            )\n            addStickyDrawerItems(\n                    SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_settings; iconicsIcon = FontAwesome.Icon.faw_cog; identifier = 10 },\n                SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_open_source; iconicsIcon = FontAwesomeBrand.Icon.fab_github }\n            )\n            onDrawerItemClickListener = { _, drawerItem, _ ->\n                if (drawerItem is Nameable) {\n                    Toast.makeText(this@AdvancedActivity, drawerItem.name?.getText(this@AdvancedActivity), Toast.LENGTH_SHORT).show()\n                }\n                false\n            }\n            setSavedInstance(savedInstanceState)\n        }\n    }\n\n    /**\n     * small helper method to reuse the logic to build the AccountHeader\n     * this will be used to replace the header of the drawer with a compact/normal header\n     *\n     * @param compact\n     * @param savedInstanceState\n     */\n    private fun buildHeader(compact: Boolean, savedInstanceState: Bundle?) {\n        // Create the AccountHeader\n        headerView = AccountHeaderView(this, compact = compact).apply {\n            attachToSliderView(binding.slider)\n            headerBackground = ImageHolder(R.drawable.header)\n            addProfiles(\n                    profile,\n                    profile2,\n                    profile3,\n                    profile4,\n                    profile5,\n                    //don't ask but google uses 14dp for the add account icon in gmail but 20dp for the normal icons (like manage account)\n                    ProfileSettingDrawerItem().apply { nameText = \"Add Account\"; descriptionText = \"Add new GitHub Account\"; iconDrawable = IconicsDrawable(this@AdvancedActivity, GoogleMaterial.Icon.gmd_add).apply { actionBar(); paddingDp = 5 }; identifier = PROFILE_SETTING.toLong() },\n                    ProfileSettingDrawerItem().apply { nameText = \"Manage Account\"; iconicsIcon = GoogleMaterial.Icon.gmd_settings }\n            )\n            onAccountHeaderListener = { _, profile, _ ->\n                //sample usage of the onProfileChanged listener\n                //if the clicked item has the identifier 1 add a new profile ;)\n                if (profile is IDrawerItem<*> && (profile as IDrawerItem<*>).identifier == PROFILE_SETTING.toLong()) {\n                    val newProfile = ProfileDrawerItem().apply { nameText = \"Batman\"; descriptionText = \"batman@gmail.com\"; iconRes = R.drawable.profile5; isNameShown = true }\n                    val profiles = headerView.profiles\n                    if (profiles != null) {\n                        //we know that there are 2 setting elements. set the new profile above them ;)\n                        headerView.addProfile(newProfile, profiles.size - 2)\n                    } else {\n                        headerView.addProfiles(newProfile)\n                    }\n                }\n\n                //false if you have not consumed the event and it should close the drawer\n                false\n            }\n            withSavedInstance(savedInstanceState)\n        }\n    }\n\n    override fun onConfigurationChanged(newConfig: Configuration) {\n        super.onConfigurationChanged(newConfig)\n        actionBarDrawerToggle.onConfigurationChanged(newConfig)\n    }\n\n    override fun onPostCreate(savedInstanceState: Bundle?) {\n        super.onPostCreate(savedInstanceState)\n        actionBarDrawerToggle.syncState()\n    }\n\n    override fun onCreateOptionsMenu(menu: Menu): Boolean {\n        val inflater = menuInflater\n        inflater.inflate(R.menu.main, menu)\n        return true\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        // Handle item selection\n        when (item.itemId) {\n            R.id.menu_1 -> {\n                //update the profile2 and set a new image.\n                profile2.iconDrawable = IconicsDrawable(this, GoogleMaterial.Icon.gmd_android).apply { backgroundColorRes = R.color.colorAccent; paddingDp = 4; sizeDp = 48 }\n                headerView.updateProfile(profile2)\n                return true\n            }\n            R.id.menu_4 -> {\n                //we want to replace our current header with a compact header\n                //build the new compact header\n                buildHeader(true, null)\n                return true\n            }\n            R.id.menu_5 -> {\n                //we want to replace our current header with a normal header\n                //build the new compact header\n                buildHeader(false, null)\n                binding.slider.invalidate()\n                return true\n            }\n            else -> {\n                return actionBarDrawerToggle.onOptionsItemSelected(item)\n            }\n        }\n    }\n\n    override fun onSaveInstanceState(_outState: Bundle) {\n        var outState = _outState\n        //add the values which need to be saved from the drawer to the bundle\n        outState = binding.slider.saveInstanceState(outState)\n\n        //add the values which need to be saved from the accountHeader to the bundle\n        outState = headerView.saveInstanceState(outState)\n        super.onSaveInstanceState(outState)\n    }\n\n    override fun onBackPressed() {\n        //handle the back press :D close the drawer first and if the drawer is closed close the activity\n        if (binding.root.isDrawerOpen(binding.slider)) {\n            binding.root.closeDrawer(binding.slider)\n        } else {\n            super.onBackPressed()\n        }\n    }\n\n    companion object {\n        private const val PROFILE_SETTING = 1\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/CollapsingToolbarActivity.kt",
    "content": "package com.mikepenz.materialdrawer.app\r\n\r\nimport android.graphics.Color\r\nimport android.os.Bundle\r\nimport androidx.appcompat.app.AppCompatActivity\r\nimport coil.load\r\nimport com.mikepenz.iconics.IconicsDrawable\r\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesome\r\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesomeBrand\r\nimport com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial\r\nimport com.mikepenz.iconics.utils.actionBar\r\nimport com.mikepenz.iconics.utils.colorInt\r\nimport com.mikepenz.materialdrawer.app.databinding.ActivitySampleCollapsingToolbarBinding\r\nimport com.mikepenz.materialdrawer.app.utils.convertDpToPixel\r\nimport com.mikepenz.materialdrawer.holder.ImageHolder\r\nimport com.mikepenz.materialdrawer.iconics.iconicsIcon\r\nimport com.mikepenz.materialdrawer.model.PrimaryDrawerItem\r\nimport com.mikepenz.materialdrawer.model.SecondaryDrawerItem\r\nimport com.mikepenz.materialdrawer.model.SectionDrawerItem\r\nimport com.mikepenz.materialdrawer.model.interfaces.nameRes\r\nimport com.mikepenz.materialdrawer.util.removeAllItems\r\nimport com.mikepenz.materialdrawer.widget.AccountHeaderView\r\nimport com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\r\n\r\nclass CollapsingToolbarActivity : AppCompatActivity() {\r\n    private lateinit var binding: ActivitySampleCollapsingToolbarBinding\r\n\r\n    private lateinit var headerView: AccountHeaderView\r\n\r\n    override fun onCreate(savedInstanceState: Bundle?) {\r\n        super.onCreate(savedInstanceState)\r\n        binding = ActivitySampleCollapsingToolbarBinding.inflate(layoutInflater).also {\r\n            setContentView(it.root)\r\n        }\r\n\r\n        setSupportActionBar(binding.toolbar)\r\n        binding.collapsingToolbar.title = getString(R.string.drawer_item_collapsing_toolbar_drawer)\r\n\r\n        binding.materialDrawerSwipeRefresh.setProgressViewOffset(true, 0, convertDpToPixel(48f, this).toInt())\r\n        binding.materialDrawerSwipeRefresh.setOnRefreshListener {\r\n            binding.materialDrawerSwipeRefresh.postDelayed({\r\n                binding.slider.setDrawerItems()\r\n                binding.slider.setSelection(5, false)\r\n                binding.materialDrawerSwipeRefresh.isRefreshing = false\r\n            }, 3000)\r\n        }\r\n\r\n        // Create the AccountHeader\r\n        headerView = AccountHeaderView(this).apply {\r\n            attachToSliderView(binding.slider)\r\n            headerBackground = ImageHolder(R.drawable.header)\r\n            withSavedInstance(savedInstanceState)\r\n        }\r\n\r\n        binding.slider.apply {\r\n            setDrawerItems()\r\n            setSelection(1, false)\r\n            setSavedInstance(savedInstanceState)\r\n        }\r\n\r\n        fillFab()\r\n        loadBackdrop()\r\n    }\r\n\r\n    private fun MaterialDrawerSliderView.setDrawerItems() {\r\n        removeAllItems()\r\n        itemAdapter.add(\r\n            PrimaryDrawerItem().apply { nameRes = R.string.drawer_item_home; iconicsIcon = FontAwesome.Icon.faw_home; identifier = 1 },\r\n            PrimaryDrawerItem().apply { nameRes = R.string.drawer_item_free_play; iconicsIcon = FontAwesome.Icon.faw_gamepad },\r\n            PrimaryDrawerItem().apply { nameRes = R.string.drawer_item_custom; iconicsIcon = FontAwesome.Icon.faw_eye; identifier = 5 },\r\n            SectionDrawerItem().apply { nameRes = R.string.drawer_item_section_header },\r\n            SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_settings; iconicsIcon = FontAwesome.Icon.faw_cog },\r\n            SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_help; iconicsIcon = FontAwesome.Icon.faw_question; isEnabled = false },\r\n            SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_open_source; iconicsIcon = FontAwesomeBrand.Icon.fab_github },\r\n            SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_contact; iconicsIcon = FontAwesome.Icon.faw_bullhorn }\r\n        )\r\n    }\r\n\r\n    private fun loadBackdrop() {\r\n        binding.backdrop.load(\"https://unsplash.it/600/300/?random\")\r\n    }\r\n\r\n    private fun fillFab() {\r\n        binding.floatingActionButton.setImageDrawable(IconicsDrawable(this, GoogleMaterial.Icon.gmd_favorite).apply { actionBar(); colorInt = Color.WHITE })\r\n    }\r\n\r\n    override fun onSaveInstanceState(_outState: Bundle) {\r\n        var outState = _outState\r\n        //add the values which need to be saved from the drawer to the bundle\r\n        outState = binding.slider.saveInstanceState(outState)\r\n        //add the values which need to be saved from the accountHeader to the bundle\r\n        outState = headerView.saveInstanceState(outState)\r\n        super.onSaveInstanceState(outState)\r\n    }\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/CompactHeaderDrawerActivity.kt",
    "content": "package com.mikepenz.materialdrawer.app\n\nimport android.content.Context\nimport android.content.res.Configuration\nimport android.graphics.Color\nimport android.os.Build\nimport android.os.Bundle\nimport android.util.TypedValue\nimport android.view.Menu\nimport android.view.MenuItem\nimport androidx.annotation.AttrRes\nimport androidx.annotation.ColorInt\nimport androidx.appcompat.app.ActionBarDrawerToggle\nimport androidx.appcompat.app.AppCompatActivity\nimport androidx.appcompat.view.ActionMode\nimport androidx.core.content.ContextCompat\nimport androidx.core.content.res.ResourcesCompat\nimport com.mikepenz.iconics.IconicsDrawable\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesome\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesomeBrand\nimport com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial\nimport com.mikepenz.iconics.utils.actionBar\nimport com.mikepenz.iconics.utils.paddingDp\nimport com.mikepenz.materialdrawer.app.databinding.ActivitySampleBinding\nimport com.mikepenz.materialdrawer.holder.BadgeStyle\nimport com.mikepenz.materialdrawer.holder.ColorHolder\nimport com.mikepenz.materialdrawer.iconics.iconicsIcon\nimport com.mikepenz.materialdrawer.iconics.withIcon\nimport com.mikepenz.materialdrawer.model.*\nimport com.mikepenz.materialdrawer.model.interfaces.*\nimport com.mikepenz.materialdrawer.widget.AccountHeaderView\n\nclass CompactHeaderDrawerActivity : AppCompatActivity() {\n    private lateinit var binding: ActivitySampleBinding\n\n    //save our header or result\n    private lateinit var headerView: AccountHeaderView\n    private lateinit var actionBarDrawerToggle: ActionBarDrawerToggle\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        binding = ActivitySampleBinding.inflate(layoutInflater).also {\n            setContentView(it.root)\n        }\n\n        // Handle Toolbar\n        setSupportActionBar(binding.toolbar)\n        supportActionBar?.setTitle(R.string.drawer_item_compact_header)\n        supportActionBar?.setDisplayHomeAsUpEnabled(true)\n        supportActionBar?.setHomeButtonEnabled(true)\n\n        actionBarDrawerToggle = ActionBarDrawerToggle(this, binding.root, binding.toolbar, com.mikepenz.materialdrawer.R.string.material_drawer_open, com.mikepenz.materialdrawer.R.string.material_drawer_close)\n\n        // Create a few sample profile\n        val profile = ProfileDrawerItem().apply {\n            nameText = \"Mike Penz\"; descriptionText = \"mikepenz@gmail.com\"; iconRes = R.drawable.profile; badgeText = \"123\"\n            badgeStyle = BadgeStyle().apply {\n                textColor = ColorHolder.fromColor(Color.WHITE)\n                color = ColorHolder.fromColorRes(R.color.colorAccent)\n            }\n        }\n        val profile2 = ProfileDrawerItem().apply { nameText = \"Max Muster\"; descriptionText = \"max.mustermann@gmail.com\"; iconRes = R.drawable.profile2 }\n        val profile3 = ProfileDrawerItem().apply { nameText = \"Felix House\"; descriptionText = \"felix.house@gmail.com\"; iconRes = R.drawable.profile3 }\n        val profile4 = ProfileDrawerItem().apply { nameText = \"Mr. X\"; descriptionText = \"mister.x.super@gmail.com\"; iconRes = R.drawable.profile4 }\n        val profile5 = ProfileDrawerItem().apply { nameText = \"Batman\"; descriptionText = \"batman@gmail.com\"; iconRes = R.drawable.profile5 }\n\n        // Create the AccountHeader\n        headerView = AccountHeaderView(this).apply {\n            attachToSliderView(binding.slider)\n            addProfiles(\n                    profile,\n                    profile2,\n                    profile3,\n                    profile4,\n                    profile5,\n                    //don't ask but google uses 14dp for the add account icon in gmail but 20dp for the normal icons (like manage account)\n                    ProfileSettingDrawerItem().withName(\"Add Account\").withDescription(\"Add new GitHub Account\").withIcon(IconicsDrawable(context, GoogleMaterial.Icon.gmd_add).apply { actionBar(); paddingDp = 5 }).withIconTinted(true).withIdentifier(PROFILE_SETTING.toLong()),\n                    ProfileSettingDrawerItem().withName(\"Manage Account\").withIcon(GoogleMaterial.Icon.gmd_settings).withIdentifier(100001)\n            )\n            withSavedInstance(savedInstanceState)\n        }\n\n        binding.slider.apply {\n            itemAdapter.add(\n                PrimaryDrawerItem().apply { nameRes = R.string.drawer_item_home; iconicsIcon = FontAwesome.Icon.faw_home; identifier = 1 },\n                PrimaryDrawerItem().apply { nameRes = R.string.drawer_item_free_play; iconicsIcon = FontAwesome.Icon.faw_gamepad },\n                PrimaryDrawerItem().apply { nameRes = R.string.drawer_item_custom; iconicsIcon = FontAwesome.Icon.faw_eye; identifier = 5 },\n                SectionDrawerItem().apply { nameRes = R.string.drawer_item_section_header },\n                SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_settings; iconicsIcon = FontAwesome.Icon.faw_cog },\n                SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_help; iconicsIcon = FontAwesome.Icon.faw_question; isEnabled = false },\n                SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_open_source; iconicsIcon = FontAwesomeBrand.Icon.fab_github },\n                SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_contact; iconicsIcon = FontAwesome.Icon.faw_bullhorn }\n            )\n            onDrawerItemClickListener = { _, drawerItem, _ ->\n                if (drawerItem.identifier == 1L) {\n                    startSupportActionMode(ActionBarCallBack())\n                }\n                if (drawerItem is Nameable) {\n                    binding.toolbar.title = drawerItem.name?.getText(this@CompactHeaderDrawerActivity)\n                }\n                false\n            }\n            setSavedInstance(savedInstanceState)\n        }\n\n        // set the selection to the item with the identifier 5\n        if (savedInstanceState == null) {\n            binding.slider.setSelection(5, false)\n        }\n    }\n\n    override fun onConfigurationChanged(newConfig: Configuration) {\n        super.onConfigurationChanged(newConfig)\n        actionBarDrawerToggle.onConfigurationChanged(newConfig)\n    }\n\n    override fun onPostCreate(savedInstanceState: Bundle?) {\n        super.onPostCreate(savedInstanceState)\n        actionBarDrawerToggle.syncState()\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        if (actionBarDrawerToggle.onOptionsItemSelected(item)) {\n            return true\n        }\n        return super.onOptionsItemSelected(item)\n    }\n\n    override fun onSaveInstanceState(_outState: Bundle) {\n        var outState = _outState\n        //add the values which need to be saved from the drawer to the bundle\n        outState = binding.slider.saveInstanceState(outState)\n        //add the values which need to be saved from the accountHeader to the bundle\n        outState = headerView.saveInstanceState(outState)\n        super.onSaveInstanceState(outState)\n    }\n\n    override fun onBackPressed() {\n        //handle the back press :D close the drawer first and if the drawer is closed close the activity\n        if (binding.root.isDrawerOpen(binding.slider)) {\n            binding.root.closeDrawer(binding.slider)\n        } else {\n            super.onBackPressed()\n        }\n    }\n\n    internal inner class ActionBarCallBack : ActionMode.Callback {\n\n        override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {\n            return false\n        }\n\n        override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n                window.statusBarColor =\n                    getThemeColor(android.R.attr.colorPrimaryDark, ContextCompat.getColor(this@CompactHeaderDrawerActivity, R.color.colorPrimaryDark))\n            }\n\n            mode.menuInflater.inflate(R.menu.cab, menu)\n            return true\n        }\n\n        override fun onDestroyActionMode(mode: ActionMode) {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n                window.statusBarColor = Color.TRANSPARENT\n            }\n        }\n\n        override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean {\n            return false\n        }\n\n        private fun Context.getThemeColor(@AttrRes attr: Int, @ColorInt def: Int = 0): Int {\n            val tv = TypedValue()\n            return if (theme.resolveAttribute(attr, tv, true)) {\n                if (tv.resourceId != 0) ResourcesCompat.getColor(resources, tv.resourceId, theme) else tv.data\n            } else def\n        }\n    }\n\n    companion object {\n        private const val PROFILE_SETTING = 1\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/CrossfadeDrawerLayoutActvitiy.kt",
    "content": "package com.mikepenz.materialdrawer.app\n\nimport android.content.res.Configuration\nimport android.os.Bundle\nimport android.view.MenuItem\nimport android.widget.Toast\nimport androidx.appcompat.app.ActionBarDrawerToggle\nimport androidx.appcompat.app.AppCompatActivity\nimport androidx.core.view.GravityCompat\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesome\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesomeBrand\nimport com.mikepenz.materialdrawer.app.databinding.ActivitySampleCrossfaderBinding\nimport com.mikepenz.materialdrawer.iconics.iconicsIcon\nimport com.mikepenz.materialdrawer.interfaces.ICrossfader\nimport com.mikepenz.materialdrawer.model.PrimaryDrawerItem\nimport com.mikepenz.materialdrawer.model.ProfileDrawerItem\nimport com.mikepenz.materialdrawer.model.SecondaryDrawerItem\nimport com.mikepenz.materialdrawer.model.SectionDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.*\nimport com.mikepenz.materialdrawer.util.getOptimalDrawerWidth\nimport com.mikepenz.materialdrawer.widget.AccountHeaderView\n\nclass CrossfadeDrawerLayoutActvitiy : AppCompatActivity() {\n    private lateinit var binding: ActivitySampleCrossfaderBinding\n    private lateinit var headerView: AccountHeaderView\n    private lateinit var actionBarDrawerToggle: ActionBarDrawerToggle\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        binding = ActivitySampleCrossfaderBinding.inflate(layoutInflater).also {\n            setContentView(it.root)\n        }\n\n        // Handle Toolbar\n        setSupportActionBar(binding.toolbar)\n        //set the back arrow in the toolbars\n        supportActionBar?.setDisplayHomeAsUpEnabled(true)\n        supportActionBar?.setHomeButtonEnabled(true)\n        supportActionBar?.setTitle(R.string.drawer_item_crossfade_drawer_layout_drawer)\n\n        actionBarDrawerToggle = ActionBarDrawerToggle(this, binding.root, binding.toolbar, com.mikepenz.materialdrawer.R.string.material_drawer_open, com.mikepenz.materialdrawer.R.string.material_drawer_close)\n\n        // Create a few sample profile\n        val profile = ProfileDrawerItem().apply { nameText = \"Mike Penz\"; descriptionText = \"mikepenz@gmail.com\"; iconRes = R.drawable.profile }\n        val profile2 = ProfileDrawerItem().apply { nameText = \"Max Muster\"; descriptionText = \"max.mustermann@gmail.com\"; iconRes = R.drawable.profile2 }\n        val profile3 = ProfileDrawerItem().apply { nameText = \"Felix House\"; descriptionText = \"felix.house@gmail.com\"; iconRes = R.drawable.profile3 }\n        val profile4 = ProfileDrawerItem().apply { nameText = \"Mr. X\"; descriptionText = \"mister.x.super@gmail.com\"; iconRes = R.drawable.profile4 }\n        val profile5 = ProfileDrawerItem().apply { nameText = \"Batman\"; descriptionText = \"batman@gmail.com\"; iconRes = R.drawable.profile5 }\n\n        // Create the AccountHeader\n        headerView = AccountHeaderView(this).apply {\n            attachToSliderView(binding.crossFadeLargeView)\n            addProfiles(\n                    profile,\n                    profile2,\n                    profile3,\n                    profile4,\n                    profile5\n            )\n            withSavedInstance(savedInstanceState)\n        }\n\n        binding.crossFadeLargeView.apply {\n            itemAdapter.add(\n                PrimaryDrawerItem().apply { nameRes = R.string.drawer_item_home; iconicsIcon = FontAwesome.Icon.faw_home; identifier = 1 },\n                PrimaryDrawerItem().apply { nameRes = R.string.drawer_item_free_play; iconicsIcon = FontAwesome.Icon.faw_gamepad },\n                PrimaryDrawerItem().apply { nameRes = R.string.drawer_item_custom; iconicsIcon = FontAwesome.Icon.faw_eye; identifier = 5 },\n                SectionDrawerItem().apply { nameRes = R.string.drawer_item_section_header },\n                SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_settings; iconicsIcon = FontAwesome.Icon.faw_cog },\n                SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_help; iconicsIcon = FontAwesome.Icon.faw_question; isEnabled = false },\n                SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_open_source; iconicsIcon = FontAwesomeBrand.Icon.fab_github },\n                SecondaryDrawerItem().apply { nameRes = R.string.drawer_item_contact; iconicsIcon = FontAwesome.Icon.faw_bullhorn }\n            )\n            onDrawerItemClickListener = { v, drawerItem, position ->\n                if (drawerItem is Nameable) {\n                    Toast.makeText(this@CrossfadeDrawerLayoutActvitiy, drawerItem.name?.getText(this@CrossfadeDrawerLayoutActvitiy), Toast.LENGTH_SHORT).show()\n                }\n                false\n            }\n            setSavedInstance(savedInstanceState)\n        }\n\n        binding.crossFadeSmallView.drawer = binding.crossFadeLargeView\n\n        //define maxDrawerWidth\n        binding.root.maxWidthPx = getOptimalDrawerWidth(this)\n        binding.crossFadeSmallView.background = binding.crossFadeLargeView.background\n\n        //define the crossfader to be used with the miniDrawer. This is required to be able to automatically toggle open / close\n        binding.crossFadeSmallView.crossFader = object : ICrossfader {\n            override val isCrossfaded: Boolean\n                get() = binding.root.isCrossfaded\n\n            override fun crossfade() {\n                val isFaded = isCrossfaded\n                binding.root.crossfade(400)\n\n                //only close the drawer if we were already faded and want to close it now\n                if (isFaded) {\n                    binding.root.closeDrawer(GravityCompat.START)\n                }\n            }\n        }\n\n        // set the selection to the item with the identifier 5\n        if (savedInstanceState == null) {\n            binding.crossFadeLargeView.setSelection(5, false)\n        }\n    }\n\n    override fun onConfigurationChanged(newConfig: Configuration) {\n        super.onConfigurationChanged(newConfig)\n        actionBarDrawerToggle.onConfigurationChanged(newConfig)\n    }\n\n    override fun onPostCreate(savedInstanceState: Bundle?) {\n        super.onPostCreate(savedInstanceState)\n        actionBarDrawerToggle.syncState()\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        if (actionBarDrawerToggle.onOptionsItemSelected(item)) {\n            return true\n        }\n        return super.onOptionsItemSelected(item)\n    }\n\n    override fun onSaveInstanceState(_outState: Bundle) {\n        var outState = _outState\n        //add the values which need to be saved from the drawer to the bundle\n        outState = binding.crossFadeLargeView.saveInstanceState(outState)\n\n        //add the values which need to be saved from the accountHeader to the bundle\n        outState = headerView.saveInstanceState(outState)\n        super.onSaveInstanceState(outState)\n    }\n\n\n    override fun onBackPressed() {\n        //handle the back press :D close the drawer first and if the drawer is closed close the activity\n        if (binding.root.isDrawerOpen(binding.crossFadeSlider)) {\n            binding.root.closeDrawer(binding.crossFadeSlider)\n        } else {\n            super.onBackPressed()\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/CustomApplication.kt",
    "content": "package com.mikepenz.materialdrawer.app\n\nimport android.content.Context\nimport android.graphics.drawable.Drawable\nimport android.net.Uri\nimport android.widget.ImageView\nimport androidx.multidex.MultiDexApplication\nimport coil.dispose\nimport coil.load\nimport com.google.android.material.color.DynamicColors\nimport com.mikepenz.iconics.Iconics\nimport com.mikepenz.iconics.IconicsDrawable\nimport com.mikepenz.iconics.utils.backgroundColorRes\nimport com.mikepenz.iconics.utils.sizeDp\nimport com.mikepenz.materialdrawer.util.AbstractDrawerImageLoader\nimport com.mikepenz.materialdrawer.util.DrawerImageLoader\nimport com.mikepenz.materialdrawer.util.getPlaceHolder\n\n/**\n * Created by mikepenz on 27.03.15.\n */\nclass CustomApplication : MultiDexApplication() {\n    override fun onCreate() {\n        super.onCreate()\n\n        Iconics.init(this)\n\n        DynamicColors.applyToActivitiesIfAvailable(this)\n\n        //initialize and create the image loader logic\n        /*\n        DrawerImageLoader.init(object : AbstractDrawerImageLoader() {\n            override fun set(imageView: ImageView, uri: Uri, placeholder: Drawable) {\n                Picasso.get().load(uri).placeholder(placeholder).into(imageView)\n            }\n\n            override fun cancel(imageView: ImageView) {\n                Picasso.get().cancelRequest(imageView)\n            }\n        })\n        */\n\n        //initialize and create the image loader logic\n        DrawerImageLoader.init(object : AbstractDrawerImageLoader() {\n            override fun set(imageView: ImageView, uri: Uri, placeholder: Drawable, tag: String?) {\n                imageView.load(uri) {\n                    allowHardware(false)\n                    placeholder(placeholder)\n                }\n            }\n\n            override fun cancel(imageView: ImageView) {\n                imageView.dispose()\n            }\n\n            override fun placeholder(ctx: Context, tag: String?): Drawable {\n                //define different placeholders for different imageView targets\n                //default tags are accessible via the DrawerImageLoader.Tags\n                //custom ones can be checked via string. see the CustomUrlBasePrimaryDrawerItem LINE 111\n                return when (tag) {\n                    DrawerImageLoader.Tags.PROFILE.name -> getPlaceHolder(ctx)\n                    DrawerImageLoader.Tags.ACCOUNT_HEADER.name -> IconicsDrawable(ctx, \" \").apply { backgroundColorRes = R.color.colorPrimary; sizeDp = 56 }\n                    \"customUrlItem\" -> IconicsDrawable(ctx, \" \").apply { backgroundColorRes = R.color.colorAccent; sizeDp = 56 }\n                    //we use the default one for\n                    //DrawerImageLoader.Tags.PROFILE_DRAWER_ITEM.name()\n                    else -> super.placeholder(ctx, tag)\n                }\n            }\n        })\n    }\n}\n\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/DrawerActivity.kt",
    "content": "package com.mikepenz.materialdrawer.app\n\nimport android.content.Intent\nimport android.content.res.Configuration\nimport android.graphics.Color\nimport android.os.Bundle\nimport android.view.MenuItem\nimport androidx.appcompat.app.ActionBarDrawerToggle\nimport androidx.appcompat.app.AppCompatActivity\nimport com.mikepenz.aboutlibraries.LibsBuilder\nimport com.mikepenz.iconics.IconicsDrawable\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesome\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesomeBrand\nimport com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial\nimport com.mikepenz.iconics.utils.actionBar\nimport com.mikepenz.iconics.utils.paddingDp\nimport com.mikepenz.materialdrawer.app.databinding.ActivitySampleBinding\nimport com.mikepenz.materialdrawer.holder.BadgeStyle\nimport com.mikepenz.materialdrawer.holder.ColorHolder\nimport com.mikepenz.materialdrawer.holder.StringHolder\nimport com.mikepenz.materialdrawer.iconics.iconicsIcon\nimport com.mikepenz.materialdrawer.model.*\nimport com.mikepenz.materialdrawer.model.interfaces.*\nimport com.mikepenz.materialdrawer.util.addItems\nimport com.mikepenz.materialdrawer.util.updateBadge\nimport com.mikepenz.materialdrawer.widget.AccountHeaderView\n\n\nclass DrawerActivity : AppCompatActivity() {\n    private lateinit var binding: ActivitySampleBinding\n    private lateinit var headerView: AccountHeaderView\n    private lateinit var actionBarDrawerToggle: ActionBarDrawerToggle\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        binding = ActivitySampleBinding.inflate(layoutInflater).also {\n            setContentView(it.root)\n        }\n\n        // Handle Toolbar\n        setSupportActionBar(binding.toolbar)\n        supportActionBar?.setDisplayHomeAsUpEnabled(false)\n        supportActionBar?.setHomeButtonEnabled(true)\n\n        actionBarDrawerToggle = ActionBarDrawerToggle(\n            this,\n            binding.root,\n            binding.toolbar,\n            com.mikepenz.materialdrawer.R.string.material_drawer_open,\n            com.mikepenz.materialdrawer.R.string.material_drawer_close\n        )\n        binding.root.addDrawerListener(actionBarDrawerToggle)\n\n        // Create a few sample profile\n        // NOTE you have to define the loader logic too. See the CustomApplication for more details\n        val profile = ProfileDrawerItem().apply {\n            nameText = \"Mike Penz\"; descriptionText = \"mikepenz@gmail.com\"; iconUrl = \"https://avatars3.githubusercontent.com/u/1476232?v=3&s=460\"; identifier =\n            100\n        }\n        val profile2 = ProfileDrawerItem().apply {\n            nameText = \"Demo User\"; descriptionText = \"demo@github.com\"; iconUrl = \"https://avatars2.githubusercontent.com/u/3597376?v=3&s=460\"; identifier =\n            101\n        }\n        val profile3 =\n            ProfileDrawerItem().apply { nameText = \"Max Muster\"; descriptionText = \"max.mustermann@gmail.com\"; iconRes = R.drawable.profile2; identifier = 102 }\n        val profile4 =\n            ProfileDrawerItem().apply { nameText = \"Felix House\"; descriptionText = \"felix.house@gmail.com\"; iconRes = R.drawable.profile3; identifier = 103 }\n        val profile5 =\n            ProfileDrawerItem().apply { nameText = \"Mr. X\"; descriptionText = \"mister.x.super@gmail.com\"; iconRes = R.drawable.profile4; identifier = 104 }\n        val profile6 = ProfileDrawerItem().apply {\n            nameText = \"Batman\"; descriptionText = \"batman@gmail.com\"; iconRes = R.drawable.profile5; identifier = 105; badgeText = \"123\"\n            badgeStyle = BadgeStyle().apply {\n                textColor = ColorHolder.fromColor(Color.BLACK)\n                color = ColorHolder.fromColor(Color.WHITE)\n            }\n        }\n\n        // Create the AccountHeader\n        headerView = AccountHeaderView(this).apply {\n            attachToSliderView(binding.slider)\n            addProfiles(\n                profile,\n                profile2,\n                profile3,\n                profile4,\n                profile5,\n                profile6,\n                //don't ask but google uses 14dp for the add account icon in gmail but 20dp for the normal icons (like manage account)\n                ProfileSettingDrawerItem().apply {\n                    nameText = \"Add Account\"; descriptionText = \"Add new GitHub Account\"; iconDrawable =\n                    IconicsDrawable(context, GoogleMaterial.Icon.gmd_add).apply { actionBar(); paddingDp = 5 }.mutate(); isIconTinted = true; identifier =\n                    PROFILE_SETTING.toLong()\n                },\n                ProfileSettingDrawerItem().apply { nameText = \"Manage Account\"; iconicsIcon = GoogleMaterial.Icon.gmd_settings; identifier = 100001 }\n            )\n            onAccountHeaderListener = { view, profile, current ->\n                //sample usage of the onProfileChanged listener\n                //if the clicked item has the identifier 1 add a new profile ;)\n                if (profile is IDrawerItem<*> && profile.identifier == PROFILE_SETTING.toLong()) {\n                    val count = 100 + (profiles?.size ?: 0) + 1\n                    val newProfile =\n                        ProfileDrawerItem().withNameShown(true).withName(\"Batman$count\").withEmail(\"batman$count@gmail.com\").withIcon(R.drawable.profile5)\n                            .withIdentifier(count.toLong())\n                    profiles?.let {\n                        //we know that there are 2 setting elements. set the new profile above them ;)\n                        addProfile(newProfile, it.size - 2)\n                    } ?: addProfiles(newProfile)\n                }\n\n                //false if you have not consumed the event and it should close the drawer\n                false\n            }\n            withSavedInstance(savedInstanceState)\n        }\n\n        binding.slider.apply {\n            addItems(\n                PrimaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_compact_header; descriptionRes = R.string.drawer_item_compact_header_desc; iconicsIcon =\n                    GoogleMaterial.Icon.gmd_brightness_5; isSelectable = false; identifier = 1\n                },\n                PrimaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_action_bar_drawer; descriptionRes = R.string.drawer_item_action_bar_drawer_desc; iconicsIcon =\n                    FontAwesome.Icon.faw_home; isSelectable = false; identifier = 2\n                },\n                PrimaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_multi_drawer; descriptionRes = R.string.drawer_item_multi_drawer_desc; iconicsIcon =\n                    FontAwesome.Icon.faw_gamepad; isSelectable = false; identifier = 3\n                },\n                PrimaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_advanced_drawer; descriptionRes = R.string.drawer_item_advanced_drawer_desc; iconicsIcon =\n                    GoogleMaterial.Icon.gmd_adb; isSelectable = false; identifier = 5\n                },\n                PrimaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_embedded_drawer; descriptionRes = R.string.drawer_item_embedded_drawer_desc; iconicsIcon =\n                    GoogleMaterial.Icon.gmd_battery_full; isSelectable = false; identifier = 7\n                },\n                PrimaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_fullscreen_drawer; descriptionRes = R.string.drawer_item_fullscreen_drawer_desc; iconicsIcon =\n                    GoogleMaterial.Icon.gmd_label; isSelectable = false; identifier = 8\n                },\n                PrimaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_menu_drawer; descriptionRes = R.string.drawer_item_menu_drawer_desc; iconicsIcon =\n                    GoogleMaterial.Icon.gmd_filter_list; isSelectable = false; identifier = 10\n                },\n                PrimaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_mini_drawer; descriptionRes = R.string.drawer_item_mini_drawer_desc; iconicsIcon =\n                    GoogleMaterial.Icon.gmd_battery_charging_full; isSelectable = false; identifier = 11\n                },\n                PrimaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_fragment_drawer; descriptionRes = R.string.drawer_item_fragment_drawer_desc; iconicsIcon =\n                    GoogleMaterial.Icon.gmd_disc_full; isSelectable = false; identifier = 12\n                },\n                PrimaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_collapsing_toolbar_drawer; descriptionRes =\n                    R.string.drawer_item_collapsing_toolbar_drawer_desc; iconicsIcon = GoogleMaterial.Icon.gmd_camera_rear; isSelectable = false; identifier =\n                    13\n                },\n                PrimaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_persistent_compact_header; descriptionRes =\n                    R.string.drawer_item_persistent_compact_header_desc; iconicsIcon = GoogleMaterial.Icon.gmd_brightness_5; isSelectable = false; identifier =\n                    14\n                },\n                PrimaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_crossfade_drawer_layout_drawer; descriptionRes =\n                    R.string.drawer_item_crossfade_drawer_layout_drawer_desc; iconicsIcon = GoogleMaterial.Icon.gmd_format_bold; isSelectable =\n                    false; identifier = 15\n                },\n                PrimaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_navigation_drawer; descriptionRes = R.string.drawer_item_navigation_drawer_desc; iconicsIcon =\n                    GoogleMaterial.Icon.gmd_navigation; isSelectable = false; identifier = 1305\n                },\n                ExpandableBadgeDrawerItem().apply {\n                    nameText = \"Collapsable Badge\"; iconicsIcon = GoogleMaterial.Icon.gmd_format_bold; identifier = 18; isSelectable = false; badge =\n                    StringHolder(\"100\")\n                    badgeStyle = BadgeStyle().apply { textColor = ColorHolder.fromColor(Color.WHITE); color = ColorHolder.fromColorRes(R.color.colorAccent) }\n                    subItems = mutableListOf(\n                        SecondaryDrawerItem().apply {\n                            nameText = \"CollapsableItem\"; level = 2; iconicsIcon = GoogleMaterial.Icon.gmd_format_bold; identifier = 2000\n                        },\n                        SecondaryDrawerItem().apply {\n                            nameText = \"CollapsableItem 2\"; level = 2; iconicsIcon = GoogleMaterial.Icon.gmd_format_bold; identifier = 2001\n                        }\n                    )\n                },\n                ExpandableDrawerItem().apply {\n                    nameText = \"Collapsable\"; iconicsIcon = GoogleMaterial.Icon.gmd_filter_list; identifier = 19; isSelectable = false\n                    subItems = mutableListOf(\n                        SecondaryDrawerItem().apply {\n                            nameText = \"CollapsableItem\"; level = 2; iconicsIcon = GoogleMaterial.Icon.gmd_filter_list; identifier = 2002\n                        },\n                        SecondaryDrawerItem().apply {\n                            nameText = \"CollapsableItem 2\"; level = 2; iconicsIcon = GoogleMaterial.Icon.gmd_filter_list; identifier = 2003\n                        }\n                    )\n                },\n                SectionDrawerItem().apply { nameRes = R.string.drawer_item_section_header },\n                SecondaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_open_source; iconicsIcon = FontAwesomeBrand.Icon.fab_github; identifier = 20; isSelectable = false\n                },\n                SecondaryDrawerItem().apply {\n                    nameRes = R.string.drawer_item_contact; iconicsIcon = GoogleMaterial.Icon.gmd_format_color_fill; identifier = 21; isSelectable = false\n                }\n                /*,\n                DividerDrawerItem ()\n                SwitchDrawerItem ().withName(\"Switch\").withIcon(Octicons.Icon.oct_tools).withChecked(true).withOnCheckedChangeListener(onCheckedChangeListener)\n                SwitchDrawerItem ().withName(\"Switch2\").withIcon(Octicons.Icon.oct_tools).withChecked(true).withOnCheckedChangeListener(onCheckedChangeListener).withSelectable(false)\n                ToggleDrawerItem ().withName(\"Toggle\").withIcon(Octicons.Icon.oct_tools).withChecked(true).withOnCheckedChangeListener(onCheckedChangeListener)\n                DividerDrawerItem ()\n                SecondarySwitchDrawerItem ().withName(\"Secondary switch\").withIcon(Octicons.Icon.oct_tools).withChecked(true).withOnCheckedChangeListener(onCheckedChangeListener)\n                SecondarySwitchDrawerItem ().withName(\"Secondary Switch2\").withIcon(Octicons.Icon.oct_tools).withChecked(true).withOnCheckedChangeListener(onCheckedChangeListener).withSelectable(false)\n                SecondaryToggleDrawerItem ().withName(\"Secondary toggle\").withIcon(Octicons.Icon.oct_tools).withChecked(true).withOnCheckedChangeListener(onCheckedChangeListener)\n                */\n            )\n            onDrawerItemClickListener = { _, drawerItem, _ ->\n                //check if the drawerItem is set.\n                //there are different reasons for the drawerItem to be null\n                //--> click on the header\n                //--> click on the footer\n                //those items don't contain a drawerItem\n\n                var intent: Intent? = null\n                when {\n                    drawerItem.identifier == 1L -> intent = Intent(this@DrawerActivity, CompactHeaderDrawerActivity::class.java)\n                    drawerItem.identifier == 2L -> intent = Intent(this@DrawerActivity, ActionBarActivity::class.java)\n                    drawerItem.identifier == 3L -> intent = Intent(this@DrawerActivity, MultiDrawerActivity::class.java)\n                    drawerItem.identifier == 5L -> intent = Intent(this@DrawerActivity, AdvancedActivity::class.java)\n                    drawerItem.identifier == 7L -> intent = Intent(this@DrawerActivity, EmbeddedDrawerActivity::class.java)\n                    drawerItem.identifier == 8L -> intent = Intent(this@DrawerActivity, FullscreenDrawerActivity::class.java)\n                    drawerItem.identifier == 10L -> intent = Intent(this@DrawerActivity, MenuDrawerActivity::class.java)\n                    drawerItem.identifier == 11L -> intent = Intent(this@DrawerActivity, MiniDrawerActivity::class.java)\n                    drawerItem.identifier == 12L -> intent = Intent(this@DrawerActivity, FragmentActivity::class.java)\n                    drawerItem.identifier == 13L -> intent = Intent(this@DrawerActivity, CollapsingToolbarActivity::class.java)\n                    drawerItem.identifier == 14L -> intent = Intent(this@DrawerActivity, PersistentDrawerActivity::class.java)\n                    drawerItem.identifier == 15L -> intent = Intent(this@DrawerActivity, CrossfadeDrawerLayoutActvitiy::class.java)\n                    drawerItem.identifier == 1305L -> intent = Intent(this@DrawerActivity, NavControllerActivity::class.java)\n                    drawerItem.identifier == 20L -> intent = LibsBuilder().intent(this@DrawerActivity)\n                }\n                if (intent != null) {\n                    this@DrawerActivity.startActivity(intent)\n                }\n\n                false\n            }\n            setSavedInstance(savedInstanceState)\n        }\n\n        //slider.withStickyHeader(R.layout.header)\n\n        //slider.addStickyDrawerItems(\n        //        SecondaryDrawerItem().withName(R.string.drawer_item_settings).withIcon(FontAwesome.Icon.faw_cog).withIdentifier(10),\n        //        SecondaryDrawerItem().withName(R.string.drawer_item_open_source).withIcon(FontAwesomeBrand.Icon.fab_github)\n        //)\n\n        //only set the active selection or active profile if we do not recreate the activity\n        if (savedInstanceState == null) {\n            // set the selection to the item with the identifier 11\n            binding.slider.setSelection(21, false)\n\n            //set the active profile\n            headerView.activeProfile = profile3\n        }\n\n        binding.slider.updateBadge(4, StringHolder(10.toString() + \"\"))\n    }\n\n    override fun onConfigurationChanged(newConfig: Configuration) {\n        super.onConfigurationChanged(newConfig)\n        actionBarDrawerToggle.onConfigurationChanged(newConfig)\n    }\n\n    override fun onResume() {\n        super.onResume()\n        actionBarDrawerToggle.syncState()\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        if (actionBarDrawerToggle.onOptionsItemSelected(item)) {\n            return true\n        }\n        return super.onOptionsItemSelected(item)\n    }\n\n    override fun onSaveInstanceState(_outState: Bundle) {\n        var outState = _outState\n        //add the values which need to be saved from the drawer to the bundle\n        outState = binding.slider.saveInstanceState(outState)\n\n        //add the values which need to be saved from the accountHeader to the bundle\n        outState = headerView.saveInstanceState(outState)\n        super.onSaveInstanceState(outState)\n    }\n\n\n    override fun onBackPressed() {\n        //handle the back press :D close the drawer first and if the drawer is closed close the activity\n        if (binding.root.isDrawerOpen(binding.slider)) {\n            binding.root.closeDrawer(binding.slider)\n        } else {\n            super.onBackPressed()\n        }\n    }\n\n    companion object {\n        private const val PROFILE_SETTING = 100000\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/EmbeddedDrawerActivity.kt",
    "content": "package com.mikepenz.materialdrawer.app\n\nimport android.graphics.Color\nimport android.net.Uri\nimport android.os.Bundle\nimport android.util.Log\nimport android.view.MenuItem\nimport android.view.ViewGroup\nimport android.widget.CompoundButton\nimport android.widget.Toast\nimport androidx.appcompat.app.AppCompatActivity\nimport com.mikepenz.iconics.IconicsDrawable\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesome\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesomeBrand\nimport com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial\nimport com.mikepenz.iconics.utils.actionBar\nimport com.mikepenz.iconics.utils.paddingDp\nimport com.mikepenz.materialdrawer.app.databinding.ActivityEmbeddedBinding\nimport com.mikepenz.materialdrawer.holder.BadgeStyle\nimport com.mikepenz.materialdrawer.iconics.withIcon\nimport com.mikepenz.materialdrawer.interfaces.OnCheckedChangeListener\nimport com.mikepenz.materialdrawer.model.*\nimport com.mikepenz.materialdrawer.model.interfaces.*\nimport com.mikepenz.materialdrawer.widget.AccountHeaderView\n\nclass EmbeddedDrawerActivity : AppCompatActivity() {\n    private lateinit var binding: ActivityEmbeddedBinding\n    private lateinit var headerView: AccountHeaderView\n\n    private val onCheckedChangeListener = object : OnCheckedChangeListener {\n        override fun onCheckedChanged(drawerItem: IDrawerItem<*>, buttonView: CompoundButton, isChecked: Boolean) {\n            if (drawerItem is Nameable) {\n                Log.i(\"material-drawer\", \"DrawerItem: \" + (drawerItem as Nameable).name + \" - toggleChecked: \" + isChecked)\n            } else {\n                Log.i(\"material-drawer\", \"toggleChecked: $isChecked\")\n            }\n        }\n    }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        binding = ActivityEmbeddedBinding.inflate(layoutInflater).also {\n            setContentView(it.root)\n        }\n\n        // Handle Toolbar\n        setSupportActionBar(binding.toolbar)\n        //set the back arrow in the toolbar\n        supportActionBar?.setDisplayHomeAsUpEnabled(true)\n        supportActionBar?.setTitle(R.string.drawer_item_embedded_drawer)\n\n        // Create a few sample profile\n        // NOTE you have to define the loader logic too. See the CustomApplication for more details\n        val profile = ProfileDrawerItem().withName(\"Mike Penz\").withEmail(\"mikepenz@gmail.com\").withIcon(\"https://avatars3.githubusercontent.com/u/1476232?v=3&s=460\")\n        val profile2 = ProfileDrawerItem().withName(\"Bernat Borras\").withEmail(\"alorma@github.com\").withIcon(Uri.parse(\"https://avatars3.githubusercontent.com/u/887462?v=3&s=460\"))\n        val profile3 = ProfileDrawerItem().withName(\"Max Muster\").withEmail(\"max.mustermann@gmail.com\").withIcon(resources.getDrawable(R.drawable.profile2))\n        val profile4 = ProfileDrawerItem().withName(\"Felix House\").withEmail(\"felix.house@gmail.com\").withIcon(resources.getDrawable(R.drawable.profile3))\n        val profile5 = ProfileDrawerItem().withName(\"Mr. X\").withEmail(\"mister.x.super@gmail.com\").withIcon(resources.getDrawable(R.drawable.profile4)).withIdentifier(4)\n        val profile6 = ProfileDrawerItem().withName(\"Batman\").withEmail(\"batman@gmail.com\").withIcon(resources.getDrawable(R.drawable.profile5))\n\n        // Create the AccountHeader\n        headerView = AccountHeaderView(this).apply {\n            attachToSliderView(binding.slider)\n            addProfiles(\n                    profile,\n                    profile2,\n                    profile3,\n                    profile4,\n                    profile5,\n                    profile6,\n                    //don't ask but google uses 14dp for the add account icon in gmail but 20dp for the normal icons (like manage account)\n                    ProfileSettingDrawerItem().withName(\"Add Account\").withDescription(\"Add new GitHub Account\").withIcon(IconicsDrawable(context, GoogleMaterial.Icon.gmd_add).apply { actionBar(); paddingDp = 5 }).withIconTinted(true).withIdentifier(PROFILE_SETTING.toLong()),\n                    ProfileSettingDrawerItem().withName(\"Manage Account\").withIcon(GoogleMaterial.Icon.gmd_settings).withIdentifier(100001)\n            )\n            onAccountHeaderListener = { view, profile, current ->\n                //sample usage of the onProfileChanged listener\n                //if the clicked item has the identifier 1 add a new profile ;)\n                if (profile is IDrawerItem<*> && (profile as IDrawerItem<*>).identifier == PROFILE_SETTING.toLong()) {\n                    val newProfile = ProfileDrawerItem().withNameShown(true).withName(\"Batman\").withEmail(\"batman@gmail.com\").withIcon(resources.getDrawable(R.drawable.profile5))\n                    headerView.profiles?.let {\n                        //we know that there are 2 setting elements. set the new profile above them ;)\n                        headerView.addProfile(newProfile, it.size - 2)\n                    } ?: headerView.addProfiles(newProfile)\n                }\n\n                //false if you have not consumed the event and it should close the drawer\n                false\n            }\n            withSavedInstance(savedInstanceState)\n        }\n\n        binding.slider.apply {\n            customWidth = ViewGroup.LayoutParams.MATCH_PARENT\n            itemAdapter.add(\n                PrimaryDrawerItem().withName(R.string.drawer_item_compact_header).withIcon(GoogleMaterial.Icon.gmd_brightness_5).withIdentifier(1),\n                PrimaryDrawerItem().withName(R.string.drawer_item_action_bar_drawer).withIcon(FontAwesome.Icon.faw_home).withBadge(\"22\")\n                    .withBadgeStyle(BadgeStyle(Color.RED, Color.RED)).withIdentifier(2),\n                PrimaryDrawerItem().withName(R.string.drawer_item_multi_drawer).withIcon(FontAwesome.Icon.faw_gamepad).withIdentifier(3),\n                PrimaryDrawerItem().withName(R.string.drawer_item_non_translucent_status_drawer).withIcon(FontAwesome.Icon.faw_eye).withIdentifier(4),\n                PrimaryDrawerItem().withDescription(\"A more complex sample\").withName(R.string.drawer_item_advanced_drawer)\n                    .withIcon(GoogleMaterial.Icon.gmd_adb).withIdentifier(5),\n                SectionDrawerItem().withName(R.string.drawer_item_section_header),\n                SecondaryDrawerItem().withName(R.string.drawer_item_open_source).withIcon(FontAwesomeBrand.Icon.fab_github),\n                SecondaryDrawerItem().withName(R.string.drawer_item_contact).withIcon(GoogleMaterial.Icon.gmd_format_color_fill).withTag(\"Bullhorn\"),\n                DividerDrawerItem(),\n                SwitchDrawerItem().withName(\"Switch\").withIcon(GoogleMaterial.Icon.gmd_pan_tool).withChecked(true)\n                    .withOnCheckedChangeListener(onCheckedChangeListener),\n                ToggleDrawerItem().withName(\"Toggle\").withIcon(GoogleMaterial.Icon.gmd_pan_tool).withChecked(true)\n                    .withOnCheckedChangeListener(onCheckedChangeListener)\n            )\n            onDrawerItemClickListener = { v, drawerItem, position ->\n                if (drawerItem is Nameable) {\n                    Toast.makeText(this@EmbeddedDrawerActivity, drawerItem.name?.getText(this@EmbeddedDrawerActivity), Toast.LENGTH_SHORT).show()\n                }\n                false\n            }\n            setSavedInstance(savedInstanceState)\n        }\n    }\n\n    override fun onSaveInstanceState(_outState: Bundle) {\n        var outState = _outState\n        //add the values which need to be saved from the drawer to the bundle\n        outState = binding.slider.saveInstanceState(outState)\n\n        //add the values which need to be saved from the accountHeader to the bundle\n        outState = headerView.saveInstanceState(outState)\n        super.onSaveInstanceState(outState)\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        //handle the click on the back arrow click\n        return when (item.itemId) {\n            android.R.id.home -> {\n                onBackPressed()\n                true\n            }\n            else -> super.onOptionsItemSelected(item)\n        }\n    }\n\n    companion object {\n        private const val PROFILE_SETTING = 1\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/FragmentActivity.kt",
    "content": "package com.mikepenz.materialdrawer.app\n\nimport android.os.Bundle\nimport android.view.Menu\nimport android.view.MenuItem\nimport androidx.appcompat.app.AppCompatActivity\nimport com.mikepenz.materialdrawer.app.databinding.ActivitySampleFragmentBinding\nimport com.mikepenz.materialdrawer.app.fragment.DrawerFragment\nimport com.mikepenz.materialdrawer.app.fragment.SecondDrawerFragment\n\nclass FragmentActivity : AppCompatActivity() {\n    private lateinit var binding: ActivitySampleFragmentBinding\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        binding = ActivitySampleFragmentBinding.inflate(layoutInflater).also {\n            setContentView(it.root)\n        }\n\n        // Handle Toolbar\n        setSupportActionBar(binding.toolbar)\n        supportActionBar?.setTitle(R.string.drawer_item_fragment_drawer)\n\n        //ignore the DemoFragment and it's layout it's just to showcase the handle with an keyboard\n        if (savedInstanceState == null) {\n            val f = DrawerFragment.newInstance(\"Demo\")\n            supportFragmentManager.beginTransaction().replace(R.id.fragment_container, f).commit()\n        }\n    }\n\n    override fun onCreateOptionsMenu(menu: Menu): Boolean {\n        val inflater = menuInflater\n        inflater.inflate(R.menu.fragment_menu, menu)\n        return true\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        //handle the click on the back arrow click\n        when (item.itemId) {\n            R.id.menu_1 -> {\n                val f = DrawerFragment.newInstance(\"Demo\")\n                supportFragmentManager.beginTransaction().replace(R.id.fragment_container, f).commit()\n                return true\n            }\n            R.id.menu_2 -> {\n                val f2 = SecondDrawerFragment.newInstance(\"Demo 2\")\n                supportFragmentManager.beginTransaction().replace(R.id.fragment_container, f2).commit()\n                return true\n            }\n            android.R.id.home -> {\n                onBackPressed()\n                return true\n            }\n            else -> return super.onOptionsItemSelected(item)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/FullscreenDrawerActivity.kt",
    "content": "package com.mikepenz.materialdrawer.app\n\nimport android.content.res.Configuration\nimport android.graphics.Color\nimport android.os.Bundle\nimport android.view.MenuItem\nimport androidx.appcompat.app.ActionBarDrawerToggle\nimport androidx.appcompat.app.AppCompatActivity\nimport androidx.core.view.ViewCompat\nimport androidx.core.view.updatePadding\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesome\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesomeBrand\nimport com.mikepenz.materialdrawer.app.databinding.ActivitySampleFullscreenBinding\nimport com.mikepenz.materialdrawer.iconics.withIcon\nimport com.mikepenz.materialdrawer.model.PrimaryDrawerItem\nimport com.mikepenz.materialdrawer.model.SecondaryDrawerItem\nimport com.mikepenz.materialdrawer.model.SectionDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.withEnabled\nimport com.mikepenz.materialdrawer.model.interfaces.withIdentifier\nimport com.mikepenz.materialdrawer.model.interfaces.withName\n\nclass FullscreenDrawerActivity : AppCompatActivity() {\n    private lateinit var binding: ActivitySampleFullscreenBinding\n    private lateinit var actionBarDrawerToggle: ActionBarDrawerToggle\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        binding = ActivitySampleFullscreenBinding.inflate(layoutInflater).also {\n            setContentView(it.root)\n        }\n\n        // Handle Toolbar\n        setSupportActionBar(binding.toolbar)\n        binding.toolbar.setBackgroundColor(Color.BLACK)\n        binding.toolbar.background.alpha = 90\n        supportActionBar?.setTitle(R.string.drawer_item_fullscreen_drawer)\n        supportActionBar?.setDisplayHomeAsUpEnabled(true)\n        supportActionBar?.setHomeButtonEnabled(true)\n\n        actionBarDrawerToggle = ActionBarDrawerToggle(this, binding.root, binding.toolbar, com.mikepenz.materialdrawer.R.string.material_drawer_open, com.mikepenz.materialdrawer.R.string.material_drawer_close)\n\n        binding.slider.apply {\n            itemAdapter.add(\n                PrimaryDrawerItem().withName(R.string.drawer_item_home).withIcon(FontAwesome.Icon.faw_home).withIdentifier(1),\n                PrimaryDrawerItem().withName(R.string.drawer_item_free_play).withIcon(FontAwesome.Icon.faw_gamepad),\n                PrimaryDrawerItem().withName(R.string.drawer_item_custom).withIcon(FontAwesome.Icon.faw_eye),\n                //add some more items to get a scrolling list\n                SectionDrawerItem().withName(R.string.drawer_item_section_header),\n                SecondaryDrawerItem().withName(R.string.drawer_item_settings).withIcon(FontAwesome.Icon.faw_cog),\n                SecondaryDrawerItem().withName(R.string.drawer_item_help).withIcon(FontAwesome.Icon.faw_question).withEnabled(false),\n                SecondaryDrawerItem().withName(R.string.drawer_item_open_source).withIcon(FontAwesomeBrand.Icon.fab_github),\n                SecondaryDrawerItem().withName(R.string.drawer_item_contact).withIcon(FontAwesome.Icon.faw_bullhorn),\n                SectionDrawerItem().withName(R.string.drawer_item_section_header),\n                PrimaryDrawerItem().withName(R.string.drawer_item_custom).withIcon(FontAwesome.Icon.faw_eye),\n                PrimaryDrawerItem().withName(R.string.drawer_item_custom).withIcon(FontAwesome.Icon.faw_eye),\n                PrimaryDrawerItem().withName(R.string.drawer_item_custom).withIcon(FontAwesome.Icon.faw_eye),\n                PrimaryDrawerItem().withName(R.string.drawer_item_custom).withIcon(FontAwesome.Icon.faw_eye),\n                PrimaryDrawerItem().withName(R.string.drawer_item_custom).withIcon(FontAwesome.Icon.faw_eye),\n                PrimaryDrawerItem().withName(R.string.drawer_item_custom).withIcon(FontAwesome.Icon.faw_eye),\n                PrimaryDrawerItem().withName(R.string.drawer_item_custom).withIcon(FontAwesome.Icon.faw_eye),\n                PrimaryDrawerItem().withName(R.string.drawer_item_custom).withIcon(FontAwesome.Icon.faw_eye),\n                    PrimaryDrawerItem().withName(R.string.drawer_item_custom).withIcon(FontAwesome.Icon.faw_eye),\n                    PrimaryDrawerItem().withName(R.string.drawer_item_custom).withIcon(FontAwesome.Icon.faw_eye),\n                    PrimaryDrawerItem().withName(R.string.drawer_item_custom).withIcon(FontAwesome.Icon.faw_eye)\n            )\n            setSavedInstance(savedInstanceState)\n        }\n\n        ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets ->\n            binding.toolbar.updatePadding(top = insets.systemWindowInsetTop)\n            insets\n        }\n    }\n\n    override fun onConfigurationChanged(newConfig: Configuration) {\n        super.onConfigurationChanged(newConfig)\n        actionBarDrawerToggle.onConfigurationChanged(newConfig)\n    }\n\n    override fun onPostCreate(savedInstanceState: Bundle?) {\n        super.onPostCreate(savedInstanceState)\n        actionBarDrawerToggle.syncState()\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        if (actionBarDrawerToggle.onOptionsItemSelected(item)) {\n            return true\n        }\n        return super.onOptionsItemSelected(item)\n    }\n\n    override fun onSaveInstanceState(_outState: Bundle) {\n        var outState = _outState\n        //add the values which need to be saved from the drawer to the bundle\n        outState = binding.slider.saveInstanceState(outState)\n        super.onSaveInstanceState(outState)\n    }\n\n    override fun onBackPressed() {\n        //handle the back press :D close the drawer first and if the drawer is closed close the activity\n        if (binding.root.isDrawerOpen(binding.slider)) {\n            binding.root.closeDrawer(binding.slider)\n        } else {\n            super.onBackPressed()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/MenuDrawerActivity.kt",
    "content": "package com.mikepenz.materialdrawer.app\n\nimport android.content.res.Configuration\nimport android.os.Bundle\nimport android.view.MenuItem\nimport android.widget.Toast\nimport androidx.appcompat.app.ActionBarDrawerToggle\nimport androidx.appcompat.app.AppCompatActivity\nimport com.mikepenz.materialdrawer.app.databinding.ActivitySampleBinding\nimport com.mikepenz.materialdrawer.model.interfaces.Nameable\nimport com.mikepenz.materialdrawer.util.inflateMenu\n\nclass MenuDrawerActivity : AppCompatActivity() {\n    private lateinit var binding: ActivitySampleBinding\n    private lateinit var actionBarDrawerToggle: ActionBarDrawerToggle\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        binding = ActivitySampleBinding.inflate(layoutInflater).also {\n            setContentView(it.root)\n        }\n\n        // Handle Toolbar\n        setSupportActionBar(binding.toolbar)\n        supportActionBar?.setTitle(R.string.drawer_item_menu_drawer)\n        supportActionBar?.setDisplayHomeAsUpEnabled(true)\n        supportActionBar?.setHomeButtonEnabled(true)\n\n        actionBarDrawerToggle = ActionBarDrawerToggle(this, binding.root, binding.toolbar, com.mikepenz.materialdrawer.R.string.material_drawer_open, com.mikepenz.materialdrawer.R.string.material_drawer_close)\n\n        binding.slider.apply {\n            inflateMenu(R.menu.example_menu)\n            onDrawerItemClickListener = { v, drawerItem, position ->\n                if (drawerItem is Nameable) {\n                    Toast.makeText(this@MenuDrawerActivity, (drawerItem as Nameable).name!!.getText(this@MenuDrawerActivity), Toast.LENGTH_SHORT).show()\n                }\n                false\n            }\n            setSavedInstance(savedInstanceState)\n        }\n\n        // set the selection to the item with the identifier 5\n        if (savedInstanceState == null) {\n            binding.slider.setSelection(5, false)\n        }\n    }\n\n    override fun onConfigurationChanged(newConfig: Configuration) {\n        super.onConfigurationChanged(newConfig)\n        actionBarDrawerToggle.onConfigurationChanged(newConfig)\n    }\n\n    override fun onPostCreate(savedInstanceState: Bundle?) {\n        super.onPostCreate(savedInstanceState)\n        actionBarDrawerToggle.syncState()\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        if (actionBarDrawerToggle.onOptionsItemSelected(item)) {\n            return true\n        }\n        return super.onOptionsItemSelected(item)\n    }\n\n    override fun onSaveInstanceState(_outState: Bundle) {\n        var outState = _outState\n        //add the values which need to be saved from the drawer to the bundle\n        outState = binding.slider.saveInstanceState(outState)\n        super.onSaveInstanceState(outState)\n    }\n\n    override fun onBackPressed() {\n        //handle the back press :D close the drawer first and if the drawer is closed close the activity\n        if (binding.root.isDrawerOpen(binding.slider)) {\n            binding.root.closeDrawer(binding.slider)\n        } else {\n            super.onBackPressed()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/MiniDrawerActivity.kt",
    "content": "package com.mikepenz.materialdrawer.app\n\nimport android.content.res.Configuration\nimport android.graphics.Color\nimport android.net.Uri\nimport android.os.Bundle\nimport android.util.Log\nimport android.view.Menu\nimport android.view.MenuItem\nimport android.view.View\nimport android.view.ViewGroup.LayoutParams.MATCH_PARENT\nimport android.widget.CompoundButton\nimport android.widget.Toast\nimport androidx.appcompat.app.AppCompatActivity\nimport com.mikepenz.crossfader.Crossfader\nimport com.mikepenz.crossfader.util.UIUtils\nimport com.mikepenz.crossfader.view.CrossFadeSlidingPaneLayout\nimport com.mikepenz.iconics.IconicsDrawable\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesome\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesomeBrand\nimport com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial\nimport com.mikepenz.iconics.utils.actionBar\nimport com.mikepenz.iconics.utils.colorInt\nimport com.mikepenz.materialdrawer.app.databinding.ActivityMiniDrawerBinding\nimport com.mikepenz.materialdrawer.app.utils.CrossfadeWrapper\nimport com.mikepenz.materialdrawer.app.utils.SystemUtils\nimport com.mikepenz.materialdrawer.holder.BadgeStyle\nimport com.mikepenz.materialdrawer.iconics.withIcon\nimport com.mikepenz.materialdrawer.interfaces.OnCheckedChangeListener\nimport com.mikepenz.materialdrawer.model.*\nimport com.mikepenz.materialdrawer.model.interfaces.*\nimport com.mikepenz.materialdrawer.model.utils.withIsHiddenInMiniDrawer\nimport com.mikepenz.materialdrawer.widget.AccountHeaderView\nimport com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\nimport com.mikepenz.materialdrawer.widget.MiniDrawerSliderView\n\nclass MiniDrawerActivity : AppCompatActivity() {\n    private lateinit var binding: ActivityMiniDrawerBinding\n\n    //save our header or result\n    private lateinit var headerView: AccountHeaderView\n    private lateinit var miniSliderView: MiniDrawerSliderView\n    private lateinit var sliderView: MaterialDrawerSliderView\n    private lateinit var crossFader: Crossfader<*>\n\n    private val onCheckedChangeListener = object : OnCheckedChangeListener {\n        override fun onCheckedChanged(drawerItem: IDrawerItem<*>, buttonView: CompoundButton, isChecked: Boolean) {\n            if (drawerItem is Nameable) {\n                Log.i(\"material-drawer\", \"DrawerItem: \" + (drawerItem as Nameable).name + \" - toggleChecked: \" + isChecked)\n            } else {\n                Log.i(\"material-drawer\", \"toggleChecked: $isChecked\")\n            }\n        }\n    }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        binding = ActivityMiniDrawerBinding.inflate(layoutInflater).also {\n            setContentView(it.root)\n        }\n\n        // Handle Toolbar\n        setSupportActionBar(binding.toolbar)\n        //set the back arrow in the toolbar\n        supportActionBar?.setDisplayHomeAsUpEnabled(true)\n        supportActionBar?.setTitle(R.string.drawer_item_mini_drawer)\n\n        // Create a few sample profile\n        // NOTE you have to define the loader logic too. See the CustomApplication for more details\n        val profile = ProfileDrawerItem().withName(\"Mike Penz\").withEmail(\"mikepenz@gmail.com\").withIcon(\"https://avatars3.githubusercontent.com/u/1476232?v=3&s=460\")\n        val profile2 = ProfileDrawerItem().withName(\"Bernat Borras\").withEmail(\"alorma@github.com\").withIcon(Uri.parse(\"https://avatars3.githubusercontent.com/u/887462?v=3&s=460\"))\n        val profile3 = ProfileDrawerItem().withName(\"Max Muster\").withEmail(\"max.mustermann@gmail.com\").withIcon(resources.getDrawable(R.drawable.profile2))\n        val profile4 = ProfileDrawerItem().withName(\"Felix House\").withEmail(\"felix.house@gmail.com\").withIcon(resources.getDrawable(R.drawable.profile3))\n        val profile5 = ProfileDrawerItem().withName(\"Mr. X\").withEmail(\"mister.x.super@gmail.com\").withIcon(resources.getDrawable(R.drawable.profile4)).withIdentifier(4)\n        val profile6 = ProfileDrawerItem().withName(\"Batman\").withEmail(\"batman@gmail.com\").withIcon(resources.getDrawable(R.drawable.profile5))\n\n        // Create the AccountHeader\n        headerView = AccountHeaderView(this).apply {\n            addProfiles(\n                    profile,\n                    profile2,\n                    profile3,\n                    profile4,\n                    profile5,\n                    profile6,\n                    //don't ask but google uses 14dp for the add account icon in gmail but 20dp for the normal icons (like manage account)\n                    ProfileSettingDrawerItem().withName(\"Add Account\").withDescription(\"Add new GitHub Account\").withIcon(GoogleMaterial.Icon.gmd_add).withIdentifier(PROFILE_SETTING.toLong()),\n                    ProfileSettingDrawerItem().withName(\"Manage Account\").withIcon(GoogleMaterial.Icon.gmd_settings)\n            )\n            onAccountHeaderListener = { view, profile, current ->\n                //sample usage of the onProfileChanged listener\n                //if the clicked item has the identifier 1 add a new profile ;)\n                if (profile is IDrawerItem<*> && (profile as IDrawerItem<*>).identifier == PROFILE_SETTING.toLong()) {\n                    val newProfile = ProfileDrawerItem().withNameShown(true).withName(\"Batman\").withEmail(\"batman@gmail.com\").withIcon(resources.getDrawable(R.drawable.profile5))\n                    headerView.profiles?.let {\n                        //we know that there are 2 setting elements. set the new profile above them ;)\n                        headerView.addProfile(newProfile, it.size - 2)\n                    } ?: headerView.addProfiles(newProfile)\n                }\n\n                //false if you have not consumed the event and it should close the drawer\n                false\n            }\n            withSavedInstance(savedInstanceState)\n        }\n\n        sliderView = MaterialDrawerSliderView(this).apply {\n            accountHeader = this@MiniDrawerActivity.headerView\n            customWidth = MATCH_PARENT\n            itemAdapter.add(\n                PrimaryDrawerItem().withName(R.string.drawer_item_compact_header).withIcon(GoogleMaterial.Icon.gmd_brightness_5).withIdentifier(1),\n                PrimaryDrawerItem().withName(\"Item NOT in mini drawer\").withIcon(GoogleMaterial.Icon.gmd_bluetooth).withIdentifier(100)\n                    .withIsHiddenInMiniDrawer(true),\n                PrimaryDrawerItem().withName(R.string.drawer_item_action_bar_drawer).withIcon(FontAwesome.Icon.faw_home).withBadge(\"22\")\n                    .withBadgeStyle(BadgeStyle(Color.RED, Color.RED)).withIdentifier(2).withSelectable(false),\n                PrimaryDrawerItem().withName(R.string.drawer_item_multi_drawer).withIcon(FontAwesome.Icon.faw_gamepad).withIdentifier(3),\n                PrimaryDrawerItem().withName(R.string.drawer_item_non_translucent_status_drawer).withIcon(FontAwesome.Icon.faw_eye).withIdentifier(4),\n                PrimaryDrawerItem().withDescription(\"A more complex sample\").withName(R.string.drawer_item_advanced_drawer)\n                    .withIcon(GoogleMaterial.Icon.gmd_adb).withIdentifier(5),\n                SectionDrawerItem().withName(R.string.drawer_item_section_header),\n                SecondaryDrawerItem().withName(R.string.drawer_item_open_source).withIcon(FontAwesomeBrand.Icon.fab_github),\n                SecondaryDrawerItem().withName(R.string.drawer_item_contact).withIcon(GoogleMaterial.Icon.gmd_format_color_fill).withTag(\"Bullhorn\"),\n                DividerDrawerItem(),\n                SwitchDrawerItem().withName(\"Switch\").withIcon(GoogleMaterial.Icon.gmd_pan_tool).withChecked(true)\n                    .withOnCheckedChangeListener(onCheckedChangeListener),\n                ToggleDrawerItem().withName(\"Toggle\").withIcon(GoogleMaterial.Icon.gmd_pan_tool).withChecked(true)\n                    .withOnCheckedChangeListener(onCheckedChangeListener)\n            )\n            onDrawerItemClickListener = { v, item, position ->\n                if (item is Nameable) {\n                    Toast.makeText(this@MiniDrawerActivity, item.name?.getText(this@MiniDrawerActivity), Toast.LENGTH_SHORT).show()\n                }\n                false\n            }\n        }\n\n        miniSliderView = MiniDrawerSliderView(this).apply {\n            drawer = sliderView\n        }\n\n        //get the widths in px for the first and second panel\n        val firstWidth = UIUtils.convertDpToPixel(300f, this).toInt()\n        val secondWidth = UIUtils.convertDpToPixel(72f, this).toInt()\n\n        //create and build our crossfader (see the MiniDrawer is also builded in here, as the build method returns the view to be used in the crossfader)\n        //the crossfader library can be found here: https://github.com/mikepenz/Crossfader\n        crossFader = Crossfader<CrossFadeSlidingPaneLayout>()\n                .withContent(findViewById<View>(R.id.crossfade_content))\n                .withFirst(sliderView, firstWidth)\n                .withSecond(miniSliderView, secondWidth)\n                .withSavedInstance(savedInstanceState)\n                .build()\n\n        //define the crossfader to be used with the miniDrawer. This is required to be able to automatically toggle open / close\n        miniSliderView.crossFader = CrossfadeWrapper(crossFader)\n\n        //define a shadow (this is only for normal LTR layouts if you have a RTL app you need to define the other one\n        crossFader.getCrossFadeSlidingPaneLayout().setShadowResourceLeft(com.mikepenz.materialdrawer.R.drawable.material_drawer_shadow_left)\n    }\n\n    override fun onSaveInstanceState(_outState: Bundle) {\n        var outState = _outState\n        //add the values, which need to be saved from the drawer to the bundle\n        if (::sliderView.isInitialized) {\n            outState = sliderView.saveInstanceState(outState)\n        }\n        //add the values, which need to be saved from the accountHeader to the bundle\n        if (::headerView.isInitialized) {\n            outState = headerView.saveInstanceState(outState)\n        }\n        //add the values, which need to be saved from the crossFader to the bundle\n        if (::crossFader.isInitialized) {\n            outState = crossFader.saveInstanceState(outState)\n        }\n        super.onSaveInstanceState(outState)\n    }\n\n\n    override fun onCreateOptionsMenu(menu: Menu): Boolean {\n        val inflater = menuInflater\n        if (SystemUtils.screenOrientation == Configuration.ORIENTATION_LANDSCAPE) {\n            inflater.inflate(R.menu.embedded, menu)\n            menu.findItem(R.id.menu_1).icon = IconicsDrawable(this, GoogleMaterial.Icon.gmd_sort).apply { actionBar(); colorInt = Color.WHITE }\n        }\n        return true\n    }\n\n    override fun onBackPressed() {\n        //handle the back press :D close the drawer first and if the drawer is closed close the activity\n        if (crossFader.isCrossFaded) {\n            crossFader.crossFade()\n        } else {\n            super.onBackPressed()\n        }\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        //handle the click on the back arrow click\n        return when (item.itemId) {\n            R.id.menu_1 -> {\n                crossFader.crossFade()\n                true\n            }\n            android.R.id.home -> {\n                onBackPressed()\n                true\n            }\n            else -> super.onOptionsItemSelected(item)\n        }\n    }\n\n    companion object {\n        private const val PROFILE_SETTING = 1\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/MultiDrawerActivity.kt",
    "content": "package com.mikepenz.materialdrawer.app\n\nimport android.os.Bundle\nimport android.view.MenuItem\nimport android.widget.Toast\nimport androidx.appcompat.app.AppCompatActivity\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesome\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesomeBrand\nimport com.mikepenz.materialdrawer.app.databinding.ActivityMultiSampleBinding\nimport com.mikepenz.materialdrawer.app.drawerItems.GmailDrawerItem\nimport com.mikepenz.materialdrawer.iconics.withIcon\nimport com.mikepenz.materialdrawer.model.PrimaryDrawerItem\nimport com.mikepenz.materialdrawer.model.SecondaryDrawerItem\nimport com.mikepenz.materialdrawer.model.SectionDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.*\nimport com.mikepenz.materialdrawer.util.updateItem\n\nclass MultiDrawerActivity : AppCompatActivity() {\n    private lateinit var binding: ActivityMultiSampleBinding\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        //supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);\n\n        super.onCreate(savedInstanceState)\n        binding = ActivityMultiSampleBinding.inflate(layoutInflater).also {\n            setContentView(it.root)\n        }\n\n        // Handle Toolbar\n        setSupportActionBar(binding.toolbar)\n        supportActionBar?.setTitle(R.string.drawer_item_multi_drawer)\n\n        binding.slider.apply {\n            itemAdapter.add(\n                GmailDrawerItem().withName(R.string.drawer_item_home).withIcon(FontAwesome.Icon.faw_home).withIdentifier(1),\n                GmailDrawerItem().withName(R.string.drawer_item_free_play).withIcon(FontAwesome.Icon.faw_gamepad),\n                GmailDrawerItem().withName(R.string.drawer_item_custom).withIcon(FontAwesome.Icon.faw_eye).withIdentifier(5),\n                SectionDrawerItem().withName(R.string.drawer_item_section_header),\n                SecondaryDrawerItem().withName(R.string.drawer_item_settings).withIcon(FontAwesome.Icon.faw_cog),\n                SecondaryDrawerItem().withName(R.string.drawer_item_help).withIcon(FontAwesome.Icon.faw_question).withEnabled(false),\n                SecondaryDrawerItem().withName(R.string.drawer_item_open_source).withIcon(FontAwesomeBrand.Icon.fab_github),\n                SecondaryDrawerItem().withName(R.string.drawer_item_contact).withIcon(FontAwesome.Icon.faw_bullhorn)\n            )\n            adapter.onClickListener = { v, adapter, drawerItem, position ->\n                if (drawerItem is Badgeable) {\n                    if (drawerItem.badge != null) {\n                        //note don't do this if your badge contains a \"+\"\n                        //only use toString() if you set the test as String\n                        val badge = Integer.valueOf(drawerItem.badge?.toString() ?: \"0\")\n                        if (badge > 0) {\n                            drawerItem.withBadge((badge - 1).toString())\n                            binding.slider.updateItem(drawerItem)\n                        }\n                    }\n                }\n                if (drawerItem is Nameable) {\n                    Toast.makeText(this@MultiDrawerActivity, drawerItem.name?.getText(this@MultiDrawerActivity), Toast.LENGTH_SHORT).show()\n                }\n                false\n            }\n            setSavedInstance(savedInstanceState)\n            setSelectionAtPosition(0)\n        }\n\n        binding.sliderEnd.apply {\n            stickyHeaderView = layoutInflater.inflate(R.layout.header, null)\n            itemAdapter.add(\n                PrimaryDrawerItem().withName(R.string.drawer_item_home).withIcon(FontAwesome.Icon.faw_home).withIdentifier(1),\n                PrimaryDrawerItem().withName(R.string.drawer_item_free_play).withIcon(FontAwesome.Icon.faw_gamepad),\n                PrimaryDrawerItem().withName(R.string.drawer_item_custom).withIcon(FontAwesome.Icon.faw_eye).withIdentifier(5),\n                SectionDrawerItem().withName(R.string.drawer_item_section_header),\n                SecondaryDrawerItem().withName(R.string.drawer_item_settings).withIcon(FontAwesome.Icon.faw_cog),\n                SecondaryDrawerItem().withName(R.string.drawer_item_help).withIcon(FontAwesome.Icon.faw_question).withEnabled(false),\n                SecondaryDrawerItem().withName(R.string.drawer_item_open_source).withIcon(FontAwesomeBrand.Icon.fab_github),\n                SecondaryDrawerItem().withName(R.string.drawer_item_contact).withIcon(FontAwesome.Icon.faw_bullhorn)\n            )\n            adapter.onClickListener = { v, adapter, drawerItem, position ->\n                if (drawerItem is Nameable) {\n                    Toast.makeText(this@MultiDrawerActivity, drawerItem.name?.getText(this@MultiDrawerActivity), Toast.LENGTH_SHORT).show()\n                }\n                false\n            }\n            savedInstanceKey = \"end\"\n            setSavedInstance(savedInstanceState)\n        }\n\n        //set the back arrow in the toolbar\n        supportActionBar?.setDisplayHomeAsUpEnabled(true)\n        supportActionBar?.setHomeButtonEnabled(false)\n    }\n\n\n    override fun onSaveInstanceState(_outState: Bundle) {\n        var outState = _outState\n        //add the values which need to be saved from the drawer to the bundle\n        outState = binding.slider.saveInstanceState(outState)\n        //add the values which need to be saved from the drawer to the bundle\n        outState = binding.sliderEnd.saveInstanceState(outState)\n        super.onSaveInstanceState(outState)\n    }\n\n    override fun onBackPressed() {\n        //handle the back press :D close the drawer first and if the drawer is closed close the activity\n        when {\n            binding.root.isDrawerOpen(binding.slider) -> binding.root.closeDrawer(binding.slider)\n            binding.root.isDrawerOpen(binding.sliderEnd) -> binding.root.closeDrawer(binding.sliderEnd)\n            else -> super.onBackPressed()\n        }\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        //handle the click on the back arrow click\n        return when (item.itemId) {\n            android.R.id.home -> {\n                onBackPressed()\n                true\n            }\n\n            else -> super.onOptionsItemSelected(item)\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/NavControllerActivity.kt",
    "content": "package com.mikepenz.materialdrawer.app\n\nimport android.os.Bundle\nimport androidx.appcompat.app.AppCompatActivity\nimport androidx.appcompat.widget.Toolbar\nimport androidx.core.os.bundleOf\nimport androidx.navigation.findNavController\nimport com.mikepenz.aboutlibraries.LibsBuilder\nimport com.mikepenz.materialdrawer.app.databinding.ActivitySampleNavBinding\nimport com.mikepenz.materialdrawer.model.DividerDrawerItem\nimport com.mikepenz.materialdrawer.model.NavigationDrawerItem\nimport com.mikepenz.materialdrawer.model.PrimaryDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.withName\nimport com.mikepenz.materialdrawer.util.addItems\nimport com.mikepenz.materialdrawer.util.addStickyDrawerItems\nimport com.mikepenz.materialdrawer.util.setupWithNavController\nimport java.io.Serializable\n\nclass NavControllerActivity : AppCompatActivity() {\n    private lateinit var binding: ActivitySampleNavBinding\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        binding = ActivitySampleNavBinding.inflate(layoutInflater).also {\n            setContentView(it.root)\n        }\n        val toolbar = findViewById<Toolbar>(R.id.toolbar)\n        setSupportActionBar(toolbar)\n\n        val navController = findNavController(R.id.nav_host_fragment)\n\n        binding.slider.apply {\n            addItems(\n                    NavigationDrawerItem(R.id.action_global_fragmentHome, PrimaryDrawerItem().withName(\"Home\"), null, null),\n                    DividerDrawerItem(),\n                    NavigationDrawerItem(R.id.messageFragment1, PrimaryDrawerItem().withName(\"Fragment1\")),\n                    NavigationDrawerItem(R.id.messageFragment2, PrimaryDrawerItem().withName(\"Fragment2\"))\n            )\n            addStickyDrawerItems(\n                    NavigationDrawerItem(R.id.messageFragment3, PrimaryDrawerItem().withName(\"Fragment3\")),\n                    NavigationDrawerItem(R.id.about_libraries, PrimaryDrawerItem().withName(\"AboutLibs\"), bundleOf(\"data\" to (LibsBuilder() as Serializable)))\n            )\n        }\n\n\n        // setup the drawer with navigation controller\n        binding.slider.setupWithNavController(navController)\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/PersistentDrawerActivity.kt",
    "content": "package com.mikepenz.materialdrawer.app\n\nimport android.graphics.Color\nimport android.graphics.drawable.ColorDrawable\nimport android.os.Bundle\nimport android.view.MenuItem\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.ImageView\nimport androidx.appcompat.app.AppCompatActivity\nimport androidx.core.view.ViewCompat\nimport androidx.core.view.updatePadding\nimport com.mikepenz.crossfader.Crossfader\nimport com.mikepenz.crossfader.util.UIUtils\nimport com.mikepenz.crossfader.view.CrossFadeSlidingPaneLayout\nimport com.mikepenz.iconics.IconicsDrawable\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesome\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesomeBrand\nimport com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial\nimport com.mikepenz.iconics.utils.colorInt\nimport com.mikepenz.iconics.utils.sizeDp\nimport com.mikepenz.materialdrawer.app.databinding.ActivityPersistentDrawerBinding\nimport com.mikepenz.materialdrawer.app.utils.CrossfadeWrapper\nimport com.mikepenz.materialdrawer.holder.ImageHolder\nimport com.mikepenz.materialdrawer.iconics.withIcon\nimport com.mikepenz.materialdrawer.model.PrimaryDrawerItem\nimport com.mikepenz.materialdrawer.model.ProfileDrawerItem\nimport com.mikepenz.materialdrawer.model.SecondaryDrawerItem\nimport com.mikepenz.materialdrawer.model.SectionDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.*\nimport com.mikepenz.materialdrawer.widget.AccountHeaderView\nimport com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\nimport com.mikepenz.materialdrawer.widget.MiniDrawerSliderView\n\nclass PersistentDrawerActivity : AppCompatActivity() {\n    private lateinit var binding: ActivityPersistentDrawerBinding\n\n    //save our header or result\n    private lateinit var headerView: AccountHeaderView\n    private lateinit var miniSliderView: MiniDrawerSliderView\n    private lateinit var sliderView: MaterialDrawerSliderView\n    private lateinit var crossFader: Crossfader<*>\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        binding = ActivityPersistentDrawerBinding.inflate(layoutInflater).also {\n            setContentView(it.root)\n        }\n\n        //Remove line to test RTL support\n        // getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL);\n\n        //example how to implement a persistentDrawer as shown in the google material design guidelines\n        //https://material-design.storage.googleapis.com/publish/material_v_4/material_ext_publish/0Bx4BSt6jniD7YVdKQlF3TEo2S3M/patterns_navdrawer_behavior_persistent2.png\n        //https://www.google.com/design/spec/patterns/navigation-drawer.html#navigation-drawer-behavior\n\n        // Handle Toolbar\n        setSupportActionBar(binding.toolbar)\n        supportActionBar?.setTitle(R.string.drawer_item_persistent_compact_header)\n\n        // Create a few sample profile\n        val profile = ProfileDrawerItem().withName(\"Mike Penz\").withEmail(\"mikepenz@gmail.com\").withIcon(R.drawable.profile)\n        val profile2 = ProfileDrawerItem().withName(\"Max Muster\").withEmail(\"max.mustermann@gmail.com\").withIcon(R.drawable.profile2)\n        val profile3 = ProfileDrawerItem().withName(\"Felix House\").withEmail(\"felix.house@gmail.com\").withIcon(R.drawable.profile3)\n        val profile4 = ProfileDrawerItem().withName(\"Mr. X\").withEmail(\"mister.x.super@gmail.com\").withIcon(R.drawable.profile4)\n        val profile5 = ProfileDrawerItem().withName(\"Batman\").withEmail(\"batman@gmail.com\").withIcon(R.drawable.profile5)\n\n        // Create the AccountHeader\n        headerView = AccountHeaderView(this).apply {\n            addProfiles(\n                    profile,\n                    profile2,\n                    profile3,\n                    profile4,\n                    profile5\n            )\n            headerBackground = ImageHolder(ColorDrawable(Color.parseColor(\"#FDFDFD\")))\n        }\n        // UIUtils.getActionBarHeight(this))\n        //.withAccountHeader(R.layout.material_drawer_compact_persistent_header)\n\n        //Create the drawer\n        sliderView = MaterialDrawerSliderView(this).apply {\n            accountHeader = this@PersistentDrawerActivity.headerView\n            customWidth = ViewGroup.LayoutParams.MATCH_PARENT\n            itemAdapter.add(\n                PrimaryDrawerItem().withName(R.string.drawer_item_home).withIcon(FontAwesome.Icon.faw_home).withIdentifier(1),\n                PrimaryDrawerItem().withName(R.string.drawer_item_free_play).withIcon(FontAwesome.Icon.faw_gamepad),\n                PrimaryDrawerItem().withName(R.string.drawer_item_custom).withIcon(FontAwesome.Icon.faw_eye),\n                SectionDrawerItem().withName(R.string.drawer_item_section_header),\n                SecondaryDrawerItem().withName(R.string.drawer_item_settings).withIcon(FontAwesome.Icon.faw_cog),\n                SecondaryDrawerItem().withName(R.string.drawer_item_help).withIcon(FontAwesome.Icon.faw_question).withEnabled(false),\n                SecondaryDrawerItem().withName(R.string.drawer_item_open_source).withIcon(FontAwesomeBrand.Icon.fab_github),\n                SecondaryDrawerItem().withName(R.string.drawer_item_contact).withIcon(FontAwesome.Icon.faw_bullhorn)\n            )\n        }\n\n        // create the MiniDrawer and define the drawer and header to be used (it will automatically use the items from them)\n        miniSliderView = MiniDrawerSliderView(this).apply {\n            includeSecondaryDrawerItems = true\n            drawer = sliderView\n        }\n\n        //set the back arrow in the toolbar\n        supportActionBar?.setDisplayHomeAsUpEnabled(true)\n        supportActionBar?.setHomeButtonEnabled(false)\n\n        //get the widths in px for the first and second panel\n        val firstWidth = UIUtils.convertDpToPixel(300f, this).toInt()\n        val secondWidth = UIUtils.convertDpToPixel(72f, this).toInt()\n\n        //create and build our crossfader (see the MiniDrawer is also builded in here, as the build method returns the view to be used in the crossfader)\n        crossFader = Crossfader<CrossFadeSlidingPaneLayout>()\n                .withContent(findViewById<View>(R.id.crossfade_content))\n                .withFirst(sliderView as View, firstWidth)\n                .withSecond(miniSliderView, secondWidth)\n                .withSavedInstance(savedInstanceState)\n                .build()\n\n        //define the crossfader to be used with the miniDrawer. This is required to be able to automatically toggle open / close\n        miniSliderView.crossFader = CrossfadeWrapper(crossFader)\n\n        //define and create the arrow ;)\n        val toggle = headerView.findViewById<ImageView>(R.id.material_drawer_account_header_toggle)\n        //for RTL you would have to define the other arrow\n        toggle.setImageDrawable(IconicsDrawable(this, GoogleMaterial.Icon.gmd_chevron_left).apply { sizeDp = 16; colorInt = Color.BLACK })\n        toggle.setOnClickListener { crossFader.crossFade() }\n\n        ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets ->\n            binding.toolbar.updatePadding(top = insets.systemWindowInsetTop)\n            insets\n        }\n    }\n\n    override fun onSaveInstanceState(_outState: Bundle) {\n        var outState = _outState\n        //add the values, which need to be saved from the drawer to the bundle\n        if (::sliderView.isInitialized) {\n            outState = sliderView.saveInstanceState(outState)\n        }\n        //add the values, which need to be saved from the accountHeader to the bundle\n        if (::headerView.isInitialized) {\n            outState = headerView.saveInstanceState(outState)\n        }\n        //add the values, which need to be saved from the crossFader to the bundle\n        if (::crossFader.isInitialized) {\n            outState = crossFader.saveInstanceState(outState)\n        }\n        super.onSaveInstanceState(outState)\n    }\n\n    override fun onOptionsItemSelected(item: MenuItem): Boolean {\n        //handle the click on the back arrow click\n        return when (item.itemId) {\n            android.R.id.home -> {\n                onBackPressed()\n                true\n            }\n            else -> super.onOptionsItemSelected(item)\n        }\n    }\n\n    override fun onBackPressed() {\n        //handle the back press :D close the drawer first and if the drawer is closed close the activity\n        if (crossFader.isCrossFaded) {\n            crossFader.crossFade()\n        } else {\n            super.onBackPressed()\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/AccountDividerDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.app.drawerItems\n\nimport android.content.res.ColorStateList\nimport android.view.View\nimport androidx.annotation.LayoutRes\nimport androidx.core.view.ViewCompat\nimport androidx.recyclerview.widget.RecyclerView\nimport com.mikepenz.materialdrawer.app.R\nimport com.mikepenz.materialdrawer.holder.ImageHolder\nimport com.mikepenz.materialdrawer.holder.StringHolder\nimport com.mikepenz.materialdrawer.model.AbstractDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.IProfile\nimport com.mikepenz.materialdrawer.util.getDividerColor\n\nclass AccountDividerDrawerItem : AbstractDrawerItem<AccountDividerDrawerItem, AccountDividerDrawerItem.ViewHolder>(), IProfile {\n    override val type: Int\n        get() = R.id.material_drawer_profile_item_divider\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = com.mikepenz.materialdrawer.R.layout.material_drawer_item_divider\n\n    override var name: StringHolder? = null\n    override var description: StringHolder? = null\n    override var icon: ImageHolder? = null\n    override var iconColor: ColorStateList? = null\n\n    override fun bindView(holder: ViewHolder, payloads: List<Any>) {\n        super.bindView(holder, payloads)\n\n        val ctx = holder.itemView.context\n\n        //set the identifier from the drawerItem here. It can be used to run tests\n        holder.itemView.id = hashCode()\n\n        //define how the divider should look like\n        holder.view.isClickable = false\n        holder.view.isEnabled = false\n        holder.view.minimumHeight = 1\n        ViewCompat.setImportantForAccessibility(holder.view,\n                ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO)\n\n        //set the color for the divider\n        holder.divider.setBackgroundColor(ctx.getDividerColor())\n\n        //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)\n        onPostBindView(this, holder.itemView)\n    }\n\n    override fun getViewHolder(v: View): ViewHolder {\n        return ViewHolder(v)\n    }\n\n    class ViewHolder internal constructor(internal val view: View) : RecyclerView.ViewHolder(view) {\n        internal val divider: View = view.findViewById(com.mikepenz.materialdrawer.R.id.material_drawer_divider)\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomBaseViewHolder.kt",
    "content": "package com.mikepenz.materialdrawer.app.drawerItems\n\nimport android.view.View\nimport android.widget.ImageView\nimport android.widget.TextView\nimport androidx.recyclerview.widget.RecyclerView\nimport com.mikepenz.materialdrawer.app.R\n\nopen class CustomBaseViewHolder(var view: View) : RecyclerView.ViewHolder(view) {\n    var icon: ImageView = view.findViewById<ImageView>(R.id.material_drawer_icon)\n    var name: TextView = view.findViewById<TextView>(R.id.material_drawer_name)\n    var description: TextView = view.findViewById<TextView>(R.id.material_drawer_description)\n}"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomCenteredPrimaryDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.app.drawerItems\n\nimport com.mikepenz.materialdrawer.app.R\nimport com.mikepenz.materialdrawer.model.PrimaryDrawerItem\n\nclass CustomCenteredPrimaryDrawerItem : PrimaryDrawerItem() {\n\n    override val layoutRes: Int\n        get() = R.layout.material_drawer_item_primary_centered\n\n    override val type: Int\n        get() = R.id.material_drawer_item_centered_primary\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomPrimaryDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.app.drawerItems\n\nimport com.mikepenz.materialdrawer.holder.ColorHolder\nimport com.mikepenz.materialdrawer.model.AbstractBadgeableDrawerItem\n\nclass CustomPrimaryDrawerItem : AbstractBadgeableDrawerItem<CustomPrimaryDrawerItem>() {\n\n    var background: ColorHolder? = null\n\n    fun withBackgroundColor(backgroundColor: Int): CustomPrimaryDrawerItem {\n        this.background = ColorHolder.fromColor(backgroundColor)\n        return this\n    }\n\n    fun withBackgroundRes(backgroundRes: Int): CustomPrimaryDrawerItem {\n        this.background = ColorHolder.fromColorRes(backgroundRes)\n        return this\n    }\n\n    override fun bindView(holder: AbstractBadgeableDrawerItem.ViewHolder, payloads: List<Any>) {\n        super.bindView(holder, payloads)\n        background?.applyToBackground(holder.itemView)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomUrlBasePrimaryDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.app.drawerItems\n\nimport android.net.Uri\nimport androidx.annotation.StringRes\nimport androidx.recyclerview.widget.RecyclerView\nimport com.mikepenz.materialdrawer.holder.ColorHolder\nimport com.mikepenz.materialdrawer.holder.ImageHolder\nimport com.mikepenz.materialdrawer.holder.StringHolder\nimport com.mikepenz.materialdrawer.model.BaseDrawerItem\nimport com.mikepenz.materialdrawer.util.DrawerImageLoader\nimport com.mikepenz.materialdrawer.util.setDrawerVerticalPadding\nimport com.mikepenz.materialdrawer.util.themeDrawerItem\n\n/**\n * Created by mikepenz on 03.02.15.\n */\nabstract class CustomUrlBasePrimaryDrawerItem<T, VH : RecyclerView.ViewHolder> : BaseDrawerItem<T, VH>() {\n\n    var description: StringHolder? = null\n    var descriptionTextColor: ColorHolder? = null\n\n    fun withIcon(url: String): T {\n        this.icon = ImageHolder(url)\n        return this as T\n    }\n\n    fun withIcon(uri: Uri): T {\n        this.icon = ImageHolder(uri)\n        return this as T\n    }\n\n    fun withDescription(description: String): T {\n        this.description = StringHolder(description)\n        return this as T\n    }\n\n    fun withDescription(@StringRes descriptionRes: Int): T {\n        this.description = StringHolder(descriptionRes)\n        return this as T\n    }\n\n    /**\n     * a helper method to have the logic for all secondaryDrawerItems only once\n     *\n     * @param viewHolder\n     */\n    protected fun bindViewHelper(viewHolder: CustomBaseViewHolder) {\n        val ctx = viewHolder.itemView.context\n\n        //set the identifier from the drawerItem here. It can be used to run tests\n        viewHolder.itemView.id = hashCode()\n\n        //get the correct color for the background\n        val selectedColor = getSelectedColor(ctx)\n        //get the correct color for the text\n        val color = getColor(ctx)\n        val shapeAppearanceModel = getShapeAppearanceModel(ctx)\n\n        //set the background for the item\n        themeDrawerItem(ctx, viewHolder.view, selectedColor, isSelectedBackgroundAnimated, shapeAppearanceModel, isSelected = isSelected)\n        //set the text for the name\n        StringHolder.applyTo(this.name, viewHolder.name)\n        //set the text for the description or hide\n        StringHolder.applyToOrHide(this.description, viewHolder.description)\n\n        //set the colors for textViews\n        viewHolder.name.setTextColor(color)\n        //set the description text color\n        descriptionTextColor?.applyToOr(viewHolder.description, color)\n\n        //define the typeface for our textViews\n        if (typeface != null) {\n            viewHolder.name.typeface = typeface\n            viewHolder.description.typeface = typeface\n        }\n\n        //we make sure we reset the image first before setting the new one in case there is an empty one\n        DrawerImageLoader.instance.cancelImage(viewHolder.icon)\n        viewHolder.icon.setImageBitmap(null)\n        //get the drawables for our icon and set it\n        icon?.applyTo(viewHolder.icon, \"customUrlItem\")\n\n        //for android API 17 --> Padding not applied via xml\n        setDrawerVerticalPadding(viewHolder.view)\n\n        //set the item selected if it is\n        viewHolder.itemView.isSelected = isSelected\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomUrlPrimaryDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.app.drawerItems\n\nimport android.view.View\nimport android.widget.TextView\nimport androidx.annotation.LayoutRes\nimport com.mikepenz.materialdrawer.app.R\nimport com.mikepenz.materialdrawer.holder.BadgeStyle\nimport com.mikepenz.materialdrawer.holder.StringHolder\nimport com.mikepenz.materialdrawer.model.interfaces.ColorfulBadgeable\n\n/**\n * Created by mikepenz on 03.02.15.\n */\nclass CustomUrlPrimaryDrawerItem : CustomUrlBasePrimaryDrawerItem<CustomUrlPrimaryDrawerItem, CustomUrlPrimaryDrawerItem.ViewHolder>(), ColorfulBadgeable {\n    override var badge: StringHolder? = null\n    override var badgeStyle: BadgeStyle? = BadgeStyle()\n\n    override val type: Int\n        get() = R.id.material_drawer_item_custom_url_item\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = com.mikepenz.materialdrawer.R.layout.material_drawer_item_primary\n\n    override fun bindView(holder: ViewHolder, payloads: List<Any>) {\n        super.bindView(holder, payloads)\n\n        val ctx = holder.itemView.context\n\n        //bind the basic view parts\n        bindViewHelper(holder)\n\n        //set the text for the badge or hide\n        val badgeVisible = StringHolder.applyToOrHide(badge, holder.badge)\n        //style the badge if it is visible\n        if (badgeVisible) {\n            badgeStyle!!.style(holder.badge, getColor(ctx))\n            holder.badge.visibility = View.VISIBLE\n        } else {\n            holder.badge.visibility = View.GONE\n        }\n\n        //define the typeface for our textViews\n        if (typeface != null) {\n            holder.badge.typeface = typeface\n        }\n\n        //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)\n        onPostBindView(this, holder.itemView)\n    }\n\n    override fun getViewHolder(v: View): ViewHolder {\n        return ViewHolder(v)\n    }\n\n    class ViewHolder(view: View) : CustomBaseViewHolder(view) {\n        internal val badge: TextView = view.findViewById(R.id.material_drawer_badge)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/GmailDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.app.drawerItems\n\nimport android.content.Context\nimport android.view.View\nimport com.google.android.material.shape.CornerFamily\nimport com.google.android.material.shape.ShapeAppearanceModel\nimport com.mikepenz.materialdrawer.app.R\nimport com.mikepenz.materialdrawer.model.PrimaryDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.util.themeDrawerItem\n\n/**\n * Describes the main [IDrawerItem] bing used as primary item, following the guidelines\n */\nopen class GmailDrawerItem : PrimaryDrawerItem() {\n\n    override val type: Int\n        get() = R.id.material_drawer_item_gmail_item\n\n    override fun applyDrawerItemTheme(ctx: Context, view: View, selected_color: Int, animate: Boolean, shapeAppearanceModel: ShapeAppearanceModel) {\n        themeDrawerItem(ctx, view, selected_color, animate, shapeAppearanceModel, R.dimen.gmail_material_drawer_item_background_padding_top_bottom, R.dimen.gmail_material_drawer_item_background_padding_start, R.dimen.gmail_material_drawer_item_background_padding_end, isSelected = isSelected)\n    }\n\n    override fun getShapeAppearanceModel(ctx: Context): ShapeAppearanceModel {\n        val cornerRadius = ctx.resources.getDimensionPixelSize(R.dimen.gmail_material_drawer_item_corner_radius)\n        return ShapeAppearanceModel.builder()\n                .setTopRightCorner(CornerFamily.ROUNDED, cornerRadius.toFloat())\n                .setBottomRightCorner(CornerFamily.ROUNDED, cornerRadius.toFloat())\n                .build()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/IconDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.app.drawerItems\n\nimport android.content.Context\nimport android.content.res.ColorStateList\nimport android.view.View\nimport android.widget.ImageView\nimport androidx.annotation.LayoutRes\nimport androidx.recyclerview.widget.RecyclerView\nimport com.mikepenz.materialdrawer.app.R\nimport com.mikepenz.materialdrawer.holder.ImageHolder\nimport com.mikepenz.materialdrawer.model.AbstractDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.Iconable\nimport com.mikepenz.materialdrawer.model.interfaces.SelectIconable\nimport com.mikepenz.materialdrawer.util.createDrawerItemColorStateList\n\n/**\n * Created by mikepenz on 03.02.15.\n */\nclass IconDrawerItem : AbstractDrawerItem<IconDrawerItem, IconDrawerItem.ViewHolder>(), Iconable, SelectIconable {\n    override var icon: ImageHolder? = null\n    override var iconColor: ColorStateList? = null\n    override var selectedIcon: ImageHolder? = null\n    override var isIconTinted = false\n\n    override val type: Int\n        get() = R.id.material_drawer_item_icon_only\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = R.layout.material_drawer_item_icon_only\n\n    override fun bindView(holder: ViewHolder, payloads: List<Any>) {\n        super.bindView(holder, payloads)\n\n        val ctx = holder.itemView.context\n\n        //set the identifier from the drawerItem here. It can be used to run tests\n        holder.itemView.id = hashCode()\n\n        //get the correct color for the icon\n        val iconColor = this.iconColor ?: ctx.getPrimaryDrawerIconColor()\n\n        //get the drawables for our icon and set it)\n        val icon = ImageHolder.decideIcon(icon, ctx, iconColor, isIconTinted, 1)\n        val selectedIcon = ImageHolder.decideIcon(selectedIcon, ctx, iconColor, isIconTinted, 1)\n        ImageHolder.applyMultiIconTo(icon, selectedIcon, iconColor, isIconTinted, holder.icon)\n\n        //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)\n        onPostBindView(this, holder.itemView)\n    }\n\n    override fun getViewHolder(v: View): ViewHolder {\n        return ViewHolder(v)\n    }\n\n    class ViewHolder internal constructor(private val view: View) : RecyclerView.ViewHolder(view) {\n        var icon: ImageView = view.findViewById<ImageView>(R.id.material_drawer_icon)\n    }\n}\n\ninternal fun Context.getPrimaryDrawerIconColor(): ColorStateList {\n    return createDrawerItemColorStateList(this, com.mikepenz.materialdrawer.R.styleable.MaterialDrawerSliderView_materialDrawerPrimaryIcon)!!\n}"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/OverflowMenuDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.app.drawerItems\n\nimport android.view.View\nimport android.widget.ImageButton\nimport androidx.annotation.LayoutRes\nimport androidx.appcompat.widget.PopupMenu\nimport com.mikepenz.iconics.IconicsDrawable\nimport com.mikepenz.iconics.typeface.library.googlematerial.GoogleMaterial\nimport com.mikepenz.iconics.utils.sizeDp\nimport com.mikepenz.materialdrawer.app.R\nimport com.mikepenz.materialdrawer.model.BaseDescribeableDrawerItem\nimport com.mikepenz.materialdrawer.model.BaseViewHolder\n\n/**\n * Created by mikepenz on 03.02.15.\n */\nclass OverflowMenuDrawerItem : BaseDescribeableDrawerItem<OverflowMenuDrawerItem, OverflowMenuDrawerItem.ViewHolder>() {\n    var menu: Int = 0\n    var onMenuItemClickListener: PopupMenu.OnMenuItemClickListener? = null\n    var onDismissListener: PopupMenu.OnDismissListener? = null\n\n    override val type: Int\n        get() = R.id.material_drawer_item_overflow_menu\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = R.layout.material_drawer_item_overflow_menu_primary\n\n    @Deprecated(\"Use property setter instead\")\n    fun withMenu(menu: Int): OverflowMenuDrawerItem {\n        this.menu = menu\n        return this\n    }\n\n    @Deprecated(\"Use property setter instead\")\n    fun withOnMenuItemClickListener(onMenuItemClickListener: PopupMenu.OnMenuItemClickListener): OverflowMenuDrawerItem {\n        this.onMenuItemClickListener = onMenuItemClickListener\n        return this\n    }\n\n    @Deprecated(\"Use property setter instead\")\n    fun withOnDismissListener(onDismissListener: PopupMenu.OnDismissListener): OverflowMenuDrawerItem {\n        this.onDismissListener = onDismissListener\n        return this\n    }\n\n    override fun bindView(holder: ViewHolder, payloads: List<Any>) {\n        super.bindView(holder, payloads)\n\n        val ctx = holder.itemView.context\n\n        //bind the basic view parts\n        bindViewHelper(holder)\n\n        //handle menu click\n        holder.menu.setOnClickListener { view ->\n            val popup = PopupMenu(view.context, view)\n            val inflater = popup.menuInflater\n            inflater.inflate(menu, popup.menu)\n\n            popup.setOnMenuItemClickListener(onMenuItemClickListener)\n            popup.setOnDismissListener(onDismissListener)\n\n            popup.show()\n        }\n\n        //handle image\n        holder.menu.setImageDrawable(IconicsDrawable(ctx, GoogleMaterial.Icon.gmd_more_vert).apply { sizeDp = 12; colorList = getIconColor(ctx) })\n\n        //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)\n        onPostBindView(this, holder.itemView)\n    }\n\n    override fun getViewHolder(v: View): ViewHolder {\n        return ViewHolder(v)\n    }\n\n    class ViewHolder(view: View) : BaseViewHolder(view) {\n        internal val menu: ImageButton = view.findViewById<ImageButton>(R.id.material_drawer_menu_overflow)\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/fragment/DemoFragment.kt",
    "content": "package com.mikepenz.materialdrawer.app.fragment\n\n\nimport android.os.Bundle\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.fragment.app.Fragment\nimport com.mikepenz.materialdrawer.app.databinding.FragmentSampleBinding\n\n\n/**\n * A simple [Fragment] subclass.\n * This is just a demo fragment with a long scrollable view of editTexts. Don't see this as a reference for anything\n */\nclass DemoFragment : Fragment() {\n    private var _binding: FragmentSampleBinding? = null\n    private val binding get() = _binding!!\n\n    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {\n        // Inflate the layout for this fragment\n        // don't look at this layout it's just a listView to show how to handle the keyboard\n        _binding = FragmentSampleBinding.inflate(inflater, container, false)\n        binding.title.text = arguments?.getString(KEY_TITLE)\n        return binding.root\n    }\n\n    companion object {\n        private val KEY_TITLE = \"title\"\n        fun newInstance(title: String): DemoFragment {\n            return DemoFragment().apply {\n                arguments = Bundle().apply { putString(KEY_TITLE, title) }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/fragment/DemoMessageFragment.kt",
    "content": "package com.mikepenz.materialdrawer.app.fragment\n\nimport android.os.Bundle\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.fragment.app.Fragment\nimport androidx.navigation.fragment.findNavController\nimport com.mikepenz.materialdrawer.app.R\nimport com.mikepenz.materialdrawer.app.databinding.FragmentMessageSampleBinding\n\nclass DemoMessageFragment : Fragment() {\n\n    private var _binding: FragmentMessageSampleBinding? = null\n    private val binding get() = _binding!!\n\n    private var message: String? = null\n\n    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {\n        message = arguments?.let { DemoMessageFragmentArgs.fromBundle(it).message }\n        _binding = FragmentMessageSampleBinding.inflate(inflater, container, false)\n        return binding.root\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        binding.messageTextView.text = \"$message\"\n        binding.btnFragmentHome.setOnClickListener { navigateTo(R.id.fragmentHome) }\n        binding.btnFragment1.setOnClickListener { navigateTo(R.id.messageFragment1) }\n        binding.btnFragment2.setOnClickListener { navigateTo(R.id.messageFragment2) }\n        binding.btnFragment3.setOnClickListener { navigateTo(R.id.messageFragment3) }\n        binding.btnPopup.setOnClickListener { navigateTo(R.id.action_global_fragmentHome) }\n    }\n\n    private fun navigateTo(destination: Int) {\n        findNavController().navigate(destination)\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/fragment/DrawerFragment.kt",
    "content": "package com.mikepenz.materialdrawer.app.fragment\n\n\nimport android.os.Bundle\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.fragment.app.Fragment\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesome\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesomeBrand\nimport com.mikepenz.materialdrawer.app.R\nimport com.mikepenz.materialdrawer.app.databinding.FragmentSimpleSampleBinding\nimport com.mikepenz.materialdrawer.iconics.withIcon\nimport com.mikepenz.materialdrawer.model.PrimaryDrawerItem\nimport com.mikepenz.materialdrawer.model.SecondaryDrawerItem\nimport com.mikepenz.materialdrawer.model.SectionDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.withEnabled\nimport com.mikepenz.materialdrawer.model.interfaces.withIdentifier\nimport com.mikepenz.materialdrawer.model.interfaces.withName\n\n\n/**\n * A simple [Fragment] subclass.\n * This is just a demo fragment with a long scrollable view of editTexts. Don't see this as a reference for anything\n */\nclass DrawerFragment : Fragment() {\n    private var _binding: FragmentSimpleSampleBinding? = null\n    private val binding get() = _binding!!\n\n\n    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {\n        // Inflate the layout for this fragment\n        // don't look at this layout it's just a listView to show how to handle the keyboard\n        _binding = FragmentSimpleSampleBinding.inflate(inflater, container, false)\n        binding.title.text = arguments?.getString(KEY_TITLE)\n        return binding.root\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n\n        binding.slider.apply {\n            itemAdapter.add(\n                PrimaryDrawerItem().withName(R.string.drawer_item_home).withIcon(FontAwesome.Icon.faw_home).withIdentifier(1),\n                PrimaryDrawerItem().withName(R.string.drawer_item_free_play).withIcon(FontAwesome.Icon.faw_gamepad),\n                PrimaryDrawerItem().withName(R.string.drawer_item_custom).withIcon(FontAwesome.Icon.faw_eye),\n                SectionDrawerItem().withName(R.string.drawer_item_section_header),\n                SecondaryDrawerItem().withName(R.string.drawer_item_settings).withIcon(FontAwesome.Icon.faw_cog),\n                SecondaryDrawerItem().withName(R.string.drawer_item_help).withIcon(FontAwesome.Icon.faw_question).withEnabled(false),\n                SecondaryDrawerItem().withName(R.string.drawer_item_open_source).withIcon(FontAwesomeBrand.Icon.fab_github),\n                SecondaryDrawerItem().withName(R.string.drawer_item_contact).withIcon(FontAwesome.Icon.faw_bullhorn)\n            )\n            setSelection(1)\n            setSavedInstance(savedInstanceState)\n        }\n    }\n\n    override fun onSaveInstanceState(_outState: Bundle) {\n        var outState = _outState\n        //add the values which need to be saved from the drawer to the bundle\n        outState = binding.slider.saveInstanceState(outState)\n        super.onSaveInstanceState(outState)\n    }\n\n    companion object {\n        private const val KEY_TITLE = \"title\"\n\n        fun newInstance(title: String): DrawerFragment {\n            return DrawerFragment().apply {\n                arguments = Bundle().apply { putString(KEY_TITLE, title) }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/fragment/SecondDrawerFragment.kt",
    "content": "package com.mikepenz.materialdrawer.app.fragment\n\n\nimport android.os.Bundle\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.fragment.app.Fragment\nimport com.mikepenz.iconics.typeface.library.fontawesome.FontAwesome\nimport com.mikepenz.materialdrawer.app.R\nimport com.mikepenz.materialdrawer.app.databinding.FragmentSimpleSampleBinding\nimport com.mikepenz.materialdrawer.iconics.withIcon\nimport com.mikepenz.materialdrawer.model.PrimaryDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.withIdentifier\nimport com.mikepenz.materialdrawer.model.interfaces.withName\n\n\n/**\n * A simple [Fragment] subclass.\n * This is just a demo fragment with a long scrollable view of editTexts. Don't see this as a reference for anything\n */\nclass SecondDrawerFragment : Fragment() {\n    private var _binding: FragmentSimpleSampleBinding? = null\n    private val binding get() = _binding!!\n\n    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {\n        // Inflate the layout for this fragment\n        // don't look at this layout it's just a listView to show how to handle the keyboard\n        _binding = FragmentSimpleSampleBinding.inflate(inflater, container, false)\n        binding.title.text = arguments?.getString(KEY_TITLE)\n        return binding.root\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n\n        binding.slider.apply {\n            itemAdapter.add(\n                    PrimaryDrawerItem().withName(R.string.drawer_item_home).withIcon(FontAwesome.Icon.faw_home).withIdentifier(1),\n                    PrimaryDrawerItem().withName(R.string.drawer_item_free_play).withIcon(FontAwesome.Icon.faw_gamepad),\n                    PrimaryDrawerItem().withName(R.string.drawer_item_custom).withIcon(FontAwesome.Icon.faw_eye)\n            )\n            setSavedInstance(savedInstanceState)\n            setSelection(1)\n        }\n    }\n\n    override fun onSaveInstanceState(_outState: Bundle) {\n        var outState = _outState\n        //add the values which need to be saved from the drawer to the bundle\n        outState = binding.slider.saveInstanceState(outState)\n        super.onSaveInstanceState(outState)\n    }\n\n    companion object {\n        private val KEY_TITLE = \"title\"\n\n        fun newInstance(title: String): SecondDrawerFragment {\n            return SecondDrawerFragment().apply {\n                arguments = Bundle().apply { putString(KEY_TITLE, title) }\n            }\n        }\n    }\n}"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/utils/CrossfadeWrapper.kt",
    "content": "package com.mikepenz.materialdrawer.app.utils\n\nimport com.mikepenz.crossfader.Crossfader\nimport com.mikepenz.materialdrawer.interfaces.ICrossfader\n\n/**\n * Created by mikepenz on 18.07.15.\n */\nclass CrossfadeWrapper(private val crossfader: Crossfader<*>) : ICrossfader {\n\n    override val isCrossfaded: Boolean\n        get() = crossfader.isCrossFaded()\n\n    override fun crossfade() {\n        crossfader.crossFade()\n    }\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/utils/SystemUtils.kt",
    "content": "package com.mikepenz.materialdrawer.app.utils\r\n\r\nimport android.content.res.Resources\r\n\r\nobject SystemUtils {\r\n    val screenOrientation: Int\r\n        get() = Resources.getSystem().configuration.orientation\r\n}\r\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/utils/UIUtils.kt",
    "content": "package com.mikepenz.materialdrawer.app.utils\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.util.DisplayMetrics\n\n\n/**\n * This method converts dp unit to equivalent pixels, depending on device density.\n *\n * @param dp      A value in dp (density independent pixels) unit. Which we need to convert into pixels\n * @param context Context to get resources and device specific display metrics\n * @return A float value to represent px equivalent to dp depending on device density\n */\nfun convertDpToPixel(dp: Float, context: Context): Float {\n    val resources: Resources = context.resources\n    val metrics: DisplayMetrics = resources.displayMetrics\n    return dp * (metrics.densityDpi / 160f)\n}\n"
  },
  {
    "path": "app/src/main/java/com/mikepenz/materialdrawer/app/widget/CrossfadeDrawerLayout.kt",
    "content": "package com.mikepenz.materialdrawer.app.widget\n\nimport android.content.Context\nimport android.util.AttributeSet\nimport android.view.MotionEvent\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.constraintlayout.widget.ConstraintLayout\nimport androidx.core.view.ViewCompat\nimport androidx.drawerlayout.widget.DrawerLayout\nimport com.mikepenz.crossfadedrawerlayout.ApplyTransformationListener\nimport com.mikepenz.crossfadedrawerlayout.animation.ResizeWidthAnimation\nimport com.mikepenz.materialdrawer.app.R\nimport com.mikepenz.materialdrawer.app.utils.convertDpToPixel\n\n/**\n * Created by mikepenz on 20.10.15.\n */\nopen class CrossfadeDrawerLayout : DrawerLayout {\n    var drawerOpened = false\n        private set\n\n    private var touchDown = -1f\n    private var prevTouch = -1f\n\n    //remember the previous width to optimize performance\n    private var prevWidth = -1\n\n    var crossfadeListener: ((containerView: View?, currentSlidePercentage: Float, slideOffset: Int) -> Unit)? = null\n\n    var minWidthPx = 0\n    var maxWidthPx = 0\n\n    lateinit var container: ConstraintLayout\n        private set\n    lateinit var smallView: ViewGroup\n        private set\n    lateinit var largeView: ViewGroup\n        private set\n\n    var isCrossfaded = false\n        private set\n    var sliderOnRight = false\n\n    constructor(context: Context) : super(context) {\n        init(context)\n    }\n\n    constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) {\n        init(context)\n    }\n\n    constructor(context: Context, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) {\n        init(context)\n    }\n\n    private fun init(ctx: Context) {\n        super.addDrawerListener(innerDrawerListener)\n        //define default valuse for min and max\n        minWidthPx = convertDpToPixel(72f, ctx).toInt()\n        maxWidthPx = convertDpToPixel(200f, ctx).toInt()\n    }\n\n    override fun addView(child: View, index: Int) {\n        super.addView(wrapSliderContent(child, index), index)\n    }\n\n    override fun addView(child: View, index: Int, params: ViewGroup.LayoutParams?) {\n        super.addView(wrapSliderContent(child, index), index, params)\n    }\n\n    /**\n     * this will wrap the view which is added to the slider into another layout so we can then overlap the small and large view\n     *\n     * @param child\n     * @param index\n     * @return\n     */\n    private fun wrapSliderContent(child: View, index: Int): View? {\n        if (child.id == R.id.crossFadeSlider) {\n            container = child as ConstraintLayout\n            largeView = child.findViewById(R.id.crossFadeLargeView)\n            largeView.alpha = 0f\n            largeView.visibility = View.GONE\n            smallView = child.findViewById(R.id.crossFadeSmallView)\n            return container\n        }\n        return child\n    }\n\n    private var innerDrawerListener = object : DrawerListener {\n        override fun onDrawerSlide(drawerView: View, slideOffset: Float) {\n            drawerOpened = slideOffset == 1f\n        }\n\n        override fun onDrawerOpened(drawerView: View) {\n            drawerOpened = true\n        }\n\n        override fun onDrawerClosed(drawerView: View) {\n            val lp = drawerView.layoutParams as MarginLayoutParams\n            lp.width = minWidthPx\n            drawerView.layoutParams = lp\n            //revert alpha :D\n            smallView.alpha = 1f\n            smallView.bringToFront()\n            largeView.alpha = 0f\n            drawerOpened = false\n        }\n\n        override fun onDrawerStateChanged(newState: Int) {}\n    }\n\n    override fun dispatchTouchEvent(motionEvent: MotionEvent): Boolean {\n        if (drawerOpened) {\n            if (motionEvent.action == MotionEvent.ACTION_DOWN) {\n                touchDown = motionEvent.x\n                prevTouch = motionEvent.x\n                return super.dispatchTouchEvent(motionEvent)\n            } else if (motionEvent.action == MotionEvent.ACTION_UP) {\n                val click = touchDown == prevTouch\n                touchDown = -1f\n                prevTouch = -1f\n                val lp = container.layoutParams as MarginLayoutParams\n                val percentage = calculatePercentage(lp.width)\n                if (percentage > 50) {\n                    fadeUp(DEFAULT_ANIMATION)\n                } else {\n                    fadeDown(DEFAULT_ANIMATION)\n                }\n                return if (click) {\n                    super.dispatchTouchEvent(motionEvent)\n                } else {\n                    true\n                }\n            } else if (motionEvent.action == MotionEvent.ACTION_MOVE && touchDown != -1f) {\n                val lp = container.layoutParams as MarginLayoutParams\n                //the current drawer width\n                var diff = motionEvent.x - touchDown\n                if (ViewCompat.getLayoutDirection(this) == ViewCompat.LAYOUT_DIRECTION_RTL || sliderOnRight) {\n                    diff *= -1\n                }\n                if (diff == 0f) {\n                    //no difference nothing to do\n                    //return super.dispatchTouchEvent(motionEvent);\n                } else if (diff > 0 && lp.width <= maxWidthPx && lp.width + diff < maxWidthPx && lp.width >= minWidthPx) {\n                    lp.width = (lp.width + diff).toInt()\n                    container.layoutParams = lp\n                    touchDown = motionEvent.x\n                    overlapViews(lp.width)\n                } else if (diff < 0 && lp.width >= minWidthPx && lp.width + diff > minWidthPx) {\n                    lp.width = (lp.width + diff).toInt()\n                    container.layoutParams = lp\n                    touchDown = motionEvent.x\n                    overlapViews(lp.width)\n                } else if (lp.width < minWidthPx) {\n                    lp.width = minWidthPx\n                    container.layoutParams = lp\n                    drawerOpened = false\n                    touchDown = -1f\n                    overlapViews(minWidthPx)\n                } else if (lp.width + diff < minWidthPx) { //return super.dispatchTouchEvent(motionEvent);\n                }\n                //return true;\n            }\n        }\n        return super.dispatchTouchEvent(motionEvent)\n    }\n\n    override fun onTouchEvent(motionEvent: MotionEvent): Boolean {\n        try {\n            return super.onTouchEvent(motionEvent)\n        } catch (ex: RuntimeException) {\n            ex.printStackTrace()\n        }\n        return false\n    }\n\n    override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {\n        try {\n            return super.onInterceptTouchEvent(ev)\n        } catch (ex: IllegalArgumentException) {\n            ex.printStackTrace()\n        }\n        return false\n    }\n\n    override fun openDrawer(gravity: Int) {\n        drawerOpened = true\n        super.openDrawer(gravity)\n    }\n\n    override fun openDrawer(drawerView: View) {\n        drawerOpened = true\n        super.openDrawer(drawerView)\n    }\n\n    override fun openDrawer(drawerView: View, animate: Boolean) {\n        drawerOpened = true\n        super.openDrawer(drawerView, animate)\n    }\n\n    override fun openDrawer(gravity: Int, animate: Boolean) {\n        drawerOpened = true\n        super.openDrawer(gravity, animate)\n    }\n\n    override fun closeDrawer(drawerView: View) {\n        drawerOpened = false\n        container.clearAnimation()\n        super.closeDrawer(drawerView)\n    }\n\n    override fun closeDrawer(drawerView: View, animate: Boolean) {\n        drawerOpened = false\n        container.clearAnimation()\n        super.closeDrawer(drawerView, animate)\n    }\n\n    override fun closeDrawer(gravity: Int) {\n        drawerOpened = false\n        container.clearAnimation()\n        super.closeDrawer(gravity)\n    }\n\n    override fun closeDrawer(gravity: Int, animate: Boolean) {\n        drawerOpened = false\n        container.clearAnimation()\n        super.closeDrawer(gravity, animate)\n    }\n\n    /**\n     * crossfade the small to the large view (with default animation time)\n     */\n    @JvmOverloads\n    fun crossfade(duration: Int = DEFAULT_ANIMATION) {\n        if (isCrossfaded) {\n            fadeDown(duration)\n        } else {\n            fadeUp(duration)\n        }\n    }\n\n    /**\n     * animate to the large view\n     *\n     * @param duration\n     */\n    fun fadeUp(duration: Int) { //animate up\n        container.clearAnimation()\n        val anim = ResizeWidthAnimation(container, maxWidthPx, ApplyTransformationListener { width -> overlapViews(width) })\n        anim.duration = duration.toLong()\n        container.startAnimation(anim)\n    }\n\n    /**\n     * animate to the small view\n     *\n     * @param duration\n     */\n    fun fadeDown(duration: Int) { //fade down\n        container.clearAnimation()\n        val anim = ResizeWidthAnimation(container, minWidthPx, ApplyTransformationListener { width -> overlapViews(width) })\n        anim.duration = duration.toLong()\n        container.startAnimation(anim)\n    }\n\n    /**\n     * calculate the percentage to how many percent the slide is already visible\n     *\n     * @param width\n     * @return\n     */\n    private fun calculatePercentage(width: Int): Float {\n        val absolute = maxWidthPx - minWidthPx\n        val current = width - minWidthPx\n        val percentage = 100.0f * current / absolute\n        //we can assume that we are crossfaded if the percentage is > 90\n        isCrossfaded = percentage > 90\n        return percentage\n    }\n\n    /**\n     * overlap the views and provide the crossfade effect\n     *\n     * @param width\n     */\n    private fun overlapViews(width: Int) {\n        if (width == prevWidth) {\n            return\n        }\n        //remember this width so it is't processed twice\n        prevWidth = width\n        val percentage = calculatePercentage(width)\n        val alpha = percentage / 100\n        smallView.alpha = 1f\n        smallView.isClickable = false\n        largeView.bringToFront()\n        largeView.alpha = alpha\n        largeView.isClickable = true\n        largeView.visibility = if (alpha > 0.01f) View.VISIBLE else View.GONE\n        //notify the crossfadeListener\n        crossfadeListener?.invoke(container, calculatePercentage(width), width)\n    }\n\n    companion object {\n        private const val DEFAULT_ANIMATION = 200\n    }\n}"
  },
  {
    "path": "app/src/main/res/layout/activity_embedded.xml",
    "content": "<androidx.constraintlayout.widget.ConstraintLayout 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    android:gravity=\"center\">\n\n    <androidx.appcompat.widget.Toolbar\n        android:id=\"@+id/toolbar\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"?attr/colorPrimary\"\n        android:elevation=\"4dp\"\n        android:fitsSystemWindows=\"true\"\n        android:theme=\"@style/ThemeOverlay.AppCompat.Dark.ActionBar\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <FrameLayout\n        android:id=\"@+id/frame_container\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"0dp\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/toolbar\">\n\n        <com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\n            android:id=\"@+id/slider\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\" />\n    </FrameLayout>\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_mini_drawer.xml",
    "content": "<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    android:gravity=\"center\">\n\n    <androidx.appcompat.widget.Toolbar\n        android:id=\"@+id/toolbar\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:elevation=\"4dp\"\n        android:theme=\"@style/ThemeOverlay.Material3.Dark\" />\n\n    <FrameLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_below=\"@id/toolbar\">\n\n        <TextView\n            android:id=\"@+id/crossfade_content\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_gravity=\"center\"\n            android:gravity=\"center\"\n            android:text=\"@string/drawer_item_embedded_drawer\"\n            android:textSize=\"16sp\" />\n    </FrameLayout>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_multi_sample.xml",
    "content": "<androidx.drawerlayout.widget.DrawerLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\">\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:gravity=\"center\">\n\n        <androidx.appcompat.widget.Toolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:background=\"?attr/colorPrimary\"\n            android:elevation=\"4dp\"\n            android:theme=\"@style/ThemeOverlay.AppCompat.Dark.ActionBar\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\" />\n\n        <FrameLayout\n            android:id=\"@+id/frame_container\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"match_parent\"\n            android:layout_below=\"@id/toolbar\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@id/toolbar\">\n\n            <TextView\n                android:id=\"@+id/txtLabel\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center\"\n                android:text=\"Test\"\n                android:textSize=\"16sp\" />\n        </FrameLayout>\n    </androidx.constraintlayout.widget.ConstraintLayout>\n\n    <com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\n        android:id=\"@+id/slider\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"start\"\n        android:fitsSystemWindows=\"true\" />\n\n    <com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\n        android:id=\"@+id/slider_end\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"end\"\n        android:fitsSystemWindows=\"true\" />\n</androidx.drawerlayout.widget.DrawerLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_persistent_drawer.xml",
    "content": "<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:id=\"@+id/root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:gravity=\"center\">\n\n    <LinearLayout\n        android:id=\"@+id/crossfade_content\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n        <androidx.appcompat.widget.Toolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:background=\"?attr/colorPrimary\"\n            android:elevation=\"4dp\"\n            android:theme=\"@style/ThemeOverlay.AppCompat.Dark.ActionBar\"\n            app:popupTheme=\"@style/ThemeOverlay.AppCompat.Light\"\n            tools:targetApi=\"lollipop\" />\n\n        <TextView\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"match_parent\"\n            android:layout_gravity=\"center\"\n            android:gravity=\"center\"\n            android:text=\"@string/drawer_item_embedded_drawer\"\n            android:textSize=\"16sp\" />\n    </LinearLayout>\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_sample.xml",
    "content": "<androidx.drawerlayout.widget.DrawerLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\">\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:gravity=\"center\">\n\n        <androidx.appcompat.widget.Toolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:elevation=\"4dp\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\" />\n\n        <FrameLayout\n            android:id=\"@+id/frame_container\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"match_parent\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@id/toolbar\">\n\n            <TextView\n                android:id=\"@+id/txtLabel\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center\"\n                android:text=\"Test\"\n                android:textSize=\"16sp\" />\n        </FrameLayout>\n    </androidx.constraintlayout.widget.ConstraintLayout>\n\n    <com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\n        android:id=\"@+id/slider\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"start\"\n        android:fitsSystemWindows=\"true\" />\n</androidx.drawerlayout.widget.DrawerLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_sample_actionbar.xml",
    "content": "<androidx.drawerlayout.widget.DrawerLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\">\n\n    <FrameLayout\n        android:id=\"@+id/frame_container\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\">\n\n        <TextView\n            android:id=\"@+id/txtLabel\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center\"\n            android:text=\"test\"\n            android:textSize=\"16sp\" />\n    </FrameLayout>\n\n    <com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\n        android:id=\"@+id/slider\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"start\"\n        android:fitsSystemWindows=\"true\" />\n</androidx.drawerlayout.widget.DrawerLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_sample_collapsing_toolbar.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\r\n  ~ Copyright (C) 2015 The Android Open Source Project\r\n  ~\r\n  ~ Licensed under the Apache License, Version 2.0 (the \"License\");\r\n  ~ you may not use this file except in compliance with the License.\r\n  ~ You may obtain a copy of the License at\r\n  ~\r\n  ~      http://www.apache.org/licenses/LICENSE-2.0\r\n  ~\r\n  ~ Unless required by applicable law or agreed to in writing, software\r\n  ~ distributed under the License is distributed on an \"AS IS\" BASIS,\r\n  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n  ~ See the License for the specific language governing permissions and\r\n  ~ limitations under the License.\r\n-->\r\n<androidx.drawerlayout.widget.DrawerLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\r\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\r\n    android:id=\"@+id/root\"\r\n    android:layout_width=\"match_parent\"\r\n    android:layout_height=\"match_parent\"\r\n    android:fitsSystemWindows=\"false\">\r\n\r\n    <androidx.coordinatorlayout.widget.CoordinatorLayout\r\n        android:id=\"@+id/main_content\"\r\n        android:layout_width=\"match_parent\"\r\n        android:layout_height=\"match_parent\"\r\n        android:fitsSystemWindows=\"true\">\r\n\r\n        <com.google.android.material.appbar.AppBarLayout\r\n            android:id=\"@+id/appbar\"\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"200dp\"\r\n            android:fitsSystemWindows=\"true\"\r\n            android:theme=\"@style/ThemeOverlay.AppCompat.Dark.ActionBar\">\r\n\r\n            <com.google.android.material.appbar.CollapsingToolbarLayout\r\n                android:id=\"@+id/collapsingToolbar\"\r\n                android:layout_width=\"match_parent\"\r\n                android:layout_height=\"match_parent\"\r\n                android:fitsSystemWindows=\"true\"\r\n                app:contentScrim=\"?attr/colorPrimary\"\r\n                app:expandedTitleMarginEnd=\"64dp\"\r\n                app:expandedTitleMarginStart=\"48dp\"\r\n                app:layout_scrollFlags=\"scroll|exitUntilCollapsed\"\r\n                app:titleEnabled=\"true\">\r\n\r\n                <ImageView\r\n                    android:id=\"@+id/backdrop\"\r\n                    android:layout_width=\"match_parent\"\r\n                    android:layout_height=\"match_parent\"\r\n                    android:fitsSystemWindows=\"true\"\r\n                    android:scaleType=\"centerCrop\"\r\n                    app:layout_collapseMode=\"parallax\" />\r\n\r\n                <!-- As our statusBar is transparent below and content is moved behind our toolbar has to include the padding on top so we use this area -->\r\n                <androidx.appcompat.widget.Toolbar\r\n                    android:id=\"@+id/toolbar\"\r\n                    android:layout_width=\"match_parent\"\r\n                    android:layout_height=\"?attr/actionBarSize\"\r\n                    app:layout_collapseMode=\"pin\"\r\n                    app:popupTheme=\"@style/ThemeOverlay.AppCompat.Light\" />\r\n\r\n            </com.google.android.material.appbar.CollapsingToolbarLayout>\r\n\r\n        </com.google.android.material.appbar.AppBarLayout>\r\n\r\n        <androidx.core.widget.NestedScrollView\r\n            android:layout_width=\"match_parent\"\r\n            android:layout_height=\"match_parent\"\r\n            app:layout_behavior=\"@string/appbar_scrolling_view_behavior\">\r\n\r\n            <LinearLayout\r\n                android:layout_width=\"match_parent\"\r\n                android:layout_height=\"match_parent\"\r\n                android:orientation=\"vertical\"\r\n                android:paddingTop=\"24dp\">\r\n\r\n                <androidx.cardview.widget.CardView\r\n                    android:layout_width=\"match_parent\"\r\n                    android:layout_height=\"wrap_content\"\r\n                    android:layout_margin=\"16dp\">\r\n\r\n                    <LinearLayout\r\n                        android:layout_width=\"match_parent\"\r\n                        android:layout_height=\"wrap_content\"\r\n                        android:orientation=\"vertical\"\r\n                        android:paddingLeft=\"16dp\"\r\n                        android:paddingTop=\"24dp\"\r\n                        android:paddingRight=\"16dp\"\r\n                        android:paddingBottom=\"24dp\">\r\n\r\n                        <TextView\r\n                            android:layout_width=\"match_parent\"\r\n                            android:layout_height=\"wrap_content\"\r\n                            android:text=\"Info\"\r\n                            android:textAppearance=\"@style/TextAppearance.AppCompat.Title\" />\r\n\r\n                        <TextView\r\n                            android:layout_width=\"match_parent\"\r\n                            android:layout_height=\"wrap_content\"\r\n                            android:text=\"@string/lorem_ipsum\" />\r\n\r\n                    </LinearLayout>\r\n\r\n                </androidx.cardview.widget.CardView>\r\n\r\n                <androidx.cardview.widget.CardView\r\n                    android:layout_width=\"match_parent\"\r\n                    android:layout_height=\"wrap_content\"\r\n                    android:layout_marginLeft=\"16dp\"\r\n                    android:layout_marginRight=\"16dp\"\r\n                    android:layout_marginBottom=\"16dp\">\r\n\r\n                    <LinearLayout\r\n                        android:layout_width=\"match_parent\"\r\n                        android:layout_height=\"wrap_content\"\r\n                        android:orientation=\"vertical\"\r\n                        android:paddingLeft=\"16dp\"\r\n                        android:paddingTop=\"24dp\"\r\n                        android:paddingRight=\"16dp\"\r\n                        android:paddingBottom=\"24dp\">\r\n\r\n                        <TextView\r\n                            android:layout_width=\"match_parent\"\r\n                            android:layout_height=\"wrap_content\"\r\n                            android:text=\"Friends\"\r\n                            android:textAppearance=\"@style/TextAppearance.AppCompat.Title\" />\r\n\r\n                        <TextView\r\n                            android:layout_width=\"match_parent\"\r\n                            android:layout_height=\"wrap_content\"\r\n                            android:text=\"@string/lorem_ipsum\" />\r\n\r\n                    </LinearLayout>\r\n\r\n                </androidx.cardview.widget.CardView>\r\n\r\n                <androidx.cardview.widget.CardView\r\n                    android:layout_width=\"match_parent\"\r\n                    android:layout_height=\"wrap_content\"\r\n                    android:layout_marginLeft=\"16dp\"\r\n                    android:layout_marginRight=\"16dp\"\r\n                    android:layout_marginBottom=\"16dp\">\r\n\r\n                    <LinearLayout\r\n                        android:layout_width=\"match_parent\"\r\n                        android:layout_height=\"wrap_content\"\r\n                        android:orientation=\"vertical\"\r\n                        android:paddingLeft=\"16dp\"\r\n                        android:paddingTop=\"24dp\"\r\n                        android:paddingRight=\"16dp\"\r\n                        android:paddingBottom=\"24dp\">\r\n\r\n                        <TextView\r\n                            android:layout_width=\"match_parent\"\r\n                            android:layout_height=\"wrap_content\"\r\n                            android:text=\"Related\"\r\n                            android:textAppearance=\"@style/TextAppearance.AppCompat.Title\" />\r\n\r\n                        <TextView\r\n                            android:layout_width=\"match_parent\"\r\n                            android:layout_height=\"wrap_content\"\r\n                            android:text=\"@string/lorem_ipsum\" />\r\n\r\n                    </LinearLayout>\r\n\r\n                </androidx.cardview.widget.CardView>\r\n\r\n            </LinearLayout>\r\n\r\n        </androidx.core.widget.NestedScrollView>\r\n\r\n        <com.google.android.material.floatingactionbutton.FloatingActionButton\r\n            android:id=\"@+id/floatingActionButton\"\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"wrap_content\"\r\n            android:layout_margin=\"16dp\"\r\n            android:clickable=\"true\"\r\n            app:layout_anchor=\"@id/appbar\"\r\n            app:layout_anchorGravity=\"bottom|right|end\" />\r\n\r\n    </androidx.coordinatorlayout.widget.CoordinatorLayout>\r\n\r\n    <androidx.swiperefreshlayout.widget.SwipeRefreshLayout\r\n        android:id=\"@+id/material_drawer_swipe_refresh\"\r\n        android:layout_width=\"wrap_content\"\r\n        android:layout_height=\"match_parent\"\r\n        android:layout_gravity=\"start\"\r\n        android:fitsSystemWindows=\"false\">\r\n\r\n        <com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\r\n            android:id=\"@+id/slider\"\r\n            android:layout_width=\"wrap_content\"\r\n            android:layout_height=\"match_parent\"\r\n            android:fitsSystemWindows=\"true\" />\r\n    </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>\r\n</androidx.drawerlayout.widget.DrawerLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_sample_crossfader.xml",
    "content": "<com.mikepenz.materialdrawer.app.widget.CrossfadeDrawerLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\">\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:gravity=\"center\">\n\n        <androidx.appcompat.widget.Toolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:elevation=\"4dp\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\" />\n\n        <FrameLayout\n            android:id=\"@+id/frame_container\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"match_parent\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@id/toolbar\">\n\n            <TextView\n                android:id=\"@+id/txtLabel\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center\"\n                android:text=\"Test\"\n                android:textSize=\"16sp\" />\n        </FrameLayout>\n    </androidx.constraintlayout.widget.ConstraintLayout>\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:id=\"@+id/crossFadeSlider\"\n        android:layout_width=\"72dp\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"start\"\n        android:fitsSystemWindows=\"true\">\n\n        <com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\n            android:id=\"@+id/crossFadeLargeView\"\n            android:layout_width=\"72dp\"\n            android:layout_height=\"0dp\"\n            android:fitsSystemWindows=\"true\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\" />\n\n        <com.mikepenz.materialdrawer.widget.MiniDrawerSliderView\n            android:id=\"@+id/crossFadeSmallView\"\n            android:layout_width=\"72dp\"\n            android:layout_height=\"0dp\"\n            android:fitsSystemWindows=\"true\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n</com.mikepenz.materialdrawer.app.widget.CrossfadeDrawerLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_sample_fragment.xml",
    "content": "<RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    android:gravity=\"center\">\n\n    <androidx.appcompat.widget.Toolbar\n        android:id=\"@+id/toolbar\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"wrap_content\"\n        android:elevation=\"4dp\"\n        android:theme=\"@style/ThemeOverlay.Material3.Dark\" />\n\n    <FrameLayout\n        android:id=\"@+id/fragment_container\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_below=\"@id/toolbar\" />\n</RelativeLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_sample_fullscreen.xml",
    "content": "<androidx.drawerlayout.widget.DrawerLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"false\">\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:gravity=\"center\">\n\n        <androidx.appcompat.widget.Toolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:elevation=\"4dp\"\n            android:theme=\"@style/ThemeOverlay.Material3.Dark\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\" />\n\n        <FrameLayout\n            android:id=\"@+id/frame_container\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"match_parent\"\n            android:background=\"#ff4444\"\n            android:fitsSystemWindows=\"false\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@id/toolbar\">\n\n            <TextView\n                android:id=\"@+id/txtLabel\"\n                android:layout_width=\"wrap_content\"\n                android:layout_height=\"wrap_content\"\n                android:layout_gravity=\"center\"\n                android:text=\"Test\"\n                android:textSize=\"16sp\" />\n        </FrameLayout>\n    </androidx.constraintlayout.widget.ConstraintLayout>\n\n    <com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\n        android:id=\"@+id/slider\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"start\"\n        android:fitsSystemWindows=\"true\" />\n</androidx.drawerlayout.widget.DrawerLayout>"
  },
  {
    "path": "app/src/main/res/layout/activity_sample_nav.xml",
    "content": "<androidx.drawerlayout.widget.DrawerLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\">\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:gravity=\"center\">\n\n        <androidx.appcompat.widget.Toolbar\n            android:id=\"@+id/toolbar\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"wrap_content\"\n            android:elevation=\"4dp\"\n            android:theme=\"@style/ThemeOverlay.Material3.Dark\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\" />\n\n\n        <fragment\n            android:id=\"@+id/nav_host_fragment\"\n            android:name=\"androidx.navigation.fragment.NavHostFragment\"\n            android:layout_width=\"0dp\"\n            android:layout_height=\"0dp\"\n            app:defaultNavHost=\"true\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintLeft_toLeftOf=\"parent\"\n            app:layout_constraintRight_toRightOf=\"parent\"\n            app:layout_constraintTop_toBottomOf=\"@+id/toolbar\"\n            app:navGraph=\"@navigation/navigation\" />\n    </androidx.constraintlayout.widget.ConstraintLayout>\n\n    <com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\n        android:id=\"@+id/slider\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"start\"\n        android:fitsSystemWindows=\"true\" />\n</androidx.drawerlayout.widget.DrawerLayout>"
  },
  {
    "path": "app/src/main/res/layout/footer.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ImageView 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:src=\"@drawable/header\"\n    android:adjustViewBounds=\"true\"\n    android:scaleType=\"fitCenter\"></ImageView>"
  },
  {
    "path": "app/src/main/res/layout/fragment_message_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/linearLayout\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <TextView\n        android:id=\"@+id/messageTextView\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"8dp\"\n        android:layout_marginLeft=\"8dp\"\n        android:layout_marginTop=\"8dp\"\n        android:layout_marginEnd=\"8dp\"\n        android:layout_marginRight=\"8dp\"\n        android:layout_marginBottom=\"8dp\"\n        android:gravity=\"center|center_horizontal\"\n        android:text=\"TextView\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <Button\n        android:id=\"@+id/btnFragment1\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"8dp\"\n        android:layout_marginLeft=\"8dp\"\n        android:layout_marginTop=\"8dp\"\n        android:layout_marginEnd=\"8dp\"\n        android:layout_marginRight=\"8dp\"\n        android:text=\"Go To Fragment1\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@+id/btnFragmentHome\" />\n\n    <Button\n        android:id=\"@+id/btnFragmentHome\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"8dp\"\n        android:layout_marginLeft=\"8dp\"\n        android:layout_marginTop=\"8dp\"\n        android:layout_marginEnd=\"8dp\"\n        android:layout_marginRight=\"8dp\"\n        android:text=\"Go to Home\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@+id/messageTextView\" />\n\n    <Button\n        android:id=\"@+id/btnFragment2\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"8dp\"\n        android:layout_marginLeft=\"8dp\"\n        android:layout_marginTop=\"8dp\"\n        android:layout_marginEnd=\"8dp\"\n        android:layout_marginRight=\"8dp\"\n        android:text=\"Go To Fragment2\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@+id/btnFragment1\" />\n\n    <Button\n        android:id=\"@+id/btnFragment3\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"8dp\"\n        android:layout_marginLeft=\"8dp\"\n        android:layout_marginTop=\"8dp\"\n        android:layout_marginEnd=\"8dp\"\n        android:layout_marginRight=\"8dp\"\n        android:text=\"Go To Fragment3\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@+id/btnFragment2\" />\n\n    <Button\n        android:id=\"@+id/btnPopup\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"8dp\"\n        android:layout_marginLeft=\"8dp\"\n        android:layout_marginTop=\"8dp\"\n        android:layout_marginEnd=\"8dp\"\n        android:layout_marginRight=\"8dp\"\n        android:text=\"Pop to Home\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@+id/btnFragment3\" />\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "app/src/main/res/layout/fragment_sample.xml",
    "content": "<ScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\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=\"match_parent\"\n        android:orientation=\"vertical\"\n        tools:context=\"com.humboldtapps.gthelper.DemoFragment\">\n\n        <TextView\n            android:id=\"@+id/title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Title\"\n            android:textSize=\"20dp\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Title\" />\n\n        <EditText\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Title\" />\n\n        <EditText\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Title\" />\n\n        <EditText\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Title\" />\n\n        <EditText\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Title\" />\n\n        <EditText\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Title\" />\n\n        <EditText\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Title\" />\n\n        <EditText\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Title\" />\n\n        <EditText\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Title\" />\n\n        <EditText\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\" />\n\n        <TextView\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Title\" />\n\n        <EditText\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\" />\n\n    </LinearLayout>\n</ScrollView>"
  },
  {
    "path": "app/src/main/res/layout/fragment_simple_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.drawerlayout.widget.DrawerLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:id=\"@+id/root\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\">\n\n    <androidx.constraintlayout.widget.ConstraintLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:gravity=\"center\">\n\n        <TextView\n            android:id=\"@+id/title\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:text=\"Test\"\n            android:textSize=\"16sp\"\n            app:layout_constraintBottom_toBottomOf=\"parent\"\n            app:layout_constraintEnd_toEndOf=\"parent\"\n            app:layout_constraintStart_toStartOf=\"parent\"\n            app:layout_constraintTop_toTopOf=\"parent\" />\n\n    </androidx.constraintlayout.widget.ConstraintLayout>\n\n    <com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\n        android:id=\"@+id/slider\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"start\"\n        android:fitsSystemWindows=\"true\" />\n</androidx.drawerlayout.widget.DrawerLayout>"
  },
  {
    "path": "app/src/main/res/layout/header.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ImageView 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:src=\"@drawable/header\"\n    android:adjustViewBounds=\"true\"\n    android:scaleType=\"fitCenter\"></ImageView>"
  },
  {
    "path": "app/src/main/res/layout/material_drawer_compact_persistent_header.xml",
    "content": "<merge xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:id=\"@+id/material_drawer_account_header\">\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_account_header_background\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/material_drawer_account_header_height_compact\"\n        android:scaleType=\"fitXY\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <androidx.constraintlayout.widget.Guideline\n        android:id=\"@+id/material_drawer_statusbar_guideline\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        app:layout_constraintGuide_begin=\"0dp\" />\n\n    <com.mikepenz.materialdrawer.view.BezelImageView\n        android:id=\"@+id/material_drawer_account_header_small_first\"\n        android:layout_width=\"1dp\"\n        android:layout_height=\"1dp\"\n        android:visibility=\"gone\"\n        tools:ignore=\"MissingConstraints\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_small_first_badge\"\n        android:layout_width=\"1dp\"\n        android:layout_height=\"1dp\"\n        android:visibility=\"gone\"\n        tools:ignore=\"MissingConstraints\" />\n\n    <com.mikepenz.materialdrawer.view.BezelImageView\n        android:id=\"@+id/material_drawer_account_header_small_second\"\n        android:layout_width=\"1dp\"\n        android:layout_height=\"1dp\"\n        android:visibility=\"gone\"\n        tools:ignore=\"MissingConstraints\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_small_second_badge\"\n        android:layout_width=\"1dp\"\n        android:layout_height=\"1dp\"\n        android:visibility=\"gone\"\n        tools:ignore=\"MissingConstraints\" />\n\n    <com.mikepenz.materialdrawer.view.BezelImageView\n        android:id=\"@+id/material_drawer_account_header_small_third\"\n        android:layout_width=\"1dp\"\n        android:layout_height=\"1dp\"\n        android:visibility=\"gone\"\n        tools:ignore=\"MissingConstraints\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_small_third_badge\"\n        android:layout_width=\"1dp\"\n        android:layout_height=\"1dp\"\n        android:visibility=\"gone\"\n        tools:ignore=\"MissingConstraints\" />\n\n    <com.mikepenz.materialdrawer.view.BezelImageView\n        android:id=\"@+id/material_drawer_account_header_current\"\n        style=\"@style/BezelImageView\"\n        android:layout_width=\"@dimen/material_drawer_account_header_compact\"\n        android:layout_height=\"@dimen/material_drawer_account_header_compact\"\n        android:layout_gravity=\"bottom\"\n        android:layout_marginStart=\"@dimen/material_drawer_vertical_padding\"\n        android:layout_marginLeft=\"@dimen/material_drawer_vertical_padding\"\n        android:clickable=\"true\"\n        android:elevation=\"2dp\"\n        android:focusable=\"true\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@+id/material_drawer_statusbar_guideline\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_current_badge\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:elevation=\"4dp\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center\"\n        android:lines=\"1\"\n        android:minWidth=\"20dp\"\n        android:paddingLeft=\"1dp\"\n        android:paddingRight=\"1dp\"\n        android:singleLine=\"true\"\n        android:textSize=\"@dimen/material_drawer_item_badge_text\"\n        app:layout_constraintBottom_toBottomOf=\"@id/material_drawer_account_header_current\"\n        app:layout_constraintStart_toStartOf=\"@id/material_drawer_account_header_current\"\n        tools:text=\"99\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_name\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:ellipsize=\"end\"\n        android:fontFamily=\"sans-serif-medium\"\n        android:lines=\"1\"\n        android:maxLines=\"1\"\n        android:paddingStart=\"@dimen/material_drawer_vertical_padding\"\n        android:paddingLeft=\"@dimen/material_drawer_vertical_padding\"\n        android:paddingEnd=\"@dimen/material_drawer_vertical_padding\"\n        android:paddingRight=\"@dimen/material_drawer_vertical_padding\"\n        android:textSize=\"@dimen/material_drawer_account_header_title\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_account_header_current\"\n        app:layout_constraintTop_toBottomOf=\"@+id/material_drawer_statusbar_guideline\"\n        app:layout_constraintVertical_chainStyle=\"packed\"\n        app:layout_goneMarginStart=\"0dp\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_email\"\n        android:layout_width=\"1dp\"\n        android:layout_height=\"1dp\"\n        android:visibility=\"gone\"\n        tools:ignore=\"MissingConstraints\" />\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_account_header_text_switcher\"\n        android:layout_width=\"@dimen/material_drawer_account_header_dropdown\"\n        android:layout_height=\"@dimen/material_drawer_account_header_dropdown\"\n        android:layout_marginStart=\"@dimen/material_drawer_padding_half\"\n        android:layout_marginLeft=\"@dimen/material_drawer_padding_half\"\n        android:layout_marginEnd=\"@dimen/material_drawer_padding_half\"\n        android:layout_marginRight=\"@dimen/material_drawer_padding_half\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_account_header_name\"\n        app:layout_constraintTop_toBottomOf=\"@id/material_drawer_statusbar_guideline\" />\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_account_header_toggle\"\n        android:layout_width=\"24dp\"\n        android:layout_height=\"0dp\"\n        android:layout_marginStart=\"@dimen/material_drawer_vertical_padding\"\n        android:layout_marginLeft=\"@dimen/material_drawer_vertical_padding\"\n        android:layout_marginEnd=\"@dimen/material_drawer_vertical_padding\"\n        android:layout_marginRight=\"@dimen/material_drawer_vertical_padding\"\n        android:scaleType=\"centerInside\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/material_drawer_statusbar_guideline\" />\n\n</merge>"
  },
  {
    "path": "app/src/main/res/layout/material_drawer_item_icon_only.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=\"@dimen/material_drawer_item_primary\"\n    android:gravity=\"center\"\n    android:orientation=\"horizontal\">\n\n    <ImageView\n        android:id=\"@+id/material_drawer_icon\"\n        android:layout_width=\"@dimen/material_drawer_item_primary\"\n        android:layout_height=\"@dimen/material_drawer_item_primary\"\n        android:layout_gravity=\"center\"\n        android:paddingBottom=\"@dimen/material_drawer_item_primary_icon_padding\"\n        android:paddingEnd=\"@dimen/material_drawer_item_primary_icon_padding\"\n        android:paddingLeft=\"@dimen/material_drawer_item_primary_icon_padding\"\n        android:paddingRight=\"@dimen/material_drawer_item_primary_icon_padding\"\n        android:paddingStart=\"@dimen/material_drawer_item_primary_icon_padding\"\n        android:paddingTop=\"@dimen/material_drawer_item_primary_icon_padding\" />\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/material_drawer_item_overflow_menu_primary.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\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=\"@dimen/material_drawer_item_primary\"\n    android:orientation=\"horizontal\"\n    android:paddingEnd=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingLeft=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingRight=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingStart=\"@dimen/material_drawer_vertical_padding\">\n\n    <ImageView\n        android:id=\"@+id/material_drawer_icon\"\n        android:layout_width=\"@dimen/material_drawer_item_primary_icon\"\n        android:layout_height=\"@dimen/material_drawer_item_primary\"\n        android:layout_gravity=\"center_vertical\"\n        android:paddingBottom=\"@dimen/material_drawer_item_primary_icon_padding\"\n        android:paddingEnd=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingLeft=\"0dp\"\n        android:paddingRight=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingStart=\"0dp\"\n        android:paddingTop=\"@dimen/material_drawer_item_primary_icon_padding\" />\n\n    <LinearLayout\n        android:layout_width=\"0dp\"\n        android:layout_height=\"match_parent\"\n        android:layout_weight=\"1\"\n        android:gravity=\"center_vertical|start\"\n        android:orientation=\"vertical\">\n\n        <TextView\n            android:id=\"@+id/material_drawer_name\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:fontFamily=\"sans-serif-medium\"\n            android:gravity=\"center_vertical|start\"\n            android:lines=\"1\"\n            android:singleLine=\"true\"\n            android:textDirection=\"anyRtl\"\n            android:textSize=\"@dimen/material_drawer_item_primary_text\"\n            tools:text=\"Some drawer text\" />\n\n        <TextView\n            android:id=\"@+id/material_drawer_description\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:fontFamily=\"sans-serif\"\n            android:gravity=\"center_vertical|start\"\n            android:lines=\"1\"\n            android:singleLine=\"true\"\n            android:textDirection=\"anyRtl\"\n            android:textSize=\"@dimen/material_drawer_item_primary_description\"\n            tools:text=\"Some drawer text\" />\n    </LinearLayout>\n\n    <ImageButton\n        android:id=\"@+id/material_drawer_menu_overflow\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:background=\"@android:color/transparent\"\n        android:gravity=\"center\"\n        android:paddingEnd=\"0dp\"\n        android:paddingLeft=\"@dimen/material_drawer_vertical_padding\"\n        android:paddingRight=\"0dp\"\n        android:paddingStart=\"@dimen/material_drawer_vertical_padding\"\n        android:scaleType=\"fitCenter\" />\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/layout/material_drawer_item_primary_centered.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\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=\"@dimen/material_drawer_item_primary\"\n    android:gravity=\"center\"\n    android:orientation=\"horizontal\"\n    android:paddingStart=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingLeft=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingEnd=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingRight=\"@dimen/material_drawer_vertical_padding\">\n\n    <ImageView\n        android:id=\"@+id/material_drawer_icon\"\n        android:layout_width=\"@dimen/material_drawer_item_primary_icon\"\n        android:layout_height=\"@dimen/material_drawer_item_primary\"\n        android:layout_gravity=\"center_vertical\"\n        android:paddingStart=\"0dp\"\n        android:paddingLeft=\"0dp\"\n        android:paddingTop=\"@dimen/material_drawer_item_primary_icon_padding\"\n        android:paddingEnd=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingRight=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingBottom=\"@dimen/material_drawer_item_primary_icon_padding\" />\n\n    <LinearLayout\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:gravity=\"center_vertical|start\"\n        android:orientation=\"vertical\">\n\n        <TextView\n            android:id=\"@+id/material_drawer_name\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:fontFamily=\"sans-serif-medium\"\n            android:gravity=\"center_vertical|start\"\n            android:lines=\"1\"\n            android:singleLine=\"true\"\n            android:textDirection=\"anyRtl\"\n            android:textSize=\"@dimen/material_drawer_item_primary_text\"\n            tools:text=\"Some drawer text\" />\n\n        <TextView\n            android:id=\"@+id/material_drawer_description\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:fontFamily=\"sans-serif\"\n            android:gravity=\"center_vertical|start\"\n            android:lines=\"1\"\n            android:singleLine=\"true\"\n            android:textDirection=\"anyRtl\"\n            android:textSize=\"@dimen/material_drawer_item_primary_description\"\n            tools:text=\"Some drawer text\" />\n    </LinearLayout>\n\n    <TextView\n        android:id=\"@+id/material_drawer_badge\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"@dimen/material_drawer_padding\"\n        android:layout_marginLeft=\"@dimen/material_drawer_padding\"\n        android:layout_marginEnd=\"@dimen/material_drawer_padding\"\n        android:layout_marginRight=\"@dimen/material_drawer_padding\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center\"\n        android:lines=\"1\"\n        android:minWidth=\"20dp\"\n        android:paddingLeft=\"1dp\"\n        android:paddingRight=\"1dp\"\n        android:singleLine=\"true\"\n        android:textSize=\"@dimen/material_drawer_item_primary_text\"\n        tools:text=\"99\" />\n\n</LinearLayout>"
  },
  {
    "path": "app/src/main/res/menu/cab.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <item\n        android:id=\"@+id/item_delete\"\n        android:icon=\"@android:drawable/ic_menu_delete\"\n        app:showAsAction=\"ifRoom|withText\"\n        android:title=\"Delete\"\n        android:titleCondensed=\"Delete\"></item>\n\n</menu>"
  },
  {
    "path": "app/src/main/res/menu/embedded.xml",
    "content": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <item\n        android:id=\"@+id/menu_1\"\n        android:orderInCategory=\"1\"\n        android:title=\"Toggle Side Panel\"\n        app:showAsAction=\"ifRoom\" />\n</menu>\n"
  },
  {
    "path": "app/src/main/res/menu/example_menu.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <item\n        android:id=\"@+id/menu_1\"\n        android:title=\"Menu 1\"\n        app:showAsAction=\"never\" />\n\n    <group android:id=\"@id/material_drawer_menu_default_group\">\n        <item\n            android:id=\"@+id/menu_2\"\n            android:title=\"Menu 2\"\n            app:showAsAction=\"never\">\n            <menu>\n                <item\n                    android:id=\"@+id/sub_menu_1\"\n                    android:title=\"Submenu 1\"\n                    app:showAsAction=\"never\" />\n                <item\n                    android:id=\"@+id/sub_menu_2\"\n                    android:title=\"Submenu 2\"\n                    app:showAsAction=\"never\" />\n                <item\n                    android:id=\"@+id/sub_menu_3\"\n                    android:title=\"Submenu 3\"\n                    app:showAsAction=\"never\" />\n            </menu>\n        </item>\n        <item\n            android:id=\"@+id/menu_3\"\n            android:title=\"Menu 3\"\n            app:showAsAction=\"never\" />\n        <item\n            android:id=\"@+id/menu_4\"\n            android:title=\"Menu 4\"\n            app:showAsAction=\"never\">\n            <menu>\n                <item\n                    android:id=\"@+id/sub_menu2_1\"\n                    android:title=\"Submenu 1\"\n                    app:showAsAction=\"never\" />\n                <item\n                    android:id=\"@+id/sub_menu2_2\"\n                    android:title=\"Submenu 2\"\n                    app:showAsAction=\"never\" />\n            </menu>\n        </item>\n    </group>\n    <group android:id=\"@+id/md_menu_second_group\">\n        <item\n            android:id=\"@+id/action_settings\"\n            android:orderInCategory=\"100\"\n            android:title=\"@string/action_settings\"\n            app:showAsAction=\"ifRoom\" />\n    </group>\n</menu>"
  },
  {
    "path": "app/src/main/res/menu/fragment_menu.xml",
    "content": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <item\n        android:id=\"@+id/menu_1\"\n        android:orderInCategory=\"1\"\n        android:title=\"Fragment 1\"\n        app:showAsAction=\"never\" />\n    <item\n        android:id=\"@+id/menu_2\"\n        android:orderInCategory=\"1\"\n        android:title=\"Fragment 2\"\n        app:showAsAction=\"never\" />\n</menu>\n"
  },
  {
    "path": "app/src/main/res/menu/main.xml",
    "content": "<menu xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\">\n\n    <item\n        android:id=\"@+id/menu_1\"\n        android:orderInCategory=\"1\"\n        android:title=\"Update Profile\"\n        app:showAsAction=\"never\" />\n    <item\n        android:id=\"@+id/menu_4\"\n        android:orderInCategory=\"4\"\n        android:title=\"CompactHeader\"\n        app:showAsAction=\"never\" />\n    <item\n        android:id=\"@+id/menu_5\"\n        android:orderInCategory=\"5\"\n        android:title=\"NormalHeader\"\n        app:showAsAction=\"never\" />\n</menu>\n"
  },
  {
    "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=\"@mipmap/ic_launcher_foreground\" />\n</adaptive-icon>"
  },
  {
    "path": "app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <background android:drawable=\"@color/ic_launcher_background\" />\n    <foreground android:drawable=\"@mipmap/ic_launcher_foreground\" />\n</adaptive-icon>"
  },
  {
    "path": "app/src/main/res/navigation/navigation.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<navigation xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:id=\"@+id/navigation\"\n    app:startDestination=\"@id/fragmentHome\">\n\n    <fragment\n        android:id=\"@+id/fragmentHome\"\n        android:name=\"com.mikepenz.materialdrawer.app.fragment.DemoMessageFragment\"\n        android:label=\"DemoMessageFragment\"\n        tools:layout=\"@layout/fragment_message_sample\">\n        <argument\n            android:name=\"message\"\n            android:defaultValue=\"Fragment Home\"\n            app:argType=\"string\" />\n        <action\n            android:id=\"@+id/action_fragmentHome_to_messageFragment1\"\n            app:destination=\"@id/messageFragment1\" />\n        <action\n            android:id=\"@+id/action_fragmentHome_to_messageFragment2\"\n            app:destination=\"@id/messageFragment2\" />\n        <action\n            android:id=\"@+id/action_fragmentHome_to_messageFragment3\"\n            app:destination=\"@id/messageFragment3\" />\n        <action\n            android:id=\"@+id/action_fragmentHome_to_aboutLibsFragment\"\n            app:destination=\"@id/about_libraries\" />\n    </fragment>\n    <fragment\n        android:id=\"@+id/messageFragment1\"\n        android:name=\"com.mikepenz.materialdrawer.app.fragment.DemoMessageFragment\"\n        android:label=\"DemoMessageFragment\"\n        tools:layout=\"@layout/fragment_message_sample\">\n        <argument\n            android:name=\"message\"\n            android:defaultValue=\"Fragment1\"\n            app:argType=\"string\" />\n    </fragment>\n    <fragment\n        android:id=\"@+id/messageFragment2\"\n        android:name=\"com.mikepenz.materialdrawer.app.fragment.DemoMessageFragment\"\n        android:label=\"DemoMessageFragment\"\n        tools:layout=\"@layout/fragment_message_sample\">\n        <argument\n            android:name=\"message\"\n            android:defaultValue=\"Fragment2\"\n            app:argType=\"string\" />\n    </fragment>\n    <fragment\n        android:id=\"@+id/messageFragment3\"\n        android:name=\"com.mikepenz.materialdrawer.app.fragment.DemoMessageFragment\"\n        android:label=\"DemoMessageFragment\"\n        tools:layout=\"@layout/fragment_message_sample\">\n        <argument\n            android:name=\"message\"\n            android:defaultValue=\"Fragment3\"\n            app:argType=\"string\" />\n    </fragment>\n    <action\n        android:id=\"@+id/action_global_fragmentHome\"\n        app:popUpTo=\"@id/fragmentHome\" />\n\n    <include app:graph=\"@navigation/aboutlibs_navigation\" />\n</navigation>"
  },
  {
    "path": "app/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!--\n    Just set custom primary and accent color.\n    Looks best with a light theme. see the AndroidManifest\n\n    android:theme=\"@style/MaterialDrawerTheme.Light.DarkActionBar.TranslucentStatus\"\n    -->\n    <color name=\"colorPrimary\">#039be5</color>\n    <color name=\"colorPrimaryDark\">#006db3</color>\n    <color name=\"colorPrimaryLight\">#63ccff</color>\n    <color name=\"colorAccent\">#2196F3</color>\n    <!-- overwrite the selected colors because the primary color is to dark -->\n    <color name=\"material_drawer_selected_text\">#039be5</color>\n    <color name=\"material_drawer_dark_selected_text\">#039be5</color>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/dimens.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <dimen name=\"material_drawer_padding_half\">4dp</dimen>\n    <dimen name=\"material_drawer_persistent_height\">48dp</dimen>\n    <dimen name=\"material_drawer_persistent_height_icon\">32dp</dimen>\n\n    <dimen name=\"gmail_material_drawer_item_corner_radius\">20dp</dimen>\n    <dimen name=\"gmail_material_drawer_item_background_padding_start\">0dp</dimen>\n    <dimen name=\"gmail_material_drawer_item_background_padding_end\">8dp</dimen>\n    <dimen name=\"gmail_material_drawer_item_background_padding_top_bottom\">4dp</dimen>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/ic_launcher_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"ic_launcher_background\">#3F51B5</color>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<resources>\n    <item name=\"material_drawer_item_gmail_item\" type=\"id\" />\n    <item name=\"material_drawer_item_custom_url_item\" type=\"id\" />\n    <item name=\"material_drawer_item_icon_only\" type=\"id\" />\n    <item name=\"material_drawer_item_centered_primary\" type=\"id\" />\n    <item name=\"material_drawer_item_overflow_menu\" type=\"id\" />\n    <item name=\"material_drawer_profile_item_divider\" type=\"id\" />\n\n    <item name=\"crossFadeSlider\" type=\"id\" />\n    <item name=\"crossFadeSmallView\" type=\"id\" />\n    <item name=\"crossFadeLargeView\" type=\"id\" />\n\n    <item name=\"about_libraries\" type=\"id\"/>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">MaterialDrawer</string>\n\n    <!-- Sample menu -->\n    <string name=\"action_settings\">Settings</string>\n\n    <!-- Drawer Items -->\n    <string name=\"drawer_item_persistent_compact_header\">PersistentHeader Drawer</string>\n    <string name=\"drawer_item_persistent_compact_header_desc\">Smaller persistent account header</string>\n    <string name=\"drawer_item_compact_header\">CompactHeader Drawer</string>\n    <string name=\"drawer_item_compact_header_desc\">Smaller account header</string>\n    <string name=\"drawer_item_action_bar_drawer\">ActionBar Drawer</string>\n    <string name=\"drawer_item_action_bar_drawer_desc\">Shows how to use with an actionbar</string>\n    <string name=\"drawer_item_multi_drawer\">Multi Drawer</string>\n    <string name=\"drawer_item_multi_drawer_desc\">Left and Right side drawer</string>\n    <string name=\"drawer_item_non_translucent_status_drawer\">NonTranslucentStatus Drawer</string>\n    <string name=\"drawer_item_non_translucent_status_drawer_desc\">Drawer below statusBar</string>\n    <string name=\"drawer_item_advanced_drawer\">Advanced Drawer</string>\n    <string name=\"drawer_item_advanced_drawer_desc\">More advanced drawer features</string>\n    <string name=\"drawer_item_embedded_drawer\">Embedded Drawer</string>\n    <string name=\"drawer_item_embedded_drawer_desc\">Embed the drawer anywhere</string>\n    <string name=\"drawer_item_mini_drawer\">MiniDrawer</string>\n    <string name=\"drawer_item_mini_drawer_desc\">Always visible MiniDrawer</string>\n    <string name=\"drawer_item_fullscreen_drawer\">FullScreen Drawer</string>\n    <string name=\"drawer_item_fullscreen_drawer_desc\">Drawer in FullScreen activity</string>\n    <string name=\"drawer_item_custom_container_drawer_desc\">Drawer in different view hirachy</string>\n    <string name=\"drawer_item_menu_drawer\">Menu Drawer</string>\n    <string name=\"drawer_item_menu_drawer_desc\">Drawer from menu.xml</string>\n    <string name=\"drawer_item_fragment_drawer\">Fragment Drawer</string>\n    <string name=\"drawer_item_fragment_drawer_desc\">Use drawer within fragments</string>\n    <string name=\"drawer_item_collapsing_toolbar_drawer\">CollapsingToolbar Drawer</string>\n    <string name=\"drawer_item_collapsing_toolbar_drawer_desc\">Uses a CollapsingToolbarLayout</string>\n    <string name=\"drawer_item_crossfade_drawer_layout_drawer\">CrossfadeDrawerLayout</string>\n    <string name=\"drawer_item_crossfade_drawer_layout_drawer_desc\">2-Step Drawer behavior</string>\n    <string name=\"drawer_item_navigation_drawer\">Nav Controller Drawer</string>\n    <string name=\"drawer_item_navigation_drawer_desc\">Drawer with a Nav Controller</string>\n\n    <string name=\"drawer_item_menu_drawer_item\">Menu Drawer Item</string>\n    <string name=\"drawer_item_menu_drawer_item_desc\">Sample menu item with overflow button</string>\n\n    <string name=\"drawer_item_home\">Home</string>\n    <string name=\"drawer_item_free_play\">Free Play</string>\n    <string name=\"drawer_item_custom\">Custom</string>\n    <string name=\"drawer_item_section_header\">Section Header</string>\n    <string name=\"drawer_item_settings\">Settings</string>\n    <string name=\"drawer_item_help\">Help</string>\n    <string name=\"drawer_item_open_source\">Open Source</string>\n    <string name=\"drawer_item_contact\">Contact</string>\n\n    <string name=\"lorem_ipsum\">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</string>\n</resources>\n"
  },
  {
    "path": "app/src/main/res/values/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <style name=\"Widget.MaterialDrawerStyleCustom\" parent=\"Widget.MaterialDrawerStyle\">\n        <!-- MaterialDrawer specific values -->\n        <item name=\"materialDrawerBackground\">#303030</item>\n        <item name=\"materialDrawerPrimaryText\">?android:textColorPrimary</item>\n        <item name=\"materialDrawerSecondaryText\">?android:textColorSecondary</item>\n        <item name=\"materialDrawerDividerColor\">#1FFFFFFF</item>\n        <item name=\"materialDrawerSelectedBackgroundColor\">#1FF1433C</item>\n    </style>\n\n    <!--\n    Overwrite the Style of the BezelImageView for the whole MaterialDrawer\n    <style name=\"BezelImageView\">\n        <item name=\"biv_maskDrawable\">@drawable/material_drawer_square_mask</item>\n        <item name=\"biv_drawCircularShadow\">false</item>\n        <item name=\"biv_selectorOnPress\">@color/material_drawer_primary</item>\n        <item name=\"android:scaleType\">centerInside</item>\n    </style>\n    -->\n\n    <style name=\"Widget.MaterialDrawerHeaderStyleCustom\" parent=\"\">\n        <item name=\"materialDrawerCompactStyle\">true</item>\n        <item name=\"materialDrawerHeaderSelectionText\">?colorOnSurface</item>\n        <item name=\"materialDrawerHeaderSelectionSubtext\">?colorOnSurface</item>\n    </style>\n\n    <style name=\"Widget.MaterialDrawerHeaderStylePersistent\" parent=\"\">\n        <item name=\"materialDrawerCompactStyle\">true</item>\n        <item name=\"materialDrawerHeaderLayout\">@layout/material_drawer_compact_persistent_header\n        </item>\n        <item name=\"materialDrawerHeaderSelectionText\">?colorOnSurface</item>\n        <item name=\"materialDrawerHeaderSelectionSubtext\">?colorOnSurface</item>\n    </style>\n</resources>"
  },
  {
    "path": "app/src/main/res/values/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <!-- LIGHT -->\n    <style name=\"SampleApp.DayNight\" parent=\"Theme.Material3.DayNight.NoActionBar\">\n        <item name=\"materialDrawerStyle\">@style/Widget.MaterialDrawerStyle</item>\n        <item name=\"materialDrawerHeaderStyle\">@style/Widget.MaterialDrawerHeaderStyle</item>\n\n        <item name=\"android:windowTranslucentStatus\">true</item>\n\n        <!-- CAB :D -->\n        <item name=\"windowActionModeOverlay\">true</item>\n    </style>\n\n    <style name=\"SampleApp.DayNight.Compact\" parent=\"Theme.Material3.Light.NoActionBar\">\n        <item name=\"materialDrawerStyle\">@style/Widget.MaterialDrawerStyle</item>\n        <item name=\"materialDrawerHeaderStyle\">@style/Widget.MaterialDrawerHeaderStyleCustom</item>\n\n        <item name=\"android:windowTranslucentStatus\">true</item>\n\n        <!-- CAB :D -->\n        <item name=\"windowActionModeOverlay\">true</item>\n    </style>\n\n    <style name=\"SampleApp.DayNight.Persistent\" parent=\"Theme.Material3.Light.NoActionBar\">\n        <item name=\"materialDrawerStyle\">@style/Widget.MaterialDrawerStyle</item>\n        <item name=\"materialDrawerHeaderStyle\">@style/Widget.MaterialDrawerHeaderStylePersistent</item>\n\n        <item name=\"android:windowTranslucentStatus\">true</item>\n\n        <!-- CAB :D -->\n        <item name=\"windowActionModeOverlay\">true</item>\n    </style>\n\n\n    <style name=\"SampleApp.DayNight.DarkActionBar\" parent=\"Theme.Material3.DayNight\" />\n</resources>"
  },
  {
    "path": "build.gradle.kts",
    "content": "plugins {\n    alias(baseLibs.plugins.conventionPlugin)\n\n    alias(baseLibs.plugins.kotlinAndroid) apply false\n    alias(baseLibs.plugins.androidApplication) apply false\n    alias(baseLibs.plugins.androidLibrary) apply false\n\n    alias(baseLibs.plugins.dokka)\n    alias(baseLibs.plugins.aboutLibraries) apply false\n    alias(baseLibs.plugins.mavenPublish) apply false\n\n    alias(libs.plugins.navSafeArgs) apply false\n}"
  },
  {
    "path": "gradle/libs.versions.toml",
    "content": "[versions]\n# androidx\nappcompat = \"1.7.0\"\ncardview = \"1.0.0\"\nconstraintLayout = \"2.2.0\"\ncore = \"1.15.0\"\ndrawerlayout = \"1.2.0\"\nnavigation = \"2.8.6\"\nrecyclerView = \"1.4.0\"\n# google\nmaterial = \"1.12.0\"\n# other\nfastAdapter = \"5.7.0\"\niconics = \"5.4.0\"\nitemAnimators = \"1.1.0\"\n\n[plugins]\nnavSafeArgs = { id = \"androidx.navigation.safeargs\", version.ref = \"navigation\" }\n\n[libraries]\n# androidx\nandroidx-appcompat = { module = \"androidx.appcompat:appcompat\", version.ref = \"appcompat\" }\nandroidx-cardView = { module = \"androidx.cardview:cardview\", version.ref = \"cardview\" }\nandroidx-constraintLayout = { module = \"androidx.constraintlayout:constraintlayout\", version.ref = \"constraintLayout\" }\nandroidx-core-ktx = { module = \"androidx.core:core-ktx\", version.ref = \"core\" }\nandroidx-drawerlayout = { module = \"androidx.drawerlayout:drawerlayout\", version.ref = \"drawerlayout\" }\nandroidx-navigation-fragment = { module = \"androidx.navigation:navigation-fragment\", version.ref = \"navigation\" }\nandroidx-navigation-runtime = { module = \"androidx.navigation:navigation-runtime-ktx\", version.ref = \"navigation\" }\nandroidx-navigation-ui = { module = \"androidx.navigation:navigation-ui-ktx\", version.ref = \"navigation\" }\nandroidx-recyclerView = { module = \"androidx.recyclerview:recyclerview\", version.ref = \"recyclerView\" }\n# google\ngoogle-material = { module = \"com.google.android.material:material\", version.ref = \"material\" }\n# other\nfastAdapter-core = { module = \"com.mikepenz:fastadapter\", version.ref = \"fastAdapter\" }\nfastAdapter-expandable = { module = \"com.mikepenz:fastadapter-extensions-expandable\", version.ref = \"fastAdapter\" }\niconics-core = { module = \"com.mikepenz:iconics-core\", version.ref = \"iconics\" }\nitemAnimators-core = { module = \"com.mikepenz:itemanimators\", version.ref = \"itemAnimators\" }\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-8.12-bin.zip\nnetworkTimeout=10000\nvalidateDistributionUrl=true\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "gradle.properties",
    "content": "# Maven stuff\nGROUP=com.mikepenz\nVERSION_NAME=10.0.0-b01\nVERSION_CODE=10000\n\nPOM_URL=https://github.com/mikepenz/MaterialDrawer\nPOM_SCM_URL=https://github.com/mikepenz/MaterialDrawer\nPOM_SCM_CONNECTION=scm:git@github.com:mikepenz/MaterialDrawer.git\nPOM_SCM_DEV_CONNECTION=scm:git@github.com:mikepenz/MaterialDrawer.git\nPOM_SCM_URL_ISSUES=https://github.com/mikepenz/MaterialDrawer/issues\nPOM_GITHUB_REPO=mikepenz/MaterialDrawer\nPOM_GITHUB_README=README.md\nPOM_LICENCE_NAME=Apache-2.0\nPOM_LICENCE_URL=https://www.apache.org/licenses/LICENSE-2.0.txt\nPOM_LICENCE_DIST=repo\nPOM_DEVELOPER_ID=mikepenz\nPOM_DEVELOPER_NAME=Mike Penz\n# Project-wide Gradle settings.\norg.gradle.jvmargs=-Xmx1536m\nandroid.useAndroidX=true\nandroid.enableJetifier=false\norg.gradle.caching=true\norg.gradle.configuration-cache=false\nandroid.suppressUnsupportedCompileSdk=34\n# Dokka\norg.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled\norg.jetbrains.dokka.experimental.gradle.pluginMode.noWarn=true\n# convention plugin\ncom.mikepenz.kotlin.warningsAsErrors.enabled=false"
  },
  {
    "path": "gradlew",
    "content": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original 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# SPDX-License-Identifier: Apache-2.0\n#\n\n##############################################################################\n#\n#   Gradle start up script for POSIX generated by Gradle.\n#\n#   Important for running:\n#\n#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is\n#       noncompliant, but you have some other compliant shell such as ksh or\n#       bash, then to run this script, type that shell name before the whole\n#       command line, like:\n#\n#           ksh Gradle\n#\n#       Busybox and similar reduced shells will NOT work, because this script\n#       requires all of these POSIX shell features:\n#         * functions;\n#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,\n#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;\n#         * compound commands having a testable exit status, especially «case»;\n#         * various built-in commands including «command», «set», and «ulimit».\n#\n#   Important for patching:\n#\n#   (2) This script targets any POSIX shell, so it avoids extensions provided\n#       by Bash, Ksh, etc; in particular arrays are avoided.\n#\n#       The \"traditional\" practice of packing multiple parameters into a\n#       space-separated string is a well documented source of bugs and security\n#       problems, so this is (mostly) avoided, by progressively accumulating\n#       options in \"$@\", and eventually passing that to Java.\n#\n#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,\n#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;\n#       see the in-line comments for details.\n#\n#       There are tweaks for specific operating systems such as AIX, CygWin,\n#       Darwin, MinGW, and NonStop.\n#\n#   (3) This script is generated from the Groovy template\n#       https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt\n#       within the Gradle project.\n#\n#       You can find Gradle at https://github.com/gradle/gradle/.\n#\n##############################################################################\n\n# Attempt to set APP_HOME\n\n# Resolve links: $0 may be a link\napp_path=$0\n\n# Need this for daisy-chained symlinks.\nwhile\n    APP_HOME=${app_path%\"${app_path##*/}\"}  # leaves a trailing /; empty if no leading path\n    [ -h \"$app_path\" ]\ndo\n    ls=$( ls -ld \"$app_path\" )\n    link=${ls#*' -> '}\n    case $link in             #(\n      /*)   app_path=$link ;; #(\n      *)    app_path=$APP_HOME$link ;;\n    esac\ndone\n\n# This is normally unused\n# shellcheck disable=SC2034\nAPP_BASE_NAME=${0##*/}\n# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)\nAPP_HOME=$( cd -P \"${APP_HOME:-./}\" > /dev/null && printf '%s\\n' \"$PWD\" ) || exit\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=maximum\n\nwarn () {\n    echo \"$*\"\n} >&2\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n} >&2\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"$( uname )\" in                #(\n  CYGWIN* )         cygwin=true  ;; #(\n  Darwin* )         darwin=true  ;; #(\n  MSYS* | MINGW* )  msys=true    ;; #(\n  NONSTOP* )        nonstop=true ;;\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    if ! command -v java >/dev/null 2>&1\n    then\n        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.\"\n    fi\nfi\n\n# Increase the maximum file descriptors if we can.\nif ! \"$cygwin\" && ! \"$darwin\" && ! \"$nonstop\" ; then\n    case $MAX_FD in #(\n      max*)\n        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.\n        # shellcheck disable=SC2039,SC3045\n        MAX_FD=$( ulimit -H -n ) ||\n            warn \"Could not query maximum file descriptor limit\"\n    esac\n    case $MAX_FD in  #(\n      '' | soft) :;; #(\n      *)\n        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.\n        # shellcheck disable=SC2039,SC3045\n        ulimit -n \"$MAX_FD\" ||\n            warn \"Could not set maximum file descriptor limit to $MAX_FD\"\n    esac\nfi\n\n# Collect all arguments for the java command, stacking in reverse order:\n#   * args from the command line\n#   * the main class name\n#   * -classpath\n#   * -D...appname settings\n#   * --module-path (only if needed)\n#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif \"$cygwin\" || \"$msys\" ; then\n    APP_HOME=$( cygpath --path --mixed \"$APP_HOME\" )\n    CLASSPATH=$( cygpath --path --mixed \"$CLASSPATH\" )\n\n    JAVACMD=$( cygpath --unix \"$JAVACMD\" )\n\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    for arg do\n        if\n            case $arg in                                #(\n              -*)   false ;;                            # don't mess with options #(\n              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath\n                    [ -e \"$t\" ] ;;                      #(\n              *)    false ;;\n            esac\n        then\n            arg=$( cygpath --path --ignore --mixed \"$arg\" )\n        fi\n        # Roll the args list around exactly as many times as the number of\n        # args, so each arg winds up back in the position where it started, but\n        # possibly modified.\n        #\n        # NB: a `for` loop captures its iteration list before it begins, so\n        # changing the positional parameters here affects neither the number of\n        # iterations, nor the values presented in `arg`.\n        shift                   # remove old arg\n        set -- \"$@\" \"$arg\"      # push replacement arg\n    done\nfi\n\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# Collect all arguments for the java command:\n#   * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,\n#     and any embedded shellness will be escaped.\n#   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be\n#     treated as '${Hostname}' itself on the command line.\n\nset -- \\\n        \"-Dorg.gradle.appname=$APP_BASE_NAME\" \\\n        -classpath \"$CLASSPATH\" \\\n        org.gradle.wrapper.GradleWrapperMain \\\n        \"$@\"\n\n# Stop when \"xargs\" is not available.\nif ! command -v xargs >/dev/null 2>&1\nthen\n    die \"xargs is not available\"\nfi\n\n# Use \"xargs\" to parse quoted args.\n#\n# With -n1 it outputs one arg per line, with the quotes and backslashes removed.\n#\n# In Bash we could simply go:\n#\n#   readarray ARGS < <( xargs -n1 <<<\"$var\" ) &&\n#   set -- \"${ARGS[@]}\" \"$@\"\n#\n# but POSIX shell has neither arrays nor command substitution, so instead we\n# post-process each arg (as a line of input to sed) to backslash-escape any\n# character that might be a shell metacharacter, then use eval to reverse\n# that process (while maintaining the separation between arguments), and wrap\n# the whole thing up as a single \"set\" statement.\n#\n# This will of course break if any of these variables contains a newline or\n# an unmatched quote.\n#\n\neval \"set -- $(\n        printf '%s\\n' \"$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\" |\n        xargs -n1 |\n        sed ' s~[^-[:alnum:]+,./:=@_]~\\\\&~g; ' |\n        tr '\\n' ' '\n    )\" '\"$@\"'\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@rem\r\n@rem Copyright 2015 the original author or authors.\r\n@rem\r\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\r\n@rem you may not use this file except in compliance with the License.\r\n@rem You may obtain a copy of the License at\r\n@rem\r\n@rem      https://www.apache.org/licenses/LICENSE-2.0\r\n@rem\r\n@rem Unless required by applicable law or agreed to in writing, software\r\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\r\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n@rem See the License for the specific language governing permissions and\r\n@rem limitations under the License.\r\n@rem\r\n@rem SPDX-License-Identifier: Apache-2.0\r\n@rem\r\n\r\n@if \"%DEBUG%\"==\"\" @echo off\r\n@rem ##########################################################################\r\n@rem\r\n@rem  Gradle startup script for Windows\r\n@rem\r\n@rem ##########################################################################\r\n\r\n@rem Set local scope for the variables with windows NT shell\r\nif \"%OS%\"==\"Windows_NT\" setlocal\r\n\r\nset DIRNAME=%~dp0\r\nif \"%DIRNAME%\"==\"\" set DIRNAME=.\r\n@rem This is normally unused\r\nset APP_BASE_NAME=%~n0\r\nset APP_HOME=%DIRNAME%\r\n\r\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\r\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\r\n\r\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\r\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\r\n\r\n@rem Find java.exe\r\nif defined JAVA_HOME goto findJavaFromJavaHome\r\n\r\nset JAVA_EXE=java.exe\r\n%JAVA_EXE% -version >NUL 2>&1\r\nif %ERRORLEVEL% equ 0 goto execute\r\n\r\necho. 1>&2\r\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2\r\necho. 1>&2\r\necho Please set the JAVA_HOME variable in your environment to match the 1>&2\r\necho location of your Java installation. 1>&2\r\n\r\ngoto fail\r\n\r\n:findJavaFromJavaHome\r\nset JAVA_HOME=%JAVA_HOME:\"=%\r\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\r\n\r\nif exist \"%JAVA_EXE%\" goto execute\r\n\r\necho. 1>&2\r\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2\r\necho. 1>&2\r\necho Please set the JAVA_HOME variable in your environment to match the 1>&2\r\necho location of your Java installation. 1>&2\r\n\r\ngoto fail\r\n\r\n:execute\r\n@rem Setup the command line\r\n\r\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\r\n\r\n\r\n@rem Execute Gradle\r\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\r\n\r\n:end\r\n@rem End local scope for the variables with windows NT shell\r\nif %ERRORLEVEL% equ 0 goto mainEnd\r\n\r\n:fail\r\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\r\nrem the _cmd.exe /c_ return code!\r\nset EXIT_CODE=%ERRORLEVEL%\r\nif %EXIT_CODE% equ 0 set EXIT_CODE=1\r\nif not \"\"==\"%GRADLE_EXIT_CONSOLE%\" exit %EXIT_CODE%\r\nexit /b %EXIT_CODE%\r\n\r\n:mainEnd\r\nif \"%OS%\"==\"Windows_NT\" endlocal\r\n\r\n:omega\r\n"
  },
  {
    "path": "materialdrawer/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "materialdrawer/build.gradle.kts",
    "content": "plugins {\n    id(\"com.mikepenz.convention.android-library\")\n    id(\"com.mikepenz.convention.kotlin\")\n    id(\"com.mikepenz.convention.publishing\")\n}\n\nandroid {\n    namespace = \"com.mikepenz.materialdrawer\"\n}\n\ndependencies {\n    implementation(libs.androidx.appcompat)\n    implementation(libs.androidx.core.ktx)\n\n    api(libs.androidx.drawerlayout)\n    api(libs.androidx.recyclerView)\n    implementation(libs.androidx.cardView)\n    implementation(libs.google.material)\n\n    // add the constraintLayout used to create the items and headers\n    implementation(libs.androidx.constraintLayout)\n\n    // used to fill the RecyclerView with the items\n    // and provides single and multi selection, expandable items\n    // https://github.com/mikepenz/FastAdapter\n    api(libs.fastAdapter.core)\n    api(libs.fastAdapter.expandable)\n}"
  },
  {
    "path": "materialdrawer/gradle.properties",
    "content": "POM_NAME=MaterialDrawer Library\nPOM_DESCRIPTION=The flexible, easy to use, all in one drawer library for your Android project.\nPOM_ARTIFACT_ID=materialdrawer\nPOM_PACKAGING=aar"
  },
  {
    "path": "materialdrawer/proguard-rules.txt",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /Entwicklung/android-sdk/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the ProGuard\n# include property in project.properties.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\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#}"
  },
  {
    "path": "materialdrawer/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest/>\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/holder/BadgeStyle.kt",
    "content": "package com.mikepenz.materialdrawer.holder\n\nimport android.content.res.ColorStateList\nimport android.graphics.drawable.Drawable\nimport android.widget.TextView\nimport androidx.annotation.ColorInt\nimport androidx.annotation.DrawableRes\nimport androidx.core.view.ViewCompat\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.model.utils.BadgeDrawableBuilder\n\n/**\n * Class to allow defining a BadgeStyle for the `BadgeDrawerItem`\n */\nopen class BadgeStyle {\n    /** defines the drawable to use to define the rounded corners */\n    var gradientDrawable = R.drawable.material_drawer_badge\n\n    /** defines the background drawable */\n    var badgeBackground: Drawable? = null\n\n    /** the default color */\n    var color: ColorHolder? = null\n\n    /** the pressed color */\n    var colorPressed: ColorHolder? = null\n\n    /**\n     * the text size\n     * NOTE: Will only apply on 21+, also if applying, ensure to apply to all views\n     */\n    var textSizeSp: Float? = null\n    private var _textColor: ColorHolder? = null\n\n    /** defines the default text color */\n    var textColor: ColorHolder?\n        get() = _textColor\n        set(value) {\n            _textColorStateList = null\n            _textColor = value\n        }\n\n    private var _textColorStateList: ColorStateList? = null\n\n    /** defines the alternative text color state list */\n    var textColorStateList: ColorStateList?\n        get() = _textColorStateList\n        set(value) {\n            _textColor = null\n            _textColorStateList = value\n        }\n\n    /** the corner radious */\n    var corners: DimenHolder? = null\n\n    /** dcustom padding to the bottom (default 2dp) */\n    var paddingTopBottom = DimenHolder.fromDp(2)\n\n    /** custom padding to the right (default 3dp) */\n    var paddingLeftRight = DimenHolder.fromDp(3)\n\n    /** the min width to set (default 20dp) */\n    var minWidth = DimenHolder.fromDp(20)\n\n    /**\n     * elevation to apply on the view\n     * NOTE: Will only apply on 21+, also if applying, ensure to apply to all views\n     */\n    var elevation: DimenHolder? = null\n\n    constructor()\n\n    constructor(@ColorInt color: Int, @ColorInt colorPressed: Int) {\n        this.color = ColorHolder.fromColor(color)\n        this.colorPressed = ColorHolder.fromColor(colorPressed)\n    }\n\n    constructor(@DrawableRes gradientDrawable: Int, @ColorInt color: Int, @ColorInt colorPressed: Int, @ColorInt textColor: Int) {\n        this.gradientDrawable = gradientDrawable\n        this.color = ColorHolder.fromColor(color)\n        this.colorPressed = ColorHolder.fromColor(colorPressed)\n        this.textColor = ColorHolder.fromColor(textColor)\n    }\n\n    /** styles theprovided textView with this style, and the provided colorStateList */\n    @JvmOverloads\n    open fun style(badgeTextView: TextView, colorStateList: ColorStateList? = null) {\n        val ctx = badgeTextView.context\n        //set background for badge\n        if (badgeBackground == null) {\n            ViewCompat.setBackground(badgeTextView, BadgeDrawableBuilder(this).build(ctx))\n        } else {\n            ViewCompat.setBackground(badgeTextView, badgeBackground)\n        }\n\n        val textSizeSp = textSizeSp\n        if (textSizeSp != null) {\n            badgeTextView.textSize = textSizeSp\n        } else {\n            // keep the size it is defined in the layout\n        }\n\n        //set the badge text color\n        when {\n            textColor != null -> textColor?.applyToOr(badgeTextView, null)\n            textColorStateList != null -> badgeTextView.setTextColor(textColorStateList)\n            colorStateList != null -> badgeTextView.setTextColor(colorStateList)\n        }\n\n        //set the padding\n        val paddingLeftRight = this.paddingLeftRight.asPixel(ctx)\n        val paddingTopBottom = this.paddingTopBottom.asPixel(ctx)\n        badgeTextView.setPadding(paddingLeftRight, paddingTopBottom, paddingLeftRight, paddingTopBottom)\n\n        //set the min width\n        badgeTextView.minWidth = minWidth.asPixel(ctx)\n\n        // set elevation if expected\n        elevation?.let { elev ->\n            ViewCompat.setElevation(badgeTextView, elev.asPixel(ctx).toFloat())\n        }\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/holder/ColorHolder.kt",
    "content": "package com.mikepenz.materialdrawer.holder\n\nimport android.content.Context\nimport android.content.res.ColorStateList\nimport android.graphics.Color\nimport android.graphics.drawable.GradientDrawable\nimport android.view.View\nimport android.widget.TextView\nimport androidx.annotation.AttrRes\nimport androidx.annotation.ColorInt\nimport androidx.annotation.ColorRes\nimport androidx.core.content.ContextCompat\nimport com.mikepenz.materialdrawer.util.getThemeColorFromAttrOrRes\n\n\n/**\n * Defines a custom holder class to support providing color either as colorRes or colorInt. Does not require a [Context] and will resolve the value when applying.\n */\nopen class ColorHolder {\n    /** defines the color as an integer */\n    var colorInt = 0\n        internal set\n    /** defines the color as a ressource */\n    var colorRes = -1\n        internal set\n\n    /**\n     * set the textColor of the ColorHolder to an drawable\n     *\n     * @param ctx\n     * @param drawable\n     */\n    open fun applyTo(ctx: Context, drawable: GradientDrawable) {\n        if (colorInt != 0) {\n            drawable.setColor(colorInt)\n        } else if (colorRes != -1) {\n            drawable.setColor(ContextCompat.getColor(ctx, colorRes))\n        }\n    }\n\n\n    /**\n     * set the textColor of the ColorHolder to a view\n     *\n     * @param view\n     */\n    open fun applyToBackground(view: View) {\n        if (colorInt != 0) {\n            view.setBackgroundColor(colorInt)\n        } else if (colorRes != -1) {\n            view.setBackgroundResource(colorRes)\n        }\n    }\n\n    /**\n     * a small helper to set the text color to a textView null save\n     */\n    open fun applyToOr(textView: TextView, colorDefault: ColorStateList?) {\n        when {\n            colorInt != 0 -> {\n                textView.setTextColor(colorInt)\n            }\n            colorRes != -1 -> {\n                textView.setTextColor(ContextCompat.getColor(textView.context, colorRes))\n            }\n            colorDefault != null -> {\n                textView.setTextColor(colorDefault)\n            }\n        }\n    }\n\n    /**\n     * a small helper class to get the color from the colorHolder or from the theme or from the default color value\n     */\n    open fun color(ctx: Context, @AttrRes colorStyle: Int, @ColorRes colorDefaultRes: Int): Int { //get the color from the holder else from the theme\n        val color = color(ctx)\n        return if (color == 0) {\n            ctx.getThemeColorFromAttrOrRes(colorStyle, colorDefaultRes)\n        } else {\n            color\n        }\n    }\n\n    /**\n     * a small helper to get the color from the colorHolder\n     */\n    open fun color(ctx: Context): Int {\n        if (colorInt == 0 && colorRes != -1) {\n            colorInt = ContextCompat.getColor(ctx, colorRes)\n        }\n        return colorInt\n    }\n\n    companion object {\n        /**\n         * Constructs a [ColorHolder] given a color resource\n         */\n        fun fromColorRes(@ColorRes colorRes: Int): ColorHolder {\n            val colorHolder = ColorHolder()\n            colorHolder.colorRes = colorRes\n            return colorHolder\n        }\n\n        /**\n         * Constructs a [ColorHolder] given a color integer\n         */\n        fun fromColor(@ColorInt colorInt: Int): ColorHolder {\n            val colorHolder = ColorHolder()\n            colorHolder.colorInt = colorInt\n            return colorHolder\n        }\n\n        /**\n         * a small static helper class to get the color from the colorHolder or from the theme or from the default color value\n         */\n        fun color(colorHolder: ColorHolder?, ctx: Context, @AttrRes colorStyle: Int, @ColorRes colorDefault: Int): Int {\n            return colorHolder?.color(ctx, colorStyle, colorDefault)\n                    ?: ctx.getThemeColorFromAttrOrRes(colorStyle, colorDefault)\n        }\n\n        /**\n         * a small static helper class to get the color from the colorHolder\n         */\n        fun color(colorHolder: ColorHolder?, ctx: Context): Int {\n            return colorHolder?.color(ctx) ?: 0\n        }\n\n        /**\n         * a small static helper to set the text color to a textView null save\n         */\n        fun applyToOr(colorHolder: ColorHolder?, textView: TextView?, colorDefault: ColorStateList?) {\n            if (colorHolder != null && textView != null) {\n                colorHolder.applyToOr(textView, colorDefault)\n            } else textView?.setTextColor(colorDefault)\n        }\n\n        /**\n         * a small static helper to set the color to a GradientDrawable null save\n         */\n        fun applyToOrTransparent(colorHolder: ColorHolder?, ctx: Context, gradientDrawable: GradientDrawable?) {\n            if (colorHolder != null && gradientDrawable != null) {\n                colorHolder.applyTo(ctx, gradientDrawable)\n            } else gradientDrawable?.setColor(Color.TRANSPARENT)\n        }\n    }\n}\n\n/**\n * a small static helper class to get the color from the colorHolder or from the theme or from the default color value\n */\nfun ColorHolder?.applyColor(ctx: Context, @AttrRes colorStyle: Int, @ColorRes colorDefault: Int): Int {\n    return ColorHolder.color(this, ctx, colorStyle, colorDefault)\n}\n\n/**\n * a small static helper class to get the color from the colorHolder\n */\nfun ColorHolder?.applyColor(ctx: Context): Int {\n    return ColorHolder.color(this, ctx)\n}\n\n/**\n * a small static helper to set the text color to a textView null save\n */\nfun ColorHolder?.applyToOrDefault(textView: TextView?, colorDefault: ColorStateList) {\n    ColorHolder.applyToOr(this, textView, colorDefault)\n}\n\n/**\n * a small static helper to set the color to a GradientDrawable null save\n */\nfun ColorHolder?.applyToOrTransparent(ctx: Context, gradientDrawable: GradientDrawable?) {\n    ColorHolder.applyToOrTransparent(this, ctx, gradientDrawable)\n}"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/holder/DimenHolder.kt",
    "content": "package com.mikepenz.materialdrawer.holder\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.util.DisplayMetrics\nimport androidx.annotation.DimenRes\nimport androidx.annotation.Dimension\nimport androidx.annotation.Dimension.Companion.DP\nimport androidx.annotation.Dimension.Companion.PX\n\n\n/**\n * Defines a custom holder class to support providing dimension either as pixel, dp or dimensRes. Does not require a [Context] and will resolve the value when applying.\n */\nopen class DimenHolder {\n    /** Defines the pixel dimension */\n    var pixel = Int.MIN_VALUE\n        internal set\n    /** Defines the dp dimension */\n    var dp = Int.MIN_VALUE\n        internal set\n    /** Defines the resource dimension */\n    var resource = Int.MIN_VALUE\n        internal set\n\n    /** Resturns this [DimenHolder]`s dimension as pixel value */\n    open fun asPixel(ctx: Context): Int {\n        return when {\n            pixel != Int.MIN_VALUE -> pixel\n            dp != Int.MIN_VALUE -> ctx.convertDpToPixel(dp)\n            resource != Int.MIN_VALUE -> ctx.resources.getDimensionPixelSize(resource)\n            else -> 0\n        }\n    }\n\n    companion object {\n        /**\n         * Constructs a [DimenHolder] given a pixel value\n         */\n        fun fromPixel(@Dimension(unit = PX) pixel: Int): DimenHolder {\n            val dimenHolder = DimenHolder()\n            dimenHolder.pixel = pixel\n            return dimenHolder\n        }\n\n        /**\n         * Constructs a [DimenHolder] given a dp value\n         */\n        fun fromDp(@Dimension(unit = DP) dp: Int): DimenHolder {\n            val dimenHolder = DimenHolder()\n            dimenHolder.dp = dp\n            return dimenHolder\n        }\n\n        /**\n         * Constructs a [DimenHolder] given a resource id\n         */\n        fun fromResource(@DimenRes resource: Int): DimenHolder {\n            val dimenHolder = DimenHolder()\n            dimenHolder.resource = resource\n            return dimenHolder\n        }\n    }\n}\n\n\n/**\n * This method converts dp unit to equivalent pixels, depending on device density.\n */\nprivate fun Context.convertDpToPixel(dp: Int): Int {\n    val resources: Resources = resources\n    val metrics: DisplayMetrics = resources.displayMetrics\n    return (dp * (metrics.densityDpi / 160.0)).toInt()\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/holder/ImageHolder.kt",
    "content": "package com.mikepenz.materialdrawer.holder\n\nimport android.content.Context\nimport android.content.res.ColorStateList\nimport android.graphics.Bitmap\nimport android.graphics.PorterDuff\nimport android.graphics.drawable.BitmapDrawable\nimport android.graphics.drawable.Drawable\nimport android.net.Uri\nimport android.view.View\nimport android.widget.ImageView\nimport androidx.annotation.DrawableRes\nimport androidx.core.content.ContextCompat\nimport com.mikepenz.materialdrawer.util.DrawerImageLoader\nimport com.mikepenz.materialdrawer.util.FixStateListDrawable\nimport com.mikepenz.materialdrawer.util.getIconStateList\nimport java.io.FileNotFoundException\n\n/**\n * Defines a custom holder class to support providing images either as uri, drawable, bitmap, or resource. Does not require a [Context] and will resolve the value when applying.\n */\nopen class ImageHolder {\n    /** Defines the uri image */\n    var uri: Uri? = null\n        internal set\n    /** Defines the drawable image */\n    var icon: Drawable? = null\n        internal set\n    /** Defines the bitmap image */\n    var bitmap: Bitmap? = null\n        internal set\n    /** Defines the resource image */\n    var iconRes = -1\n        internal set\n\n    protected constructor()\n\n    constructor(url: String) {\n        this.uri = Uri.parse(url)\n    }\n\n    constructor(uri: Uri) {\n        this.uri = uri\n    }\n\n    constructor(icon: Drawable?) {\n        this.icon = icon\n    }\n\n    constructor(bitmap: Bitmap) {\n        this.bitmap = bitmap\n    }\n\n    constructor(@DrawableRes iconRes: Int) {\n        this.iconRes = iconRes\n    }\n\n    /**\n     * sets an existing image to the imageView\n     */\n    @JvmOverloads\n    open fun applyTo(imageView: ImageView, tag: String? = null): Boolean {\n        val uri = uri\n        when {\n            uri != null -> {\n                val consumed = DrawerImageLoader.instance.setImage(imageView, uri, tag)\n                if (!consumed) {\n                    imageView.setImageURI(uri)\n                }\n            }\n            icon != null -> imageView.setImageDrawable(icon)\n            bitmap != null -> imageView.setImageBitmap(bitmap)\n            iconRes != -1 -> imageView.setImageResource(iconRes)\n            else -> {\n                imageView.setImageBitmap(null)\n                return false\n            }\n        }\n        return true\n    }\n\n    /**\n     * this only handles Drawables\n     */\n    open fun decideIcon(ctx: Context, iconColor: ColorStateList, tint: Boolean, paddingDp: Int = 1): Drawable? {\n        var icon = this.icon\n        when {\n            iconRes != -1 -> icon = ContextCompat.getDrawable(ctx, iconRes)\n            uri != null -> try {\n                val inputStream = ctx.contentResolver.openInputStream(uri!!)\n                icon = Drawable.createFromStream(inputStream, uri!!.toString())\n            } catch (e: FileNotFoundException) {\n                //no need to handle this\n            }\n            bitmap != null -> icon = BitmapDrawable(ctx.resources, bitmap)\n        }\n        //if we got an icon AND we have auto tinting enabled AND it is no IIcon, tint it ;)\n        if (icon != null && tint) {\n            icon = icon.mutate()\n            icon.setColorFilter(iconColor.defaultColor, PorterDuff.Mode.SRC_IN)\n        }\n\n        return icon\n    }\n\n    companion object {\n\n        /**\n         * a small static helper to set the image from the imageHolder nullSave to the imageView\n         */\n        @JvmOverloads\n        fun applyTo(imageHolder: ImageHolder?, imageView: ImageView?, tag: String? = null): Boolean {\n            return if (imageHolder != null && imageView != null) {\n                imageHolder.applyTo(imageView, tag)\n            } else false\n        }\n\n        /**\n         * a small static helper to set the image from the imageHolder nullSave to the imageView and hide the view if no image was set\n         */\n        @JvmOverloads\n        fun applyToOrSetInvisible(imageHolder: ImageHolder?, imageView: ImageView?, tag: String? = null) {\n            val imageSet = applyTo(imageHolder, imageView, tag)\n            if (imageView != null) {\n                if (imageSet) {\n                    imageView.visibility = View.VISIBLE\n                } else {\n                    imageView.visibility = View.INVISIBLE\n                }\n            }\n        }\n\n        /**\n         * a small static helper to set the image from the imageHolder nullSave to the imageView and hide the view if no image was set\n         */\n        @JvmOverloads\n        fun applyToOrSetGone(imageHolder: ImageHolder, imageView: ImageView?, tag: String? = null) {\n            val imageSet = applyTo(imageHolder, imageView, tag)\n            if (imageView != null) {\n                if (imageSet) {\n                    imageView.visibility = View.VISIBLE\n                } else {\n                    imageView.visibility = View.GONE\n                }\n            }\n        }\n\n        /**\n         * a small static helper which catches nulls for us\n         */\n        fun decideIcon(imageHolder: ImageHolder?, ctx: Context, iconColor: ColorStateList, tint: Boolean, paddingDp: Int = 1): Drawable? {\n            return imageHolder?.decideIcon(ctx, iconColor, tint, paddingDp)\n        }\n\n        /**\n         * decides which icon to apply or hide this view\n         */\n        fun applyDecidedIconOrSetGone(imageHolder: ImageHolder?, imageView: ImageView?, iconColor: ColorStateList, tint: Boolean, paddingDp: Int = 1) {\n            if (imageHolder != null && imageView != null) {\n                val drawable = decideIcon(imageHolder, imageView.context, iconColor, tint, paddingDp)\n                when {\n                    drawable != null -> {\n                        imageView.setImageDrawable(drawable)\n                        imageView.visibility = View.VISIBLE\n                    }\n                    imageHolder.bitmap != null -> {\n                        imageView.setImageBitmap(imageHolder.bitmap)\n                        imageView.visibility = View.VISIBLE\n                    }\n                    else -> imageView.visibility = View.GONE\n                }\n            } else if (imageView != null) {\n                imageView.visibility = View.GONE\n            }\n        }\n\n        /**\n         * a small static helper to set a multi state drawable on a view\n         */\n        fun applyMultiIconTo(icon: Drawable?, selectedIcon: Drawable?, iconColor: ColorStateList, tinted: Boolean, imageView: ImageView) {\n            //if we have an icon then we want to set it\n            if (icon != null) {\n                //if we got a different color for the selectedIcon we need a StateList\n                if (selectedIcon != null) {\n                    if (tinted) {\n                        imageView.setImageDrawable(FixStateListDrawable(icon, selectedIcon, iconColor))\n                    } else {\n                        imageView.setImageDrawable(getIconStateList(icon, selectedIcon))\n                    }\n                } else if (tinted) {\n                    imageView.setImageDrawable(FixStateListDrawable(icon, iconColor))\n                } else {\n                    imageView.setImageDrawable(icon)\n                }\n                //make sure we display the icon\n                imageView.visibility = View.VISIBLE\n            } else {\n                //hide the icon\n                imageView.visibility = View.GONE\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/holder/StringHolder.kt",
    "content": "package com.mikepenz.materialdrawer.holder\n\nimport android.content.Context\nimport android.view.View\nimport android.widget.TextView\nimport androidx.annotation.StringRes\n\n/**\n * Defines a custom holder class to support providing strings either as string or resource. Does not require a [Context] and will resolve the value when applying.\n */\nopen class StringHolder {\n    /** Defines the string text */\n    var textString: CharSequence? = null\n        internal set\n    /** Defines the string resource */\n    var textRes = -1\n        internal set\n\n    constructor(text: CharSequence?) {\n        this.textString = text\n    }\n\n    constructor(@StringRes textRes: Int) {\n        this.textRes = textRes\n    }\n\n    /**\n     * Applies the text to a [TextView]\n     */\n    open fun applyTo(textView: TextView?) {\n        when {\n            textString != null -> textView?.text = textString\n            textRes != -1 -> textView?.setText(textRes)\n            else -> textView?.text = \"\"\n        }\n    }\n\n    /**\n     * Applies the [TextView] if no text given, hide the textView\n     */\n    open fun applyToOrHide(textView: TextView?): Boolean {\n        textView ?: return false\n        return when {\n            textString != null -> {\n                textView.text = textString\n                textView.visibility = View.VISIBLE\n                true\n            }\n            textRes != -1 -> {\n                textView.setText(textRes)\n                textView.visibility = View.VISIBLE\n                true\n            }\n            else -> {\n                textView.visibility = View.GONE\n                false\n            }\n        }\n    }\n\n    /**\n     * Returns the text as [String]\n     */\n    open fun getText(ctx: Context): String? {\n        if (textString != null) {\n            return textString.toString()\n        } else if (textRes != -1) {\n            return ctx.getString(textRes)\n        }\n        return null\n    }\n\n    companion object {\n        /**\n         * Helper to apply the text to a [TextView]\n         */\n        fun applyTo(text: StringHolder?, textView: TextView?) {\n            text?.applyTo(textView)\n        }\n\n        /**\n         * Helper to apply the text to a [TextView] or hide if null\n         */\n        fun applyToOrHide(text: StringHolder?, textView: TextView?): Boolean {\n            return if (text != null) {\n                text.applyToOrHide(textView)\n            } else {\n                textView?.visibility = View.GONE\n                false\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/interfaces/ICrossfader.kt",
    "content": "package com.mikepenz.materialdrawer.interfaces\n\n/**\n * Helper interface to allow providing crossfade functionality with different implementations to the drawer\n */\ninterface ICrossfader {\n\n    /**\n     * returns true if currently crossfaded\n     */\n    val isCrossfaded: Boolean\n\n    /**\n     * allows to toggle the crossfade state\n     */\n    fun crossfade()\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/interfaces/OnCheckedChangeListener.kt",
    "content": "package com.mikepenz.materialdrawer.interfaces\n\nimport android.widget.CompoundButton\n\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\n\n/**\n * Interface definition for a callback to be invoked when the checked state\n * of a compound button changed.\n */\ninterface OnCheckedChangeListener {\n    /**\n     * Called when the checked state of a compound button has changed.\n     */\n    fun onCheckedChanged(drawerItem: IDrawerItem<*>, buttonView: CompoundButton, isChecked: Boolean)\n}"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/interfaces/OnPostBindViewListener.kt",
    "content": "package com.mikepenz.materialdrawer.interfaces\n\nimport android.view.View\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\n\n/**\n * Defines the listener fired after binding a view\n */\ninterface OnPostBindViewListener {\n    /**\n     * allows you to hook in the BindView method and modify the view after binding\n     */\n    fun onBindView(drawerItem: IDrawerItem<*>, view: View)\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractBadgeableDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.view.View\nimport android.widget.TextView\nimport androidx.annotation.LayoutRes\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.holder.BadgeStyle\nimport com.mikepenz.materialdrawer.holder.StringHolder\nimport com.mikepenz.materialdrawer.model.interfaces.ColorfulBadgeable\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\n\n/**\n * An abstract [IDrawerItem] implementation describing an element which supports badges\n */\nabstract class AbstractBadgeableDrawerItem<Item : AbstractBadgeableDrawerItem<Item>> : BaseDescribeableDrawerItem<Item, AbstractBadgeableDrawerItem.ViewHolder>(), ColorfulBadgeable {\n    override var badge: StringHolder? = null\n    override var badgeStyle: BadgeStyle? = BadgeStyle()\n\n    override/*\"PRIMARY_ITEM\"*/ val type: Int\n        get() = R.id.material_drawer_item_primary\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = R.layout.material_drawer_item_primary\n\n    override fun bindView(holder: ViewHolder, payloads: List<Any>) {\n        super.bindView(holder, payloads)\n\n        val ctx = holder.itemView.context\n        //bind the basic view parts\n        bindViewHelper(holder)\n\n        //set the text for the badge or hide\n        val badgeVisible = StringHolder.applyToOrHide(badge, holder.badge)\n        //style the badge if it is visible\n        if (badgeVisible) {\n            badgeStyle?.style(holder.badge, getColor(ctx))\n            holder.badge.visibility = View.VISIBLE\n        } else {\n            holder.badge.visibility = View.GONE\n        }\n\n        //define the typeface for our textViews\n        if (typeface != null) {\n            holder.badge.typeface = typeface\n        }\n\n        //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)\n        onPostBindView(this, holder.itemView)\n    }\n\n    override fun getViewHolder(v: View): ViewHolder {\n        return ViewHolder(v)\n    }\n\n    open class ViewHolder(view: View) : BaseViewHolder(view) {\n        internal val badge: TextView = view.findViewById(R.id.material_drawer_badge)\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.content.Context\nimport android.content.res.ColorStateList\nimport android.graphics.Typeface\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.annotation.CallSuper\nimport androidx.recyclerview.widget.RecyclerView\nimport com.google.android.material.shape.ShapeAppearanceModel\nimport com.mikepenz.fastadapter.IItemVHFactory\nimport com.mikepenz.fastadapter.IParentItem\nimport com.mikepenz.fastadapter.ISubItem\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.holder.ColorHolder\nimport com.mikepenz.materialdrawer.interfaces.OnPostBindViewListener\nimport com.mikepenz.materialdrawer.model.interfaces.*\nimport com.mikepenz.materialdrawer.util.getPrimaryDrawerTextColor\nimport com.mikepenz.materialdrawer.util.getSelectedColor\nimport com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView.Companion.DEFAULT_SELECTED_BACKGROUND_ANIMATED\n\n/**\n * The base abstract [IDrawerItem] implementation describing a drawerItem with the general functionality\n */\nabstract class AbstractDrawerItem<T, VH : RecyclerView.ViewHolder> : IDrawerItem<VH>, Selectable, SelectableColor, Tagable, Typefaceable {\n    // the identifier for this item\n    override var identifier: Long = -1\n\n    // the tag for this item\n    override var tag: Any? = null\n\n    // defines if this item is enabled\n    override var isEnabled = true\n\n    /** The factory to use for creating this item, this does not have to be provided if the IItemFactory is implemented by this item too */\n    override val factory: IItemVHFactory<VH>? = null\n\n    // defines if the item is selected\n    override var isSelected = false\n\n    // defines if this item is selectable\n    override var isSelectable = true\n\n    // defines if the item's background' change should be animated when it is (de)selected\n    var isSelectedBackgroundAnimated = DEFAULT_SELECTED_BACKGROUND_ANIMATED\n\n    // defines the content descripton of items\n    var contentDescription: String? = null\n\n    override var selectedColor: ColorHolder? = null\n    override var typeface: Typeface? = null\n\n    open var onDrawerItemClickListener: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)? = null\n\n    var onPostBindViewListener: OnPostBindViewListener? = null\n        protected set\n\n    // the parent of this item\n    override var parent: IParentItem<*>? = null\n\n    // the subItems to expand for this item\n    private var _subItems: MutableList<ISubItem<*>> = mutableListOf()\n    override var subItems: MutableList<ISubItem<*>>\n        get() = _subItems\n        set(subItems) {\n            this._subItems = subItems\n\n            subItems.let {\n                for (subItem in it) {\n                    subItem.parent = this\n                }\n            }\n        }\n\n    //if the this item is currently expanded\n    override var isExpanded = false\n\n    /**\n     * overwrite this method and return true if the item should auto expand on click, false if you want to disable this\n     *\n     * @return true if this item should auto expand in the adapter\n     */\n    override val isAutoExpanding: Boolean\n        get() = true\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    open fun withContentDescription(contentDescription: String?): T {\n        this.contentDescription = contentDescription\n        return this as T\n    }\n\n    /**\n     * set if this item is selectable\n     *\n     * @param selectedBackgroundAnimated true if this item's background should fade when it is (de) selected\n     * @return\n     */\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withSelectedBackgroundAnimated(selectedBackgroundAnimated: Boolean): T {\n        this.isSelectedBackgroundAnimated = selectedBackgroundAnimated\n        return this as T\n    }\n\n    /**\n     * this listener is called when an item is clicked in the drawer.\n     * WARNING: don't overwrite this in the Switch / Toggle drawerItems if you want the toggle / switch to be selected\n     * if the item is clicked and the item is not selectable.\n     *\n     * @param onDrawerItemClickListener\n     * @return\n     */\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    open fun withOnDrawerItemClickListener(onDrawerItemClickListener: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)? = null): T {\n        this.onDrawerItemClickListener = onDrawerItemClickListener\n        return this as T\n    }\n\n    /**\n     * add this listener and hook in if you want to modify a drawerItems view without creating a custom drawer item\n     *\n     * @param onPostBindViewListener\n     * @return\n     */\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withPostOnBindViewListener(onPostBindViewListener: OnPostBindViewListener): T {\n        this.onPostBindViewListener = onPostBindViewListener\n        return this as T\n    }\n\n    /**\n     * is called after bindView to allow some post creation setps\n     *\n     * @param drawerItem the drawerItem which is bound to the view\n     * @param view       the currently view which will be bound\n     */\n    protected fun onPostBindView(drawerItem: IDrawerItem<*>, view: View) {\n        onPostBindViewListener?.onBindView(drawerItem, view)\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withParent(parent: IParentItem<*>): T {\n        this.parent = parent\n        return this as T\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withSubItems(subItems: MutableList<ISubItem<*>>): T {\n        this.subItems = subItems\n        return this as T\n    }\n\n    /**\n     * an array of subItems\n     * **WARNING** Make sure the subItems provided already have identifiers\n     *\n     * @param subItems\n     * @return\n     */\n    fun <SubType : ISubItem<*>> setSubItems(vararg subItems: SubType) {\n        val tempSubItems: MutableList<ISubItem<*>> = mutableListOf()\n        subItems.forEach {\n            tempSubItems.add(it)\n        }\n        this.subItems = tempSubItems\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withSubItems(vararg subItems: ISubItem<*>): T {\n        setSubItems(*subItems)\n        return this as T\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withSetExpanded(expanded: Boolean): T {\n        isExpanded = expanded\n        return this as T\n    }\n\n    /**\n     * generates a view by the defined LayoutRes\n     *\n     * @param ctx\n     * @return\n     */\n    override fun generateView(ctx: Context): View {\n        val viewHolder = getViewHolder(LayoutInflater.from(ctx).inflate(layoutRes, null, false))\n        bindView(viewHolder, mutableListOf())\n        return viewHolder.itemView\n    }\n\n    /**\n     * generates a view by the defined LayoutRes and pass the LayoutParams from the parent\n     *\n     * @param ctx\n     * @param parent\n     * @return\n     */\n    override fun generateView(ctx: Context, parent: ViewGroup): View {\n        val viewHolder = getViewHolder(LayoutInflater.from(ctx).inflate(layoutRes, parent, false))\n        bindView(viewHolder, mutableListOf())\n        return viewHolder.itemView\n    }\n\n    @CallSuper\n    override fun bindView(holder: VH, payloads: List<Any>) {\n        contentDescription?.let {\n            holder.itemView.contentDescription = it\n        }\n        holder.itemView.setTag(com.mikepenz.materialdrawer.R.id.material_drawer_item, this)\n    }\n\n    /**\n     * called when the view is unbound\n     *\n     * @param holder\n     */\n    override fun unbindView(holder: VH) {\n        holder.itemView.clearAnimation()\n    }\n\n    /**\n     * View got attached to the window\n     *\n     * @param holder\n     */\n    override fun attachToWindow(holder: VH) {\n    }\n\n    /**\n     * View got detached from the window\n     *\n     * @param holder\n     */\n    override fun detachFromWindow(holder: VH) {\n    }\n\n    /**\n     * is called when the ViewHolder is in a transient state. return true if you want to reuse\n     * that view anyways\n     *\n     * @param holder the viewHolder for the view which failed to recycle\n     * @return true if we want to recycle anyways (false - it get's destroyed)\n     */\n    override fun failedToRecycle(holder: VH): Boolean {\n        return false\n    }\n\n    /**\n     * This method returns the ViewHolder for our item, using the provided View.\n     *\n     * @param parent\n     * @return the ViewHolder for this Item\n     */\n    override fun getViewHolder(parent: ViewGroup): VH {\n        return getViewHolder(LayoutInflater.from(parent.context).inflate(layoutRes, parent, false))\n    }\n\n    /**\n     * This method returns the ViewHolder for our item, using the provided View.\n     *\n     * @param v\n     * @return the ViewHolder for this Item\n     */\n    abstract fun getViewHolder(v: View): VH\n\n    /**\n     * If this item equals to the given identifier\n     *\n     * @param id\n     * @return\n     */\n    override fun equals(id: Long): Boolean {\n        return id == identifier\n    }\n\n    override fun equals(id: Int): Boolean {\n        return id.toLong() == identifier\n    }\n\n    /**\n     * If this item equals to the given object\n     *\n     * @param other\n     * @return\n     */\n    override fun equals(other: Any?): Boolean {\n        if (this === other) return true\n        if (other == null || javaClass != other.javaClass) return false\n        val that = other as AbstractDrawerItem<*, *>?\n        return identifier == that?.identifier\n    }\n\n    /**\n     * the hashCode implementation\n     *\n     * @return\n     */\n    override fun hashCode(): Int {\n        return java.lang.Long.valueOf(identifier).hashCode()\n    }\n\n    /**\n     * helper method to decide for the correct color\n     *\n     * @param ctx\n     * @return\n     */\n    protected fun getSelectedColor(ctx: Context): Int {\n        return ctx.getSelectedColor()\n    }\n\n    /**\n     * helper method to decide for the correct color\n     *\n     * @param ctx\n     * @return\n     */\n    protected open fun getColor(ctx: Context): ColorStateList {\n        return ctx.getPrimaryDrawerTextColor()\n    }\n\n    /**\n     * helper method to decide for the ShapeAppearanceModel used for the drawable's corners\n     *\n     * @param ctx\n     * @return\n     */\n    protected open fun getShapeAppearanceModel(ctx: Context): ShapeAppearanceModel {\n        val cornerRadius = ctx.resources.getDimensionPixelSize(R.dimen.material_drawer_item_corner_radius)\n        return ShapeAppearanceModel().withCornerSize(cornerRadius.toFloat())\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractSwitchableDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.view.View\nimport android.widget.CompoundButton\nimport androidx.annotation.LayoutRes\nimport androidx.appcompat.widget.SwitchCompat\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.interfaces.OnCheckedChangeListener\nimport com.mikepenz.materialdrawer.model.interfaces.Checkable\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\n\n/**\n * An abstract [IDrawerItem] implementation describing a drawerItem with support for a switch\n */\nabstract class AbstractSwitchableDrawerItem<Item : AbstractSwitchableDrawerItem<Item>> : Checkable, BaseDescribeableDrawerItem<Item, AbstractSwitchableDrawerItem.ViewHolder>() {\n\n    var isSwitchEnabled = true\n    override var isChecked = false\n    var onCheckedChangeListener: OnCheckedChangeListener? = null\n\n    override val type: Int\n        get() = R.id.material_drawer_item_primary_switch\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = R.layout.material_drawer_item_switch\n\n    private val checkedChangeListener = object : CompoundButton.OnCheckedChangeListener {\n        override fun onCheckedChanged(buttonView: CompoundButton, ic: Boolean) {\n            if (isEnabled) {\n                isChecked = ic\n                onCheckedChangeListener?.onCheckedChanged(this@AbstractSwitchableDrawerItem, buttonView, ic)\n            } else {\n                buttonView.setOnCheckedChangeListener(null)\n                buttonView.isChecked = !ic\n                buttonView.setOnCheckedChangeListener(this)\n            }\n        }\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withSwitchEnabled(switchEnabled: Boolean): Item {\n        this.isSwitchEnabled = switchEnabled\n        return this as Item\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withOnCheckedChangeListener(onCheckedChangeListener: OnCheckedChangeListener): Item {\n        this.onCheckedChangeListener = onCheckedChangeListener\n        return this as Item\n    }\n\n    override fun bindView(holder: ViewHolder, payloads: List<Any>) {\n        super.bindView(holder, payloads)\n\n        //bind the basic view parts\n        bindViewHelper(holder)\n\n        //handle the switch\n        holder.switchView.setOnCheckedChangeListener(null)\n        holder.switchView.isChecked = isChecked\n        holder.switchView.setOnCheckedChangeListener(checkedChangeListener)\n        holder.switchView.isEnabled = isSwitchEnabled\n\n        //add a onDrawerItemClickListener here to be able to check / uncheck if the drawerItem can't be selected\n        withOnDrawerItemClickListener { v, item, position ->\n            if (!isSelectable) {\n                isChecked = !isChecked\n                holder.switchView.isChecked = isChecked\n            }\n\n            false\n        }\n\n        //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)\n        onPostBindView(this, holder.itemView)\n    }\n\n    override fun getViewHolder(v: View): ViewHolder {\n        return ViewHolder(v)\n    }\n\n    open class ViewHolder internal constructor(view: View) : BaseViewHolder(view) {\n        internal val switchView: SwitchCompat = view.findViewById<SwitchCompat>(R.id.material_drawer_switch)\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/AbstractToggleableDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.view.View\nimport android.widget.CompoundButton\nimport android.widget.ToggleButton\nimport androidx.annotation.LayoutRes\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.interfaces.OnCheckedChangeListener\nimport com.mikepenz.materialdrawer.model.interfaces.Checkable\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\n\n/**\n * An abstract [IDrawerItem] implementation describing a drawerItem with support for a toggle\n */\nopen class AbstractToggleableDrawerItem<Item : AbstractToggleableDrawerItem<Item>> : Checkable, BaseDescribeableDrawerItem<Item, AbstractToggleableDrawerItem.ViewHolder>() {\n\n    var isToggleEnabled = true\n    override var isChecked = false\n    var onCheckedChangeListener: OnCheckedChangeListener? = null\n\n    override val type: Int\n        get() = R.id.material_drawer_item_primary_toggle\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = R.layout.material_drawer_item_toggle\n\n    private val checkedChangeListener = object : CompoundButton.OnCheckedChangeListener {\n        override fun onCheckedChanged(buttonView: CompoundButton, ic: Boolean) {\n            if (isEnabled) {\n                isChecked = ic\n                onCheckedChangeListener?.onCheckedChanged(this@AbstractToggleableDrawerItem, buttonView, ic)\n            } else {\n                buttonView.setOnCheckedChangeListener(null)\n                buttonView.isChecked = !ic\n                buttonView.setOnCheckedChangeListener(this)\n            }\n        }\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withToggleEnabled(toggleEnabled: Boolean): Item {\n        this.isToggleEnabled = toggleEnabled\n        return this as Item\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withOnCheckedChangeListener(onCheckedChangeListener: OnCheckedChangeListener): Item {\n        this.onCheckedChangeListener = onCheckedChangeListener\n        return this as Item\n    }\n\n    override fun bindView(holder: ViewHolder, payloads: List<Any>) {\n        super.bindView(holder, payloads)\n\n        //bind the basic view parts\n        bindViewHelper(holder)\n\n        //handle the toggle\n        holder.toggle.setOnCheckedChangeListener(null)\n        holder.toggle.isChecked = isChecked\n        holder.toggle.setOnCheckedChangeListener(checkedChangeListener)\n        holder.toggle.isEnabled = isToggleEnabled\n\n        //add a onDrawerItemClickListener here to be able to check / uncheck if the drawerItem can't be selected\n        withOnDrawerItemClickListener { v, item, position ->\n            if (!isSelectable) {\n                isChecked = !isChecked\n                holder.toggle.isChecked = isChecked\n            }\n\n            false\n        }\n\n        //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)\n        onPostBindView(this, holder.itemView)\n    }\n\n    override fun getViewHolder(v: View): ViewHolder {\n        return ViewHolder(v)\n    }\n\n    open class ViewHolder internal constructor(view: View) : BaseViewHolder(view) {\n        internal val toggle: ToggleButton = view.findViewById<ToggleButton>(R.id.material_drawer_toggle)\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/BaseDescribeableDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.content.Context\nimport android.content.res.ColorStateList\nimport android.view.View\nimport androidx.core.view.isVisible\nimport androidx.core.view.updatePadding\nimport com.google.android.material.shape.ShapeAppearanceModel\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.holder.ImageHolder\nimport com.mikepenz.materialdrawer.holder.StringHolder\nimport com.mikepenz.materialdrawer.model.interfaces.Describable\nimport com.mikepenz.materialdrawer.model.interfaces.DescribableColor\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.util.DrawerImageLoader\nimport com.mikepenz.materialdrawer.util.getSecondaryDrawerTextColor\nimport com.mikepenz.materialdrawer.util.setDrawerVerticalPadding\nimport com.mikepenz.materialdrawer.util.themeDrawerItem\n\n/**\n * An abstract [IDrawerItem] implementation describing a drawerItem with support for a description\n */\nabstract class BaseDescribeableDrawerItem<T, VH : BaseViewHolder> : BaseDrawerItem<T, VH>(), Describable, DescribableColor {\n    override var description: StringHolder? = null\n    override var descriptionTextColor: ColorStateList? = null\n\n    /**\n     * a helper method to have the logic for all secondaryDrawerItems only once\n     *\n     * @param viewHolder\n     */\n    protected fun bindViewHelper(viewHolder: BaseViewHolder) {\n        val ctx = viewHolder.itemView.context\n\n        //set the identifier from the drawerItem here. It can be used to run tests\n        viewHolder.itemView.id = hashCode()\n\n        //get the correct color for the background\n        val selectedColor = this.selectedColor?.color(ctx) ?: getSelectedColor(ctx)\n        //get the correct color for the text\n\n        val textColor = this.textColor ?: getColor(ctx)\n        val textColorSecondary = this.descriptionTextColor ?: ctx.getSecondaryDrawerTextColor()\n        //get the correct color for the icon\n        val iconColor = this.iconColor ?: getIconColor(ctx)\n        val shapeAppearanceModel = getShapeAppearanceModel(ctx)\n\n        //set the background for the item\n        applyDrawerItemTheme(ctx, viewHolder.view, selectedColor, isSelectedBackgroundAnimated, shapeAppearanceModel)\n        //set the text for the name\n        StringHolder.applyTo(this.name, viewHolder.name)\n        //set the text for the description or hide\n        StringHolder.applyToOrHide(this.description, viewHolder.description)\n\n        //set the colors for textViews\n        viewHolder.name.setTextColor(textColor)\n        //set the description text color\n        viewHolder.description.setTextColor(textColorSecondary)\n\n        //define the typeface for our textViews\n        if (typeface != null) {\n            viewHolder.name.typeface = typeface\n            viewHolder.description.typeface = typeface\n        }\n\n        // check if we should load from a url, false if normal icon\n        val loaded = icon?.uri?.let {\n            DrawerImageLoader.instance.setImage(viewHolder.icon, it, DrawerImageLoader.Tags.PRIMARY_ITEM.name)\n        } ?: false\n\n        if (!loaded) {\n            // get the drawables for our icon and set it\n            val icon = ImageHolder.decideIcon(icon, ctx, iconColor, isIconTinted, 1)\n            val selectedIcon = ImageHolder.decideIcon(selectedIcon, ctx, iconColor, isIconTinted, 1)\n            ImageHolder.applyMultiIconTo(icon, selectedIcon, iconColor, isIconTinted, viewHolder.icon)\n        }\n\n        if (viewHolder.icon.isVisible) {\n            viewHolder.name.updatePadding(left = 0)\n            viewHolder.description.updatePadding(left = 0)\n        } else {\n            viewHolder.name.updatePadding(left = ctx.resources.getDimensionPixelSize(R.dimen.material_drawer_item_primary_icon_padding_left))\n            viewHolder.description.updatePadding(left = ctx.resources.getDimensionPixelSize(R.dimen.material_drawer_item_primary_icon_padding_left))\n        }\n\n        //for android API 17 --> Padding not applied via xml\n        viewHolder.view.setDrawerVerticalPadding(level)\n\n        //set the item selected if it is\n        viewHolder.itemView.isSelected = isSelected\n        viewHolder.name.isSelected = isSelected\n        viewHolder.description.isSelected = isSelected\n        viewHolder.icon.isSelected = isSelected\n\n        //set the item enabled if it is\n        viewHolder.itemView.isEnabled = isEnabled\n        viewHolder.name.isEnabled = isEnabled\n        viewHolder.description.isEnabled = isEnabled\n        viewHolder.icon.isEnabled = isEnabled\n    }\n\n    override fun unbindView(holder: VH) {\n        super.unbindView(holder)\n\n        // reset image loading for the item\n        DrawerImageLoader.instance.cancelImage(holder.icon)\n        holder.icon.setImageBitmap(null)\n    }\n\n    /**\n     * will apply and theme the drawer item using the standard logic, overwrite this in your custom item to redefine the algorithm to do so\n     */\n    protected open fun applyDrawerItemTheme(ctx: Context, view: View, selected_color: Int, animate: Boolean, shapeAppearanceModel: ShapeAppearanceModel) {\n        themeDrawerItem(ctx, view, selected_color, animate, shapeAppearanceModel, isSelected = isSelected)\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/BaseDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.content.Context\nimport android.content.res.ColorStateList\nimport androidx.recyclerview.widget.RecyclerView\nimport com.mikepenz.materialdrawer.holder.ImageHolder\nimport com.mikepenz.materialdrawer.holder.StringHolder\nimport com.mikepenz.materialdrawer.model.interfaces.*\nimport com.mikepenz.materialdrawer.util.getPrimaryDrawerIconColor\n\n/**\n * An abstract [IDrawerItem] implementation providing the base properties with their default value\n */\nabstract class BaseDrawerItem<T, VH : RecyclerView.ViewHolder> : AbstractDrawerItem<T, VH>(), Nameable, NameableColor, Iconable, SelectIconable, Tagable {\n    override var icon: ImageHolder? = null\n    override var iconColor: ColorStateList? = null\n    override var selectedIcon: ImageHolder? = null\n    override var name: StringHolder? = null\n    override var textColor: ColorStateList? = null\n    override var isIconTinted = false\n\n    /** Allows to set the 'level' of this item */\n    var level = 1\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withLevel(level: Int): T {\n        this.level = level\n        return this as T\n    }\n\n    /**\n     * helper method to decide for the correct color\n     *\n     * @param ctx\n     * @return\n     */\n    open fun getIconColor(ctx: Context): ColorStateList {\n        return ctx.getPrimaryDrawerIconColor()\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/BaseViewHolder.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.view.View\nimport android.widget.ImageView\nimport android.widget.TextView\nimport androidx.recyclerview.widget.RecyclerView\nimport com.mikepenz.materialdrawer.R\n\n/**\n *the base [RecyclerView.ViewHolder] for drawerItems\n */\nopen class BaseViewHolder(internal var view: View) : RecyclerView.ViewHolder(view) {\n    internal var icon: ImageView = view.findViewById(R.id.material_drawer_icon)\n    internal var name: TextView = view.findViewById(R.id.material_drawer_name)\n    internal var description: TextView = view.findViewById(R.id.material_drawer_description)\n}"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/ContainerDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.LinearLayout\nimport androidx.annotation.LayoutRes\nimport androidx.recyclerview.widget.RecyclerView\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.holder.DimenHolder\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.util.getDividerColor\n\n/**\n * Describes a [IDrawerItem] acting as a container for generic views\n */\nopen class ContainerDrawerItem : AbstractDrawerItem<ContainerDrawerItem, ContainerDrawerItem.ViewHolder>() {\n\n    var height: DimenHolder? = null\n    var view: View? = null\n    var viewPosition = Position.TOP\n    var divider = true\n\n    override val type: Int\n        get() = R.id.material_drawer_item_container\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = R.layout.material_drawer_item_container\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withHeight(height: DimenHolder?): ContainerDrawerItem {\n        this.height = height\n        return this\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withView(view: View): ContainerDrawerItem {\n        this.view = view\n        return this\n    }\n\n    /**\n     * Defines the position for the divider\n     */\n    enum class Position {\n        TOP,\n        BOTTOM,\n        NONE\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withViewPosition(position: Position): ContainerDrawerItem {\n        this.viewPosition = position\n        return this\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withDivider(_divider: Boolean): ContainerDrawerItem {\n        this.divider = _divider\n        return this\n    }\n\n    override fun bindView(holder: ViewHolder, payloads: List<Any>) {\n        super.bindView(holder, payloads)\n\n        val ctx = holder.itemView.context\n\n        //set the identifier from the drawerItem here. It can be used to run tests\n        holder.itemView.id = hashCode()\n\n        //define how the divider should look like\n        holder.view.isEnabled = false\n\n        //make sure our view is not used in another parent\n        view?.parent?.let {\n            (it as ViewGroup).removeView(view)\n        }\n\n        //set the height\n        var height = ViewGroup.LayoutParams.WRAP_CONTENT\n\n        this.height?.let {\n            val lp = holder.view.layoutParams as RecyclerView.LayoutParams\n            height = it.asPixel(ctx)\n            lp.height = height\n            holder.view.layoutParams = lp\n        }\n\n        //make sure the header view is empty\n        (holder.view as ViewGroup).removeAllViews()\n\n        var dividerHeight = 0\n        if (divider) {\n            dividerHeight = ctx.resources.getDimensionPixelSize(R.dimen.material_drawer_container_divider)\n        }\n\n        val divider = View(ctx)\n        divider.minimumHeight = dividerHeight\n        divider.setBackgroundColor(ctx.getDividerColor())\n\n        val dividerParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dividerHeight)\n        val viewParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, if (this.height != null) height - dividerHeight else height)\n\n        //depending on the position we add the view\n        when (viewPosition) {\n            Position.TOP -> {\n                holder.view.addView(view, viewParams)\n                dividerParams.bottomMargin = ctx.resources.getDimensionPixelSize(R.dimen.material_drawer_padding)\n                holder.view.addView(divider, dividerParams)\n            }\n            Position.BOTTOM -> {\n                dividerParams.topMargin = ctx.resources.getDimensionPixelSize(R.dimen.material_drawer_padding)\n                holder.view.addView(divider, dividerParams)\n                holder.view.addView(view, viewParams)\n            }\n            else -> holder.view.addView(view, viewParams)\n        }\n\n        //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)\n        onPostBindView(this, holder.itemView)\n    }\n\n    override fun getViewHolder(v: View): ViewHolder {\n        return ViewHolder(v)\n    }\n\n    class ViewHolder internal constructor(internal val view: View) : RecyclerView.ViewHolder(view)\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/DividerDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.view.View\nimport androidx.annotation.LayoutRes\nimport androidx.core.view.ViewCompat\nimport androidx.recyclerview.widget.RecyclerView\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.util.getDividerColor\n\n/**\n * Describes a [IDrawerItem] acting as a divider in between items\n */\nopen class DividerDrawerItem : AbstractDrawerItem<DividerDrawerItem, DividerDrawerItem.ViewHolder>() {\n    override val type: Int\n        get() = R.id.material_drawer_item_divider\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = R.layout.material_drawer_item_divider\n\n    override fun bindView(holder: ViewHolder, payloads: List<Any>) {\n        super.bindView(holder, payloads)\n\n        val ctx = holder.itemView.context\n\n        //set the identifier from the drawerItem here. It can be used to run tests\n        holder.itemView.id = hashCode()\n\n        //define how the divider should look like\n        holder.itemView.isClickable = false\n        holder.itemView.isEnabled = false\n        holder.itemView.minimumHeight = 1\n        ViewCompat.setImportantForAccessibility(holder.itemView, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_NO)\n\n        //set the color for the divider\n        holder.itemView.setBackgroundColor(ctx.getDividerColor())\n\n        //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)\n        onPostBindView(this, holder.itemView)\n    }\n\n    override fun getViewHolder(v: View): ViewHolder {\n        return ViewHolder(v)\n    }\n\n    class ViewHolder internal constructor(view: View) : RecyclerView.ViewHolder(view)\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/ExpandableBadgeDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.content.res.ColorStateList\nimport android.os.Build\nimport android.view.View\nimport android.widget.ImageView\nimport android.widget.TextView\nimport androidx.annotation.LayoutRes\nimport androidx.appcompat.content.res.AppCompatResources\nimport androidx.core.view.ViewCompat\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.holder.BadgeStyle\nimport com.mikepenz.materialdrawer.holder.ColorHolder\nimport com.mikepenz.materialdrawer.holder.StringHolder\nimport com.mikepenz.materialdrawer.model.interfaces.ColorfulBadgeable\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.util.FixStateListDrawable\n\n/**\n * Describes a [IDrawerItem] supporting child items (an expandable hierarchy) and badges.\n */\nopen class ExpandableBadgeDrawerItem : BaseDescribeableDrawerItem<ExpandableBadgeDrawerItem, ExpandableBadgeDrawerItem.ViewHolder>(), ColorfulBadgeable {\n\n    private var mOnDrawerItemClickListener: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)? = null\n    var arrowColor: ColorHolder? = null\n    var arrowRotationAngleStart = 0\n    var arrowRotationAngleEnd = 180\n    override var badge: StringHolder? = null\n    override var badgeStyle: BadgeStyle? = BadgeStyle()\n\n    override val type: Int\n        get() = R.id.material_drawer_item_expandable_badge\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = R.layout.material_drawer_item_expandable_badge\n\n    /**\n     * our internal onDrawerItemClickListener which will handle the arrow animation\n     */\n    override var onDrawerItemClickListener: ((View?, IDrawerItem<*>, Int) -> Boolean)? = { view, drawerItem, position ->\n        if (drawerItem is AbstractDrawerItem<*, *> && drawerItem.isEnabled) {\n            if (drawerItem.subItems != null) {\n                view?.let {\n                    if (drawerItem.isExpanded) {\n                        ViewCompat.animate(view.findViewById(R.id.material_drawer_arrow)).rotation(this@ExpandableBadgeDrawerItem.arrowRotationAngleEnd.toFloat()).start()\n                    } else {\n                        ViewCompat.animate(view.findViewById(R.id.material_drawer_arrow))\n                                .rotation(this@ExpandableBadgeDrawerItem.arrowRotationAngleStart.toFloat())\n                                .start()\n                    }\n                }\n            }\n        }\n        mOnDrawerItemClickListener?.invoke(view, drawerItem, position) ?: false\n    }\n\n    override fun bindView(holder: ExpandableBadgeDrawerItem.ViewHolder, payloads: List<Any>) {\n        super.bindView(holder, payloads)\n\n        val ctx = holder.itemView.context\n        //bind the basic view parts\n        bindViewHelper(holder)\n\n        //set the text for the badge or hide\n        val badgeVisible = StringHolder.applyToOrHide(badge, holder.badge)\n        //style the badge if it is visible\n        if (badgeVisible) {\n            badgeStyle?.style(holder.badge, getColor(ctx))\n            holder.badge.visibility = View.VISIBLE\n        } else {\n            holder.badge.visibility = View.GONE\n        }\n\n        //define the typeface for our textViews\n        if (typeface != null) {\n            holder.badge.typeface = typeface\n        }\n\n        val arrowColor = this.arrowColor?.color(ctx)?.let { ColorStateList.valueOf(it) } ?: getIconColor(ctx)\n        when {\n            Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP -> {\n                holder.arrow.imageTintList = arrowColor\n            }\n            holder.arrow.drawable is FixStateListDrawable -> {\n                (holder.arrow.drawable as FixStateListDrawable).color = arrowColor\n            }\n            else -> {\n                holder.arrow.setImageDrawable(FixStateListDrawable(holder.arrow.drawable, arrowColor))\n            }\n        }\n\n        //make sure all animations are stopped\n        holder.arrow.clearAnimation()\n        if (!isExpanded) {\n            holder.arrow.rotation = this.arrowRotationAngleStart.toFloat()\n        } else {\n            holder.arrow.rotation = this.arrowRotationAngleEnd.toFloat()\n        }\n\n        //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)\n        onPostBindView(this, holder.itemView)\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    override fun withOnDrawerItemClickListener(onDrawerItemClickListener: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)?): ExpandableBadgeDrawerItem {\n        mOnDrawerItemClickListener = onDrawerItemClickListener\n        return this\n    }\n\n    override fun getViewHolder(v: View): ViewHolder {\n        return ViewHolder(v)\n    }\n\n    class ViewHolder(view: View) : BaseViewHolder(view) {\n        val arrow: ImageView = view.findViewById(R.id.material_drawer_arrow)\n        val badge: TextView = view.findViewById(R.id.material_drawer_badge)\n\n        init {\n            arrow.setImageDrawable(AppCompatResources.getDrawable(view.context, R.drawable.material_drawer_ico_chevron_down))\n        }\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/ExpandableDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.content.res.ColorStateList\nimport android.os.Build\nimport android.view.View\nimport android.widget.ImageView\nimport androidx.annotation.ColorInt\nimport androidx.annotation.ColorRes\nimport androidx.annotation.LayoutRes\nimport androidx.appcompat.content.res.AppCompatResources\nimport androidx.core.view.ViewCompat\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.holder.ColorHolder\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.util.FixStateListDrawable\n\n/**\n * Describes a [IDrawerItem] supporting child items.\n */\nopen class ExpandableDrawerItem : BaseDescribeableDrawerItem<ExpandableDrawerItem, ExpandableDrawerItem.ViewHolder>() {\n\n    var mOnDrawerItemClickListener: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)? = null\n    var arrowColor: ColorHolder? = null\n    var arrowRotationAngleStart = 0\n    var arrowRotationAngleEnd = 180\n\n    override val type: Int\n        get() = R.id.material_drawer_item_expandable\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = R.layout.material_drawer_item_expandable\n\n    /**\n     * our internal onDrawerItemClickListener which will handle the arrow animation\n     */\n    override var onDrawerItemClickListener: ((View?, IDrawerItem<*>, Int) -> Boolean)? = { view, drawerItem, position ->\n        if (drawerItem is AbstractDrawerItem<*, *> && drawerItem.isEnabled) {\n            view?.let {\n                if (drawerItem.subItems != null) {\n                    if (drawerItem.isExpanded) {\n                        ViewCompat.animate(view.findViewById(R.id.material_drawer_arrow)).rotation(this@ExpandableDrawerItem.arrowRotationAngleEnd.toFloat()).start()\n                    } else {\n                        ViewCompat.animate(view.findViewById(R.id.material_drawer_arrow)).rotation(this@ExpandableDrawerItem.arrowRotationAngleStart.toFloat()).start()\n                    }\n                }\n            }\n        }\n\n        mOnDrawerItemClickListener?.invoke(view, drawerItem, position) ?: false\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withArrowColor(@ColorInt arrowColor: Int): ExpandableDrawerItem {\n        this.arrowColor = ColorHolder.fromColor(arrowColor)\n        return this\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withArrowColorRes(@ColorRes arrowColorRes: Int): ExpandableDrawerItem {\n        this.arrowColor = ColorHolder.fromColorRes(arrowColorRes)\n        return this\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withArrowRotationAngleStart(angle: Int): ExpandableDrawerItem {\n        this.arrowRotationAngleStart = angle\n        return this\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withArrowRotationAngleEnd(angle: Int): ExpandableDrawerItem {\n        this.arrowRotationAngleEnd = angle\n        return this\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    override fun withOnDrawerItemClickListener(onDrawerItemClickListener: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)?): ExpandableDrawerItem {\n        mOnDrawerItemClickListener = onDrawerItemClickListener\n        return this\n    }\n\n    override fun bindView(holder: ViewHolder, payloads: List<Any>) {\n        super.bindView(holder, payloads)\n\n        val ctx = holder.itemView.context\n        //bind the basic view parts\n        bindViewHelper(holder)\n\n        val arrowColor = this.arrowColor?.color(ctx)?.let { ColorStateList.valueOf(it) } ?: getIconColor(ctx)\n        when {\n            Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP -> {\n                holder.arrow.imageTintList = arrowColor\n            }\n            holder.arrow.drawable is FixStateListDrawable -> {\n                (holder.arrow.drawable as FixStateListDrawable).color = arrowColor\n            }\n            else -> {\n                holder.arrow.setImageDrawable(FixStateListDrawable(holder.arrow.drawable, arrowColor))\n            }\n        }\n\n        //make sure all animations are stopped\n        holder.arrow.clearAnimation()\n        if (!isExpanded) {\n            holder.arrow.rotation = this.arrowRotationAngleStart.toFloat()\n        } else {\n            holder.arrow.rotation = this.arrowRotationAngleEnd.toFloat()\n        }\n\n        //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)\n        onPostBindView(this, holder.itemView)\n    }\n\n    override fun getViewHolder(v: View): ViewHolder {\n        return ViewHolder(v)\n    }\n\n    class ViewHolder(view: View) : BaseViewHolder(view) {\n        var arrow: ImageView = view.findViewById(R.id.material_drawer_arrow)\n\n        init {\n            arrow.setImageDrawable(AppCompatResources.getDrawable(view.context, R.drawable.material_drawer_ico_chevron_down))\n        }\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/MiniDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.view.View\nimport android.widget.ImageView\nimport android.widget.TextView\nimport androidx.annotation.DimenRes\nimport androidx.annotation.LayoutRes\nimport androidx.recyclerview.widget.RecyclerView\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.holder.BadgeStyle\nimport com.mikepenz.materialdrawer.holder.DimenHolder\nimport com.mikepenz.materialdrawer.holder.ImageHolder\nimport com.mikepenz.materialdrawer.holder.StringHolder\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.util.DrawerImageLoader\nimport com.mikepenz.materialdrawer.util.themeDrawerItem\n\n/**\n * Describes a [IDrawerItem] being used for the [com.mikepenz.materialdrawer.widget.MiniDrawerSliderView]\n */\nopen class MiniDrawerItem : BaseDrawerItem<MiniDrawerItem, MiniDrawerItem.ViewHolder> {\n    var badge: StringHolder? = null\n    var badgeStyle: BadgeStyle? = BadgeStyle()\n    var enableSelectedBackground = false\n    var customHeight: DimenHolder? = null\n\n    override val type: Int\n        get() = R.id.material_drawer_item_mini\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = R.layout.material_drawer_item_mini\n\n    constructor(primaryDrawerItem: PrimaryDrawerItem) {\n        this.identifier = primaryDrawerItem.identifier\n        this.tag = primaryDrawerItem.tag\n\n        this.badge = primaryDrawerItem.badge\n        this.badgeStyle = primaryDrawerItem.badgeStyle\n\n        this.isEnabled = primaryDrawerItem.isEnabled\n        this.isSelectable = primaryDrawerItem.isSelectable\n        this.isSelected = primaryDrawerItem.isSelected\n\n        this.icon = primaryDrawerItem.icon\n        this.selectedIcon = primaryDrawerItem.selectedIcon\n\n        this.isIconTinted = primaryDrawerItem.isIconTinted\n        this.selectedColor = primaryDrawerItem.selectedColor\n\n        this.iconColor = primaryDrawerItem.iconColor\n    }\n\n    constructor(secondaryDrawerItem: SecondaryDrawerItem) {\n        this.identifier = secondaryDrawerItem.identifier\n        this.tag = secondaryDrawerItem.tag\n\n        this.badge = secondaryDrawerItem.badge\n        this.badgeStyle = secondaryDrawerItem.badgeStyle\n\n        this.isEnabled = secondaryDrawerItem.isEnabled\n        this.isSelectable = secondaryDrawerItem.isSelectable\n        this.isSelected = secondaryDrawerItem.isSelected\n\n        this.icon = secondaryDrawerItem.icon\n        this.selectedIcon = secondaryDrawerItem.selectedIcon\n\n        this.isIconTinted = secondaryDrawerItem.isIconTinted\n        this.selectedColor = secondaryDrawerItem.selectedColor\n\n        this.iconColor = secondaryDrawerItem.iconColor\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withCustomHeightRes(@DimenRes customHeightRes: Int): MiniDrawerItem {\n        this.customHeight = DimenHolder.fromResource(customHeightRes)\n        return this\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withCustomHeightDp(customHeightDp: Int): MiniDrawerItem {\n        this.customHeight = DimenHolder.fromDp(customHeightDp)\n        return this\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withCustomHeightPx(customHeightPx: Int): MiniDrawerItem {\n        this.customHeight = DimenHolder.fromPixel(customHeightPx)\n        return this\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withCustomHeight(customHeight: DimenHolder): MiniDrawerItem {\n        this.customHeight = customHeight\n        return this\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withEnableSelectedBackground(enableSelectedBackground: Boolean): MiniDrawerItem {\n        this.enableSelectedBackground = enableSelectedBackground\n        return this\n    }\n\n    override fun bindView(holder: ViewHolder, payloads: List<Any>) {\n        super.bindView(holder, payloads)\n\n        val ctx = holder.itemView.context\n\n        //set a different height for this item\n        customHeight?.let {\n            val lp = holder.itemView.layoutParams as RecyclerView.LayoutParams\n            lp.height = it.asPixel(ctx)\n            holder.itemView.layoutParams = lp\n        }\n\n        //set the identifier from the drawerItem here. It can be used to run tests\n        holder.itemView.id = hashCode()\n\n        //set the item enabled if it is\n        holder.itemView.isEnabled = isEnabled\n        holder.icon.isEnabled = isEnabled\n\n        //set the item selected if it is\n        holder.itemView.isSelected = isSelected\n        holder.icon.isSelected = isSelected\n\n        //\n        holder.itemView.tag = this\n\n        //get the correct color for the icon\n        val iconColor = getIconColor(ctx)\n        val shapeAppearanceModel = getShapeAppearanceModel(ctx)\n\n        if (enableSelectedBackground) {\n            //get the correct color for the background\n            val selectedColor = selectedColor?.color(ctx) ?: getSelectedColor(ctx)\n            //set the background for the item\n            themeDrawerItem(ctx, holder.view, selectedColor, isSelectedBackgroundAnimated, shapeAppearanceModel, isSelected = isSelected)\n        }\n\n        //set the text for the badge or hide\n        val badgeVisible = StringHolder.applyToOrHide(badge, holder.badge)\n        //style the badge if it is visible\n        if (badgeVisible) {\n            badgeStyle?.style(holder.badge)\n        }\n\n        // check if we should load from a url, false if normal icon\n        val loaded = icon?.uri?.let {\n            DrawerImageLoader.instance.setImage(holder.icon, it, DrawerImageLoader.Tags.MINI_ITEM.name)\n        } ?: false\n\n        if (!loaded) {\n            // get the drawables for our icon and set it\n            val icon = ImageHolder.decideIcon(icon, ctx, iconColor, isIconTinted, 1)\n            val selectedIcon = ImageHolder.decideIcon(selectedIcon, ctx, iconColor, isIconTinted, 1)\n            ImageHolder.applyMultiIconTo(icon, selectedIcon, iconColor, isIconTinted, holder.icon)\n        }\n\n        //for android API 17 --> Padding not applied via xml\n        val verticalPadding = ctx.resources.getDimensionPixelSize(R.dimen.material_drawer_padding)\n        val topBottomPadding = ctx.resources.getDimensionPixelSize(R.dimen.material_mini_drawer_item_padding)\n        holder.itemView.setPadding(verticalPadding, topBottomPadding, verticalPadding, topBottomPadding)\n\n        //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)\n        onPostBindView(this, holder.itemView)\n    }\n\n    override fun unbindView(holder: ViewHolder) {\n        super.unbindView(holder)\n\n        // reset image loading for the item\n        DrawerImageLoader.instance.cancelImage(holder.icon)\n        holder.icon.setImageBitmap(null)\n    }\n\n    override fun getViewHolder(v: View): ViewHolder {\n        return ViewHolder(v)\n    }\n\n    class ViewHolder(internal val view: View) : RecyclerView.ViewHolder(view) {\n        internal val icon: ImageView = view.findViewById<ImageView>(R.id.material_drawer_icon)\n        internal val badge: TextView = view.findViewById<TextView>(R.id.material_drawer_badge)\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/MiniProfileDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.content.res.ColorStateList\nimport android.view.View\nimport android.widget.ImageView\nimport androidx.annotation.DimenRes\nimport androidx.annotation.LayoutRes\nimport androidx.recyclerview.widget.RecyclerView\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.holder.DimenHolder\nimport com.mikepenz.materialdrawer.holder.ImageHolder\nimport com.mikepenz.materialdrawer.holder.StringHolder\nimport com.mikepenz.materialdrawer.model.interfaces.IProfile\nimport com.mikepenz.materialdrawer.util.DrawerImageLoader\n\n/**\n * Describes a [IProfile] being used for the [com.mikepenz.materialdrawer.widget.MiniDrawerSliderView]\n */\nopen class MiniProfileDrawerItem : AbstractDrawerItem<MiniProfileDrawerItem, MiniProfileDrawerItem.ViewHolder>, IProfile {\n    override var icon: ImageHolder? = null\n    override var iconColor: ColorStateList? = null // not supported for this item\n    override var name: StringHolder? = null\n    override var description: StringHolder? = null\n    var customHeight: DimenHolder? = null\n\n    override val type: Int\n        get() = R.id.material_drawer_item_mini_profile\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = R.layout.material_drawer_item_mini_profile\n\n    constructor() {\n        this.isSelectable = false\n    }\n\n    constructor(profile: ProfileDrawerItem) {\n        this.icon = profile.icon\n        this.isEnabled = profile.isEnabled\n        this.isSelectable = false\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withCustomHeightRes(@DimenRes customHeightRes: Int): MiniProfileDrawerItem {\n        this.customHeight = DimenHolder.fromResource(customHeightRes)\n        return this\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withCustomHeightDp(customHeightDp: Int): MiniProfileDrawerItem {\n        this.customHeight = DimenHolder.fromDp(customHeightDp)\n        return this\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withCustomHeightPx(customHeightPx: Int): MiniProfileDrawerItem {\n        this.customHeight = DimenHolder.fromPixel(customHeightPx)\n        return this\n    }\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withCustomHeight(customHeight: DimenHolder): MiniProfileDrawerItem {\n        this.customHeight = customHeight\n        return this\n    }\n\n    override fun bindView(holder: ViewHolder, payloads: List<Any>) {\n        super.bindView(holder, payloads)\n\n        customHeight?.let {\n            val lp = holder.itemView.layoutParams as RecyclerView.LayoutParams\n            lp.height = it.asPixel(holder.itemView.context)\n            holder.itemView.layoutParams = lp\n        }\n\n        //set the identifier from the drawerItem here. It can be used to run tests\n        holder.itemView.id = hashCode()\n\n        //set the item enabled if it is\n        holder.itemView.isEnabled = isEnabled\n\n        //set the icon\n        ImageHolder.applyToOrSetInvisible(icon, holder.icon)\n\n        //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)\n        onPostBindView(this, holder.itemView)\n    }\n\n    override fun unbindView(holder: ViewHolder) {\n        super.unbindView(holder)\n\n        // reset image loading for the item\n        DrawerImageLoader.instance.cancelImage(holder.icon)\n        holder.icon.setImageBitmap(null)\n    }\n\n    override fun getViewHolder(v: View): ViewHolder {\n        return ViewHolder(v)\n    }\n\n    class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {\n        internal val icon: ImageView = view.findViewById<ImageView>(R.id.material_drawer_icon)\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/PrimaryDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\n\n/**\n * Describes the main [IDrawerItem] bing used as primary item, following the guidelines\n */\nopen class PrimaryDrawerItem : AbstractBadgeableDrawerItem<PrimaryDrawerItem>()\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/ProfileDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.content.res.ColorStateList\nimport android.view.View\nimport android.widget.ImageView\nimport android.widget.TextView\nimport androidx.annotation.LayoutRes\nimport androidx.recyclerview.widget.RecyclerView\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.holder.BadgeStyle\nimport com.mikepenz.materialdrawer.holder.ImageHolder\nimport com.mikepenz.materialdrawer.holder.StringHolder\nimport com.mikepenz.materialdrawer.model.interfaces.*\nimport com.mikepenz.materialdrawer.util.DrawerImageLoader\nimport com.mikepenz.materialdrawer.util.setDrawerVerticalPadding\nimport com.mikepenz.materialdrawer.util.themeDrawerItem\n\n/**\n * Describes a [IProfile] being used with the [com.mikepenz.materialdrawer.widget.AccountHeaderView]\n */\nopen class ProfileDrawerItem : AbstractDrawerItem<ProfileDrawerItem, ProfileDrawerItem.ViewHolder>(), IProfile, Tagable, ColorfulBadgeable, NameableColor, DescribableColor {\n    override var icon: ImageHolder? = null\n    override var iconColor: ColorStateList? = null // not supported for this item\n    override var name: StringHolder? = null\n    override var textColor: ColorStateList? = null\n    override var description: StringHolder? = null\n    override var descriptionTextColor: ColorStateList? = null\n    var isNameShown = false\n\n    override var badge: StringHolder? = null\n    override var badgeStyle: BadgeStyle? = BadgeStyle()\n\n    override val type: Int\n        get() = R.id.material_drawer_item_profile\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = R.layout.material_drawer_item_profile\n\n    /**\n     * Whether to show the profile name in the account switcher.\n     *\n     * @param nameShown show name in switcher\n     * @return the [ProfileDrawerItem]\n     */\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withNameShown(nameShown: Boolean): ProfileDrawerItem {\n        this.isNameShown = nameShown\n        return this\n    }\n\n    override fun bindView(holder: ViewHolder, payloads: List<Any>) {\n        super.bindView(holder, payloads)\n\n        val ctx = holder.itemView.context\n\n        //set the identifier from the drawerItem here. It can be used to run tests\n        holder.itemView.id = hashCode()\n\n        //set the item enabled if it is\n        holder.itemView.isEnabled = isEnabled\n        holder.name.isEnabled = isEnabled\n        holder.email.isEnabled = isEnabled\n        holder.profileIcon.isEnabled = isEnabled\n\n        //set the item selected if it is\n        holder.itemView.isSelected = isSelected\n        holder.name.isSelected = isSelected\n        holder.email.isSelected = isSelected\n        holder.profileIcon.isSelected = isSelected\n\n        //get the correct color for the background\n        val selectedColor = this.selectedColor?.color(ctx) ?: getSelectedColor(ctx)\n        //get the correct color for the text\n        val color = this.textColor ?: getColor(ctx)\n        val descriptionColor = this.descriptionTextColor ?: getColor(ctx)\n        val shapeAppearanceModel = getShapeAppearanceModel(ctx)\n\n        //set the background for the item\n        themeDrawerItem(ctx, holder.view, selectedColor, isSelectedBackgroundAnimated, shapeAppearanceModel, isSelected = isSelected)\n\n        if (isNameShown) {\n            holder.name.visibility = View.VISIBLE\n            StringHolder.applyTo(this.name, holder.name)\n        } else {\n            holder.name.visibility = View.GONE\n        }\n        //the MaterialDrawer follows the Google Apps. those only show the e-mail\n        //within the profile switcher. The problem this causes some confusion for\n        //some developers. And if you only set the name, the item would be empty\n        //so here's a small fallback which will prevent this issue of empty items ;)\n        if (!isNameShown && this.description == null && this.name != null) {\n            StringHolder.applyTo(this.name, holder.email)\n        } else {\n            StringHolder.applyTo(this.description, holder.email)\n        }\n\n        if (typeface != null) {\n            holder.name.typeface = typeface\n            holder.email.typeface = typeface\n        }\n\n        if (isNameShown) {\n            holder.name.setTextColor(color)\n        }\n        holder.email.setTextColor(descriptionColor)\n\n        //set the text for the badge or hide\n        val badgeVisible = StringHolder.applyToOrHide(badge, holder.badge)\n        //style the badge if it is visible\n        if (badgeVisible) {\n            badgeStyle?.style(holder.badge, getColor(ctx))\n            holder.badge.visibility = View.VISIBLE\n        } else {\n            holder.badge.visibility = View.GONE\n        }\n\n        //define the typeface for our textViews\n        if (typeface != null) {\n            holder.badge.typeface = typeface\n        }\n\n        //set the icon\n        ImageHolder.applyToOrSetInvisible(icon, holder.profileIcon, DrawerImageLoader.Tags.PROFILE_DRAWER_ITEM.name)\n\n        //for android API 17 --> Padding not applied via xml\n        setDrawerVerticalPadding(holder.view)\n\n        //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)\n        onPostBindView(this, holder.itemView)\n    }\n\n    override fun unbindView(holder: ViewHolder) {\n        super.unbindView(holder)\n\n        // reset image loading for the item\n        DrawerImageLoader.instance.cancelImage(holder.profileIcon)\n        holder.profileIcon.setImageBitmap(null)\n    }\n\n    override fun getViewHolder(v: View): ViewHolder {\n        return ViewHolder(v)\n    }\n\n    open class ViewHolder internal constructor(internal val view: View) : RecyclerView.ViewHolder(view) {\n        internal val profileIcon: ImageView = view.findViewById(R.id.material_drawer_profileIcon)\n        internal val name: TextView = view.findViewById(R.id.material_drawer_name)\n        internal val email: TextView = view.findViewById(R.id.material_drawer_email)\n        internal val badge: TextView = view.findViewById(R.id.material_drawer_badge)\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/ProfileSettingDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.content.res.ColorStateList\nimport android.view.View\nimport android.widget.ImageView\nimport android.widget.TextView\nimport androidx.annotation.LayoutRes\nimport androidx.recyclerview.widget.RecyclerView\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.holder.BadgeStyle\nimport com.mikepenz.materialdrawer.holder.ImageHolder\nimport com.mikepenz.materialdrawer.holder.StringHolder\nimport com.mikepenz.materialdrawer.model.interfaces.*\nimport com.mikepenz.materialdrawer.util.getPrimaryDrawerIconColor\nimport com.mikepenz.materialdrawer.util.setDrawerVerticalPadding\nimport com.mikepenz.materialdrawer.util.themeDrawerItem\n\n/**\n * Describes a [IProfile] being used with the [com.mikepenz.materialdrawer.widget.AccountHeaderView]\n */\nopen class ProfileSettingDrawerItem : AbstractDrawerItem<ProfileSettingDrawerItem, ProfileSettingDrawerItem.ViewHolder>(), IProfile, Tagable, Typefaceable, ColorfulBadgeable, NameableColor, DescribableColor, SelectIconable {\n    override var icon: ImageHolder? = null\n    override var iconColor: ColorStateList? = null\n    override var selectedIcon: ImageHolder? = null\n    override var name: StringHolder? = null\n    override var textColor: ColorStateList? = null\n    override var description: StringHolder? = null\n    override var descriptionTextColor: ColorStateList? = null\n    override var isIconTinted = false\n\n    override var badge: StringHolder? = null\n    override var badgeStyle: BadgeStyle? = BadgeStyle()\n\n    override var isSelectable = false\n\n    override val type: Int\n        get() = R.id.material_drawer_item_profile_setting\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = R.layout.material_drawer_item_profile_setting\n\n    override fun bindView(holder: ViewHolder, payloads: List<Any>) {\n        super.bindView(holder, payloads)\n\n        //get the context\n        val ctx = holder.itemView.context\n\n        //set the identifier from the drawerItem here. It can be used to run tests\n        holder.itemView.id = hashCode()\n\n        //set the item enabled if it is\n        holder.itemView.isEnabled = isEnabled\n        holder.name.isEnabled = isEnabled\n        holder.description.isEnabled = isEnabled\n        holder.icon.isEnabled = isEnabled\n\n        //set the item selected if it is\n        holder.itemView.isSelected = isSelected\n        holder.name.isSelected = isSelected\n        holder.description.isSelected = isSelected\n        holder.icon.isSelected = isSelected\n\n        //get the correct color for the background\n        val selectedColor = this.selectedColor?.color(ctx) ?: getSelectedColor(ctx)\n        //get the correct color for the text\n        val color = this.textColor ?: getColor(ctx)\n        val iconColor = this.iconColor ?: ctx.getPrimaryDrawerIconColor()\n        val descriptionColor = this.descriptionTextColor ?: getColor(ctx)\n        val shapeAppearanceModel = getShapeAppearanceModel(ctx)\n\n        //set the background for the item\n        themeDrawerItem(ctx, holder.view, selectedColor, isSelectedBackgroundAnimated, shapeAppearanceModel, isSelected = isSelected)\n\n        StringHolder.applyTo(this.name, holder.name)\n        holder.name.setTextColor(color)\n\n        StringHolder.applyToOrHide(this.description, holder.description)\n        holder.description.setTextColor(descriptionColor)\n\n        if (typeface != null) {\n            holder.name.typeface = typeface\n            holder.description.typeface = typeface\n        }\n\n        //set the text for the badge or hide\n        val badgeVisible = StringHolder.applyToOrHide(badge, holder.badge)\n        //style the badge if it is visible\n        if (badgeVisible) {\n            badgeStyle?.style(holder.badge, getColor(ctx))\n            holder.badge.visibility = View.VISIBLE\n        } else {\n            holder.badge.visibility = View.GONE\n        }\n\n        //define the typeface for our textViews\n        if (typeface != null) {\n            holder.badge.typeface = typeface\n        }\n\n        //set the correct icon\n        val icon = ImageHolder.decideIcon(icon, ctx, iconColor, isIconTinted, 2)\n        val selectedIcon = ImageHolder.decideIcon(selectedIcon, ctx, iconColor, isIconTinted, 2)\n        ImageHolder.applyMultiIconTo(icon, selectedIcon, iconColor, isIconTinted, holder.icon)\n\n        //for android API 17 --> Padding not applied via xml\n        setDrawerVerticalPadding(holder.view)\n\n        //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)\n        onPostBindView(this, holder.itemView)\n    }\n\n    override fun getViewHolder(v: View): ViewHolder {\n        return ViewHolder(v)\n    }\n\n    open class ViewHolder internal constructor(internal val view: View) : RecyclerView.ViewHolder(view) {\n        internal val icon: ImageView = view.findViewById(R.id.material_drawer_icon)\n        internal val name: TextView = view.findViewById(R.id.material_drawer_name)\n        internal val description: TextView = view.findViewById(R.id.material_drawer_description)\n        internal val badge: TextView = view.findViewById(R.id.material_drawer_badge)\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/SecondaryDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.content.Context\nimport android.content.res.ColorStateList\nimport androidx.annotation.LayoutRes\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.util.getSecondaryDrawerIconColor\nimport com.mikepenz.materialdrawer.util.getSecondaryDrawerTextColor\n\n/**\n * Describes the secondary [IDrawerItem] bing used as primary item. Slightly smaller than the primary items\n */\nopen class SecondaryDrawerItem : AbstractBadgeableDrawerItem<SecondaryDrawerItem>() {\n\n    override val type: Int\n        get() = R.id.material_drawer_item_secondary\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = R.layout.material_drawer_item_secondary\n\n    override fun getColor(ctx: Context): ColorStateList {\n        return ctx.getSecondaryDrawerTextColor()\n    }\n\n    override fun getIconColor(ctx: Context): ColorStateList {\n        return ctx.getSecondaryDrawerIconColor()\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/SecondarySwitchDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.content.Context\nimport android.content.res.ColorStateList\nimport androidx.annotation.LayoutRes\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.util.getSecondaryDrawerIconColor\nimport com.mikepenz.materialdrawer.util.getSecondaryDrawerTextColor\n\n/**\n * Describes a [IDrawerItem] bing used as secondary item, offering a switch.\n */\nopen class SecondarySwitchDrawerItem : AbstractSwitchableDrawerItem<SecondarySwitchDrawerItem>() {\n\n    override val type: Int\n        get() = R.id.material_drawer_item_secondary_switch\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = R.layout.material_drawer_item_secondary_switch\n\n    override fun getColor(ctx: Context): ColorStateList {\n        return ctx.getSecondaryDrawerTextColor()\n    }\n\n    override fun getIconColor(ctx: Context): ColorStateList {\n        return ctx.getSecondaryDrawerIconColor()\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/SecondaryToggleDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.content.Context\nimport android.content.res.ColorStateList\nimport androidx.annotation.LayoutRes\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.util.getSecondaryDrawerIconColor\nimport com.mikepenz.materialdrawer.util.getSecondaryDrawerTextColor\n\n/**\n * Describes a [IDrawerItem] bing used as secondary item, offering a toggle.\n */\nopen class SecondaryToggleDrawerItem : AbstractToggleableDrawerItem<SecondaryToggleDrawerItem>() {\n\n    override val type: Int\n        get() = R.id.material_drawer_item_secondary_toggle\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = R.layout.material_drawer_item_secondary_toggle\n\n    override fun getColor(ctx: Context): ColorStateList {\n        return ctx.getSecondaryDrawerTextColor()\n    }\n\n    override fun getIconColor(ctx: Context): ColorStateList {\n        return ctx.getSecondaryDrawerIconColor()\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/SectionDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.content.res.ColorStateList\nimport android.view.View\nimport android.widget.TextView\nimport androidx.annotation.LayoutRes\nimport androidx.recyclerview.widget.RecyclerView\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.holder.StringHolder\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.Nameable\nimport com.mikepenz.materialdrawer.model.interfaces.NameableColor\nimport com.mikepenz.materialdrawer.model.interfaces.Typefaceable\nimport com.mikepenz.materialdrawer.util.getDividerColor\nimport com.mikepenz.materialdrawer.util.getSecondaryDrawerTextColor\n\n/**\n * Describes a [IDrawerItem] acting as a divider with description to describe a section.\n */\nopen class SectionDrawerItem : AbstractDrawerItem<SectionDrawerItem, SectionDrawerItem.ViewHolder>(), Nameable, NameableColor, Typefaceable {\n    var divider = true\n    override var name: StringHolder? = null\n    override var textColor: ColorStateList? = null\n    override var isEnabled: Boolean = false\n    override var isSelected: Boolean = false\n\n    override val type: Int\n        get() = R.id.material_drawer_item_section\n\n    override val layoutRes: Int\n        @LayoutRes\n        get() = R.layout.material_drawer_item_section\n\n    @Deprecated(\"Please consider to replace with the actual property setter\")\n    fun withDivider(divider: Boolean): SectionDrawerItem {\n        this.divider = divider\n        return this\n    }\n\n    override fun bindView(holder: ViewHolder, payloads: List<Any>) {\n        super.bindView(holder, payloads)\n\n        val ctx = holder.itemView.context\n\n        //set the identifier from the drawerItem here. It can be used to run tests\n        holder.itemView.id = hashCode()\n\n        //define this item to be not clickable nor enabled\n        holder.view.isClickable = false\n        holder.view.isEnabled = false\n\n        val color = textColor ?: ctx.getSecondaryDrawerTextColor()\n\n        //define the text color\n        holder.name.setTextColor(color)\n\n        //set the text for the name\n        StringHolder.applyTo(this.name, holder.name)\n\n        //define the typeface for our textViews\n        if (typeface != null) {\n            holder.name.typeface = typeface\n        }\n\n        //hide the divider if we do not need one\n        if (this.divider) {\n            holder.divider.visibility = View.VISIBLE\n        } else {\n            holder.divider.visibility = View.GONE\n        }\n\n        //set the color for the divider\n        holder.divider.setBackgroundColor(ctx.getDividerColor())\n\n        //call the onPostBindView method to trigger post bind view actions (like the listener to modify the item if required)\n        onPostBindView(this, holder.itemView)\n    }\n\n    override fun getViewHolder(v: View): ViewHolder {\n        return ViewHolder(v)\n    }\n\n    class ViewHolder internal constructor(internal val view: View) : RecyclerView.ViewHolder(view) {\n        internal val divider: View = view.findViewById(R.id.material_drawer_divider)\n        internal val name: TextView = view.findViewById(R.id.material_drawer_name)\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/SwitchDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\n\n/**\n * Describes the main [IDrawerItem] bing used as primary item, offering a switch.\n */\nopen class SwitchDrawerItem : AbstractSwitchableDrawerItem<SwitchDrawerItem>()\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/ToggleDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\n\n/**\n * Describes the main [IDrawerItem] bing used as primary item, offering a toggle.\n */\nopen class ToggleDrawerItem : AbstractToggleableDrawerItem<ToggleDrawerItem>()\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Badgeable.kt",
    "content": "package com.mikepenz.materialdrawer.model.interfaces\n\nimport com.mikepenz.materialdrawer.holder.StringHolder\n\n/**\n * Defines a [IDrawerItem] which allows to have a badge\n */\ninterface Badgeable {\n    /** the badge text to show for this item */\n    var badge: StringHolder?\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Badgeable> T.withBadge(badge: String): T {\n    this.badge = StringHolder(badge)\n    return this\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Badgeable> T.withBadge(badgeRes: Int): T {\n    this.badge = StringHolder(badgeRes)\n    return this\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Badgeable> T.withBadge(badge: StringHolder?): T {\n    this.badge = badge\n    return this\n}\n\n/** Set the badge name */\nvar Badgeable.badgeRes: Int\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(value) {\n        badge = StringHolder(value)\n    }\n\n/** Set the badge name */\nvar Badgeable.badgeText: CharSequence\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(value) {\n        badge = StringHolder(value)\n    }\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Checkable.kt",
    "content": "package com.mikepenz.materialdrawer.model.interfaces\n\n/**\n * Defines a [IDrawerItem] with support for being selected\n */\ninterface Checkable : Selectable {\n    var isChecked: Boolean\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Checkable> T.withChecked(checked: Boolean): T {\n    this.isChecked = checked\n    return this\n}\n\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Checkable> T.withCheckable(checkable: Boolean): T {\n    this.isSelectable = checkable\n    return this\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/ColorfulBadgeable.kt",
    "content": "package com.mikepenz.materialdrawer.model.interfaces\n\nimport com.mikepenz.materialdrawer.holder.BadgeStyle\n\n/**\n * Defines a [IDrawerItem] which allows to have a colorful badge\n */\ninterface ColorfulBadgeable : Badgeable {\n    /** defines the style for the badge in the item */\n    var badgeStyle: BadgeStyle?\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : ColorfulBadgeable> T.withBadgeStyle(badgeStyle: BadgeStyle?): T {\n    this.badgeStyle = badgeStyle\n    return this\n}"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Describable.kt",
    "content": "package com.mikepenz.materialdrawer.model.interfaces\n\nimport androidx.annotation.StringRes\nimport com.mikepenz.materialdrawer.holder.StringHolder\n\n/**\n * Defines a [IDrawerItem] with support for defining a description\n */\ninterface Describable {\n    /** The text to show as description */\n    var description: StringHolder?\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Describable> T.withDescription(description: String): T {\n    this.description = StringHolder(description)\n    return this\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Describable> T.withDescription(@StringRes descriptionRes: Int): T {\n    this.description = StringHolder(descriptionRes)\n    return this\n}\n\n/** Set the description */\nvar Describable.descriptionRes: Int\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(value) {\n        description = StringHolder(value)\n    }\n\n/** Set the description */\nvar Describable.descriptionText: CharSequence\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(value) {\n        description = StringHolder(value)\n    }"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/DescribableColor.kt",
    "content": "package com.mikepenz.materialdrawer.model.interfaces\n\nimport android.content.res.ColorStateList\nimport androidx.annotation.ColorInt\nimport androidx.annotation.ColorRes\n\n/**\n * Defines a [IDrawerItem] with support for defining a description\n */\ninterface DescribableColor {\n    /** The color for the description text */\n    var descriptionTextColor: ColorStateList?\n}\n\n/**\n * Set the description color as color resource.\n *\n * This method is deprecated and no-op.\n *\n * @deprecated\n */\nvar DescribableColor.descriptionTextColorRes: Int\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    @Deprecated(\n        \"Please use `descriptionTextColor` directly, as [ColorStateList] can't be resolved without [Context].\",\n        level = DeprecationLevel.WARNING,\n        replaceWith = ReplaceWith(\"descriptionTextColor\")\n    )\n    set(@ColorRes value) {\n        // no-op\n    }\n\n/** Set the description color as color int */\nvar DescribableColor.descriptionTextColorInt: Int\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(@ColorInt value) {\n        descriptionTextColor = ColorStateList.valueOf(value)\n    }\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model.interfaces\n\nimport android.content.Context\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.recyclerview.widget.RecyclerView\nimport com.mikepenz.fastadapter.*\n\n/**\n * Defines a general [IDrawerItem] to be displayed in the [com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView]\n */\ninterface IDrawerItem<VH : RecyclerView.ViewHolder> : IItem<VH>, IItemVHFactory<VH>, IItemViewGenerator, IExpandable<VH>, IIdentifyable, Selectable, Tagable {\n\n    override var isEnabled: Boolean\n\n    override var isSelected: Boolean\n\n    override val type: Int\n\n    val layoutRes: Int\n\n    override var identifier: Long\n\n    override var isExpanded: Boolean\n\n    override val isAutoExpanding: Boolean\n\n    override fun generateView(ctx: Context): View\n\n    override fun generateView(ctx: Context, parent: ViewGroup): View\n\n    override fun getViewHolder(parent: ViewGroup): VH\n\n    override fun unbindView(holder: VH)\n\n    override fun bindView(holder: VH, payloads: List<Any>)\n\n    fun equals(id: Long): Boolean\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : IDrawerItem<*>> T.withIdentifier(identifier: Long): T {\n    this.identifier = identifier\n    return this\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : IDrawerItem<*>> T.withEnabled(enabled: Boolean): T {\n    this.isEnabled = enabled\n    return this\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : IDrawerItem<*>> T.withSelected(selected: Boolean): T {\n    this.isSelected = selected\n    return this\n}"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/IProfile.kt",
    "content": "package com.mikepenz.materialdrawer.model.interfaces\n\nimport androidx.annotation.StringRes\nimport com.mikepenz.fastadapter.IIdentifyable\nimport com.mikepenz.materialdrawer.holder.StringHolder\n\n/**\n * Defines a general [IProfile] to be displayed in the [com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView] with the [com.mikepenz.materialdrawer.widget.AccountHeaderView]\n */\ninterface IProfile : IIdentifyable, Nameable, Iconable, Selectable, Tagable, Describable\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : IProfile> T.withEmail(@StringRes emailRes: Int): T {\n    this.description = StringHolder(emailRes)\n    return this\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : IProfile> T.withEmail(email: String?): T {\n    this.description = StringHolder(email)\n    return this\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Iconable.kt",
    "content": "package com.mikepenz.materialdrawer.model.interfaces\n\nimport android.content.res.ColorStateList\nimport android.graphics.Bitmap\nimport android.graphics.drawable.Drawable\nimport android.net.Uri\nimport androidx.annotation.DrawableRes\nimport com.mikepenz.materialdrawer.holder.ImageHolder\n\n/**\n * Defines a [IDrawerItem] with support for an icon\n */\ninterface Iconable {\n    /** the icon to show in the drawer */\n    var icon: ImageHolder?\n\n    /** the color of the icon */\n    var iconColor: ColorStateList?\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Iconable> T.withIconColor(iconColor: ColorStateList): T {\n    this.iconColor = iconColor\n    return this\n}\n\nvar <T : Iconable> T.iconDrawable: Drawable?\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(value) {\n        if (value != null) {\n            this.icon = ImageHolder(value)\n        } else {\n            this.icon = null\n        }\n    }\n\nvar <T : Iconable> T.iconBitmap: Bitmap\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(value) {\n        this.icon = ImageHolder(value)\n    }\n\nvar <T : Iconable> T.iconRes: Int\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(@DrawableRes value) {\n        this.icon = ImageHolder(value)\n    }\n\nvar <T : Iconable> T.iconUrl: String\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(value) {\n        this.icon = ImageHolder(value)\n    }\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Iconable> T.withIcon(icon: Drawable?): T {\n    this.icon = ImageHolder(icon)\n    return this\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Iconable> T.withIcon(icon: Bitmap): T {\n    this.icon = ImageHolder(icon)\n    return this\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Iconable> T.withIcon(@DrawableRes imageRes: Int): T {\n    this.icon = ImageHolder(imageRes)\n    return this\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Iconable> T.withIcon(url: String): T {\n    this.icon = ImageHolder(url)\n    return this\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Iconable> T.withIcon(uri: Uri): T {\n    this.icon = ImageHolder(uri)\n    return this\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Iconable> T.withIcon(icon: ImageHolder?): T {\n    this.icon = icon\n    return this\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Nameable.kt",
    "content": "package com.mikepenz.materialdrawer.model.interfaces\n\nimport androidx.annotation.StringRes\nimport com.mikepenz.materialdrawer.holder.StringHolder\n\n/**\n * Defines a [IDrawerItem] with support for defining a name\n */\ninterface Nameable {\n    /** the name to show for the item */\n    var name: StringHolder?\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Nameable> T.withName(name: String?): T {\n    this.name = StringHolder(name)\n    return this\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Nameable> T.withName(@StringRes name: Int): T {\n    this.name = StringHolder(name)\n    return this\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Nameable> T.withName(name: StringHolder?): T {\n    this.name = name\n    return this\n}\n\n/** Set the name */\nvar Nameable.nameRes: Int\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(value) {\n        name = StringHolder(value)\n    }\n\n/** Set the name */\nvar Nameable.nameText: CharSequence\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(value) {\n        name = StringHolder(value)\n    }\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/NameableColor.kt",
    "content": "package com.mikepenz.materialdrawer.model.interfaces\n\nimport android.content.res.ColorStateList\nimport androidx.annotation.ColorInt\nimport androidx.annotation.ColorRes\n\n/**\n * Defines a [IDrawerItem] with support for defining a name\n */\ninterface NameableColor {\n    /** defines the color for the text */\n    var textColor: ColorStateList?\n}\n\n/**\n * Set the selected text color as color resource.\n *\n * This method is deprecated and no-op.\n *\n * @deprecated\n */\nvar NameableColor.textColorRes: Int\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    @Deprecated(\n        \"Please use `textColor` directly, as [ColorStateList] can't be resolved without [Context].\",\n        level = DeprecationLevel.WARNING,\n        replaceWith = ReplaceWith(\"descriptionTextColor\")\n    )\n    set(@ColorRes value) {\n        // no-op\n    }\n\n/** Set the selected text color as color int */\nvar NameableColor.textColorInt: Int\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(@ColorInt value) {\n        textColor = ColorStateList.valueOf(value)\n    }\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/SelectIconable.kt",
    "content": "package com.mikepenz.materialdrawer.model.interfaces\n\nimport android.graphics.Bitmap\nimport android.graphics.drawable.Drawable\nimport androidx.annotation.DrawableRes\nimport com.mikepenz.materialdrawer.holder.ImageHolder\n\n/**\n * Defines a [IDrawerItem] with support for an icon\n */\ninterface SelectIconable {\n    /** the icon to show when this item gets selected */\n    var selectedIcon: ImageHolder?\n\n    /** defines if the icon should get proper tinting with the defined color */\n    var isIconTinted: Boolean\n}\n\nvar <T : Iconable> T.selectedIconDrawable: Drawable\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(value) {\n        this.icon = ImageHolder(value)\n    }\n\nvar <T : Iconable> T.selectedIconBitmap: Bitmap\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(value) {\n        this.icon = ImageHolder(value)\n    }\n\nvar <T : Iconable> T.selectedIconRes: Int\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(@DrawableRes value) {\n        this.icon = ImageHolder(value)\n    }\n\nvar <T : Iconable> T.selectedIconUrl: String\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(value) {\n        this.icon = ImageHolder(value)\n    }\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : SelectIconable> T.withSelectedIcon(selectedIcon: Drawable): T {\n    this.selectedIcon = ImageHolder(selectedIcon)\n    return this as T\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : SelectIconable> T.withSelectedIcon(@DrawableRes selectedIconRes: Int): T {\n    this.selectedIcon = ImageHolder(selectedIconRes)\n    return this as T\n}\n\n/** will tint the icon with the default (or set) colors (default and selected state) */\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : SelectIconable> T.withIconTintingEnabled(iconTintingEnabled: Boolean): T {\n    this.isIconTinted = iconTintingEnabled\n    return this as T\n}\n\n/** will tint the icon with the default (or set) colors (default and selected state) */\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : SelectIconable> T.withIconTinted(iconTintingEnabled: Boolean): T {\n    this.isIconTinted = iconTintingEnabled\n    return this as T\n}"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Selectable.kt",
    "content": "package com.mikepenz.materialdrawer.model.interfaces\n\n/**\n * Defines a [IDrawerItem] with support for being selected\n */\ninterface Selectable {\n    /** If the item is selectable */\n    var isSelectable: Boolean\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Selectable> T.withSelectable(selectable: Boolean): T {\n    this.isSelectable = selectable\n    return this\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/SelectableColor.kt",
    "content": "package com.mikepenz.materialdrawer.model.interfaces\n\nimport androidx.annotation.ColorInt\nimport androidx.annotation.ColorRes\nimport com.mikepenz.materialdrawer.holder.ColorHolder\n\n/**\n * Defines a [IDrawerItem] with support for having a different color when selected\n */\ninterface SelectableColor {\n    /** The background color of a selectable item */\n    var selectedColor: ColorHolder?\n}\n\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : SelectableColor> T.withSelectedColor(@ColorInt selectedColor: Int): T {\n    this.selectedColor = ColorHolder.fromColor(selectedColor)\n    return this\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : SelectableColor> T.withSelectedColorRes(@ColorRes selectedColorRes: Int): T {\n    this.selectedColor = ColorHolder.fromColorRes(selectedColorRes)\n    return this\n}\n\n/** Set the selected color as color resource */\nvar SelectableColor.selectedColorRes: Int\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(@ColorRes value) {\n        selectedColor = ColorHolder.fromColorRes(value)\n    }\n\n/** Set the selected color as color int */\nvar SelectableColor.selectedColorInt: Int\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(@ColorInt value) {\n        selectedColor = ColorHolder.fromColor(value)\n    }\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Tagable.kt",
    "content": "package com.mikepenz.materialdrawer.model.interfaces\n\n/**\n * Defines a [IDrawerItem] with support for being tagged\n */\ninterface Tagable {\n    /** specify a tag attached to the item to use for different situations */\n    var tag: Any?\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Tagable> T.withTag(tag: Any?): T {\n    this.tag = tag\n    return this\n}"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/interfaces/Typefaceable.kt",
    "content": "package com.mikepenz.materialdrawer.model.interfaces\n\nimport android.graphics.Typeface\n\n/**\n * Defines a [IDrawerItem] with support for defining the [Typeface]\n */\ninterface Typefaceable {\n    /** the typeface used for texts */\n    var typeface: Typeface?\n}\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Typefaceable> T.withTypeface(typeface: Typeface?): T {\n    this.typeface = typeface\n    return this\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/utils/BadgeDrawableBuilder.kt",
    "content": "package com.mikepenz.materialdrawer.model.utils\n\nimport android.content.Context\nimport android.graphics.drawable.GradientDrawable\nimport android.graphics.drawable.StateListDrawable\nimport android.util.StateSet\nimport androidx.appcompat.content.res.AppCompatResources\nimport com.mikepenz.materialdrawer.holder.BadgeStyle\nimport com.mikepenz.materialdrawer.holder.ColorHolder\n\n/**\n * Builder to construct the [StateListDrawable] given a [BadgeStyle]\n */\nclass BadgeDrawableBuilder(private val style: BadgeStyle) {\n\n    /** creates the [StateListDrawable] given the provided [BadgeStyle] */\n    fun build(ctx: Context): StateListDrawable {\n        val stateListDrawable = StateListDrawable()\n        val normal = AppCompatResources.getDrawable(ctx, style.gradientDrawable) as GradientDrawable?\n        val selected = normal?.constantState?.newDrawable()?.mutate() as GradientDrawable?\n\n        ColorHolder.applyToOrTransparent(style.color, ctx, normal)\n        if (style.colorPressed == null) {\n            ColorHolder.applyToOrTransparent(style.color, ctx, selected)\n        } else {\n            ColorHolder.applyToOrTransparent(style.colorPressed, ctx, selected)\n        }\n\n        style.corners?.let {\n            normal?.cornerRadius = it.asPixel(ctx).toFloat()\n            selected?.cornerRadius = it.asPixel(ctx).toFloat()\n        }\n\n        stateListDrawable.addState(intArrayOf(android.R.attr.state_pressed), selected)\n        stateListDrawable.addState(StateSet.WILD_CARD, normal)\n\n        return stateListDrawable\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/model/utils/DrawerItemExtensions.kt",
    "content": "package com.mikepenz.materialdrawer.model.utils\n\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\n\n/** Define tags associated to specific tag items */\nprivate val drawerItemTags = mutableMapOf<Any, Any>()\n\n/** Define if this IDrawerItem should / can be shown inside the MiniDrawer */\nvar <T : IDrawerItem<*>> T.hiddenInMiniDrawer: Boolean\n    get() = drawerItemTags[this] as? Boolean == true\n    set(value) {\n        drawerItemTags[this] = value\n    }\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : IDrawerItem<*>> T.withIsHiddenInMiniDrawer(hidden: Boolean): T {\n    hiddenInMiniDrawer = hidden\n    return this\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/util/AbstractDrawerImageLoader.kt",
    "content": "package com.mikepenz.materialdrawer.util\n\nimport android.content.Context\nimport android.graphics.drawable.Drawable\nimport android.net.Uri\nimport android.util.Log\nimport android.widget.ImageView\n\n/**\n * This abstract class provides functionality to add custom image loader implementations, based on the image loader used in the app.\n */\nabstract class AbstractDrawerImageLoader : DrawerImageLoader.IDrawerImageLoader {\n    /**\n     * Start loading the image [uri] for the given [imageView] providing the [placeholder], allowing to identify the location it is gonna be used via the [tag]\n     */\n    override fun set(imageView: ImageView, uri: Uri, placeholder: Drawable, tag: String?) {\n        //this won't do anything\n        Log.i(\"MaterialDrawer\", \"You have not specified a ImageLoader implementation through the DrawerImageLoader.init() method, or you are still overriding the deprecated method set(ImageView iv, Uri u, Drawable d) instead of set(ImageView iv, Uri u, Drawable d, String tag)\")\n    }\n\n    /**\n     * Cancel loading images for the imageView\n     */\n    override fun cancel(imageView: ImageView) {}\n\n    /**\n     * Retrieve the placeholder to display\n     */\n    override fun placeholder(ctx: Context): Drawable {\n        return getPlaceHolder(ctx)\n    }\n\n    /**\n     * Retrieve the placeholder to display, using the [tag] to identify the location it is gonna be used\n     */\n    override fun placeholder(ctx: Context, tag: String?): Drawable {\n        return placeholder(ctx)\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/util/DrawerImageLoader.kt",
    "content": "package com.mikepenz.materialdrawer.util\n\nimport android.content.Context\nimport android.graphics.drawable.Drawable\nimport android.net.Uri\nimport android.widget.ImageView\nimport com.mikepenz.materialdrawer.util.DrawerImageLoader.IDrawerImageLoader\n\n/**\n * The general management class for the [IDrawerImageLoader] support, to offer support for any image loading library.\n */\nopen class DrawerImageLoader private constructor(var imageLoader: IDrawerImageLoader?) {\n\n    /**\n     * defines if we accept any protocol\n     */\n    var handleAllProtocols = false\n\n    /**\n     * supported protocols\n     */\n    var handledProtocols = listOf<String?>(\"http\", \"https\")\n\n    /**\n     * The possible tags we currently support.\n     */\n    enum class Tags {\n        PRIMARY_ITEM,\n        MINI_ITEM,\n        PROFILE,\n        PROFILE_DRAWER_ITEM,\n        ACCOUNT_HEADER\n    }\n\n    /**\n     * @param imageView\n     * @param uri\n     * @param tag\n     * @return false if not consumed\n     */\n    open fun setImage(imageView: ImageView, uri: Uri, tag: String?): Boolean {\n        // If we do not handle this protocol we keep the original behavior\n        return if (handleAllProtocols || uri.scheme in handledProtocols) {\n            imageLoader?.let {\n                val placeHolder = it.placeholder(imageView.context, tag)\n                it[imageView, uri, placeHolder] = tag\n            }\n            true\n        } else false\n    }\n\n    /**\n     * Cancel loading for the given [ImageView]\n     */\n    fun cancelImage(imageView: ImageView) {\n        imageLoader?.cancel(imageView)\n    }\n\n    interface IDrawerImageLoader {\n        /**\n         * Start loading the image [uri] for the given [imageView] providing the [placeholder], allowing to identify the location it is gonna be used via the [tag]\n         */\n        operator fun set(imageView: ImageView, uri: Uri, placeholder: Drawable, tag: String?)\n\n        /**\n         * Cancel loading images for the imageView\n         */\n        fun cancel(imageView: ImageView)\n\n        @Deprecated(\"Please use the placeholder method with the provided tag instead\")\n        fun placeholder(ctx: Context): Drawable\n\n        /**\n         * Retrieve the placeholder to display, using the [tag] to identify the location it is gonna be used\n         */\n        fun placeholder(ctx: Context, tag: String?): Drawable\n    }\n\n    companion object {\n\n        private var SINGLETON: DrawerImageLoader? = null\n\n        fun init(loaderImpl: IDrawerImageLoader): DrawerImageLoader {\n            SINGLETON = DrawerImageLoader(loaderImpl)\n            return SINGLETON as DrawerImageLoader\n        }\n\n        val instance: DrawerImageLoader\n            get() {\n                if (SINGLETON == null) {\n                    SINGLETON = DrawerImageLoader(object : AbstractDrawerImageLoader() {})\n                }\n                return SINGLETON as DrawerImageLoader\n            }\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/util/DrawerItemViewHelper.kt",
    "content": "package com.mikepenz.materialdrawer.util\n\nimport android.content.Context\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.LinearLayout\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport java.util.*\n\n/**\n * Custom helper class allowing to construct a view hierarchy just by using [IDrawerItem]s\n */\nopen class DrawerItemViewHelper(private val context: Context) {\n\n    val drawerItems = ArrayList<IDrawerItem<*>>()\n    var divider = true\n    var onDrawerItemClickListener: ((View, IDrawerItem<*>) -> Unit)? = null\n\n    fun build(): View {\n        //create the container view\n        val linearLayout = LinearLayout(context)\n        linearLayout.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)\n        linearLayout.orientation = LinearLayout.VERTICAL\n\n        //create the divider\n        if (divider) {\n            val divider = LinearLayout(context)\n            divider.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)\n            divider.minimumHeight = context.resources.getDimensionPixelSize(R.dimen.material_drawer_sticky_footer_divider)\n            divider.orientation = LinearLayout.VERTICAL\n            divider.setBackgroundColor(context.getDividerColor())\n            linearLayout.addView(divider)\n        }\n\n        //add all drawer items\n        for (drawerItem in drawerItems) {\n            val view = drawerItem.generateView(context)\n            view.tag = drawerItem\n\n            if (drawerItem.isEnabled) {\n                view.setBackgroundResource(context.getSelectableBackgroundRes())\n                view.setOnClickListener { v ->\n                    onDrawerItemClickListener?.invoke(v, v.getTag(R.id.material_drawer_item) as IDrawerItem<*>)\n                }\n            }\n\n            linearLayout.addView(view)\n        }\n\n        return linearLayout\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/util/DrawerUtils.kt",
    "content": "@file:JvmName(\"DrawerUtils\")\n\npackage com.mikepenz.materialdrawer.util\n\nimport android.annotation.SuppressLint\nimport android.content.Context\nimport android.content.res.ColorStateList\nimport android.graphics.Color\nimport android.graphics.drawable.*\nimport android.os.Build\nimport android.view.Gravity\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.LinearLayout\nimport android.widget.RelativeLayout\nimport androidx.annotation.AttrRes\nimport androidx.annotation.DimenRes\nimport androidx.appcompat.content.res.AppCompatResources\nimport androidx.core.graphics.drawable.DrawableCompat\nimport androidx.core.view.ViewCompat\nimport androidx.drawerlayout.widget.DrawerLayout\nimport com.google.android.material.shape.MaterialShapeDrawable\nimport com.google.android.material.shape.ShapeAppearanceModel\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.model.AbstractDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\n\n/**\n * helpful functions for working with the [MaterialDrawerSliderView]\n */\n\n\n/**\n * helper function to handle the onClick of the footer\n */\ninternal fun onFooterDrawerItemClick(sliderView: MaterialDrawerSliderView, drawerItem: IDrawerItem<*>, v: View, fireOnClick: Boolean?) {\n    val checkable = drawerItem.isSelectable\n    if (checkable) {\n        sliderView.resetStickyFooterSelection()\n\n        v.isActivated = true\n        v.isSelected = true\n\n        //remove the selection in the list\n        sliderView.selectExtension.deselect()\n\n        //find the position of the clicked footer item\n        if (sliderView.stickyFooterView != null && sliderView.stickyFooterView is LinearLayout) {\n            val footer = sliderView.stickyFooterView as LinearLayout\n            for (i in 0 until footer.childCount) {\n                if (footer.getChildAt(i) === v) {\n                    sliderView.currentStickyFooterSelection = i\n                    break\n                }\n            }\n        }\n    }\n\n    if (fireOnClick != null) {\n        var consumed = false\n\n        if (fireOnClick) {\n            if (drawerItem is AbstractDrawerItem<*, *> && drawerItem.onDrawerItemClickListener != null) {\n                consumed = drawerItem.onDrawerItemClickListener?.invoke(v, drawerItem, -1)\n                        ?: false\n            }\n\n            if (sliderView.onDrawerItemClickListener != null) {\n                consumed = sliderView.onDrawerItemClickListener?.invoke(v, drawerItem, -1)\n                        ?: false\n            }\n        }\n\n        if (!consumed) {\n            //close the drawer after click\n            sliderView.closeDrawerDelayed()\n        }\n    }\n}\n\n/**\n * helper function to handle the headerView\n */\ninternal fun handleHeaderView(sliderView: MaterialDrawerSliderView) {\n    //use the AccountHeader if set\n    sliderView.accountHeader?.let {\n        if (sliderView.accountHeaderSticky) {\n            sliderView.stickyHeaderView = it\n        } else {\n            sliderView._headerDivider = it.dividerBelowHeader\n            sliderView._headerPadding = it.paddingBelowHeader\n            sliderView.headerView = it\n        }\n    }\n\n    //sticky header view\n    sliderView.stickyHeaderView?.let {\n        sliderView.findViewById<View>(R.id.material_drawer_sticky_header)?.let { header ->\n            sliderView.removeView(header)\n        }\n\n        //add the sticky footer view and align it to the bottom\n        val layoutParams = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT)\n        layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP, 1)\n        it.id = R.id.material_drawer_sticky_header\n        sliderView.addView(it, 0, layoutParams)\n\n        //now align the recyclerView below the stickyFooterView ;)\n        val layoutParamsListView = sliderView.recyclerView.layoutParams as RelativeLayout.LayoutParams\n        layoutParamsListView.addRule(RelativeLayout.BELOW, R.id.material_drawer_sticky_header)\n        sliderView.recyclerView.layoutParams = layoutParamsListView\n\n        if (sliderView.stickyHeaderShadow) {\n            //add a shadow\n            if (Build.VERSION.SDK_INT >= 21) {\n                it.background = ColorDrawable(Color.WHITE) // set a background color or the elevation will not work, this is meant to be\n                it.elevation = sliderView.context.resources.getDimensionPixelSize(R.dimen.material_drawer_sticky_header_elevation).toFloat()\n            } else {\n                val view = View(sliderView.context)\n                view.setBackgroundResource(R.drawable.material_drawer_shadow_bottom)\n                sliderView.addView(view, RelativeLayout.LayoutParams.MATCH_PARENT, sliderView.context.resources.getDimensionPixelSize(R.dimen.material_drawer_sticky_header_elevation))\n                //now align the shadow below the stickyHeader ;)\n                val lps = view.layoutParams as RelativeLayout.LayoutParams\n                lps.addRule(RelativeLayout.BELOW, R.id.material_drawer_sticky_header)\n                view.layoutParams = lps\n            }\n        }\n        if (Build.VERSION.SDK_INT >= 21) {\n            sliderView.elevation = 0f\n        }\n        //remove the padding of the recyclerView again we have the header on top of it\n        sliderView.recyclerView.setPadding(0, 0, 0, 0)\n    }\n}\n\n/**\n * small helper to rebuild the FooterView\n */\ninternal fun rebuildStickyFooterView(sliderView: MaterialDrawerSliderView) {\n    sliderView.stickyFooterView?.let {\n        it.removeAllViews()\n\n        //create the divider\n        if (sliderView.stickyFooterDivider) {\n            addStickyFooterDivider(it.context, it)\n        }\n\n        //fill the footer with items\n        fillStickyDrawerItemFooter(sliderView, it) { v ->\n            (v.getTag(R.id.material_drawer_item) as? IDrawerItem<*>)?.let { drawerItem ->\n                onFooterDrawerItemClick(sliderView, drawerItem, v, true)\n            }\n        }\n\n        it.visibility = View.VISIBLE\n    } ?: run {\n        //there was no footer yet. now just create one\n        handleFooterView(sliderView) { v ->\n            (v.getTag(R.id.material_drawer_item) as? IDrawerItem<*>)?.let { drawerItem ->\n                onFooterDrawerItemClick(sliderView, drawerItem, v, true)\n            }\n        }\n    }\n\n    sliderView.setStickyFooterSelection(sliderView.currentStickyFooterSelection, false)\n}\n\n/**\n * helper function to handle the footerView\n */\ninternal fun handleFooterView(sliderView: MaterialDrawerSliderView, onClickListener: View.OnClickListener) {\n    val ctx = sliderView.context\n\n    //use the StickyDrawerItems if set\n    if (sliderView.stickyDrawerItems.size > 0) {\n        sliderView._stickyFooterView = buildStickyDrawerItemFooter(sliderView, onClickListener)\n    }\n\n    //sticky footer view\n    sliderView.stickyFooterView?.let {\n        //add the sticky footer view and align it to the bottom\n        val layoutParams = RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT)\n        layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, 1)\n        it.id = R.id.material_drawer_sticky_footer\n        sliderView.addView(it, layoutParams)\n\n        /**\n        if ((sliderView.mTranslucentNavigationBar || drawer.mFullscreen) && Build.VERSION.SDK_INT >= 19) {\n        it.setPadding(0, 0, 0, UIUtils.getNavigationBarHeight(ctx))\n        }\n         **/\n\n        //now align the recyclerView above the stickyFooterView ;)\n        val layoutParamsListView = sliderView.recyclerView.layoutParams as RelativeLayout.LayoutParams\n        layoutParamsListView.addRule(RelativeLayout.ABOVE, R.id.material_drawer_sticky_footer)\n        sliderView.recyclerView.layoutParams = layoutParamsListView\n\n        //handle shadow on top of the sticky footer\n        if (sliderView.stickyFooterShadow) {\n            sliderView.stickyFooterShadowView = View(ctx).also { stickyFooterShadowView ->\n                stickyFooterShadowView.setBackgroundResource(R.drawable.material_drawer_shadow_top)\n                sliderView.addView(stickyFooterShadowView, RelativeLayout.LayoutParams.MATCH_PARENT, ctx.resources.getDimensionPixelSize(R.dimen.material_drawer_sticky_footer_elevation))\n                //now align the shadow below the stickyHeader ;)\n                val lps = stickyFooterShadowView.layoutParams as RelativeLayout.LayoutParams\n                lps.addRule(RelativeLayout.ABOVE, R.id.material_drawer_sticky_footer)\n                stickyFooterShadowView.layoutParams = lps\n            }\n        }\n\n        //remove the padding of the recyclerView again we have the footer below it\n        sliderView.recyclerView.setPadding(sliderView.recyclerView.paddingLeft, sliderView.recyclerView.paddingTop, sliderView.recyclerView.paddingRight, ctx.resources.getDimensionPixelSize(R.dimen.material_drawer_padding))\n    }\n}\n\n\n/**\n * build the sticky footer item view\n */\ninternal fun buildStickyDrawerItemFooter(sliderView: MaterialDrawerSliderView, onClickListener: View.OnClickListener): ViewGroup {\n    //create the container view\n    val linearLayout = LinearLayout(sliderView.context)\n    linearLayout.layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)\n    linearLayout.orientation = LinearLayout.VERTICAL\n    //set the background color to the drawer background color (if it has alpha the shadow won't be visible)\n    //linearLayout.background = sliderView.background\n\n    //create the divider\n    if (sliderView.stickyFooterDivider) {\n        addStickyFooterDivider(sliderView.context, linearLayout)\n    }\n\n    fillStickyDrawerItemFooter(sliderView, linearLayout, onClickListener)\n\n    return linearLayout\n}\n\n/**\n * adds the shadow to the stickyFooter\n *\n * @param ctx\n * @param footerView\n */\nprivate fun addStickyFooterDivider(ctx: Context, footerView: ViewGroup) {\n    val divider = LinearLayout(ctx)\n    val dividerParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)\n    divider.minimumHeight = ctx.resources.getDimensionPixelSize(R.dimen.material_drawer_sticky_footer_divider)\n    divider.orientation = LinearLayout.VERTICAL\n    divider.setBackgroundColor(ctx.getDividerColor())\n    footerView.addView(divider, dividerParams)\n}\n\n/**\n * helper function to fill the sticky footer with its elements\n */\ninternal fun fillStickyDrawerItemFooter(sliderView: MaterialDrawerSliderView, container: ViewGroup, onClickListener: View.OnClickListener) {\n    //add all drawer items\n    for (drawerItem in sliderView.stickyDrawerItems) {\n        val view = drawerItem.generateView(container.context, container)\n        view.tag = drawerItem\n\n        if (drawerItem.isEnabled) {\n            //UIUtils.setBackground(view, UIUtils.getSelectableBackground(container.getContext(), selected_color, drawerItem.isSelectedBackgroundAnimated()));\n            view.setOnClickListener(onClickListener)\n        }\n\n        container.addView(view)\n\n        //for android API 17 --> Padding not applied via xml\n        setDrawerVerticalPadding(view)\n    }\n    //and really. don't ask about this. it won't set the padding if i don't set the padding for the container\n    container.setPadding(0, 0, 0, 0)\n}\n\n\n/**\n * helper to extend the layoutParams of the drawer\n *\n * @param params\n * @return\n */\n@SuppressLint(\"RtlHardcoded\")\nfun processDrawerLayoutParams(drawer: MaterialDrawerSliderView, params: DrawerLayout.LayoutParams?): DrawerLayout.LayoutParams? {\n    if (params != null) {\n        val drawerLayout = drawer.drawerLayout ?: return null\n        val ctx = drawerLayout.context\n\n        val lp = drawerLayout.layoutParams as DrawerLayout.LayoutParams\n        if (lp.gravity == Gravity.RIGHT || lp.gravity == Gravity.END) {\n            params.rightMargin = 0\n            if (Build.VERSION.SDK_INT >= 17) {\n                params.marginEnd = 0\n            }\n\n            params.leftMargin = ctx.resources.getDimensionPixelSize(R.dimen.material_drawer_margin)\n            if (Build.VERSION.SDK_INT >= 17) {\n                params.marginEnd = ctx.resources.getDimensionPixelSize(R.dimen.material_drawer_margin)\n            }\n        }\n\n        val customWidth = drawer.customWidth ?: -1\n        if (customWidth > -1) {\n            params.width = customWidth\n        } else {\n            params.width = getOptimalDrawerWidth(ctx)\n        }\n    }\n\n    return params\n}\n\n/**\n * helper function to get a person placeHolder drawable\n */\nfun getPlaceHolder(context: Context): Drawable {\n    val accountDrawable = AppCompatResources.getDrawable(context, R.drawable.material_drawer_ico_account_layer) as LayerDrawable\n    val placeholderSize = context.resources.getDimensionPixelSize(R.dimen.material_drawer_profile_icon_placeholder)\n    if (Build.VERSION.SDK_INT >= 23) {\n        accountDrawable.setLayerWidth(0, placeholderSize)\n        accountDrawable.setLayerHeight(0, placeholderSize)\n    }\n    DrawableCompat.wrap(accountDrawable.getDrawable(0)).let {\n        DrawableCompat.setTint(it, context.getThemeColor(android.R.attr.colorPrimary))\n        accountDrawable.setDrawableByLayerId(R.id.background, it)\n    }\n    val iconSize = context.resources.getDimensionPixelSize(R.dimen.material_drawer_profile_icon_placeholder_icon)\n    if (Build.VERSION.SDK_INT >= 23) {\n        accountDrawable.setLayerWidth(1, iconSize)\n        accountDrawable.setLayerHeight(1, iconSize)\n        accountDrawable.setLayerGravity(1, Gravity.CENTER)\n    }\n    DrawableCompat.wrap(accountDrawable.getDrawable(1)).let {\n        DrawableCompat.setTint(it, context.getThemeColor(android.R.attr.colorAccent))\n        accountDrawable.setDrawableByLayerId(R.id.account, it)\n    }\n    return accountDrawable\n    //IconicsDrawable(ctx, MaterialDrawerFont.Icon.mdf_person).color(IconicsColor.colorInt(ctx.getThemeColor(R.attr.colorAccent))).backgroundColor(IconicsColor.colorInt(ctx.getThemeColor(R.attr.colorPrimary))).size(IconicsSize.dp(56)).padding(IconicsSize.dp(16))\n}\n\n\n/**\n * helper to set the vertical padding to the DrawerItems\n * this is required because on API Level 17 the padding is ignored which is set via the XML\n */\nfun setDrawerVerticalPadding(view: View) {\n    val verticalPadding = view.context.resources.getDimensionPixelSize(R.dimen.material_drawer_vertical_padding)\n    view.setPadding(verticalPadding, 0, verticalPadding, 0)\n}\n\n/**\n * Util method to theme the drawer item view's background (and foreground if possible)\n *\n * @param ctx            the context to use\n * @param view           the view to theme\n * @param selectedColor the selected color to use\n * @param animate        true if we want to animate the StateListDrawable\n * @param shapeAppearanceModel defines the shape appearance to use for items starting API 21\n * @param paddingTopBottomRes padding on top and bottom of the drawable for selection drawable\n * @param paddingStartRes padding to the beginning of the selection drawable\n * @param paddingEndRes padding to the end of the selection drawable\n * @param highlightColorRes the color for the highlight to use (e.g. touch the item, when it get's filled)\n */\nfun themeDrawerItem(\n        ctx: Context,\n        view: View,\n        selectedColor: Int,\n        animate: Boolean,\n        shapeAppearanceModel: ShapeAppearanceModel,\n        @DimenRes paddingTopBottomRes: Int = R.dimen.material_drawer_item_background_padding_top_bottom,\n        @DimenRes paddingStartRes: Int = R.dimen.material_drawer_item_background_padding_start,\n        @DimenRes paddingEndRes: Int = R.dimen.material_drawer_item_background_padding_end,\n        @AttrRes highlightColorRes: Int = android.R.attr.colorControlHighlight,\n        /* a hint for the drawable if it should already be selected at the very moment */\n        isSelected: Boolean = false\n) {\n    val selected: Drawable\n    val unselected: Drawable\n\n    // Material 3.0 styling\n    val paddingTopBottom = ctx.resources.getDimensionPixelSize(paddingTopBottomRes)\n    val paddingStart = ctx.resources.getDimensionPixelSize(paddingStartRes)\n    val paddingEnd = ctx.resources.getDimensionPixelSize(paddingEndRes)\n\n    // define normal selected background\n    val gradientDrawable = MaterialShapeDrawable(shapeAppearanceModel)\n    gradientDrawable.fillColor = ColorStateList.valueOf(selectedColor)\n    selected = InsetDrawable(gradientDrawable, paddingStart, paddingTopBottom, paddingEnd, paddingTopBottom)\n\n    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n        // define mask for ripple\n        val gradientMask = MaterialShapeDrawable(shapeAppearanceModel)\n        gradientMask.fillColor = ColorStateList.valueOf(Color.BLACK)\n        val mask = InsetDrawable(gradientMask, paddingStart, paddingTopBottom, paddingEnd, paddingTopBottom)\n\n        unselected = RippleDrawable(ColorStateList(arrayOf(intArrayOf()), intArrayOf(ctx.getThemeColor(highlightColorRes))), null, mask)\n    } else {\n        // define touch drawable\n        val touchDrawable = MaterialShapeDrawable(shapeAppearanceModel)\n        touchDrawable.fillColor = ColorStateList.valueOf(ctx.getThemeColor(highlightColorRes))\n        val touchInsetDrawable = InsetDrawable(touchDrawable, paddingStart, paddingTopBottom, paddingEnd, paddingTopBottom)\n\n        val unselectedStates = StateListDrawable()\n        //if possible and wanted we enable animating across states\n        if (animate) {\n            val duration = ctx.resources.getInteger(android.R.integer.config_shortAnimTime)\n            unselectedStates.setEnterFadeDuration(duration)\n            unselectedStates.setExitFadeDuration(duration)\n        }\n        unselectedStates.addState(intArrayOf(android.R.attr.state_pressed), touchInsetDrawable)\n        unselectedStates.addState(intArrayOf(), ColorDrawable(Color.TRANSPARENT))\n        unselected = unselectedStates\n    }\n\n    val states = StateListDrawable()\n\n    //if possible and wanted we enable animating across states\n    if (animate) {\n        val duration = ctx.resources.getInteger(android.R.integer.config_shortAnimTime)\n        states.setEnterFadeDuration(duration)\n        states.setExitFadeDuration(duration)\n    }\n\n    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {\n        states.addState(intArrayOf(android.R.attr.state_selected), selected)\n        states.addState(intArrayOf(), ColorDrawable(Color.TRANSPARENT))\n\n        ViewCompat.setBackground(view, states)\n        view.foreground = unselected\n    } else {\n        states.addState(intArrayOf(android.R.attr.state_selected), selected)\n        states.addState(intArrayOf(), unselected)\n\n        ViewCompat.setBackground(view, states)\n    }\n\n    if (isSelected && animate) {\n        states.state = intArrayOf(android.R.attr.state_selected)\n        states.jumpToCurrentState()\n    }\n}\n\n/**\n * helper to create a stateListDrawable for the icon\n */\ninternal fun getIconStateList(icon: Drawable, selectedIcon: Drawable): StateListDrawable {\n    val iconStateListDrawable = StateListDrawable()\n    iconStateListDrawable.addState(intArrayOf(android.R.attr.state_selected), selectedIcon)\n    iconStateListDrawable.addState(intArrayOf(), icon)\n    return iconStateListDrawable\n}\n\n/**\n * helper to calculate the optimal drawer width\n */\nfun getOptimalDrawerWidth(context: Context): Int {\n    val possibleMinDrawerWidth = context.getScreenWidth() - context.getActionBarHeight()\n    val maxDrawerWidth = context.resources.getDimensionPixelSize(R.dimen.material_drawer_width)\n    return possibleMinDrawerWidth.coerceAtMost(maxDrawerWidth)\n}"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/util/Extensions.kt",
    "content": "package com.mikepenz.materialdrawer.util\n\nimport android.os.Build\nimport android.view.View\nimport android.widget.LinearLayout\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\n\n/**\n * helper to set the vertical padding including the extra padding for deeper item hirachy level to the DrawerItems\n * this is required because on API Level 17 the padding is ignored which is set via the XML\n */\ninternal fun View.setDrawerVerticalPadding(level: Int) {\n    val verticalPadding = context.resources.getDimensionPixelSize(R.dimen.material_drawer_vertical_padding)\n    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {\n        setPaddingRelative(verticalPadding * level, 0, verticalPadding, 0)\n    } else {\n        setPadding(verticalPadding * level, 0, verticalPadding, 0)\n    }\n}\n\n\n/**\n * helper method to set the selection of the footer\n */\nfun MaterialDrawerSliderView.setStickyFooterSelection(position: Int, fireOnClick: Boolean?) {\n    if (position > -1) {\n        var position = position\n        if (stickyFooterView != null && stickyFooterView is LinearLayout) {\n            val footer = stickyFooterView as LinearLayout\n            if (stickyFooterDivider) {\n                position += 1\n            }\n            if (footer.childCount > position && position >= 0) {\n                val drawerItem = footer.getChildAt(position).getTag(R.id.material_drawer_item) as IDrawerItem<*>\n                onFooterDrawerItemClick(this, drawerItem, footer.getChildAt(position), fireOnClick)\n            }\n        }\n    }\n}\n\n/**\n * calculates the position of an drawerItem. searching by its identifier\n */\n@Deprecated(\"Please use getPosition instead\", ReplaceWith(\"getPosition\"))\nfun MaterialDrawerSliderView.getPositionByIdentifier(identifier: Long): Int {\n    if (identifier != -1L) {\n        for (i in 0 until adapter.itemCount) {\n            if (adapter.getItem(i)?.identifier == identifier) {\n                return i\n            }\n        }\n    }\n\n    return -1\n}\n\n/**\n * gets the drawerItem with the specific identifier from a drawerItem list\n */\nfun List<IDrawerItem<*>>.getDrawerItem(identifier: Long): IDrawerItem<*>? {\n    if (identifier != -1L) {\n        for (drawerItem in this) {\n            if (drawerItem.identifier == identifier) {\n                return drawerItem\n            }\n        }\n    }\n    return null\n}\n\n/**\n * gets the drawerItem by a defined tag from a drawerItem list\n */\nfun List<IDrawerItem<*>>.getDrawerItem(tag: Any?): IDrawerItem<*>? {\n    if (tag != null) {\n        for (drawerItem in this) {\n            if (tag == drawerItem.tag) {\n                return drawerItem\n            }\n        }\n    }\n    return null\n}\n\n/**\n * calculates the position of an drawerItem inside the footer. searching by its identifier\n */\nfun MaterialDrawerSliderView.getStickyFooterPositionByIdentifier(identifier: Long): Int {\n    if (identifier != -1L) {\n        if (stickyFooterView != null && stickyFooterView is LinearLayout) {\n            val footer = stickyFooterView as LinearLayout\n\n            var shadowOffset = 0\n            for (i in 0 until footer.childCount) {\n                val o = footer.getChildAt(i).getTag(R.id.material_drawer_item)\n\n                //count up the shadowOffset to return the correct position of the given item\n                if (o == null && stickyFooterDivider) {\n                    shadowOffset += 1\n                }\n\n                if (o != null && o is IDrawerItem<*> && o.identifier == identifier) {\n                    return i - shadowOffset\n                }\n            }\n        }\n    }\n\n    return -1\n}"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/util/FixStateListDrawable.kt",
    "content": "package com.mikepenz.materialdrawer.util\n\nimport android.R\nimport android.annotation.SuppressLint\nimport android.content.res.ColorStateList\nimport android.graphics.PorterDuff\nimport android.graphics.drawable.Drawable\nimport android.graphics.drawable.StateListDrawable\n\n/**\n * http://stackoverflow.com/questions/7979440/android-cloning-a-drawable-in-order-to-make-a-statelistdrawable-with-filters\n * http://stackoverflow.com/users/2075875/malachiasz\n */\n@SuppressLint(\"InlinedApi\")\nclass FixStateListDrawable : StateListDrawable {\n    var color: ColorStateList?\n\n    constructor(drawable: Drawable, color: ColorStateList?) : super() {\n        var drawable = drawable\n        drawable = drawable.mutate()\n        addState(intArrayOf(R.attr.state_selected), drawable)\n        addState(intArrayOf(), drawable)\n        this.color = color\n    }\n\n    constructor(drawable: Drawable, selectedDrawable: Drawable, color: ColorStateList?) : super() {\n        var drawable = drawable\n        var selectedDrawable = selectedDrawable\n        drawable = drawable.mutate()\n        selectedDrawable = selectedDrawable.mutate()\n        addState(intArrayOf(R.attr.state_selected), selectedDrawable)\n        addState(intArrayOf(), drawable)\n        this.color = color\n    }\n\n    override fun onStateChange(states: IntArray): Boolean {\n        val color = color\n        if (color != null) {\n            super.setColorFilter(color.getColorForState(states, color.defaultColor), PorterDuff.Mode.SRC_IN)\n        }\n        return super.onStateChange(states)\n    }\n\n    override fun isStateful(): Boolean {\n        return true\n    }\n}"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/util/MaterialDrawerSliderViewExtensions.kt",
    "content": "package com.mikepenz.materialdrawer.util\n\nimport com.mikepenz.materialdrawer.holder.ImageHolder\nimport com.mikepenz.materialdrawer.holder.StringHolder\nimport com.mikepenz.materialdrawer.model.interfaces.*\nimport com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\nimport java.util.*\n\n/**\n * Add a drawerItem at a specific position\n *\n * @param drawerItem\n * @param position\n */\nfun MaterialDrawerSliderView.addItemAtPosition(position: Int, drawerItem: IDrawerItem<*>) {\n    itemAdapter.add(position, drawerItem)\n}\n\n/**\n * Set a drawerItem at a specific position\n */\nfun MaterialDrawerSliderView.setItemAtPosition(position: Int, drawerItem: IDrawerItem<*>) {\n    itemAdapter[position] = drawerItem\n}\n\n/**\n * Remove a drawerItem at a specific position\n */\nfun MaterialDrawerSliderView.removeItemByPosition(position: Int) {\n    if (checkDrawerItem(position, false)) {\n        itemAdapter.remove(position)\n    }\n}\n\n/**\n * remove a list of drawerItems by their identifiers\n */\nfun MaterialDrawerSliderView.removeItems(vararg identifiers: Long) {\n    identifiers.forEach {\n        itemAdapter.removeByIdentifier(it)\n    }\n}\n\n/**\n * remove all items from this drawer\n */\nfun MaterialDrawerSliderView.removeAllItems() {\n    itemAdapter.clear()\n}\n\n/**\n * remove single ore more drawerItems via their identifier\n */\nfun MaterialDrawerSliderView.removeItems(vararg drawerItems: IDrawerItem<*>) {\n    drawerItems.forEach {\n        itemAdapter.removeByIdentifier(it.identifier)\n    }\n}\n\n/**\n * set single ore more DrawerItems to the Drawer\n */\nfun MaterialDrawerSliderView.setItems(vararg drawerItems: IDrawerItem<*>) {\n    itemAdapter.set(drawerItems.asList())\n}\n\n/**\n * add single ore more DrawerItems to the Drawer\n */\nfun MaterialDrawerSliderView.addItems(vararg drawerItems: IDrawerItem<*>) {\n    itemAdapter.add(*drawerItems)\n}\n\n/**\n * add single ore more DrawerItems to the Drawer\n */\nfun MaterialDrawerSliderView.addItemsAtPosition(position: Int, vararg drawerItems: IDrawerItem<*>) {\n    itemAdapter.add(position, *drawerItems)\n}\n\n/**\n * calculates the position of an drawerItem. searching by its identifier\n *\n * @param drawerItem\n * @return\n */\nfun MaterialDrawerSliderView.getPosition(drawerItem: IDrawerItem<*>): Int {\n    return getPosition(drawerItem.identifier)\n}\n\n/**\n * calculates the position of an drawerItem. searching by its identifier\n *\n * @param identifier\n * @return\n */\nfun MaterialDrawerSliderView.getPosition(identifier: Long): Int {\n    return this.getPositionByIdentifier(identifier)\n}\n\n/**\n * returns the DrawerItem by the given identifier\n *\n * @param identifier\n * @return\n */\nfun MaterialDrawerSliderView.getDrawerItem(identifier: Long): IDrawerItem<*>? {\n    val res = adapter.getItemById(identifier)\n    return res?.first\n}\n\n/**\n * returns the found drawerItem by the given tag\n *\n * @param tag\n * @return\n */\nfun MaterialDrawerSliderView.getDrawerItem(tag: Any): IDrawerItem<*>? {\n    return itemAdapter.adapterItems.getDrawerItem(tag)\n}\n\n/**\n * update a specific drawer item :D\n * automatically identified by its id\n *\n * @param drawerItem\n */\nfun MaterialDrawerSliderView.updateItem(drawerItem: IDrawerItem<*>) {\n    updateItemAtPosition(drawerItem, getPosition(drawerItem))\n}\n\n/**\n * update the badge for a specific drawerItem\n * identified by its id\n *\n * @param identifier\n * @param badge\n */\nfun MaterialDrawerSliderView.updateBadge(identifier: Long, badge: StringHolder) {\n    val drawerItem = getDrawerItem(identifier)\n    if (drawerItem is Badgeable) {\n        drawerItem.withBadge(badge)\n        updateItem(drawerItem)\n    }\n}\n\n/**\n * update the name for a specific drawerItem\n * identified by its id\n *\n * @param identifier\n * @param name\n */\nfun MaterialDrawerSliderView.updateName(identifier: Long, name: StringHolder) {\n    val drawerItem = getDrawerItem(identifier)\n    if (drawerItem is Nameable) {\n        drawerItem.withName(name)\n        updateItem(drawerItem)\n    }\n}\n\n/**\n * update the name for a specific drawerItem\n * identified by its id\n *\n * @param identifier\n * @param image\n */\nfun MaterialDrawerSliderView.updateIcon(identifier: Long, image: ImageHolder) {\n    val drawerItem = getDrawerItem(identifier)\n    if (drawerItem is Iconable) {\n        drawerItem.withIcon(image)\n        updateItem(drawerItem)\n    }\n}\n\n/**\n * Update a drawerItem at a specific position\n *\n * @param drawerItem\n * @param position\n */\nfun MaterialDrawerSliderView.updateItemAtPosition(drawerItem: IDrawerItem<*>, position: Int) {\n    if (checkDrawerItem(position, false)) {\n        itemAdapter[position] = drawerItem\n    }\n}\n\n/**\n * check if the item is within the bounds of the list\n *\n * @param position\n * @param includeOffset\n * @return\n */\ninternal fun MaterialDrawerSliderView.checkDrawerItem(position: Int, includeOffset: Boolean): Boolean {\n    return adapter.getItem(position) != null\n}\n\n/**\n * calculates the position of an drawerItem. searching by it's identifier\n *\n * @param drawerItem\n * @return\n */\nfun MaterialDrawerSliderView.getStickyFooterPosition(drawerItem: IDrawerItem<*>): Int {\n    return getStickyFooterPositionByIdentifier(drawerItem.identifier)\n}\n\n/**\n * update a specific footerDrawerItem :D\n * automatically identified by its id\n *\n * @param drawerItem\n */\nfun MaterialDrawerSliderView.updateStickyFooterItem(drawerItem: IDrawerItem<*>) {\n    updateStickyFooterItemAtPosition(drawerItem, getStickyFooterPosition(drawerItem))\n}\n\n/**\n * update a footerDrawerItem at a specific position\n *\n * @param drawerItem\n * @param position\n */\nfun MaterialDrawerSliderView.updateStickyFooterItemAtPosition(drawerItem: IDrawerItem<*>, position: Int) {\n    if (stickyDrawerItems.size > position) {\n        stickyDrawerItems[position] = drawerItem\n    }\n    handleStickyFooterView()\n}\n\n\n/**\n * Add a footerDrawerItem at the end\n *\n * @param drawerItem\n */\nfun MaterialDrawerSliderView.addStickyFooterItem(drawerItem: IDrawerItem<*>) {\n    stickyDrawerItems.add(drawerItem)\n    handleStickyFooterView()\n}\n\n/**\n * Add an initial DrawerItem or a DrawerItem Array for the StickyDrawerFooter\n */\nfun MaterialDrawerSliderView.addStickyDrawerItems(vararg stickyDrawerItems: IDrawerItem<*>) {\n    Collections.addAll(this.stickyDrawerItems, *stickyDrawerItems)\n    handleStickyFooterView()\n}\n\n/**\n * Add a footerDrawerItem at a specific position\n *\n * @param drawerItem\n * @param position\n */\nfun MaterialDrawerSliderView.addStickyFooterItemAtPosition(drawerItem: IDrawerItem<*>, position: Int) {\n    stickyDrawerItems.add(position, drawerItem)\n    handleStickyFooterView()\n}\n\n/**\n * Set a footerDrawerItem at a specific position\n *\n * @param drawerItem\n * @param position\n */\nfun MaterialDrawerSliderView.setStickyFooterItemAtPosition(drawerItem: IDrawerItem<*>, position: Int) {\n    if (stickyDrawerItems.size > position) {\n        stickyDrawerItems[position] = drawerItem\n    }\n    handleStickyFooterView()\n}\n\n\n/**\n * Remove a footerDrawerItem at a specific position\n *\n * @param position\n */\nfun MaterialDrawerSliderView.removeStickyFooterItemAtPosition(position: Int) {\n    if (stickyDrawerItems.size > position) {\n        stickyDrawerItems.removeAt(position)\n    }\n    handleStickyFooterView()\n}\n\n/**\n * Removes all footerItems from drawer\n */\nfun MaterialDrawerSliderView.removeAllStickyFooterItems() {\n    stickyDrawerItems.clear()\n    handleStickyFooterView()\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/util/MenuDrawerUtils.kt",
    "content": "package com.mikepenz.materialdrawer.util\n\nimport android.annotation.SuppressLint\nimport android.view.Menu\nimport androidx.annotation.MenuRes\nimport androidx.appcompat.view.SupportMenuInflater\nimport androidx.appcompat.view.menu.MenuBuilder\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.model.DividerDrawerItem\nimport com.mikepenz.materialdrawer.model.PrimaryDrawerItem\nimport com.mikepenz.materialdrawer.model.SecondaryDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.iconDrawable\nimport com.mikepenz.materialdrawer.model.interfaces.nameText\nimport com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\n\n/**\n * Inflates the DrawerItems from a menu.xml\n */\n@SuppressLint(\"RestrictedApi\")\nfun MaterialDrawerSliderView.inflateMenu(@MenuRes menuRes: Int) {\n    val menuInflater = SupportMenuInflater(context)\n    val mMenu = MenuBuilder(context)\n\n    menuInflater.inflate(menuRes, mMenu)\n\n    addMenuItems(mMenu, false)\n}\n\n/**\n * helper method to init the drawerItems from a menu\n */\nprivate fun MaterialDrawerSliderView.addMenuItems(mMenu: Menu?, subMenu: Boolean) {\n    mMenu ?: return\n    var groupId = R.id.material_drawer_menu_default_group\n    for (i in 0 until mMenu.size()) {\n        val mMenuItem = mMenu.getItem(i)\n        var iDrawerItem: IDrawerItem<*>\n        if (!subMenu && mMenuItem.groupId != groupId && mMenuItem.groupId != 0) {\n            groupId = mMenuItem.groupId\n            iDrawerItem = DividerDrawerItem()\n            itemAdapter.add(iDrawerItem)\n        }\n        if (mMenuItem.hasSubMenu()) {\n            iDrawerItem = PrimaryDrawerItem().apply {\n                nameText = mMenuItem.title ?: \"\"\n                iconDrawable = mMenuItem.icon\n                identifier = mMenuItem.itemId.toLong()\n                isEnabled = mMenuItem.isEnabled\n                isSelectable = false\n            }\n            itemAdapter.add(iDrawerItem)\n            addMenuItems(mMenuItem.subMenu, true)\n        } else if (mMenuItem.groupId != 0 || subMenu) {\n            iDrawerItem = SecondaryDrawerItem().apply {\n                nameText = mMenuItem.title ?: \"\"\n                iconDrawable = mMenuItem.icon\n                identifier = mMenuItem.itemId.toLong()\n                isEnabled = mMenuItem.isEnabled\n            }\n            itemAdapter.add(iDrawerItem)\n        } else {\n            iDrawerItem = PrimaryDrawerItem().apply {\n                nameText = mMenuItem.title ?: \"\"\n                iconDrawable = mMenuItem.icon\n                identifier = mMenuItem.itemId.toLong()\n                isEnabled = mMenuItem.isEnabled\n            }\n            itemAdapter.add(iDrawerItem)\n        }\n    }\n}"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/util/Utils.kt",
    "content": "package com.mikepenz.materialdrawer.util\n\nimport android.content.Context\nimport android.content.res.ColorStateList\nimport android.content.res.TypedArray\nimport android.graphics.drawable.ColorDrawable\nimport android.graphics.drawable.Drawable\nimport android.graphics.drawable.StateListDrawable\nimport android.util.TypedValue\nimport androidx.annotation.*\nimport androidx.appcompat.content.res.AppCompatResources\nimport androidx.core.content.ContextCompat\nimport androidx.core.content.res.ResourcesCompat\nimport com.mikepenz.materialdrawer.R\n\n\nprivate val CHECKED_STATE_SET = intArrayOf(android.R.attr.state_checked)\ninternal val SELECTED_STATE_SET = intArrayOf(android.R.attr.state_selected)\nprivate val DISABLED_STATE_SET = intArrayOf(-android.R.attr.state_enabled)\nprivate val EMPTY_STATE_SET = intArrayOf()\n\n\ninternal fun Context.getPrimaryDrawerTextColor(): ColorStateList {\n    return createDrawerItemColorStateList(this, R.styleable.MaterialDrawerSliderView_materialDrawerPrimaryText)!!\n}\n\ninternal fun Context.getPrimaryDrawerIconColor(): ColorStateList {\n    return createDrawerItemColorStateList(this, R.styleable.MaterialDrawerSliderView_materialDrawerPrimaryIcon)!!\n}\n\ninternal fun Context.getSecondaryDrawerTextColor(): ColorStateList {\n    return createDrawerItemColorStateList(this, R.styleable.MaterialDrawerSliderView_materialDrawerSecondaryText)!!\n}\n\ninternal fun Context.getSecondaryDrawerIconColor(): ColorStateList {\n    return createDrawerItemColorStateList(this, R.styleable.MaterialDrawerSliderView_materialDrawerSecondaryIcon)!!\n}\n\nfun createDrawerItemColorStateList(ctx: Context, @StyleableRes styleableRes: Int): ColorStateList? {\n    val a = ctx.obtainStyledAttributes(null, R.styleable.MaterialDrawerSliderView, R.attr.materialDrawerStyle, R.style.Widget_MaterialDrawerStyle)\n    val baseColorResId = a.getResourceId(styleableRes, -1)\n    a.recycle()\n\n    return if (baseColorResId != -1) {\n        AppCompatResources.getColorStateList(ctx, baseColorResId)\n    } else {\n        null\n    }\n}\n\n@ColorInt\nfun Context.getDividerColor(): Int {\n    return resolveStyledValue {\n        it.getColor(\n            R.styleable.MaterialDrawerSliderView_materialDrawerDividerColor,\n            getThemeColor(R.attr.materialDrawerDividerColor, getSupportColor(R.color.material_drawer_divider))\n        )\n    }\n}\n\n@ColorInt\ninternal fun Context.getSelectedColor(): Int {\n    val color = resolveStyledValue {\n        it.getColor(\n            R.styleable.MaterialDrawerSliderView_materialDrawerSelectedBackgroundColor,\n            getThemeColor(R.attr.materialDrawerSelectedBackgroundColor, getSupportColor(R.color.material_drawer_selected))\n        )\n    }\n    return color\n}\n\ninternal fun Context.getHeaderSelectionTextColor(): ColorStateList {\n    return resolveStyledHeaderValue {\n        val resId = it.getResourceId(R.styleable.AccountHeaderView_materialDrawerHeaderSelectionText, -1)\n        AppCompatResources.getColorStateList(this, resId)\n    }\n}\n\ninternal fun Context.getHeaderSelectionSubTextColor(): ColorStateList {\n    return resolveStyledHeaderValue {\n        val resId = it.getResourceId(R.styleable.AccountHeaderView_materialDrawerHeaderSelectionSubtext, -1)\n        AppCompatResources.getColorStateList(this, resId)\n    }\n}\n\ninternal fun <T> Context.resolveStyledHeaderValue(resolver: (typedArray: TypedArray) -> T): T {\n    return resolveStyledValue(R.styleable.AccountHeaderView, R.attr.materialDrawerHeaderStyle, R.style.Widget_MaterialDrawerHeaderStyle, resolver)\n}\n\ninternal fun <T> Context.resolveStyledValue(\n    attrs: IntArray = R.styleable.MaterialDrawerSliderView,\n    defStyleAttr: Int = R.attr.materialDrawerStyle,\n    defStyleRes: Int = R.style.Widget_MaterialDrawerStyle,\n    resolver: (typedArray: TypedArray) -> T\n): T {\n    val a = obtainStyledAttributes(null, attrs, defStyleAttr, defStyleRes)\n    val value = resolver.invoke(a)\n    a.recycle()\n    return value\n}\n\n/**\n * a helper method to get the color from the context\n * @hide\n */\n@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)\ninternal fun Context.getSupportColor(@ColorRes def: Int = 0): Int {\n    return ContextCompat.getColor(this, def)\n}\n\n\n/**\n * helper to retrieve a float from the resources class\n * @hide\n */\n@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)\ninternal fun Context.getSupportFloat(@DimenRes dimen: Int): Float {\n    return ResourcesCompat.getFloat(this.resources, dimen)\n}\n\n/**\n * a helper method to get the color from an attribute\n * @hide\n */\n@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)\ninternal fun Context.getThemeColor(@AttrRes attr: Int, @ColorInt def: Int = 0): Int {\n    val tv = TypedValue()\n    return if (theme.resolveAttribute(attr, tv, true)) {\n        if (tv.resourceId != 0) ResourcesCompat.getColor(resources, tv.resourceId, theme) else tv.data\n    } else def\n}\n\n/**\n * helper method to get the color by attr (which is defined in the style) or by resource.\n * @hide\n */\n@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)\ninternal fun Context.getThemeColorFromAttrOrRes(@AttrRes attr: Int, @ColorRes res: Int): Int {\n    var color = getThemeColor(attr)\n    if (color == 0) {\n        color = ResourcesCompat.getColor(resources, res, theme)\n    }\n    return color\n}\n\n/**\n * helper to get the system default selectable background res\n */\ninternal fun Context.getSelectableBackgroundRes(): Int {\n    val outValue = TypedValue()\n    //it is important here to not use the android.R because this wouldn't add the latest drawable\n    this.theme.resolveAttribute(android.R.attr.selectableItemBackground, outValue, true)\n    return outValue.resourceId\n}\n\n\n/**\n * helper to get the system default selectable background\n */\ninternal fun Context.getSelectableBackground(): Drawable? {\n    val selectableBackgroundRes = getSelectableBackgroundRes()\n    return ContextCompat.getDrawable(this, selectableBackgroundRes)\n}\n\n/**\n * helper to get the system default selectable background inclusive an active state\n *\n * @param selected_color the selected color\n * @param animate        true if you want to fade over the states (only animates if API newer than Build.VERSION_CODES.HONEYCOMB)\n * @return the StateListDrawable\n */\ninternal fun Context.getSelectableBackground(selected_color: Int, animate: Boolean): StateListDrawable? {\n    val states = StateListDrawable()\n    val clrActive = ColorDrawable(selected_color)\n    states.addState(intArrayOf(android.R.attr.state_selected), clrActive)\n    states.addState(intArrayOf(), getSelectableBackground())\n    //if possible and wanted we enable animating across states\n    if (animate) {\n        val duration = resources.getInteger(android.R.integer.config_shortAnimTime)\n        states.setEnterFadeDuration(duration)\n        states.setExitFadeDuration(duration)\n    }\n    return states\n}\n\n/**\n * Returns the screen width in pixels\n *\n * @return the screen width in pixels\n */\ninternal fun Context.getScreenWidth(): Int {\n    val metrics = resources.displayMetrics\n    return metrics.widthPixels\n}\n\n/**\n * helper to calculate the actionBar height\n */\ninternal fun Context.getActionBarHeight(): Int {\n    var actionBarHeight: Int = getThemeAttributeDimensionSize(android.R.attr.actionBarSize)\n    if (actionBarHeight == 0) {\n        actionBarHeight = resources.getDimensionPixelSize(androidx.appcompat.R.dimen.abc_action_bar_default_height_material)\n    }\n    return actionBarHeight\n}\n\n/**\n * Returns the size in pixels of an attribute dimension\n *\n * @param attr    is the attribute dimension we want to know the size from\n * @return the size in pixels of an attribute dimension\n */\ninternal fun Context.getThemeAttributeDimensionSize(@AttrRes attr: Int): Int {\n    var a: TypedArray? = null\n    return try {\n        a = theme.obtainStyledAttributes(intArrayOf(attr))\n        a.getDimensionPixelSize(0, 0)\n    } finally {\n        a?.recycle()\n    }\n}"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/view/BezelImageView.kt",
    "content": "/*\n * Copyright 2014 Google Inc. All rights reserved.\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 * The original is from Google you can find here:\n * https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/BezelImageView.java\n *\n * Modified and improved with additional functionality by Mike Penz\n */\n\npackage com.mikepenz.materialdrawer.view\n\nimport android.annotation.TargetApi\nimport android.content.Context\nimport android.graphics.*\nimport android.graphics.drawable.Drawable\nimport android.os.Build\nimport android.util.AttributeSet\nimport android.view.MotionEvent\nimport android.view.View\nimport android.view.ViewOutlineProvider\nimport androidx.appcompat.widget.AppCompatImageView\nimport androidx.core.view.ViewCompat\nimport com.mikepenz.materialdrawer.R\n\n\n/**\n * An [android.widget.ImageView] that draws its contents inside a mask and draws a border\n * drawable on top. This is useful for applying a beveled look to image contents, but is also\n * flexible enough for use with other desired aesthetics.\n */\nopen class BezelImageView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0) : AppCompatImageView(context, attrs, defStyle) {\n    private val mBlackPaint: Paint\n    private val mMaskedPaint: Paint\n\n    private var mBounds: Rect? = null\n    private var mBoundsF: RectF? = null\n\n    private val mMaskDrawable: Drawable?\n    private var mDrawCircularShadow = true\n\n    private var mDesaturateColorFilter: ColorMatrixColorFilter? = null\n\n    private val mSelectorAlpha = 150\n    private var mSelectorColor: Int = 0\n    private var mSelectorFilter: ColorFilter? = null\n\n    private var mCacheValid = false\n    private var mCacheBitmap: Bitmap\n    private var mCachedWidth: Int = 0\n    private var mCachedHeight: Int = 0\n\n    private var mIsPressed = false\n    private var mIsSelected: Boolean = false\n\n    private var mTempDesaturateColorFilter: ColorMatrixColorFilter? = null\n    private var mTempSelectorFilter: ColorFilter? = null\n\n    init {\n\n        // Attribute initialization\n        val a = context.obtainStyledAttributes(attrs, R.styleable.BezelImageView, defStyle, R.style.BezelImageView)\n\n        mMaskDrawable = a.getDrawable(R.styleable.BezelImageView_materialDrawerMaskDrawable)\n        if (mMaskDrawable != null) {\n            mMaskDrawable.callback = this\n        }\n\n        mDrawCircularShadow = a.getBoolean(R.styleable.BezelImageView_materialDrawerDrawCircularShadow, true)\n\n        mSelectorColor = a.getColor(R.styleable.BezelImageView_materialDrawerSelectorOnPress, 0)\n\n        a.recycle()\n\n        // Other initialization\n        mBlackPaint = Paint()\n        mBlackPaint.color = -0x1000000\n\n        mMaskedPaint = Paint()\n        mMaskedPaint.xfermode = PorterDuffXfermode(PorterDuff.Mode.SRC_IN)\n\n        // Always want a cache allocated.\n        mCacheBitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888)\n\n        // Create a desaturate color filter for pressed state.\n        val cm = ColorMatrix()\n        cm.setSaturation(0f)\n        mDesaturateColorFilter = ColorMatrixColorFilter(cm)\n\n        //create a selectorFilter if we already have a color\n        if (mSelectorColor != 0) {\n            this.mSelectorFilter = PorterDuffColorFilter(Color.argb(mSelectorAlpha, Color.red(mSelectorColor), Color.green(mSelectorColor), Color.blue(mSelectorColor)), PorterDuff.Mode.SRC_ATOP)\n        }\n    }\n\n    override fun onSizeChanged(w: Int, h: Int, old_w: Int, old_h: Int) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n            if (mDrawCircularShadow) {\n                outlineProvider = CustomOutline(w, h)\n            }\n        }\n    }\n\n    @TargetApi(21)\n    private inner class CustomOutline internal constructor(internal var width: Int, internal var height: Int) : ViewOutlineProvider() {\n\n        override fun getOutline(view: View, outline: Outline) {\n            outline.setOval(0, 0, width, height)\n        }\n    }\n\n    override fun setFrame(l: Int, t: Int, r: Int, b: Int): Boolean {\n        val changed = super.setFrame(l, t, r, b)\n        mBounds = Rect(0, 0, r - l, b - t).also {\n            mBoundsF = RectF(it)\n\n            if (mMaskDrawable != null) {\n                mMaskDrawable.bounds = it\n            }\n        }\n\n        if (changed) {\n            mCacheValid = false\n        }\n\n        return changed\n    }\n\n    override fun onDraw(canvas: Canvas) {\n        val bounds = mBounds ?: return\n\n        val width = bounds.width()\n        val height = bounds.height()\n\n        if (width == 0 || height == 0) {\n            return\n        }\n\n        if (!mCacheValid || width != mCachedWidth || height != mCachedHeight || mIsSelected != mIsPressed) {\n            // Need to redraw the cache\n            if (width == mCachedWidth && height == mCachedHeight) {\n                // Have a correct-sized bitmap cache already allocated. Just erase it.\n                mCacheBitmap.eraseColor(0)\n            } else {\n                // Allocate a new bitmap with the correct dimensions.\n                mCacheBitmap.recycle()\n\n                mCacheBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)\n                mCachedWidth = width\n                mCachedHeight = height\n            }\n\n            val cacheCanvas = Canvas(mCacheBitmap)\n\n            when {\n                mMaskDrawable != null -> {\n                    val sc = cacheCanvas.save()\n                    mMaskDrawable.draw(cacheCanvas)\n                    if (mIsSelected) {\n                        if (mSelectorFilter != null) {\n                            mMaskedPaint.colorFilter = mSelectorFilter\n                        } else {\n                            mMaskedPaint.colorFilter = mDesaturateColorFilter\n                        }\n                    } else {\n                        mMaskedPaint.colorFilter = null\n                    }\n                    cacheCanvas.saveLayer(mBoundsF, mMaskedPaint, Canvas.ALL_SAVE_FLAG)\n                    super.onDraw(cacheCanvas)\n                    cacheCanvas.restoreToCount(sc)\n                }\n                mIsSelected -> {\n                    val sc = cacheCanvas.save()\n                    cacheCanvas.drawRect(0f, 0f, mCachedWidth.toFloat(), mCachedHeight.toFloat(), mBlackPaint)\n                    if (mSelectorFilter != null) {\n                        mMaskedPaint.colorFilter = mSelectorFilter\n                    } else {\n                        mMaskedPaint.colorFilter = mDesaturateColorFilter\n                    }\n                    cacheCanvas.saveLayer(mBoundsF, mMaskedPaint, Canvas.ALL_SAVE_FLAG)\n                    super.onDraw(cacheCanvas)\n                    cacheCanvas.restoreToCount(sc)\n                }\n                else -> super.onDraw(cacheCanvas)\n            }\n        }\n\n        // Draw from cache\n        canvas.drawBitmap(mCacheBitmap, bounds.left.toFloat(), bounds.top.toFloat(), null)\n\n        //remember the previous press state\n        mIsPressed = isPressed\n    }\n\n\n    override fun dispatchTouchEvent(event: MotionEvent): Boolean {\n        // Check for clickable state and do nothing if disabled\n        if (!this.isClickable) {\n            this.mIsSelected = false\n            return super.onTouchEvent(event)\n        }\n\n        // Set selected state based on Motion Event\n        when (event.action) {\n            MotionEvent.ACTION_DOWN -> this.mIsSelected = true\n            MotionEvent.ACTION_UP, MotionEvent.ACTION_SCROLL, MotionEvent.ACTION_OUTSIDE, MotionEvent.ACTION_CANCEL -> this.mIsSelected = false\n        }\n\n        // Redraw image and return super type\n        this.invalidate()\n        return super.dispatchTouchEvent(event)\n    }\n\n    override fun drawableStateChanged() {\n        super.drawableStateChanged()\n        if (mMaskDrawable != null && mMaskDrawable.isStateful) {\n            mMaskDrawable.state = drawableState\n        }\n        if (isDuplicateParentStateEnabled) {\n            ViewCompat.postInvalidateOnAnimation(this)\n        }\n    }\n\n    override fun invalidateDrawable(who: Drawable) {\n        if (who === mMaskDrawable) {\n            invalidate()\n        } else {\n            super.invalidateDrawable(who)\n        }\n    }\n\n    override fun verifyDrawable(who: Drawable): Boolean {\n        return who === mMaskDrawable || super.verifyDrawable(who)\n    }\n\n\n    /**\n     * Sets the color of the selector to be draw over the\n     * CircularImageView. Be sure to provide some opacity.\n     *\n     * @param selectorColor The color (including alpha) to set for the selector overlay.\n     */\n    fun setSelectorColor(selectorColor: Int) {\n        this.mSelectorColor = selectorColor\n        this.mSelectorFilter = PorterDuffColorFilter(Color.argb(mSelectorAlpha, Color.red(mSelectorColor), Color.green(mSelectorColor), Color.blue(mSelectorColor)), PorterDuff.Mode.SRC_ATOP)\n        this.invalidate()\n    }\n\n    fun disableTouchFeedback(disable: Boolean) {\n        if (disable) {\n            mTempDesaturateColorFilter = this.mDesaturateColorFilter\n            mTempSelectorFilter = this.mSelectorFilter\n            this.mSelectorFilter = null\n            this.mDesaturateColorFilter = null\n        } else {\n            if (mTempDesaturateColorFilter != null) {\n                this.mDesaturateColorFilter = mTempDesaturateColorFilter\n            }\n            if (mTempSelectorFilter != null) {\n                this.mSelectorFilter = mTempSelectorFilter\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/widget/AccountHeaderView.kt",
    "content": "package com.mikepenz.materialdrawer.widget\n\nimport android.content.Context\nimport android.graphics.Typeface\nimport android.os.Build\nimport android.os.Bundle\nimport android.os.Handler\nimport android.text.TextUtils\nimport android.util.AttributeSet\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.View.OnClickListener\nimport android.view.View.OnLongClickListener\nimport android.widget.ImageView\nimport android.widget.TextView\nimport androidx.appcompat.content.res.AppCompatResources\nimport androidx.constraintlayout.widget.ConstraintLayout\nimport androidx.constraintlayout.widget.Guideline\nimport androidx.core.view.ViewCompat\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.holder.DimenHolder\nimport com.mikepenz.materialdrawer.holder.ImageHolder\nimport com.mikepenz.materialdrawer.holder.StringHolder\nimport com.mikepenz.materialdrawer.model.interfaces.ColorfulBadgeable\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.IProfile\nimport com.mikepenz.materialdrawer.util.*\nimport com.mikepenz.materialdrawer.view.BezelImageView\nimport java.util.*\n\n/**\n * This view offers support to add an account switcher to the [MaterialDrawerSliderView]\n * It will hook onto the [MaterialDrawerSliderView] and coordinate updating and showing the proper set of elements\n */\nopen class AccountHeaderView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0, compact: Boolean? = null) :\n    ConstraintLayout(context, attrs, defStyleAttr) {\n    var savedInstanceKey: String = \"\"\n\n    // global references to views we need later\n    val accountHeader: View\n    val statusBarGuideline: Guideline\n    val accountHeaderBackground: ImageView\n    val currentProfileView: BezelImageView\n    val currentProfileBadgeView: TextView\n    val accountSwitcherArrow: ImageView\n    val currentProfileName: TextView\n    val currentProfileEmail: TextView\n    val profileFirstView: BezelImageView\n    val profileFirstBadgeView: TextView\n    val profileSecondView: BezelImageView\n    val profileSecondBadgeView: TextView\n    val profileThirdView: BezelImageView\n    val profileThirdBadgeView: TextView\n\n    /** Temporarily disable invalidation for optimizations */\n    private var invalidationEnabled: Boolean = true\n    private var invalidateHeader: Boolean = false\n    private var invalidateList: Boolean = false\n\n    /**\n     * Selects the given profile and sets it to the new active profile\n     *\n     * @param profile\n     */\n    var activeProfile: IProfile?\n        get() = currentProfile\n        set(profile) {\n            profile?.also { setActiveProfile(it, false) }\n        }\n\n    // global references to the profiles\n    internal var currentProfile: IProfile? = null\n    internal var profileFirst: IProfile? = null\n    internal var profileSecond: IProfile? = null\n    internal var profileThird: IProfile? = null\n\n    // global stuff\n    internal var _selectionListShown = false\n    var selectionListShown: Boolean\n        get() = _selectionListShown\n        set(value) {\n            if (value != _selectionListShown) {\n                toggleSelectionList()\n            }\n        }\n    var accountHeaderTextSectionBackgroundResource = -1\n        set(value) {\n            field = value\n            buildProfiles()\n        }\n\n    // defines if we use the compactStyle\n    internal var compactStyle = false\n\n    // the typeface used for textViews within the AccountHeader\n    var typeface: Typeface? = null\n        set(value) {\n            field = value\n            reconstructHeader()\n        }\n\n    // the typeface used for name textView only. overrides typeface\n    var nameTypeface: Typeface? = null\n        set(value) {\n            field = value\n            reconstructHeader()\n        }\n\n    // the typeface used for email textView only. overrides typeface\n    var emailTypeface: Typeface? = null\n        set(value) {\n            field = value\n            reconstructHeader()\n        }\n\n    // set the account header height\n    var height: DimenHolder? = null\n        set(value) {\n            field = value\n            reconstructHeader()\n        }\n\n    //the current selected profile is visible in the list\n    var currentHiddenInList = false\n\n    //set to hide the first or second line\n    var selectionFirstLineShown = true\n        set(value) {\n            field = value\n            updateHeaderAndList()\n        }\n    var selectionSecondLineShown = true\n        set(value) {\n            field = value\n            updateHeaderAndList()\n        }\n\n    //set one of these to define the text in the first or second line with in the account selector\n    var selectionFirstLine: String? = null\n        set(value) {\n            field = value\n            updateHeaderAndList()\n        }\n\n    var selectionSecondLine: String? = null\n        set(value) {\n            field = value\n            updateHeaderAndList()\n        }\n\n    // set no divider below the header\n    var paddingBelowHeader = true\n        set(value) {\n            field = value\n            sliderView?.headerPadding = paddingBelowHeader\n        }\n\n    // set no divider below the header\n    var dividerBelowHeader = true\n        set(value) {\n            field = value\n            sliderView?.headerDivider = dividerBelowHeader\n        }\n\n    //the background for the header\n    var headerBackground: ImageHolder? = null\n        set(value) {\n            value?.applyTo(accountHeaderBackground, DrawerImageLoader.Tags.ACCOUNT_HEADER.name)\n            field = value\n        }\n\n    //background scale type\n    var headerBackgroundScaleType: ImageView.ScaleType?\n        get() = accountHeaderBackground.scaleType\n        set(value) {\n            if (value != null) {\n                accountHeaderBackground.scaleType = value\n            }\n        }\n\n    //profile images in the header are shown or not\n    var profileImagesVisible = true\n        set(value) {\n            field = value\n            buildProfiles()\n        }\n\n    //only the main profile image is visible\n    var onlyMainProfileImageVisible = false\n        set(value) {\n            field = value\n            buildProfiles()\n        }\n\n    //show small profile images but hide MainProfileImage\n    var onlySmallProfileImagesVisible = false\n        set(value) {\n            field = value\n            buildProfiles()\n        }\n\n    //close the drawer after a profile was clicked in the list\n    var closeDrawerOnProfileListClick: Boolean? = null\n\n    //reset the drawer list to the main drawer list after the profile was clicked in the list\n    var resetDrawerOnProfileListClick = true\n\n    // set the profile images clickable or not\n    var profileImagesClickable = true\n        set(value) {\n            field = value\n            buildProfiles()\n        }\n\n    // set to use the alternative profile header switching\n    var alternativeProfileHeaderSwitching = false\n\n    // enable 3 small header previews\n    var threeSmallProfileImages = false\n        set(value) {\n            field = value\n            buildProfiles()\n        }\n\n    // enable to show badges on current profile images\n    var displayBadgesOnCurrentProfileImage = true\n        set(value) {\n            field = value\n            buildProfiles()\n        }\n\n    // enable to show badges on small profile images\n    var displayBadgesOnSmallProfileImages = false\n        set(value) {\n            field = value\n            buildProfiles()\n        }\n\n    //the delay which is waited before the drawer is closed\n    var onProfileClickDrawerCloseDelay = 100\n\n    // the onAccountHeaderProfileImageListener to set\n    var onAccountHeaderProfileImageListener: ((view: View, profile: IProfile, current: Boolean) -> Boolean)? = null\n\n    // the onAccountHeaderSelectionListener to set\n    var onAccountHeaderSelectionViewClickListener: ((view: View, profile: IProfile) -> Boolean)? = null\n\n    //set the selection list enabled if there is only a single profile\n    var selectionListEnabledForSingleProfile = true\n        set(value) {\n            field = value\n            buildProfiles()\n        }\n\n    //set the selection enabled disabled\n    var selectionListEnabled = true\n        set(value) {\n            field = value\n            buildProfiles()\n        }\n\n    // the profiles to display\n    var profiles: MutableList<IProfile>? = null\n        set(value) {\n            field = value\n            value?.mapNotNull { it as? IDrawerItem<*> }?.forEach { item ->\n                sliderView?.idDistributor?.checkId(item)\n            }\n            updateHeaderAndList()\n        }\n\n    // the click listener to be fired on profile or selection click\n    var onAccountHeaderListener: ((view: View?, profile: IProfile, current: Boolean) -> Boolean)? = null\n\n    //the on long click listener to be fired on profile longClick inside the list\n    var onAccountHeaderItemLongClickListener: ((view: View?, profile: IProfile, current: Boolean) -> Boolean)? = null\n\n    // the drawer to set the AccountSwitcher for\n    var sliderView: MaterialDrawerSliderView? = null\n        set(value) {\n            field = value\n            if (field?.accountHeader != this) {\n                field?.accountHeader = this\n            }\n        }\n\n    // miniDrawer\n    val miniDrawer: MiniDrawerSliderView?\n        get() = sliderView?.miniDrawer\n\n    /**\n     * onProfileClickListener to notify onClick on the current profile image\n     */\n    private val onCurrentProfileClickListener = OnClickListener { v -> onProfileImageClick(v, true) }\n\n    /**\n     * onProfileClickListener to notify onClick on a profile image\n     */\n    private val onProfileClickListener = OnClickListener { v -> onProfileImageClick(v, false) }\n\n    /**\n     * onProfileLongClickListener to call the onProfileImageLongClick on the current profile image\n     */\n    private val onCurrentProfileLongClickListener = OnLongClickListener { v ->\n        if (onAccountHeaderProfileImageListener != null) {\n            val profile = v.getTag(R.id.material_drawer_profile_header) as IProfile\n            return@OnLongClickListener onAccountHeaderProfileImageListener?.invoke(v, profile, true)\n                ?: false\n        }\n        false\n    }\n\n    /**\n     * onProfileLongClickListener to call the onProfileImageLongClick on a profile image\n     */\n    private val onProfileLongClickListener = OnLongClickListener { v ->\n        if (onAccountHeaderProfileImageListener != null) {\n            val profile = v.getTag(R.id.material_drawer_profile_header) as IProfile\n            return@OnLongClickListener onAccountHeaderProfileImageListener?.invoke(v, profile, false)\n                ?: false\n        }\n        false\n    }\n\n    /**\n     * get the current selection\n     *\n     * @return\n     */\n    internal val currentSelection: Int\n        get() {\n            val mProfiles = this.profiles ?: return -1\n            val mCurrentProfile = this.currentProfile ?: return -1\n            for ((i, profile) in mProfiles.withIndex()) {\n                if (profile === mCurrentProfile) {\n                    return i\n                }\n            }\n            return -1\n        }\n\n    /**\n     * onDrawerItemClickListener to catch the selection for the new profile!\n     */\n    private val onDrawerItemClickListener: ((View?, IDrawerItem<*>, Int) -> Boolean) = { view: View?, drawerItem: IDrawerItem<*>, position: Int ->\n        val isCurrentSelectedProfile: Boolean = if (drawerItem is IProfile && drawerItem.isSelectable) {\n            switchProfiles(drawerItem as IProfile)\n        } else {\n            false\n        }\n\n        if (resetDrawerOnProfileListClick) {\n            sliderView?.onDrawerItemClickListener = null\n        }\n\n        //wrap the onSelection call and the reset stuff within a handler to prevent lag\n        if (resetDrawerOnProfileListClick && sliderView != null) {\n            resetDrawerContent()\n        }\n\n        //notify the MiniDrawer about the clicked profile (only if one exists and is hooked to the Drawer\n        miniDrawer?.onProfileClick()\n\n        var consumed = false\n        if (drawerItem is IProfile) {\n            consumed = onAccountHeaderListener?.invoke(view, drawerItem as IProfile, isCurrentSelectedProfile) ?: false\n        }\n\n        //if a custom behavior was chosen via the CloseDrawerOnProfileListClick then use this. else react on the result of the onProfileChanged listener\n        closeDrawerOnProfileListClick?.let {\n            consumed = consumed && (!it)\n        }\n\n        //totally custom handling of the drawer behavior as otherwise the selection of the profile list is set to the Drawer\n        if (!consumed) {\n            //close the drawer after click\n            sliderView?.closeDrawerDelayed()\n        }\n\n        //consume the event to prevent setting the clicked item as selected in the already switched item list\n        true\n    }\n\n    /**\n     * onDrawerItemLongClickListener to catch the longClick for a profile\n     */\n    private val onDrawerItemLongClickListener: ((View?, IDrawerItem<*>, Int) -> Boolean) = { view: View?, drawerItem: IDrawerItem<*>, position: Int ->\n        //if a longClickListener was defined use it\n        if (onAccountHeaderItemLongClickListener != null) {\n            val isCurrentSelectedProfile: Boolean = drawerItem.isSelected\n\n            if (drawerItem is IProfile) {\n                onAccountHeaderItemLongClickListener?.invoke(view, drawerItem as IProfile, isCurrentSelectedProfile) ?: false\n            } else {\n                false\n            }\n        } else {\n            false\n        }\n    }\n\n    init {\n        val headerLayout = context.resolveStyledHeaderValue {\n            compactStyle = compact ?: it.getBoolean(R.styleable.AccountHeaderView_materialDrawerCompactStyle, false)\n            it.getResourceId(\n                R.styleable.AccountHeaderView_materialDrawerHeaderLayout,\n                if (compactStyle) R.layout.material_drawer_compact_header else R.layout.material_drawer_header\n            )\n        }\n\n        // the account header\n        accountHeader = LayoutInflater.from(context).inflate(headerLayout, this, true)\n\n        // get the header view within the container\n        statusBarGuideline = findViewById(R.id.material_drawer_statusbar_guideline)\n\n        // get the background view\n        accountHeaderBackground = findViewById(R.id.material_drawer_account_header_background)\n\n        // set the arrow :D\n        accountSwitcherArrow = findViewById(R.id.material_drawer_account_header_text_switcher)\n\n        //get the fields for the name\n        currentProfileView = findViewById(R.id.material_drawer_account_header_current)\n        currentProfileBadgeView = findViewById(R.id.material_drawer_account_header_current_badge)\n        currentProfileName = findViewById(R.id.material_drawer_account_header_name)\n        currentProfileEmail = findViewById(R.id.material_drawer_account_header_email)\n\n        profileFirstView = findViewById(R.id.material_drawer_account_header_small_first)\n        profileFirstBadgeView = findViewById(R.id.material_drawer_account_header_small_first_badge)\n        profileSecondView = findViewById(R.id.material_drawer_account_header_small_second)\n        profileSecondBadgeView = findViewById(R.id.material_drawer_account_header_small_second_badge)\n        profileThirdView = findViewById(R.id.material_drawer_account_header_small_third)\n        profileThirdBadgeView = findViewById(R.id.material_drawer_account_header_small_third_badge)\n\n        reconstructHeader()\n\n        //the default min header height by default 148dp\n        val defaultHeaderMinHeight = context.resources.getDimensionPixelSize(R.dimen.material_drawer_account_header_height)\n\n        // set the insets\n        ViewCompat.setOnApplyWindowInsetsListener(this) { v, insets ->\n            // handle everything if we have a translucent status bar which only is possible on API >= 19\n            val topInset = insets.systemWindowInsetTop ?: 0\n            statusBarGuideline.setGuidelineBegin(topInset)\n\n            val height = resolveHeight()\n            var newHeight = height\n            //in fact it makes no difference if we have a translucent statusBar or not. we want 9/16 just if we are not compact\n            if (compactStyle) {\n                newHeight += topInset\n            } else if (newHeight - topInset <= defaultHeaderMinHeight) {\n                //if the height + statusBar of the header is lower than the required 148dp + statusBar we change the height to be able to display all the data\n                newHeight = defaultHeaderMinHeight + topInset\n            }\n\n            //set the height for the header\n            setHeaderHeight(newHeight)\n\n            insets\n        }\n    }\n\n    private fun resolveHeight(): Int {\n        // handle the height for the header\n        var height = 0\n        this.height?.let {\n            height = it.asPixel(context)\n        } ?: run {\n            height = if (compactStyle) {\n                context.resources.getDimensionPixelSize(R.dimen.material_drawer_account_header_height_compact)\n            } else {\n                //calculate the header height by getting the optimal drawer width and calculating it * 9 / 16\n                (getOptimalDrawerWidth(context) * NAVIGATION_DRAWER_ACCOUNT_ASPECT_RATIO).toInt()\n            }\n        }\n        return height\n    }\n\n    private fun reconstructHeader() {\n        if (!invalidationEnabled) {\n            invalidateHeader = true\n            return\n        }\n        invalidateHeader = false\n\n        //set the height for the header\n        setHeaderHeight(resolveHeight())\n\n        // set the background\n        headerBackground?.applyTo(accountHeaderBackground, DrawerImageLoader.Tags.ACCOUNT_HEADER.name)\n\n        // get the text color to use for the text section\n        val textColor =\n            context.getHeaderSelectionTextColor() // textColor.applyColor(context, R.attr.materialDrawerHeaderSelectionText, R.color.material_drawer_header_selection_text)\n        val subTextColor =\n            context.getHeaderSelectionSubTextColor()  // this.textColor.applyColor(context, R.attr.materialDrawerHeaderSelectionSubtext, R.color.material_drawer_header_selection_subtext)\n\n        if (accountHeaderTextSectionBackgroundResource == -1) {\n            accountHeaderTextSectionBackgroundResource = context.getSelectableBackgroundRes()\n        }\n        handleSelectionView(currentProfile, true)\n\n        // set the arrow\n        val drawable = AppCompatResources.getDrawable(context, R.drawable.material_drawer_ico_menu_down)\n        if (drawable != null) {\n            val size = context.resources.getDimensionPixelSize(R.dimen.material_drawer_account_header_dropdown)\n            accountSwitcherArrow.setImageDrawable(FixStateListDrawable(drawable, subTextColor).apply {\n                setBounds(0, 0, size, size)\n            })\n        }\n\n        //IconicsDrawable(context, MaterialDrawerFont.Icon.mdf_arrow_drop_down).size(IconicsSize.res(R.dimen.material_drawer_account_header_dropdown)).padding(IconicsSize.res(R.dimen.material_drawer_account_header_dropdown_padding)).color(IconicsColor.colorList(subTextColor))\n        //set the typeface for the AccountHeader\n        if (nameTypeface != null) {\n            currentProfileName.typeface = nameTypeface\n        } else if (typeface != null) {\n            currentProfileName.typeface = typeface\n        }\n\n        if (emailTypeface != null) {\n            currentProfileEmail.typeface = emailTypeface\n        } else if (typeface != null) {\n            currentProfileEmail.typeface = typeface\n        }\n\n        currentProfileName.setTextColor(textColor)\n        currentProfileEmail.setTextColor(subTextColor)\n\n        //calculate the profiles to set\n        calculateProfiles()\n\n        //process and build the profiles\n        buildProfiles()\n    }\n\n    override fun onAttachedToWindow() {\n        super.onAttachedToWindow()\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {\n            requestApplyInsets()\n        }\n    }\n\n    /**\n     * onSelectionClickListener to notify the onClick on the checkbox\n     */\n    private val onSelectionClickListener = OnClickListener { v ->\n        val consumed = onAccountHeaderSelectionViewClickListener?.invoke(v, v.getTag(R.id.material_drawer_profile_header) as IProfile)\n            ?: false\n        if (accountSwitcherArrow.visibility == View.VISIBLE && !consumed) {\n            toggleSelectionList()\n        }\n    }\n\n    /**\n     * Add a new profile at a specific position to the list\n     *\n     * @param profile\n     * @param position\n     */\n    fun addProfile(profile: IProfile, position: Int) {\n        if (profiles == null) {\n            profiles = ArrayList()\n        }\n\n        profiles?.add(position, profile)\n        updateHeaderAndList()\n    }\n\n    /**\n     * add single ore more DrawerItems to the Drawer\n     */\n    fun addProfiles(vararg profiles: IProfile) {\n        if (this.profiles == null) {\n            this.profiles = ArrayList()\n        }\n\n        this.profiles?.let {\n            it.mapNotNull { di -> di as? IDrawerItem<*> }.forEach { item ->\n                sliderView?.idDistributor?.checkId(item)\n            }\n            Collections.addAll<IProfile>(it, *profiles)\n        }\n        updateHeaderAndList()\n    }\n\n    /**\n     * remove a profile from the given position\n     */\n    fun removeProfile(position: Int) {\n        if (this.profiles != null && this.profiles?.size ?: 0 > position) {\n            this.profiles?.removeAt(position)\n        }\n        updateHeaderAndList()\n    }\n\n    /**\n     * remove the profile with the given identifier\n     */\n    fun removeProfileByIdentifier(identifier: Long) {\n        val found = getPositionByIdentifier(identifier)\n        if (found > -1) {\n            this.profiles?.removeAt(found)\n        }\n        this.updateHeaderAndList()\n    }\n\n    /**\n     * try to remove the given profile\n     */\n    fun removeProfile(profile: IProfile) {\n        removeProfileByIdentifier(profile.identifier)\n    }\n\n    /**\n     * Clear the header\n     */\n    fun clear() {\n        this.profiles = null\n        //calculate the profiles to set\n        calculateProfiles()\n        //process and build the profiles\n        buildProfiles()\n    }\n\n    /**\n     * @param drawer\n     * @return\n     */\n    fun attachToSliderView(sliderView: MaterialDrawerSliderView) {\n        this.sliderView = sliderView\n\n        //set the top padding to 0 as this would happen when the AccountHeader is created during Drawer build time\n        sliderView.recyclerView.setPadding(sliderView.recyclerView.paddingLeft, 0, sliderView.recyclerView.paddingRight, sliderView.recyclerView.paddingBottom)\n\n        //everything created. now set the header\n        sliderView.headerView = this\n\n        this.sliderView?.accountHeader = this\n    }\n\n    /**\n     * create the drawer with the values of a savedInstance\n     *\n     * @param savedInstance\n     * @return\n     */\n    fun withSavedInstance(savedInstance: Bundle?) {\n        savedInstance ?: return\n        // try to restore all saved values again\n        val selection = savedInstance.getInt(BUNDLE_SELECTION_HEADER + savedInstanceKey, -1)\n        if (selection != -1) {\n            //predefine selection (should be the first element\n            profiles?.let {\n                if (selection > -1 && selection < it.size) {\n                    switchProfiles(it[selection])\n                }\n            }\n        }\n    }\n\n    /**\n     * helper method to set the height for the header!\n     *\n     * @param height\n     */\n    private fun setHeaderHeight(height: Int) {\n        this.layoutParams?.let {\n            it.height = height\n            this.layoutParams = it\n        }\n\n        val lp = accountHeader.layoutParams\n        if (lp != null) {\n            lp.height = height\n            accountHeader.layoutParams = lp\n        }\n\n        val p = accountHeaderBackground.layoutParams\n        p.height = height\n        accountHeaderBackground.layoutParams = p\n    }\n\n    /**\n     * a small helper to handle the selectionView\n     *\n     * @param on\n     */\n    private fun handleSelectionView(profile: IProfile?, on: Boolean) {\n        if (on) {\n            if (Build.VERSION.SDK_INT >= 23) {\n                this.foreground = AppCompatResources.getDrawable(this.context, accountHeaderTextSectionBackgroundResource)\n            } else {\n                // todo foreground thing?\n            }\n            this.setOnClickListener(onSelectionClickListener)\n            this.setTag(R.id.material_drawer_profile_header, profile)\n        } else {\n            if (Build.VERSION.SDK_INT >= 23) {\n                this.foreground = null\n            } else {\n                // TODO foreground reset\n            }\n            this.setOnClickListener(null)\n        }\n    }\n\n    /**\n     * helper method to calculate the order of the profiles\n     */\n    internal fun calculateProfiles() {\n        if (profiles == null) {\n            profiles = ArrayList()\n        }\n\n        profiles?.let { mProfiles ->\n            if (currentProfile == null) {\n                var setCount = 0\n                val size = mProfiles.size\n                for (i in 0 until size) {\n                    if (mProfiles.size > i && mProfiles[i].isSelectable) {\n                        if (setCount == 0 && currentProfile == null) {\n                            currentProfile = mProfiles[i]\n                        } else if (setCount == 1 && profileFirst == null) {\n                            profileFirst = mProfiles[i]\n                        } else if (setCount == 2 && profileSecond == null) {\n                            profileSecond = mProfiles[i]\n                        } else if (setCount == 3 && profileThird == null) {\n                            profileThird = mProfiles[i]\n                        }\n                        setCount++\n                    }\n                }\n\n                return\n            }\n\n            val previousActiveProfiles = arrayOf(currentProfile, profileFirst, profileSecond, profileThird)\n\n            val newActiveProfiles = arrayOfNulls<IProfile>(4)\n            val unusedProfiles = Stack<IProfile>()\n\n            // try to keep existing active profiles in the same positions\n            for (i in mProfiles.indices) {\n                val p = mProfiles[i]\n                if (p.isSelectable) {\n                    var used = false\n                    for (j in 0..3) {\n                        if (previousActiveProfiles[j] === p) {\n                            newActiveProfiles[j] = p\n                            used = true\n                            break\n                        }\n                    }\n                    if (!used) {\n                        unusedProfiles.push(p)\n                    }\n                }\n            }\n\n            val activeProfiles = Stack<IProfile>()\n            // try to fill the gaps with new available profiles\n            for (i in 0..3) {\n                if (newActiveProfiles[i] != null) {\n                    activeProfiles.push(newActiveProfiles[i])\n                } else if (!unusedProfiles.isEmpty()) {\n                    activeProfiles.push(unusedProfiles.pop())\n                }\n            }\n\n            val reversedActiveProfiles = Stack<IProfile>()\n            while (!activeProfiles.empty()) {\n                reversedActiveProfiles.push(activeProfiles.pop())\n            }\n\n            // reassign active profiles\n            currentProfile = if (reversedActiveProfiles.isEmpty()) {\n                null\n            } else {\n                reversedActiveProfiles.pop()\n            }\n            profileFirst = if (reversedActiveProfiles.isEmpty()) {\n                null\n            } else {\n                reversedActiveProfiles.pop()\n            }\n            profileSecond = if (reversedActiveProfiles.isEmpty()) {\n                null\n            } else {\n                reversedActiveProfiles.pop()\n            }\n            profileThird = if (reversedActiveProfiles.isEmpty()) {\n                null\n            } else {\n                reversedActiveProfiles.pop()\n            }\n        }\n    }\n\n    /**\n     * helper method to switch the profiles\n     *\n     * @param newSelection\n     * @return true if the new selection was the current profile\n     */\n    internal fun switchProfiles(newSelection: IProfile?): Boolean {\n        if (newSelection == null) {\n            return false\n        }\n        if (currentProfile === newSelection) {\n            return true\n        }\n\n        if (alternativeProfileHeaderSwitching) {\n            var prevSelection = -1\n            when {\n                profileFirst === newSelection -> prevSelection = 1\n                profileSecond === newSelection -> prevSelection = 2\n                profileThird === newSelection -> prevSelection = 3\n            }\n\n            val tmp = currentProfile\n            currentProfile = newSelection\n\n            when (prevSelection) {\n                1 -> profileFirst = tmp\n                2 -> profileSecond = tmp\n                3 -> profileThird = tmp\n            }\n        } else {\n            if (profiles != null) {\n                val previousActiveProfiles = ArrayList<IProfile>(Arrays.asList<IProfile>(currentProfile, profileFirst, profileSecond, profileThird))\n\n                if (previousActiveProfiles.contains(newSelection)) {\n                    var position = -1\n\n                    for (i in 0..3) {\n                        if (previousActiveProfiles[i] === newSelection) {\n                            position = i\n                            break\n                        }\n                    }\n\n                    if (position != -1) {\n                        previousActiveProfiles.removeAt(position)\n                        previousActiveProfiles.add(0, newSelection)\n\n                        currentProfile = previousActiveProfiles[0]\n                        profileFirst = previousActiveProfiles[1]\n                        profileSecond = previousActiveProfiles[2]\n                        profileThird = previousActiveProfiles[3]\n                    }\n                } else {\n                    profileThird = profileSecond\n                    profileSecond = profileFirst\n                    profileFirst = currentProfile\n                    currentProfile = newSelection\n                }\n            }\n        }\n\n        //if we only show the small profile images we have to make sure the first (would be the current selected) profile is also shown\n        if (onlySmallProfileImagesVisible) {\n            profileThird = profileSecond\n            profileSecond = profileFirst\n            profileFirst = currentProfile\n            //currentProfile = profileThird;\n        }\n\n        buildProfiles()\n\n        return false\n    }\n\n    /**\n     * helper method to build the views for the ui\n     */\n    internal fun buildProfiles() {\n        if (!invalidationEnabled) {\n            invalidateList = true\n            return\n        }\n        invalidateList = false\n\n        currentProfileView.visibility = View.GONE\n        currentProfileBadgeView.visibility = View.GONE\n        accountSwitcherArrow.visibility = View.GONE\n        profileFirstView.visibility = View.GONE\n        profileFirstView.setOnClickListener(null)\n        profileFirstBadgeView.visibility = View.GONE\n        profileSecondView.visibility = View.GONE\n        profileSecondView.setOnClickListener(null)\n        profileSecondBadgeView.visibility = View.GONE\n        profileThirdView.visibility = View.GONE\n        profileThirdView.setOnClickListener(null)\n        profileThirdBadgeView.visibility = View.GONE\n        currentProfileName.text = \"\"\n        currentProfileEmail.text = \"\"\n\n        handleSelectionView(currentProfile, true)\n\n        val mCurrentProfile = this.currentProfile\n        val mProfiles = this.profiles\n        if (mCurrentProfile != null) {\n            if ((profileImagesVisible || onlyMainProfileImageVisible) && !onlySmallProfileImagesVisible) {\n                currentProfileView.contentDescription = mCurrentProfile.description?.getText(context) ?: mCurrentProfile.name?.getText(context)\n                        ?: currentProfileView.context.getString(R.string.material_drawer_profile_content_description)\n                setImageOrPlaceholder(currentProfileView, mCurrentProfile.icon)\n                if (profileImagesClickable) {\n                    currentProfileView.setOnClickListener(onCurrentProfileClickListener)\n                    currentProfileView.setOnLongClickListener(onCurrentProfileLongClickListener)\n                    currentProfileView.disableTouchFeedback(false)\n                } else {\n                    currentProfileView.disableTouchFeedback(true)\n                }\n                currentProfileView.visibility = View.VISIBLE\n                currentProfileView.invalidate()\n\n                var badgeVisible = false\n                if (displayBadgesOnCurrentProfileImage) {\n                    (mCurrentProfile as? ColorfulBadgeable)?.let { badgeable ->\n                        badgeVisible = StringHolder.applyToOrHide(badgeable.badge, currentProfileBadgeView)\n                        if (badgeVisible) {\n                            badgeable.badgeStyle?.style(currentProfileBadgeView, context.getPrimaryDrawerTextColor())\n                            typeface?.let { typeface -> currentProfileBadgeView.typeface = typeface }\n                        }\n                    }\n                }\n                currentProfileBadgeView.visibility = if (badgeVisible) View.VISIBLE else View.GONE\n            } else if (compactStyle) {\n                currentProfileView.visibility = View.GONE\n                currentProfileBadgeView.visibility = View.GONE\n            }\n\n            handleSelectionView(mCurrentProfile, true)\n            accountSwitcherArrow.visibility = View.VISIBLE\n            currentProfileView.setTag(R.id.material_drawer_profile_header, mCurrentProfile)\n\n            StringHolder.applyTo(mCurrentProfile.name, currentProfileName)\n            StringHolder.applyTo(mCurrentProfile.description, currentProfileEmail)\n\n            /**\n             * Apply the profile information to the provided imageView\n             */\n            fun IProfile?.applyProfile(imageView: BezelImageView, badgeView: TextView) {\n                this ?: return\n                setImageOrPlaceholder(imageView, this.icon)\n                imageView.setTag(R.id.material_drawer_profile_header, this)\n                imageView.contentDescription = this.description?.getText(context) ?: this.name?.getText(context)\n                        ?: imageView.context.getString(R.string.material_drawer_profile_content_description)\n                if (profileImagesClickable) {\n                    imageView.setOnClickListener(onProfileClickListener)\n                    imageView.setOnLongClickListener(onProfileLongClickListener)\n                    imageView.disableTouchFeedback(false)\n                } else {\n                    imageView.disableTouchFeedback(true)\n                }\n                imageView.visibility = View.VISIBLE\n                imageView.invalidate()\n\n                var badgeVisible = false\n                if (displayBadgesOnSmallProfileImages) {\n                    (this as? ColorfulBadgeable)?.let { badgeable ->\n                        badgeVisible = StringHolder.applyToOrHide(badgeable.badge, badgeView)\n                        if (badgeVisible) {\n                            badgeable.badgeStyle?.style(badgeView, context.getPrimaryDrawerTextColor())\n                            typeface?.let { typeface -> badgeView.typeface = typeface }\n                        }\n                    }\n                }\n                badgeView.visibility = if (badgeVisible) View.VISIBLE else View.GONE\n            }\n\n            if (profileImagesVisible && !onlyMainProfileImageVisible) {\n                profileFirst.applyProfile(profileFirstView, profileFirstBadgeView)\n                profileSecond.applyProfile(profileSecondView, profileSecondBadgeView)\n\n                if (threeSmallProfileImages) {\n                    profileThird.applyProfile(profileThirdView, profileThirdBadgeView)\n                }\n            }\n        } else if (mProfiles != null && mProfiles.size > 0) {\n            val profile = mProfiles[0]\n            setTag(R.id.material_drawer_profile_header, profile)\n            handleSelectionView(mCurrentProfile, true)\n            accountSwitcherArrow.visibility = View.VISIBLE\n        }\n\n        if (!selectionFirstLineShown) {\n            currentProfileName.visibility = View.GONE\n        }\n        if (!TextUtils.isEmpty(selectionFirstLine)) {\n            currentProfileName.text = selectionFirstLine\n        }\n        if (!selectionSecondLineShown) {\n            currentProfileEmail.visibility = View.GONE\n        }\n        if (!TextUtils.isEmpty(selectionSecondLine)) {\n            currentProfileEmail.text = selectionSecondLine\n        }\n\n        //if we disabled the list\n        if (!selectionListEnabled || !selectionListEnabledForSingleProfile && profileFirst == null && (mProfiles == null || mProfiles?.size == 1)) {\n            accountSwitcherArrow.visibility = View.GONE\n            handleSelectionView(null, false)\n        }\n\n        //if we disabled the list but still have set a custom listener\n        if (onAccountHeaderSelectionViewClickListener != null) {\n            handleSelectionView(mCurrentProfile, true)\n        }\n    }\n\n    /**\n     * small helper method to set an profile image or a placeholder\n     *\n     * @param iv\n     * @param imageHolder\n     */\n    private fun setImageOrPlaceholder(iv: ImageView, imageHolder: ImageHolder?) {\n        //cancel previous started image loading processes\n        DrawerImageLoader.instance.cancelImage(iv)\n        //set the placeholder\n        iv.setImageDrawable(DrawerImageLoader.instance.imageLoader?.placeholder(iv.context, DrawerImageLoader.Tags.PROFILE.name))\n        //set the real image (probably also the uri)\n        imageHolder?.applyTo(iv, DrawerImageLoader.Tags.PROFILE.name)\n    }\n\n    /**\n     * calls the mOnAccountHEaderProfileImageListener and continues with the actions afterwards\n     *\n     * @param v\n     * @param current\n     */\n    private fun onProfileImageClick(v: View, current: Boolean) {\n        val profile = v.getTag(R.id.material_drawer_profile_header) as IProfile\n\n        val consumed = onAccountHeaderProfileImageListener?.invoke(v, profile, current)\n            ?: false\n\n        //if the event was already consumed by the click don't continue. note that this will also stop the profile change event\n        if (!consumed) {\n            onProfileClick(v, current)\n        }\n    }\n\n    internal fun onProfileClick(v: View, current: Boolean) {\n        val profile = v.getTag(R.id.material_drawer_profile_header) as IProfile\n        switchProfiles(profile)\n\n        //reset the drawer content\n        resetDrawerContent()\n\n        //notify the MiniDrawer about the clicked profile (only if one exists and is hooked to the Drawer\n        miniDrawer?.onProfileClick()\n\n        //notify about the changed profile\n        val consumed = onAccountHeaderListener?.invoke(v, profile, current) ?: false\n        if (!consumed) {\n            if (onProfileClickDrawerCloseDelay > 0) {\n                Handler().postDelayed({\n                    sliderView?.drawerLayout?.closeDrawers()\n                }, onProfileClickDrawerCloseDelay.toLong())\n            } else {\n                sliderView?.drawerLayout?.closeDrawers()\n            }\n        }\n    }\n\n    /**\n     * helper method to toggle the collection\n     */\n    internal fun toggleSelectionList() {\n        val sliderView = sliderView ?: return\n        //if we already show the list. reset everything instead\n        _selectionListShown = if (sliderView.switchedDrawerContent()) {\n            resetDrawerContent()\n            false\n        } else {\n            //build and set the drawer selection list\n            buildDrawerSelectionList()\n\n            // update the arrow image within the drawer\n            accountSwitcherArrow.clearAnimation()\n            ViewCompat.animate(accountSwitcherArrow).rotation(180f).start()\n            true\n        }\n    }\n\n    /**\n     * helper method to build and set the drawer selection list\n     */\n    internal fun buildDrawerSelectionList() {\n        var selectedPosition = -1\n        var position = 0\n        val profileDrawerItems = ArrayList<IDrawerItem<*>>()\n        profiles?.let { mProfiles ->\n            for (profile in mProfiles) {\n                if (profile === currentProfile) {\n                    if (currentHiddenInList) {\n                        continue\n                    } else {\n                        selectedPosition = sliderView?.itemAdapter?.getGlobalPosition(position)\n                            ?: 0\n                    }\n                }\n                if (profile is IDrawerItem<*>) {\n                    (profile as IDrawerItem<*>).isSelected = false\n                    profileDrawerItems.add(profile as IDrawerItem<*>)\n                }\n                position += 1\n            }\n        }\n        sliderView?.switchDrawerContent(onDrawerItemClickListener, onDrawerItemLongClickListener, profileDrawerItems, selectedPosition)\n    }\n\n    /**\n     * helper method to reset the drawer content\n     */\n    private fun resetDrawerContent() {\n        sliderView?.resetDrawerContent()\n\n        accountSwitcherArrow.clearAnimation()\n        ViewCompat.animate(accountSwitcherArrow).rotation(0f).start()\n    }\n\n    /**\n     * Updates the header and also rebuids the list.\n     * This is called after modifications to the items were made\n     */\n    fun updateHeaderAndList() {\n        if (!invalidationEnabled) {\n            invalidateList = true\n            return\n        }\n        invalidateList = false\n\n        //recalculate the profiles\n        calculateProfiles()\n        //update the profiles in the header\n        buildProfiles()\n        //if we currently show the list add the new item directly to it\n        if (selectionListShown) {\n            buildDrawerSelectionList()\n        }\n    }\n\n    /**\n     * add the values to the bundle for saveInstanceState\n     *\n     * @param savedInstanceState\n     * @return\n     */\n    fun saveInstanceState(savedInstanceState: Bundle): Bundle {\n        savedInstanceState.putInt(BUNDLE_SELECTION_HEADER + savedInstanceKey, currentSelection)\n        return savedInstanceState\n    }\n\n    /**\n     * Selects the given profile and sets it to the new active profile\n     *\n     * @param profile\n     */\n    fun setActiveProfile(profile: IProfile, fireOnProfileChanged: Boolean) {\n        val isCurrentSelectedProfile = switchProfiles(profile)\n        //if the selectionList is shown we should also update the current selected profile in the list\n        if (sliderView != null && selectionListShown) {\n            sliderView?.setSelection(profile.identifier, false)\n        }\n        //fire the event if enabled and a listener is set\n        if (fireOnProfileChanged && onAccountHeaderListener != null) {\n            onAccountHeaderListener?.invoke(null, profile, isCurrentSelectedProfile)\n        }\n    }\n\n    /**\n     * Selects a profile by its identifier\n     *\n     * @param identifier\n     */\n    @JvmOverloads\n    fun setActiveProfile(identifier: Long, fireOnProfileChanged: Boolean = false) {\n        profiles?.forEach { profile ->\n            if (profile.identifier == identifier) {\n                setActiveProfile(profile, fireOnProfileChanged)\n                return\n            }\n        }\n    }\n\n    /**\n     * Helper method to update a profile using its identifier\n     *\n     * @param newProfile\n     */\n    fun updateProfile(newProfile: IProfile) {\n        val found = getPositionByIdentifier(newProfile.identifier)\n        if (found > -1) {\n            profiles?.set(found, newProfile)\n            updateHeaderAndList()\n        }\n    }\n\n    /**\n     * gets the position of a profile by its identifier\n     *\n     * @param identifier\n     * @return\n     */\n    private fun getPositionByIdentifier(identifier: Long): Int {\n        if (identifier != -1L) {\n            profiles?.forEachIndexed { index, iProfile ->\n                if (iProfile.identifier == identifier) {\n                    return index\n                }\n            }\n        }\n        return -1\n    }\n\n    /** Applies properties in an optimized form. Will disable invalidation of the AccountHeaderView for the inner property set operations */\n    fun apply(block: AccountHeaderView.() -> Unit): AccountHeaderView {\n        invalidationEnabled = false\n        block()\n        invalidationEnabled = true\n        if (invalidateList) {\n            updateHeaderAndList()\n        }\n        if (invalidateHeader) {\n            reconstructHeader()\n        }\n        return this\n    }\n\n    companion object {\n        const val NAVIGATION_DRAWER_ACCOUNT_ASPECT_RATIO = 9.0 / 16.0\n\n        const val BUNDLE_SELECTION_HEADER = \"bundle_selection_header\"\n    }\n}"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/widget/MaterialDrawerSliderView.kt",
    "content": "package com.mikepenz.materialdrawer.widget\n\nimport android.content.Context\nimport android.graphics.Canvas\nimport android.graphics.Rect\nimport android.graphics.drawable.Drawable\nimport android.os.Build\nimport android.os.Bundle\nimport android.os.Handler\nimport android.util.AttributeSet\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.LinearLayout\nimport android.widget.RelativeLayout\nimport androidx.core.view.GravityCompat\nimport androidx.core.view.ViewCompat\nimport androidx.core.view.WindowInsetsCompat\nimport androidx.core.view.updatePadding\nimport androidx.drawerlayout.widget.DrawerLayout\nimport androidx.recyclerview.widget.DefaultItemAnimator\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport androidx.recyclerview.widget.RecyclerView\nimport com.mikepenz.fastadapter.FastAdapter\nimport com.mikepenz.fastadapter.IAdapter\nimport com.mikepenz.fastadapter.adapters.ItemAdapter\nimport com.mikepenz.fastadapter.adapters.ModelAdapter\nimport com.mikepenz.fastadapter.expandable.ExpandableExtension\nimport com.mikepenz.fastadapter.expandable.ExpandableExtensionFactory\nimport com.mikepenz.fastadapter.extensions.ExtensionsFactories\nimport com.mikepenz.fastadapter.select.SelectExtension\nimport com.mikepenz.fastadapter.select.SelectExtensionFactory\nimport com.mikepenz.fastadapter.select.getSelectExtension\nimport com.mikepenz.fastadapter.utils.DefaultIdDistributor\nimport com.mikepenz.fastadapter.utils.DefaultIdDistributorImpl\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.holder.DimenHolder\nimport com.mikepenz.materialdrawer.model.AbstractDrawerItem\nimport com.mikepenz.materialdrawer.model.ContainerDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.util.*\n\n/**\n * This view is a simple drop in view for the [DrawerLayout] offering a convenient API to provide a nice and flexible slider view following\n * the material design guidelines v2.\n */\nopen class MaterialDrawerSliderView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = R.attr.materialDrawerStyle) :\n    RelativeLayout(context, attrs, defStyleAttr) {\n\n    /** Temporarily disable invalidation for optimizations */\n    private var invalidationEnabled: Boolean = true\n    private var invalidateContent: Boolean = false\n    private var invalidateHeader: Boolean = false\n    private var invalidateFooter: Boolean = false\n    private var invalidateStickyFooter: Boolean = false\n\n    /** Specify the foreground color for the insets */\n    var insetForeground: Drawable? = null\n        set(value) {\n            field = value\n            invalidateThis()\n        }\n\n    private var insets: Rect? = null\n    private val tempRect = Rect()\n\n    /** Fires when the insets get set */\n    var onInsetsCallback: ((WindowInsetsCompat) -> Unit)? = null\n\n    /** Specify if the statusbar should be tinted. */\n    var tintStatusBar = false\n        set(value) {\n            field = value\n            invalidateThis()\n        }\n\n    /** Specify if the navigationbar should be tinted. */\n    var tintNavigationBar = true\n        set(value) {\n            field = value\n            invalidateThis()\n        }\n\n    /** Specify if the systemUI should be visible. */\n    var systemUIVisible = true\n        set(value) {\n            field = value\n            invalidateThis()\n        }\n\n    /** Defines the current sticky footer selection */\n    internal var currentStickyFooterSelection = -1\n\n    /** Allow to specify a custom string key postfix for the savedInstanceKey (for multiple sliders). */\n    var savedInstanceKey: String = \"\"\n\n    /** Specify if the layoutManager for the recyclerView. */\n    var layoutManager: RecyclerView.LayoutManager = LinearLayoutManager(context)\n        set(value) {\n            field = value\n            createContent()\n        }\n\n    /** Specify if the [com.mikepenz.fastadapter.IIdDistributor] for the [FastAdapter] */\n    val idDistributor: DefaultIdDistributor<IDrawerItem<*>> = DefaultIdDistributorImpl()\n\n    /** Defines if we want an inner shadow (used in with the MiniDrawer). */\n    var innerShadow = false\n        set(value) {\n            field = value\n            createContent()\n        }\n\n    /** Defines the [AccountHeaderView] bound to this slider */\n    var accountHeader: AccountHeaderView? = null\n        set(value) {\n            field = value\n            if (field?.sliderView != this) {\n                field?.attachToSliderView(this)\n            }\n        }\n\n    /** Defines if the account header shall be displayed as a sticky header. */\n    var accountHeaderSticky = false\n        set(value) {\n            field = value\n            handleHeaderView()\n        }\n\n    /** Defines the [MiniDrawerSliderView] bound to this [MaterialDrawerSliderView] */\n    var miniDrawer: MiniDrawerSliderView? = null\n        set(value) {\n            field = value\n            if (field?.drawer != this) {\n                field?.drawer = this\n            }\n        }\n\n    /** Defines if the drawer should scroll to top after click. */\n    var scrollToTopAfterClick = false\n\n    /** Defines the header view to display in this [MaterialDrawerSliderView]. Note this is not possible when a [AccountHeaderView] is used. */\n    var headerView: View? = null\n        set(value) {\n            field = value\n            headerAdapter.clear()\n            if (value != null) {\n                if (headerPadding) {\n                    headerAdapter.add(ContainerDrawerItem().withView(value).withDivider(headerDivider).withHeight(headerHeight).withViewPosition(ContainerDrawerItem.Position.TOP))\n                } else {\n                    headerAdapter.add(ContainerDrawerItem().withView(value).withDivider(headerDivider).withHeight(headerHeight).withViewPosition(ContainerDrawerItem.Position.NONE))\n                }\n                //we need to set the padding so the header starts on top\n                recyclerView.setPadding(recyclerView.paddingLeft, 0, recyclerView.paddingRight, recyclerView.paddingBottom)\n            }\n        }\n    internal var _headerDivider = true\n\n    /** Defines if there should be a divider below the header. */\n    var headerDivider: Boolean\n        get() = _headerDivider\n        set(value) {\n            _headerDivider = value\n            headerView = headerView // udpate the header view\n        }\n    internal var _headerPadding = true\n\n    /** Defines the apdding for the header divider. */\n    var headerPadding: Boolean\n        get() = _headerPadding\n        set(value) {\n            _headerPadding = value\n            headerView = headerView // udpate the header view\n        }\n\n    /** Defines the height of the header. */\n    var headerHeight: DimenHolder? = null\n        set(value) {\n            field = value\n            handleHeaderView()\n        }\n\n    /** Defines the [View] to be displayed as sticky header. Note this is not possible if a sticky [AccountHeaderView] is uesed. */\n    var stickyHeaderView: View? = null\n        set(value) {\n            field = value\n            handleHeaderView()\n        }\n\n    /** Defines if a shadow shown on the top of the sticky header. */\n    var stickyHeaderShadow = true\n        set(value) {\n            field = value\n            handleHeaderView()\n        }\n\n    /** Defines the footer we want to display with the [MaterialDrawerSliderView]. */\n    var footerView: View? = null\n        set(value) {\n            field = value\n            // set the footer (do this before the setAdapter because some devices will crash else\n            if (value != null) {\n                if (footerDivider) {\n                    footerAdapter.add(ContainerDrawerItem().apply { view = value; viewPosition = ContainerDrawerItem.Position.BOTTOM })\n                } else {\n                    footerAdapter.add(ContainerDrawerItem().apply { view = value; viewPosition = ContainerDrawerItem.Position.NONE })\n                }\n            }\n        }\n\n    /** Defines if the footer should show with a divider. */\n    var footerDivider = true\n        set(value) {\n            field = value\n            footerView = footerView // udpate the footer view\n        }\n    private val footerClickListener = OnClickListener { v ->\n        val drawerItem = v.getTag(R.id.material_drawer_item) as IDrawerItem<*>\n        onFooterDrawerItemClick(this, drawerItem, v, true)\n    }\n\n    internal var _stickyFooterView: ViewGroup? = null\n\n    /** Defines the [ViewGroup] to display as sticky footer. */\n    val stickyFooterView: ViewGroup?\n        get() = _stickyFooterView\n\n    /** Defines if the sticky footer should be displayed with a divider. */\n    var stickyFooterDivider = false\n        set(value) {\n            field = value\n            handleStickyFooterView()\n        }\n\n    /** Defines the shadow [View] to provide for the sticky footer. */\n    var stickyFooterShadowView: View? = null\n        set(value) {\n            field = value\n            handleStickyFooterView()\n        }\n\n    /** Defines if the sticky footer should display a shadow above. */\n    var stickyFooterShadow = true\n        set(value) {\n            field = value\n            handleFooterView()\n        }\n\n    /** Defines if multi select is enabled in this drawer. */\n    var multiSelect\n        set(value) {\n            this.selectExtension.multiSelect = value\n            this.selectExtension.allowDeselection = value\n        }\n        get() = this.selectExtension.multiSelect\n\n    // item to select\n    private var _selectedItemPosition: Int = 0\n\n    /** Defines the currently selected item position. */\n    var selectedItemPosition: Int\n        get() = _selectedItemPosition\n        set(value) {\n            _selectedItemPosition = if (value == 0 && headerView != null) 1 else value\n            this.selectExtension.deselect()\n            this.selectExtension.select(_selectedItemPosition)\n        }\n\n    /** Defines the currently selected item identifier. Note this will not be updated if there are new items selected. */\n    var selectedItemIdentifier: Long = 0\n        set(value) {\n            field = value\n            selectedItemPosition = this.getPosition(selectedItemIdentifier)\n        }\n\n    // the _drawerLayout owning this slider\n    internal var _drawerLayout: DrawerLayout? = null\n\n    /** Defines the [DrawerLayout] bound to this [MaterialDrawerSliderView]. */\n    val drawerLayout: DrawerLayout?\n        get() = _drawerLayout\n\n    /** Defines if we want to use a custom width with this [MaterialDrawerSliderView]. */\n    var customWidth: Int? = null\n        set(value) {\n            field = value\n            onAttachedToWindow()\n        }\n\n    /** Defines the [RecyclerView] used in this [MaterialDrawerSliderView]. */\n    lateinit var recyclerView: RecyclerView\n\n    /** Defines if the adapter should enable hasStableIds to improve performance and allow animations. */\n    var hasStableIds = true\n        set(value) {\n            field = value\n            recyclerView.adapter = null // disconnect the RV\n            adapter.setHasStableIds(hasStableIds)\n            attachAdapter() // reattach the RV\n        }\n\n    // an adapter to use for the list\n    internal lateinit var _adapter: FastAdapter<IDrawerItem<*>>\n\n    /** Defines the adapter for the header items */\n    var headerAdapter: ModelAdapter<IDrawerItem<*>, IDrawerItem<*>> = ItemAdapter()\n        internal set\n\n    /** Defines the adapter for the normal items */\n    var itemAdapter: ModelAdapter<IDrawerItem<*>, IDrawerItem<*>> = ItemAdapter()\n        internal set\n\n    /** Defines the adapter for the account items (if we switch the set of elements) */\n    var secondaryItemAdapter: ModelAdapter<IDrawerItem<*>, IDrawerItem<*>> = ItemAdapter()\n        internal set\n\n    /** Defines the adapter for the footer items */\n    var footerAdapter: ModelAdapter<IDrawerItem<*>, IDrawerItem<*>> = ItemAdapter()\n        internal set\n    lateinit var expandableExtension: ExpandableExtension<IDrawerItem<*>>\n    lateinit var selectExtension: SelectExtension<IDrawerItem<*>>\n\n    /**\n     * Defines the [FastAdapter] used to display elements in the [MaterialDrawerSliderView]\n     */\n    var adapter: FastAdapter<IDrawerItem<*>>\n        get() {\n            if (!::_adapter.isInitialized) {\n                secondaryItemAdapter.active = false\n                _adapter = FastAdapter.with(listOf(headerAdapter, itemAdapter, secondaryItemAdapter, footerAdapter))\n                _adapter.setHasStableIds(hasStableIds)\n                initAdapter()\n                this.selectExtension.isSelectable = true\n                this.selectExtension.multiSelect = false\n                this.selectExtension.allowDeselection = false\n            }\n            return _adapter\n        }\n        set(value) {\n            secondaryItemAdapter.active = false\n            _adapter = value\n            this.selectExtension = _adapter.getOrCreateExtension(SelectExtension::class.java)!! // is definitely not null\n            //we have to rewrap as a different FastAdapter was provided\n            _adapter.addAdapter(0, headerAdapter)\n            _adapter.addAdapter(1, itemAdapter)\n            _adapter.addAdapter(2, secondaryItemAdapter)\n            _adapter.addAdapter(3, footerAdapter)\n            initAdapter()\n        }\n\n    /** Defines an Adapter which wraps the main Adapter used in the RecyclerView to allow extended navigation and other stuff */\n    var adapterWrapper: RecyclerView.Adapter<*>? = null\n        set(value) {\n            if (!::_adapter.isInitialized) {\n                throw RuntimeException(\"this adapter has to be set in conjunction to a normal adapter which is used inside this wrapper adapter\")\n            }\n            field = value\n            createContent()\n        }\n\n    /** defines the itemAnimator to be used in conjunction with the RecyclerView */\n    var itemAnimator: RecyclerView.ItemAnimator = DefaultItemAnimator()\n        set(value) {\n            field = value\n            createContent()\n        }\n\n    /** Defines if the drawer should be closed on a click */\n    var closeOnClick = true\n\n    /** Defines the delay before the drawer gets closed after a click. This is meant to prevent lag */\n    var delayOnDrawerClose = 50\n\n    /** delay drawer click event to prevent lag (you should either choose DelayOnDrawerClose or this) */\n    var delayDrawerClickEvent = 0\n\n    /** defines if we want to keep the sticky items visible, upon switching to the profiles */\n    var keepStickyItemsVisible = false\n\n    /** Defines the set of stickyDrawerItems to show */\n    var stickyDrawerItems: MutableList<IDrawerItem<*>> = ArrayList()\n\n    /** Defines the click listener to listen for clicks on drawer items */\n    var onDrawerItemClickListener: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)? = null\n\n    /** Defines the long click listener to listen for long clicks on drawer items */\n    var onDrawerItemLongClickListener: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)? = null\n\n    //variables to store and remember the original list of the drawer\n    private var originalOnDrawerItemClickListener: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)? = null\n    private var originalOnDrawerItemLongClickListener: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)? = null\n    private var originalDrawerState: Bundle? = null\n\n    init {\n        val a = context.obtainStyledAttributes(attrs, R.styleable.MaterialDrawerSliderView, defStyleAttr, R.style.Widget_MaterialDrawerStyle)\n        insetForeground = a.getDrawable(R.styleable.MaterialDrawerSliderView_materialDrawerInsetForeground)\n        background = a.getDrawable(R.styleable.MaterialDrawerSliderView_materialDrawerBackground)\n        a.recycle()\n        setWillNotDraw(true) // No need to draw until the insets are adjusted\n\n        adapter // call getter to setup\n        createContent()\n\n        ViewCompat.setOnApplyWindowInsetsListener(this) { v, insets ->\n            if (null == this.insets) {\n                this.insets = Rect()\n            }\n\n            this.insets?.set(insets.systemWindowInsetLeft, insets.systemWindowInsetTop, insets.systemWindowInsetRight, insets.systemWindowInsetBottom)\n\n            if (headerView == null && accountHeader == null) {\n                if (stickyHeaderView == null) {\n                    recyclerView.updatePadding(top = insets.systemWindowInsetTop + context.resources.getDimensionPixelSize(R.dimen.material_drawer_padding_top_bottom))\n                }\n            }\n            if (stickyFooterView == null) {\n                recyclerView.updatePadding(bottom = insets.systemWindowInsetBottom + context.resources.getDimensionPixelSize(R.dimen.material_drawer_padding_top_bottom))\n            } else {\n                stickyFooterView?.updatePadding(bottom = insets.systemWindowInsetBottom + context.resources.getDimensionPixelSize(R.dimen.material_drawer_padding_top_bottom))\n            }\n\n            setWillNotDraw(insetForeground == null)\n            ViewCompat.postInvalidateOnAnimation(this@MaterialDrawerSliderView)\n            onInsetsCallback?.invoke(insets)\n            insets\n        }\n    }\n\n    override fun draw(canvas: Canvas) {\n        super.draw(canvas)\n\n        val width = width\n        val height = height\n        val insets = insets\n        val insetForeground = insetForeground\n        if (insets != null && insetForeground != null) {\n            val sc = canvas.save()\n            canvas.translate(scrollX.toFloat(), scrollY.toFloat())\n\n            if (!systemUIVisible) {\n                insets.top = 0\n                insets.right = 0\n                insets.bottom = 0\n                insets.left = 0\n            }\n\n            // Top\n            if (tintStatusBar) {\n                tempRect.set(0, 0, width, insets.top)\n                insetForeground.bounds = tempRect\n                insetForeground.draw(canvas)\n            }\n\n            // Bottom\n            if (tintNavigationBar) {\n                tempRect.set(0, height - insets.bottom, width, height)\n                insetForeground.bounds = tempRect\n                insetForeground.draw(canvas)\n            }\n            // Left\n            if (tintNavigationBar) {\n                tempRect.set(0, insets.top, insets.left, height - insets.bottom)\n                insetForeground.bounds = tempRect\n                insetForeground.draw(canvas)\n            }\n\n            // Right\n            if (tintNavigationBar) {\n                tempRect.set(width - insets.right, insets.top, width, height - insets.bottom)\n                insetForeground.bounds = tempRect\n                insetForeground.draw(canvas)\n            }\n\n            canvas.restoreToCount(sc)\n        }\n    }\n\n    override fun onAttachedToWindow() {\n        super.onAttachedToWindow()\n        insetForeground?.callback = this\n\n        if (parent != null) {\n            _drawerLayout = parent as? DrawerLayout ?: parent.parent as? DrawerLayout\n                    ?: parent.parent.parent as? DrawerLayout // give it 3 parents chance to find the parent\n            layoutParams?.also {\n                // if this is a drawer from the right, change the margins :D &  set the new params\n                it.width = customWidth ?: getOptimalDrawerWidth(context)\n                layoutParams = it\n            }\n        }\n    }\n\n    override fun onDetachedFromWindow() {\n        super.onDetachedFromWindow()\n        insetForeground?.callback = null\n    }\n\n\n    /**\n     * Set the Bundle (savedInstance) which is passed by the activity.\n     * No need to null-check everything is handled automatically\n     */\n    @Deprecated(\"Replaced with setSavedInstance\", ReplaceWith(\"setSavedInstance(savedInstance)\"))\n    fun withSavedInstance(savedInstance: Bundle?) {\n        setSavedInstance(savedInstance)\n    }\n\n    /**\n     * Set the Bundle (savedInstance) which is passed by the activity.\n     * No need to null-check everything is handled automatically\n     */\n    fun setSavedInstance(savedInstance: Bundle?) {\n        savedInstance ?: return\n        // try to restore all saved values again\n        this.selectExtension.deselect()\n        adapter.withSavedInstanceState(savedInstance, BUNDLE_SELECTION + savedInstanceKey)\n        this.setStickyFooterSelection(savedInstance.getInt(BUNDLE_STICKY_FOOTER_SELECTION + savedInstanceKey, -1), null)\n\n        //toggle selection list if we were previously on the account list\n        if (savedInstance.getBoolean(BUNDLE_DRAWER_CONTENT_SWITCHED + savedInstanceKey, false)) {\n            accountHeader?.toggleSelectionList()\n        }\n    }\n\n    private fun initAdapter() {\n        ExtensionsFactories.register(SelectExtensionFactory())\n        ExtensionsFactories.register(ExpandableExtensionFactory())\n\n        this.selectExtension = adapter.getOrCreateExtension(SelectExtension::class.java)!! // is definitely not null\n        headerAdapter.idDistributor = idDistributor\n        itemAdapter.idDistributor = idDistributor\n        footerAdapter.idDistributor = idDistributor\n        expandableExtension = adapter.getOrCreateExtension(ExpandableExtension::class.java)!! // is definitely not null\n    }\n\n    /**\n     * the helper method to create the content for the drawer\n     */\n    private fun createContent() {\n        if (!invalidationEnabled) {\n            invalidateContent = true\n            return\n        }\n        invalidateContent = false\n\n        // if we have an adapter (either by defining a custom one or the included one add a list :D\n        val contentView: View\n        if (!::recyclerView.isInitialized) {\n            contentView = LayoutInflater.from(context).inflate(R.layout.material_drawer_recycler_view, this, false)\n            recyclerView = contentView.findViewById(R.id.material_drawer_recycler_view)\n            //some style improvements on older devices\n            recyclerView.setFadingEdgeLength(0)\n            recyclerView.clipToPadding = false\n        } else {\n            contentView = recyclerView\n        }\n\n        //set the itemAnimator\n        recyclerView.itemAnimator = itemAnimator\n        //additional stuff\n        recyclerView.layoutManager = layoutManager\n\n        val params = LinearLayout.LayoutParams(\n            ViewGroup.LayoutParams.MATCH_PARENT,\n            ViewGroup.LayoutParams.MATCH_PARENT\n        )\n        params.weight = 1f\n\n        this.removeView(contentView) // ensure the view is not already part\n        this.addView(contentView, params)\n\n        if (innerShadow) {\n            var innerShadow = this.findViewById<View?>(R.id.material_drawer_inner_shadow)\n            if (innerShadow == null) {\n                innerShadow = LayoutInflater.from(context).inflate(R.layout.material_drawer_inner_shadow, this, false)!!\n                this.addView(innerShadow)\n            }\n\n            innerShadow.visibility = View.VISIBLE\n            innerShadow.bringToFront()\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN && gravity == GravityCompat.END) {\n                innerShadow.setBackgroundResource(R.drawable.material_drawer_shadow_right)\n            } else {\n                innerShadow.setBackgroundResource(R.drawable.material_drawer_shadow_left)\n            }\n        } else {\n            removeView(this.findViewById(R.id.material_drawer_inner_shadow))\n        }\n\n        //handle the header\n        handleHeaderView()\n\n        //handle the footer\n        handleFooterView()\n\n        //set the adapter on the listView\n        attachAdapter()\n\n        //predefine selection (should be the first element)\n        selectedItemPosition = _selectedItemPosition\n\n        // add the onDrawerItemClickListener if set\n        adapter.onClickListener = { v: View?, _: IAdapter<IDrawerItem<*>>, item: IDrawerItem<*>, position: Int ->\n            if (item.isSelectable) {\n                resetStickyFooterSelection()\n                currentStickyFooterSelection = -1\n            }\n\n            //call the listener\n            var consumed = false\n\n            //call the item specific listener\n            if (item is AbstractDrawerItem<*, *>) {\n                consumed = item.onDrawerItemClickListener?.invoke(v, item, position) ?: false\n            }\n\n            //we have to notify the miniDrawer if existing, and if the event was not consumed yet\n            if (!consumed) {\n                consumed = miniDrawer?.onItemClick(item) ?: false\n            }\n\n            //call the drawer listener\n            onDrawerItemClickListener?.let { mOnDrawerItemClickListener ->\n                if (delayDrawerClickEvent > 0) {\n                    Handler().postDelayed({ mOnDrawerItemClickListener.invoke(v, item, position) }, delayDrawerClickEvent.toLong())\n                } else {\n                    consumed = mOnDrawerItemClickListener.invoke(v, item, position)\n                }\n            }\n\n            //if we were a expandable item we consume the event closing makes no sense\n            if (item.subItems.isNotEmpty()) {\n                //we consume the event and want no further handling\n                true\n            } else {\n                if (!consumed) {\n                    //close the drawer after click\n                    closeDrawerDelayed()\n                }\n                consumed\n            }\n        }\n        // add the onDrawerItemLongClickListener if set\n        adapter.onLongClickListener = { v: View, _: IAdapter<IDrawerItem<*>>, item: IDrawerItem<*>, position: Int ->\n            onDrawerItemLongClickListener?.invoke(v, item, position) ?: false\n        }\n\n        recyclerView.scrollToPosition(0)\n    }\n\n    /**\n     * Attaches the adapter to the recyclerView\n     */\n    private fun attachAdapter() {\n        //set the adapter on the listView\n        if (adapterWrapper == null) {\n            recyclerView.adapter = adapter\n        } else {\n            recyclerView.adapter = adapterWrapper\n        }\n    }\n\n    /**\n     * simple helper method to reset the selection of the sticky footer\n     */\n    internal fun resetStickyFooterSelection() {\n        val stickyFooterView = stickyFooterView ?: return\n        if (stickyFooterView is LinearLayout) {\n            for (i in 0 until stickyFooterView.childCount) {\n                stickyFooterView.getChildAt(i).isActivated = false\n                stickyFooterView.getChildAt(i).isSelected = false\n            }\n        }\n    }\n\n    /**\n     * helper method to close the drawer delayed\n     */\n    internal fun closeDrawerDelayed() {\n        if (closeOnClick && _drawerLayout != null) {\n            if (delayOnDrawerClose > -1) {\n                Handler().postDelayed({\n                    _drawerLayout?.closeDrawers()\n\n                    if (scrollToTopAfterClick) {\n                        recyclerView.smoothScrollToPosition(0)\n                    }\n                }, delayOnDrawerClose.toLong())\n            } else {\n                _drawerLayout?.closeDrawers()\n            }\n        }\n    }\n\n    /**\n     * information if the current drawer content is switched by alternative content (profileItems)\n     */\n    fun switchedDrawerContent(): Boolean {\n        return !(originalOnDrawerItemClickListener == null && originalDrawerState == null)\n    }\n\n    /**\n     * method to switch the drawer content to new elements\n     */\n    fun switchDrawerContent(\n        onDrawerItemClickListenerInner: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)?,\n        onDrawerItemLongClickListenerInner: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)?,\n        drawerItemsInner: List<IDrawerItem<*>>,\n        drawerSelection: Int,\n    ) {\n        //just allow a single switched drawer\n        if (!switchedDrawerContent()) {\n            //save out previous values\n            originalOnDrawerItemClickListener = onDrawerItemClickListener\n            originalOnDrawerItemLongClickListener = onDrawerItemLongClickListener\n            originalDrawerState = adapter.saveInstanceState(Bundle())\n            expandableExtension.collapse(false)\n\n            secondaryItemAdapter.active = true\n            itemAdapter.active = false\n        }\n\n        //set the new items\n        onDrawerItemClickListener = onDrawerItemClickListenerInner\n        onDrawerItemLongClickListener = onDrawerItemLongClickListenerInner\n        secondaryItemAdapter.set(drawerItemsInner)\n        setSelectionAtPosition(drawerSelection, false)\n\n        if (!keepStickyItemsVisible) {\n            //hide stickyFooter and it's shadow\n            stickyFooterView?.visibility = View.GONE\n            stickyFooterShadowView?.visibility = View.GONE\n        }\n    }\n\n    /**\n     * helper method to reset to the original drawerContent\n     */\n    fun resetDrawerContent() {\n        if (switchedDrawerContent()) {\n            //set the new items\n            onDrawerItemClickListener = originalOnDrawerItemClickListener\n            onDrawerItemLongClickListener = originalOnDrawerItemLongClickListener\n            adapter.withSavedInstanceState(originalDrawerState)\n            //remove the references\n            originalOnDrawerItemClickListener = null\n            originalOnDrawerItemLongClickListener = null\n            originalDrawerState = null\n\n            secondaryItemAdapter.active = false\n            itemAdapter.active = true\n\n            //if we switch back scroll back to the top\n            recyclerView.smoothScrollToPosition(0)\n\n            //show the stickyFooter and it's shadow again\n            stickyFooterView?.visibility = View.VISIBLE\n            stickyFooterShadowView?.visibility = View.VISIBLE\n\n            //if we currently show the accountHeader selection list make sure to reset this attr\n            accountHeader?._selectionListShown = false\n        }\n    }\n\n    /**\n     * set the current selection in the drawer\n     * NOTE: this also deselects all other selections. if you do not want this. use the direct api of the adater .getAdapter().select(position, fireOnClick)\n     * NOTE: This will trigger onDrawerItemSelected without a view if you pass fireOnClick = true;\n     */\n    @JvmOverloads\n    fun setSelectionAtPosition(position: Int, fireOnClick: Boolean = true): Boolean {\n        selectExtension.deselect()\n        if (position >= 0) {\n            selectExtension.select(position, false)\n            notifySelect(position, fireOnClick)\n        }\n        return false\n    }\n\n    private fun notifySelect(position: Int, fireOnClick: Boolean) {\n        _selectedItemPosition = position\n        if (fireOnClick && position >= 0) {\n            adapter.getItem(position)?.let { item ->\n                if (item is AbstractDrawerItem<*, *>) {\n                    item.onDrawerItemClickListener?.invoke(null, item, position)\n                }\n                onDrawerItemClickListener?.invoke(null, item, position)\n            }\n        }\n\n        //we set the selection on a normal item in the drawer so we have to deselect the items in the StickyDrawer\n        resetStickyFooterSelection()\n    }\n\n    /**\n     * set the current selection in the drawer\n     * NOTE: This will trigger onDrawerItemSelected without a view if you pass fireOnClick = true;\n     *\n     * @param identifier  the identifier to search for\n     * @param fireOnClick true if the click listener should be called\n     */\n    @JvmOverloads\n    fun setSelection(identifier: Long, fireOnClick: Boolean = true) {\n        val select = adapter.getSelectExtension()\n        select.selectByIdentifier(identifier, false, true)\n\n        //we also have to call the general notify\n        val res = adapter.getItemById(identifier)\n        if (res != null) {\n            val position = res.second\n            notifySelect(position ?: -1, fireOnClick)\n        }\n    }\n\n    /**\n     * add the values to the bundle for saveInstanceState\n     */\n    fun saveInstanceState(_savedInstanceState: Bundle): Bundle {\n        adapter.saveInstanceState(_savedInstanceState, BUNDLE_SELECTION + savedInstanceKey).apply {\n            putInt(BUNDLE_STICKY_FOOTER_SELECTION + savedInstanceKey, currentStickyFooterSelection)\n            putBoolean(BUNDLE_DRAWER_CONTENT_SWITCHED + savedInstanceKey, switchedDrawerContent())\n        }\n        return _savedInstanceState\n    }\n\n\n    /**\n     * Invalidates the `IconicsDrawable` if invalidation is currently enabled\n     */\n    private fun invalidateThis() {\n        if (invalidationEnabled) {\n            invalidate()\n        }\n    }\n\n    /**\n     * Invalidates the header view in an optimized form\n     */\n    private fun handleHeaderView() {\n        if (!invalidationEnabled) {\n            invalidateHeader = true\n            return\n        }\n        invalidateHeader = false\n        handleHeaderView(this)\n    }\n\n    /**\n     * Invalidates the footer view in an optimized form\n     */\n    private fun handleFooterView() {\n        if (!invalidationEnabled) {\n            invalidateFooter = true\n            return\n        }\n        invalidateFooter = false\n        handleFooterView(this, footerClickListener)\n    }\n\n    /**\n     * Invalidates the sticky footer view in an optimized form\n     */\n    internal fun handleStickyFooterView() {\n        if (!invalidationEnabled) {\n            invalidateStickyFooter = true\n            return\n        }\n        invalidateStickyFooter = false\n        rebuildStickyFooterView(this)\n    }\n\n    /** Applies properties in an optimized form. Will disable invalidation of the MaterialDrawerSliderView for the inner property set operations */\n    fun apply(block: MaterialDrawerSliderView.() -> Unit): MaterialDrawerSliderView {\n        invalidationEnabled = false\n        block()\n        invalidationEnabled = true\n        if (invalidateContent) {\n            createContent()\n        }\n        if (invalidateHeader) {\n            handleHeaderView()\n        }\n        if (invalidateFooter) {\n            handleFooterView()\n        }\n        if (invalidateStickyFooter) {\n            handleStickyFooterView()\n        }\n        invalidate()\n        return this\n    }\n\n    companion object {\n        /**\n         * BUNDLE param to store the selection\n         */\n        const val BUNDLE_SELECTION = \"_selection\"\n        const val BUNDLE_STICKY_FOOTER_SELECTION = \"bundle_sticky_footer_selection\"\n        const val BUNDLE_DRAWER_CONTENT_SWITCHED = \"bundle_drawer_content_switched\"\n\n        /**\n         * Defines globally if we should animat selection state changes of the background\n         */\n        var DEFAULT_SELECTED_BACKGROUND_ANIMATED = true\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/java/com/mikepenz/materialdrawer/widget/MiniDrawerSliderView.kt",
    "content": "package com.mikepenz.materialdrawer.widget\n\nimport android.content.Context\nimport android.util.AttributeSet\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.LinearLayout\nimport androidx.core.view.ViewCompat\nimport androidx.drawerlayout.widget.DrawerLayout\nimport androidx.recyclerview.widget.DefaultItemAnimator\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport androidx.recyclerview.widget.RecyclerView\nimport com.mikepenz.fastadapter.FastAdapter\nimport com.mikepenz.fastadapter.IAdapter\nimport com.mikepenz.fastadapter.adapters.ItemAdapter\nimport com.mikepenz.fastadapter.select.SelectExtension\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.interfaces.ICrossfader\nimport com.mikepenz.materialdrawer.model.*\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.withEnabled\nimport com.mikepenz.materialdrawer.model.utils.hiddenInMiniDrawer\nimport com.mikepenz.materialdrawer.util.getDrawerItem\n\n/**\n * This view is a simple drop in view for the [DrawerLayout] or as companion to a [MaterialDrawerSliderView] offering a convenient API to provide a nice and flexible mini slider view following\n * the material design guidelines v2.\n */\nopen class MiniDrawerSliderView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = R.attr.materialDrawerStyle) : LinearLayout(context, attrs, defStyleAttr) {\n\n    /**\n     * get the RecyclerView of this MiniDrawer\n     *\n     * @return\n     */\n    val recyclerView: RecyclerView\n\n    /**\n     * get the FastAdapter of this MiniDrawer\n     *\n     * @return\n     */\n    val adapter: FastAdapter<IDrawerItem<*>>\n\n    /**\n     * get the ItemAdapter of this MiniDrawer\n     *\n     * @return\n     */\n    val itemAdapter: ItemAdapter<IDrawerItem<*>>\n    val selectExtension: SelectExtension<IDrawerItem<*>>\n\n    /**\n     * get the Drawer used to fill this MiniDrawer\n     *\n     * @return\n     */\n    var drawer: MaterialDrawerSliderView? = null\n        set(value) {\n            field = value\n            if (field?.miniDrawer != this) {\n                field?.miniDrawer = this\n            }\n            createItems()\n        }\n\n    /**\n     * get the AccountHeader used to fill the this MiniDrawer\n     *\n     * @return\n     */\n    val accountHeader: AccountHeaderView?\n        get() = drawer?.accountHeader\n\n    /**\n     * get the Crossfader used for this MiniDrawer\n     *\n     * @return\n     */\n    var crossFader: ICrossfader? = null\n\n    var innerShadow = false\n        set(value) {\n            field = value\n            updateInnerShadow()\n        }\n\n    var inRTL = false\n        set(value) {\n            field = value\n            updateInnerShadow()\n        }\n\n    var includeSecondaryDrawerItems = false\n        set(value) {\n            field = value\n            createItems()\n        }\n\n    var enableSelectedMiniDrawerItemBackground = false\n        set(value) {\n            field = value\n            createItems()\n        }\n\n    var enableProfileClick = true\n        set(value) {\n            field = value\n            createItems()\n        }\n\n    private var onMiniDrawerItemClickListener: ((view: View?, position: Int, drawerItem: IDrawerItem<*>, type: Int) -> Boolean)? = null\n    private var onMiniDrawerItemOnClickListener: ((v: View?, adapter: IAdapter<IDrawerItem<*>>, item: IDrawerItem<*>, position: Int) -> Boolean)? = null\n        set(value) {\n            field = value\n            if (value == null) {\n                createItems()\n            } else {\n                adapter.onClickListener = value\n            }\n        }\n    private var onMiniDrawerItemLongClickListener: ((v: View, adapter: IAdapter<IDrawerItem<*>>, item: IDrawerItem<*>, position: Int) -> Boolean)? = null\n        set(value) {\n            field = value\n            adapter.onLongClickListener = value\n        }\n\n    /**\n     * returns always the original drawerItems and not the switched content\n     *\n     * @return\n     */\n    private val drawerItems: List<IDrawerItem<*>>\n        get() = drawer?.itemAdapter?.adapterItems ?: ArrayList()\n\n    init {\n        val a = context.obtainStyledAttributes(attrs, R.styleable.MaterialDrawerSliderView, defStyleAttr, R.style.Widget_MaterialDrawerStyle)\n        background = a.getDrawable(R.styleable.MaterialDrawerSliderView_materialDrawerBackground)\n        a.recycle()\n\n        updateInnerShadow()\n\n        //create and append recyclerView\n        recyclerView = RecyclerView(context)\n        addView(recyclerView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)\n\n        //set the itemAnimator\n        recyclerView.itemAnimator = DefaultItemAnimator()\n        //some style improvements on older devices\n        recyclerView.setFadingEdgeLength(0)\n        //set the drawing cache background to the same color as the slider to improve performance\n        recyclerView.clipToPadding = false\n        //additional stuff\n        recyclerView.layoutManager = LinearLayoutManager(context)\n        //adapter\n        itemAdapter = ItemAdapter()\n        adapter = FastAdapter.with(itemAdapter)\n        selectExtension = adapter.getOrCreateExtension(SelectExtension::class.java)!! // definitely not null\n        selectExtension.isSelectable = true\n        selectExtension.allowDeselection = false\n        recyclerView.adapter = adapter\n\n        // set the insets\n        ViewCompat.setOnApplyWindowInsetsListener(this) { v, insets ->\n            recyclerView.setPadding(recyclerView.paddingLeft, insets.systemWindowInsetTop, recyclerView.paddingRight, insets.systemWindowInsetBottom)\n            insets\n        }\n\n        //set the adapter with the items\n        createItems()\n    }\n\n    private fun updateInnerShadow() {\n        if (innerShadow) {\n            if (!inRTL) {\n                setBackgroundResource(R.drawable.material_drawer_shadow_left)\n            } else {\n                setBackgroundResource(R.drawable.material_drawer_shadow_right)\n            }\n        } else {\n            background = null\n        }\n    }\n\n    /**\n     * call this method to trigger the onProfileClick on the MiniDrawer\n     */\n    fun onProfileClick() {\n        //crossfade if we are cross faded\n        crossFader?.let {\n            if (it.isCrossfaded) {\n                it.crossfade()\n            }\n        }\n\n        //update the current profile\n        accountHeader?.let {\n            val profile = it.activeProfile\n            if (profile is IDrawerItem<*>) {\n                generateMiniDrawerItem(profile as IDrawerItem<*>)?.let { item ->\n                    itemAdapter.set(0, item)\n                }\n            }\n        }\n    }\n\n    /**\n     * call this method to trigger the onItemClick on the MiniDrawer\n     *\n     * @param selectedDrawerItem\n     * @return\n     */\n    fun onItemClick(selectedDrawerItem: IDrawerItem<*>): Boolean {\n        //We only need to clear if the new item is selectable\n        return if (selectedDrawerItem.isSelectable) {\n            // crossfade if we are cross faded\n            crossFader?.let {\n                if (drawer?.closeOnClick == true && it.isCrossfaded) {\n                    it.crossfade()\n                }\n            }\n            // update everything\n            if (selectedDrawerItem.hiddenInMiniDrawer) {\n                selectExtension.deselect()\n            } else {\n                setSelection(selectedDrawerItem.identifier)\n            }\n\n            false\n        } else {\n            true\n        }\n    }\n\n    /**\n     * set the selection of the MiniDrawer\n     *\n     * @param identifier the identifier of the item which should be selected (-1 for none)\n     */\n    fun setSelection(identifier: Long) {\n        if (identifier == -1L) {\n            selectExtension.deselect()\n            return\n        }\n        val count = adapter.itemCount\n        for (i in 0 until count) {\n            val item = adapter.getItem(i)\n            if (item?.identifier == identifier && !item.isSelected) {\n                selectExtension.deselect()\n                selectExtension.select(i)\n            }\n        }\n    }\n\n    /**\n     * update a MiniDrawerItem (after updating the main Drawer) via its identifier\n     *\n     * @param identifier the identifier of the item which was updated\n     */\n    fun updateItem(identifier: Long) {\n        if (drawer != null && identifier != -1L) {\n            drawerItems.getDrawerItem(identifier)?.let { drawerItem ->\n                for (i in 0 until itemAdapter.adapterItems.size) {\n                    if (itemAdapter.adapterItems[i].identifier == drawerItem.identifier) {\n                        val miniDrawerItem = generateMiniDrawerItem(drawerItem)\n                        if (miniDrawerItem != null) {\n                            itemAdapter[i] = miniDrawerItem\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    /**\n     * creates the items for the MiniDrawer\n     */\n    open fun createItems() {\n        itemAdapter.clear()\n\n        var profileOffset = 0\n        accountHeader?.let { accountHeader ->\n            val profile = accountHeader.activeProfile\n            if (profile is IDrawerItem<*>) {\n                generateMiniDrawerItem(profile as IDrawerItem<*>)?.let {\n                    itemAdapter.add(it)\n                }\n                profileOffset = 1\n            }\n        }\n\n        var select = -1\n        if (drawer != null) {\n            //migrate to miniDrawerItems\n            val length = drawerItems.size\n\n            var position = 0\n            for (i in 0 until length) {\n                val miniDrawerItem = generateMiniDrawerItem(drawerItems[i])\n                if (miniDrawerItem != null) {\n                    if (miniDrawerItem.isSelected) {\n                        select = position\n                    }\n                    itemAdapter.add(miniDrawerItem)\n                    position += 1\n                }\n            }\n\n            if (select >= 0) {\n                //+1 because of the profile\n                selectExtension.select(select + profileOffset)\n            }\n        }\n\n        //listener\n        if (this.onMiniDrawerItemOnClickListener != null) {\n            adapter.onClickListener = this.onMiniDrawerItemOnClickListener\n        } else {\n            adapter.onClickListener = { v: View?, _: IAdapter<IDrawerItem<*>>, item: IDrawerItem<*>, position: Int ->\n                val type = getMiniDrawerType(item)\n\n                //if a listener is defined and we consume the event return\n                if (onMiniDrawerItemClickListener?.invoke(v, position, item, type) == true) {\n                    false\n                } else {\n                    if (type == ITEM) {\n                        //fire the onClickListener also if the specific drawerItem is not Selectable\n                        if (item.isSelectable) {\n                            //make sure we are on the original drawerItemList\n                            accountHeader?.let {\n                                if (it.selectionListShown) {\n                                    it.toggleSelectionList()\n                                }\n                            }\n                            val drawerItem = drawer?.getDrawerItem(item.identifier)\n                            if (drawerItem != null && !drawerItem.isSelected) {\n                                //set the selection\n                                drawer?.selectExtension?.deselect()\n                                drawer?.setSelection(item.identifier, true)\n                            }\n                        } else if (drawer?.onDrawerItemClickListener != null) {\n                            drawerItems.getDrawerItem(item.identifier)?.let {\n                                //get the original `DrawerItem` from the Drawer as this one will contain all information\n                                drawer?.onDrawerItemClickListener?.invoke(v, it, position)\n                            }\n                        }\n                    } else if (type == PROFILE) {\n                        accountHeader?.let {\n                            if (!it.selectionListShown) {\n                                it.toggleSelectionList()\n                            }\n                        }\n\n                        crossFader?.crossfade()\n                    }\n                    false\n                }\n            }\n        }\n        adapter.onLongClickListener = onMiniDrawerItemLongClickListener\n        recyclerView.scrollToPosition(0)\n    }\n\n    /**\n     * generates a MiniDrawerItem from a IDrawerItem\n     *\n     * @param drawerItem\n     * @return\n     */\n    open fun generateMiniDrawerItem(drawerItem: IDrawerItem<*>): IDrawerItem<*>? {\n        return when (drawerItem) {\n            is SecondaryDrawerItem -> if (includeSecondaryDrawerItems && !drawerItem.hiddenInMiniDrawer) MiniDrawerItem(drawerItem).withEnableSelectedBackground(enableSelectedMiniDrawerItemBackground).withSelectedBackgroundAnimated(false) else null\n            is PrimaryDrawerItem -> if (!drawerItem.hiddenInMiniDrawer) MiniDrawerItem(drawerItem).withEnableSelectedBackground(enableSelectedMiniDrawerItemBackground).withSelectedBackgroundAnimated(false) else null\n            is ProfileDrawerItem -> MiniProfileDrawerItem(drawerItem).apply { withEnabled(enableProfileClick) }\n            else -> null\n        }\n    }\n\n    /**\n     * gets the type of a IDrawerItem\n     *\n     * @param drawerItem\n     * @return\n     */\n    open fun getMiniDrawerType(drawerItem: IDrawerItem<*>): Int {\n        if (drawerItem is MiniProfileDrawerItem) {\n            return PROFILE\n        } else if (drawerItem is MiniDrawerItem) {\n            return ITEM\n        }\n        return -1\n    }\n\n    companion object {\n        val PROFILE = 1\n        val ITEM = 2\n    }\n}\n"
  },
  {
    "path": "materialdrawer/src/main/res/color/color_drawer_item_text.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"?colorOnSecondaryContainer\" android:state_selected=\"true\" />\n    <item android:color=\"?colorOnSurfaceVariant\" />\n</selector>"
  },
  {
    "path": "materialdrawer/src/main/res/drawable/material_drawer_badge.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <corners android:radius=\"5dp\" />\n    <solid android:color=\"@android:color/black\" />\n</shape>"
  },
  {
    "path": "materialdrawer/src/main/res/drawable/material_drawer_circle_mask.xml",
    "content": "<!--\n  Copyright 2014 Google Inc. All rights reserved.\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<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:shape=\"oval\">\n    <solid android:color=\"#000\" />\n</shape>"
  },
  {
    "path": "materialdrawer/src/main/res/drawable/material_drawer_ico_account_layer.xml",
    "content": "<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@+id/background\">\n        <shape android:shape=\"rectangle\">\n            <solid android:color=\"#000\" />\n        </shape>\n    </item>\n    <item\n        android:id=\"@+id/account\"\n        android:drawable=\"@drawable/material_drawer_ico_account\"\n        android:gravity=\"center\" />\n</layer-list>"
  },
  {
    "path": "materialdrawer/src/main/res/drawable/material_drawer_ico_chevron_down.xml",
    "content": "<!-- drawable/chevron_down.xml -->\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <group\n        android:pivotX=\"12\"\n        android:pivotY=\"12\"\n        android:scaleX=\"1.5\"\n        android:scaleY=\"1.5\">\n        <path\n            android:fillColor=\"#000\"\n            android:pathData=\"M7.41,8.58L12,13.17L16.59,8.58L18,10L12,16L6,10L7.41,8.58Z\" />\n    </group>\n</vector>"
  },
  {
    "path": "materialdrawer/src/main/res/drawable/material_drawer_ico_menu_down.xml",
    "content": "<!-- drawable/menu_down.xml -->\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n\n    <group\n        android:pivotX=\"12\"\n        android:pivotY=\"12\"\n        android:scaleX=\"1.5\"\n        android:scaleY=\"1.5\">\n        <path\n            android:fillColor=\"#000\"\n            android:pathData=\"M7,10L12,15L17,10H7Z\" />\n    </group>\n</vector>"
  },
  {
    "path": "materialdrawer/src/main/res/drawable/material_drawer_rectangle_mask.xml",
    "content": "<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:shape=\"rectangle\">\n    <solid android:color=\"#000\" />\n</shape>"
  },
  {
    "path": "materialdrawer/src/main/res/drawable/material_drawer_shadow_bottom.xml",
    "content": "<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:shape=\"rectangle\">\n    <gradient\n        android:angle=\"90\"\n        android:endColor=\"#40000000\"\n        android:startColor=\"@android:color/transparent\" />\n</shape>"
  },
  {
    "path": "materialdrawer/src/main/res/drawable/material_drawer_shadow_top.xml",
    "content": "<shape xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:shape=\"rectangle\">\n    <gradient\n        android:angle=\"270\"\n        android:endColor=\"#40000000\"\n        android:startColor=\"@android:color/transparent\" />\n</shape>"
  },
  {
    "path": "materialdrawer/src/main/res/drawable-v21/material_drawer_ico_account.xml",
    "content": "<!-- drawable/account.xml -->\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:width=\"24dp\"\n    android:height=\"24dp\"\n    android:viewportWidth=\"24\"\n    android:viewportHeight=\"24\">\n    <path\n        android:fillColor=\"#000\"\n        android:pathData=\"M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z\" />\n</vector>"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.drawerlayout.widget.DrawerLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/material_drawer_layout\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\" />"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_compact_header.xml",
    "content": "<merge xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:id=\"@+id/material_drawer_account_header\">\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_account_header_background\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/material_drawer_account_header_height_compact\"\n        android:scaleType=\"fitXY\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <androidx.constraintlayout.widget.Guideline\n        android:id=\"@+id/material_drawer_statusbar_guideline\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        app:layout_constraintGuide_begin=\"0dp\" />\n\n    <com.mikepenz.materialdrawer.view.BezelImageView\n        android:id=\"@+id/material_drawer_account_header_small_first\"\n        android:layout_width=\"1dp\"\n        android:layout_height=\"1dp\"\n        android:visibility=\"gone\"\n        tools:ignore=\"MissingConstraints\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_small_first_badge\"\n        android:layout_width=\"1dp\"\n        android:layout_height=\"1dp\"\n        android:visibility=\"gone\"\n        tools:ignore=\"MissingConstraints\" />\n\n    <com.mikepenz.materialdrawer.view.BezelImageView\n        android:id=\"@+id/material_drawer_account_header_small_second\"\n        android:layout_width=\"1dp\"\n        android:layout_height=\"1dp\"\n        android:visibility=\"gone\"\n        tools:ignore=\"MissingConstraints\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_small_second_badge\"\n        android:layout_width=\"1dp\"\n        android:layout_height=\"1dp\"\n        android:visibility=\"gone\"\n        tools:ignore=\"MissingConstraints\" />\n\n    <com.mikepenz.materialdrawer.view.BezelImageView\n        android:id=\"@+id/material_drawer_account_header_small_third\"\n        android:layout_width=\"1dp\"\n        android:layout_height=\"1dp\"\n        android:visibility=\"gone\"\n        tools:ignore=\"MissingConstraints\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_small_third_badge\"\n        android:layout_width=\"1dp\"\n        android:layout_height=\"1dp\"\n        android:visibility=\"gone\"\n        tools:ignore=\"MissingConstraints\" />\n\n    <com.mikepenz.materialdrawer.view.BezelImageView\n        android:id=\"@+id/material_drawer_account_header_current\"\n        style=\"@style/BezelImageView\"\n        android:layout_width=\"@dimen/material_drawer_account_header_compact\"\n        android:layout_height=\"@dimen/material_drawer_account_header_compact\"\n        android:layout_gravity=\"bottom\"\n        android:layout_marginStart=\"@dimen/material_drawer_vertical_padding\"\n        android:layout_marginLeft=\"@dimen/material_drawer_vertical_padding\"\n        android:clickable=\"true\"\n        android:elevation=\"@dimen/material_drawer_account_header_profile_elevation\"\n        android:focusable=\"true\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@+id/material_drawer_statusbar_guideline\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_current_badge\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:elevation=\"@dimen/material_drawer_account_header_profile_badge_elevation\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center\"\n        android:lines=\"1\"\n        android:minWidth=\"20dp\"\n        android:paddingLeft=\"1dp\"\n        android:paddingRight=\"1dp\"\n        android:singleLine=\"true\"\n        android:textSize=\"@dimen/material_drawer_item_badge_text\"\n        app:layout_constraintBottom_toBottomOf=\"@id/material_drawer_account_header_current\"\n        app:layout_constraintStart_toStartOf=\"@id/material_drawer_account_header_current\"\n        tools:text=\"99\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_name\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:ellipsize=\"end\"\n        android:fontFamily=\"sans-serif-medium\"\n        android:lines=\"1\"\n        android:maxLines=\"1\"\n        android:paddingStart=\"@dimen/material_drawer_vertical_padding\"\n        android:paddingLeft=\"@dimen/material_drawer_vertical_padding\"\n        android:paddingEnd=\"@dimen/material_drawer_vertical_padding\"\n        android:paddingRight=\"@dimen/material_drawer_vertical_padding\"\n        android:textSize=\"@dimen/material_drawer_account_header_title\"\n        app:layout_constraintBottom_toTopOf=\"@id/material_drawer_account_header_email\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_account_header_text_switcher\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_account_header_current\"\n        app:layout_constraintTop_toBottomOf=\"@+id/material_drawer_statusbar_guideline\"\n        app:layout_constraintVertical_chainStyle=\"packed\"\n        app:layout_goneMarginStart=\"0dp\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_email\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:ellipsize=\"end\"\n        android:fontFamily=\"sans-serif\"\n        android:lines=\"1\"\n        android:maxLines=\"1\"\n        android:paddingStart=\"@dimen/material_drawer_vertical_padding\"\n        android:paddingLeft=\"@dimen/material_drawer_vertical_padding\"\n        android:paddingEnd=\"@dimen/material_drawer_vertical_padding\"\n        android:paddingRight=\"@dimen/material_drawer_vertical_padding\"\n        android:textSize=\"@dimen/material_drawer_account_header_subtext\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_account_header_text_switcher\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_account_header_current\"\n        app:layout_constraintTop_toBottomOf=\"@id/material_drawer_account_header_name\"\n        app:layout_goneMarginStart=\"0dp\" />\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_account_header_text_switcher\"\n        android:layout_width=\"@dimen/material_drawer_account_header_dropdown\"\n        android:layout_height=\"@dimen/material_drawer_account_header_dropdown\"\n        android:layout_gravity=\"bottom\"\n        android:layout_marginEnd=\"@dimen/material_drawer_vertical_padding\"\n        android:layout_marginRight=\"@dimen/material_drawer_vertical_padding\"\n        android:layout_marginBottom=\"@dimen/material_drawer_padding\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\" />\n\n</merge>"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_fits_not.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.drawerlayout.widget.DrawerLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/material_drawer_layout\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:clickable=\"true\"\n    android:focusable=\"true\" />"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_header.xml",
    "content": "<merge xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:id=\"@+id/material_drawer_account_header\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/material_drawer_account_header_height\"\n    android:clickable=\"true\">\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_account_header_background\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/material_drawer_account_header_height\"\n        android:scaleType=\"centerCrop\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <androidx.constraintlayout.widget.Guideline\n        android:id=\"@+id/material_drawer_statusbar_guideline\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        app:layout_constraintGuide_begin=\"0dp\" />\n\n    <com.mikepenz.materialdrawer.view.BezelImageView\n        android:id=\"@+id/material_drawer_account_header_current\"\n        style=\"@style/BezelImageView\"\n        android:layout_width=\"@dimen/material_drawer_account_header_selected\"\n        android:layout_height=\"@dimen/material_drawer_account_header_selected\"\n        android:layout_marginStart=\"@dimen/material_drawer_vertical_padding\"\n        android:layout_marginLeft=\"@dimen/material_drawer_vertical_padding\"\n        android:layout_marginTop=\"@dimen/material_drawer_account_header_horizontal_top\"\n        android:clickable=\"true\"\n        android:elevation=\"@dimen/material_drawer_account_header_profile_elevation\"\n        android:focusable=\"true\"\n        android:scaleType=\"fitCenter\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@+id/material_drawer_statusbar_guideline\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_current_badge\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:elevation=\"@dimen/material_drawer_account_header_profile_badge_elevation\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center\"\n        android:lines=\"1\"\n        android:minWidth=\"20dp\"\n        android:paddingLeft=\"1dp\"\n        android:paddingRight=\"1dp\"\n        android:singleLine=\"true\"\n        android:textSize=\"@dimen/material_drawer_item_badge_text\"\n        app:layout_constraintBottom_toBottomOf=\"@id/material_drawer_account_header_current\"\n        app:layout_constraintStart_toStartOf=\"@id/material_drawer_account_header_current\"\n        tools:text=\"99\" />\n\n    <com.mikepenz.materialdrawer.view.BezelImageView\n        android:id=\"@+id/material_drawer_account_header_small_first\"\n        style=\"@style/BezelImageView\"\n        android:layout_width=\"@dimen/material_drawer_account_header_secondary\"\n        android:layout_height=\"@dimen/material_drawer_account_header_secondary\"\n        android:layout_marginTop=\"@dimen/material_drawer_account_header_horizontal_top\"\n        android:layout_marginEnd=\"@dimen/material_drawer_vertical_padding\"\n        android:layout_marginRight=\"@dimen/material_drawer_vertical_padding\"\n        android:clickable=\"true\"\n        android:elevation=\"@dimen/material_drawer_account_header_profile_small_elevation\"\n        android:focusable=\"true\"\n        android:scaleType=\"fitCenter\"\n        android:visibility=\"visible\"\n        app:layout_constraintEnd_toStartOf=\"@id/material_drawer_account_header_small_second\"\n        app:layout_constraintTop_toBottomOf=\"@+id/material_drawer_statusbar_guideline\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_small_first_badge\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:elevation=\"@dimen/material_drawer_account_header_profile_badge_elevation\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center\"\n        android:lines=\"1\"\n        android:minWidth=\"20dp\"\n        android:paddingLeft=\"1dp\"\n        android:paddingRight=\"1dp\"\n        android:singleLine=\"true\"\n        android:textSize=\"@dimen/material_drawer_item_badge_small_text\"\n        app:layout_constraintBottom_toBottomOf=\"@id/material_drawer_account_header_small_first\"\n        app:layout_constraintStart_toStartOf=\"@id/material_drawer_account_header_small_first\"\n        tools:text=\"99\" />\n\n    <com.mikepenz.materialdrawer.view.BezelImageView\n        android:id=\"@+id/material_drawer_account_header_small_second\"\n        style=\"@style/BezelImageView\"\n        android:layout_width=\"@dimen/material_drawer_account_header_secondary\"\n        android:layout_height=\"@dimen/material_drawer_account_header_secondary\"\n        android:layout_marginTop=\"@dimen/material_drawer_account_header_horizontal_top\"\n        android:layout_marginEnd=\"@dimen/material_drawer_vertical_padding\"\n        android:layout_marginRight=\"@dimen/material_drawer_vertical_padding\"\n        android:clickable=\"true\"\n        android:elevation=\"@dimen/material_drawer_account_header_profile_small_elevation\"\n        android:focusable=\"true\"\n        android:scaleType=\"fitCenter\"\n        android:visibility=\"visible\"\n        app:layout_constraintEnd_toStartOf=\"@id/material_drawer_account_header_small_third\"\n        app:layout_constraintTop_toBottomOf=\"@+id/material_drawer_statusbar_guideline\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_small_second_badge\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:elevation=\"@dimen/material_drawer_account_header_profile_badge_elevation\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center\"\n        android:lines=\"1\"\n        android:minWidth=\"20dp\"\n        android:paddingLeft=\"1dp\"\n        android:paddingRight=\"1dp\"\n        android:singleLine=\"true\"\n        android:textSize=\"@dimen/material_drawer_item_badge_small_text\"\n        app:layout_constraintBottom_toBottomOf=\"@id/material_drawer_account_header_small_second\"\n        app:layout_constraintStart_toStartOf=\"@id/material_drawer_account_header_small_second\"\n        tools:text=\"99\" />\n\n    <com.mikepenz.materialdrawer.view.BezelImageView\n        android:id=\"@+id/material_drawer_account_header_small_third\"\n        style=\"@style/BezelImageView\"\n        android:layout_width=\"@dimen/material_drawer_account_header_secondary\"\n        android:layout_height=\"@dimen/material_drawer_account_header_secondary\"\n        android:layout_marginTop=\"@dimen/material_drawer_account_header_horizontal_top\"\n        android:layout_marginEnd=\"@dimen/material_drawer_vertical_padding\"\n        android:layout_marginRight=\"@dimen/material_drawer_vertical_padding\"\n        android:clickable=\"true\"\n        android:elevation=\"@dimen/material_drawer_account_header_profile_small_elevation\"\n        android:focusable=\"true\"\n        android:scaleType=\"fitCenter\"\n        android:visibility=\"visible\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@+id/material_drawer_statusbar_guideline\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_small_third_badge\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:elevation=\"@dimen/material_drawer_account_header_profile_badge_elevation\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center\"\n        android:lines=\"1\"\n        android:minWidth=\"20dp\"\n        android:paddingLeft=\"1dp\"\n        android:paddingRight=\"1dp\"\n        android:singleLine=\"true\"\n        android:textSize=\"@dimen/material_drawer_item_badge_small_text\"\n        app:layout_constraintBottom_toBottomOf=\"@id/material_drawer_account_header_small_third\"\n        app:layout_constraintStart_toStartOf=\"@id/material_drawer_account_header_small_third\"\n        tools:text=\"99\" />\n\n    <androidx.constraintlayout.widget.Guideline\n        android:id=\"@+id/material_drawer_text_guideline\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:orientation=\"horizontal\"\n        app:layout_constraintGuide_end=\"@dimen/material_drawer_account_header_dropdown_guideline\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_name\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"@dimen/material_drawer_vertical_padding\"\n        android:layout_marginLeft=\"@dimen/material_drawer_vertical_padding\"\n        android:fontFamily=\"sans-serif-medium\"\n        android:lines=\"1\"\n        android:maxLines=\"1\"\n        android:textSize=\"@dimen/material_drawer_account_header_title\"\n        app:layout_constraintBottom_toTopOf=\"@id/material_drawer_account_header_email\"\n        app:layout_constraintEnd_toStartOf=\"@id/material_drawer_account_header_text_switcher\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/material_drawer_text_guideline\"\n        app:layout_constraintVertical_chainStyle=\"packed\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_account_header_email\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"@dimen/material_drawer_vertical_padding\"\n        android:layout_marginLeft=\"@dimen/material_drawer_vertical_padding\"\n        android:layout_marginBottom=\"@dimen/material_drawer_padding\"\n        android:fontFamily=\"sans-serif\"\n        android:lines=\"1\"\n        android:maxLines=\"1\"\n        android:textSize=\"@dimen/material_drawer_account_header_subtext\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@id/material_drawer_account_header_text_switcher\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toBottomOf=\"@id/material_drawer_account_header_name\" />\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_account_header_text_switcher\"\n        android:layout_width=\"@dimen/material_drawer_account_header_dropdown\"\n        android:layout_height=\"@dimen/material_drawer_account_header_dropdown\"\n        android:layout_marginEnd=\"@dimen/material_drawer_vertical_padding\"\n        android:layout_marginRight=\"@dimen/material_drawer_vertical_padding\"\n        android:layout_marginBottom=\"@dimen/material_drawer_account_header_dropdown_margin_bottom\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\" />\n</merge>\n"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_inner_shadow.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<View xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/material_drawer_inner_shadow\"\n    android:layout_width=\"wrap_content\"\n    android:layout_height=\"match_parent\"\n    android:layout_alignParentStart=\"false\"\n    android:layout_alignParentLeft=\"false\"\n    android:layout_alignParentEnd=\"true\"\n    android:layout_alignParentRight=\"true\"\n    android:background=\"@drawable/material_drawer_shadow_left\"\n    android:visibility=\"gone\" />"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_item_container.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=\"vertical\">\n\n</LinearLayout>\n"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_item_divider.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<View xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/material_drawer_divider\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"1dp\"\n    android:layout_marginLeft=\"@dimen/material_drawer_vertical_item_padding\"\n    android:layout_marginTop=\"@dimen/material_drawer_padding\"\n    android:layout_marginRight=\"@dimen/material_drawer_vertical_item_padding\"\n    android:layout_marginBottom=\"@dimen/material_drawer_padding\" />\n"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_item_expandable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/material_drawer_item_primary\"\n    android:paddingStart=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingLeft=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingEnd=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingRight=\"@dimen/material_drawer_vertical_padding\">\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_icon\"\n        android:layout_width=\"@dimen/material_drawer_item_primary_icon\"\n        android:layout_height=\"@dimen/material_drawer_item_primary\"\n        android:paddingStart=\"@dimen/material_drawer_item_primary_icon_padding_left\"\n        android:paddingLeft=\"@dimen/material_drawer_item_primary_icon_padding_left\"\n        android:paddingTop=\"@dimen/material_drawer_item_primary_icon_padding\"\n        android:paddingEnd=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingRight=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingBottom=\"@dimen/material_drawer_item_primary_icon_padding\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_name\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:fontFamily=\"sans-serif-medium\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_primary_text\"\n        app:layout_constraintBottom_toTopOf=\"@id/material_drawer_description\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_barrier\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        app:layout_constraintVertical_chainStyle=\"packed\"\n        tools:text=\"Some drawer text\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_description\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_primary_description\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@id/material_drawer_barrier\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toBottomOf=\"@id/material_drawer_name\"\n        tools:text=\"Some drawer text\" />\n\n    <androidx.constraintlayout.widget.Barrier\n        android:id=\"@+id/material_drawer_barrier\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        app:barrierDirection=\"start\"\n        app:constraint_referenced_ids=\"material_drawer_arrow\" />\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_arrow\"\n        android:layout_width=\"16dp\"\n        android:layout_height=\"16dp\"\n        android:layout_marginStart=\"@dimen/material_drawer_padding\"\n        android:layout_marginLeft=\"@dimen/material_drawer_padding\"\n        android:layout_marginEnd=\"@dimen/material_drawer_item_primary_icon_padding\"\n        android:layout_marginRight=\"@dimen/material_drawer_item_primary_icon_padding\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_barrier\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_item_expandable_badge.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/material_drawer_item_primary\"\n    android:clickable=\"true\"\n    android:paddingStart=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingLeft=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingEnd=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingRight=\"@dimen/material_drawer_vertical_padding\">\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_icon\"\n        android:layout_width=\"@dimen/material_drawer_item_primary_icon\"\n        android:layout_height=\"@dimen/material_drawer_item_primary\"\n        android:paddingStart=\"@dimen/material_drawer_item_primary_icon_padding_left\"\n        android:paddingLeft=\"@dimen/material_drawer_item_primary_icon_padding_left\"\n        android:paddingTop=\"@dimen/material_drawer_item_primary_icon_padding\"\n        android:paddingEnd=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingRight=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingBottom=\"@dimen/material_drawer_item_primary_icon_padding\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_name\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:fontFamily=\"sans-serif-medium\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_primary_text\"\n        app:layout_constraintBottom_toTopOf=\"@id/material_drawer_description\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_barrier\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        app:layout_constraintVertical_chainStyle=\"packed\"\n        tools:text=\"Some drawer text\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_description\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_primary_description\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@id/material_drawer_barrier\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toBottomOf=\"@id/material_drawer_name\"\n        tools:text=\"Some drawer text\" />\n\n    <androidx.constraintlayout.widget.Barrier\n        android:id=\"@+id/material_drawer_barrier\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        app:barrierDirection=\"start\"\n        app:constraint_referenced_ids=\"material_drawer_badge\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_badge\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"@dimen/material_drawer_padding\"\n        android:layout_marginLeft=\"@dimen/material_drawer_padding\"\n        android:layout_marginEnd=\"@dimen/material_drawer_padding\"\n        android:layout_marginRight=\"@dimen/material_drawer_padding\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center\"\n        android:lines=\"1\"\n        android:minWidth=\"20dp\"\n        android:paddingLeft=\"1dp\"\n        android:paddingRight=\"1dp\"\n        android:singleLine=\"true\"\n        android:textSize=\"@dimen/material_drawer_item_primary_text\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@id/material_drawer_arrow\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_barrier\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        tools:text=\"99\" />\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_arrow\"\n        android:layout_width=\"16dp\"\n        android:layout_height=\"16dp\"\n        android:layout_marginStart=\"0dp\"\n        android:layout_marginLeft=\"0dp\"\n        android:layout_marginEnd=\"@dimen/material_drawer_item_primary_icon_padding\"\n        android:layout_marginRight=\"@dimen/material_drawer_item_primary_icon_padding\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_badge\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_item_mini.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"@dimen/material_mini_drawer_item\"\n    android:layout_height=\"@dimen/material_mini_drawer_item\"\n    android:paddingBottom=\"@dimen/material_mini_drawer_item_padding\"\n    android:paddingEnd=\"@dimen/material_mini_drawer_item_padding_sides\"\n    android:paddingLeft=\"@dimen/material_mini_drawer_item_padding_sides\"\n    android:paddingRight=\"@dimen/material_mini_drawer_item_padding_sides\"\n    android:paddingStart=\"@dimen/material_mini_drawer_item_padding_sides\"\n    android:paddingTop=\"@dimen/material_mini_drawer_item_padding\">\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_icon\"\n        android:layout_width=\"@dimen/material_mini_drawer_item_icon\"\n        android:layout_height=\"@dimen/material_mini_drawer_item_icon\"\n        android:layout_gravity=\"center\"\n        android:padding=\"@dimen/material_mini_drawer_item_icon_padding\"\n        android:scaleType=\"fitXY\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_badge\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_gravity=\"top|end\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center\"\n        android:lines=\"1\"\n        android:maxLines=\"1\"\n        android:padding=\"1dp\"\n        android:paddingLeft=\"1dp\"\n        android:paddingRight=\"1dp\"\n        android:textSize=\"@dimen/material_drawer_item_badge_text\"\n        tools:text=\"99\" />\n</FrameLayout>"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_item_mini_profile.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"@dimen/material_mini_drawer_item\"\n    android:layout_height=\"@dimen/material_mini_drawer_item\">\n\n    <com.mikepenz.materialdrawer.view.BezelImageView\n        android:id=\"@+id/material_drawer_icon\"\n        style=\"@style/BezelImageView\"\n        android:layout_width=\"@dimen/material_mini_drawer_item_profile_icon\"\n        android:layout_height=\"@dimen/material_mini_drawer_item_profile_icon\"\n        android:layout_gravity=\"center_vertical\"\n        android:layout_marginStart=\"@dimen/material_mini_drawer_item_profile_icon_padding\"\n        android:layout_marginLeft=\"@dimen/material_mini_drawer_item_profile_icon_padding\"\n        android:layout_marginTop=\"@dimen/material_mini_drawer_item_profile_icon_padding\"\n        android:layout_marginEnd=\"@dimen/material_mini_drawer_item_profile_icon_padding\"\n        android:layout_marginRight=\"@dimen/material_mini_drawer_item_profile_icon_padding\"\n        android:layout_marginBottom=\"@dimen/material_mini_drawer_item_profile_icon_padding\"\n        android:clickable=\"false\"\n        android:elevation=\"1dp\" />\n</LinearLayout>"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_item_primary.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/material_drawer_item_primary\"\n    android:paddingStart=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingLeft=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingEnd=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingRight=\"@dimen/material_drawer_vertical_padding\">\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_icon\"\n        android:layout_width=\"@dimen/material_drawer_item_primary_icon\"\n        android:layout_height=\"@dimen/material_drawer_item_primary\"\n        android:paddingStart=\"@dimen/material_drawer_item_primary_icon_padding_left\"\n        android:paddingLeft=\"@dimen/material_drawer_item_primary_icon_padding_left\"\n        android:paddingTop=\"@dimen/material_drawer_item_primary_icon_padding\"\n        android:paddingEnd=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingRight=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingBottom=\"@dimen/material_drawer_item_primary_icon_padding\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_name\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginEnd=\"8dp\"\n        android:layout_marginRight=\"8dp\"\n        android:fontFamily=\"sans-serif-medium\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_primary_text\"\n        app:layout_constraintBottom_toTopOf=\"@id/material_drawer_description\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_barrier\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        app:layout_constraintVertical_chainStyle=\"packed\"\n        tools:text=\"Some drawer text\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_description\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginEnd=\"8dp\"\n        android:layout_marginRight=\"8dp\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_primary_description\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_barrier\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toBottomOf=\"@id/material_drawer_name\"\n        tools:text=\"Some drawer text\" />\n\n    <androidx.constraintlayout.widget.Barrier\n        android:id=\"@+id/material_drawer_barrier\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        app:barrierDirection=\"start\"\n        app:constraint_referenced_ids=\"material_drawer_badge\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_badge\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"@dimen/material_drawer_padding\"\n        android:layout_marginLeft=\"@dimen/material_drawer_padding\"\n        android:layout_marginEnd=\"@dimen/material_drawer_padding\"\n        android:layout_marginRight=\"@dimen/material_drawer_padding\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center\"\n        android:lines=\"1\"\n        android:minWidth=\"20dp\"\n        android:paddingLeft=\"1dp\"\n        android:paddingRight=\"1dp\"\n        android:singleLine=\"true\"\n        android:textSize=\"@dimen/material_drawer_item_primary_text\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_barrier\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        tools:text=\"99\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_item_profile.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/material_drawer_item_profile\"\n    android:layout_marginTop=\"@dimen/material_drawer_item_profile_item_margin\"\n    android:layout_marginBottom=\"@dimen/material_drawer_item_profile_item_margin\"\n    android:clipChildren=\"false\"\n    android:clipToPadding=\"false\"\n    android:paddingStart=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingLeft=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingEnd=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingRight=\"@dimen/material_drawer_vertical_padding\">\n\n    <com.mikepenz.materialdrawer.view.BezelImageView\n        android:id=\"@+id/material_drawer_profileIcon\"\n        style=\"@style/BezelImageView\"\n        android:layout_width=\"@dimen/material_drawer_item_profile_icon\"\n        android:layout_height=\"@dimen/material_drawer_item_profile_icon\"\n        android:layout_marginStart=\"@dimen/material_drawer_item_profile_icon_padding_left\"\n        android:layout_marginLeft=\"@dimen/material_drawer_item_profile_icon_padding_left\"\n        android:layout_marginEnd=\"0dp\"\n        android:layout_marginRight=\"0dp\"\n        android:clickable=\"false\"\n        android:elevation=\"1dp\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_name\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"@dimen/material_drawer_item_profile_icon_padding_right\"\n        android:layout_marginLeft=\"@dimen/material_drawer_item_profile_icon_padding_right\"\n        android:fontFamily=\"sans-serif-medium\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:paddingStart=\"0dp\"\n        android:paddingLeft=\"0dp\"\n        android:paddingEnd=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingRight=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_profile_text\"\n        app:layout_constraintBottom_toTopOf=\"@id/material_drawer_email\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_barrier\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_profileIcon\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        app:layout_constraintVertical_chainStyle=\"packed\"\n        tools:text=\"Some drawer text\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_email\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"@dimen/material_drawer_item_profile_icon_padding_right\"\n        android:layout_marginLeft=\"@dimen/material_drawer_item_profile_icon_padding_right\"\n        android:layout_marginEnd=\"0dp\"\n        android:layout_marginRight=\"0dp\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:paddingStart=\"0dp\"\n        android:paddingLeft=\"0dp\"\n        android:paddingEnd=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingRight=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_profile_description\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_barrier\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_profileIcon\"\n        app:layout_constraintTop_toBottomOf=\"@id/material_drawer_name\"\n        tools:text=\"Some drawer text\" />\n\n    <androidx.constraintlayout.widget.Barrier\n        android:id=\"@+id/material_drawer_barrier\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"0dp\"\n        app:barrierDirection=\"start\"\n        app:constraint_referenced_ids=\"material_drawer_badge\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_badge\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"@dimen/material_drawer_padding\"\n        android:layout_marginLeft=\"@dimen/material_drawer_padding\"\n        android:layout_marginEnd=\"@dimen/material_drawer_item_profile_badge_padding_right\"\n        android:layout_marginRight=\"@dimen/material_drawer_item_profile_badge_padding_right\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center\"\n        android:lines=\"1\"\n        android:minWidth=\"20dp\"\n        android:paddingLeft=\"1dp\"\n        android:paddingRight=\"1dp\"\n        android:singleLine=\"true\"\n        android:textSize=\"@dimen/material_drawer_item_primary_text\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_barrier\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        tools:text=\"99\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_item_profile_setting.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/material_drawer_item_profile\"\n    android:layout_marginTop=\"@dimen/material_drawer_item_profile_item_margin\"\n    android:layout_marginBottom=\"@dimen/material_drawer_item_profile_item_margin\"\n    android:clipChildren=\"false\"\n    android:clipToPadding=\"false\"\n    android:paddingStart=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingLeft=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingEnd=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingRight=\"@dimen/material_drawer_vertical_padding\">\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_icon\"\n        android:layout_width=\"@dimen/material_drawer_item_primary_icon\"\n        android:layout_height=\"@dimen/material_drawer_item_profile\"\n        android:paddingStart=\"@dimen/material_drawer_item_primary_icon_padding_left\"\n        android:paddingLeft=\"@dimen/material_drawer_item_primary_icon_padding_left\"\n        android:paddingTop=\"@dimen/material_drawer_item_primary_icon_padding\"\n        android:paddingEnd=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingRight=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingBottom=\"@dimen/material_drawer_item_primary_icon_padding\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <TextView\n        android:id=\"@+id/material_drawer_name\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:fontFamily=\"sans-serif-medium\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:maxLines=\"1\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_primary_text\"\n        app:layout_constraintBottom_toTopOf=\"@id/material_drawer_description\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_barrier\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        app:layout_constraintVertical_chainStyle=\"packed\"\n        tools:text=\"Some drawer text\" />\n\n    <TextView\n        android:id=\"@+id/material_drawer_description\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:maxLines=\"1\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_primary_description\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_barrier\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toBottomOf=\"@id/material_drawer_name\"\n        tools:text=\"Some drawer text\" />\n\n    <androidx.constraintlayout.widget.Barrier\n        android:id=\"@+id/material_drawer_barrier\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        app:barrierDirection=\"start\"\n        app:constraint_referenced_ids=\"material_drawer_badge\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_badge\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"@dimen/material_drawer_padding\"\n        android:layout_marginLeft=\"@dimen/material_drawer_padding\"\n        android:layout_marginEnd=\"@dimen/material_drawer_padding\"\n        android:layout_marginRight=\"@dimen/material_drawer_padding\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center\"\n        android:lines=\"1\"\n        android:minWidth=\"20dp\"\n        android:paddingLeft=\"1dp\"\n        android:paddingRight=\"1dp\"\n        android:singleLine=\"true\"\n        android:textSize=\"@dimen/material_drawer_item_primary_text\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_barrier\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        tools:text=\"99\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_item_secondary.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/material_drawer_item_secondary\"\n    android:paddingStart=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingLeft=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingEnd=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingRight=\"@dimen/material_drawer_vertical_padding\">\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_icon\"\n        android:layout_width=\"@dimen/material_drawer_item_secondary_icon\"\n        android:layout_height=\"@dimen/material_drawer_item_secondary\"\n        android:paddingStart=\"@dimen/material_drawer_item_secondary_icon_padding_left\"\n        android:paddingLeft=\"@dimen/material_drawer_item_secondary_icon_padding_left\"\n        android:paddingTop=\"@dimen/material_drawer_item_secondary_icon_padding\"\n        android:paddingEnd=\"@dimen/material_drawer_item_secondary_icon_padding_right\"\n        android:paddingRight=\"@dimen/material_drawer_item_secondary_icon_padding_right\"\n        android:paddingBottom=\"@dimen/material_drawer_item_secondary_icon_padding\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_name\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:fontFamily=\"sans-serif-medium\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_secondary_text\"\n        app:layout_constraintBottom_toTopOf=\"@id/material_drawer_description\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_barrier\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        tools:text=\"Some secondary text\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_description\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_secondary_description\"\n        android:visibility=\"gone\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toBottomOf=\"@id/material_drawer_name\"\n        tools:text=\"Some drawer text\" />\n\n    <androidx.constraintlayout.widget.Barrier\n        android:id=\"@+id/material_drawer_barrier\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        app:barrierDirection=\"start\"\n        app:constraint_referenced_ids=\"material_drawer_badge\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_badge\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:layout_marginStart=\"@dimen/material_drawer_padding\"\n        android:layout_marginLeft=\"@dimen/material_drawer_padding\"\n        android:layout_marginEnd=\"@dimen/material_drawer_padding\"\n        android:layout_marginRight=\"@dimen/material_drawer_padding\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center\"\n        android:lines=\"1\"\n        android:minWidth=\"20dp\"\n        android:paddingLeft=\"1dp\"\n        android:paddingRight=\"1dp\"\n        android:singleLine=\"true\"\n        android:textSize=\"@dimen/material_drawer_item_primary_text\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_barrier\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        tools:text=\"99\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_item_secondary_switch.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/material_drawer_item_secondary\"\n    android:descendantFocusability=\"blocksDescendants\"\n    android:orientation=\"horizontal\"\n    android:paddingStart=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingLeft=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingEnd=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingRight=\"@dimen/material_drawer_vertical_padding\">\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_icon\"\n        android:layout_width=\"@dimen/material_drawer_item_secondary_icon\"\n        android:layout_height=\"@dimen/material_drawer_item_secondary\"\n        android:layout_gravity=\"center_vertical\"\n        android:paddingStart=\"@dimen/material_drawer_item_secondary_icon_padding_left\"\n        android:paddingLeft=\"@dimen/material_drawer_item_secondary_icon_padding_left\"\n        android:paddingTop=\"@dimen/material_drawer_item_secondary_icon_padding\"\n        android:paddingEnd=\"@dimen/material_drawer_item_secondary_icon_padding_right\"\n        android:paddingRight=\"@dimen/material_drawer_item_secondary_icon_padding_right\"\n        android:paddingBottom=\"@dimen/material_drawer_item_secondary_icon_padding\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_name\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:fontFamily=\"sans-serif-medium\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_secondary_text\"\n        app:layout_constraintBottom_toTopOf=\"@id/material_drawer_description\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_switch\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        app:layout_constraintVertical_chainStyle=\"packed\"\n        tools:text=\"Some secondary text\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_description\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_secondary_description\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_switch\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toBottomOf=\"@id/material_drawer_name\"\n        tools:text=\"Some drawer text\" />\n\n    <androidx.appcompat.widget.SwitchCompat\n        android:id=\"@+id/material_drawer_switch\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:gravity=\"center_vertical|end\"\n        android:paddingLeft=\"@dimen/material_drawer_padding\"\n        android:paddingEnd=\"0dp\"\n        android:paddingRight=\"0dp\"\n        android:textOff=\"\"\n        android:textOn=\"\"\n        android:textSize=\"@dimen/material_drawer_item_secondary_extra_text\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        app:showText=\"false\" />\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_item_secondary_toggle.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/material_drawer_item_secondary\"\n    android:descendantFocusability=\"blocksDescendants\"\n    android:orientation=\"horizontal\">\n\n    <ImageView\n        android:id=\"@+id/material_drawer_icon\"\n        android:layout_width=\"@dimen/material_drawer_item_secondary_icon\"\n        android:layout_height=\"@dimen/material_drawer_item_secondary\"\n        android:paddingStart=\"@dimen/material_drawer_item_secondary_icon_padding_left\"\n        android:paddingLeft=\"@dimen/material_drawer_item_secondary_icon_padding_left\"\n        android:paddingTop=\"@dimen/material_drawer_item_secondary_icon_padding\"\n        android:paddingEnd=\"@dimen/material_drawer_item_secondary_icon_padding_right\"\n        android:paddingRight=\"@dimen/material_drawer_item_secondary_icon_padding_right\"\n        android:paddingBottom=\"@dimen/material_drawer_item_secondary_icon_padding\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <TextView\n        android:id=\"@+id/material_drawer_name\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:fontFamily=\"sans-serif-medium\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_secondary_text\"\n        app:layout_constraintBottom_toTopOf=\"@id/material_drawer_description\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_barrier\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        app:layout_constraintVertical_chainStyle=\"packed\"\n        tools:text=\"Some secondary text\" />\n\n    <TextView\n        android:id=\"@+id/material_drawer_description\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_secondary_description\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_barrier\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toBottomOf=\"@id/material_drawer_name\"\n        tools:text=\"Some drawer text\" />\n\n    <androidx.constraintlayout.widget.Barrier\n        android:id=\"@+id/material_drawer_barrier\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        app:barrierDirection=\"start\"\n        app:constraint_referenced_ids=\"material_drawer_toggle\" />\n\n    <ToggleButton\n        android:id=\"@+id/material_drawer_toggle\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginStart=\"@dimen/material_drawer_padding\"\n        android:layout_marginLeft=\"@dimen/material_drawer_padding\"\n        android:layout_marginEnd=\"0dp\"\n        android:layout_marginRight=\"0dp\"\n        android:gravity=\"center_vertical|end\"\n        android:textSize=\"@dimen/material_drawer_item_secondary_extra_text\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_barrier\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_item_section.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=\"vertical\">\n\n    <View\n        android:id=\"@+id/material_drawer_divider\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"1dp\"\n        android:layout_marginTop=\"@dimen/material_drawer_padding\"\n        android:layout_marginLeft=\"@dimen/material_drawer_vertical_item_padding\"\n        android:layout_marginRight=\"@dimen/material_drawer_vertical_item_padding\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"@dimen/material_drawer_item_primary\"\n        android:fontFamily=\"sans-serif-medium\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:paddingLeft=\"@dimen/material_drawer_vertical_item_padding\"\n        android:paddingRight=\"@dimen/material_drawer_vertical_item_padding\"\n        android:singleLine=\"true\"\n        android:textSize=\"@dimen/material_drawer_item_section_text\" />\n</LinearLayout>"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_item_switch.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/material_drawer_item_primary\"\n    android:descendantFocusability=\"blocksDescendants\"\n    android:orientation=\"horizontal\"\n    android:paddingStart=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingLeft=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingEnd=\"@dimen/material_drawer_vertical_padding\"\n    android:paddingRight=\"@dimen/material_drawer_vertical_padding\">\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_icon\"\n        android:layout_width=\"@dimen/material_drawer_item_primary_icon\"\n        android:layout_height=\"@dimen/material_drawer_item_primary\"\n        android:layout_gravity=\"center_vertical\"\n        android:paddingStart=\"@dimen/material_drawer_item_primary_icon_padding_left\"\n        android:paddingLeft=\"@dimen/material_drawer_item_primary_icon_padding_left\"\n        android:paddingTop=\"@dimen/material_drawer_item_primary_icon_padding\"\n        android:paddingEnd=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingRight=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingBottom=\"@dimen/material_drawer_item_primary_icon_padding\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_name\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:fontFamily=\"sans-serif-medium\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_primary_text\"\n        app:layout_constraintBottom_toTopOf=\"@id/material_drawer_description\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_switch\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        app:layout_constraintVertical_chainStyle=\"packed\"\n        tools:text=\"Some drawer text\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_description\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_primary_description\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_switch\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toBottomOf=\"@id/material_drawer_name\"\n        tools:text=\"Some drawer text\" />\n\n    <androidx.appcompat.widget.SwitchCompat\n        android:id=\"@+id/material_drawer_switch\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:gravity=\"center_vertical|end\"\n        android:paddingLeft=\"@dimen/material_drawer_padding\"\n        android:paddingEnd=\"0dp\"\n        android:paddingRight=\"0dp\"\n        android:textOff=\"\"\n        android:textOn=\"\"\n        android:textSize=\"@dimen/material_drawer_item_primary_text\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        app:showText=\"false\" />\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_item_toggle.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.constraintlayout.widget.ConstraintLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"@dimen/material_drawer_item_primary\"\n    android:descendantFocusability=\"blocksDescendants\">\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/material_drawer_icon\"\n        android:layout_width=\"@dimen/material_drawer_item_primary_icon\"\n        android:layout_height=\"@dimen/material_drawer_item_primary\"\n        android:paddingStart=\"@dimen/material_drawer_item_primary_icon_padding_left\"\n        android:paddingLeft=\"@dimen/material_drawer_item_primary_icon_padding_left\"\n        android:paddingTop=\"@dimen/material_drawer_item_primary_icon_padding\"\n        android:paddingEnd=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingRight=\"@dimen/material_drawer_item_primary_icon_padding_right\"\n        android:paddingBottom=\"@dimen/material_drawer_item_primary_icon_padding\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintStart_toStartOf=\"parent\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_name\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:fontFamily=\"sans-serif-medium\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_primary_text\"\n        app:layout_constraintBottom_toTopOf=\"@id/material_drawer_description\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_barrier\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toTopOf=\"parent\"\n        app:layout_constraintVertical_chainStyle=\"packed\"\n        tools:text=\"Some drawer text\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/material_drawer_description\"\n        android:layout_width=\"0dp\"\n        android:layout_height=\"wrap_content\"\n        android:fontFamily=\"sans-serif\"\n        android:gravity=\"center_vertical|start\"\n        android:lines=\"1\"\n        android:singleLine=\"true\"\n        android:textDirection=\"anyRtl\"\n        android:textSize=\"@dimen/material_drawer_item_primary_description\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toStartOf=\"@+id/material_drawer_barrier\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_icon\"\n        app:layout_constraintTop_toBottomOf=\"@id/material_drawer_name\"\n        tools:text=\"Some drawer text\" />\n\n    <androidx.constraintlayout.widget.Barrier\n        android:id=\"@+id/material_drawer_barrier\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        app:barrierDirection=\"start\"\n        app:constraint_referenced_ids=\"material_drawer_toggle\" />\n\n    <ToggleButton\n        android:id=\"@+id/material_drawer_toggle\"\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginStart=\"@dimen/material_drawer_padding\"\n        android:layout_marginLeft=\"@dimen/material_drawer_padding\"\n        android:layout_marginEnd=\"0dp\"\n        android:layout_marginRight=\"0dp\"\n        android:gravity=\"center_vertical|end\"\n        android:textSize=\"@dimen/material_drawer_item_secondary_extra_text\"\n        app:layout_constraintBottom_toBottomOf=\"parent\"\n        app:layout_constraintEnd_toEndOf=\"parent\"\n        app:layout_constraintStart_toEndOf=\"@id/material_drawer_barrier\"\n        app:layout_constraintTop_toTopOf=\"parent\" />\n\n</androidx.constraintlayout.widget.ConstraintLayout>"
  },
  {
    "path": "materialdrawer/src/main/res/layout/material_drawer_recycler_view.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.recyclerview.widget.RecyclerView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/material_drawer_recycler_view\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:clickable=\"true\"\n    android:clipToPadding=\"false\"\n    android:focusable=\"true\"\n    android:paddingTop=\"@dimen/material_drawer_padding_top_bottom\"\n    android:paddingBottom=\"@dimen/material_drawer_padding_top_bottom\"\n    android:scrollbars=\"vertical\" />"
  },
  {
    "path": "materialdrawer/src/main/res/values/attrs.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <declare-styleable name=\"MaterialDrawerTheme\">\n        <attr name=\"materialDrawerStyle\" format=\"reference\" />\n        <attr name=\"materialDrawerHeaderStyle\" format=\"reference\" />\n    </declare-styleable>\n\n    <declare-styleable name=\"MaterialDrawerSliderView\">\n        <attr name=\"materialDrawerInsetForeground\" format=\"color|reference\" />\n\n        <attr name=\"materialDrawerBackground\" format=\"color|reference\" />\n\n        <attr name=\"materialDrawerPrimaryText\" format=\"color|reference\" />\n        <attr name=\"materialDrawerPrimaryIcon\" format=\"color|reference\" />\n        <attr name=\"materialDrawerSecondaryText\" format=\"color|reference\" />\n        <attr name=\"materialDrawerSecondaryIcon\" format=\"color|reference\" />\n\n        <attr name=\"materialDrawerDividerColor\" format=\"color|reference\" />\n\n        <attr name=\"materialDrawerSelectedBackgroundColor\" format=\"color|reference\" />\n    </declare-styleable>\n\n    <declare-styleable name=\"AccountHeaderView\">\n        <attr name=\"materialDrawerHeaderLayout\" format=\"reference\" />\n        <attr name=\"materialDrawerCompactStyle\" format=\"boolean\" />\n\n        <!-- material drawer header attrs-->\n        <attr name=\"materialDrawerHeaderSelectionText\" format=\"color|reference\" />\n        <attr name=\"materialDrawerHeaderSelectionSubtext\" format=\"color|reference\" />\n    </declare-styleable>\n\n    <declare-styleable name=\"BezelImageView\">\n        <attr name=\"materialDrawerMaskDrawable\" format=\"reference\" />\n        <attr name=\"materialDrawerDrawCircularShadow\" format=\"boolean\" />\n        <attr name=\"materialDrawerSelectorOnPress\" format=\"color|reference\" />\n    </declare-styleable>\n</resources>"
  },
  {
    "path": "materialdrawer/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <!-- MaterialDrawer DEFAULT text / items colors -->\n    <color name=\"material_drawer_divider\">#1F000000</color>\n    <!-- MaterialDrawer DEFAULT drawer colors -->\n    <color name=\"material_drawer_selected\">#1F2196F3</color>\n</resources>\n"
  },
  {
    "path": "materialdrawer/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <!-- ********************** -->\n    <!-- Material Drawer Dimens -->\n    <!-- ********************** -->\n    <!-- General drawer width https://medium.com/sebs-top-tips/material-navigation-drawer-sizing-558aea1ad266 -->\n    <dimen name=\"material_drawer_width\">320dp</dimen>\n    <!-- Definition for the Drawer Slider margin right -->\n    <dimen name=\"material_drawer_margin\">0dp</dimen>\n    <!-- General padding value -->\n    <dimen name=\"material_drawer_padding\">8dp</dimen>\n    <dimen name=\"material_drawer_padding_top_bottom\">8dp</dimen>\n    <!-- General vertical padding values / 24dp for tablets -->\n    <dimen name=\"material_drawer_vertical_padding\">12dp</dimen>\n    <dimen name=\"material_drawer_vertical_item_padding\">28dp</dimen>\n\n    <!-- Sticky footer elevation -->\n    <dimen name=\"material_drawer_container_divider\">1dp</dimen>\n\n    <!-- Sticky footer elevation -->\n    <dimen name=\"material_drawer_sticky_header_elevation\">4dp</dimen>\n\n    <!-- Sticky footer elevation -->\n    <dimen name=\"material_drawer_sticky_footer_divider\">1dp</dimen>\n    <dimen name=\"material_drawer_sticky_footer_elevation\">4dp</dimen>\n\n    <!-- General margins for the drawer account header -->\n    <dimen name=\"material_drawer_account_header_height\">160dp</dimen>\n    <dimen name=\"material_drawer_account_header_height_compact\">72dp</dimen>\n    <dimen name=\"material_drawer_account_header_horizontal_top\">16dp</dimen>\n    <dimen name=\"material_drawer_account_header_horizontal_bottom\">4dp</dimen>\n    <dimen name=\"material_drawer_account_header_selected\">56dp</dimen>\n    <dimen name=\"material_drawer_account_header_secondary\">40dp</dimen>\n    <dimen name=\"material_drawer_account_header_compact\">56dp</dimen>\n    <dimen name=\"material_drawer_account_header_title\">20sp</dimen>\n    <dimen name=\"material_drawer_account_header_subtext\">14sp</dimen>\n    <dimen name=\"material_drawer_account_header_dropdown_guideline\">80dp</dimen>\n    <dimen name=\"material_drawer_account_header_dropdown\">22dp</dimen>\n    <dimen name=\"material_drawer_account_header_dropdown_padding\">1dp</dimen>\n    <dimen name=\"material_drawer_account_header_dropdown_margin_bottom\">18dp</dimen>\n    <dimen name=\"material_drawer_account_header_non_compact_padding\">56dp</dimen>\n    <dimen name=\"material_drawer_account_header_profile_elevation\">2dp</dimen>\n    <dimen name=\"material_drawer_account_header_profile_small_elevation\">2dp</dimen>\n    <dimen name=\"material_drawer_account_header_profile_badge_elevation\">4dp</dimen>\n\n    <!-- General profileIcon margins for the drawer item -->\n    <dimen name=\"material_drawer_item_padding\">8dp</dimen>\n    <dimen name=\"material_drawer_item_corner_radius\">28dp</dimen>\n    <dimen name=\"material_drawer_item_background_padding_start_end\">12dp</dimen>\n    <dimen name=\"material_drawer_item_background_padding_start\">@dimen/material_drawer_item_background_padding_start_end</dimen>\n    <dimen name=\"material_drawer_item_background_padding_end\">@dimen/material_drawer_item_background_padding_start_end</dimen>\n    <dimen name=\"material_drawer_item_background_padding_top_bottom\">0dp</dimen>\n\n    <!-- Definition for the primary item -->\n    <dimen name=\"material_drawer_item_primary\">56dp</dimen>\n    <dimen name=\"material_drawer_item_primary_icon\">52dp</dimen>\n    <dimen name=\"material_drawer_item_primary_icon_padding\">16dp</dimen>\n    <dimen name=\"material_drawer_item_primary_icon_padding_left\">16dp</dimen>\n    <dimen name=\"material_drawer_item_primary_icon_padding_right\">12dp</dimen>\n    <dimen name=\"material_drawer_item_primary_text\">14sp</dimen>\n    <dimen name=\"material_drawer_item_primary_description\">14sp</dimen>\n    <dimen name=\"material_drawer_item_secondary_description\">12sp</dimen>\n    <!-- Definition for the secondary item -->\n    <dimen name=\"material_drawer_item_secondary\">48dp</dimen>\n    <dimen name=\"material_drawer_item_secondary_icon\">52dp</dimen>\n    <dimen name=\"material_drawer_item_secondary_icon_padding\">12dp</dimen>\n    <dimen name=\"material_drawer_item_secondary_icon_padding_left\">18dp</dimen>\n    <dimen name=\"material_drawer_item_secondary_icon_padding_right\">14dp</dimen>\n    <dimen name=\"material_drawer_item_secondary_text\">14sp</dimen>\n    <dimen name=\"material_drawer_item_secondary_extra_text\">12sp</dimen>\n    <!-- Definition for the profile item -->\n    <dimen name=\"material_drawer_item_profile\">56dp</dimen>\n    <dimen name=\"material_drawer_item_profile_item_margin\">8dp</dimen>\n    <dimen name=\"material_drawer_item_profile_icon\">40dp</dimen>\n    <dimen name=\"material_drawer_item_profile_icon_padding\">16dp</dimen>\n    <dimen name=\"material_drawer_item_profile_icon_padding_left\">6dp</dimen>\n    <dimen name=\"material_drawer_item_profile_icon_padding_right\">6dp</dimen>\n    <dimen name=\"material_drawer_item_profile_badge_padding_right\">16dp</dimen>\n    <dimen name=\"material_drawer_item_profile_text\">14sp</dimen>\n    <dimen name=\"material_drawer_item_profile_description\">14sp</dimen>\n    <!-- Definition for the profile setting item -->\n    <dimen name=\"material_drawer_item_profile_setting_icon_padding\">24dp</dimen>\n    <!-- Definition for the MiniDrawer item -->\n    <dimen name=\"material_mini_drawer_item\">72dp</dimen>\n    <dimen name=\"material_mini_drawer_item_padding\">4dp</dimen>\n    <dimen name=\"material_mini_drawer_item_padding_sides\">8dp</dimen>\n    <dimen name=\"material_mini_drawer_item_icon\">56dp</dimen>\n    <dimen name=\"material_mini_drawer_item_icon_padding\">16dp</dimen>\n    <dimen name=\"material_mini_drawer_item_profile_icon\">40dp</dimen>\n    <dimen name=\"material_mini_drawer_item_profile_icon_padding\">16dp</dimen>\n    <!-- Definition for the default badge item -->\n    <dimen name=\"material_drawer_item_badge_text\">12sp</dimen>\n    <dimen name=\"material_drawer_item_badge_small_text\">10sp</dimen>\n\n    <!-- Definition for the section item -->\n    <dimen name=\"material_drawer_item_section_text\">14sp</dimen>\n\n    <!-- Profile placeholder -->\n    <dimen name=\"material_drawer_profile_icon_placeholder\">56dp</dimen>\n    <dimen name=\"material_drawer_profile_icon_placeholder_icon\">24dp</dimen>\n</resources>\n"
  },
  {
    "path": "materialdrawer/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<resources>\n    <item name=\"material_drawer_item\" type=\"id\" />\n    <item name=\"material_drawer_menu_default_group\" type=\"id\" />\n    <item name=\"material_drawer_sticky_footer\" type=\"id\" />\n    <item name=\"material_drawer_sticky_header\" type=\"id\" />\n    <item name=\"material_drawer_animation\" type=\"id\" />\n    <item name=\"material_drawer_profile_header\" type=\"id\" />\n    <item name=\"material_drawer_slider_layout\" type=\"id\" />\n\n    <item name=\"material_drawer_item_primary\" type=\"id\" />\n    <item name=\"material_drawer_item_primary_switch\" type=\"id\" />\n    <item name=\"material_drawer_item_primary_toggle\" type=\"id\" />\n    <item name=\"material_drawer_item_secondary\" type=\"id\" />\n    <item name=\"material_drawer_item_secondary_switch\" type=\"id\" />\n    <item name=\"material_drawer_item_secondary_toggle\" type=\"id\" />\n    <item name=\"material_drawer_item_container\" type=\"id\" />\n    <item name=\"material_drawer_item_divider\" type=\"id\" />\n    <item name=\"material_drawer_item_mini\" type=\"id\" />\n    <item name=\"material_drawer_item_mini_profile\" type=\"id\" />\n    <item name=\"material_drawer_item_profile\" type=\"id\" />\n    <item name=\"material_drawer_item_profile_setting\" type=\"id\" />\n    <item name=\"material_drawer_item_section\" type=\"id\" />\n    <item name=\"material_drawer_item_expandable\" type=\"id\" />\n    <item name=\"material_drawer_item_expandable_badge\" type=\"id\" />\n</resources>"
  },
  {
    "path": "materialdrawer/src/main/res/values/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"material_drawer_open\">Open</string>\n    <string name=\"material_drawer_close\">Close</string>\n    <string name=\"material_drawer_profile_content_description\">Profile icon</string>\n</resources>\n"
  },
  {
    "path": "materialdrawer/src/main/res/values/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <style name=\"Widget.MaterialDrawerStyle\" parent=\"\">\n        <item name=\"materialDrawerInsetForeground\">#4000</item>\n        <!-- MaterialDrawer specific values -->\n        <item name=\"materialDrawerBackground\">?colorSurface</item>\n        <item name=\"materialDrawerPrimaryText\">@color/color_drawer_item_text</item>\n        <item name=\"materialDrawerPrimaryIcon\">@color/color_drawer_item_text</item>\n        <item name=\"materialDrawerSecondaryText\">@color/color_drawer_item_text</item>\n        <item name=\"materialDrawerSecondaryIcon\">@color/color_drawer_item_text</item>\n        <item name=\"materialDrawerDividerColor\">?colorOutline</item>\n        <item name=\"materialDrawerSelectedBackgroundColor\">?colorSecondaryContainer</item>\n    </style>\n\n    <style name=\"Widget.MaterialDrawerHeaderStyle\" parent=\"\">\n        <item name=\"materialDrawerCompactStyle\">false</item>\n        <item name=\"materialDrawerHeaderSelectionText\">@color/color_drawer_item_text</item>\n        <item name=\"materialDrawerHeaderSelectionSubtext\">@color/color_drawer_item_text</item>\n    </style>\n\n    <!-- BezelImageView -->\n    <style name=\"BezelImageView\">\n        <item name=\"materialDrawerMaskDrawable\">@drawable/material_drawer_circle_mask</item>\n        <item name=\"materialDrawerDrawCircularShadow\">true</item>\n        <item name=\"materialDrawerSelectorOnPress\">?colorOnSurfaceVariant</item>\n        <item name=\"android:scaleType\">centerInside</item>\n    </style>\n</resources>"
  },
  {
    "path": "materialdrawer/src/main/res/values-fr/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"material_drawer_open\">Ouvrir</string>\n    <string name=\"material_drawer_close\">Fermer</string>\n    <string name=\"material_drawer_profile_content_description\">Profile icon</string>\n</resources>\n"
  },
  {
    "path": "materialdrawer/src/main/res/values-pt/strings.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <string name=\"material_drawer_open\">Abrir</string>\n    <string name=\"material_drawer_close\">Fechar</string>\n    <string name=\"material_drawer_profile_content_description\">Profile icon</string>\n</resources>\n"
  },
  {
    "path": "materialdrawer/src/main/res/values-sw600dp/dimens.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <dimen name=\"material_drawer_vertical_padding\">24dp</dimen>\n</resources>"
  },
  {
    "path": "materialdrawer-iconics/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "materialdrawer-iconics/build.gradle.kts",
    "content": "plugins {\n    id(\"com.mikepenz.convention.android-library\")\n    id(\"com.mikepenz.convention.kotlin\")\n    id(\"com.mikepenz.convention.publishing\")\n}\n\nandroid {\n    namespace = \"com.mikepenz.materialdrawer.iconics\"\n}\n\ndependencies {\n    implementation(project(\":materialdrawer\"))\n\n    // used to provide out of the box icon font support. simplifies development,\n    // and provides scalable icons. the core is very very light\n    // https://github.com/mikepenz/Android-Iconics\n    implementation(libs.iconics.core)\n}"
  },
  {
    "path": "materialdrawer-iconics/gradle.properties",
    "content": "POM_NAME=MaterialDrawer Iconics-Extension\nPOM_DESCRIPTION=Extension for the MaterialDrawer library to add Android-Iconics support.\nPOM_ARTIFACT_ID=materialdrawer-iconics\nPOM_PACKAGING=aar"
  },
  {
    "path": "materialdrawer-iconics/src/main/AndroidManifest.xml",
    "content": "<manifest/>\n"
  },
  {
    "path": "materialdrawer-iconics/src/main/java/com/mikepenz/materialdrawer/iconics/IconicsExtension.kt",
    "content": "package com.mikepenz.materialdrawer.iconics\n\nimport android.os.Build\nimport com.mikepenz.iconics.typeface.IIcon\nimport com.mikepenz.materialdrawer.model.BaseDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.Iconable\nimport com.mikepenz.materialdrawer.model.interfaces.withIconTintingEnabled\n\nvar <T : BaseDrawerItem<*, *>> T.iconicsIcon: IIcon\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(value) {\n        this.iconicsIconHolder = IconicsImageHolder(value)\n    }\n\nvar <T : BaseDrawerItem<*, *>> T.iconicsIconHolder: IconicsImageHolder?\n    get() = icon as? IconicsImageHolder\n    set(value) {\n        this.icon = value\n        //if we are on api 21 or higher we use the IconicsDrawable for selection too and color it with the correct color\n        //else we use just the one drawable and enable tinting on press\n        if (Build.VERSION.SDK_INT >= 21) {\n            this.selectedIcon = value\n        } else if (value != null) {\n            this.withIconTintingEnabled(true)\n        }\n    }\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : BaseDrawerItem<*, *>> T.withIcon(icon: IIcon): T {\n    this.iconicsIconHolder = IconicsImageHolder(icon)\n    return this\n}\n\nvar <T : Iconable> T.iconicsIcon: IIcon\n    @Deprecated(level = DeprecationLevel.ERROR, message = \"Not readable\")\n    get() = throw UnsupportedOperationException(\"Please use the direct property\")\n    set(value) {\n        this.icon = IconicsImageHolder(value)\n    }\n\n@Deprecated(\"Please consider to replace with the actual property setter\")\nfun <T : Iconable> T.withIcon(icon: IIcon): T {\n    this.icon = IconicsImageHolder(icon)\n    return this\n}"
  },
  {
    "path": "materialdrawer-iconics/src/main/java/com/mikepenz/materialdrawer/iconics/IconicsImageHolder.kt",
    "content": "package com.mikepenz.materialdrawer.iconics\n\nimport android.content.Context\nimport android.content.res.ColorStateList\nimport android.graphics.PorterDuff\nimport android.graphics.drawable.Drawable\nimport android.widget.ImageView\nimport androidx.appcompat.content.res.AppCompatResources\nimport com.mikepenz.iconics.IconicsDrawable\nimport com.mikepenz.iconics.typeface.IIcon\nimport com.mikepenz.iconics.utils.actionBar\nimport com.mikepenz.iconics.utils.paddingDp\nimport com.mikepenz.iconics.utils.sizeDp\nimport com.mikepenz.materialdrawer.holder.ImageHolder\nimport com.mikepenz.materialdrawer.util.DrawerImageLoader\nimport java.io.FileNotFoundException\n\nclass IconicsImageHolder(iicon: IIcon) : ImageHolder() {\n\n    var iicon: IIcon? = iicon\n        internal set\n\n\n    /**\n     * sets an existing image to the imageView\n     *\n     * @param imageView\n     * @param tag       used to identify imageViews and define different placeholders\n     * @return true if an image was set\n     */\n    override fun applyTo(imageView: ImageView, tag: String?): Boolean {\n        val ii = iicon\n        val uri = uri\n\n        if (uri != null) {\n            val consumed = DrawerImageLoader.instance.setImage(imageView, uri, tag)\n            if (!consumed) {\n                imageView.setImageURI(uri)\n            }\n        } else if (icon != null) {\n            imageView.setImageDrawable(icon)\n        } else if (bitmap != null) {\n            imageView.setImageBitmap(bitmap)\n        } else if (iconRes != -1) {\n            imageView.setImageResource(iconRes)\n        } else if (ii != null) {\n            imageView.setImageDrawable(IconicsDrawable(imageView.context, ii).actionBar())\n        } else {\n            imageView.setImageBitmap(null)\n            return false\n        }\n        return true\n    }\n\n    /**\n     * this only handles Drawables\n     *\n     * @param ctx\n     * @param iconColor\n     * @param tint\n     * @return\n     */\n    override fun decideIcon(ctx: Context, iconColor: ColorStateList, tint: Boolean, paddingDp: Int): Drawable? {\n        var icon: Drawable? = icon\n        val ii = iicon\n        val uri = uri\n\n        when {\n            ii != null -> icon = IconicsDrawable(ctx, ii).apply {\n                colorList = iconColor\n                sizeDp = 24\n                this.paddingDp = paddingDp\n            }\n            iconRes != -1 -> icon = AppCompatResources.getDrawable(ctx, iconRes)\n            uri != null -> try {\n                val inputStream = ctx.contentResolver.openInputStream(uri)\n                icon = Drawable.createFromStream(inputStream, uri.toString())\n            } catch (e: FileNotFoundException) {\n                //no need to handle this\n            }\n        }\n        //if we got an icon AND we have auto tinting enabled AND it is no IIcon, tint it ;)\n        if (icon != null && tint && iicon == null) {\n            icon = icon.mutate()\n            icon.setColorFilter(iconColor.defaultColor, PorterDuff.Mode.SRC_IN)\n        }\n        return icon\n    }\n}"
  },
  {
    "path": "materialdrawer-nav/.gitignore",
    "content": "/build\n"
  },
  {
    "path": "materialdrawer-nav/build.gradle.kts",
    "content": "plugins {\n    id(\"com.mikepenz.convention.android-library\")\n    id(\"com.mikepenz.convention.kotlin\")\n    id(\"com.mikepenz.convention.publishing\")\n    id(\"androidx.navigation.safeargs.kotlin\")\n}\n\nandroid {\n    namespace = \"com.mikepenz.materialdrawer.nav\"\n}\n\ndependencies {\n    implementation(project(\":materialdrawer\"))\n\n    implementation(libs.androidx.navigation.runtime)\n    implementation(libs.androidx.navigation.ui)\n}"
  },
  {
    "path": "materialdrawer-nav/consumer-rules.pro",
    "content": ""
  },
  {
    "path": "materialdrawer-nav/gradle.properties",
    "content": "POM_NAME=MaterialDrawer NavController-Extension\nPOM_DESCRIPTION=Extension for the MaterialDrawer library to add NavController support.\nPOM_ARTIFACT_ID=materialdrawer-nav\nPOM_PACKAGING=aar"
  },
  {
    "path": "materialdrawer-nav/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\n"
  },
  {
    "path": "materialdrawer-nav/proguard-rules.txt",
    "content": "# Add project specific ProGuard rules here.\n# By default, the flags in this file are appended to flags specified\n# in /Entwicklung/android-sdk/tools/proguard/proguard-android.txt\n# You can edit the include path and order by changing the ProGuard\n# include property in project.properties.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# Add any project specific keep options here:\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#}"
  },
  {
    "path": "materialdrawer-nav/src/main/AndroidManifest.xml",
    "content": "<manifest/>\n"
  },
  {
    "path": "materialdrawer-nav/src/main/java/com/mikepenz/materialdrawer/model/NavigationDrawerItem.kt",
    "content": "package com.mikepenz.materialdrawer.model\n\nimport android.content.Context\nimport android.os.Bundle\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.annotation.CallSuper\nimport androidx.annotation.IdRes\nimport androidx.navigation.NavOptions\nimport androidx.recyclerview.widget.RecyclerView\nimport com.mikepenz.materialdrawer.R\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\n\nclass NavigationDrawerItem<VH : RecyclerView.ViewHolder>(\n        @IdRes val resId: Int,\n        val item: IDrawerItem<VH>,\n        val args: Bundle? = null,\n        val options: NavOptions? = defaultOptions\n) : IDrawerItem<VH> by item {\n\n    init {\n        item.identifier = resId.toLong()\n    }\n\n    /**\n     * generates a view by the defined LayoutRes\n     */\n    override fun generateView(ctx: Context): View {\n        val viewHolder = getViewHolder(LayoutInflater.from(ctx).inflate(layoutRes, null, false) as ViewGroup)\n        bindView(viewHolder, mutableListOf())\n        return viewHolder.itemView\n    }\n\n    /**\n     * generates a view by the defined LayoutRes and pass the LayoutParams from the parent\n     */\n    override fun generateView(ctx: Context, parent: ViewGroup): View {\n        val viewHolder = getViewHolder(LayoutInflater.from(ctx).inflate(layoutRes, parent, false) as ViewGroup)\n        bindView(viewHolder, mutableListOf())\n        return viewHolder.itemView\n    }\n\n    @CallSuper\n    override fun bindView(holder: VH, payloads: List<Any>) {\n        item.bindView(holder, payloads)\n        holder.itemView.setTag(R.id.material_drawer_item, this)\n    }\n\n    companion object {\n        val defaultOptions = NavOptions.Builder()\n                .setLaunchSingleTop(true)\n                .setEnterAnim(androidx.navigation.ui.R.anim.nav_default_enter_anim)\n                .setExitAnim(androidx.navigation.ui.R.anim.nav_default_exit_anim)\n                .setPopEnterAnim(androidx.navigation.ui.R.anim.nav_default_pop_enter_anim)\n                .setPopExitAnim(androidx.navigation.ui.R.anim.nav_default_pop_exit_anim)\n                .build()\n    }\n}"
  },
  {
    "path": "materialdrawer-nav/src/main/java/com/mikepenz/materialdrawer/util/DrawerNavigationUI.kt",
    "content": "package com.mikepenz.materialdrawer.util\n\nimport android.os.Bundle\nimport android.view.View\nimport androidx.annotation.IdRes\nimport androidx.navigation.NavController\nimport androidx.navigation.NavDestination\nimport com.mikepenz.materialdrawer.model.NavigationDrawerItem\nimport com.mikepenz.materialdrawer.model.interfaces.IDrawerItem\nimport com.mikepenz.materialdrawer.widget.MaterialDrawerSliderView\nimport java.lang.ref.WeakReference\n\n/**\n * Sets up a {@link Drawer} for use with a {@link NavController}.\n * The selected item in the Drawer will automatically be updated when the destination\n * changes.\n *\n * @param navController The NavController that hosts the destination\n * @param fallBackListener the listener to handle no navigationDrawerItems\n * @return\n */\n@Deprecated(\"Added new successListener\", ReplaceWith(\"setupWithNavController(navController, null, fallBackListener)\"))\nfun MaterialDrawerSliderView.setupWithNavController(\n    navController: NavController,\n    fallBackListener: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)? = null,\n) {\n    setupWithNavController(navController, null, fallBackListener)\n}\n\n/**\n * Sets up a {@link Drawer} for use with a {@link NavController}.\n * The selected item in the Drawer will automatically be updated when the destination\n * changes.\n *\n * @param navController The NavController that hosts the destination\n * @param successListener listener to retrieve a notification on successful navigation\n * @param fallBackListener the listener to handle no navigationDrawerItems\n * @return\n */\nfun MaterialDrawerSliderView.setupWithNavController(\n        navController: NavController,\n        successListener: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)? = null,\n        fallBackListener: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)? = null,\n) {\n    DrawerNavigationUI.setupWithNavController(this, navController, successListener, fallBackListener)\n}\n\n/**\n * Created by petretiandrea on 19.07.19.\n */\nobject DrawerNavigationUI {\n\n    /**\n     * Sets up a {@link Drawer} for use with a {@link NavController}. It allow to navigate\n     * to a destination when an item {@link NavigationDrawerItem} of drawer is selected.\n     * The selected item in the Drawer will automatically be updated when the destination\n     * changes.\n     *\n     * It automatically close the Drawer.\n     *\n     * @param drawer The drawer that should be kept in sync with changes to the NavController.\n     * @param navController The NavController that allow to perform the navigation actions, relying on the item selected in the Drawer\n     * @param fallBackListener A listener called when perform navigation fails\n     * @return\n     */\n    fun setupWithNavController(\n            drawer: MaterialDrawerSliderView,\n            navController: NavController,\n            successListener: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)? = null,\n            fallBackListener: ((v: View?, item: IDrawerItem<*>, position: Int) -> Boolean)? = null\n    ) {\n        drawer.onDrawerItemClickListener = { v, item, position ->\n            val success = performNavigation(item, navController)\n            if (success) {\n                successListener?.invoke(v, item, position)\n                drawer.drawerLayout?.closeDrawer(drawer)\n            } else {\n                fallBackListener?.invoke(v, item, position)\n            }\n            success\n        }\n        val weakReference: WeakReference<MaterialDrawerSliderView> = WeakReference(drawer)\n        navController.addOnDestinationChangedListener(object : NavController.OnDestinationChangedListener {\n            override fun onDestinationChanged(controller: NavController, destination: NavDestination, arguments: Bundle?) {\n                val drawerWeak: MaterialDrawerSliderView? = weakReference.get()\n                if (drawerWeak == null) {\n                    navController.removeOnDestinationChangedListener(this)\n                }\n\n                fun Iterable<NavigationDrawerItem<*>>.handleSelection(): Boolean {\n                    var matched = false\n                    for (element in this) {\n                        // A ResId may refers to 3 intents.\n                        val destinationId = controller.graph.getAction(element.resId)?.let { action ->\n                            if (action.destinationId != 0) action.destinationId // an action navigate to a destination\n                            else action.navOptions?.popUpToId // an action pop to a destination\n                        } ?: element.resId // a destination\n\n                        if (matchDestination(destination, destinationId)) {\n                            drawerWeak?.selectExtension?.deselect()\n                            drawerWeak?.setSelection(element.identifier, false)\n\n                            drawerWeak?.getStickyFooterPosition(element)?.let {\n                                drawerWeak.setStickyFooterSelection(it, false)\n                            }\n\n                            matched = true\n                        }\n                    }\n                    return matched\n                }\n\n                if (drawerWeak?.itemAdapter?.adapterItems?.filterIsInstance<NavigationDrawerItem<*>>()?.handleSelection() != true) {\n                    // if we did not match the normal items, also check the footer\n                    if (drawerWeak?.footerAdapter?.adapterItems?.filterIsInstance<NavigationDrawerItem<*>>()?.handleSelection() != true) {\n                        // if footer also did not match, go to sticky\n                        drawerWeak?.stickyDrawerItems?.filterIsInstance<NavigationDrawerItem<*>>()?.handleSelection()\n                    }\n                }\n            }\n        })\n    }\n\n    /***\n     * Try to perform a navigation using the NavController to destination associated to IDrawerItem.\n     *\n     * Importantly, it assumes that the item type's is {@link NavigationDrawerItem} and that\n     * the resId matches a valid {@link NavDestination#getAction(int) action id} or {@link NavDestination#getId() destination id}\n     * to be navigated to.\n     *\n     * @param item The selected drawer item\n     * @param navController The NavController that hosts the destination.\n     * @return True if the navigation is performed, False otherwise.\n     */\n    private fun performNavigation(item: IDrawerItem<*>, navController: NavController): Boolean {\n        return when (item) {\n            is NavigationDrawerItem -> {\n                try {\n                    navController.navigate(item.resId, item.args, item.options)\n                    true\n                } catch (e: IllegalArgumentException) {\n                    false\n                }\n            }\n            else -> false\n        }\n    }\n\n    private fun matchDestination(destination: NavDestination, @IdRes destId: Int): Boolean {\n        var currentDestination = destination\n        while (currentDestination.id != destId && currentDestination.parent != null) {\n            currentDestination = currentDestination.parent!!\n        }\n        return currentDestination.id == destId\n    }\n}\n"
  },
  {
    "path": "settings.gradle.kts",
    "content": "rootProject.name = \"MaterialDrawer\"\n\n// enableFeaturePreview(\"TYPESAFE_PROJECT_ACCESSORS\")\n\npluginManagement {\n    repositories {\n        google()\n        gradlePluginPortal()\n        mavenCentral()\n        mavenLocal()\n    }\n}\n\ndependencyResolutionManagement {\n    repositories {\n        google()\n        mavenCentral()\n        mavenLocal()\n    }\n\n    versionCatalogs {\n        create(\"baseLibs\") {\n            from(\"com.mikepenz:version-catalog:0.1.3\")\n        }\n    }\n}\n\n\ninclude(\":app\")\ninclude(\":materialdrawer\")\ninclude(\":materialdrawer-iconics\")\ninclude(\":materialdrawer-nav\")"
  }
]