[
  {
    "path": ".gitignore",
    "content": "*.iml\n.gradle\n/local.properties\n/.idea/caches\n/.idea/libraries\n/.idea/modules.xml\n/.idea/workspace.xml\n/.idea/navEditor.xml\n/.idea\n/.idea/assetWizardSettings.xml\n.DS_Store\n/build\n/captures\n.externalNativeBuild\n.cxx\nlocal.properties\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\r\n                           Version 2.0, wgllss 2004\r\n                        http://www.apache.org/licenses/\r\n\r\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\r\n\r\n   1. Definitions.\r\n\r\n      \"License\" shall mean the terms and conditions for use, reproduction,\r\n      and distribution as defined by Sections 1 through 9 of this document.\r\n\r\n      \"Licensor\" shall mean the copyright owner or entity authorized by\r\n      the copyright owner that is granting the License.\r\n\r\n      \"Legal Entity\" shall mean the union of the acting entity and all\r\n      other entities that control, are controlled by, or are under common\r\n      control with that entity. For the purposes of this definition,\r\n      \"control\" means (i) the power, direct or indirect, to cause the\r\n      direction or management of such entity, whether by contract or\r\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\r\n      outstanding shares, or (iii) beneficial ownership of such entity.\r\n\r\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\r\n      exercising permissions granted by this License.\r\n\r\n      \"Source\" form shall mean the preferred form for making modifications,\r\n      including but not limited to software source code, documentation\r\n      source, and configuration files.\r\n\r\n      \"Object\" form shall mean any form resulting from mechanical\r\n      transformation or translation of a Source form, including but\r\n      not limited to compiled object code, generated documentation,\r\n      and conversions to other media types.\r\n\r\n      \"Work\" shall mean the work of authorship, whether in Source or\r\n      Object form, made available under the License, as indicated by a\r\n      copyright notice that is included in or attached to the work\r\n      (an example is provided in the Appendix below).\r\n\r\n      \"Derivative Works\" shall mean any work, whether in Source or Object\r\n      form, that is based on (or derived from) the Work and for which the\r\n      editorial revisions, annotations, elaborations, or other modifications\r\n      represent, as a whole, an original work of authorship. For the purposes\r\n      of this License, Derivative Works shall not include works that remain\r\n      separable from, or merely link (or bind by name) to the interfaces of,\r\n      the Work and Derivative Works thereof.\r\n\r\n      \"Contribution\" shall mean any work of authorship, including\r\n      the original version of the Work and any modifications or additions\r\n      to that Work or Derivative Works thereof, that is intentionally\r\n      submitted to Licensor for inclusion in the Work by the copyright owner\r\n      or by an individual or Legal Entity authorized to submit on behalf of\r\n      the copyright owner. For the purposes of this definition, \"submitted\"\r\n      means any form of electronic, verbal, or written communication sent\r\n      to the Licensor or its representatives, including but not limited to\r\n      communication on electronic mailing lists, source code control systems,\r\n      and issue tracking systems that are managed by, or on behalf of, the\r\n      Licensor for the purpose of discussing and improving the Work, but\r\n      excluding communication that is conspicuously marked or otherwise\r\n      designated in writing by the copyright owner as \"Not a Contribution.\"\r\n\r\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\r\n      on behalf of whom a Contribution has been received by Licensor and\r\n      subsequently incorporated within the Work.\r\n\r\n   2. Grant of Copyright License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      copyright license to reproduce, prepare Derivative Works of,\r\n      publicly display, publicly perform, sublicense, and distribute the\r\n      Work and such Derivative Works in Source or Object form.\r\n\r\n   3. Grant of Patent License. Subject to the terms and conditions of\r\n      this License, each Contributor hereby grants to You a perpetual,\r\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\r\n      (except as stated in this section) patent license to make, have made,\r\n      use, offer to sell, sell, import, and otherwise transfer the Work,\r\n      where such license applies only to those patent claims licensable\r\n      by such Contributor that are necessarily infringed by their\r\n      Contribution(s) alone or by combination of their Contribution(s)\r\n      with the Work to which such Contribution(s) was submitted. If You\r\n      institute patent litigation against any entity (including a\r\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\r\n      or a Contribution incorporated within the Work constitutes direct\r\n      or contributory patent infringement, then any patent licenses\r\n      granted to You under this License for that Work shall terminate\r\n      as of the date such litigation is filed.\r\n\r\n   4. Redistribution. You may reproduce and distribute copies of the\r\n      Work or Derivative Works thereof in any medium, with or without\r\n      modifications, and in Source or Object form, provided that You\r\n      meet the following conditions:\r\n\r\n      (a) You must give any other recipients of the Work or\r\n          Derivative Works a copy of this License; and\r\n\r\n      (b) You must cause any modified files to carry prominent notices\r\n          stating that You changed the files; and\r\n\r\n      (c) You must retain, in the Source form of any Derivative Works\r\n          that You distribute, all copyright, patent, trademark, and\r\n          attribution notices from the Source form of the Work,\r\n          excluding those notices that do not pertain to any part of\r\n          the Derivative Works; and\r\n\r\n      (d) If the Work includes a \"NOTICE\" text file as part of its\r\n          distribution, then any Derivative Works that You distribute must\r\n          include a readable copy of the attribution notices contained\r\n          within such NOTICE file, excluding those notices that do not\r\n          pertain to any part of the Derivative Works, in at least one\r\n          of the following places: within a NOTICE text file distributed\r\n          as part of the Derivative Works; within the Source form or\r\n          documentation, if provided along with the Derivative Works; or,\r\n          within a display generated by the Derivative Works, if and\r\n          wherever such third-party notices normally appear. The contents\r\n          of the NOTICE file are for informational purposes only and\r\n          do not modify the License. You may add Your own attribution\r\n          notices within Derivative Works that You distribute, alongside\r\n          or as an addendum to the NOTICE text from the Work, provided\r\n          that such additional attribution notices cannot be construed\r\n          as modifying the License.\r\n\r\n      You may add Your own copyright statement to Your modifications and\r\n      may provide additional or different license terms and conditions\r\n      for use, reproduction, or distribution of Your modifications, or\r\n      for any such Derivative Works as a whole, provided Your use,\r\n      reproduction, and distribution of the Work otherwise complies with\r\n      the conditions stated in this License.\r\n\r\n   5. Submission of Contributions. Unless You explicitly state otherwise,\r\n      any Contribution intentionally submitted for inclusion in the Work\r\n      by You to the Licensor shall be under the terms and conditions of\r\n      this License, without any additional terms or conditions.\r\n      Notwithstanding the above, nothing herein shall supersede or modify\r\n      the terms of any separate license agreement you may have executed\r\n      with Licensor regarding such Contributions.\r\n\r\n   6. Trademarks. This License does not grant permission to use the trade\r\n      names, trademarks, service marks, or product names of the Licensor,\r\n      except as required for reasonable and customary use in describing the\r\n      origin of the Work and reproducing the content of the NOTICE file.\r\n\r\n   7. Disclaimer of Warranty. Unless required by applicable law or\r\n      agreed to in writing, Licensor provides the Work (and each\r\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\r\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\r\n      implied, including, without limitation, any warranties or conditions\r\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\r\n      PARTICULAR PURPOSE. You are solely responsible for determining the\r\n      appropriateness of using or redistributing the Work and assume any\r\n      risks associated with Your exercise of permissions under this License.\r\n\r\n   8. Limitation of Liability. In no event and under no legal theory,\r\n      whether in tort (including negligence), contract, or otherwise,\r\n      unless required by applicable law (such as deliberate and grossly\r\n      negligent acts) or agreed to in writing, shall any Contributor be\r\n      liable to You for damages, including any direct, indirect, special,\r\n      incidental, or consequential damages of any character arising as a\r\n      result of this License or out of the use or inability to use the\r\n      Work (including but not limited to damages for loss of goodwill,\r\n      work stoppage, computer failure or malfunction, or any and all\r\n      other commercial damages or losses), even if such Contributor\r\n      has been advised of the possibility of such damages.\r\n\r\n   9. Accepting Warranty or Additional Liability. While redistributing\r\n      the Work or Derivative Works thereof, You may choose to offer,\r\n      and charge a fee for, acceptance of support, warranty, indemnity,\r\n      or other liability obligations and/or rights consistent with this\r\n      License. However, in accepting such obligations, You may act only\r\n      on Your own behalf and on Your sole responsibility, not on behalf\r\n      of any other Contributor, and only if You agree to indemnify,\r\n      defend, and hold each Contributor harmless for any liability\r\n      incurred by, or claims asserted against, such Contributor by reason\r\n      of your accepting any such warranty or additional liability.\r\n\r\n   END OF TERMS AND CONDITIONS\r\n\r\n   APPENDIX: How to apply the Apache License to your work.\r\n\r\n      To apply the Apache License to your work, attach the following\r\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\r\n      replaced with your own identifying information. (Don't include\r\n      the brackets!)  The text should be enclosed in the appropriate\r\n      comment syntax for the file format. We also recommend that a\r\n      file or class name and description of purpose be included on the\r\n      same \"printed page\" as the copyright notice for easier\r\n      identification within third-party archives.\r\n\r\n   Copyright [yyyy] [name of copyright owner]\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"
  },
  {
    "path": "README.md",
    "content": "# WXDynamicPlugin\n\n## 介绍\n\n#### 最新接入研究配置参考文章介绍  [Compose的全动态插件化框架支持了，已更新到AGP 8.6,Kotlin2.0.20,支持Compose](https://juejin.cn/post/7435587382345482303)\n\n#### 插件化模块按需下载首页之外模块  [按需下载!!全动态插件化框架WXDynamicPlugin解析怎么支持的](https://juejin.cn/post/7497428040484241462)\n\n#### **WXDynamicPlugin是由本人自住研发的Android插件框架**\n\n### 零反射，零HooK,全动态化，插件化框架，全网唯一结合启动优化的插件化架构\n\n## 示例Sample （注意，请不要抓包，设置代理等！！！请不要抓包，设置代理等！！！）\n\n![扫码下载](https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Qrcode.png)\n\n## 示例Sample截图\n\n|                                                                                                                                                 |                                                                                                                                                      |                                                                                                                                                 |\n|-------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------|\n| <img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_home.png\" width=\"220\" height=\"448\"/>    | <img src=\"https://gitee.com/wgllss888/WXDynamicPlugin/raw/master/WX-Resource/wx-pic/Screenshot_sc.png\" width=\"220\" height=\"448\"/>                    | <img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_sample.jpg\" width=\"220\" height=\"448\"/>  |\n| <img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_setting.png\" width=\"220\" height=\"448\"/> | <img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_vedio.png\" width=\"220\" height=\"448\"/>        | <img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_audio.png\" width=\"220\" height=\"448\"/>   |\n| <img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_a2.png\" width=\"220\" height=\"448\"/>      | <img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_notification.png\" width=\"220\" height=\"448\"/> | <img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_webview.png\" width=\"220\" height=\"448\"/> |\n| <img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_cp.png\" width=\"220\" height=\"448\"/>      | <img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_service.png\" width=\"220\" height=\"448\"/>      | <img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_so.png\" width=\"220\" height=\"448\"/>      |\n\n[//]: # (<img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_home.png\" width=\"220\" height=\"448\"/>)\n\n[//]: # (<img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_sc.png\" width=\"220\" height=\"448\"/>)\n\n[//]: # (<img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_sample.jpg\" width=\"220\" height=\"448\"/>)\n\n[//]: # (<img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_setting.png\" width=\"220\" height=\"448\"/>)\n\n[//]: # (<img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_vedio.png\" width=\"220\" height=\"448\"/>)\n\n[//]: # (<img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_audio.png\" width=\"220\" height=\"448\"/>)\n\n[//]: # (<img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_a2.png\" width=\"220\" height=\"448\"/>)\n\n[//]: # (<img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_notification.png\" width=\"220\" height=\"448\"/>)\n\n[//]: # (<img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_webview.png\" width=\"220\" height=\"448\"/>)\n\n[//]: # (<img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_cp.png\" width=\"220\" height=\"448\"/>)\n\n[//]: # (<img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_service.png\" width=\"220\" height=\"448\"/>)\n\n[//]: # (<img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/Screenshot_so.png\" width=\"220\" height=\"448\"/>)\n\n## 与市面上其他插件框架相比，WXDynamicPlugin主要具有以下优势和特点\n\n### 优势:\n\n#### 1.支持宿主就一个空壳子，并且启动速度不受任何影响,做到真正原生不用发版\n\n#### 2.插件打包支持“分布式”，多模块单独插件，单独下载，单独加载，单独访问\n\n#### 3.支持接入到宿主的那仅有的一小部分代码 都可以动态更新(插件下载逻辑，版本管理，下载服务器地址，环境全动态化)\n\n#### 4.支持Debug调试插件，不存在插件调试难度\n\n### 特点:\n\n* **零反射无Hack实现插件技术**：从理论上就已经确定无需对任何系统做兼容开发，更无任何隐藏API调用，和Google限制非公开SDK接口访问的策略完全不冲突。\n* **全动态插件框架**：一次性实现完美的插件框架很难，但WXDynamicPlugin将这些全部动态化来实现，使插件化框架代码也成为了插件，同时，宿主下载插件的逻辑，版本控制也可以插件化起来，使得插件的迭代，及插件化框架的修改，以及可能涉及到宿主下载插件逻辑，版本控制逻辑，加载插件逻辑，这些全部动态化起来。目前市面上插件化框架，都没有实现插件下载到本地逻辑的动态化起来\n* **插件极限瘦身优化**：编译出插件体积最小，所有插件模块总体积加载起来不到500k,单个模块70k左右，同时可以让各个功能模块单独插件化起来，市面上插件化框架插件体积编译出来基本都3M以上\n* **宿主增量极小**：接入宿主的代码全Kotlin实现，真正插件化框架实现宿主接入代码仅4K多，加上下载逻辑，插件版本控制加载接入宿主代码仅60k左右,加上下载版本判断逻辑总共方法数仅80个方法数\n* **极限启动优化性能**：做到宿主空壳子，第一次启动就下载到本地到加载，到显示到第一个页面，所需要的总耗时最小，基本是秒开，这得益于插件模块编译出来体积最小化，4G网络基本500ms就下载完了，如果插件编译出来基本3M以上，那么从服务端下载到本地至少10s以上，第一次再加载一个3M的插件又去了2~\n  3s，第一次进入到主UI界面，差不多20s去了。而WXDynamicPlugin真正做到接入插件化后都比各大厂主流顶级App,没有通过宿主接插件化启动时间还快\n\n## 支持特性\n\n* 四大组件 Activity ,Service , ContentProvider ,Broadcaster\n* 跨进程使用插件Service\n* fragment\n* assets\n* 插件访问宿主类\n* 插件之间可以互不依赖，也可以存在有依赖关系\n* 通知栏\n* So加载\n* 分段加载插件（多Apk分别加载或多Apk以此依赖加载）\n* 一个app 分多个模块单独加载\n* 一个Activity中加载多个Apk中的View\n* 支持插件调试debug\n* 支持Compose\n* 等等……\n\n## 插件化框架对比\n\n| 插件化框架         | Shadow      | WXDynamicPlugin |\n|---------------|-------------|-----------------|\n| 插件打包体积        | 3M以上        | 500k左右 ✅        |\n| 极致化下载管理版本控制   | 需自己实现       | 1步到位 ✅          |\n| 插件加载逻辑        | 宿主->管理器->插件 | 宿主->插件 ✅        |\n| 首次插件下载到展示首页耗时 | 3~5s以上？     | 1s内 ✅           |\n| 插件已经到本地后加载速度  | 1500ms以上?   | 500ms内 ✅        |\n| 全动态化          | 部分支持        | 支持 ✅            |\n| 插件化框架动态化      | 支持          | 支持 ✅            |\n| 下载逻辑代码动态化     | 不支持         | 支持 ✅            |\n| 版本控制代码动态化     | 不支持         | 支持 ✅            |\n| 插件调试debug     | 不支持         | 支持 ✅            |\n| Compose       | 不支持         | 支持 ✅            |\n\n## 示例运行：\n\n* **方式1：扫码安装即可**\n* **方式2：拉取代码，查看空壳子宿主工程，运行sample**\n* **以上两种运行实例方式宿主都是空壳子，所有插件存放在我配置的服务器地址**\n* **想把插件换成自己服务器上面，自己打包插件，想看插件具体写法，请放开 settings.gradle 中第150行 到 212行的注释 (为了拉取下来只运行宿主空壳子注释掉了)，并按照下面文档进行相关配置**\n\n#### 最新接入研究配置参考文章介绍  [Compose的全动态插件化框架支持了，已更新到AGP 8.6,Kotlin2.0.20,支持Compose](https://juejin.cn/post/7435587382345482303)\n\n#### 插件化模块按需下载首页之外模块  [按需下载!!全动态插件化框架WXDynamicPlugin解析怎么支持的](https://juejin.cn/post/7497428040484241462)\n\n## 编译与开发环境\n\n#### 环境准备\n\n* **AS设置JDK 选17，电脑java版本需要安装 1.8.xxx(这是电脑安装的JDK,电脑!!!,不是AS), 打开工程下 local.properties**\n##### 以下为我本地电脑配置，需要添加一行下面一句，并改成自己电脑配置:\n```\nworkingDirPath=D\\:\\\\android_software\\\\android_sdk\\\\android_sdk\\\\build-tools\\\\32.0.0\\\\\n```\n\n* **如果电脑安装了几个版本的JDK,再次安装的JDK1.8.xxx后,因为有多个JDK共存，可拉取master-d8分支,单独配置JDK环境变量如下：**\n##### 以下为我本地电脑配置，需要添加一行下面一句，并改成自己电脑配置:\n```\njdkDirPath=C\\:\\\\Program Files\\\\Java\\\\jdk1.8.0_181\\\\\n```\n* **最新版本AS(Android Studio Ladybug 2024.2.1 Patch 3)以上提示JDK需要 17时：需要修改如下2个工程：**\n* **maven-wgllss-sample-create-version-config-compiler 和 maven-wgllss-sample-create-version-config-annotations工程都需要java版本需要改成如下17**\n\n```\njava {\n    sourceCompatibility = JavaVersion.VERSION_17\n    targetCompatibility = JavaVersion.VERSION_17\n}\n```\n\n* **最新版本AS(Android Studio Meerkat Feature Drop | 2024.3.2)以上提示JDK需要 21时：需要修改上面配置2个工程改成21：**\n\n\n\n##### 然后在IDE中选择 app 或 sample 模块直接运行，如下:\n\n  <img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/run_app.jpeg\" width=\"181\" height=\"56\"/>\n  <img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/run_sample.jpeg\" width=\"578\" height=\"38\"/>\n\n## 项目工程目录截图\n\n<img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/project_img.png\" width=\"331\" height=\"631\"/>\n\n## 项目工程目录介绍\n\n| 文件夹                     | 介绍                  | 接入方式               | \n|-------------------------|---------------------|--------------------|\n| WX-Code                 | 示例工程全源码级接入方式        | 接入方式一：依赖host模块工程   |   \n| WX-Dynamic-Host-SDK-Lib | 宿主工程所依赖的lib工程源码     |                    |       \n| WX-Maven                | 示例工程maven依赖仓库方式接入工程 | 接入方式二：maven引入host包 |    \n\n* **特别说明**：WX-Code 和 WX-Maven 下实际代码内容一样，目录结构一样，唯一区别接入全动态host代码方式不一样，另外WX-Maven 下所有文件夹和项目工程名多了 maven前缀，用于在同一工程下区分成 2个不同的项目\n\n#### 推荐用方式二： Maven接入方式\n\n#### 为了方便编译查看，已经注释掉 settings.gradle 中第35行到119行，需要看源码及源码方式接入（WX-Code下面），请自行放开注释\n\n#### 以 WX-Maven下目录结构介绍为例：\n\n#### WX-Host:   下面全部为host宿主项目代码\n\n&emsp;&emsp;sample:  host宿主真实工程app\n\n##### &emsp;&emsp;sample-lib:  下面为宿主工程依赖的4个工程模块\n\n&emsp;&emsp;&emsp;&emsp;maven-wgllss-business-re-library:涉及到app的公共业务带res资源的模块lib       \n&emsp;&emsp;&emsp;&emsp;maven-wgllss-common-re-library:涉及到公共代码带res资源的模块lib        \n&emsp;&emsp;&emsp;&emsp;maven-wgllss-dynamic-host-library:宿主里manifest注册所必备的四大组件等lib          \n&emsp;&emsp;&emsp;&emsp;maven-wgllss-dynamic-host-skin-resource-lib:宿主所必须的资源样式主题等lib\n\n#### WX-Plugin:  该文件夹下面的所有工程都是插件的形式，不存在宿主里面\n\n&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin-Common-Library:  插件中公共代码    \n&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin-Generate:  插件中打包所用的apt工程   \n&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin-Manager:  插件中管理插件，管理动态代码的3个工程   \n&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin-Sample:  插件中真正业务代码插件工程   \n&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin-SDK:  插件框架四大组件SDK代码，以插件形式存在  \n&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin_Skin:  插件中换皮肤资源\n\n### WX-Resource: 为项目已经打包好的插件，so,皮肤包文件等 存放的文件夹\n\n#### 上面介绍 直接 run运行 ,打开app 进入宿主，直接下载的插件 为我已经放在准好的服务器上面了\n\n#### maven接入方式 请不要设置代理抓包！！！\n\n&emsp;&emsp;可以通过源码工程自行打包，上传到自己的服务器上部署，方法如下:  \n&emsp;&emsp;找到 WX/WX-Maven/WX-Host/sample/ com.wgllss.dynamic.host.FaceImpl\n\n```\n  //    override fun getHostL() = \"http://192.168.3.21:8080/assets/WXDynamicPlugin/\"\n//    override fun getHostL() = \"http://192.168.1.9:8080/assets/WXDynamicPlugin/\"\n    //todo 自己本地搭一个服务器，或者 自己服务器 或者 像我一样在gitee上面在自己的项目下建一个文件当作服务器 供下载,\n    // 切记不要往往我的 gitee 项目上面推\n    override fun getHostL() = \"https://gitee.com/wgllss888/WXDynamicPlugin/raw/master/WX-Resource/\"\n\n    /** 0:WXDynamicPlugin 动态化插件框架 理论上已经做到了可以完全不动宿主,但是如果一定要动宿主 可以提供以下思路:\n     *  1:可以根据 宿主版本号得到 宿主版本支持的 的插件,\n     *  2:当宿主必须 需要升级时,升级后原版本的插件不可用了，插件配置在新宿主版本文件夹下面，原宿主版本文件夹可可以先动态配置 在启动页 升级下载新的宿主\n     *  @example  宿主版本 10000 版本支持的插件 放在服务端 WXDynamicPlugin/10000/ 文件夹下  20000版本的插件放在 WXDynamicPlugin/20000/下面\n     */\n    override fun getBaseL(): String {\n        if (TextUtils.isEmpty(baseXL)) {\n            baseXL = StringBuilder().append(getHostL()).append(DeviceIdUtil.getDeviceId()).append(\"/\").append(BuildConfig.VERSION_CODE).append(\"/\").toString()\n        }\n        return baseXL\n    }\n```\n\n&emsp;&emsp;修改 getHostL() 地址为自己服务器地址, 修改 getBaseL() 中主要路劲,确保修改后地址可以访问通  \n&emsp;&emsp;然后将打包好的14个文件 放入getHostL()+getBaseL() 服务器文件夹下面  \n&emsp;&emsp;该 14个文件打包如下:  \n<img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/createfile.jpeg\" width=\"628\" height=\"277\"/>\n\n&emsp;&emsp;点击 assembleCreateAllFileRelease 等待 14个文件生成 ，一次不行，再次点击执行命令，如果还不生成，点击当前项目下maven-wgllss-sample-create-version-config-app的另一个assembleCreateVersion2FileRelease，生成2个文件之后再执行assembleCreateAllFileRelease  \n&emsp;&emsp;14个文件生成在以下目录:可以拷贝到自己的服务器上面供下载:即上面修改的 getHostL()+getBaseL() 服务器文件夹下面 ,同时把我准备的WX-Resource/so 文件夹和 WX-Resource/skins 文件夹拷贝过去，这是供sample 工程演示所用的，另外皮肤资源包多个apk文件也可以自行通过源码工程打包  \n<img src=\"https://raw.githubusercontent.com/wgllss/WXDynamicPlugin/master/WX-Resource/wx-pic/14file.jpg\" width=\"610\" height=\"260\"/>\n\n## 全动态插件化框架WXDynamicPlugin介绍文章：\n\n#### [(一) 插件化框架开发背景：零反射，零HooK,全动态化，插件化框架，全网唯一结合启动优化的插件化架构](https://juejin.cn/post/7347994218235363382)\n\n#### [(二）插件化框架主要介绍：零反射，零HooK,全动态化，插件化框架，全网唯一结合启动优化的插件化架构](https://juejin.cn/post/7367676494976532490)\n\n#### [(三）插件化框架内部详细介绍: 零反射，零HooK,全动态化，插件化框架，全网唯一结合启动优化的插件化架构](https://juejin.cn/post/7368397264026370083)\n\n#### [(四）插件化框架接入详细指南：零反射，零HooK,全动态化，插件化框架，全网唯一结合启动优化的插件化架构](https://juejin.cn/post/7372393698230550565)\n\n#### [(五) 大型项目架构：全动态插件化+模块化+Kotlin+协程+Flow+Retrofit+JetPack+MVVM+极限瘦身+极限启动优化+架构示例+全网唯一](https://juejin.cn/post/7381787510071934985)\n\n#### [(六) 大型项目架构：解析全动态插件化框架WXDynamicPlugin是如何做到全动态化的？](https://juejin.cn/post/7388891131037777929)\n\n#### [(七) 还在不断升级发版吗？从0到1带你看懂WXDynamicPlugin全动态插件化框架？](https://juejin.cn/post/7412124636239904819)\n\n#### [(八) Compose插件化：一个Demo带你入门Compose，同时带你入门插件化开发](https://juejin.cn/post/7425434773026537483)\n\n#### [(九) 花式高阶：插件化之Dex文件的高阶用法，极少人知道的秘密 ](https://juejin.cn/spost/7428216743166771212)\n\n#### [(十) 5种常见Android的SDK开发的方式，你知道几种？ ](https://juejin.cn/post/7431088937278947391)\n\n#### [(十一) 5种WebView混合开发动态更新方式，直击痛点，有你想要的？ ](https://juejin.cn/post/7433288965942165558)\n\n#### [(十二) Compose的全动态插件化框架支持了，已更新到AGP 8.6,Kotlin2.0.20,支持Compose](https://juejin.cn/post/7435587382345482303)\n\n#### [(十三)按需下载!!全动态插件化框架WXDynamicPlugin解析怎么支持的](https://juejin.cn/post/7497428040484241462)\n\n## 作者开源 Compose可视化图表库\n\n#### [(一)Compose曲线图表库WXChart，你只需要提供数据配置就行了](https://juejin.cn/post/7438835112790605865 \"https://juejin.cn/post/7438835112790605865\")\\\n\n#### [(二)Compose折线图，贝赛尔曲线图，柱状图，圆饼图，圆环图。带动画和点击效果](https://juejin.cn/post/7442228138501259283 \"https://juejin.cn/post/7442228138501259283\")\\\n\n#### [(三)全网最火视频，Compose代码写出来，动态可视化趋势视频，帅到爆](https://juejin.cn/post/7449238845214244875 \"https://juejin.cn/post/7449238845214244875\")\\\n\n#### [(四)全网最火可视化趋势视频实现深度解析，同时新增条形图表](https://juejin.cn/post/7449910229573943350)\n\n#### [(五)庆元旦，出排名，手撸全网火爆的排名视频，排名动态可视化](https://juejin.cn/post/7454386729702375465)\n\n#### [(六)Android六边形战士能力图绘制，Compose实现](https://juejin.cn/post/7457449985530757161)\n\n#### [(七)ndroid之中美PK,赛事PK对比图Compose实现](https://juejin.cn/post/7462544107527389247)\n\n#### [(八)Android之等级金字塔之Compose智能实现](https://juejin.cn/post/7468865451134091275)\n\n#### [(九)地图之Compose轻松绘制,可视化带点击事件，可扩展二次开发](https://juejin.cn/post/7485936146070356006)\n\n## 本人其他开源文章：\n\n#### [那些大厂架构师是怎样封装网络请求的？](https://juejin.cn/post/7435904232597372940)\n\n#### [Kotlin+协程+Flow+Retrofit+OkHttp这么好用，不运行安装到手机可以调试接口吗?可以自己搭建一套网络请求工具](https://juejin.cn/post/7406675078810910761)\n\n#### [花式封装：Kotlin+协程+Flow+Retrofit+OkHttp +Repository，倾囊相授,彻底减少模版代码进阶之路](https://juejin.cn/post/7417847546323042345)\n\n#### [注解处理器在架构，框架中实战应用：MVVM中数据源提供Repository类的自动生成](https://juejin.cn/post/7392258195089162290)\n\n#### [Android串口，USB，打印机，扫码枪，支付盒子，键盘，鼠标，U盘等开发使用一网打尽](https://juejin.cn/post/7439231301869305910)\n\n#### [多台Android设备局域网下的数据备份如何实现？](https://juejin.cn/post/7444378661934055464)\n\n#### [轻松搞定Android蓝牙打印机，双屏异显及副屏分辨率适配解决办法](https://juejin.cn/post/7446820939943428107)\n\n#### [一个Kotlin版Demo带你入门JNI,NDK编程](https://juejin.cn/post/7452181029996380171)\n\n#### [元宵节前福利，神之操作，一键下载想要的同类型多个图片？？](https://juejin.cn/post/7469991575277207602)\n\n#### [如何拦截其他Android应用程序播放器的原始音频数据自定义保存下来？](https://juejin.cn/post/7459720128983351337)\n\n#### [Android拦截其它播放声音：内录音，外录音，录屏，剪辑，混音，一键制作大片全搞定](https://juejin.cn/post/7472223022192836659)\n\n#### [Android之Apk全面瘦身，极致瘦身优化](https://juejin.cn/post/7483439484052258853)\n\n#### [电影电视剧网红广告屏自动轮播介绍视频特效制作，Compose轻松实现](https://juejin.cn/post/7491241868861554726)\n\n#### [Android下载进度百分比按钮，Compose轻松秒杀实现](https://juejin.cn/post/7493449430789095476)\n\n#### [Android监听开机自启，是否在前后台，锁屏界面，息屏后自动亮屏，一直保持亮屏](https://juejin.cn/post/7494083990069444648)\n\n#### [Android图片处理:多合一，多张生成视频，裁剪，滤镜色调，饱和度，亮度，缩放调整](https://juejin.cn/post/7496344493705510927)\n\n#### [Android投屏,设备远程协助,被远程服务浏览器上面操控屏幕如何实现？](https://juejin.cn/post/7500981295104000039)\n\n#### 感谢阅读，欢迎给给个星，你们的支持是我开源的动力\n\n## 欢迎光临：\n\n#### **[我的掘金地址](https://juejin.cn/user/356661835082573)**\n\n#### 关于我\n\n**VX号：wgllss**  ,如果想更多交流请加我VX\n\n\n\n\n\n\n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    namespace 'com.wgllss.dynamic.host'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.dynamic.host.sample\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 10000\n        versionName \"1.0000\"\n        ndk {\n            abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'\n        }\n    }\n\n    signingConfigs {\n        def password = \"WXSample\"\n        def alias = \"WXSample\"\n        def filePath = \"./sign/WXSample.jks\"\n\n        debug {\n            keyAlias alias\n            keyPassword password\n            storeFile file(filePath)\n            storePassword(password)\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n        release {\n            keyAlias alias\n            keyPassword password\n            storeFile file(filePath)\n            storePassword(password)\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled true // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled true // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n            signingConfig signingConfigs.debug\n        }\n\n        release {\n            debuggable false\n            minifyEnabled true // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled true // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n            signingConfig signingConfigs.release\n        }\n        applicationVariants.all { variant ->\n            variant.outputs.all {\n                outputFileName = \"WXDynamicPlugin_Sample_${variant.buildType.name}.apk\"\n            }\n        }\n    }\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n\n    buildFeatures {\n        buildConfig true\n//        compose = true\n    }\n\n    composeOptions {\n        kotlinCompilerExtensionVersion = \"1.7.0\"\n    }\n\n//    lintOptions {\n//        abortOnError false\n//    }\n}\n\ndependencies {\n\n    implementation libs.appcompat\n    implementation libs.androidx.recyclerview\n    implementation libs.google.material\n    implementation libs.constraintlayout\n\n    implementation project(path: ':Wgllss-Dynamic-Host-Version-Lib')\n    implementation project(path: ':Wgllss-Dynamic-Host-Lib')\n//    implementation project(path: ':Wgllss-Dynamic-Host-Download-Lib')\n//    implementation project(path: ':Wgllss-Dynamic-Host-Constant-Lib')\n\n    implementation project(path: ':wgllss-dynamic-host-skin-resource-lib')\n    implementation project(path: ':wgllss-common-re-library')\n    implementation project(path: ':wgllss-business-re-library')\n    implementation project(path: ':wgllss-dynamic-host-library')\n\n//    //compose\n//    implementation(libs.androidx.activity.compose)\n//    implementation(platform(libs.androidx.compose.bom))\n//    implementation(libs.androidx.ui)\n//    implementation(libs.androidx.ui.graphics)\n//    implementation(libs.androidx.ui.tooling.preview)\n//    implementation(libs.androidx.material3)\n//    implementation libs.androidx.constraintlayout.compose\n//    implementation libs.androidx.runtime.livedata\n//    implementation libs.coil.compose\n//    implementation libs.androidx.navigation.compose\n//    implementation libs.androidx.navigation.runtime.ktx\n//    implementation libs.androidx.compose.material3.adaptive.navigation\n//    implementation libs.androidx.compose.material3.adaptive\n//    implementation libs.androidx.compose.material3.adaptive.layout\n//    implementation libs.androidx.compose.material3.navigationSuite\n//    implementation libs.androidx.compose.material3.windowSizeClass\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile\n\n-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* #这个过滤器是谷歌推荐的算法，一般不做更改\n-optimizationpasses 7 # 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n-dontpreverify # 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n-dontusemixedcaseclassnames #混合时不使用大小写混合，混合后的类名为小写\n-verbose #包含有类名->混淆后类名的映射关系 日志记录\n-keepattributes SourceFile,LineNumberTable # 保留代码行号\n\n# Preserve some attributes that may be required for reflection.\n-keepattributes AnnotationDefault,*Annotation*,# 避免混淆注解\n                EnclosingMethod, # 避免混淆匿名类\n                InnerClasses, # 避免混淆内部类\n                RuntimeVisibleAnnotations,\n                RuntimeVisibleParameterAnnotations,\n                RuntimeVisibleTypeAnnotations,\n                Signature # 避免混淆泛型\n-keep class com.google.android.material.** { *; }\n\n\n-keep class androidx.appcompat.view.ContextThemeWrapper { }\n-keep class androidx.fragment.app.FragmentActivity { }\n-keep class androidx.lifecycle.** { *; }\n\n\n-keep class com.wgllss.core.** { *; }\n-keep class com.wgllss.sample.** { *; }\n-keep class com.wgllss.dynamic.host.lib.**{}\n#-keep class com.wgllss.host.library.** { *; }\n\n#-keep class com.wgllss.dynamic.lib.** { *; }\n#-keep class com.wgllss.host.library.** { *; }\n#-keep class com.wgllss.plugin.library.** { *; }\n#-keep class com.wgllss.host.library.impl.** { *; }\n\n-keep class androidx.savedstate.** { *; }\n-keep class androidx.arch.core.internal.**{*;}\n\n-keep class com.wgllss.**{*;}\n-keep class android.**{*;}\n-keep class android.app.**{*;}\n-keep class androidx.**{*;}\n-keep class androidx.activity.**{*;}\n-keep class kotlinx.**{*;}\n-keep class coil.**{*;}\n-keep class com.tencent.mmkv.**{*;}\n-keep class com.google.android.**{*;}\n-keep class com.google.android.exoplayer2**{*;}\n-keep class com.google.gson.**{*;}\n-keep class retrofit2.**{*;}\n-keep class okhttp3.**{*;}\n-keep class okio.**{*;}\n-keep class com.bumptech.glide.**{*;}\n-keep class com.mcxtzhang.**{*;}\n-keep class com.hjq.**{*;}\n-keep class com.umeng.**{*;}\n-keep class org.jsoup.**{*;}\n-keep class res.**{*;}\n-keep class com.wgllss.sample.skin.**{*;}\n-keep class androidx.compose.**{*;}\n-keep class androidx.constraintlayout.compose.**{*;}\n\n\n-keep class * extends androidx.startup.Initializer{}\n\n# Fragment\n-keep class * extends androidx.fragment.app.Fragment{}\n-keep class * extends android.app.Application{}\n-keep class * extends androidx.lifecycle.LiveData{}\n-keep class * extends androidx.startup.InitializationProvider{}\n\n# keepclassmembers :防止类成员被移除或被混淆\n-keepclassmembers class * {\n    @android.webkit.JavascriptInterface <methods>;\n}\n# 保留本地native方法不被混淆\n-keepclasseswithmembernames class * { native <methods>;}\n\n-dontnote androidx.**\n-dontwarn android.support.**\n-dontwarn androidx.**\n# 保留R下面的资源\n-keep class **.R$* {*;}\n## Android architecture components: Lifecycle\n# LifecycleObserver's empty constructor is considered to be unused by proguard\n-keepclassmembers class * implements androidx.lifecycle.LifecycleObserver {\n    <init>(...);\n}\n# ViewModel's empty constructor is considered to be unused by proguard\n-keepclassmembers class * extends androidx.lifecycle.ViewModel {\n    <init>(...);\n}\n-keepclassmembers class * extends androidx.lifecycle.LifecycleOwner {\n    <init>(...);\n}\n#-keepclassmembers class * extends androidx.savedstate.SavedStateRegistryOwner {\n#    <init>(...);\n#}\n# keep methods annotated with @OnLifecycleEvent even if they seem to be unused\n# (Mostly for LiveData.LifecycleBoundObserver.onStateChange(), but who knows)\n-keepclassmembers class * {\n    @androidx.lifecycle.OnLifecycleEvent *;\n}\n\n# ViewBinding\n#-keep class androidx.databinding.DataBindingUtil{}\n\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet);\n}\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet, int);\n}\n\n\n## Databinding\n#-dontwarn android.databinding.**\n#-keep class android.databinding.** { *; }\n#\n#-keep class android.content.Intent { *; }\n#-keep class android.os.Bundle { *; }\n\n# kotlin 相关\n-dontwarn kotlin.**\n-keep class kotlin.** { *; }\n-keep interface kotlin.** { *; }\n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.host\">\n\n    <application\n        android:name=\".SampleApplication\"\n        android:allowBackup=\"true\"\n        android:dataExtractionRules=\"@xml/data_extraction_rules\"\n        android:fullBackupContent=\"@xml/backup_rules\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:largeHeap=\"true\"\n        android:networkSecurityConfig=\"@xml/network_security_config\"\n        android:requestLegacyExternalStorage=\"true\"\n        android:roundIcon=\"@mipmap/ic_launcher\"\n        android:supportsRtl=\"true\"\n        android:usesCleartextTraffic=\"true\" >\n\n\n    </application>\n\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/java/com/wgllss/dynamic/host/FaceImpl.kt",
    "content": "package com.wgllss.dynamic.host\n\nimport android.text.TextUtils\nimport com.wgllss.core.units.DeviceIdUtil\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.CDLFD\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.CLMD\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.COMMON\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.COMMON_BUSINESS\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.FIRST\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.HOME\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.MANAGER\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.RESOURCE_SKIN\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.RUNTIME\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.VERSION\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.WEB_ASSETS\nimport com.wgllss.dynamic.host.lib.download.IDynamicDownLoadFace\n\nclass FaceImpl : IDynamicDownLoadFace {\n\n    private var baseXL: String = \"\"\n\n//    override fun getHostL() = \"http://192.168.3.108:8080/assets/WXDynamicPlugin/\"\n//    override fun getHostL() = \"http://192.168.1.5:8080/assets/WXDynamicPlugin/\"\n    //todo 自己本地搭一个服务器，或者 自己服务器 或者 像我一样在gitee上面在自己的项目下建一个文件当作服务器 供下载,\n    // 切记不要往往我的 gitee 项目上面推\n    override fun getHostL() = \"https://gitee.com/wgllss888/WXDynamicPlugin/raw/master/WX-Resource/\"\n\n    /** 0:WXDynamicPlugin 动态化插件框架 理论上已经做到了可以完全不动宿主,但是如果一定要动宿主 可以提供以下思路:\n     *  1:可以根据 宿主版本号得到 宿主版本支持的 的插件,\n     *  2:当宿主必须 需要升级时,升级后原版本的插件不可用了，插件配置在新宿主版本文件夹下面，原宿主版本文件夹可可以先动态配置 在启动页 升级下载新的宿主\n     *  @example  宿主版本 10000 版本支持的插件 放在服务端 WXDynamicPlugin/10000/ 文件夹下  20000版本的插件放在 WXDynamicPlugin/20000/下面\n     */\n    override fun getBaseL(): String {\n        if (TextUtils.isEmpty(baseXL)) {\n            baseXL = StringBuilder().append(getHostL()).append(DeviceIdUtil.getDeviceId()).append(\"/\").append(BuildConfig.VERSION_CODE).append(\"/\").toString()\n        }\n        return baseXL\n    }\n\n    override fun isDebug() = false\n\n    override fun getOtherDLU() = realUrl(\"vc\")\n\n    override fun getMapDLU() = mutableMapOf(\n        VERSION to realUrl(\"classes_version_dex\"),\n        COMMON to realUrl(\"classes_common_lib_dex\"),\n        WEB_ASSETS to realUrl(\"classes_business_web_res\"),\n        COMMON_BUSINESS to realUrl(\"classes_business_lib_dex\"),\n        HOME to realUrl(\"classes_home_dex\"),\n        RESOURCE_SKIN to realUrl(\"classes_common_skin_res\"),\n        RUNTIME to realUrl(\"classes_wgllss_dynamic_plugin_runtime\"),\n        MANAGER to realUrl(\"classes_manager_dex\"),\n        FIRST to realUrl(\"classes_loading_dex\"),\n        CLMD to realUrl(\"class_loader_impl_dex\"),\n        CDLFD to realUrl(\"classes_downloadface_impl_dex\")\n    )\n\n    override fun getLoadVersionClassName() = \"com.wgllss.loader.version.LoaderVersionImpl\"\n\n    private fun realUrl(name: String) = StringBuilder().append(getBaseL()).append(name).toString()\n\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/java/com/wgllss/dynamic/host/SampleApplication.kt",
    "content": "package com.wgllss.dynamic.host\n\nimport android.app.Application\nimport android.content.Context\nimport com.wgllss.core.units.AppGlobals\nimport com.wgllss.core.units.LogTimer\nimport com.wgllss.dynamic.host.lib.impl.WXDynamicLoader\n\nclass SampleApplication : Application() {\n\n    override fun attachBaseContext(base: Context) {\n        super.attachBaseContext(base)\n        LogTimer.initTime(this)\n        AppGlobals.sApplication = this\n        WXDynamicLoader.instance.installPlugin(base, FaceImpl(), VersionImpl())\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/java/com/wgllss/dynamic/host/VersionImpl.kt",
    "content": "package com.wgllss.dynamic.host\n\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant\nimport com.wgllss.dynamic.host.lib.version.ILoaderVersion\n\nclass VersionImpl : ILoaderVersion {\n\n    override fun getV() = 1000\n\n    override fun isMustShowLoading() = false\n\n    override fun getClfd() = Triple(\n        \"com.wgllss.dynamic.impl.ILoadHomeImpl\", \"loading\", 1000\n    )\n\n    override fun getClmd() = Triple(\"\", \"\", 0)\n\n    override fun getCdlfd() = Triple(\"\", \"\", 0)\n\n    override fun getMapDLU() = linkedMapOf(\n        DynamicPluginConstant.COMMON to Pair(\"classes_common_lib_dex\", 1000),\n        DynamicPluginConstant.WEB_ASSETS to Pair(\"classes_business_web_res\", 1000),\n        DynamicPluginConstant.COMMON_BUSINESS to Pair(\"classes_business_lib_dex\", 1000),\n        DynamicPluginConstant.RUNTIME to Pair(\"classes_wgllss_dynamic_plugin_runtime\", 1000),\n        DynamicPluginConstant.MANAGER to Pair(\"classes_manager_dex\", 1000),\n        DynamicPluginConstant.RESOURCE_SKIN to Pair(\"classes_common_skin_res\", 1000),\n        DynamicPluginConstant.HOME to Pair(\"classes_home_dex\", 1000)\n    )\n\n//    override fun getOthers() = mutableMapOf<String, Int>()\n\n    override fun getOthers() = mutableMapOf(\n        \"classes_other_dex\" to 1000,\n        \"classes_other_res\" to 1000,\n        \"classes_other2_dex\" to 1000,\n        \"classes_other2_res\" to 1000\n    )\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/res/drawable/ic_launcher_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector\n    android:height=\"108dp\"\n    android:width=\"108dp\"\n    android:viewportHeight=\"108\"\n    android:viewportWidth=\"108\"\n    xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#3DDC84\"\n          android:pathData=\"M0,0h108v108h-108z\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M9,0L9,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,0L19,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M29,0L29,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M39,0L39,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M49,0L49,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M59,0L59,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M69,0L69,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M79,0L79,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M89,0L89,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M99,0L99,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,9L108,9\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,19L108,19\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,29L108,29\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,39L108,39\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,49L108,49\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,59L108,59\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,69L108,69\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,79L108,79\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,89L108,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,99L108,99\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,29L89,29\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,39L89,39\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,49L89,49\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,59L89,59\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,69L89,69\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,79L89,79\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M29,19L29,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M39,19L39,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M49,19L49,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M59,19L59,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M69,19L69,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M79,19L79,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/res/drawable-v24/ic_launcher_foreground.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"108\"\n    android:viewportHeight=\"108\">\n    <path android:pathData=\"M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z\">\n        <aapt:attr name=\"android:fillColor\">\n            <gradient\n                android:endX=\"85.84757\"\n                android:endY=\"92.4963\"\n                android:startX=\"42.9492\"\n                android:startY=\"49.59793\"\n                android:type=\"linear\">\n                <item\n                    android:color=\"#44000000\"\n                    android:offset=\"0.0\" />\n                <item\n                    android:color=\"#00000000\"\n                    android:offset=\"1.0\" />\n            </gradient>\n        </aapt:attr>\n    </path>\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:fillType=\"nonZero\"\n        android:pathData=\"M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z\"\n        android:strokeWidth=\"1\"\n        android:strokeColor=\"#00000000\" />\n</vector>"
  },
  {
    "path": "WX/WX-Code/WX-Host/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=\"@drawable/ic_launcher_background\"/>\n    <foreground android:drawable=\"@mipmap/ic_launcher_foreground\"/>\n</adaptive-icon>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/res/xml/backup_rules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n   Sample backup rules file; uncomment and customize as necessary.\n   See https://developer.android.com/guide/topics/data/autobackup\n   for details.\n   Note: This file is ignored for devices older that API 31\n   See https://developer.android.com/about/versions/12/backup-restore\n-->\n<full-backup-content>\n    <!--\n   <include domain=\"sharedpref\" path=\".\"/>\n   <exclude domain=\"sharedpref\" path=\"device.xml\"/>\n-->\n</full-backup-content>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/res/xml/data_extraction_rules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n   Sample data extraction rules file; uncomment and customize as necessary.\n   See https://developer.android.com/about/versions/12/backup-restore#xml-changes\n   for details.\n-->\n<data-extraction-rules>\n    <cloud-backup>\n        <!-- TODO: Use <include> and <exclude> to control what is backed up.\n        <include .../>\n        <exclude .../>\n        -->\n    </cloud-backup>\n    <!--\n    <device-transfer>\n        <include .../>\n        <exclude .../>\n    </device-transfer>\n    -->\n</data-extraction-rules>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app/src/main/res/xml/network_security_config.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<network-security-config xmlns:tools=\"http://schemas.android.com/tools\">\n    <!--    <domain-config tools:ignore=\"NetworkSecurityConfig\">-->\n    <base-config cleartextTrafficPermitted=\"true\" />\n    <!--    </domain-config>-->\n</network-security-config>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/.gitignore",
    "content": "/build\n/.gradle"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n    alias(libs.plugins.kotlin.kapt)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.sample.library.re\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n    kapt {\n        generateStubs = true\n    }\n}\n\n\ndependencies {\n    implementation project(':wgllss-dynamic-host-skin-resource-lib')\n    implementation libs.glide\n    implementation libs.swiperefreshlayout\n    implementation libs.startup.runtime\n    implementation libs.squareup.retrofit\n    implementation libs.com.squareup.okhttp3.logging.interceptor\n    implementation libs.okhttp3.okhttp\n    implementation libs.okio\n    implementation libs.converter.gson\n    implementation libs.converter.scalars\n    //解析html\n    implementation libs.org.jsoup.jsoup\n    //noinspection UseTomlInstead\n    implementation libs.palette.ktx\n    //room 数据库\n    implementation libs.room.runtime\n    kapt libs.room.compiler\n    //mmkv\n    implementation libs.mmkv\n    implementation libs.exoplayer.core\n    implementation libs.exoplayer.ui\n    implementation libs.google.extension.mediasession\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.library.re\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\" />\n    <uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n\n    <uses-permission android:name=\"android.permission.REORDER_TASKS\" />\n\n    <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.MANAGE_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK\" />\n\n\n    <uses-permission android:name=\"android.permission.FOREGROUND_SERVICE\" />\n    <uses-permission android:name=\"android.permission.REORDER_TASKS\" />\n    <uses-permission android:name=\"android.permission.GET_TASKS\" />\n    <uses-permission android:name=\"android.permission.GET_TOP\" />、\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n    <uses-permission android:name=\"android.permission.WAKE_LOCK\" />\n    <uses-permission android:name=\"android.permission.DISABLE_KEYGUARD\" />\n\n    <uses-permission android:name=\"android.permission.POST_NOTIFICATIONS\" />\n\n    <application>\n\n        <provider\n            android:name=\"androidx.startup.InitializationProvider\"\n            android:authorities=\"${applicationId}.androidx-startup\"\n            android:exported=\"false\">\n            <meta-data\n                android:name=\"com.wgllss.dynamic.initializer.InitHomeFirstInitialize\"\n                android:value=\"androidx.startup\" />\n        </provider>\n\n        <service\n            android:name=\"com.wgllss.sample.feature_system.services.MusicService\"\n            android:enabled=\"true\"\n            android:exported=\"true\"\n            android:foregroundServiceType=\"mediaPlayback\">\n            <intent-filter>\n                <action android:name=\"android.media.browse.MediaBrowserService\" />\n            </intent-filter>\n        </service>\n\n        <activity\n            android:name=\"com.wgllss.sample.features_ui.playing.activity.NotificationTargetActivity\"\n            android:exported=\"false\"\n            android:launchMode=\"singleTask\"\n            android:theme=\"@style/Transparent\" />\n\n        <receiver\n            android:name=\"androidx.media.session.MediaButtonReceiver\"\n            android:exported=\"true\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MEDIA_BUTTON\" />\n            </intent-filter>\n        </receiver>\n\n    </application>\n</manifest>\n\n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/src/main/java/com/wgllss/sample/feature_system/globle/Constants.kt",
    "content": "package com.wgllss.sample.feature_system.globle\n\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.bumptech.glide.request.RequestOptions\n\n\nobject Constants {\n    const val MEDIA_ID_ROOT = \"-1\"\n\n    const val MEDIA_TITLE_KEY = \"MEDIA_TITLE_KEY\"\n    const val MEDIA_ID_KEY = \"MEDIA_ID_KEY\"\n    const val MEDIA_AUTHOR_KEY = \"MEDIA_AUTHOR_KEY\"\n    const val MEDIA_ARTNETWORK_URL_KEY = \"MEDIA_ARTNETWORK_URL_KEY\"\n    const val MEDIA_URL_KEY = \"MEDIA_URL_KEY\"\n\n    const val NOTIFICATION_LARGE_ICON_SIZE = 144 // px\n\n    val defaultImgID = com.wgllss.host.skin.R.drawable.icon_loading\n\n    val glideOptions = RequestOptions().fallback(com.wgllss.host.skin.R.drawable.icon_loading).diskCacheStrategy(DiskCacheStrategy.DATA)\n\n    //单曲循环\n    const val MODE_PLAY_REPEAT_SONG = 2\n\n    //随机模式\n    const val MODE_PLAY_SHUFFLE_ALL = 1\n\n    //顺序播放重复队列\n    const val MODE_PLAY_REPEAT_QUEUE = 0\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library/src/test/java/com/wgllss/sample/ExampleUnitTest.kt",
    "content": "package com.wgllss.sample\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\nclass ExampleUnitTest {\n    @Test\n    fun addition_isCorrect() {\n        assertEquals(4, 2 + 2)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.core.re\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1008\n        versionName \"1.0.0.8\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n\n    buildFeatures {\n        dataBinding = true\n        buildConfig true\n    }\n\n    lintOptions {\n        abortOnError false\n    }\n}\n\ndependencies {\n//    implementation files('libs/com_wang_avi_library-2.1.3.aar')\n\n    implementation libs.appcompat\n    implementation libs.androidx.core.ktx\n    implementation libs.androidx.lifecycle.runtime.ktx\n    implementation libs.androidx.lifecycle.livedata.ktx\n    implementation libs.androidx.lifecycle.viewmodel.ktx\n    implementation libs.glide\n    implementation libs.converter.gson\n    //权限申请框架\n    implementation libs.xxpermissions\n    implementation libs.androidx.activity.ktx\n    implementation libs.androidx.fragment.ktx\n\n    //compose\n    implementation(libs.androidx.activity.compose)\n    implementation(platform(libs.androidx.compose.bom))\n    implementation(libs.androidx.ui)\n    implementation(libs.androidx.ui.graphics)\n    implementation(libs.androidx.ui.tooling.preview)\n    implementation(libs.androidx.material3)\n    implementation libs.androidx.constraintlayout.compose\n    implementation libs.androidx.runtime.livedata\n    implementation libs.coil.compose\n    implementation libs.androidx.navigation.compose\n    implementation libs.androidx.navigation.runtime.ktx\n    implementation libs.androidx.compose.material3.adaptive.navigation\n    implementation libs.androidx.compose.material3.adaptive\n    implementation libs.androidx.compose.material3.adaptive.layout\n    implementation libs.androidx.compose.material3.navigationSuite\n    implementation libs.androidx.compose.material3.windowSizeClass\n\n    implementation libs.collapsing.toolbar.scaffold\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.core.re\"></manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/dialog/CommonLoadingView.kt",
    "content": "package com.wgllss.core.dialog\n\nimport android.content.Context\nimport android.view.Gravity\nimport android.view.View\nimport android.widget.TextView\nimport androidx.appcompat.app.AppCompatDialog\nimport com.wgllss.core.re.R\n\nclass CommonLoadingView : AppCompatDialog {\n    private lateinit var txt_loading_text: TextView\n\n    constructor (context: Context) : super(context, R.style.Loading) {\n        setContentView(R.layout.common_loading)\n        window?.run {\n            txt_loading_text = findViewById(R.id.txt_loading_text)\n            attributes.gravity = Gravity.CENTER\n        }\n    }\n\n    fun show(showText: String) {\n        txt_loading_text?.apply {\n            if (showText.isNotEmpty()) {\n                text = showText\n                visibility = View.VISIBLE\n            } else {\n                visibility = View.GONE\n            }\n        }\n        if (!isShowing()) {\n            show()\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/ex/ContextEX.kt",
    "content": "package com.wgllss.core.ex\n\nimport android.app.Activity\nimport android.content.Context\nimport android.content.Intent\nimport com.wgllss.core.re.R\n\n\nfun Context.launchActivity(intent: Intent) {\n    startActivity(intent)\n    if (this is Activity)\n        overridePendingTransition(R.anim.anim_alpha_121, R.anim.anim_alpha_121)\n}\n\nfun Activity.finishActivity() {\n    finish()\n    overridePendingTransition(R.anim.anim_alpha_121, R.anim.anim_alpha_121)\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/ex/Flow.kt",
    "content": "package com.wgllss.core.ex\n\nimport androidx.lifecycle.MutableLiveData\nimport com.google.gson.JsonSyntaxException\nimport com.wgllss.core.re.R\nimport com.wgllss.core.units.AppGlobals\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collect\nimport kotlinx.coroutines.flow.flowOn\nimport retrofit2.HttpException\nimport java.io.InterruptedIOException\nimport java.net.ConnectException\nimport java.net.SocketException\nimport java.net.SocketTimeoutException\nimport java.net.UnknownHostException\nimport java.util.concurrent.TimeoutException\n\nfun Throwable?.parseErrorString(): String = when (this) {\n    is ConnectException, is SocketException -> {\n        if (message?.contains(\"Network is unreachable\") == true)\n            getString(R.string.Mobilenetuseless_msg)\n        if (message?.contains(\"Failed to connect to\") == true)\n            getString(R.string.failed_to_connect_to)\n        else\n            getString(R.string.ConnectException)\n    }\n    is HttpException -> {\n        if (message?.contains(\"HTTP 50\") == true) {\n            message!!.substring(0, 8)\n        } else {\n            getString(R.string.HttpException)\n        }\n    }\n    is InterruptedIOException -> {\n        if (message?.contains(\"timeout\") == true)\n            getString(R.string.SocketTimeoutException)\n        else\n            getString(R.string.ConnectException)\n    }\n    is UnknownHostException -> getString(R.string.UnknownHostException)\n    is JsonSyntaxException -> getString(R.string.JsonSyntaxException)\n    is SocketTimeoutException, is TimeoutException -> getString(R.string.SocketTimeoutException)\n    is IllegalArgumentException -> {\n        if (message?.contains(\"baseUrl must end in \") == true)\n            if (AppGlobals.sApplication.isNetWorkActive()) getString(R.string.HostBaseUrlError)\n            else getString(R.string.Mobilenetuseless_msg)\n        else message ?: getString(R.string.ElseNetException)\n    }\n    else -> getString(R.string.ElseNetException)\n}\n\nfun <T> Flow<T>.flowOnIOAndCatch(errorMsgLiveData: MutableLiveData<String>? = null): Flow<T> =\n    flowOn(Dispatchers.IO)\n        .catch {\n            it.printStackTrace()\n            errorMsgLiveData?.value = it.parseErrorString();\n        }\n\nsuspend fun <T> Flow<T>.flowOnIOAndCatchAAndCollect() {\n    flowOnIOAndCatch().collect()//这里，开始结束全放在异步里面处理\n}\n\nfun getString(resID: Int) = AppGlobals.sApplication.getString(resID)\n\n//fun <T1, T2, T3, R> Flow<T1>.zip(flow2: Flow<T2>, flow3: Flow<T3>, transform: suspend (T1, T2, T3) -> R): Flow<R> = channelFlow {\n//\n//    val first: ReceiveChannel<T1> = produce {\n//        this@zip.collect {\n//            channel.send(it)\n//        }\n//    }\n//\n//    val second: ReceiveChannel<T2> = produce {\n//        flow2.collect {\n//            channel.send(it)\n//        }\n//    }\n//\n//    val third: ReceiveChannel<T3> = produce {\n//        flow3.collect {\n//            channel.send(it)\n//        }\n//    }\n//\n//    (second as SendChannel<*>).invokeOnClose {\n//        if (!first.isClosedForReceive) first.cancel(CancellationException())\n//        if (!third.isClosedForReceive) third.cancel(CancellationException())\n//    }\n//\n//    (third as SendChannel<*>).invokeOnClose {\n//        if (!first.isClosedForReceive) first.cancel(CancellationException())\n//        if (!second.isClosedForReceive) second.cancel(CancellationException())\n//    }\n//\n//    val otherIterator = second.iterator()\n//    val anotherIterator = third.iterator()\n//\n//    try {\n//        first.consumeEach { value ->\n//            if (!otherIterator.hasNext() || !anotherIterator.hasNext()) {\n//                return@consumeEach\n//            }\n//            send(transform(value, otherIterator.next(), anotherIterator.next()))\n//        }\n//    } catch (e: CancellationException) {\n//        e.printStackTrace()\n//        android.util.Log.e(\"TAG\", \"${e.message}\")\n//        // complete\n//    } finally {\n//        if (!second.isClosedForReceive) second.cancel(CancellationException())\n//        if (!third.isClosedForReceive) third.cancel(CancellationException())\n//    }\n//}\n\n\n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/ex/NetWorkHelp.kt",
    "content": "package com.wgllss.core.ex\nimport android.app.Application\nimport android.content.Context\nimport android.net.ConnectivityManager\nimport android.net.NetworkCapabilities\nimport android.os.Build\n\nfun Application.isNetWorkActive(): Boolean {\n    val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager\n    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {\n        val network = connectivityManager.activeNetwork ?: return false\n        val activeNetwork =\n            connectivityManager.getNetworkCapabilities(network) ?: return false\n        return when {\n            activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true\n            activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true\n            activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true\n            activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH) -> true\n            else -> false\n        }\n    } else {\n        @Suppress(\"DEPRECATION\") val networkInfo =\n            connectivityManager.activeNetworkInfo ?: return false\n        @Suppress(\"DEPRECATION\")\n        return networkInfo.isConnected\n    }\n    return true\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/permissions/PermissionInterceptor.kt",
    "content": "package com.wgllss.core.permissions\n\nimport android.app.Activity\nimport android.app.AlertDialog\nimport android.content.DialogInterface\nimport android.os.Build\nimport com.hjq.permissions.*\nimport com.wgllss.core.re.R\nimport com.wgllss.core.widget.CommonToast\n\nopen class PermissionInterceptor : IPermissionInterceptor {\n\n    override fun grantedPermissions(activity: Activity?, allPermissions: List<String?>?, grantedPermissions: List<String?>?, all: Boolean, callback: OnPermissionCallback?) {\n        if (callback == null) {\n            return\n        }\n        callback.onGranted(grantedPermissions, all)\n    }\n\n    override fun deniedPermissions(activity: Activity, allPermissions: List<String>, deniedPermissions: List<String>, never: Boolean, callback: OnPermissionCallback?) {\n        callback?.onDenied(deniedPermissions, never)\n        if (never) {\n            if (deniedPermissions.size == 1 && Permission.ACCESS_MEDIA_LOCATION == deniedPermissions[0]) {\n                CommonToast.show(R.string.common_permission_media_location_hint_fail)\n                return\n            }\n            showPermissionSettingDialog(activity, allPermissions, deniedPermissions, callback)\n            return\n        }\n        if (deniedPermissions.size == 1) {\n            val deniedPermission = deniedPermissions[0]\n            if (Permission.ACCESS_BACKGROUND_LOCATION == deniedPermission) {\n                CommonToast.show(R.string.common_permission_background_location_fail_hint)\n                return\n            }\n            if (Permission.BODY_SENSORS_BACKGROUND == deniedPermission) {\n                CommonToast.show(R.string.common_permission_background_sensors_fail_hint)\n                return\n            }\n        }\n        val message: String\n        val permissionNames: List<String> = PermissionNameConvert.permissionsToNames(activity, deniedPermissions)\n        message = if (!permissionNames.isEmpty()) {\n            activity.getString(R.string.common_permission_fail_assign_hint, PermissionNameConvert.listToString(permissionNames))\n        } else {\n            activity.getString(R.string.common_permission_fail_hint)\n        }\n        CommonToast.show(message)\n    }\n\n    /**\n     * 显示授权对话框\n     */\n    private fun showPermissionSettingDialog(\n        activity: Activity?, allPermissions: List<String>,\n        deniedPermissions: List<String>, callback: OnPermissionCallback?\n    ) {\n        if (activity == null || activity.isFinishing ||\n            Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && activity.isDestroyed\n        ) {\n            return\n        }\n        val message: String\n        val permissionNames: List<String> = PermissionNameConvert.permissionsToNames(activity, deniedPermissions)\n        message = if (!permissionNames.isEmpty()) {\n            activity.getString(R.string.common_permission_manual_assign_fail_hint, PermissionNameConvert.listToString(permissionNames))\n        } else {\n            activity.getString(R.string.common_permission_manual_fail_hint)\n        }\n\n        // 这里的 Dialog 只是示例，没有用 DialogFragment 来处理 Dialog 生命周期\n        AlertDialog.Builder(activity)\n            .setTitle(R.string.common_permission_alert)\n            .setMessage(message)\n            .setPositiveButton(R.string.common_permission_goto_setting_page, DialogInterface.OnClickListener { dialog, which ->\n                dialog.dismiss()\n                XXPermissions.startPermissionActivity(activity,\n                    deniedPermissions, object : OnPermissionPageCallback {\n                        override fun onGranted() {\n                            if (callback == null) {\n                                return\n                            }\n                            callback.onGranted(allPermissions, true)\n                        }\n\n                        override fun onDenied() {\n                            showPermissionSettingDialog(\n                                activity, allPermissions,\n                                XXPermissions.getDenied(activity, allPermissions), callback\n                            )\n                        }\n                    })\n            })\n            .show()\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/permissions/PermissionNameConvert.kt",
    "content": "package com.wgllss.core.permissions\n\nimport android.content.Context\nimport android.os.Build\nimport com.hjq.permissions.Permission\nimport com.wgllss.core.re.R\n\nobject PermissionNameConvert {\n    /**\n     * 获取权限名称\n     */\n    fun getPermissionString(context: Context?, permissions: List<String>): String {\n        return listToString(permissionsToNames(context, permissions))\n    }\n\n    /**\n     * String 列表拼接成一个字符串\n     */\n    fun listToString(hints: List<String>): String {\n        if (hints == null || hints.isEmpty()) {\n            return \"\"\n        }\n        val builder = StringBuilder()\n        for (text in hints) {\n            if (builder.toString().isEmpty()) {\n                builder.append(text)\n            } else {\n                builder.append(\"、\")\n                    .append(text)\n            }\n        }\n        return builder.toString()\n    }\n\n    /**\n     * 将权限列表转换成对应名称列表\n     */\n    fun permissionsToNames(context: Context?, permissions: List<String>): List<String> {\n        val permissionNames: MutableList<String> = ArrayList()\n        if (context == null) {\n            return permissionNames\n        }\n        if (permissions == null) {\n            return permissionNames\n        }\n        for (permission in permissions) {\n            when (permission) {\n                Permission.READ_EXTERNAL_STORAGE, Permission.WRITE_EXTERNAL_STORAGE -> {\n                    val hint = context.getString(R.string.common_permission_storage)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.READ_MEDIA_IMAGES, Permission.READ_MEDIA_VIDEO -> {\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n                        val hint = context.getString(R.string.common_permission_image_and_video)\n                        if (!permissionNames.contains(hint)) {\n                            permissionNames.add(hint)\n                        }\n                    }\n                }\n                Permission.READ_MEDIA_AUDIO -> {\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n                        val hint = context.getString(R.string.common_permission_audio)\n                        if (!permissionNames.contains(hint)) {\n                            permissionNames.add(hint)\n                        }\n                    }\n                }\n                Permission.CAMERA -> {\n                    val hint = context.getString(R.string.common_permission_camera)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.RECORD_AUDIO -> {\n                    val hint = context.getString(R.string.common_permission_microphone)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.ACCESS_FINE_LOCATION, Permission.ACCESS_COARSE_LOCATION, Permission.ACCESS_BACKGROUND_LOCATION -> {\n                    var hint: String = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q &&\n                        !permissions.contains(Permission.ACCESS_FINE_LOCATION) &&\n                        !permissions.contains(Permission.ACCESS_COARSE_LOCATION)\n                    ) {\n                        context.getString(R.string.common_permission_location_background)\n                    } else {\n                        context.getString(R.string.common_permission_location)\n                    }\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.BODY_SENSORS, Permission.BODY_SENSORS_BACKGROUND -> {\n                    var hint: String\n                    hint = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU &&\n                        !permissions.contains(Permission.BODY_SENSORS)\n                    ) {\n                        context.getString(R.string.common_permission_sensors_background)\n                    } else {\n                        context.getString(R.string.common_permission_sensors)\n                    }\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.BLUETOOTH_SCAN, Permission.BLUETOOTH_CONNECT, Permission.BLUETOOTH_ADVERTISE -> {\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                        val hint = context.getString(R.string.common_permission_wireless_devices)\n                        if (!permissionNames.contains(hint)) {\n                            permissionNames.add(hint)\n                        }\n                    }\n                }\n                Permission.NEARBY_WIFI_DEVICES -> {\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n                        val hint = context.getString(R.string.common_permission_wireless_devices)\n                        if (!permissionNames.contains(hint)) {\n                            permissionNames.add(hint)\n                        }\n                    }\n                }\n                Permission.READ_PHONE_STATE, Permission.CALL_PHONE, Permission.ADD_VOICEMAIL, Permission.USE_SIP, Permission.READ_PHONE_NUMBERS, Permission.ANSWER_PHONE_CALLS -> {\n                    val hint = context.getString(R.string.common_permission_phone)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.GET_ACCOUNTS, Permission.READ_CONTACTS, Permission.WRITE_CONTACTS -> {\n                    val hint = context.getString(R.string.common_permission_contacts)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.READ_CALENDAR, Permission.WRITE_CALENDAR -> {\n                    val hint = context.getString(R.string.common_permission_calendar)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.READ_CALL_LOG, Permission.WRITE_CALL_LOG, Permission.PROCESS_OUTGOING_CALLS -> {\n                    val hint: String = context.getString(if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) R.string.common_permission_call_log else R.string.common_permission_phone)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.ACTIVITY_RECOGNITION -> {\n                    val hint: String = context.getString(if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) R.string.common_permission_activity_recognition_30 else R.string.common_permission_activity_recognition_29)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.ACCESS_MEDIA_LOCATION -> {\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {\n                        val hint = context.getString(R.string.common_permission_media_location)\n                        if (!permissionNames.contains(hint)) {\n                            permissionNames.add(hint)\n                        }\n                    }\n                }\n                Permission.SEND_SMS, Permission.RECEIVE_SMS, Permission.READ_SMS, Permission.RECEIVE_WAP_PUSH, Permission.RECEIVE_MMS -> {\n                    val hint = context.getString(R.string.common_permission_sms)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.MANAGE_EXTERNAL_STORAGE -> {\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {\n                        val hint = context.getString(R.string.common_permission_manage_storage)\n                        if (!permissionNames.contains(hint)) {\n                            permissionNames.add(hint)\n                        }\n                    }\n                }\n                Permission.REQUEST_INSTALL_PACKAGES -> {\n                    val hint = context.getString(R.string.common_permission_install)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.SYSTEM_ALERT_WINDOW -> {\n                    val hint = context.getString(R.string.common_permission_window)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.WRITE_SETTINGS -> {\n                    val hint = context.getString(R.string.common_permission_setting)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.NOTIFICATION_SERVICE -> {\n                    val hint = context.getString(R.string.common_permission_notification)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.POST_NOTIFICATIONS -> {\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n                        val hint = context.getString(R.string.common_permission_post_notifications)\n                        if (!permissionNames.contains(hint)) {\n                            permissionNames.add(hint)\n                        }\n                    }\n                }\n                Permission.BIND_NOTIFICATION_LISTENER_SERVICE -> {\n                    val hint = context.getString(R.string.common_permission_notification_listener)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.PACKAGE_USAGE_STATS -> {\n                    val hint = context.getString(R.string.common_permission_task)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.SCHEDULE_EXACT_ALARM -> {\n                    val hint = context.getString(R.string.common_permission_alarm)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.ACCESS_NOTIFICATION_POLICY -> {\n                    val hint = context.getString(R.string.common_permission_not_disturb)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS -> {\n                    val hint = context.getString(R.string.common_permission_ignore_battery)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.BIND_VPN_SERVICE -> {\n                    val hint = context.getString(R.string.common_permission_vpn)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.PICTURE_IN_PICTURE -> {\n                    val hint = context.getString(R.string.common_permission_picture_in_picture)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                else -> {}\n            }\n        }\n        return permissionNames\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/units/AppGlobals.kt",
    "content": "package com.wgllss.core.units\n\nimport android.app.Application\n\nobject AppGlobals {\n    lateinit var sApplication: Application\n\n    fun getApplication(): Application {\n        if (!this::sApplication.isInitialized) {\n            //去反射得到\n            try {\n                val aClass = Class.forName(\"android.app.ActivityThread\")\n                //获取里面的currentApplication\n                val currentApplication = aClass.getDeclaredMethod(\"currentApplication\")\n                sApplication = currentApplication.invoke(null, null) as Application\n            } catch (e: Exception) {\n                e.printStackTrace()\n            }\n        }\n        return sApplication\n    }\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/units/DeviceIdUtil.kt",
    "content": "package com.wgllss.core.units\n\nimport android.content.Context\nimport android.os.Build\nimport android.provider.Settings\nimport java.security.MessageDigest\nimport java.util.*\n\nobject DeviceIdUtil {\n\n    private const val isDeviceSelfSerial = false\n\n    //自己设备测试序号\n    private val setsD = setOf(\"B05F9543937A5BA61901FC14F2540C62DA3E86C2\", \"2F6039397BA7EEC402E7036339963B23810CCBFD\")\n\n    //其他设备测试序号 命名可自定义\n    private const val ELSED = \"dxde_m_p\"\n\n    fun getDeviceId(): String {\n        if (isDeviceSelfSerial) {\n            //todo 模拟序列号\n            return \"2F6039397BA7EEC402E7036339963B23810CCBFD\"\n        } else {\n            val context = AppGlobals.sApplication\n            val sbDeviceId = StringBuilder()\n            val androidID = getAndroidId(context)\n            val id = getDeviceUUID(context).replace(\"-\", \"\")\n            if (androidID != null && androidID.isNotEmpty()) {\n                sbDeviceId.append(androidID)\n                sbDeviceId.append(\"|\")\n            }\n            if (id != null && id.isNotEmpty()) {\n                sbDeviceId.append(id)\n            }\n            if (sbDeviceId.toString().isNotEmpty()) {\n                try {\n                    val hash = getHashByString(sbDeviceId.toString())\n                    val sha1 = bytesToHex(hash!!)\n                    if (sha1 != null && sha1.isNotEmpty()) {\n                        LogTimer.LogE(this, \"sha1:$sha1\")\n                        return if (setsD.contains(sha1)) sha1 else ELSED\n                    }\n                } catch (ex: Exception) {\n                    ex.printStackTrace()\n                }\n            }\n            val s = sbDeviceId.toString()\n            return if (setsD.contains(s)) s else ELSED\n        }\n    }\n\n    private fun bytesToHex(data: ByteArray): String? {\n        val sb = StringBuilder()\n        var stmp: String\n        for (n in data.indices) {\n            stmp = Integer.toHexString(data[n].toInt() and 0xFF)\n            if (stmp.length == 1) sb.append(\"0\")\n            sb.append(stmp)\n        }\n        return sb.toString().uppercase(Locale.CHINA)\n    }\n\n    private fun getHashByString(data: String): ByteArray? {\n        return try {\n            val messageDigest: MessageDigest = MessageDigest.getInstance(\"SHA1\")\n            messageDigest.reset()\n            messageDigest.update(data.toByteArray(charset(\"UTF-8\")))\n            messageDigest.digest()\n        } catch (e: java.lang.Exception) {\n            \" \".toByteArray()\n        }\n    }\n\n    private fun getDeviceUUID(context: Context): String {\n        val sb = StringBuilder().apply {\n            append(\"100001\")\n            append(Build.BOARD)\n            append(Build.BRAND)\n            append(Build.DEVICE)\n            append(Build.HARDWARE)\n            append(Build.ID)\n            append(Build.MODEL)\n            append(Build.PRODUCT)\n        }\n        val long = sb.toString().hashCode().toLong()\n        return UUID(long, long).toString()\n    }\n\n    private fun getAndroidId(context: Context): String {\n        try {\n            return Settings.Secure.getString(\n                context.contentResolver,\n                Settings.Secure.ANDROID_ID\n            )\n        } catch (ex: java.lang.Exception) {\n            ex.printStackTrace()\n        }\n        return \" \"\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/units/LogTimer.kt",
    "content": "package com.wgllss.core.units\n\nimport android.util.Log\nimport com.wgllss.core.re.BuildConfig\n\n\nobject LogTimer {\n    var time: Long = System.currentTimeMillis()\n\n    fun initTime(any: Any) {\n        time = System.currentTimeMillis()\n    }\n\n    fun LogE(any: Any, tagName: String) {\n        val cur = System.currentTimeMillis()\n        val dis = cur - time\n        if (BuildConfig.DEBUG)\n            Log.e(\"${any.javaClass.simpleName}\", \" $tagName 耗时:${dis} ms\")\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/java/com/wgllss/core/widget/CommonToast.kt",
    "content": "package com.wgllss.core.widget\n\nimport android.content.Context\nimport android.graphics.Color\nimport android.graphics.drawable.GradientDrawable\nimport android.os.Handler\nimport android.os.Looper\nimport android.util.TypedValue\nimport android.view.Gravity\nimport android.widget.LinearLayout\nimport android.widget.TextView\nimport android.widget.Toast\nimport com.wgllss.core.units.AppGlobals\nimport java.util.*\n\nclass CommonToast {\n    companion object {\n        private val toastBackgroundId = -1\n        private val toastTextColorId = -1\n        private var lastDate: Date? = null\n\n        // 提示时间间隔3秒钟\n        private val toastPeriod = 3\n        private var mToast: Toast? = null\n        private var toastText: TextView? = null\n        private val mHandler: Handler = Handler(Looper.getMainLooper())\n        private val r = Runnable {\n            if (mToast != null) {\n                mToast!!.cancel()\n                mToast = null // toast隐藏后，将其置为null\n            }\n            if (toastText != null) {\n                toastText = null\n            }\n        }\n\n        /**\n         * 显示toast\n         *\n         * @param strContent      显示内容\n         * @param widthRate       占屏幕宽度比例 0为 WRAP_CONTENT\n         * @param heightRate      占屏幕高度比例 0为 WRAP_CONTENT\n         * @param gravity         占屏幕位置\n         * @param delayMillis     延迟多少毫秒隐藏tost\n         * @param isInToastPeriod isInToastPeriod 在规定的时间间隔里内是否显示\n         * @author :Atar\n         * @createTime:2016-3-18上午10:19:13\n         * @version:1.0.0\n         * @modifyTime:\n         * @modifyAuthor:\n         * @description:\n         */\n        @JvmStatic\n        fun show(context: Context, strContent: String?, widthRate: Int, heightRate: Int, gravity: Int, offy: Int, delayMillis: Long, isInToastPeriod: Boolean) {\n            show(context, strContent, widthRate, heightRate, gravity, offy, delayMillis, isInToastPeriod, 1, 0)\n        }\n\n        /**\n         * 显示toast\n         *\n         * @param strContent      显示内容\n         * @param widthRate       占屏幕宽度比例 0为 WRAP_CONTENT\n         * @param heightRate      占屏幕高度比例 0为 WRAP_CONTENT\n         * @param gravity         占屏幕位置\n         * @param delayMillis     延迟多少毫秒隐藏tost\n         * @param isInToastPeriod isInToastPeriod 在规定的时间间隔里内是否显示\n         * @param orientation     屏幕方向\n         * @param rotation        旋转角度\n         * @author :Atar\n         * @createTime:2016-3-18上午10:19:13\n         * @version:1.0.0\n         * @modifyTime:\n         * @modifyAuthor:\n         * @description:\n         */\n        @JvmStatic\n        fun show(context: Context, strContent: String?, widthRate: Int, heightRate: Int, gravity: Int, offy: Int, delayMillis: Long, isInToastPeriod: Boolean, orientation: Int, rotation: Int) {\n            try {\n                if (isInToastPeriod) {\n                    return\n                }\n                mHandler!!.removeCallbacks(r)\n                if (mToast == null || toastText == null) { // 只有mToast==null时才重新创建，否则只需更改提示文字\n                    mToast = Toast(context)\n                    val toastLayout = LinearLayout(context)\n                    toastLayout.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)\n                    toastLayout.orientation = LinearLayout.VERTICAL\n                    toastLayout.gravity = Gravity.CENTER\n                    toastText = TextView(context)\n                    val size = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10f, context.resources.displayMetrics).toInt()\n                    var width = 0\n                    var height = 0\n                    if (orientation == 1) { // 1竖屏\n                        val widthPixels = context.resources.displayMetrics.widthPixels\n                        width = if (widthRate == 0) {\n                            LinearLayout.LayoutParams.WRAP_CONTENT\n                        } else {\n                            widthPixels / widthRate\n                        }\n                        height = if (heightRate == 0) {\n                            LinearLayout.LayoutParams.WRAP_CONTENT\n                        } else {\n                            widthPixels / heightRate\n                        }\n                        toastText!!.layoutParams = LinearLayout.LayoutParams(width, height)\n                        toastLayout.rotation = rotation.toFloat()\n                    } else {\n                        val widthPixels = context.resources.displayMetrics.heightPixels\n                        width = if (widthRate == 0) {\n                            LinearLayout.LayoutParams.WRAP_CONTENT\n                        } else {\n                            widthPixels / widthRate\n                        }\n                        height = if (heightRate == 0) {\n                            LinearLayout.LayoutParams.WRAP_CONTENT\n                        } else {\n                            widthPixels / heightRate\n                        }\n                        toastText!!.layoutParams = LinearLayout.LayoutParams(width, height)\n                        toastLayout.rotation = rotation.toFloat()\n                    }\n                    toastText!!.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16f)\n                    toastText!!.setPadding(size, size, size, size)\n                    toastText!!.gravity = Gravity.CENTER\n                    if (toastBackgroundId != -1) {\n                        toastLayout.setBackgroundDrawable(context.resources.getDrawable(toastBackgroundId))\n                    } else {\n                        setText(toastText!!)\n                    }\n                    if (toastTextColorId != -1) {\n                        toastText!!.setTextColor(context.resources.getColor(toastTextColorId))\n                    } else {\n                        setText(toastText!!)\n                    }\n                    toastLayout.addView(toastText)\n                    mToast!!.view = toastLayout\n                    mToast!!.setGravity(gravity, 0, offy)\n                    mToast!!.duration = Toast.LENGTH_SHORT\n                }\n                if (toastText != null) {\n                    toastText!!.text = strContent\n                }\n                mHandler.postDelayed(r, delayMillis) // 延迟delayMillis耗秒隐藏toast\n                try {\n                    mToast!!.show()\n                } catch (e: Exception) {\n                    e.printStackTrace()\n                }\n            } catch (e: Exception) {\n            }\n        }\n\n        @JvmStatic\n        fun show(resID: Int) {\n            show(AppGlobals.sApplication, AppGlobals.sApplication.resources.getString(resID), 0, 0, Gravity.CENTER, 0, 3000, false)\n        }\n\n        /**\n         * 显示Toast\n         *\n         * @param strContent:提示肉容\n         * @author :Atar\n         * @createTime:2014-6-25上午10:23:59\n         * @version:1.0.0\n         * @modifyTime:\n         * @modifyAuthor:\n         * @description:\n         */\n        @JvmStatic\n        fun show(strContent: String?) {\n            show(AppGlobals.sApplication, strContent, 0, 0, Gravity.CENTER, 0, 3000, false)\n        }\n\n        @JvmStatic\n        fun show(strContent: String?, dealyMills: Int) {\n            show(AppGlobals.sApplication, strContent, 0, 0, Gravity.CENTER, 300, dealyMills.toLong(), false)\n        }\n\n        @JvmStatic\n        fun show(strContent: String?, gravity: Int, offy: Int) {\n            show(AppGlobals.sApplication, strContent, 0, 0, Gravity.CENTER, offy, 3000, false)\n        }\n\n        /**\n         * 显示toast\n         *\n         * @param strContent  显示内容\n         * @param widthRate   占屏幕宽度比例\n         * @param heightRate  占屏幕高度比例\n         * @param gravity     占屏幕位置\n         * @param delayMillis 延迟多少毫秒隐藏tost\n         * @author :Atar\n         * @createTime:2016-3-18上午10:19:13\n         * @version:1.0.0\n         * @modifyTime:\n         * @modifyAuthor:\n         * @description:\n         */\n        @JvmStatic\n        fun show(strContent: String?, widthRate: Int, heightRate: Int, gravity: Int, delayMillis: Long) {\n            show(AppGlobals.sApplication, strContent, widthRate, heightRate, gravity, 300, delayMillis, false)\n        }\n\n        /**\n         * 在时间间隔内不作提示\n         *\n         * @param strContent\n         * @author :Atar\n         * @createTime:2015-9-23下午3:33:03\n         * @version:1.0.0\n         * @modifyTime:\n         * @modifyAuthor:\n         * @description:\n         */\n        @JvmStatic\n        fun showWhihPeriod(strContent: String?) {\n            show(AppGlobals.sApplication, strContent, 0, 0, Gravity.CENTER, 0, 3000, isInToastPeriod())\n        }\n\n        /**\n         * 在时间间隔内不作提示\n         *\n         * @param strContent\n         * @author :Atar\n         * @createTime:2015-9-23下午3:33:03\n         * @version:1.0.0\n         * @modifyTime:\n         * @modifyAuthor:\n         * @description:\n         */\n        fun showWhihPeriod(strContent: String?, delayMills: Int) {\n            show(AppGlobals.sApplication, strContent, 0, 0, Gravity.CENTER, 0, delayMills.toLong(), isInToastPeriod())\n        }\n\n        /**\n         * @param mTextView\n         * @author :Atar\n         * @createTime:2015-9-23下午3:33:13\n         * @version:1.0.0\n         * @modifyTime:\n         * @modifyAuthor:\n         * @description:\n         */\n        private fun setText(mTextView: TextView) {\n            mTextView.setTextColor(Color.WHITE)\n            val roundRadius = 8\n            val fillColor = Color.parseColor(\"#90000000\")\n            val gd = GradientDrawable()\n            gd.setColor(fillColor)\n            gd.cornerRadius = roundRadius.toFloat()\n            mTextView.setBackgroundDrawable(gd)\n        }\n\n        /**\n         * 是否在提示时间间隔内\n         *\n         * @return\n         * @author :Atar\n         * @createTime:2014-11-12上午11:26:54\n         * @version:1.0.0\n         * @modifyTime:\n         * @modifyAuthor:\n         * @description:\n         */\n        fun isInToastPeriod(): Boolean {\n            val curDate = Date(System.currentTimeMillis()) // 获取当前时间\n            return if (curDate != null) {\n                var lastTime: Long = 0\n                lastTime = if (lastDate == null) {\n                    0\n                } else {\n                    lastDate!!.time\n                }\n                val timeLong = curDate.time - lastTime\n                if (timeLong < toastPeriod * 1000) {\n                    true\n                } else {\n                    lastDate = curDate\n                    false\n                }\n            } else {\n                true\n            }\n        }\n\n        fun dissMissToast() {\n            if (mToast != null) {\n                mToast!!.cancel()\n                mToast = null // toast隐藏后，将其置为null\n            }\n            if (toastText != null) {\n                toastText = null\n            }\n            mHandler?.removeCallbacksAndMessages(null)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/anim/anim_alpha_121.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n    <alpha\n        android:duration=\"0\"\n        android:fromAlpha=\"1.0\"\n        android:toAlpha=\"1.0\" />\n\n    <translate\n        android:duration=\"0\"\n        android:fromXDelta=\"0%p\"\n        android:toXDelta=\"0%p\" >\n    </translate>\n\n</set>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/drawable/button_bg_transparent_helf.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <solid android:color=\"#80000000\"></solid>\n\n    <corners\n        android:bottomLeftRadius=\"4.5dp\"\n        android:bottomRightRadius=\"4.5dp\"\n        android:topLeftRadius=\"4.5dp\"\n        android:topRightRadius=\"4.5dp\" />\n</shape>\n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/drawable/progressbar_shape.xml",
    "content": "<?xml version =\"1.0\" encoding =\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:drawable=\"@drawable/ic_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\" />\n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/layout/common_loading.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"#00000000\"\n    android:gravity=\"center\">\n\n    <LinearLayout\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"@drawable/button_bg_transparent_helf\"\n        android:gravity=\"center\"\n        android:orientation=\"vertical\"\n        android:padding=\"20dp\">\n        <ProgressBar\n            android:layout_width=\"40dp\"\n            android:layout_height=\"40dp\"\n            android:layout_gravity=\"center\"\n            android:indeterminateDrawable=\"@drawable/progressbar_shape\" />\n\n        <TextView\n            android:id=\"@+id/txt_loading_text\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center_horizontal\"\n            android:layout_marginTop=\"5dp\"\n            android:textColor=\"@android:color/white\"\n            android:textSize=\"12dp\" />\n\n<!--        <com.wang.avi.AVLoadingIndicatorView-->\n        <!--            android:id=\"@+id/avi\"-->\n        <!--            android:layout_width=\"wrap_content\"-->\n        <!--            android:layout_height=\"wrap_content\"-->\n        <!--            android:visibility=\"visible\"-->\n        <!--            app:indicatorName=\"LineSpinFadeLoaderIndicator\" />-->\n\n        <!--        <TextView-->\n        <!--            android:id=\"@+id/txt_loading_text\"-->\n        <!--            android:layout_width=\"wrap_content\"-->\n        <!--            android:layout_height=\"wrap_content\"-->\n        <!--            android:textColor=\"@color/white\"-->\n        <!--            android:layout_marginTop=\"20dp\"-->\n        <!--            android:visibility=\"gone\"-->\n        <!--            android:textSize=\"17dp\"/>-->\n    </LinearLayout>\n\n</LinearLayout>\n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!--    <string name=\"app_name\">WgllssCode</string>-->\n\n    <!-- 异常错误提示  by Atar start -->\n    <string name=\"ElseNetException\">未知错误异常</string>\n    <string name=\"SocketTimeoutException\">网络超时</string>\n    <string name=\"TimeoutException\">网络超时</string>\n    <string name=\"SocketException\">网络错误</string>\n    <string name=\"ConnectException\">网络错误</string>\n    <string name=\"HttpException\">服务器异常</string>\n    <string name=\"UnknownHostException\">无网络连接</string>\n    <string name=\"HostBaseUrlError\">请求地址错误</string>\n    <string name=\"Mobilenetuseless_msg\">当前网络不可用</string>\n    <string name=\"failed_to_connect_to\">无法连接到服务器</string>\n    <string name=\"JsonSyntaxException\">数据错误,json解析错误</string>\n    <!-- 异常错误提示  by end  -->\n\n    <!-- 权限相关提示  by Atar start -->\n\n    <string name=\"common_permission_hint\">授权提示</string>\n    <string name=\"common_permission_message\">使用此功能需要先授予%s</string>\n    <string name=\"common_permission_granted\">授予</string>\n    <string name=\"common_permission_denied\">取消</string>\n\n    <string name=\"common_permission_alert\">授权提醒</string>\n    <string name=\"common_permission_fail_hint\">授权失败，请正确授予权限</string>\n    <string name=\"common_permission_fail_assign_hint\">授权失败，请正确授予%s</string>\n    <string name=\"common_permission_manual_fail_hint\">获取权限失败，请手动授予权限</string>\n    <string name=\"common_permission_manual_assign_fail_hint\">获取权限失败，请手动授予%s</string>\n    <string name=\"common_permission_background_location_fail_hint\">获取后台定位权限失败，\\n请您选择《始终允许》</string>\n    <string name=\"common_permission_background_sensors_fail_hint\">获取后台传感器权限失败，\\n请您选择《始终允许》</string>\n    <string name=\"common_permission_media_location_hint_fail\">获取媒体位置权限失败\\n请清除应用数据后重试</string>\n    <string name=\"common_permission_goto_setting_page\">前往授权</string>\n\n    <string name=\"common_permission_calendar\">日历权限</string>\n    <string name=\"common_permission_camera\">相机权限</string>\n    <string name=\"common_permission_contacts\">通讯录权限</string>\n    <string name=\"common_permission_location\">定位权限</string>\n    <string name=\"common_permission_location_background\">后台定位权限</string>\n    <string name=\"common_permission_wireless_devices\">附近的设备权限</string>\n    <string name=\"common_permission_microphone\">麦克风权限</string>\n    <string name=\"common_permission_phone\">电话权限</string>\n    <string name=\"common_permission_call_log\">通话记录权限</string>\n    <string name=\"common_permission_sensors\">身体传感器权限</string>\n    <string name=\"common_permission_sensors_background\">后台身体传感器权限</string>\n    <string name=\"common_permission_activity_recognition_29\">健身运动权限</string>\n    <string name=\"common_permission_activity_recognition_30\">身体活动权限</string>\n    <string name=\"common_permission_media_location\">读取媒体文件位置权限</string>\n    <string name=\"common_permission_sms\">短信权限</string>\n    <string name=\"common_permission_storage\">存储权限</string>\n    <string name=\"common_permission_post_notifications\">发送通知权限</string>\n    <string name=\"common_permission_image_and_video\">照片和视频权限</string>\n    <string name=\"common_permission_audio\">音乐和音频权限</string>\n\n    <string name=\"common_permission_manage_storage\">所有文件访问权限</string>\n    <string name=\"common_permission_install\">安装应用权限</string>\n    <string name=\"common_permission_window\">悬浮窗权限</string>\n    <string name=\"common_permission_setting\">修改系统设置权限</string>\n    <string name=\"common_permission_notification\">通知权限</string>\n    <string name=\"common_permission_notification_listener\">通知栏监听权限</string>\n    <string name=\"common_permission_task\">查看使用情况权限</string>\n    <string name=\"common_permission_alarm\">查看闹钟提醒权限</string>\n    <string name=\"common_permission_not_disturb\">勿扰权限</string>\n    <string name=\"common_permission_ignore_battery\">忽略电池优化权限</string>\n    <string name=\"common_permission_picture_in_picture\">画中画权限</string>\n    <string name=\"common_permission_vpn\">\\tVPN\\t权限</string>\n\n    <!-- 权限相关提示  by end -->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n\n    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">\n        <item name=\"android:windowFrame\">@null</item>\n        <item name=\"android:windowIsFloating\">true</item>\n        <item name=\"android:windowIsTranslucent\">true</item>\n        <item name=\"android:windowNoTitle\">true</item>\n        <!-- 设置背景色 透明-->\n        <item name=\"android:background\">@android:color/transparent</item>\n        <item name=\"android:windowBackground\">@android:color/transparent</item>\n        <!-- 设置是否显示背景 -->\n        <item name=\"android:backgroundDimEnabled\">true</item>\n        <!-- 设置背景透明度 -->\n        <item name=\"android:backgroundDimAmount\">0</item>\n        <!-- 设置点击空白不消失 -->\n        <item name=\"android:windowCloseOnTouchOutside\">false</item>\n    </style>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.host.library\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\ndependencies {\n    implementation project(path: ':wgllss-dynamic-host-skin-resource-lib')\n    implementation project(path: ':wgllss-common-re-library')\n    implementation project(path: ':wgllss-business-re-library')\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/consumer-rules.pro",
    "content": ""
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/src/androidTest/java/com/wgllss/host/library/ExampleInstrumentedTest.kt",
    "content": "package com.wgllss.host.library\n\nimport android.support.test.InstrumentationRegistry\nimport android.support.test.runner.AndroidJUnit4\n\nimport org.junit.Test\nimport org.junit.runner.RunWith\n\nimport org.junit.Assert.*\n\n/**\n * Instrumented test, which will execute on an Android device.\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\n@RunWith(AndroidJUnit4::class)\nclass ExampleInstrumentedTest {\n    @Test\n    fun useAppContext() {\n        // Context of the app under test.\n        val appContext = InstrumentationRegistry.getInstrumentation().targetContext\n        assertEquals(\"com.wgllss.host.library.test\", appContext.packageName)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.host.library\">\n\n    <application>\n\n        <activity\n            android:name=\"com.wgllss.dynamic.ui.HomeActivity\"\n            android:exported=\"true\"\n            android:theme=\"@style/LauncherTheme2\">\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\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginStandardActivity\"\n            android:launchMode=\"standard\"\n            android:theme=\"@style/LauncherTheme2\" />\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginStandardComposeActivity\"\n            android:launchMode=\"standard\"\n            android:theme=\"@style/LauncherTheme2\" />\n\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginSingleInstanceActivity\"\n            android:launchMode=\"singleInstance\"\n            android:theme=\"@style/LauncherTheme2\" />\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginSingleInstanceComposeActivity\"\n            android:launchMode=\"singleInstance\"\n            android:theme=\"@style/LauncherTheme2\" />\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginSingleTaskActivity\"\n            android:launchMode=\"singleTask\"\n            android:theme=\"@style/LauncherTheme2\" />\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginSingleTaskComposeActivity\"\n            android:launchMode=\"singleInstance\"\n            android:theme=\"@style/LauncherTheme2\" />\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginSingleTopActivity\"\n            android:launchMode=\"singleTop\"\n            android:theme=\"@style/LauncherTheme2\" />\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginSingleTopComposeActivity\"\n            android:launchMode=\"singleInstance\"\n            android:theme=\"@style/LauncherTheme2\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginStartStickyService\"\n            android:enabled=\"true\"\n            android:exported=\"true\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginStartNotStickyService\"\n            android:enabled=\"true\"\n            android:exported=\"true\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginStartRedeliverIntentService\"\n            android:enabled=\"true\"\n            android:exported=\"true\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginStartStickyCompatibilityService\"\n            android:enabled=\"true\"\n            android:exported=\"true\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginProcessStartStickyService\"\n            android:enabled=\"true\"\n            android:exported=\"true\"\n            android:process=\":processSticky\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginProcessStartNotStickyService\"\n            android:enabled=\"true\"\n            android:exported=\"true\"\n            android:process=\":processNotSticky\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginProcessStartRedeliverIntentService\"\n            android:enabled=\"true\"\n            android:exported=\"true\"\n            android:process=\":processRedeliver\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginProcessStartStickyCompatibilityService\"\n            android:enabled=\"true\"\n            android:exported=\"true\"\n            android:process=\":processStickyCompatibility\" />\n\n    </application>\n\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library/src/test/java/com/wgllss/host/library/ExampleUnitTest.kt",
    "content": "package com.wgllss.host.library\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\nclass ExampleUnitTest {\n    @Test\n    fun addition_isCorrect() {\n        assertEquals(4, 2 + 2)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.host.skin\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n    implementation libs.appcompat\n    implementation libs.google.material\n}"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.host.skin\" />\n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/splash_preview.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item android:drawable=\"@color/white\"></item>\n\n    <item>\n        <bitmap\n            android:gravity=\"center\"\n            android:src=\"@drawable/icon_loading\" />\n    </item>\n\n</layer-list>\n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/splash_preview_dark.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item android:drawable=\"@color/black\"></item>\n\n    <item>\n        <bitmap\n            android:gravity=\"center\"\n            android:src=\"@drawable/icon_loading\" />\n    </item>\n\n</layer-list>\n"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#FF3300</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#FF000000</color>\n\n    <color name=\"colorBackground\">#008e99</color>\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values/dimens.xml",
    "content": "<resources>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">WXDynamicPlugin</string>\n\n\n    <string name=\"duration_unknown\">--:--</string>\n    <string name=\"duration_format\">%d:%02d</string>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n    <style name=\"Base.Theme.WXDynamicPlugin\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">\n        <!-- Customize your light theme here. -->\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\n        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>\n        <item name=\"android:colorBackground\">@color/design_default_color_background</item>\n        <item name=\"android:textColorPrimary\">@color/black</item>\n        <item name=\"windowActionBar\">false</item>\n        <item name=\"windowNoTitle\">true</item>\n        <!--        <item name=\"android:colorBackground\">?colorSurface</item>-->\n        <!--        <item name=\"android:statusBarColor\">?colorSurface</item>-->\n        <!--        <item name=\"android:windowLightStatusBar\">true</item>-->\n    </style>\n\n    <style name=\"Theme.WXDynamicPlugin\" parent=\"Base.Theme.WXDynamicPlugin\">\n        <item name=\"android:background\">@android:color/transparent</item>\n        <item name=\"android:windowIsTranslucent\">true</item>\n        <item name=\"android:windowBackground\">@color/white</item>\n        <!--        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>-->\n    </style>\n\n    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">\n        <item name=\"android:windowFrame\">@null</item>\n        <item name=\"android:windowIsFloating\">true</item>\n        <item name=\"android:windowIsTranslucent\">true</item>\n        <item name=\"android:windowNoTitle\">true</item>\n        <!-- 设置背景色 透明-->\n        <item name=\"android:background\">@android:color/transparent</item>\n        <item name=\"android:windowBackground\">@android:color/transparent</item>\n        <!-- 设置是否显示背景 -->\n        <item name=\"android:backgroundDimEnabled\">true</item>\n        <!-- 设置背景透明度 -->\n        <item name=\"android:backgroundDimAmount\">0</item>\n        <!-- 设置点击空白不消失 -->\n        <item name=\"android:windowCloseOnTouchOutside\">false</item>\n    </style>\n\n    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">\n\n        <item name=\"android:windowNoTitle\">true</item>\n        <item name=\"android:windowFullscreen\">true</item>\n        <item name=\"android:windowBackground\">@color/white</item>\n    </style>\n\n    <style name=\"LauncherTheme2\" parent=\"Base.Theme.WXDynamicPlugin\">\n        <!--        该方式看不到启动页-->\n\n        <item name=\"android:windowNoTitle\">true</item>\n        <!--        <item name=\"android:windowFullscreen\">true</item>-->\n        <item name=\"android:windowBackground\">@drawable/splash_preview</item>\n\n    </style>\n\n    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <item name=\"android:background\">@android:color/transparent</item>\n        <item name=\"android:windowIsTranslucent\">true</item>\n        <item name=\"android:windowNoTitle\">true</item>\n        <item name=\"android:windowBackground\">@android:color/transparent</item>\n        <item name=\"android:windowFullscreen\">true</item>\n        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>\n    </style>\n\n\n    <style name=\"CircleStyle\">\n        <item name=\"cornerFamily\">rounded</item>\n        <item name=\"cornerSize\">50%</item>\n    </style>\n\n    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">\n        <item name=\"android:colorControlHighlight\">#FF4081</item>\n        <!--        <item name=\"paddingStart\">20dp</item>-->\n        <!--        <item name=\"android:paddingTop\">20dp</item>-->\n        <item name=\"android:radius\">20dp</item>\n    </style>\n\n    <style name=\"onTextOff\" parent=\"Theme.WXDynamicPlugin\">\n        <item name=\"android:textColor\">@color/white</item>\n        <item name=\"android:textSize\">16dp</item>\n    </style>\n\n    <style name=\"ssStyle\" parent=\"Theme.WXDynamicPlugin\">\n        <item name=\"colorControlActivated\">@color/colorPrimary</item>\n        <item name=\"colorSwitchThumbNormal\">#999999</item>\n        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>\n    </style>\n\n    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">\n        <!--        <item name=\"android:textStyle\">nomal</item>-->\n        <item name=\"android:textSize\">20dp</item>\n    </style>\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#FF3300</color>\n    <color name=\"colorOnPrimary\">#B0B0B0</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n    <style name=\"Base.Theme.WXDynamicPlugin\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">\n        <!-- Customize your light theme here. -->\n        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>\n        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>\n        <item name=\"android:colorBackground\">@color/colorBackground</item>\n        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>\n        <item name=\"windowActionBar\">false</item>\n        <item name=\"windowNoTitle\">true</item>\n        <item name=\"android:statusBarColor\">@color/black</item>\n        <!--        <item name=\"android:colorBackground\">?colorSurface</item>-->\n        <!--        <item name=\"android:statusBarColor\">?colorSurface</item>-->\n        <!--        <item name=\"android:windowLightStatusBar\">true</item>-->\n    </style>\n\n    <style name=\"Theme.WXDynamicPlugin\" parent=\"Base.Theme.WXDynamicPlugin\">\n        <item name=\"android:background\">@android:color/transparent</item>\n        <item name=\"android:windowIsTranslucent\">true</item>\n        <!--        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>-->\n    </style>\n\n    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">\n        <item name=\"android:windowFrame\">@null</item>\n        <item name=\"android:windowIsFloating\">true</item>\n        <item name=\"android:windowIsTranslucent\">true</item>\n        <item name=\"android:windowNoTitle\">true</item>\n        <!-- 设置背景色 透明-->\n        <item name=\"android:background\">@android:color/transparent</item>\n        <item name=\"android:windowBackground\">@android:color/transparent</item>\n        <!-- 设置是否显示背景 -->\n        <item name=\"android:backgroundDimEnabled\">true</item>\n        <!-- 设置背景透明度 -->\n        <item name=\"android:backgroundDimAmount\">0</item>\n        <!-- 设置点击空白不消失 -->\n        <item name=\"android:windowCloseOnTouchOutside\">false</item>\n    </style>\n\n    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">\n\n        <item name=\"android:windowNoTitle\">true</item>\n        <item name=\"android:windowFullscreen\">true</item>\n        <item name=\"android:windowBackground\">@color/white</item>\n    </style>\n\n    <style name=\"LauncherTheme2\" parent=\"Base.Theme.WXDynamicPlugin\">\n        <!--        该方式看不到启动页-->\n\n        <item name=\"android:windowNoTitle\">true</item>\n        <!--        <item name=\"android:windowFullscreen\">true</item>-->\n        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>\n\n    </style>\n\n    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <item name=\"android:background\">@android:color/transparent</item>\n        <item name=\"android:windowIsTranslucent\">true</item>\n        <item name=\"android:windowNoTitle\">true</item>\n        <item name=\"android:windowBackground\">@android:color/transparent</item>\n        <item name=\"android:windowFullscreen\">true</item>\n        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>\n    </style>\n\n\n    <style name=\"CircleStyle\">\n        <item name=\"cornerFamily\">rounded</item>\n        <item name=\"cornerSize\">50%</item>\n    </style>\n\n    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">\n        <item name=\"android:colorControlHighlight\">#FF4081</item>\n        <!--        <item name=\"paddingStart\">20dp</item>-->\n        <!--        <item name=\"android:paddingTop\">20dp</item>-->\n        <item name=\"android:radius\">20dp</item>\n    </style>\n\n    <style name=\"onTextOff\" parent=\"Theme.WXDynamicPlugin\">\n        <item name=\"android:textColor\">@color/white</item>\n        <item name=\"android:textSize\">16dp</item>\n    </style>\n\n    <style name=\"ssStyle\" parent=\"Theme.WXDynamicPlugin\">\n        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>\n        <item name=\"colorSwitchThumbNormal\">#999999</item>\n        <item name=\"android:colorForeground\">@color/colorPrimary</item>\n    </style>\n\n    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">\n        <!--        <item name=\"android:textStyle\">nomal</item>-->\n        <item name=\"android:textSize\">20dp</item>\n    </style>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <style name=\"LauncherTheme2\" parent=\"Base.Theme.WXDynamicPlugin\">\n        <item name=\"android:windowNoTitle\">true</item>\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"statusBarBackground\">@color/colorPrimary</item>-->\n        <item name=\"android:statusBarColor\">@color/white</item>\n        <item name=\"android:windowBackground\">@drawable/splash_preview</item>\n        <!--指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到-->\n        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>\n    </style>\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <style name=\"Theme.WXDynamicPlugin\" parent=\"Base.Theme.WXDynamicPlugin\">\n        <!-- Transparent system bars for edge-to-edge. -->\n        <item name=\"android:navigationBarColor\">@android:color/transparent</item>\n        <item name=\"android:statusBarColor\">@android:color/transparent</item>\n        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>\n    </style>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n    alias(libs.plugins.kotlin.kapt)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.core\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1008\n        versionName \"1.0.0.8\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n\n    buildFeatures {\n        buildConfig = true\n        dataBinding = true\n    }\n    kapt {\n        generateStubs = true\n    }\n\n    lintOptions {\n        abortOnError false\n    }\n}\n\ndependencies {\n    compileOnly project(':wgllss-common-re-library')\n\n    compileOnly libs.appcompat\n    compileOnly libs.androidx.recyclerview\n    compileOnly libs.google.material\n\n    compileOnly libs.androidx.lifecycle.runtime.ktx\n    compileOnly libs.androidx.lifecycle.livedata.ktx\n    compileOnly libs.androidx.lifecycle.viewmodel.ktx\n    compileOnly libs.androidx.activity.ktx\n    compileOnly libs.androidx.fragment.ktx\n\n    compileOnly libs.androidx.core.ktx\n    compileOnly libs.swiperefreshlayout\n\n    compileOnly libs.androidx.navigation.fragment.ktx\n    compileOnly libs.androidx.navigation.ui.ktx\n    compileOnly libs.glide\n    kapt libs.glide.compiler\n\n    //compose\n    compileOnly libs.androidx.activity.compose\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_common_lib.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_common_lib_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_common_lib_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.core\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseActivity.kt",
    "content": "package com.wgllss.core.activity\n\nimport android.os.Bundle\nimport androidx.activity.compose.setContent\nimport androidx.annotation.Nullable\nimport androidx.compose.runtime.Composable\nimport androidx.fragment.app.FragmentActivity\nimport androidx.lifecycle.ViewModelProvider\nimport androidx.lifecycle.ViewModelStore\nimport com.wgllss.core.dialog.CommonLoadingView\nimport com.wgllss.core.ex.finishActivity\nimport com.wgllss.core.units.StatusBarUtil\nimport com.wgllss.core.widget.CommonToast\n\nabstract class BaseActivity : FragmentActivity() {\n    private var loading: CommonLoadingView? = null\n    private var initFlag = false\n    open fun hasNavigationBarStatusBarTranslucent() = true\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        if (hasNavigationBarStatusBarTranslucent()) StatusBarUtil.setStatusBarTranslucent(this)\n        beforeSuperOnCreate(savedInstanceState);\n        super.onCreate(savedInstanceState)\n        initX(savedInstanceState)\n    }\n\n    protected open fun initX(savedInstanceState: Bundle?) {\n        initControl(savedInstanceState)\n        bindEvent()\n        initValue()\n    }\n\n    override fun onWindowFocusChanged(hasFocus: Boolean) {\n        super.onWindowFocusChanged(hasFocus)\n        if (hasFocus) {\n            if (!initFlag) {\n                initFlag = true\n                lazyInitValue()\n            }\n        }\n    }\n\n    fun onToast(content: String) {\n        CommonToast.show(content);\n    }\n\n    //是否loading\n    open fun isShowloading(): Boolean? {\n        return loading?.isShowing()\n    }\n\n    open fun showloading(showText: String?) {\n        if (null == loading) loading = CommonLoadingView(this)\n        if (isShowloading() == true) return\n        if (showText != null) loading?.show(showText)\n    }\n\n    open fun hideLoading() {\n        loading?.dismiss()\n        loading = null\n    }\n\n    override fun onDestroy() {\n        hideLoading()\n        super.onDestroy()\n    }\n\n    override fun onBackPressed() {\n        super.onBackPressed()\n        finishActivity()\n    }\n\n    open fun beforeSuperOnCreate(savedInstanceState: Bundle?) {}\n    open abstract fun initControl(savedInstanceState: Bundle?)\n    open abstract fun bindEvent()\n    open abstract fun initValue()\n    open fun lazyInitValue() {}\n\n\n    private var exitTime: Long = 0\n\n    protected open fun exitApp() {\n        if (System.currentTimeMillis() - exitTime > 2000) {\n            onToast(\"再按一次退出程序\")\n            exitTime = System.currentTimeMillis()\n        } else {\n            WActivityManager.exitApplication()\n        }\n    }\n\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseMVVMActivity.kt",
    "content": "package com.wgllss.core.activity\n\nimport android.os.Bundle\nimport androidx.annotation.LayoutRes\nimport androidx.annotation.MainThread\nimport androidx.databinding.DataBindingUtil\nimport androidx.databinding.ViewDataBinding\nimport androidx.lifecycle.Observer\nimport androidx.lifecycle.ViewModelLazy\nimport com.wgllss.core.units.WLog\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport java.lang.reflect.ParameterizedType\nimport kotlin.system.measureTimeMillis\n\n/**\n * contentLayoutId 不传给父类，否则 binding = DataBindingUtil.setContentView(this, contentLayoutId) 设置一次\n * 父类里面ComponentActivity还要设置一次 共2次 见下\n *\n *\n * @Override\n * protected void onCreate(@Nullable Bundle savedInstanceState) {\n *     // Restore the Saved State first so that it is available to\n *     // OnContextAvailableListener instances\n *    mSavedStateRegistryController.performRestore(savedInstanceState);\n *    mContextAwareHelper.dispatchOnContextAvailable(this);\n *    super.onCreate(savedInstanceState);\n *    mActivityResultRegistry.onRestoreInstanceState(savedInstanceState);\n *    ReportFragment.injectIfNeededIn(this);\n *    if (mContentLayoutId != 0) {\n *      setContentView(mContentLayoutId);\n *    }\n *  }\n */\nabstract class BaseMVVMActivity<VM : BaseViewModel, VB : ViewDataBinding>(@LayoutRes private val contentLayoutId: Int) : BaseActivity() {\n\n    protected val viewModel by lazyViewModels()\n    protected lateinit var binding: VB\n\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        val time = measureTimeMillis {\n            binding = DataBindingUtil.setContentView(this, contentLayoutId)\n            binding.lifecycleOwner = this@BaseMVVMActivity\n        }\n        WLog.e(this, \"time:${time}\")\n    }\n\n    override fun bindEvent() {\n        viewModel?.run {\n            showUIDialog.observe(this@BaseMVVMActivity, Observer { it ->\n                if (it.isShow) showloading(it.msg) else hideLoading()\n            })\n            errorMsgLiveData.observe(this@BaseMVVMActivity, Observer {\n                onToast(it)\n            })\n        }\n    }\n\n    override fun initValue() {\n    }\n\n\n    @MainThread\n    inline fun lazyViewModels(): Lazy<VM> {\n        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>\n        return ViewModelLazy(cls.kotlin, { viewModelStore }, { defaultViewModelProviderFactory })\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseViewModePluginActivity.kt",
    "content": "package com.wgllss.core.activity\n\nimport android.os.Bundle\nimport androidx.annotation.MainThread\nimport androidx.lifecycle.Observer\nimport androidx.lifecycle.ViewModelLazy\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport java.lang.reflect.ParameterizedType\n\n/**\n * contentLayoutId 不传给父类，否则 binding = DataBindingUtil.setContentView(this, contentLayoutId) 设置一次\n * 父类里面ComponentActivity还要设置一次 共2次 见下\n *\n *\n * @Override\n * protected void onCreate(@Nullable Bundle savedInstanceState) {\n *     // Restore the Saved State first so that it is available to\n *     // OnContextAvailableListener instances\n *    mSavedStateRegistryController.performRestore(savedInstanceState);\n *    mContextAwareHelper.dispatchOnContextAvailable(this);\n *    super.onCreate(savedInstanceState);\n *    mActivityResultRegistry.onRestoreInstanceState(savedInstanceState);\n *    ReportFragment.injectIfNeededIn(this);\n *    if (mContentLayoutId != 0) {\n *      setContentView(mContentLayoutId);\n *    }\n *  }\n */\nabstract class BaseViewModePluginActivity<VM : BaseViewModel>(protected val layoutName: String, packageNamePlugin: String) : BaseViewPluginResActivity(packageNamePlugin) {\n\n    protected val viewModel by lazyViewModels()\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        ResourceUtils.setContentLayout(this, resourcesPlugin, layoutName, packageNamePlugin)\n    }\n\n    override fun bindEvent() {\n        viewModel?.run {\n            showUIDialog.observe(this@BaseViewModePluginActivity, Observer { it ->\n                if (it.isShow) showloading(it.msg) else hideLoading()\n            })\n            errorMsgLiveData.observe(this@BaseViewModePluginActivity, Observer {\n                onToast(it)\n            })\n        }\n    }\n\n    override fun initValue() {\n    }\n\n\n    @MainThread\n    inline fun lazyViewModels(): Lazy<VM> {\n        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>\n        return ViewModelLazy(cls.kotlin, { viewModelStore }, { defaultViewModelProviderFactory })\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseViewModelActivity.kt",
    "content": "package com.wgllss.core.activity\n\nimport android.os.Bundle\nimport androidx.annotation.MainThread\nimport androidx.lifecycle.Observer\nimport androidx.lifecycle.ViewModelLazy\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport java.lang.reflect.ParameterizedType\n\n/**\n * contentLayoutId 不传给父类，否则 binding = DataBindingUtil.setContentView(this, contentLayoutId) 设置一次\n * 父类里面ComponentActivity还要设置一次 共2次 见下\n *\n *\n * @Override\n * protected void onCreate(@Nullable Bundle savedInstanceState) {\n *     // Restore the Saved State first so that it is available to\n *     // OnContextAvailableListener instances\n *    mSavedStateRegistryController.performRestore(savedInstanceState);\n *    mContextAwareHelper.dispatchOnContextAvailable(this);\n *    super.onCreate(savedInstanceState);\n *    mActivityResultRegistry.onRestoreInstanceState(savedInstanceState);\n *    ReportFragment.injectIfNeededIn(this);\n *    if (mContentLayoutId != 0) {\n *      setContentView(mContentLayoutId);\n *    }\n *  }\n */\nabstract class BaseViewModelActivity<VM : BaseViewModel>(packageNamePlugin: String) : BaseViewPluginResActivity(packageNamePlugin) {\n\n    protected val viewModel by lazyViewModels()\n\n    override fun bindEvent() {\n        viewModel?.run {\n            showUIDialog.observe(this@BaseViewModelActivity, Observer { it ->\n                if (it.isShow) showloading(it.msg) else hideLoading()\n            })\n            errorMsgLiveData.observe(this@BaseViewModelActivity, Observer {\n                onToast(it)\n            })\n        }\n    }\n\n    override fun initValue() {\n    }\n\n\n    @MainThread\n    inline fun lazyViewModels(): Lazy<VM> {\n        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>\n        return ViewModelLazy(cls.kotlin, { viewModelStore }, { defaultViewModelProviderFactory })\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseViewModelClassActivity.kt",
    "content": "package com.wgllss.core.activity\n\nimport android.os.Bundle\nimport androidx.lifecycle.Observer\nimport androidx.lifecycle.ViewModelProvider\nimport com.wgllss.core.viewmodel.BaseViewModel\n\n/**\n * contentLayoutId 不传给父类，否则 binding = DataBindingUtil.setContentView(this, contentLayoutId) 设置一次\n * 父类里面ComponentActivity还要设置一次 共2次 见下\n *\n *\n * @Override\n * protected void onCreate(@Nullable Bundle savedInstanceState) {\n *     // Restore the Saved State first so that it is available to\n *     // OnContextAvailableListener instances\n *    mSavedStateRegistryController.performRestore(savedInstanceState);\n *    mContextAwareHelper.dispatchOnContextAvailable(this);\n *    super.onCreate(savedInstanceState);\n *    mActivityResultRegistry.onRestoreInstanceState(savedInstanceState);\n *    ReportFragment.injectIfNeededIn(this);\n *    if (mContentLayoutId != 0) {\n *      setContentView(mContentLayoutId);\n *    }\n *  }\n */\nabstract class BaseViewModelClassActivity : BaseActivity() {\n\n    val viewModel by lazy { ViewModelProvider(viewModelStore, defaultViewModelProviderFactory).get(getViewModelClass()) }\n\n    override fun bindEvent() {\n        viewModel?.run {\n            showUIDialog.observe(this@BaseViewModelClassActivity, Observer { it ->\n                if (it.isShow) showloading(it.msg) else hideLoading()\n            })\n            errorMsgLiveData.observe(this@BaseViewModelClassActivity, Observer {\n                onToast(it)\n            })\n        }\n    }\n\n    override fun initValue() {\n    }\n\n    open abstract fun getViewModelClass(): Class<out BaseViewModel>\n\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseViewPluginResActivity.kt",
    "content": "package com.wgllss.core.activity\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.graphics.drawable.Drawable\nimport com.wgllss.core.fragment.BasePluginResFragment\nimport com.wgllss.core.units.ResourceUtils\n\n/**\n * contentLayoutId 不传给父类，否则 binding = DataBindingUtil.setContentView(this, contentLayoutId) 设置一次\n * 父类里面ComponentActivity还要设置一次 共2次 见下\n *\n *\n * @Override\n * protected void onCreate(@Nullable Bundle savedInstanceState) {\n *     // Restore the Saved State first so that it is available to\n *     // OnContextAvailableListener instances\n *    mSavedStateRegistryController.performRestore(savedInstanceState);\n *    mContextAwareHelper.dispatchOnContextAvailable(this);\n *    super.onCreate(savedInstanceState);\n *    mActivityResultRegistry.onRestoreInstanceState(savedInstanceState);\n *    ReportFragment.injectIfNeededIn(this);\n *    if (mContentLayoutId != 0) {\n *      setContentView(mContentLayoutId);\n *    }\n *  }\n */\nabstract class BaseViewPluginResActivity(protected val packageNamePlugin: String) : BaseActivity() {\n\n    protected lateinit var resourcesPlugin: Resources\n\n    override fun attachBaseContext(newBase: Context) {\n        super.attachBaseContext(newBase)\n        getPluginResources()?.let {\n            resourcesPlugin = it\n        }\n    }\n\n    override fun onStart() {\n        super.onStart()\n        onChangeSkin(getSkinResources())\n    }\n\n    abstract fun getSkinResources(): Resources\n\n    abstract fun getPluginResources(): Resources?\n\n    protected fun getPluginDrawable(resName: String): Drawable = ResourceUtils.getPluginDrawable(resourcesPlugin, resName, packageNamePlugin)\n\n    protected fun getPluginDrawable(skinRes: Resources, resName: String, skinPackageName: String): Drawable = ResourceUtils.getPluginDrawable(skinRes, resName, skinPackageName)\n\n    protected fun getPluginID(resName: String) = ResourceUtils.getPluginID(resourcesPlugin, resName, packageNamePlugin)\n\n    protected fun getPluginID(skinRes: Resources, resName: String, skinPackageName: String) = ResourceUtils.getPluginID(skinRes, resName, skinPackageName)\n\n    open fun onChangeSkin(skinRes: Resources) {\n\n    }\n\n    open fun callChangeSkin(skinRes: Resources) {\n        onChangeSkin(skinRes)\n        supportFragmentManager.fragments.forEach {\n            if (it.isAdded && it is BasePluginResFragment) {\n                it.callChangeSkin(skinRes)\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/WActivityManager.kt",
    "content": "package com.wgllss.core.activity\n\nimport android.app.Activity\nimport android.os.Process\nimport com.wgllss.core.ex.finishActivity\nimport java.lang.reflect.Field\nimport java.lang.reflect.Method\n\nobject WActivityManager {\n\n    fun getActivitys(block: (it: Activity) -> Any) {\n        try {\n            val activityThread = Class.forName(\"android.app.ActivityThread\")\n            val currentActivityThread: Method = activityThread.getDeclaredMethod(\"currentActivityThread\")\n            currentActivityThread.isAccessible = true\n            //获取主线程对象\n            val activityThreadObject: Any = currentActivityThread.invoke(null)\n            val mActivitiesField: Field = activityThread.getDeclaredField(\"mActivities\")\n            mActivitiesField.isAccessible = true\n            val mActivities = mActivitiesField[activityThreadObject] as Map<Any, Any>\n            mActivities.forEach {\n                val activityClientRecordClass: Class<*> = it.value.javaClass\n                val activityField = activityClientRecordClass.getDeclaredField(\"activity\")\n                activityField.isAccessible = true\n                activityField[it.value]?.let {\n                    block.invoke(it as Activity)\n                }\n            }\n        } catch (e: java.lang.Exception) {\n            e.printStackTrace()\n        }\n    }\n\n    fun popAllActivity() {\n        getActivitys() {\n            it.finishActivity()\n        }\n    }\n\n\n    fun exitApplication() {\n        object : Thread() {\n            override fun run() {\n                super.run()\n                popAllActivity()\n                Process.killProcess(Process.myPid())\n                System.exit(0) // 常规java、c#的标准退出法，返回值为0代表正常退出\n            }\n        }.start()\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/compose/BaseComposeActivity.kt",
    "content": "package com.wgllss.core.activity.compose\n\nimport androidx.activity.ComponentActivity\n\n\nopen class BaseComposeActivity : ComponentActivity(){\n\n\n\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/adapter/BasePagerAdapter.kt",
    "content": "package com.wgllss.core.adapter\n\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.viewpager.widget.PagerAdapter\n\nclass BasePagerAdapter(val mViews: MutableList<View>) : PagerAdapter() {\n    override fun getCount() = mViews?.size ?: 0\n\n    override fun isViewFromObject(view: View, obj: Any) = view === obj\n\n    override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {\n        mViews?.takeIf { it.size > 0 }?.let { container.removeView(it[position]) }\n    }\n\n    override fun instantiateItem(container: ViewGroup, position: Int): Any {\n        container.addView(mViews[position])\n        return mViews[position]\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/adapter/BasePluginRecyclerAdapter.kt",
    "content": "package com.wgllss.core.adapter\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.recyclerview.widget.RecyclerView\n\nabstract class BasePluginRecyclerAdapter<T>(protected val re: Resources, private val packageName: String) : RecyclerView.Adapter<BasePluginRecyclerAdapter.BaseBindingViewHolder>() {\n\n    var context: Context? = null\n    protected lateinit var mData: MutableList<T>\n    lateinit var skinRes: Resources\n\n    fun notifyData(mData: MutableList<T>, skinRes: Resources) {\n        if (mData == null) {\n            this.mData = mutableListOf()\n        } else {\n            this.mData = mData\n        }\n        this.skinRes = skinRes\n        notifyDataSetChanged()\n    }\n\n    fun notifySkinRes(skinRes: Resources) {\n        this.skinRes = skinRes\n        notifyDataSetChanged()\n    }\n\n    fun removeItem(position: Int) {\n        mData?.takeIf {\n            it.size > position\n        }?.run {\n            removeAt(position)\n            notifyDataSetChanged()\n        }\n    }\n\n    fun clearList() {\n        mData?.run {\n            clear()\n            notifyDataSetChanged()\n        }\n    }\n\n    override fun getItemCount(): Int = if (!this::mData.isInitialized) 0 else mData.size\n\n    override fun getItemId(position: Int): Long {\n        return position.toLong()\n    }\n\n    fun getItem(position: Int): T = mData[position]\n\n    protected abstract fun getLayoutResIdName(viewType: Int): String\n\n    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseBindingViewHolder {\n        if (context == null) {\n            context = parent.context\n        }\n        val layoutID = re.getIdentifier(getLayoutResIdName(viewType), \"layout\", packageName)\n        val xmlResourceParser = re.getLayout(layoutID)\n        val view = LayoutInflater.from(context).inflate(xmlResourceParser, parent, false)\n        return BaseBindingViewHolder(view)\n    }\n\n    override fun onBindViewHolder(holder: BaseBindingViewHolder, position: Int) {\n        val item = getItem(position)\n        onBindItem(context!!, item, holder, position)\n    }\n\n    fun <T : View> findViewByID(contentView: View, resourcesPlugin: Resources, IDResName: String): T {\n        val ID = resourcesPlugin.getIdentifier(IDResName, \"id\", packageName)\n        return contentView.findViewById(ID)\n    }\n\n    fun getPluginColorID(IDResName: String): Int {\n        val ID = re.getIdentifier(IDResName, \"color\", packageName)\n        return ID\n    }\n\n    fun getPluginColor(IDResName: String): Int {\n        return re.getColor(getPluginColorID(IDResName))\n    }\n\n    fun getPluginColor(re: Resources, IDResName: String, packageName: String): Int {\n        return re.getColor(getPluginColorID(re, IDResName, packageName))\n    }\n\n    fun getPluginColorID(re: Resources, IDResName: String, packageName: String): Int {\n        val ID = re.getIdentifier(IDResName, \"color\", packageName)\n        return ID\n    }\n\n    protected abstract fun onBindItem(context: Context, item: T, holder: RecyclerView.ViewHolder, position: Int)\n\n    class BaseBindingViewHolder constructor(itemView: View) : RecyclerView.ViewHolder(itemView)\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/adapter/BaseRecyclerAdapter.kt",
    "content": "package com.wgllss.core.adapter\n\nimport android.content.Context\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.annotation.LayoutRes\nimport androidx.recyclerview.widget.RecyclerView\n\n\nabstract class BaseRecyclerAdapter<T> : RecyclerView.Adapter<BaseRecyclerAdapter.BaseBindingViewHolder>() {\n    var context: Context? = null\n    private lateinit var mData: MutableList<T>\n\n    fun notifyData(mData: MutableList<T>) {\n        if (mData == null) {\n            this.mData = mutableListOf()\n        } else {\n            this.mData = mData\n        }\n        notifyDataSetChanged()\n    }\n\n    fun removeItem(position: Int) {\n        mData?.takeIf {\n            it.size > position\n        }?.run {\n            removeAt(position)\n            notifyDataSetChanged()\n        }\n    }\n\n    fun clearList() {\n        mData?.run {\n            clear()\n            notifyDataSetChanged()\n        }\n    }\n\n    override fun getItemCount(): Int = if (!this::mData.isInitialized) 0 else mData.size\n\n    override fun getItemId(position: Int): Long {\n        return position.toLong()\n    }\n\n    fun getItem(position: Int): T = mData[position]\n\n    override fun onBindViewHolder(holder: BaseBindingViewHolder, position: Int) {\n        val item = getItem(position)\n        onBindItem(context!!, item, holder, position)\n    }\n\n    protected abstract fun onBindItem(context: Context, item: T, holder: RecyclerView.ViewHolder, position: Int)\n\n    class BaseBindingViewHolder constructor(itemView: View) : RecyclerView.ViewHolder(itemView)\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/adapter/ViewPage2ChildFragmentAdapter.kt",
    "content": "package com.wgllss.core.adapter\n\nimport androidx.fragment.app.Fragment\nimport androidx.fragment.app.FragmentManager\nimport androidx.lifecycle.Lifecycle\nimport androidx.viewpager2.adapter.FragmentStateAdapter\n\nclass ViewPage2ChildFragmentAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) : FragmentStateAdapter(fragmentManager, lifecycle) {\n    lateinit var list: MutableList<Fragment>\n\n    fun notifyData(mData: MutableList<Fragment>) {\n        if (mData == null) {\n            list = mutableListOf()\n        } else {\n            this.list = mData\n        }\n        notifyDataSetChanged()\n    }\n\n    override fun getItemCount() = if (!this::list.isInitialized) 0 else list.size\n\n    override fun createFragment(position: Int) = list[position]\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/data/DialogBean.kt",
    "content": "package com.wgllss.core.data\n\ndata class DialogBean(var msg:String, var isShow:Boolean){\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/Context.kt",
    "content": "package com.wgllss.core.ex\n\nimport android.app.Activity\nimport android.app.ActivityManager\nimport android.content.Context\nimport android.graphics.Rect\nimport android.os.Process\nimport android.util.DisplayMetrics\nimport android.util.Log\nimport android.util.TypedValue\nimport android.view.WindowManager\nimport androidx.annotation.StyleRes\nimport androidx.appcompat.view.ContextThemeWrapper\nimport java.lang.reflect.Field\n\n\nfun Context.toTheme(@StyleRes style: Int) = ContextThemeWrapper(this, style)\n\nfun Context.dpToPx(dp: Float) = dp * resources.displayMetrics.density\n\nfun Context.pxToDp(px: Float) = px / resources.displayMetrics.density\n\nfun Context.dp2px(dipValue: Float) = (dipValue * resources.displayMetrics.density + 0.5f).toInt()\n\nfun Context.dpToPxInt(dp: Float) = (dpToPx(dp) + 0.5f).toInt().toFloat()\n\nfun Context.pxToDpCeilInt(px: Float) = (pxToDp(px) + 0.5f).toInt().toFloat()\n\nfun Context.getIntToDip(intSize: Float) = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, intSize, resources.displayMetrics)\n\nfun Activity.getStatusHight() = window.decorView.getWindowVisibleDisplayFrame(Rect())\n\n/**\n * 得到状态栏高度\n *\n * @return\n */\nfun Activity.getStatusBarHeight(): Int {\n    /*\n     * 方法一，荣耀3c无效 Rect frame = new Rect(); act.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top; return statusBarHeight;\n     */\n\n    /*\n     * 方法二，荣耀3c无效 Rect rectgle= new Rect(); Window window= act.getWindow(); window.getDecorView().getWindowVisibleDisplayFrame(rectgle); int StatusBarHeight= rectgle.top; int contentViewTop=\n     * window.findViewById(Window.ID_ANDROID_CONTENT).getTop(); int statusBar = contentViewTop - StatusBarHeight; return statusBar;\n     */\n    // 方法三，荣耀3c有效\n    var c: Class<*>? = null\n    var obj: Any? = null\n    var field: Field? = null\n    var x = 0\n    var sbar = 0\n    try {\n        c = Class.forName(\"com.android.internal.R\\$dimen\")\n        obj = c.newInstance()\n        field = c.getField(\"status_bar_height\")\n        x = field[obj].toString().toInt()\n        sbar = resources.getDimensionPixelSize(x)\n        return sbar\n    } catch (e1: Exception) {\n        e1.printStackTrace()\n    }\n    return 0\n}\n\nfun Activity.getDensity(): Float {\n    val dm = DisplayMetrics()\n    windowManager.defaultDisplay.getMetrics(dm)\n    val density: Float = dm.density//屏幕的密度density\n    return density\n}\n\nfun Activity.getDensityDpi(): Int {\n    val dm = DisplayMetrics()\n    windowManager.defaultDisplay.getMetrics(dm)\n    val density: Int = dm.densityDpi//屏幕的密度density\n    return density\n}\n\n\n/**\n * 获得屏幕宽度\n *\n * @param context\n * @return\n */\nfun Context.getScreenWidth(): Int {\n    val wm = getSystemService(Context.WINDOW_SERVICE) as WindowManager\n    val outMetrics = DisplayMetrics()\n    wm.defaultDisplay.getMetrics(outMetrics)\n    return outMetrics.widthPixels\n}\n\n/**\n * 获得屏幕高度\n *\n * @param context\n * @return\n */\nfun Context.getScreenHeight(): Int {\n    val wm = getSystemService(Context.WINDOW_SERVICE) as WindowManager\n    val outMetrics = DisplayMetrics()\n    wm.defaultDisplay.getMetrics(outMetrics)\n    return outMetrics.heightPixels\n}\n\n\n//获取底部导航栏高度\nfun Activity.getNavigationBarHeight(): Int {\n    val resourceId = resources.getIdentifier(\"navigation_bar_height\", \"dimen\", \"android\")\n    return resources.getDimensionPixelSize(resourceId)\n}\n\nfun Context.isUIProcess(): Boolean {\n    try {\n        val am: ActivityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager\n        val processInfos: List<ActivityManager.RunningAppProcessInfo> = am.runningAppProcesses\n        val mainProcessName: String = packageName\n        val myPid = Process.myPid()\n        for (info in processInfos) {\n            if (info.pid === myPid && mainProcessName == info.processName) {\n                return true\n            }\n        }\n    } catch (e: Exception) {\n        e.printStackTrace()\n    }\n    return false\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/Fragment.kt",
    "content": "package com.wgllss.core.ex\n\nimport android.content.Context\nimport android.view.View\nimport android.view.inputmethod.InputMethodManager\nimport androidx.annotation.IdRes\nimport androidx.fragment.app.Fragment\n\nfun Fragment.switchFragment(fragment: Fragment, mCurrentFragmentTAG: StringBuilder?, @IdRes idRes: Int) {\n    if (mCurrentFragmentTAG == null || fragment.javaClass.simpleName !== mCurrentFragmentTAG.toString()) {\n        childFragmentManager.apply {\n            val f = findFragmentByTag(mCurrentFragmentTAG.toString())\n            beginTransaction()?.let {\n                f?.let { f -> it.hide(f) }\n                fragment?.apply {\n                    if (!isAdded) {\n                        userVisibleHint = true;\n                        it.add(idRes, this, javaClass.simpleName).show(this)\n                    } else {\n                        it.show(this)\n                    }\n                }\n                it.commitAllowingStateLoss()\n            }\n        }\n    }\n}\n\nfun Fragment.setFramgment(fragment: Fragment, layoutID: Int) {\n    childFragmentManager.beginTransaction()?.let {\n        fragment?.apply {\n            if (!isAdded) {\n                userVisibleHint = true;\n                it.add(layoutID, this, javaClass.simpleName).show(this)\n            } else {\n                it.show(this)\n            }\n        }\n        it.commitAllowingStateLoss()\n    }\n}\n\nfun Fragment.HideSoftInputFromWindow(v: View) {\n    (activity?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager)?.hideSoftInputFromWindow(v.windowToken, 0); //强制隐藏键盘\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/FragmentActivity.kt",
    "content": "package com.wgllss.core.ex\n\nimport android.content.Context\nimport android.view.View\nimport android.view.WindowManager\nimport android.view.inputmethod.InputMethodManager\nimport androidx.activity.ComponentActivity\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.annotation.IdRes\nimport androidx.fragment.app.Fragment\nimport androidx.fragment.app.FragmentActivity\n\n\nfun FragmentActivity.switchFragment(fragment: Fragment, mCurrentFragmentTAG: StringBuilder?, @IdRes idRes: Int) {\n    if (mCurrentFragmentTAG == null || fragment.javaClass.simpleName !== mCurrentFragmentTAG.toString()) {\n        supportFragmentManager.apply {\n            val f = findFragmentByTag(mCurrentFragmentTAG.toString())\n            beginTransaction()?.let {\n                f?.let { f -> it.hide(f) }\n                fragment?.apply {\n                    if (!isAdded) {\n                        userVisibleHint = true;\n                        it.add(idRes, this, javaClass.simpleName).show(this)\n                    } else {\n                        it.show(this)\n                    }\n                }\n                it.commitAllowingStateLoss()\n            }\n        }\n    }\n}\n\nfun FragmentActivity.setFramgment(fragment: Fragment, layoutID: Int) {\n    supportFragmentManager.beginTransaction()?.let {\n        fragment?.apply {\n            if (!isAdded) {\n                userVisibleHint = true;\n                it.add(layoutID, this, javaClass.simpleName).show(this)\n            } else {\n                it.show(this)\n            }\n        }\n        it.commitAllowingStateLoss()\n    }\n}\n\nfun FragmentActivity.hideSoftInputFromWindow(v: View) {\n    (getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager)?.hideSoftInputFromWindow(v.windowToken, 0); //强制隐藏键盘\n}\n\nfun FragmentActivity.setFullScreen() {\n    window.apply {\n        addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);\n        addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)\n        clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)\n        addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)\n        decorView.systemUiVisibility = (\n                View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION\n                        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION\n                        or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY\n                )\n    }\n}\n\nfun ComponentActivity.registerForActivityResultPermissionsLaunch(permission: Array<String>, blockPerSuccess: () -> Unit, blockPerFail: () -> Unit = {}) {\n    registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { it ->\n        var successCount = 0\n        it.forEach { k, v ->\n            if (k != null && v) {\n                successCount++\n            }\n        }\n        if (successCount == permission.size) {\n            blockPerSuccess()\n        } else {\n            blockPerFail()\n        }\n    }.launch(permission)\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/ImageView.kt",
    "content": "package com.wgllss.core.ex\n\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\n\nfun ImageView.loadUrl(url: String) {\n    Glide.with(context).load(url).into(this)\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/SwipeRefreshLayout.kt",
    "content": "package com.wgllss.core.ex\n\nimport androidx.swiperefreshlayout.widget.SwipeRefreshLayout\n\nfun SwipeRefreshLayout.initColors() {\n    setColorSchemeResources(\n        android.R.color.holo_purple, android.R.color.holo_red_light,\n        android.R.color.holo_orange_light, android.R.color.holo_green_light\n    )\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/ViewModel.kt",
    "content": "package com.wgllss.core.ex\n\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.launch\n\n\nfun <T> ViewModel.flowAsyncWorkOnLaunch(flowAsyncWork: suspend () -> Flow<T>) {\n    viewModelScope.launch {\n        flowAsyncWork.invoke().flowOnIOAndCatchAAndCollect()\n    }\n}\n\n\n\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BaseFragment.kt",
    "content": "package com.wgllss.core.fragment\n\nimport androidx.annotation.LayoutRes\nimport androidx.fragment.app.Fragment\nimport com.wgllss.core.activity.BaseActivity\nimport com.wgllss.core.widget.CommonToast\n\nopen class BaseFragment(@LayoutRes private val contentLayoutId: Int) : Fragment(contentLayoutId) {\n\n    fun onToast(toastContent: String?) {\n        CommonToast.show(toastContent)\n    }\n\n    fun showloading() {\n        showloading(\"请稍候...\")\n    }\n\n    //是否loading\n    protected fun isShowloading(): Boolean? {\n        return if (activity != null && activity is BaseActivity)\n            (activity as BaseActivity)?.isShowloading()\n        else false\n    }\n\n    fun showloading(showText: String?) {\n        if (activity != null && activity is BaseActivity) {\n            (activity as BaseActivity?)?.showloading(showText)\n        }\n    }\n\n    fun hideLoading() {\n        if (activity != null && activity is BaseActivity) {\n            (activity as BaseActivity?)?.hideLoading()\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BasePluginResFragment.kt",
    "content": "package com.wgllss.core.fragment\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.view.View\nimport com.wgllss.core.units.ResourceUtils\n\nabstract class BasePluginResFragment(protected val packageName: String) : BaseFragment(0) {\n\n    protected lateinit var resourcesPlugin: Resources\n\n    override fun onAttach(context: Context) {\n        super.onAttach(context)\n        getPluginResources()?.let {\n            resourcesPlugin = it\n        }\n    }\n\n    override fun onStart() {\n        super.onStart()\n        onChangeSkin(getSkinResources())\n    }\n\n    abstract fun getPluginResources(): Resources?\n\n    abstract fun getSkinResources(): Resources\n\n    fun <T : View> findViewByID(contentView: View, IDResName: String): T = contentView.findViewById(ResourceUtils.getPluginID(resourcesPlugin, IDResName, packageName))\n\n    protected fun getPluginID(resName: String) = ResourceUtils.getPluginID(resourcesPlugin, resName, packageName)\n\n    protected fun getSkinPluginID(resName: String) = ResourceUtils.getPluginID(getSkinResources(), resName, packageName)\n\n    protected fun getPluginID(resources: Resources, resName: String) = ResourceUtils.getPluginID(resources, resName, packageName)\n\n    open fun onChangeSkin(skinRes: Resources) {\n\n    }\n\n    open fun callChangeSkin(skinRes: Resources) {\n        onChangeSkin(skinRes)\n        childFragmentManager.fragments.forEach {\n            if (it.isAdded && it is BasePluginResFragment) {\n                it.callChangeSkin(skinRes)\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BaseViewModelClassFragment.kt",
    "content": "package com.wgllss.core.fragment\n\nimport android.os.Bundle\nimport androidx.activity.ComponentActivity\nimport androidx.annotation.LayoutRes\nimport androidx.annotation.MainThread\nimport androidx.lifecycle.Observer\nimport androidx.lifecycle.ViewModelLazy\nimport androidx.lifecycle.ViewModelProvider\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport java.lang.reflect.ParameterizedType\n\nopen class BaseViewModelClassFragment<VM : BaseViewModel>(@LayoutRes private val contentLayoutId: Int) : BaseFragment(contentLayoutId) {\n    protected lateinit var viewModel: VM\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        activity?.let {\n            viewModel = lazyViewModels(it)\n            initObserve()\n        }\n    }\n\n    /**\n     * activity 和 fragmnet 是否公用同一个viewModel\n     */\n    protected open fun activitySameViewModel() = false\n\n    @MainThread\n    private fun lazyViewModels(activity: ComponentActivity): VM {\n        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>\n        return if (activitySameViewModel()) {\n            ViewModelProvider(activity.viewModelStore, activity.defaultViewModelProviderFactory).get(cls)\n        } else {\n            ViewModelProvider(viewModelStore, defaultViewModelProviderFactory).get(cls)\n        }\n    }\n\n    /**\n     * 监听当前ViewModel中 showDialog和error的值\n     */\n    protected open fun initObserve() {\n        if (!activitySameViewModel())\n            viewModel?.run {\n                showUIDialog.observe(viewLifecycleOwner, Observer { it ->\n                    if (it.isShow) showloading(it.msg) else hideLoading()\n                })\n                errorMsgLiveData.observe(viewLifecycleOwner, Observer {\n                    onToast(it)\n                })\n            }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BaseViewModelFragment.kt",
    "content": "package com.wgllss.core.fragment\n\nimport android.os.Bundle\nimport androidx.activity.ComponentActivity\nimport androidx.annotation.LayoutRes\nimport androidx.annotation.MainThread\nimport androidx.lifecycle.Observer\nimport androidx.lifecycle.ViewModelLazy\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport java.lang.reflect.ParameterizedType\n\nabstract class BaseViewModelFragment<VM : BaseViewModel>(packageName: String) : BasePluginResFragment(packageName) {\n    protected lateinit var viewModel: VM\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        activity?.let {\n            viewModel = lazyViewModels(it).value\n            initObserve()\n        }\n    }\n\n    /**\n     * activity 和 fragmnet 是否公用同一个viewModel\n     */\n    protected open fun activitySameViewModel() = false\n\n    @MainThread\n    private fun lazyViewModels(activity: ComponentActivity): Lazy<VM> {\n        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>\n        return if (activitySameViewModel()) ViewModelLazy(cls.kotlin, { activity.viewModelStore }, { activity.defaultViewModelProviderFactory })\n        else ViewModelLazy(cls.kotlin, { viewModelStore }, { defaultViewModelProviderFactory })\n    }\n\n    /**\n     * 监听当前ViewModel中 showDialog和error的值\n     */\n    protected open fun initObserve() {\n        if (!activitySameViewModel())\n            viewModel?.run {\n                showUIDialog.observe(viewLifecycleOwner, Observer { it ->\n                    if (it.isShow) showloading(it.msg) else hideLoading()\n                })\n                errorMsgLiveData.observe(viewLifecycleOwner, Observer {\n                    onToast(it)\n                })\n            }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BaseViewModelPluginFragment.kt",
    "content": "package com.wgllss.core.fragment\n\nimport android.content.Context\nimport android.os.Bundle\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.activity.ComponentActivity\nimport androidx.annotation.MainThread\nimport androidx.lifecycle.Observer\nimport androidx.lifecycle.ViewModelLazy\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport java.lang.reflect.ParameterizedType\n\nabstract class BaseViewModelPluginFragment<VM : BaseViewModel>(private val layoutName: String, packageName: String) : BasePluginResFragment(packageName) {\n    protected lateinit var containerView: View\n    protected lateinit var viewModel: VM\n\n    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {\n        if (!this::containerView.isInitialized) {\n            resourcesPlugin.run {\n                val layoutID = getIdentifier(layoutName, \"layout\", packageName)\n                val xmlResourceParser = getLayout(layoutID)\n                containerView = LayoutInflater.from(inflater.context).inflate(xmlResourceParser, container, false)\n                findView(inflater.context, containerView)\n            }\n        }\n        return containerView\n    }\n\n    open fun findView(context: Context, containerView: View) {\n\n    }\n\n    fun <T : View> findViewByID(IDResName: String): T = containerView.findViewById(ResourceUtils.getPluginID(resourcesPlugin, IDResName, packageName))\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        activity?.let {\n            viewModel = lazyViewModels(it).value\n            initObserve()\n        }\n    }\n\n    /**\n     * activity 和 fragmnet 是否公用同一个viewModel\n     */\n    protected open fun activitySameViewModel() = false\n\n    @MainThread\n    private fun lazyViewModels(activity: ComponentActivity): Lazy<VM> {\n        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>\n        return if (activitySameViewModel()) ViewModelLazy(cls.kotlin, { activity.viewModelStore }, { activity.defaultViewModelProviderFactory })\n        else ViewModelLazy(cls.kotlin, { viewModelStore }, { defaultViewModelProviderFactory })\n    }\n\n    /**\n     * 监听当前ViewModel中 showDialog和error的值\n     */\n    protected open fun initObserve() {\n        if (!activitySameViewModel())\n            viewModel?.run {\n                showUIDialog.observe(viewLifecycleOwner) {\n                    if (it.isShow) showloading(it.msg) else hideLoading()\n                }\n                errorMsgLiveData.observe(viewLifecycleOwner) {\n                    onToast(it)\n                }\n            }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/http/HttpRequest.kt",
    "content": "package com.wgllss.core.http\n\nimport java.net.HttpURLConnection\nimport java.net.URL\nimport java.security.SecureRandom\nimport java.security.cert.CertificateException\nimport java.security.cert.X509Certificate\nimport javax.net.ssl.*\n\nobject HttpRequest {\n\n    fun getHttpURLConnection(url: URL, connectTimeOut: Int): HttpURLConnection? {\n        return try {\n            if (\"https\" == url.protocol) {\n                trustAllHosts()\n                (url.openConnection() as HttpsURLConnection).apply {\n                    HttpsURLConnection.setDefaultHostnameVerifier(hnv)\n                    hostnameVerifier = hnv\n                    HttpsURLConnection.setDefaultSSLSocketFactory(mSSLSocketFactory)\n                    sslSocketFactory = mSSLSocketFactory\n                    connectTimeout = 3 * connectTimeOut\n                    readTimeout = 3 * connectTimeOut\n                }\n            } else {\n                (url.openConnection() as HttpURLConnection).apply {\n                    connectTimeout = connectTimeOut\n                    readTimeout = connectTimeOut\n                }\n            }\n        } catch (e: Exception) {\n            null\n        }\n    }\n\n    /**\n     * 信任所有host\n     */\n    var hnv = HostnameVerifier { hostname, session -> true }\n\n    /**\n     * 设置https\n     *\n     * @author :Atar\n     * @createTime:2015-9-17下午4:57:39\n     * @version:1.0.0\n     * @modifyTime:\n     * @modifyAuthor:\n     * @description:\n     */\n    private fun trustAllHosts() {\n        try {\n            val trustAllCerts = arrayOf<TrustManager>(object : X509TrustManager {\n                override fun getAcceptedIssuers(): Array<X509Certificate> {\n                    return arrayOf()\n                }\n\n                @Throws(CertificateException::class)\n                override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {\n                }\n\n                @Throws(CertificateException::class)\n                override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) {\n                }\n            })\n            val sc = SSLContext.getInstance(\"TLS\")\n            sc.init(null, trustAllCerts, SecureRandom())\n            if (mSSLSocketFactory == null) {\n                mSSLSocketFactory = sc.socketFactory\n            }\n            HttpsURLConnection.setDefaultHostnameVerifier(hnv)\n            HttpsURLConnection.setDefaultSSLSocketFactory(mSSLSocketFactory)\n        } catch (e: Exception) {\n            e.printStackTrace()\n        }\n    }\n\n    var mSSLSocketFactory: SSLSocketFactory? = null\n\n    /**\n     * 设置请求头\n     *\n     * @param httpConnection\n     */\n    fun setConHead(httpConnection: HttpURLConnection) {\n        httpConnection.apply {\n            setRequestProperty(\"Accept\", \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\")\n            setRequestProperty(\"Upgrade-Insecure-Requests\", \"1\")\n            setRequestProperty(\"User-Agent\", \"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Mobile Safari/537.36\")\n            setRequestProperty(\"Accept-Language\", \"en-us,en;q=0.7,zh-cn;q=0.3\")\n//            httpConnection.setRequestProperty(\"Accept-Encoding\", \"gzip, deflate, br\")\n            setRequestProperty(\"Accept-Charset\", \"ISO-8859-1,utf-8;q=0.7,*;q=0.7\")\n            setRequestProperty(\"Keep-Alive\", \"300\")\n            setRequestProperty(\"Connection\", \"keep-alive\")\n            setRequestProperty(\"Cache-Control\", \"max-age=0\")\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/http/HttpUrlConnectionRequest.kt",
    "content": "package com.wgllss.core.http\n\nimport java.io.BufferedReader\nimport java.io.InputStreamReader\nimport java.lang.StringBuilder\nimport java.net.HttpURLConnection\nimport java.net.URL\n\nobject HttpUrlConnectionRequest {\n\n    fun getServerJson(url: String): String {\n        val result = StringBuilder()\n        var httpConnection: HttpURLConnection? = null\n        try {\n            val url = URL(url)\n            httpConnection = HttpRequest.getHttpURLConnection(url, 5000)\n            HttpRequest.setConHead(httpConnection!!)\n            httpConnection!!.connect()\n            val responseCode = httpConnection!!.responseCode\n            if (responseCode == HttpURLConnection.HTTP_OK || responseCode == HttpURLConnection.HTTP_PARTIAL) {\n                val instream = httpConnection!!.inputStream\n                if (instream != null) {\n                    val inputreader = InputStreamReader(instream)\n                    val buffreader = BufferedReader(inputreader)\n                    var line: String?\n                    // 分行读取\n                    while (buffreader.readLine().also { line = it } != null) {\n                        result.append(line)\n                    }\n                    inputreader.close()\n                    instream.close()\n                    buffreader.close()\n                }\n            }\n        } catch (e: Exception) {\n            e.printStackTrace()\n        } finally {\n            httpConnection?.disconnect() // 关闭连接\n        }\n        return result.toString()\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/material/ThemeUtils.kt",
    "content": "package com.wgllss.core.material\n//\n//import android.content.Context\n//import android.util.TypedValue\n//\n//object ThemeUtils {\n//\n//\n//    @JvmStatic\n//    fun getColorPrimary(context: Context): Int {\n//        val typedValue = TypedValue()\n//        context.theme.resolveAttribute(android.R.attr.colorPrimary, typedValue, true)\n//        return typedValue.data\n//    }\n//\n//    @JvmStatic\n//    fun getColorOnPrimary(context: Context): Int {\n//        val typedValue = TypedValue()\n//        context.theme.resolveAttribute(android.R.attr.textColorHighlight, typedValue, true)\n//        return typedValue.data\n//    }\n//\n//    @JvmStatic\n//    fun getTextColorPrimary(context: Context): Int {\n//        val typedValue = TypedValue()\n//        context.theme.resolveAttribute(android.R.attr.textColorPrimary, typedValue, true)\n//        return typedValue.data\n//    }\n//\n//    @JvmStatic\n//    fun getAndroidColorBackground(context: Context): Int {\n//        val typedValue = TypedValue()\n//        context.theme.resolveAttribute(android.R.attr.colorBackground, typedValue, true)\n//        return typedValue.data\n//    }\n//}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/DeviceIdUtilX.kt",
    "content": "package com.wgllss.core.units\n\nimport android.content.Context\nimport android.os.Build\nimport android.provider.Settings\nimport java.security.MessageDigest\nimport java.util.*\n\n/**\n * 1847470F0A12C2F310F7311FA719DBFE50510192\n * 1847470F0A12C2F310F7311FA719DBFE50510192\n *\n * 2F6039397BA7EEC402E7036339963B23810CCBFD\n */\nobject DeviceIdUtilX {\n    private const val isDeviceSelfSerial = false\n    private const val WD = \"B03E4AFB9ADC842C9B3BDB6C57346ACEF6CE7504\"\n    private const val CD = \"2F6039397BA7EEC402E7036339963B23810CCBFD\"\n    private const val ELSED = \"dxde_m_p\"\n\n    fun getDeviceId(context: Context, needDevice: Boolean = false): String {\n        if (isDeviceSelfSerial) {\n            //todo 模拟序列号\n            return \"2F6039397BA7EEC402E7036339963B23810CCBFD\"\n//            return getSerial(AppGlobals.sApplication)\n        } else {\n//            val context = AppGlobals.sApplication\n            val sbDeviceId = StringBuilder()\n//            val imei = getIMEI(context)\n            val androidID = getAndroidId(context)\n//            val serial = getSerial(context)\n            val id = getDeviceUUID(context).replace(\"-\", \"\")\n            //追加imei\n//            if (imei != null && imei.isNotEmpty()) {\n//                sbDeviceId.append(imei)\n//                sbDeviceId.append(\"|\")\n//            }\n            //追加androidid\n            if (androidID != null && androidID.isNotEmpty()) {\n                sbDeviceId.append(androidID)\n                sbDeviceId.append(\"|\")\n            }\n            //追加serial\n//            if (serial != null && serial.isNotEmpty()) {\n//                sbDeviceId.append(serial)\n//                sbDeviceId.append(\"|\")\n//            }\n            //追加硬件uuid\n            if (id != null && id.isNotEmpty()) {\n                sbDeviceId.append(id)\n            }\n            if (sbDeviceId.toString().isNotEmpty()) {\n                try {\n                    val hash = getHashByString(sbDeviceId.toString())\n                    val sha1 = bytesToHex(hash!!)\n//                    LogTimer.LogE(this, sha1!!)\n                    if (sha1 != null && sha1.isNotEmpty()) {\n                        return if (needDevice || CD == sha1 || WD == sha1)\n                            sha1 else ELSED\n//                        return sha1\n                    }\n                } catch (ex: Exception) {\n                    ex.printStackTrace()\n                }\n            }\n            val s = sbDeviceId.toString()\n            return if (CD == s || WD == s)\n                s else ELSED\n        }\n    }\n\n    /**\n     * 转16进制字符串\n     *\n     * @param data 数据\n     * @return 16进制字符串\n     */\n    private fun bytesToHex(data: ByteArray): String? {\n        val sb = StringBuilder()\n        var stmp: String\n        for (n in data.indices) {\n            stmp = Integer.toHexString(data[n].toInt() and 0xFF)\n            if (stmp.length == 1) sb.append(\"0\")\n            sb.append(stmp)\n        }\n        return sb.toString().uppercase(Locale.CHINA)\n    }\n\n    /**\n     * 取SHA1\n     *\n     * @param data 数据\n     * @return 对应的hash值\n     */\n    private fun getHashByString(data: String): ByteArray? {\n        return try {\n            val messageDigest: MessageDigest = MessageDigest.getInstance(\"SHA1\")\n            messageDigest.reset()\n            messageDigest.update(data.toByteArray(charset(\"UTF-8\")))\n            messageDigest.digest()\n        } catch (e: java.lang.Exception) {\n            \" \".toByteArray()\n        }\n    }\n\n    // //获得硬件uuid（根据硬件相关属性，生成uuid）（无需权限）  数字  0   -10\n    private fun getDeviceUUID(context: Context): String {\n        val sb = StringBuilder().apply {\n            append(\"100001\")\n            append(Build.BOARD)\n            append(Build.BRAND)\n            append(Build.DEVICE)\n            append(Build.HARDWARE)\n            append(Build.ID)\n            append(Build.MODEL)\n            append(Build.PRODUCT)\n//            append(Build.SERIAL)\n        }\n        val long = sb.toString().hashCode().toLong()\n        return UUID(long, long).toString()\n    }\n\n//    private fun getSerial(context: Context): String {\n//        try {\n//            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {\n//                return Build.SERIAL\n//            } else {\n//                val permissionCheck = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE)\n//                if (permissionCheck == PackageManager.PERMISSION_GRANTED) {\n//                    return Build.getSerial()\n//                }\n//            }\n//        } catch (ex: Exception) {\n//            ex.printStackTrace()\n//        }\n//        return \" \"\n//    }\n\n    /**\n     * 获得设备的AndroidId\n     *\n     * @param context 上下文\n     * @return 设备的AndroidId\n     */\n    private fun getAndroidId(context: Context): String {\n        try {\n            return Settings.Secure.getString(\n                context.contentResolver,\n                Settings.Secure.ANDROID_ID\n            )\n        } catch (ex: java.lang.Exception) {\n            ex.printStackTrace()\n        }\n        return \" \"\n    }\n//\n//    //需要获得READ_PHONE_STATE权限，>=6.0，默认返回null\n//    private fun getIMEI(context: Context): String {\n//        try {\n//            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {\n//                val permissionCheck = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE)\n//                if (permissionCheck == PackageManager.PERMISSION_GRANTED) {\n//                    val tm = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager\n//                    return tm.deviceId ?: \" \"\n//                }\n//            }\n//        } catch (ex: Exception) {\n//            ex.printStackTrace()\n//        }\n//        return \" \"\n//    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/ImageUtils.kt",
    "content": "package com.wgllss.core.units\n\nimport android.graphics.Bitmap\nimport android.graphics.Canvas\nimport android.graphics.drawable.Drawable\n\nobject ImageUtils {\n\n    fun drawableToBitmap(drawable: Drawable): Bitmap {\n        val bitmap = Bitmap.createBitmap(\n            drawable.intrinsicWidth, drawable.intrinsicHeight, Bitmap.Config.ARGB_8888\n        )\n        val canvas = Canvas(bitmap)\n        drawable.setBounds(0, 0, canvas.width, canvas.height)\n        drawable.draw(canvas)\n        return bitmap\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/ResourceUtils.kt",
    "content": "package com.wgllss.core.units\n\nimport android.app.Activity\nimport android.content.Context\nimport android.content.res.ColorStateList\nimport android.content.res.Resources\nimport android.graphics.Color\nimport android.graphics.drawable.Drawable\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.EditText\nimport android.widget.ImageView\nimport android.widget.TextView\nimport com.google.android.material.button.MaterialButton\n\nobject ResourceUtils {\n\n    fun setContentLayout(activity: Activity, resourcesPlugin: Resources, layoutName: String, packageNamePlugin: String) {\n        val layoutID = resourcesPlugin.getIdentifier(layoutName, \"layout\", packageNamePlugin)\n        val view = LayoutInflater.from(activity).inflate(resourcesPlugin.getLayout(layoutID), activity.window.decorView as ViewGroup, false)\n        activity.setContentView(view)\n    }\n\n    fun getPluginView(context: Context, resourcesPlugin: Resources, resName: String, packageNamePlugin: String): View {\n        val layoutID = resourcesPlugin.getIdentifier(resName, \"layout\", packageNamePlugin)\n        return LayoutInflater.from(context).inflate(resourcesPlugin.getLayout(layoutID), null, false)\n    }\n\n    fun getPluginID(resourcesPlugin: Resources, resName: String, packageNamePlugin: String) = resourcesPlugin.getIdentifier(resName, \"id\", packageNamePlugin)\n\n    fun getPluginDrawable(resourcesPlugin: Resources, resName: String, packageNamePlugin: String): Drawable = resourcesPlugin.getDrawable(resourcesPlugin.getIdentifier(resName, \"drawable\", packageNamePlugin))\n\n    fun getPluginColor(resourcesPlugin: Resources, resName: String, packageNamePlugin: String) = resourcesPlugin.getColor(resourcesPlugin.getIdentifier(resName, \"color\", packageNamePlugin))\n\n    fun getPluginDimen(resourcesPlugin: Resources, resName: String, packageNamePlugin: String) = resourcesPlugin.getDimension(resourcesPlugin.getIdentifier(resName, \"dimen\", packageNamePlugin))\n\n    fun getPluginString(resourcesPlugin: Resources, resName: String, packageNamePlugin: String) = resourcesPlugin.getString(resourcesPlugin.getIdentifier(resName, \"string\", packageNamePlugin))\n\n    fun getColorStatusList(resourcesPlugin: Resources, resName: String, packageNamePlugin: String) = resourcesPlugin.getColorStateList(resourcesPlugin.getIdentifier(resName, \"drawable\", packageNamePlugin))\n\n    fun setBackgroundColor(resourcesPlugin: Resources, resName: String, packageNamePlugin: String, vararg view: View) {\n        view.forEach {\n            it.setBackgroundColor(getPluginColor(resourcesPlugin, resName, packageNamePlugin))\n        }\n    }\n\n    fun setBackgroundDrawable(resourcesPlugin: Resources, resName: String, packageNamePlugin: String, vararg view: View) {\n        view.forEach {\n            it.setBackgroundDrawable(getPluginDrawable(resourcesPlugin, resName, packageNamePlugin))\n        }\n    }\n\n    fun setImageDrawable(resourcesPlugin: Resources, resName: String, packageNamePlugin: String, vararg view: ImageView) {\n        view.forEach {\n            it.setImageDrawable(getPluginDrawable(resourcesPlugin, resName, packageNamePlugin))\n        }\n    }\n\n    fun setTextColor(resourcesPlugin: Resources, resName: String, packageNamePlugin: String, vararg view: TextView) {\n        view.forEach {\n            it.setTextColor(getPluginColor(resourcesPlugin, resName, packageNamePlugin))\n        }\n    }\n\n    fun setTextColorHint(resourcesPlugin: Resources, resName: String, packageNamePlugin: String, vararg view: EditText) {\n        view.forEach {\n            it.setHintTextColor(getPluginColor(resourcesPlugin, resName, packageNamePlugin))\n        }\n    }\n\n    fun setText(resourcesPlugin: Resources, resName: String, packageNamePlugin: String, vararg view: TextView) {\n        view.forEach {\n            it.text = getPluginString(resourcesPlugin, resName, packageNamePlugin)\n        }\n    }\n\n    fun setTextHint(resourcesPlugin: Resources, resName: String, packageNamePlugin: String, vararg view: TextView) {\n        view.forEach {\n            it.hint = getPluginString(resourcesPlugin, resName, packageNamePlugin)\n        }\n    }\n\n    fun setMaterialButtonBackgroundHint(resourcesPlugin: Resources, resName1: String, resName2: String, packageNamePlugin: String, vararg view: MaterialButton) {\n        val colors = intArrayOf(getPluginColor(resourcesPlugin, resName1, packageNamePlugin), getPluginColor(resourcesPlugin, resName2, packageNamePlugin))\n        val states = arrayOfNulls<IntArray>(2)\n        states[0] = intArrayOf(android.R.attr.state_pressed)\n        states[1] = intArrayOf(android.R.attr.state_enabled)\n        view.forEach {\n            it.backgroundTintList = ColorStateList(states, colors)\n        }\n    }\n\n    fun setMaterialButtonBackgroundHint(colorStrPressed: String, colorStrEnable: String, vararg view: MaterialButton) {\n        val colors = intArrayOf(Color.parseColor(colorStrPressed), Color.parseColor(colorStrEnable))\n        val states = arrayOfNulls<IntArray>(2)\n        states[0] = intArrayOf(android.R.attr.state_pressed)\n        states[1] = intArrayOf(android.R.attr.state_enabled)\n        view.forEach {\n            it.backgroundTintList = ColorStateList(states, colors)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/ScreenManager.kt",
    "content": "package com.wgllss.core.units\n\nimport android.content.Context\nimport android.util.DisplayMetrics\nimport android.view.View\nimport android.view.WindowManager\n\nobject ScreenManager {\n    var screenWidth = 0\n    var screenHeight = 0\n    var widthSpec = 0\n    var heightSpec = 0\n\n    //初始化 屏幕 宽高相关属性\n    fun initScreenSize(context: Context) {\n        val metric = DisplayMetrics()\n        val manager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager\n        manager.defaultDisplay.getRealMetrics(metric)\n        screenWidth = metric.widthPixels\n        screenHeight = metric.heightPixels\n        widthSpec = View.MeasureSpec.makeMeasureSpec(screenWidth, View.MeasureSpec.EXACTLY)\n        heightSpec = View.MeasureSpec.makeMeasureSpec(screenHeight, View.MeasureSpec.EXACTLY)\n    }\n\n    fun measureAndLayout(view: View) {\n        view?.measure(widthSpec, heightSpec)\n        view?.layout(0, 0, screenWidth, screenHeight)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/SdkIntUtils.kt",
    "content": "package com.wgllss.core.units\n\nimport android.os.Build\n\nobject SdkIntUtils {\n    fun isOreo(): Boolean = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O\n\n    fun isMarshmallow() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M\n\n    fun isLollipop() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP\n\n    fun isJellyBeanMR2() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2\n\n    fun isJellyBean() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN\n\n    fun isJellyBeanMR1() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/ServiceUtil.kt",
    "content": "package com.wgllss.core.units\n//\n//import android.app.ActivityManager\n//import android.content.Context\n//import android.content.Intent\n//import android.os.Build\n//import androidx.annotation.RequiresApi\n//\n//object ServiceUtil {\n//\n//    /**\n//     * 判断某个服务是否存在\n//     *\n//     * @param context\n//     * @param className\n//     * @return\n//     */\n//    fun isServiceExisted(context: Context, className: String): Boolean {\n//        val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager\n//        val serviceList = activityManager.getRunningServices(Int.MAX_VALUE)\n//        if (serviceList == null || serviceList.size <= 0) {\n//            return false\n//        }\n//        for (i in serviceList.indices) {\n//            val serviceInfo = serviceList[i]\n//            val serviceName = serviceInfo.service\n//            if (serviceName.className == className) {\n//                return true\n//            }\n//        }\n//        return false\n//    }\n//\n//    fun startService(packageContext: Context, cls: Class<*>) {\n//        try {\n//            if (!isServiceExisted(packageContext, cls.name)) {\n//                val intent = Intent(packageContext, cls)\n//                packageContext.startService(intent)\n//            }\n//        } catch (e: Exception) {\n//        }\n//    }\n//\n//    @RequiresApi(Build.VERSION_CODES.O)\n//    fun startForegroundService(packageContext: Context, cls: Class<*>) {\n//        try {\n//            if (!isServiceExisted(packageContext, cls.name)) {\n//                val intent = Intent(packageContext, cls)\n//                packageContext.startForegroundService(intent)\n//            }\n//        } catch (e: Exception) {\n//\n//        }\n//    }\n//\n//    fun stopService(packageContext: Context, cls: Class<*>) {\n//        try {\n//            if (!isServiceExisted(packageContext, cls.name)) {\n//                val intent = Intent(packageContext, cls)\n//                packageContext.stopService(intent)\n//            }\n//        } catch (e: Exception) {\n//        }\n//    }\n//}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/StatusBarUtil.kt",
    "content": "package com.wgllss.core.units\n\nimport android.app.Activity\nimport android.app.ActivityOptions\nimport android.content.Context\nimport android.graphics.Color\nimport android.graphics.drawable.ColorDrawable\nimport android.os.Build\nimport android.view.View\nimport android.view.ViewGroup\nimport android.view.Window\nimport android.view.WindowManager\nimport androidx.core.view.ViewCompat\nimport com.wgllss.core.ex.getIntToDip\nimport java.lang.reflect.Method\nimport java.util.*\n\n/**\n * 屏幕相关工具类\n *   1.设置沉浸式任务栏\n *\n * @author LTP 16/9/21.\n */\nobject StatusBarUtil {\n\n    /**\n     * 模拟沉浸式状态栏，本质上是通过设置状态栏的颜色，可设置为与toolbar相同达到沉浸式的效果\n     *\n     * @param activity 要设置的Activity\n     */\n//    fun setImmersionStatus(activity: Activity) {\n//        // 透明状态栏\n//        activity.window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)\n//        activity.window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)\n//        activity.window.statusBarColor = activity.resources.getColor(R.color.purple_500)\n//    }\n\n    /**\n     * 设置无状态栏，直接干掉顶部的状态栏，但要注意例如一些actionbar会自动顶到最上方需要适配\n     *\n     * @param activity 要设置的Activity\n     */\n    fun setNoStatus(activity: Activity) {\n        // 透明状态栏\n        activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)\n    }\n\n    fun setStatusBarTranslucent(activity: Activity) {\n        activity?.window?.apply {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {\n                //适配刘海屏\n                val layoutParams = attributes\n                layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;\n                attributes = layoutParams\n            }\n            decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)\n            statusBarColor = Color.TRANSPARENT\n        }\n    }\n\n    /**\n     * 设置状态栏  导航栏 透明\n     *\n     * @param activity       需要设置的activity\n     * @param color          状态栏颜色值\n     */\n    fun setNavigationBarStatusBarTranslucent(activity: Activity) {\n        activity?.window?.apply {\n            decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)\n            navigationBarColor = Color.TRANSPARENT\n            statusBarColor = Color.TRANSPARENT\n        }\n    }\n\n    /**\n     * 设置Android6.0上状态栏的字体颜色为黑色\n     *\n     * @param activity Activity\n     */\n    fun setStatusBarLightMode(activity: Activity) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {\n            activity.window.decorView.systemUiVisibility =\n                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR\n        }\n    }\n\n    /**\n     * 设置Android6.0上状态栏的字体颜色为黑色\n     *\n     * @param activity Activity\n     */\n    fun setStatusBarDarkMode(activity: Activity) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {\n            activity.window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN\n        }\n    }\n\n    /**\n     * 获取手机状态栏的高度\n     */\n    fun getStatusBarHeight(context: Context): Int {\n        val resourceId = context.resources.getIdentifier(\"status_bar_height\", \"dimen\", \"android\")\n        return context.resources.getDimensionPixelSize(resourceId)\n    }\n\n    fun translucentStatusBar(activity: Activity, toolbar: ViewGroup? = null) {\n        try {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n                val window = activity.window\n                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)\n                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)\n                window.statusBarColor = Color.TRANSPARENT\n                window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION\n                val mContentView = window.findViewById<View>(Window.ID_ANDROID_CONTENT) as ViewGroup\n                val mChildView = mContentView.getChildAt(0)\n                if (mChildView != null) {\n                    ViewCompat.setFitsSystemWindows(mChildView, false)\n                    ViewCompat.requestApplyInsets(mChildView)\n                }\n            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {\n                // 透明状态栏\n                activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)\n            }\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && toolbar != null) {\n                val statusBarHeight: Int = getStatusBarHeight(activity)\n                val layoutHeight = (if (statusBarHeight > 0) statusBarHeight else 36) + activity.getIntToDip(42f) as Int\n                val lp = toolbar.layoutParams\n                lp.height = layoutHeight\n                toolbar.setPadding(0, statusBarHeight, 0, 0)\n            }\n        } catch (e: Exception) {\n        }\n    }\n\n    fun translucentActivity(activity: Activity) {\n        try {\n            activity.window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))\n            activity.window.decorView.background = null\n            val activityOptions: Method = Activity::class.java.getDeclaredMethod(\"getActivityOptions\")\n            activityOptions.isAccessible = true\n            val option = activityOptions.invoke(activity)\n            val classes = Activity::class.java.declaredClasses\n            var aClass: Class<out Any>? = null\n            classes.forEach {\n                if (it.simpleName.contains(\"TranslucentConversionListener\")) {\n                    aClass = it\n                }\n            }\n            val method: Method = Activity::class.java.getDeclaredMethod(\"convertToTranslucent\", aClass, ActivityOptions::class.java)\n            method.isAccessible = true\n            method.invoke(activity, null, option)\n        } catch (e: Exception) {\n            e.printStackTrace()\n        }\n    }\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/WLog.kt",
    "content": "package com.wgllss.core.units\n\nimport com.wgllss.core.BuildConfig\n\nobject WLog {\n\n    fun e(any: Any, message: String) {\n        if (BuildConfig.DEBUG)\n            android.util.Log.e(any.javaClass.simpleName, message)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/viewmodel/BaseViewModel.kt",
    "content": "package com.wgllss.core.viewmodel\n\nimport androidx.lifecycle.MutableLiveData\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport com.wgllss.core.data.DialogBean\nimport com.wgllss.core.ex.flowOnIOAndCatch\nimport kotlinx.coroutines.cancel\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.collect\nimport kotlinx.coroutines.flow.onCompletion\nimport kotlinx.coroutines.flow.onStart\nimport kotlinx.coroutines.launch\n\nabstract class BaseViewModel : ViewModel() {\n    val ViewModel.errorMsgLiveData by lazy { MutableLiveData<String>() }\n    val ViewModel.showUIDialog by lazy { MutableLiveData<DialogBean>() }\n\n    fun ViewModel.show(strMessage: String = \"正在请求数据\") {\n        val showBean = showUIDialog.value ?: DialogBean(strMessage, true)\n        showBean.isShow = true\n        showBean.msg = strMessage\n        showUIDialog.postValue(showBean)\n    }\n\n    fun ViewModel.hide() {\n        val showBean = showUIDialog.value ?: DialogBean(\"\", true)\n        showBean.isShow = false\n        showUIDialog.postValue(showBean)\n    }\n\n    override fun onCleared() {\n        viewModelScope.cancel()\n    }\n\n    abstract fun start()\n\n    protected fun <T> Flow<T>.flowOnIOAndCatch(): Flow<T> = flowOnIOAndCatch(errorMsgLiveData)\n\n    protected fun <T> Flow<T>.onStartAndShow(strMessage: String = \"正在请求数据\"): Flow<T> = onStart {\n        show()\n    }\n\n    protected fun <T> Flow<T>.onCompletionAndHide(): Flow<T> = onCompletion {\n        hide()\n    }\n\n    protected suspend fun <T> Flow<T>.onStartShowAndFlowOnIOAndCatchAndOnCompletionAndHideAndCollect() {\n        onStartAndShow().onCompletionAndHide().flowOnIOAndCatch().collect()//这里，开始结束全放在异步里面处理\n    }\n\n    fun <T> flowAsyncWorkOnViewModelScopeLaunch(flowAsyncWork: suspend () -> Flow<T>) {\n        viewModelScope.launch {\n            flowAsyncWork.invoke().onStartShowAndFlowOnIOAndCatchAndOnCompletionAndHideAndCollect()\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/widget/ButtomNavigationViewEx.kt",
    "content": "package com.wgllss.core.widget\n\nimport android.view.View\nimport android.view.ViewGroup\nimport com.google.android.material.bottomnavigation.BottomNavigationView\n\n/**\n * 处理BottomNavigationView中的tab长按出现toast的问题\n *\n * @param ids tab项的id集\n */\nfun BottomNavigationView.clearLongClickToast(vararg ids: Int) {\n    val bottomNavigationView: ViewGroup = getChildAt(0) as ViewGroup\n    for (position in ids.indices) {\n        bottomNavigationView.getChildAt(position).findViewById<View>(ids[position])\n            .setOnLongClickListener { true }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/widget/DividerGridItemDecoration.kt",
    "content": "package com.wgllss.core.widget\n\nimport android.content.Context\nimport android.graphics.Canvas\nimport android.graphics.Color\nimport android.graphics.Rect\nimport android.graphics.drawable.Drawable\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.ImageView\nimport androidx.recyclerview.widget.GridLayoutManager\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport androidx.recyclerview.widget.RecyclerView\nimport androidx.recyclerview.widget.StaggeredGridLayoutManager\n\nclass DividerGridItemDecoration : RecyclerView.ItemDecoration {\n\n    var ItemDecorationView //间隔视图\n            : View? = null\n    var ItemDecorationViewDrawble //间隔视图的drawble\n            : Drawable? = null\n    var ItemDecorationViewWidth = 0 //间隔视图的宽度\n\n    var ItemDecorationViewHeight = 0 //间隔视图的高度\n\n\n    constructor(context: Context?, orientation: Int, ItemDecorationView: View?) {\n        //判断传入的view以及传入的view的params是否为空，若其中一个为空则使用默认样式\n        var ItemDecorationView = ItemDecorationView\n        if (ItemDecorationView == null || ItemDecorationView.layoutParams == null) {\n            ItemDecorationView = ImageView(context)\n            ItemDecorationView.setLayoutParams(ViewGroup.LayoutParams(5, 5))\n            ItemDecorationView.setBackgroundColor(Color.parseColor(\"#EEEEEE\"))\n        }\n        this.ItemDecorationView = ItemDecorationView\n        this.ItemDecorationView!!.measure(0, 0)\n        this.ItemDecorationViewDrawble = ItemDecorationView.background\n        if (this.ItemDecorationView!!.getMeasuredHeight() >= 0) {\n            ItemDecorationViewHeight = this.ItemDecorationView!!.getMeasuredHeight()\n        }\n        if (this.ItemDecorationView!!.getMeasuredWidth() >= 0) {\n            ItemDecorationViewWidth = this.ItemDecorationView!!.getMeasuredWidth()\n        }\n        if (ItemDecorationView.layoutParams.height >= 0) {\n            ItemDecorationViewHeight = ItemDecorationView.layoutParams.height\n        }\n        if (ItemDecorationView.layoutParams.width >= 0) {\n            ItemDecorationViewWidth = ItemDecorationView.layoutParams.width\n        }\n    }\n\n    override fun onDraw(c: Canvas, parent: RecyclerView) {\n        drawHorizontal(c, parent!!)\n        drawVertical(c, parent)\n    }\n\n    open fun getSpanCount(parent: RecyclerView): Int {\n        // 列数\n        var spanCount = 1\n        val layoutManager = parent.layoutManager\n        if (layoutManager is GridLayoutManager) {\n            spanCount = layoutManager.spanCount\n        } else if (layoutManager is StaggeredGridLayoutManager) {\n            spanCount = layoutManager\n                .spanCount\n        }\n        return spanCount\n    }\n\n    open fun drawHorizontal(c: Canvas, parent: RecyclerView) {\n        val childCount = parent.childCount\n        for (i in 0 until childCount) {\n            val child = parent.getChildAt(i)\n            val params = child\n                .layoutParams as RecyclerView.LayoutParams\n            val left = child.left - params.leftMargin\n            val right = (child.right + params.rightMargin\n                    + ItemDecorationViewWidth)\n            val top = child.bottom + params.bottomMargin\n            val bottom = top + ItemDecorationViewHeight\n            ItemDecorationViewDrawble!!.setBounds(left, top, right, bottom)\n            ItemDecorationViewDrawble!!.draw(c)\n        }\n    }\n\n    open fun drawVertical(c: Canvas, parent: RecyclerView) {\n        val childCount = parent.childCount\n        val spanCount = getSpanCount(parent)\n        for (i in 0 until childCount) {\n            val child = parent.getChildAt(i)\n            val params = child\n                .layoutParams as RecyclerView.LayoutParams\n            val top = child.top - params.topMargin\n            val bottom = child.bottom + params.bottomMargin\n            val left = child.right + params.rightMargin\n            var right = left + ItemDecorationViewWidth\n            if ((i + 1) % spanCount == 0) { //最后一列\n                right = left\n            }\n            ItemDecorationViewDrawble!!.setBounds(left, top, right, bottom)\n            ItemDecorationViewDrawble!!.draw(c)\n        }\n    }\n\n    open fun isLastColum(\n        parent: RecyclerView, pos: Int, spanCount: Int,\n        childCount: Int\n    ): Boolean {\n        var childCount = childCount\n        parent.addOnItemTouchListener(object : OnRecyclerViewItemClickListener(parent) {\n            override fun onItemClickListener(viewHolder: RecyclerView.ViewHolder?, position: Int){\n                super.onItemClickListener(viewHolder, position)\n            }\n\n            override fun onItemLongClickListener(viewHolder: RecyclerView.ViewHolder?, position: Int) {\n                super.onItemLongClickListener(viewHolder, position)\n            }\n        })\n        val layoutManager = parent.layoutManager\n        if (layoutManager is GridLayoutManager) {\n            if ((pos + 1) % spanCount == 0) // 如果是最后一列，则不需要绘制右边\n            {\n                return true\n            }\n        } else if (layoutManager is StaggeredGridLayoutManager) {\n            val orientation = layoutManager\n                .orientation\n            if (orientation == StaggeredGridLayoutManager.VERTICAL) {\n                if ((pos + 1) % spanCount == 0) // 如果是最后一列，则不需要绘制右边\n                {\n                    return true\n                }\n            } else {\n                childCount = childCount - childCount % spanCount\n                if (pos >= childCount) // 如果是最后一列，则不需要绘制右边\n                    return true\n            }\n        } else if (layoutManager is LinearLayoutManager) {\n            val orientation = layoutManager\n                .orientation\n            if (orientation == LinearLayoutManager.HORIZONTAL) {\n                // 如果是最后一行，则不需要绘制底部\n                if (pos + 1 >= childCount) return true\n            }\n        }\n        return false\n    }\n\n    open fun isLastRaw(\n        parent: RecyclerView, pos: Int, spanCount: Int,\n        childCount: Int\n    ): Boolean {\n        var childCount = childCount\n        val layoutManager = parent.layoutManager\n        if (layoutManager is GridLayoutManager) {\n            childCount = childCount - childCount % spanCount\n            if (pos >= childCount) // 如果是最后一行，则不需要绘制底部\n                return true\n        } else if (layoutManager is StaggeredGridLayoutManager) {\n            val orientation = layoutManager\n                .orientation\n            // StaggeredGridLayoutManager 且纵向滚动\n            if (orientation == StaggeredGridLayoutManager.VERTICAL) {\n                childCount = childCount - childCount % spanCount\n                // 如果是最后一行，则不需要绘制底部\n                if (pos >= childCount) return true\n            } else  // StaggeredGridLayoutManager 且横向滚动\n            {\n                // 如果是最后一行，则不需要绘制底部\n                if ((pos + 1) % spanCount == 0) {\n                    return true\n                }\n            }\n        } else if (layoutManager is LinearLayoutManager) {\n            val orientation = layoutManager\n                .orientation\n            if (orientation == LinearLayoutManager.VERTICAL) {\n                // 如果是最后一行，则不需要绘制底部\n                if (pos + 1 >= childCount) return true\n            } else {\n                return true\n            }\n        }\n        return false\n    }\n\n    override fun getItemOffsets(\n        outRect: Rect, itemPosition: Int,\n        parent: RecyclerView\n    ) {\n        val spanCount = getSpanCount(parent)\n        val childCount = parent.adapter!!.itemCount\n        if (isLastRaw(parent, itemPosition, spanCount, childCount)) // 如果是最后一行，则不需要绘制底部\n        {\n            outRect[0, 0, ItemDecorationViewWidth] = 0\n            //        } else if (isLastColum(parent, itemPosition, spanCount, childCount))// 如果是最后一列，则不需要绘制右边\n//        {\n//            outRect.set(0, 0, 0, ItemDecorationViewHeight);\n        } else {\n            outRect[0, 0, ItemDecorationViewWidth] = ItemDecorationViewHeight\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/widget/DrawerBack.kt",
    "content": "package com.wgllss.core.widget\n\nimport android.R\nimport android.annotation.SuppressLint\nimport android.app.Activity\nimport android.graphics.Canvas\nimport android.graphics.Color\nimport android.graphics.Rect\nimport android.os.Handler\nimport android.view.*\nimport android.view.animation.Interpolator\nimport android.widget.FrameLayout\nimport android.widget.LinearLayout\nimport android.widget.ListView\nimport android.widget.Scroller\n\nclass DrawerBack(activity: Activity) : FrameLayout(activity) {\n    companion object {\n        private const val SLIDE_TARGET_CONTENT = 0\n        private const val SLIDE_TARGET_WINDOW = 1\n        private const val SCROLL_DURATION = 400\n        private const val TOUCH_TARGET_WIDTH_DIP = 30\n        private const val TOUCH_HANDLE_WIDTH_DIP = 1.33f // 屏幕左侧4分之3\n    }\n\n    private var mAdded = false\n    private var mDrawerEnabled = true\n    private var mDrawerOpened = false\n    private var mDrawerMoving = false\n    private var mGestureStarted = false\n    private var mDecorOffsetX = 0\n    private var mGestureStartX = 0\n    private var mGestureCurrentX = 0\n    private var mGestureStartY = 0\n    private var mGestureCurrentY = 0\n    private var mSlideTarget = 0\n    private var mTouchTargetWidth = 0\n    private var mScrollerHandler: Handler? = null\n    private var mScroller: Scroller? = null\n    private var mDecorView: ViewGroup? = null\n    private var mContentTarget: ViewGroup? = null\n    private var mContentTargetParent: ViewGroup? = null\n    private var mWindowTarget: ViewGroup? = null\n    private var mWindowTargetParent: ViewGroup? = null\n    private var mDecorContent: ViewGroup? = null\n    private var mDecorContentParent: ViewGroup? = null\n    private var mDrawerContent: LinearLayout? = null\n    private var mVelocityTracker: VelocityTracker? = null\n    private var mOnOpenDrawerCompleteListener: OnOpenDrawerCompleteListener? = null\n\n    private var mLastMotionX = 0f\n    private var mLastMotionY = 0f\n\n    private var qx = 0f\n    private var qy = 0f\n\n    init {\n        val dm = activity.resources.displayMetrics\n        mTouchTargetWidth = dm.widthPixels / TOUCH_TARGET_WIDTH_DIP\n        mScrollerHandler = Handler()\n        mScroller = Scroller(activity, SmoothInterpolator())\n        mSlideTarget = SLIDE_TARGET_WINDOW\n        mDecorView = activity.window.decorView as ViewGroup\n        mWindowTarget = mDecorView!!.getChildAt(0) as ViewGroup\n        mWindowTargetParent = mWindowTarget!!.parent as ViewGroup\n        mContentTarget = mDecorView!!.findViewById<View>(R.id.content) as ViewGroup\n        mContentTargetParent = mContentTarget!!.parent as ViewGroup\n        mDrawerContent = LinearLayout(context)\n        mDrawerContent!!.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT)\n        mDrawerContent!!.setBackgroundColor(Color.TRANSPARENT)\n        reconfigureViewHierarchy()\n        mDrawerContent!!.setPadding(0, 0, mTouchTargetWidth, 0)\n\n    }\n\n    class SmoothInterpolator : Interpolator {\n        override fun getInterpolation(v: Float): Float {\n            return (Math.pow(v.toDouble() - 1.0, 5.0) + 1.0f).toFloat()\n        }\n    }\n\n    private fun reconfigureViewHierarchy() {\n        if (mDecorView == null) {\n            return\n        }\n        if (mDrawerContent != null) {\n            removeView(mDrawerContent)\n        }\n        if (mDecorContent != null) {\n            removeView(mDecorContent)\n            mDecorContentParent!!.addView(mDecorContent)\n            mDecorContent!!.setOnClickListener(null)\n            mDecorContent!!.setBackgroundColor(Color.TRANSPARENT)\n        }\n        if (mAdded) {\n            mDecorContentParent!!.removeView(this)\n        }\n        if (mSlideTarget == SLIDE_TARGET_CONTENT) {\n            mDecorContent = mContentTarget\n            mDecorContentParent = mContentTargetParent\n        } else if (mSlideTarget == SLIDE_TARGET_WINDOW) {\n            mDecorContent = mWindowTarget\n            mDecorContentParent = mWindowTargetParent\n        } else {\n            throw IllegalArgumentException(\"Slide target must be one of SLIDE_TARGET_CONTENT or SLIDE_TARGET_WINDOW.\")\n        }\n        (mDecorContent!!.parent as ViewGroup).removeView(mDecorContent)\n        addView(mDrawerContent)\n        addView(mDecorContent, LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT))\n        mDecorContentParent!!.addView(this)\n        mAdded = true\n        mDecorContent!!.setBackgroundColor(Color.TRANSPARENT)\n        mDecorContent!!.setOnClickListener { }\n    }\n\n    @SuppressLint(\"DrawAllocation\")\n    override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {\n        val windowRect = Rect()\n        mDecorView!!.getWindowVisibleDisplayFrame(windowRect)\n        if (mSlideTarget == SLIDE_TARGET_WINDOW) {\n            mDrawerContent!!.layout(left, top + windowRect.top, right, bottom)\n        } else {\n            mDrawerContent!!.layout(left, mDecorContent!!.top, right, bottom)\n        }\n        mDecorContent!!.layout(mDecorContent!!.left, mDecorContent!!.top, mDecorContent!!.left + right, bottom)\n    }\n\n    override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {\n        val vc = ViewConfiguration.get(context)\n        val widthPixels = resources.displayMetrics.widthPixels\n        val touchThreshold = widthPixels / TOUCH_HANDLE_WIDTH_DIP\n        val hypo: Double\n        val overcameSlop: Boolean\n        if (!mDrawerEnabled) {\n            return false\n        }\n        val x = ev.x\n        val y = ev.y\n        when (ev.action) {\n            MotionEvent.ACTION_DOWN -> {\n                mLastMotionX = x\n                mLastMotionY = y\n                mGestureCurrentX = (ev.x + 0.5f).toInt()\n                mGestureStartX = mGestureCurrentX\n                mGestureCurrentY = (ev.y + 0.5f).toInt()\n                mGestureStartY = mGestureCurrentY\n                if (mGestureStartX < touchThreshold && !mDrawerOpened) {\n                    mGestureStarted = true\n                }\n                if (mGestureStartX > widthPixels - mTouchTargetWidth && mDrawerOpened) {\n                    mGestureStarted = true\n                }\n                return false\n            }\n            MotionEvent.ACTION_MOVE -> {\n                val dx = x - mLastMotionX\n                val dy = y - mLastMotionY\n                val xDiff = Math.abs(dx)\n                val yDiff = Math.abs(y - mLastMotionY)\n                if (xDiff > vc.scaledTouchSlop && Math.abs(xDiff) > Math.abs(yDiff) && Math.abs(dy) < Math.abs(vc.scaledTouchSlop / 1)) {\n                } else {\n                    return false\n                }\n                if (!mGestureStarted) {\n                    return false\n                }\n                if (!mDrawerOpened && (ev.x < mGestureCurrentX || ev.x < mGestureStartX)) {\n                    return false.also { mGestureStarted = it }\n                }\n                mGestureCurrentX = (ev.x + 0.5f).toInt()\n                mGestureCurrentY = (ev.y + 0.5f).toInt()\n                hypo = Math.hypot((mGestureCurrentX - mGestureStartX).toDouble(), (mGestureCurrentY - mGestureStartY).toDouble())\n                overcameSlop = hypo > vc.scaledTouchSlop\n                return overcameSlop\n            }\n            MotionEvent.ACTION_UP -> {\n                if (mGestureStartX > widthPixels - mTouchTargetWidth && mDrawerOpened) {\n                    closeDrawer()\n                }\n                mGestureStarted = false\n                mGestureCurrentX = -1\n                mGestureStartX = mGestureCurrentX\n                mGestureCurrentY = -1\n                mGestureStartY = mGestureCurrentY\n                return false\n            }\n        }\n        return false\n    }\n\n    @SuppressLint(\"Recycle\")\n    override fun onTouchEvent(event: MotionEvent): Boolean {\n        val vc = ViewConfiguration.get(context)\n        val widthPixels = resources.displayMetrics.widthPixels\n        val deltaX = (event.x + 0.5f).toInt() - mGestureCurrentX\n        val deltaY = (event.y + 0.5f).toInt() - mGestureCurrentY\n        if (mVelocityTracker == null) {\n            mVelocityTracker = VelocityTracker.obtain()\n        }\n        mVelocityTracker!!.addMovement(event)\n        mGestureCurrentX = (event.x + 0.5f).toInt()\n        mGestureCurrentY = (event.y + 0.5f).toInt()\n        when (event.action) {\n            MotionEvent.ACTION_MOVE -> {\n                mDrawerMoving = true\n                if (mDecorOffsetX + deltaX > widthPixels - mTouchTargetWidth) {\n                    if (mDecorOffsetX != widthPixels - mTouchTargetWidth) {\n                        mDrawerOpened = true\n                        mDecorContent!!.offsetLeftAndRight(widthPixels - mTouchTargetWidth - mDecorOffsetX)\n                        mDecorOffsetX = widthPixels - mTouchTargetWidth\n                        invalidate()\n                    }\n                } else if (mDecorOffsetX + deltaX < 0) {\n                    if (mDecorOffsetX != 0) {\n                        mDrawerOpened = false\n                        mDecorContent!!.offsetLeftAndRight(0 - mDecorContent!!.left)\n                        mDecorOffsetX = 0\n                        invalidate()\n                    }\n                } else {\n                    if (mOnOpenDrawerCompleteListener != null && mOnOpenDrawerCompleteListener!!.onMoveRight()) {\n                    } else {\n                        mDecorContent!!.offsetLeftAndRight(deltaX)\n                        mDecorOffsetX += deltaX\n                        invalidate()\n                        return false\n                    }\n                }\n                return true\n            }\n            MotionEvent.ACTION_UP -> {\n                qx = mGestureCurrentX.toFloat()\n                qy = mGestureCurrentY.toFloat()\n                mGestureStarted = false\n                mDrawerMoving = false\n                mVelocityTracker!!.computeCurrentVelocity(1000)\n                if (Math.abs(mVelocityTracker!!.xVelocity) > vc.scaledMinimumFlingVelocity) {\n                    if (mVelocityTracker!!.xVelocity > 0 && mDecorOffsetX > widthPixels / 5.0) {\n                        mDrawerOpened = false\n                        openDrawer()\n                    } else {\n                        mDrawerOpened = true\n                        closeDrawer()\n                    }\n                } else {\n                    if (mDecorOffsetX > widthPixels / 5.0) {\n                        mDrawerOpened = false\n                        openDrawer()\n                    } else {\n                        mDrawerOpened = true\n                        closeDrawer()\n                    }\n                }\n                return true\n            }\n        }\n        return false\n    }\n\n    override fun dispatchDraw(canvas: Canvas) {\n        super.dispatchDraw(canvas)\n        if (mDrawerOpened || mDrawerMoving) {\n            canvas.save()\n            canvas.translate(mDecorOffsetX.toFloat(), 0f)\n            canvas.restore()\n        }\n    }\n\n    fun setOnDrawerBackEnabled(enabled: Boolean) {\n        mDrawerEnabled = enabled\n    }\n\n    fun isDrawerEnabled(): Boolean {\n        return mDrawerEnabled\n    }\n\n    fun toggleDrawer(animate: Boolean) {\n        if (!mDrawerOpened) {\n            openDrawer(animate)\n        } else {\n            closeDrawer(animate)\n        }\n    }\n\n    fun toggleDrawer() {\n        toggleDrawer(true)\n    }\n\n    fun openDrawer(animate: Boolean) {\n        if (mDrawerOpened || mDrawerMoving) {\n            return\n        }\n        mDrawerMoving = true\n        val widthPixels = resources.displayMetrics.widthPixels\n        mScroller!!.startScroll(mDecorOffsetX, 0, widthPixels - mDecorOffsetX, 0, if (animate) SCROLL_DURATION else 0)\n        mScrollerHandler!!.postDelayed(object : Runnable {\n            override fun run() {\n                val scrolling = mScroller!!.computeScrollOffset()\n                mDecorContent!!.offsetLeftAndRight(mScroller!!.currX - mDecorOffsetX)\n                mDecorOffsetX = mScroller!!.currX\n                postInvalidate()\n                if (!scrolling) {\n                    mDrawerMoving = false\n                    mDrawerOpened = true\n                    mScrollerHandler!!.post {\n                        enableDisableViewGroup(mDecorContent, false)\n                        mOnOpenDrawerCompleteListener?.onOpenDrawerComplete()\n                    }\n                } else {\n                    mScrollerHandler!!.postDelayed(this, 16)\n                }\n            }\n        }, 16)\n    }\n\n    fun openDrawer() {\n        openDrawer(true)\n    }\n\n    fun closeDrawer(animate: Boolean) {\n        if (!mDrawerOpened || mDrawerMoving) {\n            return\n        }\n        mDrawerMoving = true\n        val widthPixels = resources.displayMetrics.widthPixels\n        mScroller!!.startScroll(mDecorOffsetX, 0, -mDecorOffsetX, 0, if (animate) SCROLL_DURATION else 0)\n        mScrollerHandler!!.postDelayed(object : Runnable {\n            override fun run() {\n                val scrolling = mScroller!!.computeScrollOffset()\n                mDecorContent!!.offsetLeftAndRight(mScroller!!.currX - mDecorOffsetX)\n                mDecorOffsetX = mScroller!!.currX\n                postInvalidate()\n                if (!scrolling) {\n                    mDrawerMoving = false\n                    mDrawerOpened = false\n                    // if (mDrawerCallbacks != null) {\n                    // mScrollerHandler.post(new Runnable() {\n                    // @Override\n                    // public void run() {\n                    // enableDisableViewGroup(mDecorContent, true);\n                    // mDrawerCallbacks.onDrawerClosed();\n                    // }\n                    // });\n                    // }\n                } else {\n                    mScrollerHandler!!.postDelayed(this, 16)\n                }\n            }\n        }, 16)\n    }\n\n    fun closeDrawer() {\n        closeDrawer(true)\n    }\n\n    fun isDrawerOpened(): Boolean {\n        return mDrawerOpened\n    }\n\n    fun isDrawerMoving(): Boolean {\n        return mDrawerMoving\n    }\n\n    fun setOnOpenDrawerCompleteListener(mOnOpenDrawerCompleteListener: OnOpenDrawerCompleteListener?) {\n        this.mOnOpenDrawerCompleteListener = mOnOpenDrawerCompleteListener\n    }\n\n    fun getSlideTarget(): Int {\n        return mSlideTarget\n    }\n\n    fun setSlideTarget(slideTarget: Int) {\n        if (mSlideTarget != slideTarget) {\n            mSlideTarget = slideTarget\n            reconfigureViewHierarchy()\n        }\n    }\n\n    fun enableDisableViewGroup(viewGroup: ViewGroup?, enabled: Boolean) {\n        val childCount = viewGroup!!.childCount\n        for (i in 0 until childCount) {\n            val view = viewGroup.getChildAt(i)\n            if (view.isFocusable) {\n                view.isEnabled = enabled\n            }\n            if (view is ViewGroup) {\n                enableDisableViewGroup(view, enabled)\n            } else if (view is ListView) {\n                if (view.isFocusable()) {\n                    view.setEnabled(enabled)\n                }\n                val listView = view\n                val listChildCount = listView.childCount\n                for (j in 0 until listChildCount) {\n                    if (view.isFocusable()) {\n                        listView.getChildAt(j).isEnabled = false\n                    }\n                }\n            }\n        }\n    }\n\n    interface OnOpenDrawerCompleteListener {\n        fun onOpenDrawerComplete()\n        fun onMoveRight(): Boolean\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/widget/MusicVisualizerView.kt",
    "content": "package com.wgllss.core.widget\n\nimport android.content.Context\nimport android.graphics.Canvas\nimport android.graphics.Paint\nimport android.util.AttributeSet\nimport android.util.TypedValue\nimport android.view.View\nimport java.util.*\n\nclass MusicVisualizerView constructor(context: Context, attrs: AttributeSet) : View(context, attrs) {\n    private var random = Random()\n    private var paint = Paint()\n    private val animateView: Runnable = object : Runnable {\n        override fun run() {\n            //run every 100 ms\n            postDelayed(this, 120)\n            invalidate()\n        }\n    }\n\n    init {\n        //start runnable\n        removeCallbacks(animateView)\n        post(animateView)\n    }\n\n    override fun onDraw(canvas: Canvas) {\n        super.onDraw(canvas)\n\n        //set paint style, Style.FILL will fill the color, Style.STROKE will stroke the color\n        paint.style = Paint.Style.FILL\n        canvas.drawRect(getDimensionInPixel(0).toFloat(), (height - (40 + random.nextInt((height / 1.5f).toInt() - 25))).toFloat(), getDimensionInPixel(7).toFloat(), (height - 15).toFloat(), paint)\n        canvas.drawRect(getDimensionInPixel(10).toFloat(), (height - (40 + random.nextInt((height / 1.5f).toInt() - 25))).toFloat(), getDimensionInPixel(17).toFloat(), (height - 15).toFloat(), paint)\n        canvas.drawRect(getDimensionInPixel(20).toFloat(), (height - (40 + random.nextInt((height / 1.5f).toInt() - 25))).toFloat(), getDimensionInPixel(27).toFloat(), (height - 15).toFloat(), paint)\n    }\n\n    fun setColor(color: Int) {\n        paint.color = color\n        invalidate()\n    }\n\n    //get all dimensions in dp so that views behaves properly on different screen resolutions\n    private fun getDimensionInPixel(dp: Int): Int {\n        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp.toFloat(), resources.displayMetrics).toInt()\n    }\n\n    override fun onWindowVisibilityChanged(visibility: Int) {\n        super.onWindowVisibilityChanged(visibility)\n        if (visibility == VISIBLE) {\n            removeCallbacks(animateView)\n            post(animateView)\n        } else if (visibility == GONE) {\n            removeCallbacks(animateView)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/widget/OnRecyclerViewItemClickListener.kt",
    "content": "package com.wgllss.core.widget\n\nimport android.view.GestureDetector\nimport android.view.MotionEvent\nimport android.view.View\nimport androidx.core.view.GestureDetectorCompat\nimport androidx.recyclerview.widget.RecyclerView\n\nopen class OnRecyclerViewItemClickListener constructor(val recyclerView: RecyclerView) : RecyclerView.OnItemTouchListener {\n\n    private lateinit var gestureDetectorCompat: GestureDetectorCompat\n\n    init {\n        gestureDetectorCompat = GestureDetectorCompat(recyclerView.context, object : GestureDetector.SimpleOnGestureListener() {\n            override fun onLongPress(e: MotionEvent) {\n                trasfomerItemEvent(e, 1)\n            }\n\n            override fun onSingleTapUp(e: MotionEvent): Boolean {\n                trasfomerItemEvent(e, 0)\n                return true\n            }\n        })\n    }\n\n    private fun trasfomerItemEvent(e: MotionEvent, type: Int) {\n        recyclerView?.let {\n            it.findChildViewUnder(e.x, e.y)\n        }?.apply {\n            val viewHolder = recyclerView.getChildViewHolder(this)\n            val position = recyclerView.getChildPosition(this)\n            if (type == 0) {\n                onItemClickListener(this, position)\n            } else {\n                onItemLongClickListener(this, position)\n            }\n        }\n    }\n\n    open fun onItemClickListener(itemRootView: View, position: Int) {}\n\n    open fun onItemLongClickListener(itemRootView: View, position: Int) {}\n\n    open fun onItemClickListener(viewHolder: RecyclerView.ViewHolder?, position: Int) {}\n\n    open fun onItemLongClickListener(viewHolder: RecyclerView.ViewHolder?, position: Int) {}\n\n    override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean {\n        gestureDetectorCompat.onTouchEvent(e)\n        return false\n    }\n\n    override fun onTouchEvent(rv: RecyclerView, e: MotionEvent) {\n        gestureDetectorCompat.onTouchEvent(e)\n    }\n\n    override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {}\n\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-all-app/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-all-app/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n    alias(libs.plugins.jetbrains.kotlin.android)\n    alias(libs.plugins.kotlin.kapt)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.version.json\"\n\n    defaultConfig {\n        applicationId \"com.wgllss.dynamic.version.json\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n\n    kapt {\n        generateStubs = true\n    }\n}\n\ndependencies {\n    implementation project(path: ':wgllss-sample-create-version-config-annotations')\n    kapt project(path: ':wgllss-sample-create-version-config-compiler')\n}\n\n\ndef createVersionJson(assembleReleaseTask, buildType) {\n    def inputFile = file(\"${getProject().getBuildDir()}/outputs/apk/vc\")\n    def outputFile = file(\"${rootProject.getBuildDir()}/vc\")\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n\n    def inputFileJar = file(\"${project(\":wgllss-sample-loader-version\").getBuildDir()}/intermediates/aar_main_jar/release/syncReleaseLibJars/classes.jar\")\n    def outputSrcFile = file(\"${project(\":wgllss-sample-create-version-config-compiler\").projectDir}/libs/classes.jar\")\n    def assembleCopyJarToLibs = tasks.create(\"assembleCopyJarToLibs\") {\n        doLast {\n            if (outputSrcFile.exists()) {\n                outputSrcFile.delete()\n            }\n            copy {\n                from(inputFileJar.getParent()) {\n                    include(inputFileJar.name)\n                    rename { outputSrcFile.name }\n                }\n                into(outputSrcFile.getParent())\n            }\n        }\n    }.dependsOn(\":wgllss-sample-loader-version:assembleDxCommandAndCopy\")\n            .dependsOn(\":wgllss-sample-loader-version:assembleRelease\")\n\n\n    return tasks.create(\"assembleCreateAllFile${buildType.capitalize()}\") {\n        doLast {\n            copy {\n                from(inputFile.getParent()) {\n                    include(inputFile.name)\n                    rename { outputFile.name }\n                }\n                into(outputFile.getParent())\n            }\n        }\n    }.dependsOn(assembleReleaseTask.name)\n            .dependsOn(assembleCopyJarToLibs.name)\n\n            .dependsOn(\":Wgllss-Dynamic-Plugin-RunTime-Apk:assembleCopy\")\n\n            .dependsOn(\":wgllss-sample-ui-other-lib:assembleDxCommandAndCopy\")\n\n            .dependsOn(\":wgllss-sample-ui-other2-lib2:assembleDxCommandAndCopy\")\n\n            .dependsOn(\":wgllss-sample-ui-other2:assembleCopy\")\n            .dependsOn(\":wgllss-sample-ui-other:assembleCopy\")\n\n            .dependsOn(\":wgllss-sample-ui-loading:assembleDxCommandAndCopy\")\n\n            .dependsOn(\":wgllss-sample-ui-home:assembleDxCommandAndCopy\")\n\n            .dependsOn(\":wgllss-sample-assets-source-apk:assembleCopy\")\n            .dependsOn(\":wgllss-sample-skin-resource-apk:assembleCopy\")\n\n            .dependsOn(\":Wgllss-Dynamic-Plugin-Manager:assembleDxCommandAndCopy\")\n            .dependsOn(\":wgllss-sample-business-library:assembleDxCommandAndCopy\")\n            .dependsOn(\":Wgllss-Dynamic-Plugin-Common-Library:assembleDxCommandAndCopy\")\n}\n\ntasks.whenTaskAdded { task ->\n    if (task.name == \"assembleRelease\") {\n        createVersionJson(task, \"Release\")\n    }\n//    if (task.name == \"cleanJson\") {\n//        createVersionJson(task, \"Release\")\n//    }\n}\n\ntask assemblecleanJson(type: Delete) {\n    delete buildDir\n}\n\n\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-all-app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-all-app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.version.json\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-all-app/src/main/java/com/wgllss/dynamic/version/json/Test.kt",
    "content": "package com.wgllss.dynamic.version.json\n\nimport com.wgllss.annotations.CreateVersionConfig\n\n@CreateVersionConfig\nclass Test {\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-annotations/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-annotations/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.java.library)\n    alias(libs.plugins.java.kotlin)\n}\n\njava {\n    sourceCompatibility = JavaVersion.VERSION_21\n    targetCompatibility = JavaVersion.VERSION_21\n}\n\ndependencies {\n    implementation libs.kotlin.stdlib\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-annotations/src/main/java/com/wgllss/annotations/CreateVersionConfig.kt",
    "content": "package com.wgllss.annotations\n\n\n@Suppress(\"SupportAnnotationUsage\")\n@Target(AnnotationTarget.CLASS)\n@Retention(AnnotationRetention.RUNTIME)\nannotation class CreateVersionConfig {\n\n}\n\n\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-app/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-app/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n    alias(libs.plugins.jetbrains.kotlin.android)\n    alias(libs.plugins.kotlin.kapt)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.version.json\"\n\n    defaultConfig {\n        applicationId \"com.wgllss.dynamic.version.json\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n\n    kapt {\n        generateStubs = true\n    }\n}\n\ndependencies {\n    implementation project(path: ':wgllss-sample-create-version-config-annotations')\n    kapt project(path: ':wgllss-sample-create-version-config-compiler')\n}\n\n\ndef createVersionJson(assembleReleaseTask, buildType) {\n    def inputFile = file(\"${getProject().getBuildDir()}/outputs/apk/vc\")\n    def outputFile = file(\"${rootProject.getBuildDir()}/vc\")\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFileJar = file(\"${project(\":wgllss-sample-loader-version\").getBuildDir()}/intermediates/aar_main_jar/release/syncReleaseLibJars/classes.jar\")\n    def outputSrcFile = file(\"${project(\":wgllss-sample-create-version-config-compiler\").projectDir}/libs/classes.jar\")\n    def assembleCopyJarToLibs = tasks.create(\"assembleCopyJarToLibs\") {\n        doLast {\n            if (outputSrcFile.exists()) {\n                outputSrcFile.delete()\n            }\n            copy {\n                from(inputFileJar.getParent()) {\n                    include(inputFileJar.name)\n                    rename { outputSrcFile.name }\n                }\n                into(outputSrcFile.getParent())\n            }\n        }\n    }.dependsOn(\":wgllss-sample-loader-version:assembleDxCommandAndCopy\")\n            .dependsOn(\":wgllss-sample-loader-version:assembleRelease\")\n\n    return tasks.create(\"assembleCreateVersion2File${buildType.capitalize()}\") {\n        doLast {\n            copy {\n                from(inputFile.getParent()) {\n                    include(inputFile.name)\n                    rename { outputFile.name }\n                }\n                into(outputFile.getParent())\n            }\n        }\n    }.dependsOn(assembleReleaseTask.name)\n            .dependsOn(assembleCopyJarToLibs.name)\n}\n\ntasks.whenTaskAdded { task ->\n    if (task.name == \"assembleRelease\") {\n        createVersionJson(task, \"Release\")\n    }\n//    if (task.name == \"cleanJson\") {\n//        createVersionJson(task, \"Release\")\n//    }\n}\n\ntask assemblecleanJson(type: Delete) {\n    delete buildDir\n}\n\n\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.version.json\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-app/src/main/java/com/wgllss/dynamic/version/json/Test.kt",
    "content": "package com.wgllss.dynamic.version.json\n\nimport com.wgllss.annotations.CreateVersionConfig\n\n@CreateVersionConfig\nclass Test {\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-compiler/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-compiler/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.java.library)\n    alias(libs.plugins.java.kotlin)\n    alias(libs.plugins.java)\n    alias(libs.plugins.kotlin.kapt)\n}\n\njava {\n    sourceCompatibility = JavaVersion.VERSION_21\n    targetCompatibility = JavaVersion.VERSION_21\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    implementation libs.protobuf\n    implementation libs.auto.service\n    kapt libs.auto.service\n    compileOnly libs.kotlin.stdlib\n    implementation libs.kotlinpoet\n\n    implementation project(path: ':wgllss-sample-create-version-config-annotations')\n//    implementation files(\"${project(\":wgllss-sample-loader-version\").getBuildDir()}/intermediates/aar_main_jar/release/syncReleaseLibJars/classes.jar\")\n\n\n//    implementation project(path: ':Wgllss-Dynamic-Host-Constant-Lib')\n//    implementation project(path: ':Wgllss-Dynamic-Host-Version-Lib')\n    implementation project(path: ':Wgllss-Dynamic-Host-Version-Lib')\n\n//    implementation 'io.github.wgllss:Wgllss-Dynamic-Host-Constant-Lib:1.0.0.6'\n//    implementation 'io.github.wgllss:Wgllss-Dynamic-Host-Version-Lib:1.0.0.7'\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-compiler/src/main/java/com/wgllss/compiler/AptCreateConfigProcessor.kt",
    "content": "package com.wgllss.compiler\n\nimport com.google.auto.service.AutoService\nimport com.wgllss.annotations.CreateVersionConfig\nimport com.wgllss.dynamic.host.lib.protobuf.PluginMode\nimport com.wgllss.loader.version.LoaderVersionImpl\nimport java.io.File\nimport java.io.FileOutputStream\nimport java.io.IOException\nimport javax.annotation.processing.*\nimport javax.lang.model.SourceVersion\nimport javax.lang.model.element.TypeElement\nimport javax.lang.model.util.Elements\nimport javax.tools.Diagnostic\nimport javax.tools.FileObject\nimport javax.tools.StandardLocation\n\n@AutoService(Processor::class)\nclass AptCreateConfigProcessor : AbstractProcessor() {\n    private val OUTPUT_FILE_NAME = \"vc\"\n    private var mFiler: Filer? = null\n    private var mElementUtils: Elements? = null\n\n    override fun init(processingEnv: ProcessingEnvironment?) {\n        super.init(processingEnv)\n        mFiler = processingEnv?.filer\n        mElementUtils = processingEnv?.elementUtils\n    }\n\n    //指定处理的版本\n    override fun getSupportedSourceVersion(): SourceVersion {\n        return SourceVersion.latestSupported()\n    }\n\n    //给到需要处理的注解\n    override fun getSupportedAnnotationTypes(): MutableSet<String> {\n        val types: LinkedHashSet<String> = LinkedHashSet()\n        getSupportedAnnotations().forEach { clazz: Class<out Annotation> ->\n            types.add(clazz.canonicalName)\n        }\n        return types\n    }\n\n    private fun getSupportedAnnotations(): Set<Class<out Annotation>> {\n        val annotations: LinkedHashSet<Class<out Annotation>> = LinkedHashSet()\n        // 需要解析的自定义注解\n        annotations.add(CreateVersionConfig::class.java)\n        return annotations\n    }\n\n    /**\n    KotlinPoet 官方helloWorld示例：\n    val greeterClass = ClassName(\"\", \"Greeter\")\n    val file = FileSpec.builder(\"\", \"HelloWorld\")\n    .addType(TypeSpec.classBuilder(\"Greeter\")\n    .primaryConstructor(FunSpec.constructorBuilder()\n    .addParameter(\"name\", String::class).build())\n    .addProperty(PropertySpec.builder(\"name\", String::class)\n    .initializer(\"name\").build())\n    .addFunction(FunSpec.builder(\"greet\")\n    .addStatement(\"println(%P)\", \"Hello, \\$name\").build())\n    .build())\n    .addFunction(FunSpec.builder(\"main\")\n    .addParameter(\"args\", String::class, VARARG)\n    .addStatement(\"%T(args[0]).greet()\", greeterClass).build())\n    .build()\n    file.writeTo(System.out)\n    ——————————————————————————————————\n    class Greeter(val name: String) {\n    fun greet() {println(\"\"\"Hello, $name\"\"\")}}\n    fun main(vararg args: String) {Greeter(args[0]).greet()}\n     */\n    override fun process(annotations: MutableSet<out TypeElement>, roundEnvironment: RoundEnvironment): Boolean {\n        var fos: FileOutputStream? = null\n        try {\n            //filer.createResource()意思是创建源文件\n            //我们可以指定为class文件输出的地方，\n            //StandardLocation.CLASS_OUTPUT：java文件生成class文件的位置，/app/build/intermediates/javac/debug/classes/目录下\n            //StandardLocation.SOURCE_OUTPUT：java文件的位置，一般在/ppjoke/app/build/generated/source/apt/目录下\n            //StandardLocation.CLASS_PATH 和 StandardLocation.SOURCE_PATH用的不多，指的了这个参数，就要指定生成文件的pkg包名了\n            val resource: FileObject = mFiler!!.createResource(StandardLocation.CLASS_OUTPUT, \"\", OUTPUT_FILE_NAME)\n            val resourcePath = resource.toUri().path\n            //由于我们想要把json文件生成在app/src/main/assets/目录下,所以这里可以对字符串做一个截取，\n            //以此便能准确获取项目在每个电脑上的 /app/src/main/assets/的路径\n            val appPath = resourcePath.substring(0, resourcePath.indexOf(\"app\") + 4)\n            val vcPath = appPath + \"build/outputs/apk/\"\n            val file = File(vcPath)\n            if (!file.exists()) {\n                file.mkdirs()\n            }\n\n            //此处就是稳健的写入了\n            val outPutFile = File(file, OUTPUT_FILE_NAME)\n            if (outPutFile.exists()) {\n                outPutFile.delete()\n            }\n            outPutFile.createNewFile()\n            val bytes = createConfig().toByteArray();\n\n            fos = FileOutputStream(outPutFile)\n            fos.write(bytes)\n            fos.flush()\n        } catch (e: IOException) {\n            e.printStackTrace()\n        } finally {\n            if (fos != null) {\n                try {\n                    fos.close()\n                } catch (e: IOException) {\n                    e.printStackTrace()\n                }\n            }\n        }\n        return true\n    }\n\n    private fun log(message: String) {\n        processingEnv.messager.printMessage(Diagnostic.Kind.NOTE, message)\n    }\n\n    private fun createConfig(): PluginMode._PluginMode {\n        val loader = LoaderVersionImpl()\n        val pluginMode = PluginMode._PluginMode.newBuilder()\n            .setV(loader.getV())\n            .setClfd(PluginMode._PluginMode._Plugin.newBuilder().setV(loader.getClfd().third).setDlu(loader.getClfd().second).setIsApkRes(false).build())\n            .setClmd(PluginMode._PluginMode._Plugin.newBuilder().setV(loader.getClmd().third).setDlu(loader.getClmd().second).setIsApkRes(false).build())\n            .setCdlfd(PluginMode._PluginMode._Plugin.newBuilder().setV(loader.getCdlfd().third).setDlu(loader.getCdlfd().second).setIsApkRes(false).build())\n        val map = linkedMapOf<String, PluginMode._PluginMode._Plugin>()\n        loader.getMapDLU().forEach { (key, value) ->\n            map[key] = PluginMode._PluginMode._Plugin.newBuilder().setV(value.second).setDlu(value.first).setIsApkRes(false).build()\n        }\n        pluginMode.putAllMapDl(map)\n        loader.getOthers().forEach { (key, value) ->\n            val isApkRes = key.contains(\"_res\")\n            pluginMode.addOthers(PluginMode._PluginMode._Plugin.newBuilder().setV(value).setDlu(key).setIsApkRes(isApkRes).build())\n        }\n        return pluginMode.build()\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-DownloadFace-Impl/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-DownloadFace-Impl/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.plugin.download_face.impl\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\ndependencies {\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Download-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Constant-Lib')\n    compileOnly project(path: ':wgllss-common-re-library')\n    compileOnly project(path: ':Wgllss-Dynamic-Host-Version-Lib')\n    compileOnly project(path: ':Wgllss-Dynamic-Host-Lib')\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_downloadface_impl.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_downloadface_impl_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_downloadface_impl_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-DownloadFace-Impl/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-DownloadFace-Impl/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.plugin.download_face.impl\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-DownloadFace-Impl/src/main/java/com/wgllss/dynamic/plugin/download_face/DownLoadFaceImpl.kt",
    "content": "package com.wgllss.dynamic.plugin.download_face\n\nimport android.text.TextUtils\nimport com.wgllss.core.units.DeviceIdUtil\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.CDLFD\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.CLMD\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.COMMON\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.COMMON_BUSINESS\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.FIRST\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.HOME\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.MANAGER\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.RESOURCE_SKIN\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.RUNTIME\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.VERSION\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.WEB_ASSETS\nimport com.wgllss.dynamic.host.lib.download.IDynamicDownLoadFace\n\nclass DownLoadFaceImpl : IDynamicDownLoadFace {\n\n    private var baseXL: String = \"\"\n\n    //    override fun getHostL() = \"http://192.168.3.21:8080/assets/WXDynamicPlugin/\"\n//    override fun getHostL() = \"http://192.168.1.9:8080/assets/WXDynamicPlugin/\"\n    override fun getHostL() = \"https://gitee.com/wgllss888/WXDynamicPlugin/raw/master/WX-Resource/\"\n\n    /** 0:WXDynamicPlugin 动态化插件框架 理论上已经做到了可以完全不动宿主,但是如果一定要动宿主 可以提供以下思路:\n     *  1:可以根据 宿主版本号得到 宿主版本支持的 的插件,\n     *  2:当宿主必须 需要升级时,升级后原版本的插件不可用了，插件配置在新宿主版本文件夹下面，原宿主版本文件夹可可以先动态配置 在启动页 升级下载新的宿主\n     *  @example  宿主版本 10000 版本支持的插件 放在服务端 WXDynamicPlugin/10000/ 文件夹下  20000版本的插件放在 WXDynamicPlugin/20000/下面\n     */\n    override fun getBaseL(): String {\n        if (TextUtils.isEmpty(baseXL)) {\n            baseXL = StringBuilder().append(getHostL()).append(DeviceIdUtil.getDeviceId()).append(\"/\").append(\"10000\").append(\"/\").toString()\n        }\n        return baseXL\n    }\n\n    override fun isDebug() = true\n\n    override fun getOtherDLU() = \"${getBaseL()}vc\"\n\n    override fun getMapDLU() = mutableMapOf(\n        VERSION to \"${getBaseL()}classes_version_dex\",\n        COMMON to \"${getBaseL()}classes_common_lib_dex\",\n        WEB_ASSETS to \"${getBaseL()}classes_business_web_res\",\n        COMMON_BUSINESS to \"${getBaseL()}classes_business_lib_dex\",\n        HOME to \"${getBaseL()}classes_home_dex\",\n        RESOURCE_SKIN to \"${getBaseL()}classes_common_skin_res\",\n        RUNTIME to \"${getBaseL()}classes_wgllss_dynamic_plugin_runtime\",\n        MANAGER to \"${getBaseL()}classes_manager_dex\",\n        FIRST to \"${getBaseL()}classes_loading_dex\",\n        CLMD to \"${getBaseL()}class_loader_impl_dex\",\n        CDLFD to \"${getBaseL()}classes_downloadface_impl_dex\"\n    )\n\n    override fun getLoadVersionClassName() = \"com.wgllss.loader.version.LoaderVersionImpl\"\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Loader-Impl/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Loader-Impl/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.plugin.loader.impl\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\ndependencies {\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Loader-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Loader-Base-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Download-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Version-Lib')\n    compileOnly project(path: ':Wgllss-Dynamic-Host-Lib')\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}class_loader_impl.jar\")\n    def outputDexFile = file(\"${workingDirPath}class_loader_impl_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/class_loader_impl_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Loader-Impl/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Loader-Impl/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.plugin.loader.impl\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Loader-Impl/src/main/java/com/wgllss/dynamic/plugin/loader/LoaderManagerImpl.kt",
    "content": "package com.wgllss.dynamic.plugin.loader\n\nimport android.content.Context\nimport com.wgllss.dynamic.host.lib.download.IDynamicDownLoadFace\nimport com.wgllss.dynamic.host.lib.loader_base.BaseLoaderManagerImpl\n\nclass LoaderManagerImpl : BaseLoaderManagerImpl() {\n\n    override fun initDynamicLoader(\n        context: Context, v: Int,\n        clfd: Triple<String, String, Int>, clmd: Triple<String, String, Int>, cdlfd: Triple<String, String, Int>,\n        mapDlu: MutableMap<String, Pair<String, Int>>,\n        cotd: MutableMap<String, Int>,\n        faceImpl: IDynamicDownLoadFace,\n        isMustShowLoading: Boolean\n    ) {\n        android.util.Log.e(\"LoaderManagerImpl\", \"-----initDynamicLoader-----\")\n        super.initDynamicLoader(context, v, clfd, clmd, cdlfd, mapDlu, cotd, faceImpl, isMustShowLoading)\n    }\n\n    //    override fun initDynamicRunTime(context: Context, contentKey: String, fileAbsolutePath: String) {\n//        super.initDynamicRunTime(context, contentKey, fileAbsolutePath)\n//    }\n//\n//    override fun initHomeCreate(context: Context, classLoader: ClassLoader) {\n//        super.initHomeCreate(context, classLoader)\n//    }\n//\n    private fun test() {\n        this.v\n        this.clfd\n        this.clmd\n        this.cdlfd\n\n        this.mapDlu\n        this.cotd\n        this.faceImpl\n        this.mapOthers\n        this.isShowLoadFlag\n        this.libIsLoadComplete\n        this.firstLoadSuccess\n        this.hasOldFileDelete\n        this.libLoadCount\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Manager/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Manager/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.plugin.manager\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\ndependencies {\n    compileOnly libs.androidx.core.ktx\n    compileOnly libs.appcompat\n    compileOnly libs.androidx.activity\n\n    compileOnly project(path: ':Wgllss-Dynamic-Plugin-Common-Library')\n\n    compileOnly project(path: ':Wgllss-Dynamic-Plugin-Library')\n    compileOnly project(path: ':wgllss-sample-business-library')\n\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Constant-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Lib-Impl')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Loader-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Loader-Base-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-ClassLoader-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Download-Lib')\n\n    compileOnly project(path: ':Wgllss-Dynamic-Host-Version-Lib')\n    compileOnly project(path: ':Wgllss-Dynamic-Host-Lib')\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_manager.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_manager_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_manager_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Manager/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Manager/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.plugin.manager\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Manager/src/main/java/com/wgllss/dynamic/plugin/manager/PluginManager.kt",
    "content": "package com.wgllss.dynamic.plugin.manager\n\nimport android.content.ComponentName\nimport android.content.Context\nimport android.content.Intent\nimport android.content.ServiceConnection\nimport android.content.pm.PackageManager\nimport android.content.res.Resources\nimport android.os.IBinder\nimport android.text.TextUtils\nimport com.wgllss.core.activity.BaseViewPluginResActivity\nimport com.wgllss.core.activity.WActivityManager\nimport com.wgllss.core.units.WLog\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.RESOURCE_SKIN\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.WEB_ASSETS\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.dldir\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.versionFile\nimport com.wgllss.dynamic.host.lib.download.DynamicDownloadPlugin\nimport com.wgllss.dynamic.host.lib.download.IDynamicDownLoadFace\nimport com.wgllss.dynamic.host.lib.impl.WXDynamicLoader\nimport com.wgllss.dynamic.host.lib.loader_base.DynamicManageUtils\nimport com.wgllss.dynamic.host.lib.loader_base.DynamicManageUtils.getDlfn\nimport com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface\nimport com.wgllss.sample.feature_system.savestatus.MMKVHelp\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.flow.flowOf\nimport kotlinx.coroutines.flow.flowOn\nimport kotlinx.coroutines.flow.zip\nimport kotlinx.coroutines.runBlocking\nimport java.io.File\nimport java.util.concurrent.ConcurrentHashMap\n\n\nclass PluginManager private constructor() {\n\n    /** res apk*/\n    private val resFileName by lazy {\n        WXDynamicLoader.instance.loader.getMapDluImpl()[RESOURCE_SKIN]!!.run {\n            getDlfn(first, second)\n        }\n    }\n\n    private val webResFileName by lazy {\n        WXDynamicLoader.instance.loader.getMapDluImpl()[WEB_ASSETS]!!.run {\n            getDlfn(first, second)\n        }\n    }\n\n    /** 加载插件管理器 dex **/\n    private val clmd by lazy { WXDynamicLoader.instance.loader.getClmdImpl() }\n\n    /** 下载接口实现 dex **/\n    private val cdlfd by lazy { WXDynamicLoader.instance.loader.getCdlfdImpl() }\n\n    /**others dex*/\n    private val cotd by lazy { WXDynamicLoader.instance.loader.getCotdImpl() }\n\n    private val mapOtherLoadStatus by lazy { WXDynamicLoader.instance.loader.getOtherLoadStatus() }\n\n    private val context by lazy { WXDynamicLoader.instance.context }\n    private val skinMap by lazy { ConcurrentHashMap<String, Resources>() }\n\n    private val mapAidl by lazy { HashMap<String, WXDynamicAidlInterface>() }\n    private val mapConnection by lazy { HashMap<String, ServiceConnection>() }\n    private val mapContextPluginService by lazy { HashMap<String, MutableList<String>>() }\n\n    companion object {\n        const val pluginApkPathKey = \"PLUGIN_APK_PATH_KEY\"\n        const val activityNameKey = \"ACTIVITY_NAME_KEY\"\n        const val serviceNameKey = \"PLUGIN_SERVICE_NAME_KEY\"\n        const val privatePackageKey = \"PRIVATE_PACKAGE_KEY\"\n\n        private const val PluginStandardActivity = \"com.wgllss.dynamic.plugin.runtime.PluginStandardActivity\"\n        private const val PluginSingleInstanceActivity = \"com.wgllss.dynamic.plugin.runtime.PluginSingleInstanceActivity\"\n        private const val PluginSingleTaskActivity = \"com.wgllss.dynamic.plugin.runtime.PluginSingleTaskActivity\"\n        private const val PluginSingleTopActivity = \"com.wgllss.dynamic.plugin.runtime.PluginSingleTopActivity\"\n\n        private const val PluginStandardComposeActivity = \"com.wgllss.dynamic.plugin.runtime.PluginStandardComposeActivity\"\n        private const val PluginSingleInstanceComposeActivity = \"com.wgllss.dynamic.plugin.runtime.PluginSingleInstanceComposeActivity\"\n        private const val PluginSingleTaskComposeActivity = \"com.wgllss.dynamic.plugin.runtime.PluginSingleTaskComposeActivity\"\n        private const val PluginSingleTopComposeActivity = \"com.wgllss.dynamic.plugin.runtime.PluginSingleTopComposeActivity\"\n\n        private const val PluginStartStickyService = \"com.wgllss.dynamic.plugin.runtime.PluginStartStickyService\"\n        private const val PluginStartNotStickyService = \"com.wgllss.dynamic.plugin.runtime.PluginStartNotStickyService\"\n        private const val PluginStartRedeliverIntentService = \"com.wgllss.dynamic.plugin.runtime.PluginStartRedeliverIntentService\"\n        private const val PluginStartStickyCompatibilityService = \"com.wgllss.dynamic.plugin.runtime.PluginStartStickyCompatibilityService\"\n\n        private const val PluginProcessStartStickyService = \"com.wgllss.dynamic.plugin.runtime.PluginProcessStartStickyService\"\n        private const val PluginProcessStartNotStickyService = \"com.wgllss.dynamic.plugin.runtime.PluginProcessStartNotStickyService\"\n        private const val PluginProcessStartRedeliverIntentService = \"com.wgllss.dynamic.plugin.runtime.PluginProcessStartRedeliverIntentService\"\n        private const val PluginProcessStartStickyCompatibilityService = \"com.wgllss.dynamic.plugin.runtime.PluginProcessStartStickyCompatibilityService\"\n\n\n        val instance by lazy { PluginManager() }\n    }\n\n    fun switchSkinResources(skinPath: String) {\n        val file = File(skinPath)\n        if (file.exists()) {\n            val key = file.absolutePath\n            if (!skinMap.containsKey(key)) {\n                val res = getResourcesForApplication(file)\n                skinMap[key] = res\n            }\n            MMKVHelp.saveSkinPath(key)\n        }\n    }\n\n    fun callAllActivity(skinRes: Resources) {\n        WActivityManager.getActivitys {\n            if (it is BaseViewPluginResActivity) {\n                it.callChangeSkin(skinRes)\n            }\n        }\n    }\n\n    fun getCurrentSkinPath() = MMKVHelp.getSkinPath() ?: getDefaultSkinPath()\n\n    fun getPluginSkinResources(): Resources {\n        val skinPath = MMKVHelp.getSkinPath()\n        var file: File\n        if (!TextUtils.isEmpty(skinPath)) {\n            file = File(skinPath)\n            if (!file.exists()) {\n                file = File(getDefaultSkinPath())\n            }\n        } else {\n            file = File(getDefaultSkinPath())\n        }\n        val key = file.absolutePath\n        return if (skinMap.containsKey(key)) {\n            skinMap[key]!!\n        } else {\n            android.util.Log.e(\"PluginManager\", \"PluginManager :${file.absolutePath}\")\n            val res = getResourcesForApplication(file)\n            skinMap[key] = res\n            MMKVHelp.saveSkinPath(key)\n            res\n        }\n    }\n\n    fun getPluginResources(contentKey: String): Resources {\n        return getResourcesForApplication(DynamicManageUtils.getDxFile(context, dldir, getDlfn(contentKey, cotd[contentKey]!!)))\n    }\n\n    private fun getDefaultSkinPath() = StringBuilder(context.filesDir.absolutePath).apply {\n        append(File.separator)\n        append(dldir)\n        append(File.separator)\n        append(resFileName)\n    }.toString()\n\n    /**\n     * web res 资源\n     */\n    fun getWebRes(): Resources {\n        val file = DynamicManageUtils.getDxFile(context, dldir, webResFileName)\n        val flags = (PackageManager.GET_META_DATA or PackageManager.GET_ACTIVITIES or PackageManager.GET_SERVICES or PackageManager.GET_PROVIDERS or PackageManager.GET_RECEIVERS)\n        val packageManager = context.applicationContext.packageManager\n        val packageInfo = packageManager.getPackageArchiveInfo(file.absolutePath, flags)\n        val applicationInfo = packageInfo!!.applicationInfo\n        applicationInfo.publicSourceDir = file.absolutePath\n        applicationInfo.sourceDir = applicationInfo.publicSourceDir\n        MMKVHelp.saveWebResPath(file.absolutePath)\n        return packageManager.getResourcesForApplication(applicationInfo)\n    }\n\n\n    private fun getResourcesForApplication(file: File): Resources {\n        val flags = (PackageManager.GET_META_DATA or PackageManager.GET_ACTIVITIES or PackageManager.GET_SERVICES or PackageManager.GET_PROVIDERS or PackageManager.GET_RECEIVERS)\n        val packageManager = context.applicationContext.packageManager\n        val packageInfo = packageManager.getPackageArchiveInfo(file.absolutePath, flags)\n        val applicationInfo = packageInfo!!.applicationInfo\n        applicationInfo.publicSourceDir = file.absolutePath\n        applicationInfo.sourceDir = applicationInfo.publicSourceDir\n        return packageManager.getResourcesForApplication(applicationInfo)\n    }\n\n    fun startStandardActivity(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        startActivity(context, contentKey, PluginStandardActivity, activityName, packageName, intentOption)\n    }\n\n    fun startPluginSingleInstanceActivity(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        startActivity(context, contentKey, PluginSingleInstanceActivity, activityName, packageName, intentOption)\n    }\n\n    fun startPluginSingleTaskActivity(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        startActivity(context, contentKey, PluginSingleTaskActivity, activityName, packageName, intentOption)\n    }\n\n    fun startPluginSingleTopActivity(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        startActivity(context, contentKey, PluginSingleTopActivity, activityName, packageName, intentOption)\n    }\n\n    fun startPluginStandardComposeActivity(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        startActivity(context, contentKey, PluginStandardComposeActivity, activityName, packageName, intentOption)\n    }\n\n    fun startPluginSingleInstanceComposeActivity(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        startActivity(context, contentKey, PluginSingleInstanceComposeActivity, activityName, packageName, intentOption)\n    }\n\n    fun startPluginSingleTaskComposeActivity(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        startActivity(context, contentKey, PluginSingleTaskComposeActivity, activityName, packageName, intentOption)\n    }\n\n    fun startPluginSingleTopComposeActivity(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        startActivity(context, contentKey, PluginSingleTopComposeActivity, activityName, packageName, intentOption)\n    }\n\n    private fun startActivity(context: Context, contentKey: String, lunchName: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        try {\n            if (!cotd.containsKey(contentKey)) return\n            val clazz = Class.forName(lunchName)\n            val intent = intentOption ?: Intent(context, clazz)\n            if (intentOption != null) {\n                intent.setClass(context, clazz)\n            }\n            intent.apply {\n                putExtra(activityNameKey, activityName)\n                putExtra(privatePackageKey, packageName)\n                val file = DynamicManageUtils.getDxFile(context, dldir, getDlfn(contentKey, cotd[contentKey]!!))\n                if (!file.exists()) {\n                    return\n                }\n                putExtra(pluginApkPathKey, file.absolutePath)\n            }\n            context.startActivity(intent)\n        } catch (e: Exception) {\n            e.printStackTrace()\n        }\n    }\n\n    fun getStandardActivityIntent(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null): Intent? {\n        return getActivityIntent(context, contentKey, PluginStandardActivity, activityName, packageName, intentOption)\n    }\n\n    private fun getActivityIntent(context: Context, contentKey: String, lunchName: String, activityName: String, packageName: String, intentOption: Intent? = null): Intent? {\n        if (!cotd.containsKey(contentKey)) return null\n        val clazz = Class.forName(lunchName)\n        val intent = intentOption ?: Intent(context, clazz)\n        if (intentOption != null) {\n            intent.setClass(context, clazz)\n        }\n        intent.apply {\n            putExtra(activityNameKey, activityName)\n            putExtra(privatePackageKey, packageName)\n            val file = DynamicManageUtils.getDxFile(context, dldir, getDlfn(contentKey, cotd[contentKey]!!))\n            if (!file.exists()) {\n                return null\n            }\n            putExtra(pluginApkPathKey, file.absolutePath)\n        }\n        return intent\n    }\n\n    fun startPluginStartStickyService(context: Context, contentKey: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        startPluginService(context, contentKey, PluginStartStickyService, pluginServiceName, packageName, intentOption)\n    }\n\n    fun startPluginStartNotStickyService(context: Context, contentKey: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        startPluginService(context, contentKey, PluginStartNotStickyService, pluginServiceName, packageName, intentOption)\n    }\n\n    fun startPluginStartRedeliverIntentService(context: Context, contentKey: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        startPluginService(context, contentKey, PluginStartRedeliverIntentService, pluginServiceName, packageName, intentOption)\n    }\n\n    fun startPluginStickyCompatibilityService(context: Context, contentKey: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        startPluginService(context, contentKey, PluginStartStickyCompatibilityService, pluginServiceName, packageName, intentOption)\n    }\n\n    fun startPluginProcessStartStickyService(context: Context, contentKey: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        startPluginService(context, contentKey, PluginProcessStartStickyService, pluginServiceName, packageName, intentOption)\n    }\n\n    fun startPluginProcessStartNotStickyService(context: Context, contentKey: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        startPluginService(context, contentKey, PluginProcessStartNotStickyService, pluginServiceName, packageName, intentOption)\n    }\n\n    fun startPluginProcessStartRedeliverIntentService(context: Context, contentKey: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        startPluginService(context, contentKey, PluginProcessStartRedeliverIntentService, pluginServiceName, packageName, intentOption)\n    }\n\n    fun startPluginProcessStickyCompatibilityService(context: Context, contentKey: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        startPluginService(context, contentKey, PluginProcessStartStickyCompatibilityService, pluginServiceName, packageName, intentOption)\n    }\n\n    private fun getServiceIntent(context: Context, contentKey: String, lunchName: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null): Intent? {\n        if (!cotd.containsKey(contentKey)) return null\n        val clazz = Class.forName(lunchName)\n        val intent = intentOption ?: Intent(context, clazz)\n        if (intentOption != null) {\n            intent.setClass(context, clazz)\n        }\n        intent.apply {\n            putExtra(serviceNameKey, pluginServiceName)\n            putExtra(privatePackageKey, packageName)\n            val file = DynamicManageUtils.getDxFile(context, dldir, getDlfn(contentKey, cotd[contentKey]!!))\n            if (!file.exists()) {\n                return null\n            }\n            putExtra(pluginApkPathKey, file.absolutePath)\n        }\n        return intent\n    }\n\n    private fun startPluginService(context: Context, contentKey: String, lunchName: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        try {\n            getServiceIntent(context, contentKey, lunchName, pluginServiceName, packageName, intentOption)?.run {\n                context.startService(this)\n            }\n        } catch (e: Exception) {\n            e.printStackTrace()\n        }\n    }\n\n    fun bindStickyService(context: Context, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        bindService(context, PluginStartStickyService, contentKey, packageName, pluginServiceName, intentOption)\n    }\n\n    fun bindNotStickyService(context: Context, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        bindService(context, PluginStartNotStickyService, contentKey, packageName, pluginServiceName, intentOption)\n    }\n\n    fun bindRedeliverService(context: Context, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        bindService(context, PluginStartRedeliverIntentService, contentKey, packageName, pluginServiceName, intentOption)\n    }\n\n    fun bindCompatibilityService(context: Context, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        bindService(context, PluginStartStickyCompatibilityService, contentKey, packageName, pluginServiceName, intentOption)\n    }\n\n    fun bindProcessStickyService(context: Context, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        bindService(context, PluginProcessStartStickyService, contentKey, packageName, pluginServiceName, intentOption)\n    }\n\n    fun bindProcessNotStickyService(context: Context, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        bindService(context, PluginProcessStartNotStickyService, contentKey, packageName, pluginServiceName, intentOption)\n    }\n\n    fun bindProcessRedeliverService(context: Context, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        bindService(context, PluginProcessStartRedeliverIntentService, contentKey, packageName, pluginServiceName, intentOption)\n    }\n\n    fun bindProcessCompatibilityService(context: Context, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        bindService(context, PluginProcessStartStickyCompatibilityService, contentKey, packageName, pluginServiceName, intentOption)\n    }\n\n    private fun bindService(context: Context, hostServiceName: String, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        android.util.Log.e(\"bindService\", \"context:${context.javaClass.name}\")\n        val connectionKey = StringBuilder(hostServiceName).append(context.javaClass.name).toString()\n        if (!mapAidl.containsKey(hostServiceName)) {\n//            val intent =\n            getServiceIntent(context, contentKey, hostServiceName, pluginServiceName, packageName, intentOption)?.let {\n                val connection = object : ServiceConnection {\n                    override fun onServiceConnected(name: ComponentName?, service: IBinder?) {\n                        val aidl = WXDynamicAidlInterface.Stub.asInterface(service)\n                        mapAidl[hostServiceName] = aidl\n                    }\n\n                    override fun onServiceDisconnected(name: ComponentName?) {\n\n                    }\n                }\n                context.bindService(it, connection, Context.BIND_AUTO_CREATE)\n                if (!mapConnection.containsKey(connectionKey)) {\n                    mapConnection[connectionKey] = connection\n                }\n                if (!mapContextPluginService.containsKey(connectionKey)) {\n                    mapContextPluginService[connectionKey] = mutableListOf(pluginServiceName)\n                }\n            }\n        } else {\n            val file = DynamicManageUtils.getDxFile(context, dldir, getDlfn(contentKey, cotd[contentKey]!!))\n            if (!file.exists()) {\n                return\n            }\n            mapAidl[hostServiceName]?.onBind(pluginServiceName, packageName, file.absolutePath)\n\n            if (!mapContextPluginService.containsKey(connectionKey)) {\n                mapContextPluginService[connectionKey] = mutableListOf(pluginServiceName)\n            } else {\n                mapContextPluginService[connectionKey]?.add(pluginServiceName)\n            }\n        }\n    }\n\n    fun unBindStickyService(context: Context) {\n        unBindService(context, PluginStartStickyService)\n    }\n\n    fun unBindNotStickyService(context: Context) {\n        unBindService(context, PluginStartNotStickyService)\n    }\n\n    fun unBindRedeliverService(context: Context) {\n        unBindService(context, PluginStartRedeliverIntentService)\n    }\n\n    fun unBindCompatibilityService(context: Context) {\n        unBindService(context, PluginStartStickyCompatibilityService)\n    }\n\n    fun unBindProcessStickyService(context: Context) {\n        unBindService(context, PluginProcessStartStickyService)\n    }\n\n    fun unBindProcessNotStickyService(context: Context) {\n        unBindService(context, PluginProcessStartNotStickyService)\n    }\n\n    fun unBindProcessRedeliverService(context: Context) {\n        unBindService(context, PluginProcessStartRedeliverIntentService)\n    }\n\n    fun unBindProcessCompatibilityService(context: Context) {\n        unBindService(context, PluginProcessStartStickyCompatibilityService)\n    }\n\n    private fun unBindService(context: Context, hostServiceName: String) {\n        val connectionKey = StringBuilder(hostServiceName).append(context.javaClass.name).toString()\n        if (mapContextPluginService.containsKey(connectionKey)) {\n            mapContextPluginService[connectionKey]?.forEach { v ->\n                if (mapAidl.containsKey(hostServiceName)) {\n                    mapAidl[hostServiceName]?.onUnbind(v)\n                    mapAidl.remove(hostServiceName)\n                }\n            }\n            mapContextPluginService.remove(connectionKey)\n        }\n        if (mapConnection.containsKey(connectionKey)) {\n            context.unbindService(mapConnection[connectionKey]!!)\n            mapConnection.remove(connectionKey)\n        }\n    }\n\n    fun onAidlStickyServiceCallBack(PluginSerViceName: String, methodID: Int) = onAidlCallBack(PluginStartStickyService, PluginSerViceName, methodID)\n    fun onAidlNotStickyServiceCallBack(PluginSerViceName: String, methodID: Int) = onAidlCallBack(PluginStartNotStickyService, PluginSerViceName, methodID)\n    fun onAidlRedeliverServiceCallBack(PluginSerViceName: String, methodID: Int) = onAidlCallBack(PluginStartRedeliverIntentService, PluginSerViceName, methodID)\n    fun onAidlCompatibilityServiceCallBack(PluginSerViceName: String, methodID: Int) = onAidlCallBack(PluginStartStickyCompatibilityService, PluginSerViceName, methodID)\n\n    fun onProcessAidlStickyServiceCallBack(PluginSerViceName: String, methodID: Int) = onAidlCallBack(PluginProcessStartStickyService, PluginSerViceName, methodID)\n    fun onProcessAidlNotStickyServiceCallBack(PluginSerViceName: String, methodID: Int) = onAidlCallBack(PluginProcessStartNotStickyService, PluginSerViceName, methodID)\n    fun onProcessAidlRedeliverServiceCallBack(PluginSerViceName: String, methodID: Int) = onAidlCallBack(PluginProcessStartRedeliverIntentService, PluginSerViceName, methodID)\n    fun onProcessAidlCompatibilityServiceCallBack(PluginSerViceName: String, methodID: Int) = onAidlCallBack(PluginProcessStartStickyCompatibilityService, PluginSerViceName, methodID)\n\n    private fun onAidlCallBack(serviceName: String, PluginSerViceName: String, methodID: Int): String {\n        if (mapAidl.containsKey(serviceName)) {\n            mapAidl[serviceName]?.let {\n                return it.onAidlCallBack(PluginSerViceName, methodID)\n            }\n        }\n        return \"\"\n    }\n\n    fun deleteOldFile() {\n        WXDynamicLoader.instance.loader.run {\n            if (hasOldFileNeedDelete()) {\n                val sbdex = StringBuilder(context.filesDir.absolutePath).apply {\n                    append(File.separator)\n                    append(dldir)\n                    append(File.separator)\n                }\n                val fileDexDir = File(sbdex.toString())\n                if (!fileDexDir.exists()) return@run\n                val oatDir = \"oat\"\n                sbdex.append(oatDir)\n                val fileDexOatDir = File(sbdex.toString())\n                val list = mutableListOf<String>()\n                getMapDluImpl().forEach {\n                    list.add(it.value.run { getDlfn(first, second) })\n                }\n                cotd.forEach {\n                    list.add(it.run { getDlfn(key, value) })\n                }\n                list.add(clmd.run { getDlfn(second, third) })\n                list.add(cdlfd.run { getDlfn(second, third) })\n                fileDexDir.listFiles()?.forEach {\n                    it?.name.let { fn ->\n                        if (versionFile != fn && oatDir != fn && !list.contains(fn)) {\n                            WLog.e(this@PluginManager, \"文件:${fn}删除 \")\n                            it.delete()\n                        }\n                    }\n                }\n                if (!fileDexOatDir.exists()) return@run\n                fileDexOatDir.listFiles()?.forEach {\n                    it?.name.let { fn ->\n                        val oat = fn?.replace(\".cur.prof\", \"\")\n                        if (versionFile != oat && !list.contains(oat)) {\n                            WLog.e(this@PluginManager, \"文件:${fn}删除 \")\n                            it.delete()\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    /**  可用来当other没有下载 加载完时候，进行等待 **/\n    fun isLoadSuccessByKey(keyDex: String, keyRes: String): Boolean {\n        var status = false\n        runBlocking {\n            status = if (WXDynamicLoader.instance.loader.isFShowLoadFlag() || cotd.isEmpty()) {\n                if (mapOtherLoadStatus.containsKey(keyDex) && mapOtherLoadStatus.containsKey(keyRes)) mapOtherLoadStatus[keyDex]!!.await() && mapOtherLoadStatus[keyRes]!!.await()\n                else false\n            } else {\n                true\n            }\n        }\n        return status\n    }\n\n    /**\n     * 按需下载 other 2,other 3 other 4,other 5 (每一个包含dex 和 res apk 2个文件)\n     * 文件须放在 FaceImpl 配置的getBaseL() 服务器目录下面即可\n     * @param context： 上下问\n     * @param dexName： dex文件民\n     * @param resApkName： resApkName文件名\n     */\n    fun dynamicLoadPlugin(context: Context, dexName: Pair<String, Int>, resApkName: Pair<String, Int>): Flow<Int> {\n        if (cotd.containsKey(dexName.first) && cotd.containsKey(resApkName.first)) {\n            return flowOf(0)\n        }\n        val loader = WXDynamicLoader.instance.loader\n        val face = loader.getDownloadFace()\n        val dexFileUrl = StringBuilder().append(face.getBaseL()).append(dexName.first).toString()\n        val resApkFileUrl = StringBuilder().append(face.getBaseL()).append(resApkName.first).toString()\n        val dynamicHelper = DynamicDownloadPlugin(face)\n        return flow {\n            dynamicHelper.initDynamicPlugin(context, dexFileUrl, dldir, getDlfn(dexName.first, dexName.second)).run {\n                cotd[dexName.first] = dexName.second\n                if (!TextUtils.isEmpty(fileAbsolutePath) && !TextUtils.isEmpty(fileAbsolutePath.trim())) {\n                    loader.initDynamicRunTime(context, contentKey, fileAbsolutePath)\n                } else {\n                    throw Exception(\"文件下载异常\")\n                }\n            }\n            emit(0)\n        }.zip(flow {\n            dynamicHelper.initDynamicPlugin(context, resApkFileUrl, dldir, getDlfn(resApkName.first, resApkName.second))\n            cotd[resApkName.first] = resApkName.second\n            emit(0)\n        }) { _, _ ->\n            return@zip 0\n        }.flowOn(Dispatchers.IO)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Manager/src/main/java/com/wgllss/dynamic/plugin/manager/PluginResource.kt",
    "content": "package com.wgllss.dynamic.plugin.manager\n\nimport android.content.res.Resources\nimport com.wgllss.core.units.WLog\nimport java.util.concurrent.ConcurrentHashMap\n\nobject PluginResource {\n    private val mapLayout by lazy { ConcurrentHashMap<String, Resources>() }\n\n    fun getPluginResources(contentKey: String): Resources {\n        WLog.e(this, \"contentKey: $contentKey\")\n        return if (mapLayout.containsKey(contentKey) && mapLayout[contentKey] != null) {\n            mapLayout[contentKey]!!\n        } else {\n            val res = PluginManager.instance.getPluginResources(contentKey)\n            mapLayout[contentKey] = res\n            res\n        }\n    }\n\n    fun getSkinResources(): Resources {\n        return PluginManager.instance.getPluginSkinResources()\n    }\n\n    fun getWebRes(): Resources {\n        return PluginManager.instance.getWebRes()\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.plugin.library\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n    compileOnly libs.appcompat\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/consumer-rules.pro",
    "content": ""
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.plugin.library\">\n\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/src/main/java/com/wgllss/dynamic/runtime/library/WXDynamicAidlInterface.java",
    "content": "package com.wgllss.dynamic.runtime.library;\n\npublic interface WXDynamicAidlInterface extends android.os.IInterface {\n\n    class Default implements com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface {\n        @Override\n        public void onBind(java.lang.String serviceName, java.lang.String packageName, java.lang.String pluginApkPath) throws android.os.RemoteException {\n        }\n\n        @Override\n        public void onUnbind(java.lang.String serviceName) throws android.os.RemoteException {\n        }\n\n        @Override\n        public java.lang.String onAidlCallBack(java.lang.String serviceName, int methodID) throws android.os.RemoteException {\n            return null;\n        }\n\n        @Override\n        public android.os.IBinder asBinder() {\n            return null;\n        }\n    }\n\n    abstract class Stub extends android.os.Binder implements com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface {\n        private static final java.lang.String DESCRIPTOR = \"com.wgllss.dynamic.plugin.runtime.WXDynamicAidlInterface\";\n\n        public Stub() {\n            this.attachInterface(this, DESCRIPTOR);\n        }\n\n        public static com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface asInterface(android.os.IBinder obj) {\n            if ((obj == null)) {\n                return null;\n            }\n            android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);\n            if (((iin != null) && (iin instanceof com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface))) {\n                return ((com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface) iin);\n            }\n            return new com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface.Stub.Proxy(obj);\n        }\n\n        @Override\n        public android.os.IBinder asBinder() {\n            return this;\n        }\n\n        @Override\n        public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException {\n            java.lang.String descriptor = DESCRIPTOR;\n            switch (code) {\n                case INTERFACE_TRANSACTION: {\n                    reply.writeString(descriptor);\n                    return true;\n                }\n                case TRANSACTION_onBind: {\n                    data.enforceInterface(descriptor);\n                    java.lang.String _arg0;\n                    _arg0 = data.readString();\n                    java.lang.String _arg1;\n                    _arg1 = data.readString();\n                    java.lang.String _arg2;\n                    _arg2 = data.readString();\n                    this.onBind(_arg0, _arg1, _arg2);\n                    reply.writeNoException();\n                    return true;\n                }\n                case TRANSACTION_onUnbind: {\n                    data.enforceInterface(descriptor);\n                    java.lang.String _arg0;\n                    _arg0 = data.readString();\n                    this.onUnbind(_arg0);\n                    reply.writeNoException();\n                    return true;\n                }\n                case TRANSACTION_onAidlCallBack: {\n                    data.enforceInterface(descriptor);\n                    java.lang.String _arg0;\n                    _arg0 = data.readString();\n                    int _arg1;\n                    _arg1 = data.readInt();\n                    java.lang.String _result = this.onAidlCallBack(_arg0, _arg1);\n                    reply.writeNoException();\n                    reply.writeString(_result);\n                    return true;\n                }\n                default: {\n                    return super.onTransact(code, data, reply, flags);\n                }\n            }\n        }\n\n        private static class Proxy implements com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface {\n            private android.os.IBinder mRemote;\n\n            Proxy(android.os.IBinder remote) {\n                mRemote = remote;\n            }\n\n            @Override\n            public android.os.IBinder asBinder() {\n                return mRemote;\n            }\n\n            public java.lang.String getInterfaceDescriptor() {\n                return DESCRIPTOR;\n            }\n\n            @Override\n            public void onBind(java.lang.String serviceName, java.lang.String packageName, java.lang.String pluginApkPath) throws android.os.RemoteException {\n                android.os.Parcel _data = android.os.Parcel.obtain();\n                android.os.Parcel _reply = android.os.Parcel.obtain();\n                try {\n                    _data.writeInterfaceToken(DESCRIPTOR);\n                    _data.writeString(serviceName);\n                    _data.writeString(packageName);\n                    _data.writeString(pluginApkPath);\n                    boolean _status = mRemote.transact(Stub.TRANSACTION_onBind, _data, _reply, 0);\n                    if (!_status && getDefaultImpl() != null) {\n                        getDefaultImpl().onBind(serviceName, packageName, pluginApkPath);\n                        return;\n                    }\n                    _reply.readException();\n                } finally {\n                    _reply.recycle();\n                    _data.recycle();\n                }\n            }\n\n            @Override\n            public void onUnbind(java.lang.String serviceName) throws android.os.RemoteException {\n                android.os.Parcel _data = android.os.Parcel.obtain();\n                android.os.Parcel _reply = android.os.Parcel.obtain();\n                try {\n                    _data.writeInterfaceToken(DESCRIPTOR);\n                    _data.writeString(serviceName);\n                    boolean _status = mRemote.transact(Stub.TRANSACTION_onUnbind, _data, _reply, 0);\n                    if (!_status && getDefaultImpl() != null) {\n                        getDefaultImpl().onUnbind(serviceName);\n                        return;\n                    }\n                    _reply.readException();\n                } finally {\n                    _reply.recycle();\n                    _data.recycle();\n                }\n            }\n\n            @Override\n            public java.lang.String onAidlCallBack(java.lang.String serviceName, int methodID) throws android.os.RemoteException {\n                android.os.Parcel _data = android.os.Parcel.obtain();\n                android.os.Parcel _reply = android.os.Parcel.obtain();\n                java.lang.String _result;\n                try {\n                    _data.writeInterfaceToken(DESCRIPTOR);\n                    _data.writeString(serviceName);\n                    _data.writeInt(methodID);\n                    boolean _status = mRemote.transact(Stub.TRANSACTION_onAidlCallBack, _data, _reply, 0);\n                    if (!_status && getDefaultImpl() != null) {\n                        return getDefaultImpl().onAidlCallBack(serviceName, methodID);\n                    }\n                    _reply.readException();\n                    _result = _reply.readString();\n                } finally {\n                    _reply.recycle();\n                    _data.recycle();\n                }\n                return _result;\n            }\n\n            public static com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface sDefaultImpl;\n        }\n\n        static final int TRANSACTION_onBind = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);\n        static final int TRANSACTION_onUnbind = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);\n        static final int TRANSACTION_onAidlCallBack = (android.os.IBinder.FIRST_CALL_TRANSACTION + 2);\n\n        public static boolean setDefaultImpl(com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface impl) {\n            if (Stub.Proxy.sDefaultImpl != null) {\n                throw new IllegalStateException(\"setDefaultImpl() called twice\");\n            }\n            if (impl != null) {\n                Stub.Proxy.sDefaultImpl = impl;\n                return true;\n            }\n            return false;\n        }\n\n        public static com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface getDefaultImpl() {\n            return Stub.Proxy.sDefaultImpl;\n        }\n    }\n\n    void onBind(java.lang.String serviceName, java.lang.String packageName, java.lang.String pluginApkPath) throws android.os.RemoteException;\n\n    void onUnbind(java.lang.String serviceName) throws android.os.RemoteException;\n\n    java.lang.String onAidlCallBack(java.lang.String serviceName, int methodID) throws android.os.RemoteException;\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/src/main/java/com/wgllss/dynamic/runtime/library/WXHostActivityDelegate.java",
    "content": "package com.wgllss.dynamic.runtime.library;\n\nimport android.content.res.Configuration;\nimport android.content.res.Resources;\nimport android.os.Bundle;\n\nimport androidx.activity.ComponentActivity;\nimport androidx.annotation.NonNull;\nimport androidx.fragment.app.FragmentActivity;\n\npublic interface WXHostActivityDelegate {\n\n    void attachContext(FragmentActivity context, Resources resources);\n\n    void attachContext(ComponentActivity context, Resources resources);\n\n    void onCreate(Bundle savedInstanceState);\n\n    void onRestart();\n\n    void onStart();\n\n    void onResume();\n\n    void onPause();\n\n    void onStop();\n\n    void onDestroy();\n\n    void lazyInitValue();\n\n    void onSaveInstanceState(Bundle outState);\n\n    void onConfigurationChanged(Configuration newConfig);\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/src/main/java/com/wgllss/dynamic/runtime/library/WXHostServiceDelegate.java",
    "content": "package com.wgllss.dynamic.runtime.library;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.os.IBinder;\n\npublic interface WXHostServiceDelegate {\n\n    void attachBaseContext(Context newBase);\n\n    IBinder onBind(Intent intent);\n\n    void onCreate();\n\n    void onStart(Intent intent, int startId);\n\n    int onStartCommand(Intent intent, int flags, int startId);\n\n    boolean onUnbind(Intent intent);\n\n    void onDestroy();\n\n    String callMethodByID(int methodID);\n\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library/src/test/java/com/wgllss/plugin/library/ExampleUnitTest.kt",
    "content": "package com.wgllss.plugin.library\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\nclass ExampleUnitTest {\n    @Test\n    fun addition_isCorrect() {\n        assertEquals(4, 2 + 2)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.dynamic.plugin.runtime'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.dynamic.plugin.runtime\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        release {\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"classes_wgllss_dynamic_plugin_runtime\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    lintOptions {\n        abortOnError false\n    }\n}\n\ndependencies {\n    compileOnly libs.appcompat\n    implementation project(':Wgllss-Dynamic-Plugin-Library')\n    compileOnly project(path: ':Wgllss-Dynamic-Plugin-Common-Library')\n    compileOnly project(path: ':Wgllss-Dynamic-Host-Lib')\n}\n\n\ndef createCopyTask(assembleReleaseTask, buildType) {\n    def inputFile = file(\"${getProject().getBuildDir()}/outputs/apk/release/classes_wgllss_dynamic_plugin_runtime\")\n    def outputFile = file(\"${rootProject.getBuildDir()}/classes_wgllss_dynamic_plugin_runtime\")\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    return tasks.create(\"assembleCopy\", Copy) {\n        group = 'other'\n        description = \"复制json到 指定输出目录\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(assembleReleaseTask.name)\n}\n\ntasks.whenTaskAdded { task ->\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(task, \"release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/consumer-rules.pro",
    "content": ""
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.plugin.runtime\">\n\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/HostComposePluginActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\nimport android.content.Context;\nimport android.content.pm.ApplicationInfo;\nimport android.content.pm.PackageInfo;\nimport android.content.pm.PackageManager;\nimport android.content.res.Configuration;\nimport android.content.res.Resources;\nimport android.graphics.Color;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.view.View;\nimport android.view.WindowManager;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.wgllss.core.activity.compose.BaseComposeActivity;\nimport com.wgllss.dynamic.host.lib.classloader.PluginKey;\nimport com.wgllss.dynamic.runtime.library.WXHostActivityDelegate;\n\nimport java.io.File;\n\npublic class HostComposePluginActivity extends BaseComposeActivity {\n    private PluginClassLoader pluginDexClassLoader;\n    private Resources pluginResources;\n    private WXHostActivityDelegate mHostDelegate;\n    private String skinPackageName;\n    private boolean isFirst = true;\n\n    private String pluginApkPath = \"\";\n    private String activityName = \"\";\n    private String privatePackage = \"\";\n\n    @Override\n    protected void onSaveInstanceState(@NonNull Bundle outState) {\n        super.onSaveInstanceState(outState);\n        outState.putString(PluginKey.pluginApkPathKey, pluginApkPath);\n        outState.putString(PluginKey.activityNameKey, activityName);\n        outState.putString(PluginKey.privatePackageKey, privatePackage);\n        if (mHostDelegate != null) mHostDelegate.onSaveInstanceState(outState);\n    }\n\n    @Override\n    protected void onCreate(@Nullable Bundle savedInstanceState) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {\n            //适配刘海屏\n            WindowManager.LayoutParams lp = getWindow().getAttributes();\n            lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;\n            getWindow().setAttributes(lp);\n        }\n        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);\n        getWindow().setStatusBarColor(Color.TRANSPARENT);\n        super.onCreate(savedInstanceState);\n        if (savedInstanceState == null) {\n            if (getIntent() != null) {\n                pluginApkPath = getIntent().getStringExtra(PluginKey.pluginApkPathKey);\n                activityName = getIntent().getStringExtra(PluginKey.activityNameKey);\n                privatePackage = getIntent().getStringExtra(PluginKey.privatePackageKey);\n            } else {\n                throw new RuntimeException(\"There are no pluginApkPath, activityName, or privatePackage parameters in the intent\");\n            }\n        } else {\n            pluginApkPath = savedInstanceState.getString(PluginKey.pluginApkPathKey);\n            activityName = savedInstanceState.getString(PluginKey.activityNameKey);\n            privatePackage = savedInstanceState.getString(PluginKey.privatePackageKey);\n        }\n        new File(pluginApkPath).setReadOnly();\n        new File(getDir(\"dex\", Context.MODE_PRIVATE).getAbsolutePath()).setReadOnly();\n        pluginDexClassLoader = new PluginClassLoader(privatePackage, pluginApkPath, getDir(\"dex\", Context.MODE_PRIVATE).getAbsolutePath(), null, getClassLoader());\n        int flags = (PackageManager.GET_META_DATA | PackageManager.GET_ACTIVITIES | PackageManager.GET_SERVICES\n                | PackageManager.GET_PROVIDERS | PackageManager.GET_RECEIVERS);\n        PackageManager packageManager = getApplicationContext().getPackageManager();\n        PackageInfo packageInfo = packageManager.getPackageArchiveInfo(pluginApkPath, flags);\n        ApplicationInfo applicationInfo = packageInfo.applicationInfo;\n        applicationInfo.sourceDir = pluginApkPath;\n        applicationInfo.publicSourceDir = pluginApkPath;\n        try {\n            pluginResources = packageManager.getResourcesForApplication(applicationInfo);\n            skinPackageName = applicationInfo.packageName;\n\n            mHostDelegate = pluginDexClassLoader.getInterface(WXHostActivityDelegate.class, activityName);\n            mHostDelegate.attachContext(this, pluginResources);\n            mHostDelegate.onCreate(savedInstanceState);\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n\n    @Override\n    protected void onRestart() {\n        super.onRestart();\n        if (mHostDelegate != null) mHostDelegate.onRestart();\n    }\n\n    @Override\n    protected void onStart() {\n        super.onStart();\n        if (mHostDelegate != null) mHostDelegate.onStart();\n    }\n\n    @Override\n    protected void onResume() {\n        super.onResume();\n        if (mHostDelegate != null) mHostDelegate.onResume();\n    }\n\n    @Override\n    protected void onPause() {\n        super.onPause();\n        if (mHostDelegate != null) mHostDelegate.onPause();\n    }\n\n    @Override\n    protected void onStop() {\n        super.onStop();\n        if (mHostDelegate != null) mHostDelegate.onStop();\n    }\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n        if (mHostDelegate != null) mHostDelegate.onDestroy();\n    }\n\n    @Override\n    public void onWindowFocusChanged(boolean hasFocus) {\n        super.onWindowFocusChanged(hasFocus);\n        if (hasFocus) {\n            if (isFirst) {\n                isFirst = false;\n                if (mHostDelegate != null) mHostDelegate.lazyInitValue();\n            }\n        }\n    }\n\n    @Override\n    public void onConfigurationChanged(@NonNull Configuration newConfig) {\n        super.onConfigurationChanged(newConfig);\n        if (mHostDelegate != null) mHostDelegate.onConfigurationChanged(newConfig);\n    }\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/HostPluginActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\nimport android.content.Context;\nimport android.content.pm.ApplicationInfo;\nimport android.content.pm.PackageInfo;\nimport android.content.pm.PackageManager;\nimport android.content.res.Configuration;\nimport android.content.res.Resources;\nimport android.graphics.Color;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.view.View;\nimport android.view.WindowManager;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.core.view.MenuProvider;\nimport androidx.lifecycle.Lifecycle;\nimport androidx.lifecycle.LifecycleOwner;\n\nimport com.wgllss.core.activity.BaseActivity;\nimport com.wgllss.dynamic.host.lib.classloader.PluginKey;\nimport com.wgllss.dynamic.runtime.library.WXHostActivityDelegate;\n\nimport java.io.File;\n\npublic class HostPluginActivity extends BaseActivity {\n    private PluginClassLoader pluginDexClassLoader;\n    private Resources pluginResources;\n    private WXHostActivityDelegate mHostDelegate;\n    private String skinPackageName;\n    private boolean isFirst = true;\n\n    private String pluginApkPath = \"\";\n    private String activityName = \"\";\n    private String privatePackage = \"\";\n\n    @Override\n    protected void onSaveInstanceState(@NonNull Bundle outState) {\n        super.onSaveInstanceState(outState);\n        outState.putString(PluginKey.pluginApkPathKey, pluginApkPath);\n        outState.putString(PluginKey.activityNameKey, activityName);\n        outState.putString(PluginKey.privatePackageKey, privatePackage);\n        if (mHostDelegate != null) mHostDelegate.onSaveInstanceState(outState);\n    }\n\n    @Override\n    protected void onCreate(@Nullable Bundle savedInstanceState) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {\n            //适配刘海屏\n            WindowManager.LayoutParams lp = getWindow().getAttributes();\n            lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;\n            getWindow().setAttributes(lp);\n        }\n        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);\n        getWindow().setStatusBarColor(Color.TRANSPARENT);\n        super.onCreate(savedInstanceState);\n        if (savedInstanceState == null) {\n            if (getIntent() != null) {\n                pluginApkPath = getIntent().getStringExtra(PluginKey.pluginApkPathKey);\n                activityName = getIntent().getStringExtra(PluginKey.activityNameKey);\n                privatePackage = getIntent().getStringExtra(PluginKey.privatePackageKey);\n            } else {\n                throw new RuntimeException(\"There are no pluginApkPath, activityName, or privatePackage parameters in the intent\");\n            }\n        } else {\n            pluginApkPath = savedInstanceState.getString(PluginKey.pluginApkPathKey);\n            activityName = savedInstanceState.getString(PluginKey.activityNameKey);\n            privatePackage = savedInstanceState.getString(PluginKey.privatePackageKey);\n        }\n        new File(pluginApkPath).setReadOnly();\n        new File(getDir(\"dex\", Context.MODE_PRIVATE).getAbsolutePath()).setReadOnly();\n        pluginDexClassLoader = new PluginClassLoader(privatePackage, pluginApkPath, getDir(\"dex\", Context.MODE_PRIVATE).getAbsolutePath(), null, getClassLoader());\n        int flags = (PackageManager.GET_META_DATA | PackageManager.GET_ACTIVITIES | PackageManager.GET_SERVICES | PackageManager.GET_PROVIDERS | PackageManager.GET_RECEIVERS);\n        PackageManager packageManager = getApplicationContext().getPackageManager();\n        PackageInfo packageInfo = packageManager.getPackageArchiveInfo(pluginApkPath, flags);\n        ApplicationInfo applicationInfo = packageInfo.applicationInfo;\n        applicationInfo.sourceDir = pluginApkPath;\n        applicationInfo.publicSourceDir = pluginApkPath;\n        try {\n            pluginResources = packageManager.getResourcesForApplication(applicationInfo);\n            skinPackageName = applicationInfo.packageName;\n\n            mHostDelegate = pluginDexClassLoader.getInterface(WXHostActivityDelegate.class, activityName);\n            mHostDelegate.attachContext(this, pluginResources);\n            mHostDelegate.onCreate(savedInstanceState);\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n\n    @Override\n    protected void onRestart() {\n        super.onRestart();\n        if (mHostDelegate != null) mHostDelegate.onRestart();\n    }\n\n    @Override\n    protected void onStart() {\n        super.onStart();\n        if (mHostDelegate != null) mHostDelegate.onStart();\n    }\n\n    @Override\n    protected void onResume() {\n        super.onResume();\n        if (mHostDelegate != null) mHostDelegate.onResume();\n    }\n\n    @Override\n    protected void onPause() {\n        super.onPause();\n        if (mHostDelegate != null) mHostDelegate.onPause();\n    }\n\n    @Override\n    protected void onStop() {\n        super.onStop();\n        if (mHostDelegate != null) mHostDelegate.onStop();\n    }\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n        if (mHostDelegate != null) mHostDelegate.onDestroy();\n    }\n\n    @Override\n    public void onWindowFocusChanged(boolean hasFocus) {\n        super.onWindowFocusChanged(hasFocus);\n        if (hasFocus) {\n            if (isFirst) {\n                isFirst = false;\n                if (mHostDelegate != null)\n                    mHostDelegate.lazyInitValue();\n            }\n        }\n    }\n\n    @Override\n    public void onPointerCaptureChanged(boolean hasCapture) {\n        super.onPointerCaptureChanged(hasCapture);\n    }\n\n    @Override\n    public void onConfigurationChanged(@NonNull Configuration newConfig) {\n        super.onConfigurationChanged(newConfig);\n        if (mHostDelegate != null) mHostDelegate.onConfigurationChanged(newConfig);\n    }\n\n    @Override\n    public void initControl(Bundle savedInstanceState) {\n\n    }\n\n    @Override\n    public void bindEvent() {\n\n    }\n\n    @Override\n    public void initValue() {\n\n    }\n\n    @Override\n    public void addMenuProvider(@NonNull MenuProvider provider, @NonNull LifecycleOwner owner, @NonNull Lifecycle.State state) {\n\n    }\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/HostPluginService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\nimport android.app.Service;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.os.IBinder;\nimport android.os.RemoteException;\n\nimport androidx.annotation.Nullable;\n\nimport com.wgllss.dynamic.host.lib.classloader.PluginKey;\nimport com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface;\nimport com.wgllss.dynamic.runtime.library.WXHostServiceDelegate;\n\nimport java.io.File;\nimport java.util.HashMap;\nimport java.util.LinkedHashMap;\n\npublic abstract class HostPluginService extends Service {\n\n    private PluginClassLoader pluginDexClassLoader;\n    private HashMap<String, WXHostServiceDelegate> map;\n\n    @Nullable\n    @Override\n    public IBinder onBind(Intent intent) {\n        initPluginService(intent, true);\n        return new WXDynamicAidlInterface.Stub() {\n\n            @Override\n            public void onBind(String serviceName, String packageName, String pluginApkPath) throws RemoteException {\n                android.util.Log.e(\"HostPluginService\", \"onBind(String serviceName):\" + serviceName + \"packageName:\" + packageName + \"pluginApkPath:\" + pluginApkPath);\n                initPluginService(new Intent().putExtra(PluginKey.serviceNameKey, serviceName).putExtra(PluginKey.privatePackageKey, packageName).putExtra(PluginKey.pluginApkPathKey, pluginApkPath), true);\n            }\n\n            @Override\n            public void onUnbind(String serviceName) throws RemoteException {\n                HostPluginService.this.onUnbind(new Intent().putExtra(PluginKey.serviceNameKey, serviceName));\n            }\n\n            @Override\n            public String onAidlCallBack(String serviceName, int methodID) throws RemoteException {\n                if (map != null && map.containsKey(serviceName)) {\n                    return map.get(serviceName).callMethodByID(methodID);\n                }\n                return null;\n            }\n        };\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n    }\n\n    @Override\n    public void onStart(Intent intent, int startId) {\n        if (map != null) {\n            for (WXHostServiceDelegate service : map.values()) {\n                if (service != null) service.onStart(intent, startId);\n            }\n        }\n        super.onStart(intent, startId);\n    }\n\n    @Override\n    public int onStartCommand(Intent intent, int flags, int startId) {\n        initPluginService(intent, false);\n        String serviceName = intent.getStringExtra(PluginKey.serviceNameKey);\n        if (map.containsKey(serviceName) && map.get(serviceName) != null) {\n            map.get(serviceName).onStartCommand(intent, flags, startId);\n            map.get(serviceName).onStart(intent, startId);\n        }\n        return onStartCommand();\n    }\n\n    public abstract int onStartCommand();\n\n    @Override\n    public boolean onUnbind(Intent intent) {\n        String serviceName = intent.getStringExtra(PluginKey.serviceNameKey);\n        if (map.containsKey(serviceName)) {\n            map.get(serviceName).onUnbind(intent);\n            map.remove(serviceName);\n            String bindKey = new StringBuilder(serviceName).append(\"_bind\").toString();\n            map.remove(bindKey);\n        }\n        return super.onUnbind(intent);\n    }\n\n    @Override\n    public void onDestroy() {\n        if (map != null) {\n            for (WXHostServiceDelegate service : map.values()) {\n                if (service != null) service.onDestroy();\n            }\n        }\n        super.onDestroy();\n    }\n\n    private void initPluginService(Intent intent, boolean isOnBind) {\n        try {\n            if (map == null) {\n                map = new LinkedHashMap();\n            }\n            if (intent != null) {\n                String serviceName = intent.getStringExtra(PluginKey.serviceNameKey);\n                if (!map.containsKey(serviceName)) {\n                    String pluginApkPath = intent.getStringExtra(PluginKey.pluginApkPathKey);\n                    String privatePackage = intent.getStringExtra(PluginKey.privatePackageKey);\n                    new File(pluginApkPath).setReadOnly();\n                    new File(getDir(\"dex\", Context.MODE_PRIVATE).getAbsolutePath()).setReadOnly();\n                    pluginDexClassLoader = new PluginClassLoader(privatePackage, pluginApkPath, getDir(\"dex\", Context.MODE_PRIVATE).getAbsolutePath(), null, getClassLoader());\n                    WXHostServiceDelegate serviceDelegate = pluginDexClassLoader.getInterface(WXHostServiceDelegate.class, serviceName);\n                    serviceDelegate.attachBaseContext(this);\n                    serviceDelegate.onCreate();\n                    map.put(serviceName, serviceDelegate);\n                }\n                String bindKey = new StringBuilder(serviceName).append(\"_bind\").toString();\n                if (isOnBind && !map.containsKey(bindKey)) {\n                    map.get(serviceName).onBind(intent);\n                    map.put(bindKey, null);\n                }\n            }\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginClassLoader.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\n\nimport com.wgllss.dynamic.host.lib.classloader.WXClassLoader;\n\npublic class PluginClassLoader extends WXClassLoader {\n    private String privatePackage;\n\n    public PluginClassLoader(String privatePackage, String dexPath, String optimizedDirectory, String librarySearchPath, ClassLoader parent) {\n        super(dexPath, optimizedDirectory, librarySearchPath, parent);\n        this.privatePackage = privatePackage;\n    }\n\n    @Override\n    public Class<?> loadClass(String className) throws ClassNotFoundException {\n        if (!className.contains(privatePackage)) {\n            return parent.loadClass(className);\n        }\n        Class clazz = findLoadedClass(className);\n        if (clazz == null) {\n            try {\n                clazz = findClass(className);\n            } catch (ClassNotFoundException e) {\n            }\n            if (clazz == null) {\n                try {\n                    clazz = super.loadClass(className);\n                } catch (ClassNotFoundException e) {\n                    clazz = parent.loadClass(className);\n                }\n            }\n        }\n        return clazz;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartNotStickyService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginProcessStartNotStickyService extends HostPluginService {\n\n    @Override\n    public int onStartCommand() {\n        return START_NOT_STICKY;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartRedeliverIntentService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginProcessStartRedeliverIntentService extends HostPluginService {\n\n    @Override\n    public int onStartCommand() {\n        return START_REDELIVER_INTENT;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartStickyCompatibilityService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginProcessStartStickyCompatibilityService extends HostPluginService {\n\n    @Override\n    public int onStartCommand() {\n        return START_STICKY_COMPATIBILITY;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartStickyService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginProcessStartStickyService extends HostPluginService {\n\n    @Override\n    public int onStartCommand() {\n        return START_STICKY;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleInstanceActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleInstanceActivity extends HostPluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleInstanceComposeActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleInstanceComposeActivity extends HostComposePluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTaskActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleTaskActivity extends HostPluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTaskComposeActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleTaskComposeActivity extends HostComposePluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTopActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleTopActivity extends HostPluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTopComposeActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleTopComposeActivity extends HostComposePluginActivity {\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStandardActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStandardActivity extends HostPluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStandardComposeActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStandardComposeActivity extends HostComposePluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartNotStickyService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStartNotStickyService extends HostPluginService {\n\n    @Override\n    public int onStartCommand() {\n        return START_NOT_STICKY;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartRedeliverIntentService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStartRedeliverIntentService extends HostPluginService {\n\n    @Override\n    public int onStartCommand() {\n        return START_REDELIVER_INTENT;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartStickyCompatibilityService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStartStickyCompatibilityService extends HostPluginService {\n\n    @Override\n    public int onStartCommand() {\n        return START_STICKY_COMPATIBILITY;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartStickyService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStartStickyService extends HostPluginService {\n\n    @Override\n    public int onStartCommand() {\n        return START_STICKY;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk/src/test/java/com/wgllss/dynamic/runtime/ExampleUnitTest.kt",
    "content": "package com.wgllss.dynamic.runtime\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\nclass ExampleUnitTest {\n    @Test\n    fun addition_isCorrect() {\n        assertEquals(4, 2 + 2)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-assets-source-apk/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-assets-source-apk/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.web.assets.source'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.web.assets.source\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"classes_business_web_res.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndef createCopyTask(assembleReleaseTask, buildType) {\n    def inputFile = file(\"${getProject().getBuildDir()}/outputs/apk/release/classes_business_web_res.apk\")\n    def outputFile = file(\"${rootProject.getBuildDir()}/classes_business_web_res\")\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n   return tasks.create(\"assembleCopy\", Copy) {\n        group = 'other'\n        description = \"复制json到 指定输出目录\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(assembleReleaseTask.name)\n}\n\ntasks.whenTaskAdded { task ->\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(task, \"release\")\n    }\n//    if (task.name == \"cleanJson\") {\n//        createVersionJson(task, \"Release\")\n//    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-assets-source-apk/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-assets-source-apk/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.web.assets.source\" />\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-assets-source-apk/src/main/assets/css/main.8f39d45c.css",
    "content": "@charset \"UTF-8\";*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}:after,:before{text-decoration:inherit;vertical-align:inherit}:where(:root){-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;cursor:default;line-height:1.5;overflow-wrap:break-word;-moz-tab-size:4;-o-tab-size:4;tab-size:4}:where(body){margin:0}:where(h1){font-size:2em;margin:.67em 0}:where(dl,ol,ul) :where(dl,ol,ul){margin:0}:where(hr){color:inherit;height:0}:where(nav) :where(ol,ul){list-style-type:none;padding:0}:where(nav li):before{content:\"\\200B\";float:left}:where(pre){font-family:monospace,monospace;font-size:1em;overflow:auto}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(audio,canvas,iframe,img,svg,video){vertical-align:middle}:where(iframe){border-style:none}:where(svg:not([fill])){fill:currentColor}:where(table){border-collapse:collapse;border-color:inherit;text-indent:0}:where(button,input,select){margin:0}:where(button,[type=button i],[type=reset i],[type=submit i]){-webkit-appearance:button}:where(fieldset){border:.01333rem solid #a0a0a0}:where(progress){vertical-align:baseline}:where(textarea){margin:0;resize:vertical}:where([type=search i]){-webkit-appearance:textfield;outline-offset:-.02667rem}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:-webkit-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:-webkit-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(details>summary:first-of-type){display:list-item}:where([aria-busy=true i]){cursor:progress}:where([aria-controls]){cursor:pointer}:where([aria-disabled=true i],[disabled]){cursor:not-allowed}:where([aria-hidden=false i][hidden]){display:inline;display:initial}:where([aria-hidden=false i][hidden]:not(:focus)){clip:rect(0,0,0,0);position:absolute}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Helvetica Neue,PingFang SC,sans-serif}code,kbd,pre,samp{font-family:Menlo,Consolas,Roboto Mono,monospace}a{-webkit-tap-highlight-color:rgba(0,0,0,0)}body.ios{cursor:pointer}@font-face{font-family:icomoon;font-style:normal;font-weight:400;src:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/icomoon.1adfe1c60f03e5bc8bd0.ttf) format(\"truetype\"),url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/icomoon.be9154276c565176b74c.woff) format(\"woff\"),url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/icomoon.c3831930ea32fc59358b.svg) format(\"svg\")}[class*=\" icon-\"],[class^=icon-]{speak:none;-webkit-font-feature-settings:normal;font-feature-settings:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:icomoon!important;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.icon-logo{color:#fff}.icon-play:before{content:\"\"}.icon-href:before{content:\"\"}.icon-radio:before{content:\"\"}.icon-radio-checked:before{content:\"\"}.icon-talk:before{content:\"\"}.icon-checkbox:before{content:\"\"}.icon-checkbox-checked:before{content:\"\"}.icon-flag:before{content:\"\"}.icon-image:before{content:\"\"}.icon-logo:before{content:\"\"}.icon-like:before{content:\"\"}.icon-liked:before{content:\"\"}.icon-timeline:before{content:\"\"}.icon-read:before{content:\"\"}.icon-audio:before{content:\"\"}.icon-arrow:before{content:\"\"}.icon-live:before{content:\"\"}.icon-quotes-left:before{content:\"\"}.icon-quotes-right:before{content:\"\"}.icon-close:before{content:\"\"}.icon-weixin:before{content:\"\"}.icon-qq:before{content:\"\"}.icon-weibo:before{content:\"\"}.icon-switch:before{content:\"\"}.icon-email:before{content:\"\"}.icon-talking:before{content:\"\"}.icon-vip{background:#f1c37e url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/vip.35d08192e94b04059f4f.png) 50%/100% 100% no-repeat;border-radius:.06667rem;display:inline-block;height:.48rem;width:.72rem}.main.main-paid .article .article-body:after{background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#fff),to(hsla(0,0%,100%,0)));background:linear-gradient(0deg,#fff 0,hsla(0,0%,100%,0));bottom:0;content:\"\";height:4.26667rem;left:0;pointer-events:none;position:absolute;width:100%}.main.main-paid .main-openApp{display:none}.main.main-paid .expend-title{pointer-events:none;position:relative;z-index:10}.banner-vipBanner{width:100%}.article-pay{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:0 0 .4rem}.article-pay.article-pay-collect .pay-price,.article-pay.article-pay-vip .pay-price{background:#f5f7f9;color:#333;font-weight:400}.article-pay .pay-buyCount-wrap{-webkit-box-align:center;-ms-flex-align:center;-ms-flex-item-align:stretch;align-items:center;align-self:stretch;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.32rem;margin:.26667rem 0 .64rem;text-align:center}.article-pay .pay-buyCount-wrap .pay-wordCount{font-size:.4rem;font-weight:600}.article-pay .pay-buyCount-wrap:after,.article-pay .pay-buyCount-wrap:before{-webkit-box-flex:1;-ms-flex-positive:1;background:#ddd;content:\"\";flex-grow:1;height:1PX;min-width:.13333rem;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.article-pay .pay-buyCount-wrap:before{margin:0 .33333rem 0 .13333rem}.article-pay .pay-buyCount-wrap:after{margin:0 .13333rem 0 .33333rem}.article-pay .pay-buyCount-wrap .icon-arrow{color:#999;margin:0 0 0 .2rem;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.article-pay .pay-buyCount{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow:hidden}.article-pay .pay-buyCount,.article-pay .pay-record{display:-webkit-box;display:-ms-flexbox;display:flex}.article-pay .pay-record{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.article-pay .pay-record .s-shrink{-ms-flex-negative:0;flex-shrink:0}.article-pay .pay-record .s-collectName{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.article-pay .pay-record .s-strong{color:#333;font-weight:500}.article-pay .pay-collect,.article-pay .pay-price{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#ee1a1a;border-radius:.53333rem;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.4rem;font-weight:500;font-weight:600;height:1.06667rem;justify-content:center;margin:.16rem 0;min-width:66%;padding:0 .13333rem;white-space:nowrap}.article-pay .pay-collect .s-small,.article-pay .pay-price .s-small{font-size:.34667rem;font-weight:400;margin:0 0 0 .2rem}.article-pay .pay-vip{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:-webkit-gradient(linear,left top,right top,from(rgba(195,143,58,.25)),to(rgba(195,143,58,.5)));background-image:linear-gradient(90deg,rgba(195,143,58,.25),rgba(195,143,58,.5));border-radius:1.33333rem;color:#783c00;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.4rem;font-weight:500;height:1.06667rem;justify-content:center;margin:.16rem 0;min-width:66%;padding:0 .13333rem;position:relative;white-space:nowrap}.article-pay .pay-vip .s-bubble{background:#783c00;border-radius:.26667rem;color:#fff;font-size:.29333rem;font-weight:600;line-height:.53333rem;padding:0 .2rem;position:absolute;right:1.06667rem;text-align:center;top:-.4rem;-webkit-transform:translateX(50%);transform:translateX(50%);z-index:10}.article-pay .pay-vip .s-bubble:after{border:.26667rem solid transparent;border-left-color:#783c00;bottom:-.13333rem;content:\"\";height:0;left:50%;position:absolute;width:0;z-index:-1}.article-pay .pay-vip-tip{background:#333;border-radius:.26667rem;color:#fff;font-size:.29333rem;font-weight:600;line-height:.53333rem;padding:0 .2rem;position:absolute;right:-.8rem;text-align:center;top:-.4rem;z-index:10}.article-pay .pay-vip-tip .tip-fullPrice{color:#fff;font-size:.29333rem;font-weight:200;opacity:.8;text-align:center;text-decoration:line-through}.article-pay .pay-vip-tip:after{border:.26667rem solid transparent;border-left-color:#333;bottom:-.13333rem;content:\"\";height:0;left:50%;position:absolute;width:0;z-index:-1}.article-pay .pay-bugNotes{color:#999;font-size:.32rem;font-weight:400;margin:.16rem 0}.article-pay .pay-bugNotes a{color:#666}.article-payCollect{-webkit-box-orient:vertical;-webkit-box-direction:normal;background:#f5f7f9;border-radius:.26667rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;margin:.4rem 0;padding:.16rem .32rem}.article-payCollect .s-title{color:#999;font-size:.32rem;padding:.08rem 0 0}.article-payCollect .payCollect-content{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;padding:.32rem 0}.article-payCollect .payCollect-cover{-ms-flex-negative:0;border-radius:.08rem;flex-shrink:0;height:1.33333rem;margin:0 .21333rem 0 0;-o-object-fit:cover;object-fit:cover;overflow:hidden;width:1.33333rem}.article-payCollect .payCollect-info{-webkit-box-orient:vertical;-webkit-box-direction:normal;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden}.article-payCollect .payCollect-name{color:#333;font-size:.42667rem;line-height:2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.article-payCollect .payCollect-count{color:#999;font-size:.32rem}.article-payCollect .paidCollect-line{background-color:#ddd;height:.01333rem;margin:0 0 .16rem;-webkit-transform:scaleY(.5);transform:scaleY(.5);width:100%}.article-payCollect .payCollect-recommend{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;height:1.17333rem;overflow:hidden;padding:0 .18667rem}.article-payCollect .recommend-tip{-ms-flex-negative:0;color:#999;flex-shrink:0;font-size:.32rem;font-weight:500;margin:0 .4rem 0 0}.article-payCollect .recommend-title{-webkit-box-flex:1;-ms-flex-positive:1;color:#666;flex-grow:1;font-size:.4rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.article-payCollect .icon-arrow{-ms-flex-negative:0;color:#b4b4b4;flex-shrink:0;font-size:.26667rem;margin:0 0 0 .06667rem}.article-payVip-recommend{-webkit-box-orient:vertical;-webkit-box-direction:normal;background:#f5f7f9;border-radius:.26667rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;margin:.4rem 0;padding:.16rem .32rem}.article-payVip-recommend.article-payVip-recommend-content{padding:0 .32rem}.article-payVip-recommend .payVip-swiper{overflow:hidden}.article-payVip-recommend .swiper-pagination{-webkit-box-pack:center;-ms-flex-pack:center;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:center}.article-payVip-recommend .swiper-pagination .swiper-pagination-bullet{background:rgba(0,0,0,.2);border-radius:50%;display:block;height:.16rem;margin:0 .06667rem;width:.16rem}.article-payVip-recommend .swiper-pagination .swiper-pagination-bullet.swiper-pagination-bullet-active{background:rgba(0,0,0,.5);border-radius:.08rem;width:.32rem}.article-payVip-recommend .s-header{-webkit-box-pack:justify;-ms-flex-pack:justify;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:space-between}.article-payVip-recommend .s-header a,.article-payVip-recommend .s-title{color:#999;font-size:.32rem;padding:.08rem 0 0}.article-payVip-recommend ul{list-style:none;margin:0;padding:0}.article-payVip-recommend .s-item{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;padding:.32rem 0}.article-payVip-recommend .s-cover{-ms-flex-negative:0;border-radius:.08rem;flex-shrink:0;height:1.6rem;margin:0 .21333rem 0 0;-o-object-fit:cover;object-fit:cover;overflow:hidden;width:2.13333rem}.article-payVip-recommend .s-info{-webkit-box-orient:vertical;-webkit-box-direction:normal;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden}.article-payVip-recommend .s-name{-webkit-line-clamp:2;-webkit-box-orient:vertical;color:#333;display:-webkit-box;font-size:.37333rem;line-height:.48rem;max-height:.96rem;min-height:.96rem;overflow:hidden;text-overflow:ellipsis}.article-payVip-recommend .s-desc{color:#999;font-size:.32rem;line-height:1;margin:.21333rem 0 0}.article-payVip-recommend .s-desc .s-price{font-weight:600;margin:0 .26667rem 0 0}.article-payVip-recommend .s-line{background-color:#ddd;height:.01333rem;margin:0 0 .16rem;-webkit-transform:scaleY(.5);transform:scaleY(.5);width:100%}body{background:#fff;margin:0 auto;max-width:750PX;overflow-x:hidden;overflow-y:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}a{color:#1b88ee;text-decoration:none}figure{margin:0}.main{font-size:.48rem;padding:0 .53333rem}.main .article-title{color:#333;font-size:.66667rem;font-weight:500;letter-spacing:0;line-height:.90667rem;margin:.53333rem 0}.main .article-info{-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:space-between;margin:.13333rem 0 .66667rem}.main .article-info .s-avatar{border-radius:50%;height:.86667rem;margin-right:.13333rem;width:.86667rem}.main .article-info .s-author{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-flex:1;-ms-flex-positive:1;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;flex-grow:1;line-height:1.5;overflow:hidden}.main .article-info address{color:#333;font-size:.34667rem;font-style:normal;letter-spacing:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main .article-info address a{color:#333}.main .article-info .s-time{color:#b4b4b4;font-size:.32rem}.main .article-info .s-comment{-ms-flex-negative:0;background:#f5f7f9;border-radius:.38667rem;flex-shrink:0;font-size:.37333rem}.main .article-info .s-comment a{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#333;display:-webkit-box;display:-ms-flexbox;display:flex;height:.77333rem;line-height:.77333rem;padding:0 .32rem}.main .article-info .s-comment a:before{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/discuss2.13b37e82da55f366d844.png) 50% no-repeat;background-size:100% 100%;content:\"\";height:.53333rem;margin:0 .13333rem 0 0;width:.53333rem}.main .article-body{color:#333;font-weight:400;letter-spacing:0;line-height:.74667rem;overflow:hidden;overflow-wrap:break-word;position:relative;text-align:justify}.main .article-body.article-body-fold{max-height:200vh}.main .article-body.article-body-fold:after{background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#fff),to(hsla(0,0%,100%,0)));background:linear-gradient(0deg,#fff 0,hsla(0,0%,100%,0));bottom:0;content:\"\";height:4.26667rem;left:0;pointer-events:none;position:absolute;width:100%}.main .article-body .preset-original-title{color:#666;line-height:.8rem;margin-top:.36rem;text-align:justify;word-break:break-all}.main .article-body .preset-original-title:before{content:\"「\";margin:0 .08rem 0 -.13333rem}.main .article-body .preset-original-title:after{content:\"」\";margin-left:.08rem}.main .article-body blockquote{border-left:.06667rem solid #ddd;border-radius:.02667rem;color:#666;font-size:.45333rem;margin:0;padding:0 0 0 .26667rem}.main .article-body pre{white-space:pre-wrap}.main .article-body ol{padding-left:1em}.main .article-body .preset-text-border{border:.02667rem solid #000}.main .article-body .hljs{background-color:#f5f7f9;font-size:.75em;padding:.6em .8em!important}.main .unfold-wrap{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#333;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.4rem;justify-content:center;padding:.13333rem 0}.main .unfold-wrap .icon-arrow{font-size:.29333rem;margin:0 0 0 .2rem;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.main .main-openApp{border:.02667rem solid #ee1a1a;border-radius:.58667rem;color:#ee1a1a;font-size:.45333rem;height:1.17333rem;margin:.53333rem auto .8rem;max-width:100%;text-align:center;width:90%}.main .main-openApp,.rumor{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:center}.rumor{background:rgba(254,93,16,.05);border-radius:.08rem;color:#fe5d10;font-size:.32rem;height:.66667rem;letter-spacing:0;line-height:1;margin:.32rem 0 0}.rumor:before{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/rumor.fb75769dd96838373339.png) 50%/100% 100% no-repeat;content:\"\";height:.4rem;margin:0 .10667rem 0 0;width:.4rem}.area-topBanner{max-width:100%;overflow:hidden}.loading{-webkit-box-pack:center;-ms-flex-pack:center;display:none;justify-content:center;margin:.13333rem 0}.loading.show{display:-webkit-box;display:-ms-flexbox;display:flex}.loading .circular{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;height:.93333rem;-webkit-transform-origin:center center;transform-origin:center center;width:.93333rem}.loading .path{stroke-dasharray:1,200;stroke-dashoffset:0;stroke:#ccc;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-.46667rem}to{stroke-dasharray:89,200;stroke-dashoffset:-1.65333rem}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-.46667rem}to{stroke-dasharray:89,200;stroke-dashoffset:-1.65333rem}}.article-footer{color:#999;font-size:.42667rem;line-height:.58667rem}.article-footer .s-statement{font-size:.37333rem;margin:.26667rem 0}.article-footer .s-info{margin:.13333rem 0}.footer{-webkit-box-sizing:content-box;box-sizing:content-box;height:2rem;padding-bottom:calc(env(safe-area-inset-bottom) - 16PX)}.hide-comment .comment,.hide-comment .main .article-info .s-comment,.hide-comment .topNav .s-comment{display:none}.toutiao .keyword-search{color:#404040;pointer-events:none}.miniprogram .m-photo .s-tip,.miniprogram .m-photoSet .s-tip,.miniprogram .m-video .s-tip,.miniprogram .main-openApp,.miniprogram .recommend .recommend-item .s-openApp,.newsapp .m-photo .s-tip,.newsapp .m-photoSet .s-tip,.newsapp .m-video .s-tip,.newsapp .main-openApp,.newsapp .recommend .recommend-item .s-openApp,.toutiao .comment,.toutiao .m-photo .s-tip,.toutiao .m-photoSet .s-tip,.toutiao .m-video .s-tip,.toutiao .recommend .recommend-item .s-openApp{display:none}.widget-slider{max-width:10rem!important}.widget-slider .widget-slider-article-simple{max-width:10rem}.pc .comment-open-app,.pc .m-photo .s-tip,.pc .m-photoSet .s-tip,.pc .m-video .s-tip,.pc .main-openApp,.pc .recommend .recommend-item .s-openApp{display:none}.pc .author-homePage{pointer-events:none}@media screen and (min-width:850px){body .floatMenu .floatMenu-content{right:-1.2rem}}body.paid .topNav{background:#fff}body.paid .topNav .s-comment.show{display:none}body.paid .topNav .s-back{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/home.470d92a5fdedaaba3191.png) 50% no-repeat;background-size:.66667rem .66667rem;padding:.26667rem .16rem .26667rem .13333rem}body.paid .topNav .s-search{background:#f5f7f9}body.paid .topNav .s-search .hot-word{color:#666}body.paid .topNav .s-search .hot-word:before{background-image:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/search-light.7f1f63c1c663f9ccd6b2.png);margin:0 .13333rem 0 0}body.paid .topNav .s-channel{display:none}body.paid .topNav .topNav-user{display:block}body.paid .main .article-info .s-comment{display:none}body.paid .m-photo img,body.paid .m-photoSet img,body.paid .m-video img{background:#e5e5e5 50%/3.6rem 2.69333rem no-repeat}body.paid .article-footer .s-info,body.paid .article-footer .s-statement{display:none}body.paid .main .article-info{pointer-events:none}body.paid .backflow-floating,body.paid .comment,body.paid .m-photo .s-tip,body.paid .m-photoSet .s-tip,body.paid .m-video .s-tip,body.paid .main-openApp,body.paid .recommend .recommend-item .s-openApp{display:none}.header,.topNav{height:1.28rem;max-width:750PX;width:100%}.topNav{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#ef4645;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;left:0;margin:0 auto;position:fixed;right:0;top:0;z-index:100}.topNav .s-back{-ms-flex-item-align:stretch;-ms-flex-negative:0;align-self:stretch;background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/logo.59f1e7f191ea16f90f29.png) 50% no-repeat;background-size:1.2rem .58667rem;-webkit-box-sizing:content-box;box-sizing:content-box;flex-shrink:0;font-size:0;padding:.26667rem .16rem .26667rem .4rem;width:1.2rem}.topNav .s-line{background:hsla(0,0%,100%,.5);height:.42667rem;width:1PX}.topNav .s-channel{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;-ms-flex-item-align:stretch;align-items:center;align-self:stretch;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;flex-shrink:0;font-size:.4rem;font-weight:400;justify-content:center;margin:0 .4rem 0 .16rem}.topNav .s-search{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;background:rgba(0,0,0,.1);border-radius:.46667rem;color:#fff;font-size:.4rem;height:.85333rem;justify-content:flex-start;margin:0 .4rem 0 0;padding:0 .13333rem 0 .26667rem;position:relative}.topNav .s-search,.topNav .s-search .hot-words{-webkit-box-flex:1;-ms-flex-positive:1;display:-webkit-box;display:-ms-flexbox;display:flex;flex-grow:1;overflow:hidden}.topNav .s-search .hot-words{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.topNav .s-search .hot-word{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;align-items:center;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;flex-shrink:0;height:.85333rem;justify-content:flex-start;overflow:hidden}.topNav .s-search .hot-word .s-text{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.topNav .s-search .hot-word:before{-ms-flex-negative:0;background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/search.f764c8e1be1bc69b6b2d.png) no-repeat 50%;background-size:100% 100%;content:\"\";flex-shrink:0;height:.4rem;margin:0 .05rem 0 0;width:.4rem}.topNav .s-comment{-ms-flex-negative:0;background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/discuss.aae7acd46aa0c6155bb1.png) no-repeat 0 100%;background-size:.66667rem .66667rem;color:#ee1a1a;flex-shrink:0;font-size:.26667rem;font-weight:700;height:.68rem;max-width:0;position:relative;-webkit-transform:scale(0);transform:scale(0)}.topNav .s-comment .s-count{background:#fff;border-radius:.16rem;height:.32rem;line-height:.32rem;margin:0 0 0 .4rem;padding:0 .06667rem}.topNav .s-comment.show{margin:0 .26667rem 0 0;max-width:unset;min-width:.06667rem;-webkit-transform:scale(1);transform:scale(1);-webkit-transition:-webkit-transform .25s linear;transition:-webkit-transform .25s linear;transition:transform .25s linear;transition:transform .25s linear,-webkit-transform .25s linear}.topNav .topNav-user{background:#f5f7f9 url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/mine.25627349a06a2600881b.png) 50%/.64rem .64rem no-repeat;border-radius:50%;display:none;height:.85333rem;margin:0 .33333rem 0 0;width:.85333rem}.hot-search{bottom:-13.32rem;font-size:.37333rem;position:fixed}.hot-search h3{font-size:.42667rem}.hot-search ul{list-style:none;margin:0;padding:0}.comment{padding:.93333rem 0 .66667rem}.comment h3{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/comment-title.2310fbb7c01acd14cb88.png) 50% no-repeat;background-size:100% 100%;font-size:0;height:.8rem;margin:0 auto;padding:0;width:3.84rem}.comment .comment-list{margin:.42667rem 0 0}.comment .comment-list .comment-card{margin:0 0 .48rem}.comment .comment-list .comment-card header{-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:space-between}.comment .comment-list .comment-card .s-avatar{-ms-flex-negative:0;border-radius:50%;flex-shrink:0;height:.93333rem;margin:0 .2rem 0 0;width:.93333rem}.comment .comment-list .comment-card .s-info{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-flex:1;-ms-flex-positive:1;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;flex-grow:1}.comment .comment-list .comment-card .s-nick{color:#333;font-size:.37333rem;line-height:.48rem}.comment .comment-list .comment-card .s-location{color:#b4b4b4;font-size:.29333rem;letter-spacing:0;line-height:.37333rem}.comment .comment-list .comment-card .s-vote{color:#999;font-size:.34667rem;font-weight:500;line-height:.4rem;line-height:.61333rem}.comment .comment-list .comment-card .icon-fav{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/praise.f8b126943a80fffc22b1.png);background-size:100% 100%;display:inline-block;height:.53333rem;margin:0 0 0 .06667rem;vertical-align:top;width:.53333rem}.comment .comment-list .comment-card .s-content{color:#333;font-size:.48rem;letter-spacing:0;margin:.16rem 0 .16rem 1.12rem}.comment .comment-list .comment-card .s-time{color:#b4b4b4;font-size:.32rem;letter-spacing:0;line-height:.45333rem;margin:0 0 0 1.12rem}.comment .comment-link{-ms-flex-pack:distribute;color:#ee1a1a;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.42667rem;font-weight:400;justify-content:space-around}.comment .comment-link a{color:#ee1a1a}.comment .comment-link .icon-arrow{font-size:.24rem;margin:.13333rem 0 .13333rem .06667rem}.comment .comment-empty{color:#333;font-size:.48rem;font-weight:400;letter-spacing:0;margin:1.33333rem 0;text-align:center}.ask{margin:.4rem 0 0;overflow:hidden}.ask h3{color:#333;font-size:.45333rem;font-weight:500;line-height:.66667rem}.ask ul{list-style:none;margin:0;padding:0}.ask li{-webkit-box-orient:vertical;-webkit-box-direction:normal;border-bottom:1px solid #e5e5e5;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden;padding:.32rem 0}.ask li a{color:#333}.ask li:last-child{border-bottom:none}.ask li .s-title{font-size:.48rem}.ask li .s-doctor{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.37333rem}.ask li .s-avatar{border-radius:.26667rem;height:1.06667rem;overflow:hidden;width:1.06667rem}.ask li .s-avatar img{height:auto;width:100%}.ask li .s-info{-webkit-box-orient:vertical;-webkit-box-direction:normal;color:#333;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;font-size:.37333rem;margin:.32rem 0 .21333rem .13333rem}.ask li .s-info .s-hospital{color:#999;font-size:.34667rem}.ask li .s-detial{-webkit-line-clamp:2;-webkit-box-orient:vertical;color:#666;display:-webkit-box;font-size:.42667rem;letter-spacing:.01333rem;line-height:.66667rem;max-height:1.33333rem;overflow:hidden;text-align:justify;text-overflow:ellipsis}.card-recommend-oneImg{color:#333;font-size:.48rem}.card-recommend-oneImg article{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;min-height:2.89333rem}.card-recommend-oneImg article .s-left{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-box-flex:1;-ms-flex-positive:1;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;flex-grow:1;justify-content:space-between;min-height:2.33333rem;min-width:0}.card-recommend-oneImg article .s-info{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#999;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.32rem}.card-recommend-oneImg article .s-source{margin:0 .21333rem 0 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-recommend-oneImg article .s-tag{color:#f52727}.card-recommend-oneImg article .s-replyCount,.card-recommend-oneImg article .s-tag{-ms-flex-negative:0;flex-shrink:0;margin:0 .21333rem 0 0}.card-recommend-oneImg article .s-openApp{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;align-items:center;border:.02667rem solid #ee1a1a;border-radius:1.33333rem;-webkit-box-sizing:content-box;box-sizing:content-box;color:#ee1a1a;display:-webkit-box;display:-ms-flexbox;display:flex;flex-shrink:0;font-size:.32rem;height:.58667rem;justify-content:center;padding:0 .24rem}.card-recommend-oneImg article .s-holder{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.card-recommend-oneImg article .s-right{-ms-flex-negative:0;border-radius:.08rem;flex-shrink:0;height:2.22667rem;margin:0 0 0 .4rem;overflow:hidden;position:relative;width:2.90667rem}.card-recommend-oneImg article .s-right img{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.card-recommend-oneImg article .s-right .icon-play{color:#fff;font-size:.42667rem;left:50%;position:absolute;text-align:center;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);z-index:5}.card-recommend-oneImg article .s-right .s-audioTime{-webkit-box-align:center;-ms-flex-align:center;align-items:center;bottom:.06667rem;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.32rem;position:absolute;right:.06667rem;z-index:5}.card-recommend-oneImg article .s-right .s-audioTime .icon-audio{color:#fff;font-size:.26667rem;margin:0 .13333rem 0 0;text-align:center}.card-recommend-oneImg article h4{-webkit-line-clamp:2;-webkit-box-orient:vertical;color:#333;display:-webkit-box;font-size:.48rem;font-weight:400;line-height:.66667rem;margin:0;max-height:1.33333rem;overflow:hidden;text-overflow:ellipsis}.card-recommend-threeImg{color:#333;font-size:.48rem}.card-recommend-threeImg article{-webkit-box-orient:vertical;-webkit-box-direction:normal;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-height:2.89333rem;padding:.21333rem 0}.card-recommend-threeImg article .s-info{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#999;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.32rem}.card-recommend-threeImg article .s-source{margin:0 .21333rem 0 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-recommend-threeImg article .s-tag{color:#f52727}.card-recommend-threeImg article .s-replyCount,.card-recommend-threeImg article .s-tag{-ms-flex-negative:0;flex-shrink:0;margin:0 .21333rem 0 0}.card-recommend-threeImg article .s-imgs-wrap{margin:.10667rem 0;padding-bottom:25%;position:relative;width:100%}.card-recommend-threeImg article .s-imgs{-webkit-box-pack:justify;-ms-flex-pack:justify;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:space-between;left:0;margin:0;position:absolute;right:0;top:0}.card-recommend-threeImg article .s-imgs img{border-radius:.08rem;max-height:190PX;-o-object-fit:cover;object-fit:cover;overflow:hidden;width:33%}.card-recommend-threeImg article .s-openApp{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;align-items:center;border:.02667rem solid #ee1a1a;border-radius:1.33333rem;-webkit-box-sizing:content-box;box-sizing:content-box;color:#ee1a1a;display:-webkit-box;display:-ms-flexbox;display:flex;flex-shrink:0;font-size:.32rem;height:.58667rem;justify-content:center;padding:0 .24rem}.card-recommend-threeImg article .s-holder{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.card-recommend-threeImg article h4{color:#333;font-size:.48rem;font-weight:400;line-height:.66667rem;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.recommend{margin:.4rem 0 0;overflow:hidden}.recommend h3{color:#333;font-size:.45333rem;font-weight:500;line-height:.66667rem}.recommend ul{list-style:none;margin:0;padding:0}.recommend li{border-bottom:1px solid #eef1f7}.recommend li:last-child{border-bottom:none}.floatMenu{bottom:0;left:50%;max-width:750PX;opacity:0;pointer-events:none;position:fixed;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:100%;z-index:999}.floatMenu.show{opacity:1;pointer-events:auto;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.floatMenu .floatMenu-content{-webkit-box-orient:vertical;-webkit-box-direction:normal;background:hsla(0,0%,100%,.95);border-radius:.53333rem;-webkit-box-shadow:0 0 .10667rem 0 rgba(0,0,0,.12);box-shadow:0 0 .10667rem 0 rgba(0,0,0,.12);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;font-size:0;position:absolute;right:.4rem;top:-4.4rem;width:1.06667rem}.floatMenu em{-ms-flex-item-align:center;align-self:center;background:#ddd;height:1PX;width:.74667rem}.floatMenu .floatMenu-home,.floatMenu .floatMenu-toTop{background:50% no-repeat;background-size:.53333rem .53333rem;height:1.2rem}.floatMenu .floatMenu-toTop{background-image:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/menu-toTop.fe4b74d7c16e0758813b.png)}.floatMenu .floatMenu-home{background-image:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/menu-home.86e6b645737e5812a0f5.png)}.m-sectionTitle{margin:.26667rem 0 0;text-align:center}.m-sectionTitle img{height:.98667rem;margin-bottom:.05333rem;width:auto}.m-sectionTitle h3{font-size:.48rem;font-weight:700;line-height:.72rem;margin:0;padding:0}.m-photo{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-pack:center;-ms-flex-pack:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;justify-content:center;margin:.66667rem auto .77333rem;width:100%}.m-photo.small-photo .s-tip{display:none}.m-photo .gif-photo:after{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/gif.7d4d9f13d1801ec9b843.png) 50%/1.28rem 1.28rem no-repeat}.m-photo .gif-photo-loading:after,.m-photo .gif-photo:after{bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;z-index:10}.m-photo .gif-photo-loading:after{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/gif-loading.2f56edd154e8431be2c2.svg) 50%/1.28rem 1.28rem no-repeat}.m-photo .gif-photo-loading .circular{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;height:.93333rem;-webkit-transform-origin:center center;transform-origin:center center;width:.93333rem}.m-photo .gif-photo-loading .path{stroke-dasharray:1,200;stroke-dashoffset:0;stroke:#ccc;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}.m-photo .s-tip{background:#fff;border:1px solid #f5f7f9;-webkit-box-shadow:0 .02667rem .02667rem 0 rgba(0,0,0,.05);box-shadow:0 .02667rem .02667rem 0 rgba(0,0,0,.05);color:#333;font-size:.37333rem;height:1.25333rem;letter-spacing:0;line-height:1.25333rem;text-align:center}.m-photo .s-tip .icon-arrow{font-size:.26667rem}.m-photo .s-wrap{overflow:hidden;position:relative;text-align:center}.m-photo img{background:#e5e5e5 url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/bg.2256edadd69b78418e29.png) 50%/3.6rem 2.69333rem no-repeat;min-height:4.13333rem;-o-object-fit:contain;object-fit:contain;width:100%}.m-photo figcaption{color:#999;font-size:.37333rem;margin:.21333rem 0 0;padding:0 0 0 .34667rem;position:relative}.m-photo figcaption .icon-quotes-left{font-size:.21333rem;left:0;position:absolute;top:.21333rem}.photoPreview{background:#000;height:100%;left:0;position:fixed;top:0;width:100%;z-index:99999}.photoPreview.hide{display:none}.photoPreview .swiper-slide{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;justify-content:center;overflow:hidden;width:100%}.photoPreview .swiper-slide img{max-height:100%;max-width:100%}.photoPreview .swiper-pagination{bottom:.13333rem;color:#b4b4b4;font-size:.42667rem;font-weight:500;left:.26667rem;margin:0;position:absolute;z-index:10}.photoPreview .swiper-pagination .swiper-pagination-current{color:#ee1a1a;font-size:.74667rem}.photoPreview .s-close{height:.66667rem;left:.06667rem;position:absolute;top:.06667rem;width:.66667rem;z-index:50}.photoPreview .s-close:after,.photoPreview .s-close:before{background:#b4b4b4;content:\"\";height:.04rem;left:.13333rem;position:absolute;top:.29333rem;width:.4rem}.photoPreview .s-close:before{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.photoPreview .s-close:after{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.m-photoSet{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-pack:center;-ms-flex-pack:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;justify-content:center;margin:.66667rem auto .77333rem;width:100%}.m-photoSet .s-tip{background:#fff;border:1px solid #f5f7f9;-webkit-box-shadow:0 .02667rem .02667rem 0 rgba(0,0,0,.05);box-shadow:0 .02667rem .02667rem 0 rgba(0,0,0,.05);color:#333;font-size:.37333rem;height:1.25333rem;letter-spacing:0;line-height:1.25333rem;text-align:center}.m-photoSet .s-tip .icon-arrow{font-size:.26667rem}.m-photoSet .s-wrap{overflow:hidden;position:relative}.m-photoSet .s-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:rgba(0,0,0,.6);border-radius:.34667rem;bottom:.21333rem;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.32rem;font-weight:500;height:.69333rem;line-height:.69333rem;padding:0 .32rem;position:absolute;right:.21333rem;z-index:5}.m-photoSet .s-tag:before{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/photo.7577501b5095467d8ff1.png) 50% no-repeat;background-size:100% 100%;content:\"\";height:.32rem;margin:0 .09333rem 0 0;width:.32rem}.m-photoSet img{background:#e5e5e5 url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/bg.2256edadd69b78418e29.png) 50%/3.6rem 2.69333rem no-repeat;min-height:4.13333rem;-o-object-fit:contain;object-fit:contain;width:100%}.m-photoSet figcaption{color:#999;font-size:.37333rem;margin:.21333rem 0 0;padding:0 0 0 .34667rem;position:relative}.m-photoSet figcaption .icon-quotes-left{font-size:.21333rem;left:0;position:absolute;top:.21333rem}.m-audio{margin:0;padding:0;text-align:center}.m-audio figcaption{color:#999;font-size:.37333rem;margin:.21333rem 0 1.06667rem;text-align:center}.m-video{text-align:center;width:100%}.m-video,.m-video figure{margin:0;padding:0}.m-video .s-wrap{background:#000;overflow:hidden;position:relative;text-align:center;width:100%}.m-video .s-cover{height:100%;left:0;position:absolute;top:0;width:100%;z-index:10}.m-video .s-cover.hide{display:none}.m-video .s-cover img{background:#e5e5e5 url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/bg.2256edadd69b78418e29.png) 50%/3.6rem 2.69333rem no-repeat;height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.m-video .s-cover .icon-play{background-color:hsla(0,0%,100%,.9);border-radius:50%;color:#333;font-size:.45333rem;height:1.28rem;left:50%;line-height:1.28rem;position:absolute;text-align:center;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:1.28rem}.m-video .s-video video{max-height:670PX;width:100%}.m-video figcaption{color:#999;font-size:.37333rem;margin:.21333rem 0 1.06667rem;padding:0 0 0 .34667rem;position:relative;text-align:left}.m-video figcaption .icon-quotes-left{font-size:.21333rem;left:0;position:absolute;top:.21333rem}.m-video .s-tip{background:#fff;border:1px solid #f5f7f9;-webkit-box-shadow:0 .02667rem .02667rem 0 rgba(0,0,0,.05);box-shadow:0 .02667rem .02667rem 0 rgba(0,0,0,.05);color:#333;font-size:.37333rem;height:1.25333rem;letter-spacing:0;line-height:1.25333rem;text-align:center}.m-video .s-tip .icon-arrow{font-size:.26667rem}.m-timeline header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#333;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.45333rem;font-weight:500;line-height:.66667rem}.m-timeline header .icon-timeline{font-size:.4rem;margin:0 .13333rem 0 0}.m-timeline ul{list-style:none;margin:.4rem 0 0;padding:0 0 0 .06667rem}.m-timeline ul li{position:relative}.m-timeline ul li:before{background:#eee;content:\"\";height:100%;left:.06667rem;position:absolute;top:.46667rem;width:.02667rem}.m-timeline ul li:last-child:before{display:none}.m-timeline .s-time{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#ee1a1a;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.37333rem;line-height:.77333rem}.m-timeline .s-time:before{background:#fff;border:.02667rem solid #ee1a1a;border-radius:50%;content:\"\";height:.16rem;margin:0 .32rem 0 0;width:.16rem}.m-timeline .s-event{color:#666;font-size:.42667rem;font-weight:400;line-height:.66667rem;margin:0 0 0 .48rem}.m-spinfo{margin:.66667rem 0 .4rem}.m-spinfo .s-type{color:#333;font-size:.45333rem;font-weight:500;line-height:.66667rem;margin:0 0 .4rem}.m-spinfo .s-type:before{background:url(https://static.ws.126.net/163/frontend/backflow-ssr/combined.svg) 50% no-repeat;background-size:100% 100%;content:\"\";display:inline-block;height:.29333rem;margin:0 .18667rem 0 0;width:.21333rem}.m-spinfo .s-content{color:#666;font-size:.42667rem;line-height:.66667rem}.m-linkCard{margin:.4rem 0}.m-linkCard a{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fcfcfc;border:1px solid #ddd;border-radius:.05333rem;color:#999;padding:.29333rem .4rem .29333rem .29333rem}.m-linkCard .s-info,.m-linkCard a{display:-webkit-box;display:-ms-flexbox;display:flex}.m-linkCard .s-info{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-flex:1;-ms-flex-positive:1;-ms-flex-direction:column;flex-direction:column;flex-grow:1;margin:0 .4rem;overflow:hidden}.m-linkCard .s-info h3{color:#333;font-size:.48rem;line-height:.66667rem;margin:0}.m-linkCard .s-info h3,.m-linkCard .s-info small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m-linkCard .s-info small{color:#999;font-size:.34667rem}.m-linkCard .s-img{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;align-items:center;border-radius:.06667rem;display:-webkit-box;display:-ms-flexbox;display:flex;flex-shrink:0;height:1.46667rem;justify-content:center;overflow:hidden;width:1.46667rem}.m-linkCard .s-img img{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.m-linkCard .icon-arrow{-ms-flex-negative:0;flex-shrink:0}.m-link{color:#1b88ee}.m-liveCard{margin:.4rem 0}.m-liveCard a{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#f5f7f9;border-radius:.05333rem;color:#999;padding:.29333rem .4rem .29333rem .29333rem}.m-liveCard .s-info,.m-liveCard a{display:-webkit-box;display:-ms-flexbox;display:flex}.m-liveCard .s-info{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-flex:1;-ms-flex-positive:1;-ms-flex-direction:column;flex-direction:column;flex-grow:1;margin:0 .4rem;overflow:hidden}.m-liveCard .s-info h3{color:#333;font-size:.48rem;font-weight:400;line-height:.66667rem;margin:0}.m-liveCard .s-info h3,.m-liveCard .s-info small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m-liveCard .s-info small{color:#999;font-size:.34667rem}.m-liveCard .s-img{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;align-items:center;border-radius:.06667rem;display:-webkit-box;display:-ms-flexbox;display:flex;flex-shrink:0;height:1.46667rem;justify-content:center;overflow:hidden;width:1.46667rem}.m-liveCard .s-img img{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.m-variousTalks .s-header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#667c89;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.4rem;line-height:.53333rem;padding:.42667rem 0 .58667rem}.m-variousTalks .s-header .icon-talk{margin:0 .06667rem 0 0}.m-variousTalks ul{list-style:none;margin:0;padding:0 0 0 .13333rem}.m-variousTalks ul li{display:-webkit-box;display:-ms-flexbox;display:flex;margin:.10667rem 0}.m-variousTalks .s-avatar{-ms-flex-negative:0;border-radius:50%;flex-shrink:0;height:.85333rem;margin:0 .13333rem 0 0;overflow:hidden;width:.85333rem}.m-variousTalks .s-avatar img{height:100%;width:100%}.m-variousTalks .s-info{-webkit-box-orient:vertical;-webkit-box-direction:normal;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden}.m-variousTalks .s-info .s-blue{color:#5da4ef}.m-variousTalks .s-info .s-red{color:#e15241}.m-variousTalks .s-info .s-name{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.42667rem;line-height:.6rem;overflow:hidden}.m-variousTalks .s-info .s-name span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m-variousTalks .s-info .s-name .icon-flag{-ms-flex-negative:0;flex-shrink:0;font-size:.32rem;margin:0 0 0 .26667rem}.m-variousTalks .s-info .s-talk{color:#333;font-size:.42667rem;line-height:.6rem}.m-pk{-webkit-box-orient:vertical;-webkit-box-direction:normal;border:1px solid #ddd;border-radius:.08rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:.29333rem .4rem}.m-pk .s-title{color:#333;font-size:.45333rem;font-weight:400;line-height:.6rem;margin:0}.m-pk .s-opinions{-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#555;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.37333rem;justify-content:space-between;line-height:.6rem;margin:.29333rem 0}.m-pk .s-opinion{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:3.46667rem}.m-pk .s-opinion .s-blueFlag,.m-pk .s-opinion .s-redFlag{border-radius:.08rem;font-size:.29333rem;font-weight:500;line-height:.4rem;margin:0 .13333rem 0 0;padding:0 .10667rem}.m-pk .s-opinion .s-redFlag{background:rgba(238,26,26,.1);color:#ee1a1a}.m-pk .s-opinion .s-blueFlag{background:rgba(27,136,238,.1);color:#1b88ee}.m-pk .s-s,.m-pk .s-v{font-size:.66667rem;font-weight:600}.m-pk .s-v{color:#ee1a1a;margin:0 0 0 .29333rem}.m-pk .s-s{color:#1b88ee;margin:0 .29333rem 0 0}.m-pk .s-votes{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:0 0 .4rem}.m-pk .s-vote-blue,.m-pk .s-vote-red,.m-pk .s-votes{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.m-pk .s-vote-blue,.m-pk .s-vote-red{-webkit-box-pack:center;-ms-flex-pack:center;border-radius:50%;font-size:0;height:1.17333rem;justify-content:center;width:1.17333rem}.m-pk .s-vote-blue:before,.m-pk .s-vote-red:before{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/pk-like.d2c827658dc0eaedb848.png) 50% no-repeat;background-size:100% 100%;content:\"\";height:.53333rem;margin:0 0 .06667rem;width:.53333rem}.m-pk .s-vote-red{background-image:-webkit-gradient(linear,left top,left bottom,from(#f77),to(#ee1a1a));background-image:linear-gradient(180deg,#f77,#ee1a1a)}.m-pk .s-vote-blue{background-image:-webkit-gradient(linear,left top,left bottom,from(#50c8ff),to(#1b88ee));background-image:linear-gradient(180deg,#50c8ff,#1b88ee)}.m-pk .s-vote-blue:before{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.m-pk .s-progress{-webkit-box-flex:1;-ms-flex-positive:1;display:-webkit-box;display:-ms-flexbox;display:flex;flex-grow:1;height:.16rem;margin:0 .16rem}.m-pk .s-num{font-size:.37333rem;font-weight:500;line-height:.50667rem;position:absolute;top:.16rem}.m-pk .s-red-progress{background:#ee1a1a;border-radius:.08rem 0 0 .08rem;margin:0 .04rem 0 0;position:relative;width:30%}.m-pk .s-red-progress .s-num{color:#ee1a1a;left:0}.m-pk .s-blue-progress{-webkit-box-flex:1;-ms-flex-positive:1;background:#1b88ee;border-radius:0 .08rem .08rem 0;flex-grow:1;margin:0 0 0 .04rem;position:relative}.m-pk .s-blue-progress .s-num{color:#1b88ee;right:0}.m-pk .s-info{color:#999;font-size:.32rem}.m-vote{-webkit-box-orient:vertical;-webkit-box-direction:normal;border:1px solid #ddd;border-radius:.08rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:.29333rem .4rem}.m-vote.m-voted .s-input{display:none}.m-vote.m-voted .s-num{display:-webkit-box;display:-ms-flexbox;display:flex}.m-vote.m-voted .s-form-item.s-selected{background:#eee}.m-vote.m-voted .s-submit{display:none}.m-vote .s-title{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#333;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.45333rem;font-weight:400;line-height:1.5;margin:0}.m-vote .s-type{background:#ee1a1a;border-radius:.08rem;color:#fff;font-size:.29333rem;font-weight:400;line-height:.4rem;margin:0 .06667rem 0 0;padding:0 .10667rem}.m-vote .s-form{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.m-vote .s-form,.m-vote .s-form-item{display:-webkit-box;display:-ms-flexbox;display:flex}.m-vote .s-form-item{-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #eee;border-radius:.13333rem;color:#333;justify-content:space-between;margin:.13333rem 0;padding:.13333rem}.m-vote .s-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#fff;border:.02667rem solid #333;border-radius:50%;height:.32rem;line-height:.8rem;margin:.12rem;width:.32rem}.m-vote .s-content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;font-size:.37333rem;line-height:1.5;margin:0 .66667rem 0 .16rem;text-align:left}.m-vote .s-num{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-negative:0;color:#666;display:none;-ms-flex-direction:column;flex-direction:column;flex-shrink:0;font-size:.29333rem;line-height:1.5;text-align:right}.m-vote .s-submit{background:#ee1a1a;border:none;border-radius:1.33333rem;color:#fff;font-size:.4rem;height:.88rem;margin:.4rem auto 0;text-align:center;width:3.2rem}.m-vote .s-info{color:#999;font-size:.32rem}.operate{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin:1.06667rem 0 .8rem}.operate,.operate .operate-share{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.operate .operate-share{-webkit-box-orient:vertical;-webkit-box-direction:normal;color:#666;-ms-flex-direction:column;flex-direction:column;font-size:.37333rem}.operate .operate-share .share-icon{background:#f5f7f9 url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/share.1b731a80ed582f2a26df.png) 50% no-repeat;background-size:.74667rem .74667rem;border-radius:50%;height:1.6rem;margin:0 0 .22667rem;width:1.6rem}.backflow-floating{-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background:#ee1a1a;border-radius:.58667rem;bottom:1.22667rem;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.45333rem;height:1.17333rem;justify-content:center;left:50%;padding:0 .64rem;position:fixed;-webkit-transform:translate(-50%);transform:translate(-50%);z-index:999}.backflow-floating i{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/logo-small.6a69e71772d6dd5466da.png) 50% no-repeat;background-size:100% 100%;display:block;height:.53333rem;margin-right:.16rem;width:.53333rem}.m_clearfix{clear:both;overflow:hidden}.m_a_d_logo{background:url(https://static.ws.126.net/163/frontend/images/ad-logo-0817.png);background-size:100%;bottom:.15rem;height:.23rem;position:absolute;right:.1rem;width:.4rem}.papa-item{position:relative}.papa-item .papa_flag{background:rgba(0,0,0,.5);border-top-right-radius:.15rem;bottom:.2rem;-webkit-box-sizing:border-box;box-sizing:border-box;color:#fff;font-size:.24rem;left:0;padding:1px 6px 1px 2px;position:absolute;text-align:center}.m_papa{font-size:.24rem}.m_papa.s-empty{padding:0}.m_papa .m_papa_img{float:left;height:1.46rem;margin-right:.2rem;overflow:hidden;position:relative;width:2.34rem}.m_papa .m_papa_img img{background:none;display:block;height:100%;-o-object-fit:contain;object-fit:contain;width:100%}.m_papa .m_papa_desc .m_papa_promote{font-size:12px;height:12px;line-height:12px;padding:2px}.m_papa .m_papa_desc .m_papa_time{color:#888;display:inline-block;font-size:.24rem;margin-left:.2rem}.m_papa .m_papa_desc .m_papa_desc_l{float:left}.m_papa .m_papa_info{overflow:hidden}.m_papa .m_papa_info .m_papa_title,.m_papa .m_papa_info a{color:#404040;font-size:.34rem;line-height:.42rem;margin-bottom:.2rem;text-decoration:none}.m_papa_m0 .m_papa_title{color:#404040;font-size:.34rem;margin-bottom:.2rem}.m_papa_m0 .m_papa_img{height:3.45rem;width:100%}.m_papa_m0 .m_papa_promote{border:1px solid #555;border-radius:3px;color:#555;float:right;font-size:.24rem;height:.32rem;line-height:.32rem;padding:2px}.m_papa_m1 .m_papa_title{color:#404040;font-size:.34rem;margin-bottom:.2rem}.m_papa_m1 .m_papa_title .m_papa_promote{border:1px solid #555;float:right;font-size:.24rem;height:12px;line-height:12px;padding:2px}.m_papa_m1 .m_papa_pic{display:block;margin:.22rem 0}.m_papa_m1 .m_papa_pic .m_papa_pic_wrap{-webkit-box-pack:justify;-ms-flex-pack:justify;height:1.46rem;justify-content:space-between;overflow:hidden}.m_papa_m1 .m_papa_pic .m_papa_pic_wrap img{float:left;height:100%;margin-right:1px;-o-object-fit:contain;object-fit:contain;width:33%}.m_papa_m2{background:#eee;border-top:1px solid #e5e5e5;margin:-1px 0 0;width:100%}.m_papa_m2 .m_papa_content{color:#4c9aea;font-size:.34rem}.m_papa_m2 .m_papa_content a,.m_papa_m2 .m_papa_content a:active,.m_papa_m2 .m_papa_content a:focus,.m_papa_m2 .m_papa_content a:visited{color:#4c9aea}.m_papa_m2 .m_papa_promote{border:1px solid #555;float:right;font-size:12px;height:12px;line-height:12px;padding:2px}.m_papa_live .m_papa_img{height:3.45rem}.m_papa_iframe .m_papa_iframe_wrap{height:1.4rem;overflow:hidden;width:6.9rem}.m_papa_iframe iframe{height:100%;width:100%}.m_papa_iframe_photoset .m_papa_iframe_wrap{height:2.44rem;overflow:hidden;width:6.9rem}.m_papa_iframe_photoset iframe{height:100%;width:100%}.m_photoset_square{background:#fff;border:0;-webkit-box-shadow:0 1px 1px #e3e3e3;box-shadow:0 1px 1px #e3e3e3;float:left;margin:.2rem 0 0;padding:0;width:3.35rem}.m_photoset_square .m_photoset_square_img{-webkit-animation:imgload2 1s ease-out;animation:imgload2 1s ease-out;-webkit-animation-duration:1s;-webkit-animation-name:imgload2;-webkit-animation-timing-function:ease-out;float:left;height:auto;overflow:hidden;position:relative;width:100%}.m_photoset_square .m_photoset_square_img img{display:block;min-height:2rem;width:100%}.m_photoset_square.papa_item .m_photoset_square_info .m_photoset_square_title span{display:inline}.m_photoset_square.papa_item .m_photoset_square_info .m_photoset_square_title .m_photoset_square_adflag{background-size:100% 100%;color:#efd469;display:inline-block;font-size:12px;line-height:12px;margin-right:.1rem;padding:2px}.m_photoset_square .m_photoset_square_info{-webkit-box-sizing:border-box;box-sizing:border-box;float:left;padding:.15rem;width:100%}.m_photoset_square .m_photoset_square_info .m_photoset_square_title{color:#555;margin-bottom:.15rem;width:100%}.m_photoset_square .m_photoset_square_info .m_photoset_square_title span{display:block;font-size:.28rem;line-height:.42rem}.m_photoset_square .m_photoset_square_info .m_photoset_square_desc{width:100%}.m_photoset_square .m_photoset_square_info .m_photoset_square_desc .m_photoset_square_desc_l{background-position:left 0;background-repeat:no-repeat;background-size:contain;color:#888;float:left;font-size:.24rem;line-height:.36rem}.m_photoset_square .m_photoset_square_info .m_photoset_square_desc .m_photoset_square_desc_l .iconfont{color:#a8a8a8;display:inline-block;font-size:.28rem;padding:0 .1rem 0 0}.m_photoset_square .m_photoset_square_info .m_photoset_square_desc .m_photoset_square_desc_r{background-position:left 0;background-repeat:no-repeat;background-size:contain;color:#888;float:right;font-size:.24rem;line-height:.36rem}.m_photoset_square .m_photoset_square_info .m_photoset_square_desc .m_photoset_square_desc_r .iconfont{color:#a8a8a8;display:inline-block;font-size:.28rem;padding:0 .1rem 0 0}.m_papa_m2{border-top:0}.m_papa_m2.m_papa{border-bottom:0;padding:0}.m_papa_m2 .m_papa_promote{background-size:100% 100%;border:none;border-radius:3px;color:#555;display:inline-block;font-size:.26rem;height:.37rem;line-height:.37rem;padding:.03rem;position:absolute;right:.3rem;top:.2rem}.m_papa_m1 .m_papa_title,.m_papa_m2 .m_papa_content{line-height:.44rem;width:6.2rem}.m_papa_m1 .m_papa_title .m_papa_promote{border:none;border-radius:3px;position:absolute;right:0;top:.2rem}.m_papa .m_papa_desc .m_papa_promote,.m_papa_m1 .m_papa_title .m_papa_promote{background-size:100% 100%;color:#555;display:inline-block;font-size:.26rem;height:.37rem;line-height:.37rem;padding:.03rem}.m_papa .m_papa_desc .m_papa_promote{border:none}.m_colum_a_d{font-size:.24rem;position:relative}.m_colum_a_d.s_empty{padding:0}.m_colum_a_d .s_img{float:left;margin-right:.2rem;max-height:5.45rem;overflow:hidden;position:relative;width:100%}.m_colum_a_d .s_img img{background:none;display:block;height:100%;-o-object-fit:contain;object-fit:contain;width:100%}.m_colum_a_d .s_title{color:#404040;font-size:.34rem;margin-bottom:.2rem}.m_colum_a_d .m_a_d_source{bottom:.15rem;color:#a3a3a3;font-size:.24rem;position:absolute;right:.1rem}.m_a_d_doc .m_papa_img{float:right;margin-left:.4rem;margin-right:0}.m_a_d_doc .m_a_d_logo{bottom:.1rem;left:.1rem;right:auto}.m_a_d_doc .m_papa_info{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-pack:justify;-ms-flex-pack:justify;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;justify-content:space-between}.m-ltrp{font-size:.24rem;overflow:hidden}.m-ltrp a{color:#333}.m-ltrp .m-ltrp-title{float:left;max-width:40%;min-height:1rem;width:40%}.m-ltrp .m-ltrp-title .s-title{-webkit-box-orient:vertical;-webkit-line-clamp:2;height:.7rem;margin:1px 0 0 3px;overflow:hidden;text-overflow:ellipsis}.m-ltrp .m-ltrp-title .s-source{bottom:1px;color:#999;font-size:.2rem;left:1px;line-height:.28rem;position:absolute}.m-ltrp .m-ltrp-title .s-promote{border:1px solid #999;border-radius:5px;display:inline-block;margin-right:5px;padding:0 5px;-webkit-transform:scale(.8);transform:scale(.8)}.m-ltrp .m-ltrp-img{-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:justify;-ms-flex-pack:justify;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;float:right;font-size:0;justify-content:space-between;width:60%}.m-ltrp .m-ltrp-img img{display:inline-block;width:33%}.m_a_d_card{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fcfcfc;border:1px solid #ddd;border-radius:.04rem;display:-webkit-box;display:-ms-flexbox;display:flex;font-family:-apple-system,Hiragino Sans GB,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:.22rem .48rem .23rem .32rem}.m_a_d_card .info{-webkit-box-flex:1;-ms-flex-positive:1;color:#999;flex-grow:1;margin-right:.4rem;width:4.17rem}.m_a_d_card .info,.m_a_d_card .info h3{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m_a_d_card .info h3{color:#333;font-size:.32rem;line-height:.5rem;margin:.1rem 0 .04rem}.m_a_d_card .info small{font-size:.26rem;line-height:.37rem;max-width:100%}.m_a_d_card .icon-arrow{background:url(https://static.ws.126.net/163/frontend/images/arrow-hdbk.png) no-repeat;background-size:100%;color:#999;font-size:.19rem;height:.3rem;width:.3rem}.m_a_d_card .icon-arrow,.m_a_d_card_img{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.m_a_d_card_img{-webkit-box-pack:center;-ms-flex-pack:center;-ms-flex-negative:0;flex-shrink:0;height:1.1rem;justify-content:center;margin-right:.34rem;width:1.1rem}.m_a_d_card_img img{border-radius:.08rem;height:100%;vertical-align:top;width:100%}@font-face{font-family:swiper-icons;font-style:normal;font-weight:400;src:url(\"data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA\") format(\"woff\")}:root{--swiper-theme-color:#007aff}.swiper{list-style:none;margin-left:auto;margin-right:auto;overflow:hidden;padding:0;position:relative;z-index:1}.swiper-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{-webkit-box-sizing:content-box;box-sizing:content-box;display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;position:relative;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;width:100%;z-index:1}.swiper-android .swiper-slide,.swiper-wrapper{-webkit-transform:translateZ(0);transform:translateZ(0)}.swiper-pointer-events{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-pointer-events.swiper-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-slide{-ms-flex-negative:0;flex-shrink:0;height:100%;position:relative;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;width:100%}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-transition-property:height,-webkit-transform;transition-property:height,-webkit-transform;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-backface-hidden .swiper-slide{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0)}.swiper-3d,.swiper-3d.swiper-css-mode .swiper-wrapper{-webkit-perspective:1200px;perspective:1200px}.swiper-3d .swiper-cube-shadow,.swiper-3d .swiper-slide,.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top,.swiper-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top{height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:10}.swiper-3d .swiper-slide-shadow{background:rgba(0,0,0,.15)}.swiper-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:linear-gradient(270deg,rgba(0,0,0,.5),transparent)}.swiper-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(transparent));background-image:linear-gradient(90deg,rgba(0,0,0,.5),transparent)}.swiper-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:linear-gradient(0deg,rgba(0,0,0,.5),transparent)}.swiper-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(transparent));background-image:linear-gradient(180deg,rgba(0,0,0,.5),transparent)}.swiper-css-mode>.swiper-wrapper{-ms-overflow-style:none;overflow:auto;scrollbar-width:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-horizontal.swiper-css-mode>.swiper-wrapper{-webkit-scroll-snap-type:x mandatory;-ms-scroll-snap-type:x mandatory;scroll-snap-type:x mandatory}.swiper-vertical.swiper-css-mode>.swiper-wrapper{-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory}.swiper-centered>.swiper-wrapper:before{-ms-flex-negative:0;-webkit-box-ordinal-group:10000;-ms-flex-order:9999;content:\"\";flex-shrink:0;order:9999}.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{-webkit-margin-start:var(--swiper-centered-offset-before);margin-inline-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-horizontal>.swiper-wrapper:before{height:100%;width:var(--swiper-centered-offset-after)}.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{-webkit-margin-before:var(--swiper-centered-offset-before);margin-block-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-vertical>.swiper-wrapper:before{height:var(--swiper-centered-offset-after);width:100%}.swiper-centered>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center}pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}\n/*!\n  Theme: GitHub\n  Description: Light theme as seen on github.com\n  Author: github.com\n  Maintainer: @Hirse\n  Updated: 2021-05-15\n\n  Outdated base version: https://github.com/primer/github-syntax-light\n  Current colors taken from GitHub's CSS\n*/.hljs{background:#fff;color:#24292e}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#005cc5}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-code,.hljs-comment,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{background-color:#f0fff4;color:#22863a}.hljs-deletion{background-color:#ffeef0;color:#b31d28}.login-wrap{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:rgba(0,0,0,.5);bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:center;left:0;margin:auto;position:fixed;right:0;top:0;visibility:hidden;z-index:1999}.login-wrap.login-dialog-show{visibility:visible}.login-wrap.login-dialog-forceLogin .login-close{display:none}.login-wrap .login-title{color:#333;font-size:.37333rem;margin:0 0 .26667rem;text-align:center}.login-wrap .login-title strong{font-size:.42667rem}.login-wrap .login-module{background-color:#fff;border-radius:.4rem;max-width:300PX;min-height:6.66667rem;overflow:hidden;padding:20PX 20PX 10PX;position:relative;width:80%}.login-wrap .login-close{color:#666;font-size:.32rem;font-weight:600;padding:.26667rem;position:absolute;z-index:10}.dialog-alert,.login-wrap .login-close{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:center;right:0;top:0}.dialog-alert{background:rgba(0,0,0,.5);bottom:0;left:0;margin:auto;position:fixed;z-index:1499}.dialog-alert .alert-content{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff;border-radius:.42667rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden;width:8rem}.dialog-alert .alert-content .s-title{color:#333;font-size:.48rem;font-weight:600;margin:.97333rem .53333rem .4rem;text-align:center}.dialog-alert .alert-content .s-subTitle{color:#555;font-size:.42667rem;margin:0 .53333rem .4rem;text-align:center}.dialog-alert .alert-content .s-btn{background:#e64646;border-radius:.46667rem;color:#fff;font-size:.42667rem;height:.93333rem;line-height:.93333rem;margin:.26667rem 0 .4rem;max-width:6.93333rem;min-width:4.8rem;overflow:hidden;padding:0 .26667rem;text-align:center;text-overflow:ellipsis;white-space:nowrap}.dialog-confirm{-webkit-box-pack:center;-ms-flex-pack:center;background:rgba(0,0,0,.5);bottom:0;justify-content:center;left:0;margin:auto;position:fixed;right:0;top:0;z-index:1499}.dialog-confirm,.dialog-confirm .confirm-content{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.dialog-confirm .confirm-content{-webkit-box-orient:vertical;-webkit-box-direction:normal;background:#fff;border-radius:.42667rem;-ms-flex-direction:column;flex-direction:column;overflow:hidden;width:8rem}.dialog-confirm .confirm-content .s-title{color:#333;font-size:.48rem;font-weight:600;margin:.97333rem .53333rem .4rem;text-align:center}.dialog-confirm .confirm-content .s-subTitle{color:#555;font-size:.42667rem;margin:0 .53333rem .4rem;text-align:center}.dialog-confirm .confirm-content .s-btns{display:-webkit-box;display:-ms-flexbox;display:flex;margin:.26667rem 0 .66667rem}.dialog-confirm .confirm-content .s-btn{background:#e64646;border-radius:.46667rem;color:#fff;font-size:.42667rem;height:.93333rem;line-height:.93333rem;margin:0 .26667rem;min-width:2.66667rem;overflow:hidden;padding:0 .26667rem;text-align:center;text-overflow:ellipsis;white-space:nowrap}.dialog-confirm .confirm-content .s-btn.s-btn-2{background:#f5f7f9;color:#333}.login-drawer-wrap{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:rgba(0,0,0,.5);bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:center;left:0;margin:auto;max-width:750PX;position:fixed;right:0;top:0;visibility:hidden;z-index:1999}.login-drawer-wrap.login-drawer-show{visibility:visible}.login-drawer-wrap.login-drawer-show .login-drawer{-webkit-transform:translateX(0);transform:translateX(0)}.login-drawer-wrap .login-drawer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-pack:justify;-ms-flex-pack:justify;background:#fff;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;justify-content:space-between;left:0;max-width:300PX;position:absolute;top:0;-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition:-webkit-transform .3s linear;transition:-webkit-transform .3s linear;transition:transform .3s linear;transition:transform .3s linear,-webkit-transform .3s linear;width:75%}.login-drawer-wrap .s-holder{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.login-drawer-wrap .s-feedback{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#333;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.4rem;justify-content:center;margin:0 0 .26667rem}.login-drawer-wrap .s-feedback:before{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/feedback.79a4273c047bba72e222.png) 50% no-repeat;background-size:100% 100%;content:\"\";height:.64rem;margin:0 .06667rem 0 0;width:.64rem}.login-drawer-wrap .s-distribution{-ms-flex-item-align:center;align-self:center;margin:0 0 .26667rem;width:90%}.login-drawer-wrap .s-distribution img{width:100%}.login-drawer-wrap .login-drawer-module{background-color:#fff;border-radius:.4rem;max-width:300PX;min-height:6.66667rem;overflow:hidden;padding:20PX 20PX 10PX;position:relative;width:100%}.login-drawer-wrap .login-drawer-user{-webkit-box-orient:vertical;-webkit-box-direction:normal;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:.66667rem .4rem}.login-drawer-wrap .login-drawer-user .s-avatar-wrap{height:1.86667rem;margin:0 auto;position:relative;width:1.86667rem}.login-drawer-wrap .login-drawer-user .s-avatar-wrap .icon-vip{bottom:0;position:absolute;right:0}.login-drawer-wrap .login-drawer-user .s-avatar{border-radius:50%;height:1.86667rem;width:1.86667rem}.login-drawer-wrap .login-drawer-user .s-nickname{color:#888;font-size:.37333rem;height:.53333rem;line-height:.53333rem;margin:.26667rem auto auto;max-width:5.33333rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.login-drawer-wrap .login-drawer-user .s-duration{color:#888;font-size:.26667rem;height:.53333rem;line-height:.53333rem;margin:auto;max-width:5.33333rem}.login-drawer-wrap .login-drawer-user .s-duration .s-icon-info{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/info.7ae9b5dda0b334947bba.png) 50%/100% 100% no-repeat;display:inline-block;height:.37333rem;margin:0 0 .06667rem .02667rem;vertical-align:bottom;width:.37333rem}.login-drawer-wrap .login-drawer-user .s-duration .icon-arrow{font-size:.18667rem}.login-drawer-wrap .login-drawer-user .s-duration .s-cancelAuto{text-decoration:underline}.login-drawer-wrap .login-drawer-user .s-duration a{color:#888}.login-drawer-wrap .login-drawer-user .s-link{-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #eee;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.4rem;height:1.2rem;justify-content:space-between}.login-drawer-wrap .login-drawer-user .s-holder{height:.26667rem}.login-drawer-wrap .login-drawer-user .s-text{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin:0 0 0 .53333rem}.login-drawer-wrap .login-drawer-user .icon-email{color:#f33}.login-drawer-wrap .login-drawer-user .icon-talking{color:#f90}.login-drawer-wrap .login-drawer-user .icon-switch{color:#36f}.login-drawer-wrap .login-drawer-user .icon-read{color:#5fa1b3}.toast{-webkit-box-pack:center;-ms-flex-pack:center;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:center;left:0;margin:auto;pointer-events:none;position:fixed;right:0;z-index:9999}.toast .toast-content{background-color:rgba(0,0,0,.7);border-radius:.13333rem;color:#fff;font-size:.37333rem;margin-bottom:3.2rem;max-width:75%;min-width:0;opacity:0;padding:.06667rem .2rem;-webkit-transition:opacity .1s linear;transition:opacity .1s linear}.toast .toast-content.toast-content-show{opacity:1}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-assets-source-apk/src/main/assets/js/jquery.js",
    "content": "/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license\n//@ sourceMappingURL=jquery.min.map\n*/\n(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f=\"1.10.2\",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,T=/\\S+/g,C=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,N=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,k=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,E=/^[\\],:{}\\s]*$/,S=/(?:^|:|,)(?:\\s*\\[)+/g,A=/\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,j=/\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/g,D=/^-ms-/,L=/-([\\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||\"load\"===e.type||\"complete\"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener(\"DOMContentLoaded\",q,!1),e.removeEventListener(\"load\",q,!1)):(a.detachEvent(\"onreadystatechange\",q),e.detachEvent(\"onload\",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if(\"string\"==typeof e){if(i=\"<\"===e.charAt(0)&&\">\"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:\"\",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for(\"boolean\"==typeof s&&(c=s,s=arguments[1]||{},l=2),\"object\"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:\"jQuery\"+(f+Math.random()).replace(/\\D/g,\"\"),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger(\"ready\").off(\"ready\"))}},isFunction:function(e){return\"function\"===x.type(e)},isArray:Array.isArray||function(e){return\"array\"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?c[y.call(e)]||\"object\":typeof e},isPlainObject:function(e){var n;if(!e||\"object\"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,\"constructor\")&&!v.call(e.constructor.prototype,\"isPrototypeOf\"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||\"string\"!=typeof e)return null;\"boolean\"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:\"string\"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,\"@\").replace(j,\"]\").replace(S,\"\")))?Function(\"return \"+n)():(x.error(\"Invalid JSON: \"+n),t)},parseXML:function(n){var r,i;if(!n||\"string\"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,\"text/xml\")):(r=new ActiveXObject(\"Microsoft.XMLDOM\"),r.async=\"false\",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName(\"parsererror\").length||x.error(\"Invalid XML: \"+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,\"ms-\").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call(\"\\ufeff\\u00a0\")?function(e){return null==e?\"\":b.call(e)}:function(e){return null==e?\"\":(e+\"\").replace(C,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,\"string\"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if(\"number\"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return\"string\"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if(\"object\"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),\"complete\"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener(\"DOMContentLoaded\",q,!1),e.addEventListener(\"load\",q,!1);else{a.attachEvent(\"onreadystatechange\",q),e.attachEvent(\"onload\",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll(\"left\")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"),function(e,t){c[\"[object \"+t+\"]\"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:\"array\"===n||\"function\"!==n&&(0===t||\"number\"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b=\"sizzle\"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",P=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",R=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",W=R.replace(\"w\",\"w#\"),$=\"\\\\[\"+P+\"*(\"+R+\")\"+P+\"*(?:([*^$|!~]?=)\"+P+\"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\"+W+\")|)|)\"+P+\"*\\\\]\",I=\":(\"+R+\")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+$.replace(3,8)+\")*)|.*)\\\\)|)\",z=RegExp(\"^\"+P+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+P+\"+$\",\"g\"),X=RegExp(\"^\"+P+\"*,\"+P+\"*\"),U=RegExp(\"^\"+P+\"*([>+~]|\"+P+\")\"+P+\"*\"),V=RegExp(P+\"*[+~]\"),Y=RegExp(\"=\"+P+\"*([^\\\\]'\\\"]*)\"+P+\"*\\\\]\",\"g\"),J=RegExp(I),G=RegExp(\"^\"+W+\"$\"),Q={ID:RegExp(\"^#(\"+R+\")\"),CLASS:RegExp(\"^\\\\.(\"+R+\")\"),TAG:RegExp(\"^(\"+R.replace(\"w\",\"w*\")+\")\"),ATTR:RegExp(\"^\"+$),PSEUDO:RegExp(\"^\"+I),CHILD:RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+P+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+P+\"*(?:([+-]|)\"+P+\"*(\\\\d+)|))\"+P+\"*\\\\)|)\",\"i\"),bool:RegExp(\"^(?:\"+B+\")$\",\"i\"),needsContext:RegExp(\"^\"+P+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+P+\"*((?:-\\\\d)?\\\\d*)\"+P+\"*\\\\)|)(?=[^-]|$)\",\"i\")},K=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\\d$/i,nt=/'|\\\\/g,rt=RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+P+\"?|(\"+P+\")|.)\",\"ig\"),it=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||\"string\"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&\"object\"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute(\"id\"))?m=d.replace(nt,\"\\\\$&\"):t.setAttribute(\"id\",m),m=\"[id='\"+m+\"'] \",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(\",\")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute(\"id\")}}}return kt(e.replace(z,\"$1\"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=\" \")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement(\"div\");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split(\"|\"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return\"input\"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?\"HTML\"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent(\"onbeforeunload\",function(){p()}),r.attributes=ut(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML=\"<div class='a'></div><div class='a i'></div>\",e.firstChild.className=\"i\",2===e.getElementsByClassName(\"i\").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute(\"id\")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode(\"id\");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML=\"<select><option selected=''></option></select>\",e.querySelectorAll(\"[selected]\").length||g.push(\"\\\\[\"+P+\"*(?:value|\"+B+\")\"),e.querySelectorAll(\":checked\").length||g.push(\":checked\")}),ut(function(e){var t=n.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"t\",\"\"),e.querySelectorAll(\"[t^='']\").length&&g.push(\"[*^$]=\"+P+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\":enabled\").length||g.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),g.push(\",.*:\")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,\"div\"),y.call(e,\"[s!='']:x\"),m.push(\"!=\",I)}),g=g.length&&RegExp(g.join(\"|\")),m=m.length&&RegExp(m.join(\"|\")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,\"='$1']\"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error(\"Syntax error, unrecognized expression: \"+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||\"\").replace(rt,it),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(\")\",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+\" \"];return t||(t=RegExp(\"(^|\"+P+\")\"+e+\"(\"+P+\"|$)\"))&&N(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?\"!=\"===t:t?(i+=\"\",\"=\"===t?i===n:\"!=\"===t?i!==n:\"^=\"===t?n&&0===i.indexOf(n):\"*=\"===t?n&&i.indexOf(n)>-1:\"$=\"===t?n&&i.slice(-n.length)===n:\"~=\"===t?(\" \"+i+\" \").indexOf(n)>-1:\"|=\"===t?i===n||i.slice(0,n.length+1)===n+\"-\":!1):!0}},CHILD:function(e,t,n,r,i){var o=\"nth\"!==e.slice(0,3),a=\"last\"!==e.slice(-4),s=\"of-type\"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?\"nextSibling\":\"previousSibling\",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g=\"only\"===e&&!h&&\"nextSibling\"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error(\"unsupported pseudo: \"+e);return r[b]?r(t):r.length>1?(n=[e,e,\"\",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,\"$1\"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||\"\")||at.error(\"unsupported lang: \"+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+\"-\");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>\"@\"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+\" \"];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z,\" \")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r=\"\";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&\"parentNode\"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+\" \"+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||\"*\",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[\" \"],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:\" \"===e[l-2].type?\"*\":\"\"})).replace(z,\"$1\"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b=\"0\",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG(\"*\",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+\" \"];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&\"ID\"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split(\"\").sort(A).join(\"\")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement(\"div\"))}),ut(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||ct(\"type|href|height|width\",function(e,n,r){return r?t:e.getAttribute(n,\"type\"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||ct(\"value\",function(e,n,r){return r||\"input\"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute(\"disabled\")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[\":\"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e=\"string\"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);\"function\"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&\"string\"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[[\"resolve\",\"done\",x.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",x.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",x.Callbacks(\"memory\")]],n=\"pending\",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+\"With\"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+\"With\"](this===i?r:this,arguments),this},i[o[0]+\"With\"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement(\"div\");if(d.setAttribute(\"className\",\"t\"),d.innerHTML=\"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\",n=d.getElementsByTagName(\"*\")||[],r=d.getElementsByTagName(\"a\")[0],!r||!r.style||!n.length)return t;s=a.createElement(\"select\"),u=s.appendChild(a.createElement(\"option\")),o=d.getElementsByTagName(\"input\")[0],r.style.cssText=\"top:1px;float:left;opacity:.5\",t.getSetAttribute=\"t\"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName(\"tbody\").length,t.htmlSerialize=!!d.getElementsByTagName(\"link\").length,t.style=/top/.test(r.getAttribute(\"style\")),t.hrefNormalized=\"/a\"===r.getAttribute(\"href\"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement(\"form\").enctype,t.html5Clone=\"<:nav></:nav>\"!==a.createElement(\"nav\").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement(\"input\"),o.setAttribute(\"value\",\"\"),t.input=\"\"===o.getAttribute(\"value\"),o.value=\"t\",o.setAttribute(\"type\",\"radio\"),t.radioValue=\"t\"===o.value,o.setAttribute(\"checked\",\"t\"),o.setAttribute(\"name\",\"t\"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent(\"onclick\",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c=\"on\"+f,\"t\"),t[f+\"Bubbles\"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip=\"content-box\",d.cloneNode(!0).style.backgroundClip=\"\",t.clearCloneStyle=\"content-box\"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast=\"0\"!==f,x(function(){var n,r,o,s=\"padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;\",l=a.getElementsByTagName(\"body\")[0];l&&(n=a.createElement(\"div\"),n.style.cssText=\"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\",l.appendChild(n).appendChild(d),d.innerHTML=\"<table><tr><td></td><td>t</td></tr></table>\",o=d.getElementsByTagName(\"td\"),o[0].style.cssText=\"padding:0;margin:0;border:0;display:none\",p=0===o[0].offsetHeight,o[0].style.display=\"\",o[1].style.display=\"none\",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML=\"\",d.style.cssText=\"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition=\"1%\"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable=\"4px\"===(e.getComputedStyle(d,null)||{width:\"4px\"}).width,r=d.appendChild(a.createElement(\"div\")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width=\"0\",d.style.width=\"1px\",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML=\"\",d.style.cssText=s+\"width:1px;padding:1px;display:inline;zoom:1\",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display=\"block\",d.innerHTML=\"<div></div>\",d.firstChild.style.width=\"5px\",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t\n}({});var B=/(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||\"string\"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),(\"object\"==typeof n||\"function\"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),\"string\"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(\" \")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute(\"classid\")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,\"parsedAttrs\"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf(\"data-\")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,\"parsedAttrs\",!0)}return o}return\"object\"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i=\"data-\"+n.replace(P,\"-$1\").toLowerCase();if(r=e.getAttribute(i),\"string\"==typeof r){try{r=\"true\"===r?!0:\"false\"===r?!1:\"null\"===r?null:+r+\"\"===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if((\"data\"!==t||!x.isEmptyObject(e[t]))&&\"toJSON\"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||\"fx\")+\"queue\",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||\"fx\";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks(\"once memory\").add(function(){x._removeData(e,t+\"queue\"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return\"string\"!=typeof e&&(n=e,e=\"fx\",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||\"fx\",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};\"string\"!=typeof e&&(n=e,e=t),e=e||\"fx\";while(s--)r=x._data(a[s],e+\"queueHooks\"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\\t\\r\\n\\f]/g,V=/\\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=\"string\"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||\"\").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(\" \"+n.className+\" \").replace(U,\" \"):\" \")){o=0;while(i=t[o++])0>r.indexOf(\" \"+i+\" \")&&(r+=i+\" \");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||\"string\"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||\"\").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(\" \"+n.className+\" \").replace(U,\" \"):\"\")){o=0;while(i=t[o++])while(r.indexOf(\" \"+i+\" \")>=0)r=r.replace(\" \"+i+\" \",\" \");n.className=e?x.trim(r):\"\"}return this},toggleClass:function(e,t){var n=typeof e;return\"boolean\"==typeof t&&\"string\"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(\"string\"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||\"boolean\"===n)&&(this.className&&x._data(this,\"__className__\",this.className),this.className=this.className||e===!1?\"\":x._data(this,\"__className__\")||\"\")})},hasClass:function(e){var t=\" \"+e+\" \",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(\" \"+this[n].className+\" \").replace(U,\" \").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o=\"\":\"number\"==typeof o?o+=\"\":x.isArray(o)&&(o=x.map(o,function(e){return null==e?\"\":e+\"\"})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&\"set\"in r&&r.set(this,o,\"value\")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&\"get\"in r&&(n=r.get(o,\"value\"))!==t?n:(n=o.value,\"string\"==typeof n?n.replace(V,\"\"):null==n?\"\":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,\"value\");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o=\"select-one\"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute(\"disabled\"))||n.parentNode.disabled&&x.nodeName(n.parentNode,\"optgroup\"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&\"get\"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&\"set\"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+\"\"),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase(\"default-\"+n)]=e[r]=!1:x.attr(e,n,\"\"),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&\"radio\"===t&&x.nodeName(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&\"set\"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&\"get\"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,\"tabindex\");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase(\"default-\"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase(\"default-\"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,\"input\")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+=\"\",\"value\"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&\"\"!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,\"\"===t?!1:t,n)}},x.each([\"width\",\"height\"],function(e,n){x.attrHooks[n]={set:function(e,r){return\"\"===r?(e.setAttribute(n,\"auto\"),r):t}}})),x.support.hrefNormalized||x.each([\"href\",\"src\"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+\"\"}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype=\"encoding\"),x.each([\"radio\",\"checkbox\"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||\"\").match(T)||[\"\"],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||\"\").split(\".\").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(\".\")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent(\"on\"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||\"\").match(T)||[\"\"],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||\"\").split(\".\").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&(\"**\"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,\"events\"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,\"type\")?n.type:n,m=v.call(n,\"namespace\")?n.namespace.split(\".\"):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(\".\")>=0&&(m=g.split(\".\"),g=m.shift(),m.sort()),l=0>g.indexOf(\":\")&&\"on\"+g,n=n[x.expando]?n:new x.Event(g,\"object\"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join(\".\"),n.namespace_re=n.namespace?RegExp(\"(^|\\\\.)\"+m.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,\"events\")||{})[n.type]&&x._data(u,\"handle\"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,\"events\")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||\"click\"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||\"click\"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+\" \",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:\"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:\"focusin\"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:\"focusout\"},click:{trigger:function(){return x.nodeName(this,\"input\")&&\"checkbox\"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,\"a\")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r=\"on\"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,\"form\")?!1:(x.event.add(this,\"click._submit keypress._submit\",function(e){var n=e.target,r=x.nodeName(n,\"input\")||x.nodeName(n,\"button\")?n.form:t;r&&!x._data(r,\"submitBubbles\")&&(x.event.add(r,\"submit._submit\",function(e){e._submit_bubble=!0}),x._data(r,\"submitBubbles\",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate(\"submit\",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,\"form\")?!1:(x.event.remove(this,\"._submit\"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?((\"checkbox\"===this.type||\"radio\"===this.type)&&(x.event.add(this,\"propertychange._change\",function(e){\"checked\"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,\"click._change\",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate(\"change\",this,e,!0)})),!1):(x.event.add(this,\"beforeactivate._change\",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,\"changeBubbles\")&&(x.event.add(t,\"change._change\",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate(\"change\",this.parentNode,e,!0)}),x._data(t,\"changeBubbles\",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||\"radio\"!==n.type&&\"checkbox\"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,\"._change\"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if(\"object\"==typeof e){\"string\"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&(\"string\"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+\".\"+i.namespace:i.origType,i.selector,i.handler),this;if(\"object\"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||\"function\"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\\[\\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if(\"string\"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+\" \"+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,\"string\"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||\"string\"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?\"string\"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n=\"string\"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,\"parentNode\")},parentsUntil:function(e,t,n){return x.dir(e,\"parentNode\",n)},next:function(e){return pt(e,\"nextSibling\")},prev:function(e){return pt(e,\"previousSibling\")},nextAll:function(e){return x.dir(e,\"nextSibling\")},prevAll:function(e){return x.dir(e,\"previousSibling\")},nextUntil:function(e,t,n){return x.dir(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return x.dir(e,\"previousSibling\",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,\"iframe\")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if(\"string\"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split(\"|\"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht=\"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",gt=/ jQuery\\d+=\"(?:null|\\d+)\"/g,mt=RegExp(\"<(?:\"+ht+\")[\\\\s/>]\",\"i\"),yt=/^\\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,bt=/<([\\w:]+)/,xt=/<tbody/i,wt=/<|&#?\\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\\s*(?:[^=]|=\\s*.checked.)/i,kt=/^$|\\/(?:java|ecma)script/i,Et=/^true\\/(.*)/,St=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,At={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],area:[1,\"<map>\",\"</map>\"],param:[1,\"<object>\",\"</object>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:x.support.htmlSerialize?[0,\"\",\"\"]:[1,\"X<div>\",\"</div>\"]},jt=dt(a),Dt=jt.appendChild(a.createElement(\"div\"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,\"script\")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,\"select\")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,\"\"):t;if(!(\"string\"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||[\"\",\"\"])[1].toLowerCase()])){e=e.replace(vt,\"<$1></$2>\");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||\"string\"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,\"script\"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,\"script\"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||\"\")&&!x._data(i,\"globalEval\")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||\"\").replace(St,\"\")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,\"table\")&&x.nodeName(1===t.nodeType?t:t.firstChild,\"tr\")?e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\")):e}function Ht(e){return e.type=(null!==x.find.attr(e,\"type\"))+\"/\"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute(\"type\"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,\"globalEval\",!t||x._data(t[r],\"globalEval\"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}\"script\"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):\"object\"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):\"input\"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):\"option\"===n?t.defaultSelected=t.selected=e.defaultSelected:(\"input\"===n||\"textarea\"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||\"*\"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||\"*\"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test(\"<\"+e.nodeName+\">\")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,\"script\"),r.length>0&&_t(r,!l&&Ft(e,\"script\")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if(\"object\"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement(\"div\")),l=(bt.exec(o)||[\"\",\"\"])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,\"<$1></$2>\")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o=\"table\"!==l||xt.test(o)?\"<table>\"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],\"tbody\")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent=\"\";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,\"input\"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),\"script\"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||\"\")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);\nu[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:\"GET\",dataType:\"script\",async:!1,global:!1,\"throws\":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,\"body\")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\\([^)]*\\)/i,It=/opacity\\s*=\\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp(\"^(\"+w+\")(.*)$\",\"i\"),Yt=RegExp(\"^(\"+w+\")(?!px)[a-z%]+$\",\"i\"),Jt=RegExp(\"^([+-])=(\"+w+\")\",\"i\"),Gt={BODY:\"block\"},Qt={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Kt={letterSpacing:0,fontWeight:400},Zt=[\"Top\",\"Right\",\"Bottom\",\"Left\"],en=[\"Webkit\",\"O\",\"Moz\",\"ms\"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,\"none\"===x.css(e,\"display\")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,\"olddisplay\"),n=r.style.display,t?(o[a]||\"none\"!==n||(r.style.display=\"\"),\"\"===r.style.display&&nn(r)&&(o[a]=x._data(r,\"olddisplay\",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&\"none\"!==n||!i)&&x._data(r,\"olddisplay\",i?n:x.css(r,\"display\"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&\"none\"!==r.style.display&&\"\"!==r.style.display||(r.style.display=t?o[a]||\"\":\"none\"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":x.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&\"get\"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,\"string\"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a=\"number\"),!(null==r||\"number\"===a&&isNaN(r)||(\"number\"!==a||x.cssNumber[l]||(r+=\"px\"),x.support.clearCloneStyle||\"\"!==r||0!==n.indexOf(\"background\")||(u[n]=\"inherit\"),s&&\"set\"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&\"get\"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),\"normal\"===a&&n in Kt&&(a=Kt[n]),\"\"===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(\"\"!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left=\"fontSize\"===n?\"1em\":l,l=u.pixelLeft+\"px\",u.left=i,a&&(o.left=a)),\"\"===l?\"auto\":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||\"px\"):t}function an(e,t,n,r,i){var o=n===(r?\"border\":\"content\")?4:\"width\"===t?1:0,a=0;for(;4>o;o+=2)\"margin\"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?(\"content\"===n&&(a-=x.css(e,\"padding\"+Zt[o],!0,i)),\"margin\"!==n&&(a-=x.css(e,\"border\"+Zt[o]+\"Width\",!0,i))):(a+=x.css(e,\"padding\"+Zt[o],!0,i),\"padding\"!==n&&(a+=x.css(e,\"border\"+Zt[o]+\"Width\",!0,i)));return a}function sn(e,t,n){var r=!0,i=\"width\"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&\"border-box\"===x.css(e,\"boxSizing\",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?\"border\":\"content\"),r,o)+\"px\"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),\"none\"!==n&&n||(Pt=(Pt||x(\"<iframe frameborder='0' width='0' height='0'/>\").css(\"cssText\",\"display:block !important\")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write(\"<!doctype html><html><body>\"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],\"display\");return n.remove(),r}x.each([\"height\",\"width\"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,\"display\"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&\"border-box\"===x.css(e,\"boxSizing\",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||\"\")?.01*parseFloat(RegExp.$1)+\"\":t?\"1\":\"\"},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?\"alpha(opacity=\"+100*t+\")\":\"\",o=r&&r.filter||n.filter||\"\";n.zoom=1,(t>=1||\"\"===t)&&\"\"===x.trim(o.replace($t,\"\"))&&n.removeAttribute&&(n.removeAttribute(\"filter\"),\"\"===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+\" \"+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:\"inline-block\"},Wt,[e,\"marginRight\"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each([\"top\",\"left\"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+\"px\":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&\"none\"===(e.style&&e.style.display||x.css(e,\"display\"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\\[\\]$/,fn=/\\r?\\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,\"elements\");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(\":disabled\")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,\"\\r\\n\")}}):{name:t.name,value:n.replace(fn,\"\\r\\n\")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?\"\":t,i[i.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join(\"&\").replace(cn,\"+\")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+\"[\"+(\"object\"==typeof i?t:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==x.type(t))r(e,t);else for(i in t)gn(e+\"[\"+i+\"]\",t[i],n,r)}x.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}});var mn,yn,vn=x.now(),bn=/\\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\\/\\//,En=/^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn=\"*/\".concat(\"*\");try{yn=o.href}catch(Ln){yn=a.createElement(\"a\"),yn.href=\"\",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return\"string\"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o[\"*\"]&&s(\"*\")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if(\"string\"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(\" \");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&\"object\"==typeof n&&(a=\"POST\"),s.length>0&&x.ajax({url:e,type:a,dataType:\"html\",data:n}).done(function(e){o=arguments,s.html(i?x(\"<div>\").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:\"GET\",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Dn,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":x.parseJSON,\"text xml\":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){\"object\"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks(\"once memory\"),m=p.statusCode||{},y={},v={},b=0,w=\"canceled\",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+\"\").replace(xn,\"\").replace(kn,mn[1]+\"//\"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||\"*\").toLowerCase().match(T)||[\"\"],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||(\"http:\"===r[1]?\"80\":\"443\"))===(mn[3]||(\"http:\"===mn[1]?\"80\":\"443\")))),p.data&&p.processData&&\"string\"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger(\"ajaxStart\"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?\"&\":\"?\")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,\"$1_=\"+vn++):o+(bn.test(o)?\"&\":\"?\")+\"_=\"+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader(\"If-Modified-Since\",x.lastModified[o]),x.etag[o]&&C.setRequestHeader(\"If-None-Match\",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader(\"Content-Type\",p.contentType),C.setRequestHeader(\"Accept\",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+(\"*\"!==p.dataTypes[0]?\", \"+Dn+\"; q=0.01\":\"\"):p.accepts[\"*\"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w=\"abort\";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger(\"ajaxSend\",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort(\"timeout\")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,\"No Transport\");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||\"\",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader(\"Last-Modified\"),T&&(x.lastModified[o]=T),T=C.getResponseHeader(\"etag\"),T&&(x.etag[o]=T)),204===e||\"HEAD\"===p.type?N=\"nocontent\":304===e?N=\"notmodified\":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N=\"error\",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+\"\",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?\"ajaxSuccess\":\"ajaxError\",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger(\"ajaxComplete\",[C,p]),--x.active||x.event.trigger(\"ajaxStop\")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,\"json\")},getScript:function(e,n){return x.get(e,t,n,\"script\")}}),x.each([\"get\",\"post\"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader(\"Content-Type\"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+\" \"+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if(\"*\"===o)o=l;else if(\"*\"!==l&&l!==o){if(a=u[l+\" \"+o]||u[\"* \"+o],!a)for(i in u)if(s=i.split(\" \"),s[1]===o&&(a=u[l+\" \"+s[0]]||u[\"* \"+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(p){return{state:\"parsererror\",error:a?p:\"No conversion from \"+l+\" to \"+o}}}return{state:\"success\",data:t}}x.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/(?:java|ecma)script/},converters:{\"text script\":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter(\"script\",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\",e.global=!1)}),x.ajaxTransport(\"script\",function(e){if(e.crossDomain){var n,r=a.head||x(\"head\")[0]||a.documentElement;return{send:function(t,i){n=a.createElement(\"script\"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,\"success\"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\\?(?=&|$)|\\?\\?/;x.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Fn.pop()||x.expando+\"_\"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter(\"json jsonp\",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?\"url\":\"string\"==typeof n.data&&!(n.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Bn.test(n.data)&&\"data\");return l||\"jsonp\"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,\"$1\"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?\"&\":\"?\")+n.jsonp+\"=\"+o),n.converters[\"script json\"]=function(){return s||x.error(o+\" was not called\"),s[0]},n.dataTypes[0]=\"json\",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),\"script\"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&\"withCredentials\"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),\"string\"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=\"\"}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp(\"^(?:([+-])=|)(\"+w+\")([a-z%]*)$\",\"i\"),Jn=/queueHooks$/,Gn=[nr],Qn={\"*\":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?\"\":\"px\"),a=(x.cssNumber[e]||\"px\"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||\".5\",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn[\"*\"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&\"expand\"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=[\"*\"]):e=e.split(\" \");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,\"fxshow\");n.queue||(s=x._queueHooks(e,\"fx\"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,\"fx\").length||s.empty.fire()})})),1===e.nodeType&&(\"height\"in t||\"width\"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],\"inline\"===x.css(e,\"display\")&&\"none\"===x.css(e,\"float\")&&(x.support.inlineBlockNeedsLayout&&\"inline\"!==ln(e.nodeName)?p.zoom=1:p.display=\"inline-block\")),n.overflow&&(p.overflow=\"hidden\",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||\"toggle\"===i,i===(f?\"hide\":\"show\"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?\"hidden\"in d&&(f=d.hidden):d=x._data(e,\"fxshow\",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,\"fxshow\");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start=\"width\"===r||\"height\"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||\"swing\",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?\"\":\"px\")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,\"\"),t&&\"auto\"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,\"finish\"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return\"string\"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,n=null!=e&&e+\"queueHooks\",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||\"fx\"),this.each(function(){var t,n=x._data(this),r=n[e+\"queue\"],i=n[e+\"queueHooks\"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r[\"margin\"+n]=r[\"padding\"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir(\"show\"),slideUp:ir(\"hide\"),slideToggle:ir(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&\"object\"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:\"number\"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,\"position\");\"static\"===r&&(e.style.position=\"relative\");var i=x(e),o=i.offset(),a=x.css(e,\"top\"),s=x.css(e,\"left\"),l=(\"absolute\"===r||\"fixed\"===r)&&x.inArray(\"auto\",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),\"using\"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return\"fixed\"===x.css(r,\"position\")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],\"html\")||(n=e.offset()),n.top+=x.css(e[0],\"borderTopWidth\",!0),n.left+=x.css(e[0],\"borderLeftWidth\",!0)),{top:t.top-n.top-x.css(r,\"marginTop\",!0),left:t.left-n.left-x.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,\"html\")&&\"static\"===x.css(e,\"position\"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:\"height\",Width:\"width\"},function(e,n){x.each({padding:\"inner\"+e,content:n,\"\":\"outer\"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||\"boolean\"!=typeof i),s=r||(i===!0||o===!0?\"margin\":\"border\");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement[\"client\"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body[\"scroll\"+e],o[\"scroll\"+e],n.body[\"offset\"+e],o[\"offset\"+e],o[\"client\"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,\"object\"==typeof module&&module&&\"object\"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return x}))})(window);\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-assets-source-apk/src/main/assets/js/jquery.lazyload.js",
    "content": "\n(function($, window, document, undefined) {\n    var $window = $(window);\n\n    $.fn.lazyload = function(options) {\n        var elements = this;\n        var $container;\n        var settings = {\n            threshold       : 0,\n            failure_limit   : 0,\n            event           : \"scroll\",\n            effect          : \"show\",\n            container       : window,\n            data_attribute  : \"original\",\n            skip_invisible  : true,\n            appear          : null,\n            load            : null,\n            placeholder     : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC\"\n        };\n\n        function update() {\n            var counter = 0;\n\n            elements.each(function() {\n                var $this = $(this);\n                if (settings.skip_invisible && !$this.is(\":visible\")) {\n                    return;\n                }\n                if ($.abovethetop(this, settings) ||\n                    $.leftofbegin(this, settings)) {\n                        /* Nothing. */\n                } else if (!$.belowthefold(this, settings) &&\n                    !$.rightoffold(this, settings)) {\n                        $this.trigger(\"appear\");\n                        /* if we found an image we'll load, reset the counter */\n                        counter = 0;\n                } else {\n                    if (++counter > settings.failure_limit) {\n                        return false;\n                    }\n                }\n            });\n\n        }\n\n        if(options) {\n            /* Maintain BC for a couple of versions. */\n            if (undefined !== options.failurelimit) {\n                options.failure_limit = options.failurelimit;\n                delete options.failurelimit;\n            }\n            if (undefined !== options.effectspeed) {\n                options.effect_speed = options.effectspeed;\n                delete options.effectspeed;\n            }\n\n            $.extend(settings, options);\n        }\n\n        /* Cache container as jQuery as object. */\n        $container = (settings.container === undefined ||\n                      settings.container === window) ? $window : $(settings.container);\n\n        /* Fire one scroll event per scroll. Not one scroll event per image. */\n        if (0 === settings.event.indexOf(\"scroll\")) {\n            $container.bind(settings.event, function() {\n                return update();\n            });\n        }\n\n        this.each(function() {\n            var self = this;\n            var $self = $(self);\n\n            self.loaded = false;\n\n            /* If no src attribute given use data:uri. */\n            if ($self.attr(\"src\") === undefined || $self.attr(\"src\") === false) {\n                if ($self.is(\"img\")) {\n                    $self.attr(\"src\", settings.placeholder);\n                }\n            }\n\n            /* When appear is triggered load original image. */\n            $self.one(\"appear\", function() {\n                if (!this.loaded) {\n                    if (settings.appear) {\n                        var elements_left = elements.length;\n                        settings.appear.call(self, elements_left, settings);\n                    }\n                    $(\"<img />\")\n                        .bind(\"load\", function() {\n\n                            var original = $self.attr(\"data-\" + settings.data_attribute);\n                            $self.hide();\n                            if ($self.is(\"img\")) {\n                                $self.attr(\"src\", original);\n                            } else {\n                                $self.css(\"background-image\", \"url('\" + original + \"')\");\n                            }\n                            $self[settings.effect](settings.effect_speed);\n\n                            self.loaded = true;\n\n                            /* Remove image from array so it is not looped next time. */\n                            var temp = $.grep(elements, function(element) {\n                                return !element.loaded;\n                            });\n                            elements = $(temp);\n\n                            if (settings.load) {\n                                var elements_left = elements.length;\n                                settings.load.call(self, elements_left, settings);\n                            }\n                        })\n                        .attr(\"src\", $self.attr(\"data-\" + settings.data_attribute));\n                }\n            });\n\n            /* When wanted event is triggered load original image */\n            /* by triggering appear.                              */\n            if (0 !== settings.event.indexOf(\"scroll\")) {\n                $self.bind(settings.event, function() {\n                    if (!self.loaded) {\n                        $self.trigger(\"appear\");\n                    }\n                });\n            }\n        });\n\n        /* Check if something appears when window is resized. */\n        $window.bind(\"resize\", function() {\n            update();\n        });\n\n        /* With IOS5 force loading images when navigating with back button. */\n        /* Non optimal workaround. */\n        if ((/(?:iphone|ipod|ipad).*os 5/gi).test(navigator.appVersion)) {\n            $window.bind(\"pageshow\", function(event) {\n                if (event.originalEvent && event.originalEvent.persisted) {\n                    elements.each(function() {\n                        $(this).trigger(\"appear\");\n                    });\n                }\n            });\n        }\n\n        /* Force initial check if images should appear. */\n        $(document).ready(function() {\n            update();\n        });\n\n        return this;\n    };\n\n    /* Convenience methods in jQuery namespace.           */\n    /* Use as  $.belowthefold(element, {threshold : 100, container : window}) */\n\n    $.belowthefold = function(element, settings) {\n        var fold;\n\n        if (settings.container === undefined || settings.container === window) {\n            fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop();\n        } else {\n            fold = $(settings.container).offset().top + $(settings.container).height();\n        }\n\n        return fold <= $(element).offset().top - settings.threshold;\n    };\n\n    $.rightoffold = function(element, settings) {\n        var fold;\n\n        if (settings.container === undefined || settings.container === window) {\n            fold = $window.width() + $window.scrollLeft();\n        } else {\n            fold = $(settings.container).offset().left + $(settings.container).width();\n        }\n\n        return fold <= $(element).offset().left - settings.threshold;\n    };\n\n    $.abovethetop = function(element, settings) {\n        var fold;\n\n        if (settings.container === undefined || settings.container === window) {\n            fold = $window.scrollTop();\n        } else {\n            fold = $(settings.container).offset().top;\n        }\n\n        return fold >= $(element).offset().top + settings.threshold  + $(element).height();\n    };\n\n    $.leftofbegin = function(element, settings) {\n        var fold;\n\n        if (settings.container === undefined || settings.container === window) {\n            fold = $window.scrollLeft();\n        } else {\n            fold = $(settings.container).offset().left;\n        }\n\n        return fold >= $(element).offset().left + settings.threshold + $(element).width();\n    };\n\n    $.inviewport = function(element, settings) {\n         return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) &&\n                !$.belowthefold(element, settings) && !$.abovethetop(element, settings);\n     };\n\n    /* Custom selectors for your convenience.   */\n    /* Use as $(\"img:below-the-fold\").something() or */\n    /* $(\"img\").filter(\":below-the-fold\").something() which is faster */\n\n    $.extend($.expr[\":\"], {\n        \"below-the-fold\" : function(a) { return $.belowthefold(a, {threshold : 0}); },\n        \"above-the-top\"  : function(a) { return !$.belowthefold(a, {threshold : 0}); },\n        \"right-of-screen\": function(a) { return $.rightoffold(a, {threshold : 0}); },\n        \"left-of-screen\" : function(a) { return !$.rightoffold(a, {threshold : 0}); },\n        \"in-viewport\"    : function(a) { return $.inviewport(a, {threshold : 0}); },\n        /* Maintain BC for couple of versions. */\n        \"above-the-fold\" : function(a) { return !$.belowthefold(a, {threshold : 0}); },\n        \"right-of-fold\"  : function(a) { return $.rightoffold(a, {threshold : 0}); },\n        \"left-of-fold\"   : function(a) { return !$.rightoffold(a, {threshold : 0}); }\n    });\n\n})(jQuery, window, document);\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/.gitignore",
    "content": "/build\n/.gradle"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n    alias(libs.plugins.kotlin.kapt)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.sample.library\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n    kapt {\n        generateStubs = true\n    }\n}\n\ndependencies {\n    compileOnly project(':wgllss-dynamic-host-skin-resource-lib')\n    compileOnly project(':Wgllss-Dynamic-Plugin-Common-Library')\n    compileOnly project(':wgllss-common-re-library')\n    compileOnly project(':wgllss-business-re-library')\n\n    compileOnly libs.androidx.core.ktx\n    compileOnly libs.androidx.lifecycle.runtime.ktx\n    compileOnly libs.androidx.activity.ktx\n    compileOnly libs.androidx.fragment.ktx\n\n    compileOnly libs.org.jsoup.jsoup\n    compileOnly libs.squareup.retrofit\n    compileOnly libs.com.squareup.okhttp3.logging.interceptor\n    compileOnly libs.okhttp3.okhttp\n    compileOnly libs.okio\n    compileOnly libs.converter.gson\n    compileOnly libs.converter.scalars\n\n    compileOnly libs.mmkv\n    compileOnly libs.palette.ktx\n    //room 数据库\n    compileOnly libs.glide\n    compileOnly libs.room.runtime\n    kapt libs.room.compiler\n\n    compileOnly libs.exoplayer.core\n//    compileOnly libs.exoplayer.ui\n    compileOnly libs.google.extension.mediasession\n\n    compileOnly libs.androidx.legacy.legacy.support.v44\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_business_lib.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_business_lib_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_business_lib_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.library\" >\n\n    <uses-permission android:name=\"android.permission.POST_NOTIFICATIONS\" />\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/data/ImgExtraData.kt",
    "content": "package com.wgllss.sample.data\n\ndata class ImgExtraData(val imgsrc: String)\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/data/NewsBean.kt",
    "content": "package com.wgllss.sample.data\n\nimport com.wgllss.sample.feature_system.untils.UUIDHelp\n\ndata class NewsBean(\n    val source: String,\n    val docid: String,\n    val title: String,\n    val commentCount: Int,\n    val imgsrc3gtype: Int,\n    val imgsrc: String,\n    val url: String,\n    val ptime: String,\n    val imgextra: MutableList<ImgExtraData>\n) {\n    inline val id: Long\n        get() = UUIDHelp.getUUID(title, source, imgsrc3gtype.toString(), ptime)\n}\n\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/data/SampleItemBean.kt",
    "content": "package com.wgllss.sample.data\n\ndata class SampleItemBean(val id: Int, val itemName: String)"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/datasource/net/HeaderInterceptor.kt",
    "content": "package com.wgllss.sample.datasource.net\n\nimport okhttp3.Interceptor\nimport okhttp3.Request\nimport okhttp3.Response\nimport java.io.IOException\n\nclass HeaderInterceptor : Interceptor {\n\n    @Throws(IOException::class)\n    override fun intercept(chain: Interceptor.Chain): Response {\n        val request: Request = chain.request()\n        val authorised = request\n            .newBuilder()\n            .addHeader(\"Connection\", \"keep-alive\") //\n            .addHeader(\"Accept-Language\", \"zh-CN,zh;q=0.9\") //\n            .addHeader(\"Upgrade-insecure-Requests\", \"1\") //\n        if (request.header(\"User-Agent\") == null) {\n            authorised.addHeader(\"User-Agent\", \"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36\") //\n        }\n        return chain.proceed(authorised.build())\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/datasource/net/MyApi.kt",
    "content": "package com.wgllss.sample.datasource.net\n\nimport retrofit2.http.*\n\n/**\n * http://3g.163.com/touch/reconstruct/article/list/BA10TA81wangning/10-20.html?size=0&hasad=10\n *\n * http://3g.163.com/touch/reconstruct/article/list/BBM54PGAwangning/0-10.html?size=0&hasad=0\n * http://3g.163.com/touch/reconstruct/article/list/BA10TA81wangning/0-10.html?size=0&hasad=0\n * http://3g.163.com/touch/reconstruct/article/list/BA8E6OEOwangning/0-10.html?size=0&hasad=0\n * http://3g.163.com/touch/reconstruct/article/list/BA8F6ICNwangning/0-10.html?size=0&hasad=0\n * http://3g.163.com/touch/reconstruct/article/list/BA8EE5GMwangning/0-10.html?size=0&hasad=0\n * http://3g.163.com/touch/reconstruct/article/list/BA8DOPCSwangning/0-10.html?size=0&hasad=0\n * http://3g.163.com/touch/reconstruct/article/list/BAI67OGGwangning/0-10.html?size=0&hasad=0\n * http://3g.163.com/touch/reconstruct/article/list/BA8D4A3Rwangning/0-10.html?size=0&hasad=0\n * http://3g.163.com/touch/reconstruct/article/list/BAI6I0O5wangning/0-10.html?size=0&hasad=0\n */\ninterface MyApi {\n\n    @GET(\"http://3g.163.com/touch/reconstruct/article/list/{path}/{start}-{end}.html?\")\n    suspend fun getNetTabInfo(@Path(\"path\") path: String, @Path(\"start\") start: String, @Path(\"end\") end: String, @Query(\"hasad\") hasad: Int, @Query(\"size\") size: Int = 0): String\n\n    @GET\n    suspend fun getNewsDetailInfo(@Url url: String, @Header(\"User-Agent\") user_Agent: String = \"Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1\"): String\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/datasource/net/RetrofitUtils.kt",
    "content": "package com.wgllss.sample.datasource.net\n\nimport android.content.Context\nimport okhttp3.Cache\nimport okhttp3.OkHttpClient\nimport okhttp3.logging.HttpLoggingInterceptor\nimport retrofit2.Retrofit\nimport retrofit2.converter.scalars.ScalarsConverterFactory\nimport java.util.concurrent.TimeUnit\n\nclass RetrofitUtils private constructor(val context: Context) {\n\n    companion object {\n        const val base_url = \"http://3g.163.com/\"\n\n        @Volatile\n        private var instance: RetrofitUtils? = null\n\n        fun getInstance(context: Context) = instance ?: synchronized(this) {\n            instance ?: RetrofitUtils(context).also { instance = it }\n        }\n    }\n\n    private inline val retrofit: Retrofit\n        get() {\n            val logging = HttpLoggingInterceptor().apply {\n                level = HttpLoggingInterceptor.Level.BODY\n            }\n            val timeout = 30000L\n            val okHttpClient = OkHttpClient.Builder()\n                .addInterceptor(HeaderInterceptor())\n                .addInterceptor(logging)\n//            .addInterceptor(RetrofitClient.BaseUrlInterceptor())\n                .callTimeout(timeout, TimeUnit.MILLISECONDS)\n                //设置连接超时\n                .connectTimeout(timeout, TimeUnit.MILLISECONDS)\n                //设置从主机读信息超时\n                .readTimeout(timeout, TimeUnit.MILLISECONDS)\n                //设置写信息超时\n                .writeTimeout(timeout, TimeUnit.MILLISECONDS)\n                .retryOnConnectionFailure(true)//设置出现错误进行重新连接。\n                .cache(Cache(context.cacheDir, 50 * 1024 * 1024)) //10M cache\n                .build();\n            return Retrofit.Builder()\n                .client(okHttpClient)\n                .addConverterFactory(ScalarsConverterFactory.create())\n                .baseUrl(base_url)\n                .build()\n        }\n\n    fun <T> create(service: Class<T>?): T {\n        if (service == null) {\n            throw RuntimeException(\"Api service is null!\")\n        }\n        return retrofit?.create(service)!!\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/datasource/repository/NewsRepository.kt",
    "content": "package com.wgllss.sample.datasource.repository\n\nimport android.content.Context\nimport com.google.gson.Gson\nimport com.google.gson.reflect.TypeToken\nimport com.wgllss.sample.data.NewsBean\nimport com.wgllss.sample.datasource.net.MyApi\nimport com.wgllss.sample.datasource.net.RetrofitUtils\nimport com.wgllss.sample.feature_system.room.CollectDataBase\nimport com.wgllss.sample.feature_system.room.help.RoomDBMigration\nimport com.wgllss.sample.feature_system.room.table.CollectTableBean\nimport kotlinx.coroutines.flow.flow\nimport okio.buffer\nimport okio.sink\nimport okio.source\nimport org.jsoup.Jsoup\nimport java.io.File\n\nclass NewsRepository private constructor(private val context: Context) {\n\n    private val apiL by lazy { RetrofitUtils.getInstance(context).create(MyApi::class.java) }\n    private val collectDataBaseL by lazy { CollectDataBase.getInstance(context, RoomDBMigration.instance) }\n\n    companion object {\n\n        @Volatile\n        private var instance: NewsRepository? = null\n\n        fun getInstance(context: Context) = instance ?: synchronized(this) {\n            instance ?: NewsRepository(context).also { instance = it }\n        }\n    }\n\n    suspend fun getNetTabInfo(path: String, start: Int, end: Int) = flow {\n        val str = apiL.getNetTabInfo(path, start.toString(), end.toString(), start).let {\n            it.substring(9, it.length - 1)\n        }\n        val map = Gson().fromJson<MutableMap<String, MutableList<NewsBean>>>(str, object : TypeToken<Map<String, MutableList<NewsBean>>>() {}.type)\n        emit(map[path]!!)\n    }\n\n    suspend fun getNewsDetailInfo(id: String, fileName: String) = flow {\n        val dir = \"down_dir\"\n        val file = File(StringBuilder(context.filesDir.absolutePath).append(File.separator).append(dir).append(File.separator).append(fileName).toString())\n        if (!file.exists()) {\n            File(file.parent).takeUnless { it.exists() }?.run { mkdirs() }\n            val html = apiL.getNewsDetailInfo(\"https://3g.163.com/all/article/${id}.html#offset=1\")\n            val document = Jsoup.parse(html, \"https://3g.163.com/\")\n            document.select(\"script\").remove()\n            document.select(\".main-openApp\").remove()\n            document.select(\".operate\").remove()\n            document.select(\".js-open-app\").remove()\n            document.select(\".comment\").remove()\n            document.select(\".recommend\").remove()\n            document.select(\"head\")?.append(\"<script type=\\\"text/javascript\\\" src=\\\"../js/jquery.js\\\"></script>\")\n            document.select(\"head\")?.append(\"<script type=\\\"text/javascript\\\" src=\\\"../js/jquery.lazyload.js\\\"></script>\")\n            document.select(\"head\")?.append(\"<script> function loadImage(){setTimeout(function (){\\$(\\\"img.lazy\\\").lazyload();window.scrollTo('0','1');window.scrollTo('1','0');}, 300);}</script>\")\n\n            val lint = document.select(\"link\")\n            lint?.forEach {\n                val link = it?.attr(\"abs:href\")\n                if (link != null && link!!.contains(\"0ccc5aad.js\")) {\n                    it.remove()\n                }\n            }\n\n            val figure = document.select(\"figure\")\n            figure?.forEach {\n                it.select(\"div\")?.takeIf { d ->\n                    d.size > 1\n                }?.get(1)?.remove()\n            }\n            val nav = document.select(\"header\")\n            nav?.remove()\n\n            val newHtml = document.html()\n                .replace(\"image-lazy image-error\", \"lazy\")\n                .replace(\"data-src\", \"data-original\")\n                .replace(\"image-lazy image-reload\", \"lazy\")\n\n            val inputStream = newHtml.byteInputStream()\n            if (inputStream != null) {\n                val sinkBuffer = file.sink().buffer()\n                val bufferedSource = inputStream.source().buffer()\n                sinkBuffer.write(bufferedSource.readByteArray())\n                sinkBuffer.close()\n                bufferedSource.close()\n                inputStream.close()\n            }\n        }\n        emit(StringBuilder().append(\"file:///\").append(file.absolutePath).toString())\n    }\n\n    suspend fun addToCollection(it: NewsBean) = flow {\n        it.run {\n            val count = collectDataBaseL.collectDao().queryByUUID(id)\n            if (count > 0) {\n                emit(\"已经收藏过\")\n            } else {\n                collectDataBaseL.collectDao().insertCollectBean(CollectTableBean(id, title, imgsrc, System.currentTimeMillis()))\n                emit(\"收藏成功\")\n            }\n        }\n    }\n\n    suspend fun getAllList() = flow {\n        emit(collectDataBaseL.collectDao().getList())\n    }\n\n    suspend fun deleteFromId(id: Long) = flow {\n        collectDataBaseL.collectDao().deleteFromID(id)\n        emit(0)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/music/exoplayerimpl/ExoPlayerUtils.kt",
    "content": "package com.wgllss.sample.feature_system.music.exoplayerimpl\n\nimport android.content.Context\nimport com.wgllss.host.skin.R\nimport kotlin.math.floor\n\nobject ExoPlayerUtils {\n    fun timestampToMSS(context: Context, position: Long): String {\n        val totalSeconds = floor(position / 1E3).toInt()\n        val minutes = totalSeconds / 60\n        val remainingSeconds = totalSeconds - (minutes * 60)\n        return if (position < 0) context.getString(R.string.duration_unknown)\n        else context.getString(R.string.duration_format).format(minutes, remainingSeconds)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/music/exoplayerimpl/MusicServiceConnection.kt",
    "content": "package com.wgllss.sample.feature_system.music.exoplayerimpl\n\nimport android.content.ComponentName\nimport android.content.Context\nimport android.os.Bundle\nimport android.os.Handler\nimport android.os.ResultReceiver\nimport android.support.v4.media.MediaBrowserCompat\nimport android.support.v4.media.MediaMetadataCompat\nimport android.support.v4.media.session.MediaControllerCompat\nimport android.support.v4.media.session.MediaSessionCompat\nimport android.support.v4.media.session.PlaybackStateCompat\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.ssmusic.features_system.extensions.duration\nimport com.wgllss.ssmusic.features_system.extensions.id\nimport com.wgllss.sample.feature_system.services.MusicService\n\nclass MusicServiceConnection private constructor(context: Context) {\n\n    companion object {\n\n        @Volatile\n        private var instance: MusicServiceConnection? = null\n\n        fun getInstance(context: Context) = instance ?: synchronized(this) {\n            instance ?: MusicServiceConnection(context).also { instance = it }\n        }\n    }\n\n    val isConnected by lazy { MutableLiveData(false) }\n//    val networkFailure = MutableLiveData<Boolean>()\n//        .apply { postValue(false) }\n\n    val rootMediaId by lazy { mediaBrowser.root }\n\n    val playbackState by lazy {\n        MutableLiveData<PlaybackStateCompat>()\n            .apply { postValue(EMPTY_PLAYBACK_STATE) }\n    }\n    val nowPlaying by lazy {\n        MutableLiveData<MediaMetadataCompat>()\n            .apply { postValue(NOTHING_PLAYING) }\n    }\n\n//    val queueData: MutableLiveData<QueueData>\n\n    val transportControls by lazy {\n        mediaController.transportControls\n    }\n\n    private val mediaBrowserConnectionCallback by lazy { MediaBrowserConnectionCallback(context) }\n    private val mediaBrowser by lazy {\n        MediaBrowserCompat(context, ComponentName(context, MusicService::class.java), mediaBrowserConnectionCallback, null).apply {\n            android.util.Log.e(\"MusicServiceConnection\", \"开始 connect\")\n            connect()\n        }\n    }\n\n    fun startConnect() {\n        mediaBrowser\n    }\n\n    private lateinit var mediaController: MediaControllerCompat\n\n    fun subscribe(parentId: String, callback: MediaBrowserCompat.SubscriptionCallback) {\n        mediaBrowser.subscribe(parentId, callback)\n    }\n\n    fun unsubscribe(parentId: String, callback: MediaBrowserCompat.SubscriptionCallback) {\n        mediaBrowser.unsubscribe(parentId, callback)\n    }\n\n    fun sendCommand(command: String, parameters: Bundle?) =\n        sendCommand(command, parameters) { _, _ -> }\n\n    fun sendCommand(\n        command: String,\n        parameters: Bundle?,\n        resultCallback: ((Int, Bundle?) -> Unit)\n    ) = if (mediaBrowser.isConnected) {\n        mediaController.sendCommand(command, parameters, object : ResultReceiver(Handler()) {\n            override fun onReceiveResult(resultCode: Int, resultData: Bundle?) {\n                resultCallback(resultCode, resultData)\n            }\n        })\n        true\n    } else {\n        false\n    }\n\n    private inner class MediaBrowserConnectionCallback(private val context: Context) : MediaBrowserCompat.ConnectionCallback() {\n        override fun onConnected() {\n            android.util.Log.e(\"MusicServiceConnection\", \"onConnected\")\n            mediaController = MediaControllerCompat(context, mediaBrowser.sessionToken).apply {\n                registerCallback(MediaControllerCallback())\n            }\n\n            isConnected.postValue(true)\n        }\n\n        override fun onConnectionSuspended() {\n            isConnected.postValue(false)\n        }\n\n        override fun onConnectionFailed() {\n            isConnected.postValue(false)\n        }\n    }\n\n    private inner class MediaControllerCallback : MediaControllerCompat.Callback() {\n        private var stateL = PlaybackStateCompat.STATE_NONE\n        private var mediaID = \"\"\n        private var duration = 0L\n\n        override fun onPlaybackStateChanged(state: PlaybackStateCompat?) {\n            state?.state.takeIf {\n                it != stateL\n            }?.let {\n                stateL = it\n                playbackState.postValue(state)\n            }\n        }\n\n        override fun onMetadataChanged(it: MediaMetadataCompat?) {\n            it?.takeIf {\n                mediaID != it.id && duration != it.duration\n            }?.let {\n                mediaID = it.id ?: \"\"\n                duration = it.duration\n                nowPlaying.postValue(it)\n            }\n        }\n\n        override fun onQueueChanged(queue: MutableList<MediaSessionCompat.QueueItem>?) {\n        }\n\n        override fun onExtrasChanged(extras: Bundle?) {\n            super.onExtrasChanged(extras)\n        }\n\n        override fun onSessionDestroyed() {\n            mediaBrowserConnectionCallback.onConnectionSuspended()\n        }\n    }\n}\n\n@Suppress(\"PropertyName\")\nval EMPTY_PLAYBACK_STATE: PlaybackStateCompat = PlaybackStateCompat.Builder()\n    .setState(PlaybackStateCompat.STATE_NONE, 0, 0f)\n    .build()\n\n@Suppress(\"PropertyName\")\nval NOTHING_PLAYING: MediaMetadataCompat = MediaMetadataCompat.Builder()\n    .putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, \"\")\n    .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, 0)\n    .build()"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/music/extensions/MediaExtensions.kt",
    "content": "package com.wgllss.sample.feature_system.music.extensions\n\nimport android.support.v4.media.session.MediaSessionCompat\nimport android.support.v4.media.session.PlaybackStateCompat\n\nfun MediaSessionCompat.isPlaying(): Boolean {\n    return controller.playbackState.state == PlaybackStateCompat.STATE_PLAYING\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/music/extensions/MediaMetadataCompatExt.kt",
    "content": "\npackage com.wgllss.ssmusic.features_system.extensions\n\nimport android.graphics.Bitmap\nimport android.net.Uri\nimport android.os.Bundle\nimport android.support.v4.media.MediaBrowserCompat.MediaItem\nimport android.support.v4.media.MediaMetadataCompat\nimport androidx.core.net.toUri\nimport com.google.android.exoplayer2.MediaMetadata\nimport com.google.android.exoplayer2.util.MimeTypes\n\n/**\n * Useful extensions for [MediaMetadataCompat].\n */\ninline val MediaMetadataCompat.id: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID)\n\ninline val MediaMetadataCompat.title: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_TITLE)\n\ninline val MediaMetadataCompat.artist: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_ARTIST)\n\ninline val MediaMetadataCompat.duration\n    get() = getLong(MediaMetadataCompat.METADATA_KEY_DURATION)\n\ninline val MediaMetadataCompat.album: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_ALBUM)\n\ninline val MediaMetadataCompat.author: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_AUTHOR)\n\ninline val MediaMetadataCompat.writer: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_WRITER)\n\ninline val MediaMetadataCompat.composer: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_COMPOSER)\n\ninline val MediaMetadataCompat.compilation: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_COMPILATION)\n\ninline val MediaMetadataCompat.date: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_DATE)\n\ninline val MediaMetadataCompat.year: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_YEAR)\n\ninline val MediaMetadataCompat.genre: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_GENRE)\n\ninline val MediaMetadataCompat.trackNumber\n    get() = getLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER)\n\ninline val MediaMetadataCompat.trackCount\n    get() = getLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS)\n\ninline val MediaMetadataCompat.discNumber\n    get() = getLong(MediaMetadataCompat.METADATA_KEY_DISC_NUMBER)\n\ninline val MediaMetadataCompat.albumArtist: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_ALBUM_ARTIST)\n\ninline val MediaMetadataCompat.art: Bitmap\n    get() = getBitmap(MediaMetadataCompat.METADATA_KEY_ART)\n\ninline val MediaMetadataCompat.artUri: Uri\n    get() = this.getString(MediaMetadataCompat.METADATA_KEY_ART_URI).toUri()\n\ninline val MediaMetadataCompat.albumArt: Bitmap?\n    get() = getBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART)\n\ninline val MediaMetadataCompat.albumArtUri: String\n    get() = getString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI) ?: \"\"\n\ninline val MediaMetadataCompat.userRating\n    get() = getLong(MediaMetadataCompat.METADATA_KEY_USER_RATING)\n\ninline val MediaMetadataCompat.rating\n    get() = getLong(MediaMetadataCompat.METADATA_KEY_RATING)\n\ninline val MediaMetadataCompat.displayTitle: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE)\n\ninline val MediaMetadataCompat.displaySubtitle: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE)\n\ninline val MediaMetadataCompat.displayDescription: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_DISPLAY_DESCRIPTION)\n\ninline val MediaMetadataCompat.displayIcon: Bitmap\n    get() = getBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON)\n\ninline val MediaMetadataCompat.displayIconUri: Uri\n    get() = this.getString(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI).toUri()\n\ninline val MediaMetadataCompat.mediaUri: Uri\n    get() = this.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_URI).toUri()\n\ninline val MediaMetadataCompat.downloadStatus\n    get() = getLong(MediaMetadataCompat.METADATA_KEY_DOWNLOAD_STATUS)\n\n/**\n * Custom property for storing whether a [MediaMetadataCompat] item represents an\n * item that is [MediaItem.FLAG_BROWSABLE] or [MediaItem.FLAG_PLAYABLE].\n */\ninline val MediaMetadataCompat.flag\n    get() = this.getLong(METADATA_KEY_UAMP_FLAGS).toInt()\n\n/**\n * Useful extensions for [MediaMetadataCompat.Builder].\n */\n\n// These do not have getters, so create a message for the error.\nconst val NO_GET = \"Property does not have a 'get'\"\n\ninline var MediaMetadataCompat.Builder.id: String\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, value)\n    }\n\ninline var MediaMetadataCompat.Builder.title: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_TITLE, value)\n    }\n\ninline var MediaMetadataCompat.Builder.artist: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_ARTIST, value)\n    }\n\ninline var MediaMetadataCompat.Builder.album: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_ALBUM, value)\n    }\n\ninline var MediaMetadataCompat.Builder.duration: Long\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putLong(MediaMetadataCompat.METADATA_KEY_DURATION, value)\n    }\n\ninline var MediaMetadataCompat.Builder.genre: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_GENRE, value)\n    }\n\ninline var MediaMetadataCompat.Builder.mediaUri: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_MEDIA_URI, value)\n    }\n\ninline var MediaMetadataCompat.Builder.albumArtUri: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, value)\n    }\n\ninline var MediaMetadataCompat.Builder.albumArt: Bitmap?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, value)\n    }\n\ninline var MediaMetadataCompat.Builder.trackNumber: Long\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER, value)\n    }\n\ninline var MediaMetadataCompat.Builder.trackCount: Long\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, value)\n    }\n\ninline var MediaMetadataCompat.Builder.displayTitle: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, value)\n    }\n\ninline var MediaMetadataCompat.Builder.displaySubtitle: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE, value)\n    }\n\ninline var MediaMetadataCompat.Builder.displayDescription: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_DESCRIPTION, value)\n    }\n\ninline var MediaMetadataCompat.Builder.displayIconUri: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI, value)\n    }\n\ninline var MediaMetadataCompat.Builder.downloadStatus: Long\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putLong(MediaMetadataCompat.METADATA_KEY_DOWNLOAD_STATUS, value)\n    }\n\n/**\n * Custom property for storing whether a [MediaMetadataCompat] item represents an\n * item that is [MediaItem.FLAG_BROWSABLE] or [MediaItem.FLAG_PLAYABLE].\n */\ninline var MediaMetadataCompat.Builder.flag: Int\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putLong(METADATA_KEY_UAMP_FLAGS, value.toLong())\n    }\n\nfun MediaMetadataCompat.toMediaItemMetadata(): com.google.android.exoplayer2.MediaMetadata {\n    return with(MediaMetadata.Builder()) {\n        setTitle(title)\n        setDisplayTitle(displayTitle)\n        setAlbumArtist(artist)\n        setAlbumTitle(album)\n        setComposer(composer)\n        setTrackNumber(trackNumber.toInt())\n        setTotalTrackCount(trackCount.toInt())\n        setDiscNumber(discNumber.toInt())\n        setWriter(writer)\n        setArtworkUri(albumArtUri?.toUri())\n        val extras = Bundle()\n//        getString(JsonSource.ORIGINAL_ARTWORK_URI_KEY)?.let {\n//            // album art is a content:// URI. Keep the original for Cast.\n//            extras.putString(\n//                JsonSource.ORIGINAL_ARTWORK_URI_KEY,\n//                getString(JsonSource.ORIGINAL_ARTWORK_URI_KEY)\n//            )\n//        }\n        extras.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, duration)\n        setExtras(extras)\n    }.build()\n}\n\nfun MediaMetadataCompat.toMediaItem(): com.google.android.exoplayer2.MediaItem {\n    return with(com.google.android.exoplayer2.MediaItem.Builder()) {\n        setMediaId(mediaUri.toString())\n        setUri(mediaUri)\n        setMimeType(MimeTypes.AUDIO_MPEG)\n        setMediaMetadata(toMediaItemMetadata())\n    }.build()\n}\n\n/**\n * Custom property that holds whether an item is [MediaItem.FLAG_BROWSABLE] or\n * [MediaItem.FLAG_PLAYABLE].\n */\nconst val METADATA_KEY_UAMP_FLAGS = \"com.example.android.uamp.media.METADATA_KEY_UAMP_FLAGS\"\n\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/music/extensions/PlaybackStateCompatExt.kt",
    "content": "\npackage com.wgllss.sample.feature_system.music.extensions\n\nimport android.os.SystemClock\nimport android.support.v4.media.session.PlaybackStateCompat\n\n/**\n * Useful extension methods for [PlaybackStateCompat].\n */\ninline val PlaybackStateCompat.isPrepared\n    get() = (state == PlaybackStateCompat.STATE_BUFFERING) ||\n            (state == PlaybackStateCompat.STATE_PLAYING) ||\n            (state == PlaybackStateCompat.STATE_PAUSED)\n\ninline val PlaybackStateCompat.isPlaying\n    get() = (state == PlaybackStateCompat.STATE_BUFFERING) ||\n            (state == PlaybackStateCompat.STATE_PLAYING)\n\ninline val PlaybackStateCompat.isPlayEnabled\n    get() = (actions and PlaybackStateCompat.ACTION_PLAY != 0L) ||\n            ((actions and PlaybackStateCompat.ACTION_PLAY_PAUSE != 0L) &&\n                    (state == PlaybackStateCompat.STATE_PAUSED))\n\ninline val PlaybackStateCompat.isPauseEnabled\n    get() = (actions and PlaybackStateCompat.ACTION_PAUSE != 0L) ||\n            ((actions and PlaybackStateCompat.ACTION_PLAY_PAUSE != 0L) &&\n                    (state == PlaybackStateCompat.STATE_BUFFERING ||\n                            state == PlaybackStateCompat.STATE_PLAYING))\n\ninline val PlaybackStateCompat.isSkipToNextEnabled\n    get() = actions and PlaybackStateCompat.ACTION_SKIP_TO_NEXT != 0L\n\ninline val PlaybackStateCompat.isSkipToPreviousEnabled\n    get() = actions and PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS != 0L\n\ninline val PlaybackStateCompat.stateName\n    get() = when (state) {\n        PlaybackStateCompat.STATE_NONE -> \"STATE_NONE\"\n        PlaybackStateCompat.STATE_STOPPED -> \"STATE_STOPPED\"\n        PlaybackStateCompat.STATE_PAUSED -> \"STATE_PAUSED\"\n        PlaybackStateCompat.STATE_PLAYING -> \"STATE_PLAYING\"\n        PlaybackStateCompat.STATE_FAST_FORWARDING -> \"STATE_FAST_FORWARDING\"\n        PlaybackStateCompat.STATE_REWINDING -> \"STATE_REWINDING\"\n        PlaybackStateCompat.STATE_BUFFERING -> \"STATE_BUFFERING\"\n        PlaybackStateCompat.STATE_ERROR -> \"STATE_ERROR\"\n        else -> \"UNKNOWN_STATE\"\n    }\n\n/**\n * Calculates the current playback position based on last update time along with playback\n * state and speed.\n */\ninline val PlaybackStateCompat.currentPlayBackPosition: Long\n    get() = if (state == PlaybackStateCompat.STATE_PLAYING) {\n        val timeDelta = SystemClock.elapsedRealtime() - lastPositionUpdateTime\n        (position + (timeDelta * playbackSpeed)).toLong()\n    } else {\n        position\n    }\n\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/music/notification/WXNotificationListener.kt",
    "content": "package com.wgllss.sample.feature_system.music.notification\n\nimport android.app.Notification\n\ninterface WXNotificationListener {\n\n    fun onNotificationCancelled(notificationId: Int, dismissedByUser: Boolean)\n\n    fun onNotificationPosted(notificationId: Int, notification: Notification, ongoing: Boolean)\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/music/notification/WXPlayerNotificationManager.kt",
    "content": "package com.wgllss.sample.feature_system.music.notification\n\nimport android.Manifest\nimport android.app.Notification\nimport android.app.NotificationChannel\nimport android.app.NotificationManager\nimport android.app.PendingIntent\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.content.IntentFilter\nimport android.content.pm.PackageManager\nimport android.graphics.Bitmap\nimport android.graphics.Color\nimport android.os.Build\nimport android.os.Build.VERSION\nimport android.os.Handler\nimport android.os.Looper\nimport android.os.Message\nimport android.support.v4.media.MediaMetadataCompat\nimport android.support.v4.media.session.MediaSessionCompat\nimport android.support.v4.media.session.PlaybackStateCompat\nimport androidx.core.app.ActivityCompat\nimport androidx.core.app.NotificationCompat\nimport androidx.core.app.NotificationManagerCompat\nimport androidx.media.session.MediaButtonReceiver\nimport androidx.palette.graphics.Palette\nimport com.bumptech.glide.Glide\nimport com.google.android.exoplayer2.C\nimport com.google.android.exoplayer2.Player\nimport com.google.android.exoplayer2.util.Assertions\nimport com.google.android.exoplayer2.util.Util\nimport com.wgllss.core.units.SdkIntUtils\nimport kotlinx.coroutines.*\nimport com.wgllss.host.skin.R\nimport com.wgllss.sample.feature_system.globle.Constants.NOTIFICATION_LARGE_ICON_SIZE\nimport com.wgllss.sample.feature_system.globle.Constants.glideOptions\nimport com.wgllss.sample.feature_system.savestatus.MMKVHelp\n\nclass WXPlayerNotificationManager(private val context: Context, private val mediaSession: MediaSessionCompat, private val notificationsListener: WXNotificationListener) {\n\n    companion object {\n\n        private const val CHANNEL_ID = \"wx_music_channel_00001\"\n        private const val ACTION_PLAY = \"com.wgllss.wx_music.play\"\n        private const val ACTION_PAUSE = \"com.wgllss.wx_music.pause\"\n        private const val ACTION_PREVIOUS = \"com.wgllss.wx_music.prev\"\n        private const val ACTION_NEXT = \"com.wgllss.wx_music.next\"\n        private const val ACTION_CONTENT = \"com.wgllss.wx_music.content.intent\"\n\n        private const val MSG_START_OR_UPDATE_NOTIFICATION = 0\n        private const val MSG_UPDATE_NOTIFICATION_BITMAP = 1\n    }\n\n\n    private val notificationManagerCompat by lazy { NotificationManagerCompat.from(context) }\n    private var player: Player? = null\n    private val playerListener: Player.Listener by lazy { PlayerListener() }\n    private var currentNotificationTag = 0\n\n    private val mainHandler by lazy { Util.createHandler(Looper.getMainLooper(), Handler.Callback { msg: Message -> this.handleMessage(msg) }) }\n\n\n    private var postTime: Long = -1L\n    private val notificationId = hashCode()\n    private var isNotificationStarted = false\n    private val serviceJob by lazy { SupervisorJob() }\n    private val serviceScope by lazy { CoroutineScope(Dispatchers.Main + serviceJob) }\n    private val mediaLargeBitmapAdapter by lazy { MediaLargeBitmapAdapter() }\n    private var instanceId = 0\n    private var builder: NotificationCompat.Builder? = null\n    private val intentFilter by lazy {\n        val actions = arrayOf(ACTION_PLAY, ACTION_PAUSE, ACTION_PREVIOUS, ACTION_NEXT, ACTION_CONTENT, Intent.ACTION_SCREEN_OFF, Intent.ACTION_SCREEN_ON, Intent.ACTION_POWER_CONNECTED)\n        IntentFilter().apply {\n            actions.forEach { action ->\n                takeUnless {\n                    it.hasAction(action)\n                }?.addAction(action)\n            }\n        }\n    }\n    private val notificationBroadcastReceiver by lazy { NotificationBroadcastReceiver() }\n    private var currentIconUrl: String = \"\"\n\n    @Volatile\n    private var isNotificationChange = true\n\n\n    init {\n        instanceId++\n    }\n\n    private fun handleMessage(msg: Message): Boolean {\n        when (msg.what) {\n            MSG_START_OR_UPDATE_NOTIFICATION -> if (player != null) {\n                startOrUpdateNotification(player!!,  /* bitmap= */null)\n            }\n\n            MSG_UPDATE_NOTIFICATION_BITMAP -> if (player != null && isNotificationStarted && currentNotificationTag == msg.arg1) {\n                startOrUpdateNotification(player!!, msg.obj as Bitmap)\n            }\n\n            else -> return false\n        }\n        return true\n    }\n\n    fun hideNotification() {\n        showNotificationForPlayer(null)\n    }\n\n    fun showNotificationForPlayer(player: Player?) {\n        Assertions.checkState(Looper.myLooper() == Looper.getMainLooper())\n        Assertions.checkArgument(player == null || player.applicationLooper == Looper.getMainLooper())\n        if (this.player === player) {\n            return\n        }\n        if (this.player != null) {\n            this.player?.removeListener(playerListener)\n            if (player == null) {\n                stopNotification( /* dismissedByUser= */false)\n            }\n        }\n        this.player = player\n        if (player != null) {\n            player.addListener(playerListener)\n            postStartOrUpdateNotification()\n        }\n    }\n\n    private fun createNotificationChannel() {\n        if (VERSION.SDK_INT >= 26) {\n            val name: CharSequence = \"wgllss\"\n            val mChannel = NotificationChannel(CHANNEL_ID, name, NotificationManager.IMPORTANCE_LOW).apply {\n                description = \"play back status \"\n                setShowBadge(false)\n                lockscreenVisibility = Notification.VISIBILITY_PUBLIC\n            }\n            notificationManagerCompat.createNotificationChannel(mChannel)\n        }\n    }\n\n    private fun createNotification(player: Player, builderIn: NotificationCompat.Builder?, ongoing: Boolean, bitmap: Bitmap?): NotificationCompat.Builder? {\n        if (player.playbackState == Player.STATE_IDLE && player.currentTimeline.isEmpty) {\n            return null\n        }\n        if (mediaSession.controller == null || mediaSession.controller.metadata == null || mediaSession.controller.playbackState == null) {\n            return null\n        }\n        val artistName = mediaSession.controller.metadata.getString(MediaMetadataCompat.METADATA_KEY_ARTIST)\n        val trackName = mediaSession.controller.metadata.getString(MediaMetadataCompat.METADATA_KEY_TITLE)\n        val artworkUrl = mediaSession.controller.metadata.getString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI)\n        val isPlaying = shouldShowPauseButton(player)\n        val playButtonResId: Int = if (isPlaying) R.drawable.ic_baseline_pause_36 else R.drawable.ic_baseline_play_arrow_36\n        val togglePausePendingIntent = if (isPlaying) retrievePlaybackAction(ACTION_PAUSE) else retrievePlaybackAction(ACTION_PLAY)\n\n        if (postTime == -1L) {\n            postTime = System.currentTimeMillis()\n        }\n        createNotificationChannel()\n        var builder = builderIn\n        if (builder == null || isNotificationChange != isPlaying) {\n            isNotificationChange = isPlaying\n            builder = NotificationCompat.Builder(context, CHANNEL_ID)\n            builder?.apply {\n                addAction(R.drawable.ic_baseline_skip_previous_36, \"\", retrievePlaybackAction(ACTION_PREVIOUS))\n                addAction(playButtonResId, \"\", togglePausePendingIntent)\n                addAction(R.drawable.ic_baseline_skip_next_36, \"\", retrievePlaybackAction(ACTION_NEXT))\n            }\n        }\n\n        val style = androidx.media.app.NotificationCompat.MediaStyle().setMediaSession(mediaSession.sessionToken).setShowCancelButton(true).setShowActionsInCompactView(0, 1, 2, 3).setCancelButtonIntent(MediaButtonReceiver.buildMediaButtonPendingIntent(context, PlaybackStateCompat.ACTION_STOP))\n\n        builder?.apply {\n            setStyle(style)\n            setSmallIcon(R.drawable.loading)\n            setOngoing(ongoing)\n//            setContentIntent(retrievePlaybackAction(ACTION_CONTENT))\n            setContentIntent(mediaSession.controller.sessionActivity)\n            setContentTitle(trackName)\n            setContentText(artistName)\n//            setSubText(albumName)\n            setColorized(true)\n            setShowWhen(false)\n            setWhen(postTime)\n            setVisibility(NotificationCompat.VISIBILITY_PUBLIC)\n            priority = NotificationCompat.PRIORITY_LOW\n            setDeleteIntent(MediaButtonReceiver.buildMediaButtonPendingIntent(context, PlaybackStateCompat.ACTION_STOP))\n        }\n        var largeIcon: Bitmap? = bitmap\n        if (largeIcon == null) {\n            val notificationTag = if (currentIconUrl != artworkUrl) {\n                ++currentNotificationTag\n            } else currentNotificationTag\n            largeIcon = mediaLargeBitmapAdapter.getCurrentLargeIcon(artworkUrl, LoadLargeIconBitMapCall(notificationTag))\n        }\n        if (SdkIntUtils.isLollipop() && player.isPlaying && !player.isPlayingAd && !player.isCurrentMediaItemDynamic && player.playbackParameters.speed == 1f) {\n            builder?.apply {\n                setWhen(System.currentTimeMillis() - player.contentPosition)\n                setShowWhen(true)\n                setUsesChronometer(true)\n            }\n            largeIcon?.let {\n                builder?.color = Palette.from(it).generate().getVibrantColor(Color.parseColor(\"#F44336\"))\n            }\n        } else {\n            builder?.apply {\n                setShowWhen(false)\n                setUsesChronometer(false)\n                setWhen(postTime)\n            }\n        }\n        builder?.setLargeIcon(largeIcon)\n        builder?.setOnlyAlertOnce(true)\n        return builder\n    }\n\n    private fun shouldShowPauseButton(player: Player): Boolean {\n        return player.playbackState != Player.STATE_ENDED && player.playbackState != Player.STATE_IDLE && player.playWhenReady\n    }\n\n    private fun getOngoing(player: Player): Boolean {\n        val playbackState = player.playbackState\n        return ((playbackState == Player.STATE_BUFFERING || playbackState == Player.STATE_READY) && player.playWhenReady)\n    }\n\n\n    private fun startOrUpdateNotification(player: Player, bitmap: Bitmap?) {\n        val ongoing: Boolean = getOngoing(player)\n        builder = createNotification(player, builder, ongoing, bitmap)\n        if (builder == null) {\n            stopNotification( /* dismissedByUser= */false)\n            return\n        }\n        val notification: Notification = builder!!.build()\n        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {\n            return\n        }\n        notificationManagerCompat.notify(notificationId, notification)\n        if (!isNotificationStarted) {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) context.registerReceiver(notificationBroadcastReceiver, intentFilter, Context.RECEIVER_EXPORTED)\n            else context.registerReceiver(notificationBroadcastReceiver, intentFilter)\n        }\n        notificationsListener?.onNotificationPosted(notificationId, notification, ongoing || !isNotificationStarted)\n        isNotificationStarted = true\n    }\n\n    private fun stopNotification(dismissedByUser: Boolean) {\n        if (isNotificationStarted) {\n            isNotificationStarted = false\n            this.player?.removeListener(playerListener)\n            mainHandler.removeMessages(MSG_START_OR_UPDATE_NOTIFICATION)\n            notificationManagerCompat.cancel(notificationId)\n            context.unregisterReceiver(notificationBroadcastReceiver)\n            notificationsListener?.onNotificationCancelled(notificationId, dismissedByUser)\n        }\n    }\n\n    private fun postStartOrUpdateNotification() {\n        if (!mainHandler.hasMessages(MSG_START_OR_UPDATE_NOTIFICATION)) {\n            mainHandler.sendEmptyMessage(MSG_START_OR_UPDATE_NOTIFICATION)\n        }\n    }\n\n//    private fun postUpdateNotificationBitmap(bitmap: Bitmap, notificationTag: Int) {\n//        mainHandler.obtainMessage(MSG_UPDATE_NOTIFICATION_BITMAP, notificationTag, C.INDEX_UNSET, bitmap).sendToTarget()\n//    }\n\n    private fun retrievePlaybackAction(action: String): PendingIntent {\n        val intent = Intent(action).setPackage(context.packageName)\n        val pendingFlags = if (SdkIntUtils.isLollipop()) PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE\n        else PendingIntent.FLAG_UPDATE_CURRENT\n        return PendingIntent.getBroadcast(context, instanceId, intent, pendingFlags);\n    }\n\n\n    private inner class MediaLargeBitmapAdapter {\n\n        @Volatile\n        private var currentBitmap: Bitmap? = null\n\n        fun getCurrentLargeIcon(bitmapUrl: String, loadLargeIconBitMapCall: LoadLargeIconBitMapCall): Bitmap? {\n\n            return if (currentIconUrl == null || currentIconUrl != bitmapUrl) {\n                currentIconUrl = bitmapUrl\n                serviceScope.launch {\n                    currentBitmap = null\n                    currentBitmap = bitmapUrl?.let {\n                        resolveUriAsBitmap(it)\n                    }\n                    currentBitmap?.let {\n                        loadLargeIconBitMapCall.onBitmap(it)\n                    }\n                }\n                null\n            } else {\n                currentBitmap\n            }\n        }\n\n        private suspend fun resolveUriAsBitmap(uri: String): Bitmap? {\n            return withContext(Dispatchers.IO) {\n                try {\n                    Glide.with(context).applyDefaultRequestOptions(glideOptions).asBitmap().load(uri).submit(NOTIFICATION_LARGE_ICON_SIZE, NOTIFICATION_LARGE_ICON_SIZE).get()\n                } catch (e: Exception) {\n                    null\n                }\n            }\n        }\n    }\n\n    inner class LoadLargeIconBitMapCall(private val notificationTag: Int) {\n\n        fun onBitmap(bitmap: Bitmap) {\n            bitmap?.let { mainHandler.obtainMessage(MSG_UPDATE_NOTIFICATION_BITMAP, notificationTag, C.INDEX_UNSET, bitmap).sendToTarget() }\n        }\n    }\n\n\n    private inner class PlayerListener : Player.Listener {\n        override fun onEvents(player: Player, events: Player.Events) {\n            if (events.containsAny(\n                    Player.EVENT_PLAYBACK_STATE_CHANGED,\n                    Player.EVENT_PLAY_WHEN_READY_CHANGED,\n                    Player.EVENT_IS_PLAYING_CHANGED,\n                    Player.EVENT_TIMELINE_CHANGED,\n                    Player.EVENT_PLAYBACK_PARAMETERS_CHANGED,\n                    Player.EVENT_POSITION_DISCONTINUITY,\n                    Player.EVENT_REPEAT_MODE_CHANGED,\n                    Player.EVENT_SHUFFLE_MODE_ENABLED_CHANGED,\n                    Player.EVENT_MEDIA_METADATA_CHANGED\n                )\n            ) {\n                postStartOrUpdateNotification()\n            }\n        }\n    }\n\n    private inner class NotificationBroadcastReceiver : BroadcastReceiver() {\n        override fun onReceive(context: Context, intent: Intent?) {\n            when (intent?.action ?: \"\") {\n                ACTION_PLAY -> {\n                    if (player!!.playbackState == Player.STATE_IDLE) {\n                        player?.prepare()\n                    } else if (player!!.playbackState == Player.STATE_ENDED) {\n                        player?.seekToDefaultPosition(player!!.currentMediaItemIndex)\n                    }\n                    player?.play()\n                }\n\n                ACTION_PAUSE -> {\n                    player?.pause()\n                }\n\n                ACTION_PREVIOUS -> {\n                    mediaSession.controller?.transportControls?.skipToPrevious()\n                }\n\n                ACTION_NEXT -> {\n                    mediaSession.controller?.transportControls?.skipToNext()\n                }\n\n                Intent.ACTION_SCREEN_OFF, Intent.ACTION_POWER_CONNECTED, Intent.ACTION_SCREEN_ON -> {//锁屏显示歌词等等\n                    if (MMKVHelp.isOpenLockerUI() && player!!.isPlaying) {\n                        try {\n                            //todo 此处未实现\n//                            val intent = Intent(context, Class.forName(\"com.xxx.WXactivity\"))\n//                            intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS\n//                            context.startActivity(intent)\n                        } catch (e: Exception) {\n                            e.printStackTrace()\n                        }\n                    }\n                }\n\n                ACTION_CONTENT -> {\n\n                }\n\n                else -> {\n\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/room/CollectDataBase.kt",
    "content": "package com.wgllss.sample.feature_system.room\n\nimport android.content.Context\nimport androidx.room.Database\nimport androidx.room.Room\nimport androidx.room.RoomDatabase\nimport androidx.sqlite.db.SupportSQLiteDatabase\nimport com.wgllss.core.units.WLog\nimport com.wgllss.sample.feature_system.room.dao.CollectDao\nimport com.wgllss.sample.feature_system.room.help.RoomDBMigration\nimport com.wgllss.sample.feature_system.room.table.CollectTableBean\n\n@Database(entities = [CollectTableBean::class], version = 1, exportSchema = false)\nabstract class CollectDataBase : RoomDatabase() {\n\n    companion object {\n        @Volatile\n        private var instance: CollectDataBase? = null\n        fun getInstance(context: Context, roomDBMigration: RoomDBMigration): CollectDataBase {\n            if (instance == null) {\n                synchronized(CollectDataBase::class.java) {\n                    if (instance == null) {\n                        val builder = Room.databaseBuilder(context, CollectDataBase::class.java, \"wx_sample_db\")\n                        val migrations = roomDBMigration.createMigration()\n                        migrations?.takeIf {\n                            it.isNotEmpty()\n                        }?.let {\n                            builder.addMigrations(*it)\n                        }\n                        builder.addCallback(object : RoomDatabase.Callback() {\n                            override fun onCreate(db: SupportSQLiteDatabase) {\n                                super.onCreate(db)\n                                WLog.e(this@Companion, \"RoomDatabase onCreate\")\n                            }\n\n                            override fun onOpen(db: SupportSQLiteDatabase) {\n                                super.onOpen(db)\n                                WLog.e(this@Companion, \"RoomDatabase onOpen\")\n                            }\n\n                            override fun onDestructiveMigration(db: SupportSQLiteDatabase) {\n                                super.onDestructiveMigration(db)\n                                WLog.e(this@Companion, \"RoomDatabase onDestructiveMigration\")\n                            }\n                        })\n                        instance = builder.build()\n                    }\n                }\n            }\n            return instance!!\n        }\n    }\n\n    abstract fun collectDao(): CollectDao\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/room/dao/CollectDao.kt",
    "content": "package com.wgllss.sample.feature_system.room.dao\n\nimport androidx.lifecycle.LiveData\nimport androidx.room.Dao\nimport androidx.room.Insert\nimport androidx.room.OnConflictStrategy\nimport androidx.room.Query\nimport com.wgllss.sample.feature_system.room.table.CollectTableBean\n\n@Dao\ninterface CollectDao {\n\n    @Insert(onConflict = OnConflictStrategy.REPLACE)\n    fun insertCollectBean(collectTableBean: CollectTableBean)\n\n    //ASC 默认值，从小到大，升序排列 DESC 从大到小，降序排列\n    @Query(\"SELECT * FROM collect_tab ORDER BY createTime ASC\")\n    fun getList(): LiveData<MutableList<CollectTableBean>>\n\n    @Query(\"SELECT COUNT(*) FROM collect_tab WHERE id = :uuID\")\n    fun queryByUUID(uuID: Long): Int\n\n    @Query(\"DELETE FROM collect_tab WHERE id =:id\")\n    fun deleteFromID(id: Long)\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/room/help/RoomDBHelper.kt",
    "content": "package com.wgllss.sample.feature_system.room.help\n\nimport android.content.Context\nimport androidx.sqlite.db.SupportSQLiteDatabase\nimport com.wgllss.sample.feature_system.room.CollectDataBase\n\nobject RoomDBHelper {\n\n\n    fun getReadableDatabase(context: Context): SupportSQLiteDatabase {\n        return CollectDataBase.getInstance(context, RoomDBMigration.instance).openHelper.readableDatabase\n    }\n\n    fun getWritableDatabase(context: Context): SupportSQLiteDatabase {\n        return CollectDataBase.getInstance(context, RoomDBMigration.instance).openHelper.writableDatabase\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/room/help/RoomDBMigration.kt",
    "content": "package com.wgllss.sample.feature_system.room.help\n\nimport androidx.room.migration.Migration\n\nclass RoomDBMigration {\n\n    companion object {\n        val instance by lazy { RoomDBMigration() }\n    }\n\n    fun createMigration(): Array<Migration> {\n        val migrations = arrayListOf<Migration>()\n        return migrations.toTypedArray()\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/room/table/CollectTableBean.kt",
    "content": "package com.wgllss.sample.feature_system.room.table\n\nimport androidx.room.ColumnInfo\nimport androidx.room.Entity\nimport androidx.room.PrimaryKey\n\n@Entity(tableName = \"collect_tab\")\nclass CollectTableBean(\n    @PrimaryKey @ColumnInfo(name = \"id\", typeAffinity = ColumnInfo.INTEGER, defaultValue = \"0\") var id: Long,\n    @ColumnInfo(name = \"title\", typeAffinity = ColumnInfo.TEXT, defaultValue = \"\") val title: String,\n    @ColumnInfo(name = \"imgUrl\", typeAffinity = ColumnInfo.TEXT, defaultValue = \"\") val imgUrl: String,\n    @ColumnInfo(name = \"createTime\", typeAffinity = ColumnInfo.INTEGER, defaultValue = \"\") val createTime: Long\n)"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/savestatus/MMKVHelp.kt",
    "content": "package com.wgllss.sample.feature_system.savestatus\n\nimport com.tencent.mmkv.MMKV\n\nobject MMKVHelp {\n    private val mmkv by lazy { MMKV.defaultMMKV() }\n\n    /**\n     * 设置桌面歌词开关\n     */\n    fun setLockerSwitch(isOpen: Boolean) = mmkv.encode(\"open_locker_ui\", isOpen)\n\n    /**\n     * 桌面歌词开关是否打开\n     */\n    fun isOpenLockerUI() = mmkv.decodeBool(\"open_locker_ui\")\n\n    /**\n     * 设置播放模式 单曲循环 随机 顺序播放\n     */\n    fun setPlayMode(playMode: Int) = mmkv.encode(\"PlayMode\", playMode)\n\n    /**\n     * 得到播放模式\n     */\n    fun getPlayMode() = mmkv.decodeInt(\"PlayMode\")\n\n    fun saveHomeTab1Data(data: String) = mmkv.encode(\"home_fragment_tab1\", data)\n\n    fun getHomeTab1Data() = mmkv.decodeString(\"home_fragment_tab1\")\n\n    fun saveSkinPath(path: String) = mmkv.encode(\"skin_path_key\", path)\n\n    fun getSkinPath() = mmkv.decodeString(\"skin_path_key\")\n\n    fun saveJsPath(path: String) = mmkv.encode(\"webview_js_Key\", path)\n\n    fun getJsPath() = mmkv.decodeString(\"webview_js_Key\") ?: \"\"\n\n    fun saveWebResPath(path: String) = mmkv.encode(\"web_res_path_key\", path)\n\n    fun getWebResPath() = mmkv.decodeString(\"web_res_path_key\")\n\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/services/MusicService.kt",
    "content": "package com.wgllss.sample.feature_system.services\n\nimport android.app.Notification\nimport android.app.PendingIntent\nimport android.content.Intent\nimport android.net.Uri\nimport android.os.Bundle\nimport android.os.ResultReceiver\nimport android.support.v4.media.MediaBrowserCompat\nimport android.support.v4.media.MediaDescriptionCompat\nimport android.support.v4.media.MediaMetadataCompat\nimport android.support.v4.media.session.MediaSessionCompat\nimport android.support.v4.media.session.PlaybackStateCompat\nimport androidx.core.content.ContextCompat\nimport androidx.media.MediaBrowserServiceCompat\nimport com.google.android.exoplayer2.C\nimport com.google.android.exoplayer2.ExoPlayer\nimport com.google.android.exoplayer2.PlaybackException\nimport com.google.android.exoplayer2.Player\nimport com.google.android.exoplayer2.audio.AudioAttributes\nimport com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector\nimport com.google.android.exoplayer2.ext.mediasession.TimelineQueueNavigator\nimport com.wgllss.core.units.SdkIntUtils\nimport com.wgllss.sample.feature_system.globle.Constants.MEDIA_ID_ROOT\nimport com.wgllss.sample.feature_system.music.notification.WXPlayerNotificationManager\nimport com.wgllss.host.skin.R\nimport com.wgllss.sample.feature_system.globle.Constants\nimport com.wgllss.sample.feature_system.music.notification.WXNotificationListener\nimport com.wgllss.sample.features_ui.playing.activity.NotificationTargetActivity\nimport com.wgllss.ssmusic.features_system.extensions.*\n\nclass MusicService : MediaBrowserServiceCompat(), MediaSessionConnector.PlaybackPreparer {\n    private lateinit var notificationManager: WXPlayerNotificationManager\n\n    private var isForegroundService = false\n    private var currentMediaMetadataCompat: MediaMetadataCompat? = null\n    private val playerListener by lazy { PlayerEventListener() }\n\n    private val uAmpAudioAttributes by lazy {\n        AudioAttributes.Builder().setContentType(C.AUDIO_CONTENT_TYPE_MUSIC).setUsage(C.USAGE_MEDIA).build()\n    }\n\n    val exoPlayer: ExoPlayer by lazy {\n        ExoPlayer.Builder(this).build().apply {\n            setAudioAttributes(uAmpAudioAttributes, true)\n            setHandleAudioBecomingNoisy(true)\n            addListener(playerListener)\n        }\n    }\n\n    val mediaSession by lazy {\n        MediaSessionCompat(this, getString(R.string.app_name)).apply {\n            setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS)\n            val pendingFlags = if (SdkIntUtils.isLollipop()) {\n                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE\n            } else {\n                PendingIntent.FLAG_UPDATE_CURRENT\n            }\n            val sessionIntent = Intent(this@MusicService, NotificationTargetActivity::class.java)\n            val sessionActivityPendingIntent = PendingIntent.getActivity(this@MusicService, 0, sessionIntent, pendingFlags)\n            setSessionActivity(sessionActivityPendingIntent)\n            isActive = true\n        }\n    }\n\n    private val mediaSessionConnector by lazy {\n        MediaSessionConnector(mediaSession).apply {\n            setPlaybackPreparer(this@MusicService)\n            setQueueNavigator(SSQueueNavigator(mediaSession))\n        }\n    }\n\n    override fun onCreate() {\n        super.onCreate()\n        sessionToken = mediaSession.sessionToken\n        notificationManager = WXPlayerNotificationManager(this, mediaSession, PlayerNotificationListener())\n        notificationManager.showNotificationForPlayer(exoPlayer)\n        mediaSessionConnector.setPlayer(exoPlayer)\n        exoPlayer.clearMediaItems()\n    }\n\n    override fun onStart(intent: Intent?, startId: Int) {\n        super.onStart(intent, startId)\n    }\n\n    override fun onTaskRemoved(rootIntent: Intent?) {\n        super.onTaskRemoved(rootIntent)\n        exoPlayer.stop(true)\n    }\n\n    override fun onDestroy() {\n        super.onDestroy()\n    }\n\n    override fun onGetRoot(clientPackageName: String, clientUid: Int, rootHints: Bundle?): BrowserRoot? {\n        android.util.Log.e(\"MusicServiceConnection\", \"开始 onGetRoot\")\n        return BrowserRoot(MEDIA_ID_ROOT, null)\n    }\n\n    override fun onLoadChildren(parentId: String, result: Result<MutableList<MediaBrowserCompat.MediaItem>>) {\n        result.detach()\n        if (MEDIA_ID_ROOT == parentId) {\n            android.util.Log.e(\"MusicServiceConnection\", \"开始 onLoadChildren\")\n            //todo 查询 到列表\n            result.sendResult(mutableListOf())\n        }\n    }\n\n    override fun onCommand(player: Player, command: String, extras: Bundle?, cb: ResultReceiver?) = false\n\n    override fun getSupportedPrepareActions() =\n        PlaybackStateCompat.ACTION_PREPARE_FROM_MEDIA_ID or PlaybackStateCompat.ACTION_PLAY_FROM_MEDIA_ID or PlaybackStateCompat.ACTION_PREPARE_FROM_SEARCH or PlaybackStateCompat.ACTION_PLAY_FROM_SEARCH or PlaybackStateCompat.ACTION_PLAY_FROM_URI or PlaybackStateCompat.ACTION_PREPARE_FROM_URI or PlaybackStateCompat.ACTION_SEEK_TO or PlaybackStateCompat.ACTION_SKIP_TO_NEXT or PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS\n\n    override fun onPrepare(playWhenReady: Boolean) {\n    }\n\n    override fun onPrepareFromMediaId(mediaId: String, playWhenReady: Boolean, extras: Bundle?) {\n    }\n\n    override fun onPrepareFromSearch(query: String, playWhenReady: Boolean, extras: Bundle?) {\n    }\n\n    override fun onPrepareFromUri(uri: Uri, playWhenReady: Boolean, extras: Bundle?) {\n        extras?.run {\n            preparePlay(\n                getString(Constants.MEDIA_ID_KEY) ?: \"\", getString(Constants.MEDIA_TITLE_KEY) ?: \"\", getString(Constants.MEDIA_AUTHOR_KEY) ?: \"\", getString(Constants.MEDIA_ARTNETWORK_URL_KEY) ?: \"\", getString(Constants.MEDIA_URL_KEY) ?: \"\"\n            )\n        }\n    }\n\n    private fun preparePlay(mediaId: String, musicTitle: String, author: String, pic: String, url: String) {\n        val mediaMetadataCompat = MediaMetadataCompat.Builder().apply {\n            id = mediaId\n            title = musicTitle\n            mediaUri = url\n            artist = author\n            albumArtUri = pic\n            downloadStatus = MediaDescriptionCompat.STATUS_NOT_DOWNLOADED\n        }.build().apply {\n            description.extras?.putAll(bundle)\n        }\n        currentMediaMetadataCompat = mediaMetadataCompat\n        exoPlayer.stop()\n        exoPlayer.playWhenReady = true\n        exoPlayer.setMediaItem(mediaMetadataCompat.toMediaItem())\n        exoPlayer.prepare()\n    }\n\n    private inner class PlayerEventListener : Player.Listener {\n\n        override fun onPlaybackStateChanged(playbackState: Int) {\n            super.onPlaybackStateChanged(playbackState)\n        }\n\n        override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {\n            when (playbackState) {\n                Player.STATE_BUFFERING, Player.STATE_READY -> {\n                    if (playbackState == Player.STATE_READY) {\n                        if (playWhenReady) {\n\n                        }\n                        setPlaybackState(PlaybackStateCompat.STATE_PLAYING)\n                    }\n                    notificationManager.showNotificationForPlayer(exoPlayer)\n                }\n\n                Player.STATE_ENDED -> {\n                    playNext()\n                }\n\n                else -> {\n//                    notificationManager.hideNotification()\n                }\n            }\n        }\n\n        private fun setPlaybackState(playbackState: Int) {\n            val speed = exoPlayer.playbackParameters?.speed ?: 1.0f\n            mediaSession.setPlaybackState(PlaybackStateCompat.Builder().apply {\n                setState(playbackState, exoPlayer.contentPosition, speed).setActions(supportedPrepareActions)\n                setExtras(Bundle().apply {\n                    putLong(MediaMetadataCompat.METADATA_KEY_DURATION, exoPlayer.duration)\n                })\n            }.build())\n        }\n\n        override fun onPlayerError(error: PlaybackException) {\n            super.onPlayerError(error)\n            playNext()\n        }\n    }\n\n    private inner class SSQueueNavigator(mediaSession: MediaSessionCompat) : TimelineQueueNavigator(mediaSession) {\n        override fun getMediaDescription(player: Player, windowIndex: Int): MediaDescriptionCompat = currentMediaMetadataCompat?.description ?: MediaDescriptionCompat.Builder().build()\n\n        override fun onSkipToNext(player: Player) = playNext()\n\n        override fun onSkipToPrevious(player: Player) = playPrevious()\n\n        override fun getSupportedQueueNavigatorActions(player: Player) = PlaybackStateCompat.ACTION_SKIP_TO_NEXT or PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS\n    }\n\n    /**\n     * Listen for notification events.\n     */\n    private inner class PlayerNotificationListener : WXNotificationListener {\n        override fun onNotificationPosted(notificationId: Int, notification: Notification, ongoing: Boolean) {\n            if (ongoing && !isForegroundService) {\n                ContextCompat.startForegroundService(this@MusicService, Intent(this@MusicService, this@MusicService.javaClass))\n                startForeground(notificationId, notification)\n                isForegroundService = true\n            }\n        }\n\n        override fun onNotificationCancelled(notificationId: Int, dismissedByUser: Boolean) {\n            stopForeground(true)\n            isForegroundService = false\n            stopSelf()\n        }\n    }\n\n    protected open fun playNext() {\n\n    }\n\n    protected open fun playPrevious() {\n\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/untils/UUIDHelp.kt",
    "content": "package com.wgllss.sample.feature_system.untils\n\nimport java.util.*\nimport kotlin.math.abs\n\nobject UUIDHelp {\n\n    fun getUUID(title: String, author: String, requestRealUrl: String, pic: String): Long {\n        val sb = StringBuilder()\n        sb.append(title).append(author).append(requestRealUrl).append(pic)\n        val uuLongID = sb.toString().hashCode().toLong()\n        return abs(UUID(uuLongID, uuLongID).toString().replace(\"-\", \"\").hashCode()).toLong()\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library/src/main/java/com/wgllss/sample/features_ui/playing/activity/NotificationTargetActivity.kt",
    "content": "package com.wgllss.sample.features_ui.playing.activity\n\nimport android.app.Activity\nimport android.os.Bundle\nimport com.wgllss.core.ex.finishActivity\n\nclass NotificationTargetActivity : Activity() {\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        finishActivity()\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-loader-version/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-loader-version/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.loading\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\ndependencies {\n    compileOnly libs.kotlin.stdlib\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Version-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Constant-Lib')\n    compileOnly project(path: ':Wgllss-Dynamic-Host-Version-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Lib')\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_version.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_version_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_version_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-loader-version/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-loader-version/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.loading\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-loader-version/src/main/java/com/wgllss/loader/version/LoaderVersionImpl.kt",
    "content": "package com.wgllss.loader.version\n\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.COMMON\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.COMMON_BUSINESS\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.HOME\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.MANAGER\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.RESOURCE_SKIN\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.RUNTIME\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.WEB_ASSETS\nimport com.wgllss.dynamic.host.lib.version.ILoaderVersion\n\nclass LoaderVersionImpl : ILoaderVersion {\n\n    override fun getV() = 1000\n\n    override fun isMustShowLoading() = false\n\n    override fun getClfd() = Triple(\n        \"com.wgllss.dynamic.impl.ILoadHomeImpl\", \"loading\", 1000\n    )\n\n    override fun getClmd() = Triple(\"\", \"\", 0)\n\n    override fun getCdlfd() = Triple(\"\", \"\", 0)\n\n//    override fun getClmd() = Triple(\"com.wgllss.dynamic.plugin.loader.LoaderManagerImpl\", \"class_loader_impl_dex\", 1000)\n//\n//    override fun getCdlfd() = Triple(\"com.wgllss.dynamic.plugin.download_face.DownLoadFaceImpl\", \"classes_downloadface_impl_dex\", 1000)\n\n    override fun getMapDLU() = linkedMapOf(\n        COMMON to Pair(\"classes_common_lib_dex\", 1000),\n        WEB_ASSETS to Pair(\"classes_business_web_res\", 1000),\n        COMMON_BUSINESS to Pair(\"classes_business_lib_dex\", 1001),\n        RUNTIME to Pair(\"classes_wgllss_dynamic_plugin_runtime\", 1000),\n        MANAGER to Pair(\"classes_manager_dex\", 1000),\n        RESOURCE_SKIN to Pair(\"classes_common_skin_res\", 1000),\n        HOME to Pair(\"classes_home_dex\", 1000)\n    )\n\n//    override fun getOthers() = mutableMapOf<String, Int>()\n\n    override fun getOthers() = mutableMapOf(\n        \"classes_other_dex\" to 1000, \"classes_other_res\" to 1000, \"classes_other2_dex\" to 1000, \"classes_other2_res\" to 1000\n    )\n\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"classes_common_skin_res.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\n\ndef createCopyTask(assembleReleaseTask, buildType) {\n    def inputFile = file(\"${getProject().getBuildDir()}/outputs/apk/release/classes_common_skin_res.apk\")\n    def outputFile = file(\"${rootProject.getBuildDir()}/classes_common_skin_res\")\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    return tasks.create(\"assembleCopy\", Copy) {\n        group = 'other'\n        description = \"复制json到 指定输出目录\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(assembleReleaseTask.name)\n}\n\ntasks.whenTaskAdded { task ->\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(task, \"release\")\n    }\n//    if (task.name == \"cleanJson\") {\n//        createVersionJson(task, \"Release\")\n//    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#FF0000</color>\n    <color name=\"colorTrackCheck\">#CD4329</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#007A00</color>\n    <color name=\"colorTrackCheck\">#5dbe8a</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#B0B0B0</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.sample.home\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\ndependencies {\n\n    compileOnly project(path: ':Wgllss-Dynamic-Plugin-Common-Library')\n    compileOnly project(path: ':wgllss-common-re-library')\n\n    compileOnly project(path: ':wgllss-sample-business-library')\n    compileOnly project(path: ':wgllss-business-re-library')\n\n    compileOnly project(path: ':wgllss-sample-ui-other-lib')\n    compileOnly project(path: ':Wgllss-Dynamic-Plugin-Manager')\n\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Home-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Provider-Lib')\n\n    compileOnly project(path: ':Wgllss-Dynamic-Host-Lib')\n\n    compileOnly libs.androidx.sqlite.framework\n    compileOnly libs.androidx.core.ktx\n    compileOnly libs.appcompat\n    compileOnly libs.androidx.recyclerview\n    compileOnly libs.google.material\n\n    compileOnly libs.androidx.lifecycle.runtime.ktx\n    compileOnly libs.androidx.activity.ktx\n    compileOnly libs.androidx.fragment.ktx\n\n    compileOnly libs.converter.gson\n    compileOnly libs.mmkv\n    compileOnly libs.startup.runtime\n    compileOnly libs.androidx.legacy.legacy.support.v44\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_home.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_home_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_home_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.home\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/impl/ILoadHomeImpl.kt",
    "content": "package com.wgllss.dynamic.impl\n\nimport android.content.Context\nimport com.wgllss.dynamic.host.lib.home.ILoadHome\nimport com.wgllss.dynamic.sample.feature_startup.startup.InitHomeFirstInitializeHelp\n\nclass ILoadHomeImpl : ILoadHome {\n\n    override fun loadHomeCreate(context: Context) {\n        InitHomeFirstInitializeHelp.initCreate(context)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/initializer/InitHomeFirstInitialize.kt",
    "content": "package com.wgllss.dynamic.initializer\n\nimport android.content.Context\nimport androidx.startup.Initializer\nimport com.wgllss.dynamic.sample.feature_startup.startup.InitHomeFirstInitializeHelp\n\nclass InitHomeFirstInitialize : Initializer<Unit> {\n\n    override fun create(activity: Context) {\n        InitHomeFirstInitializeHelp.initCreate(activity)\n    }\n\n    override fun dependencies(): List<Class<out Initializer<*>>> {\n        return emptyList()\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/provider/TestContentProvider.kt",
    "content": "package com.wgllss.dynamic.provider\n\nimport android.content.ContentUris\nimport android.content.ContentValues\nimport android.content.Context\nimport android.database.Cursor\nimport android.database.sqlite.SQLiteDatabase\nimport android.net.Uri\nimport com.wgllss.dynamic.host.lib.provider.WXHostContentProviderDelegate\nimport com.wgllss.sample.feature_system.room.help.RoomDBHelper\n\nclass TestContentProvider(val context: Context) : WXHostContentProviderDelegate {\n\n    override fun onCreate(): Boolean {\n\n        android.util.Log.e(\"TestContentProvider\", \"onCreate\")\n        return false\n    }\n\n    override fun query(uri: Uri?, projection: Array<String>?, selection: String?, selectionArgs: Array<String>?, sortOrder: String?): Cursor? {\n        val db = RoomDBHelper.getReadableDatabase(context)\n        try {\n            db.beginTransaction()\n//            return db.query(\"select * from collect_tab\")\n            selection?.let {\n                return db.query(it)\n            }\n\n        } catch (e: Exception) {\n            e.printStackTrace()\n        } finally {\n            db.endTransaction()\n        }\n        android.util.Log.e(\"TestContentProvider\", \"query\")\n        return null\n    }\n\n\n    override fun getType(uri: Uri?): String? {\n        android.util.Log.e(\"TestContentProvider\", \"getType\")\n        return null\n    }\n\n    override fun insert(uri: Uri?, values: ContentValues?): Uri? {\n        android.util.Log.e(\"TestContentProvider\", \"insert\")\n        var insertUri: Uri? = null\n        values?.let {\n            val db = RoomDBHelper.getWritableDatabase(context)\n            try {\n                db.beginTransaction()\n                insertUri = ContentUris.withAppendedId(uri!!, db.insert(\"collect_tab\", SQLiteDatabase.CONFLICT_REPLACE, it))\n                db.setTransactionSuccessful()\n                context.contentResolver.notifyChange(uri!!, null)\n            } catch (e: Exception) {\n                e.printStackTrace()\n            } finally {\n                db.endTransaction()\n            }\n        }\n        return insertUri\n    }\n\n    override fun delete(uri: Uri?, selection: String?, selectionArgs: Array<String>?): Int {\n        android.util.Log.e(\"TestContentProvider\", \"delete \")\n        val db = RoomDBHelper.getWritableDatabase(context)\n        var result = 0\n        try {\n            db.beginTransaction()\n            result = db.delete(\"collect_tab\", selection, selectionArgs)\n            db.setTransactionSuccessful()\n            if (result > 0) {\n                context.contentResolver.notifyChange(uri!!, null)\n            }\n        } catch (e: Exception) {\n            e.printStackTrace()\n        } finally {\n            db.endTransaction()\n        }\n        return result\n    }\n\n    override fun update(uri: Uri?, values: ContentValues?, selection: String?, selectionArgs: Array<String>?): Int {\n        android.util.Log.e(\"TestContentProvider\", \"update\")\n        var result = 0\n        values?.let {\n            val db = RoomDBHelper.getWritableDatabase(context)\n            try {\n                db.beginTransaction()\n                result = db.update(\"collect_tab\", SQLiteDatabase.CONFLICT_NONE, it, selection!!, selectionArgs!!)\n                db.setTransactionSuccessful()\n                if (result > 0) {\n                    context.contentResolver.notifyChange(uri!!, null)\n                }\n            } catch (e: Exception) {\n                e.printStackTrace()\n            } finally {\n                db.endTransaction()\n            }\n        }\n        return result\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_home/adapter/HomeNewsAdapter.kt",
    "content": "package com.wgllss.dynamic.sample.feature_home.adapter\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.graphics.Color\nimport android.text.TextUtils\nimport android.util.TypedValue\nimport android.view.Gravity\nimport android.view.ViewGroup\nimport android.widget.FrameLayout\nimport android.widget.ImageView\nimport android.widget.ProgressBar\nimport android.widget.TextView\nimport androidx.recyclerview.widget.RecyclerView\nimport com.wgllss.core.adapter.BasePluginRecyclerAdapter\nimport com.wgllss.core.adapter.BaseRecyclerAdapter\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.ex.loadUrl\nimport com.wgllss.core.units.ScreenManager\nimport com.wgllss.sample.data.NewsBean\nimport com.wgllss.sample.feature_system.globle.Constants\nimport com.wgllss.sample.features_ui.page.base.SkinContains\n\nclass HomeNewsAdapter(re: Resources, packageName: String) : BasePluginRecyclerAdapter<NewsBean>(re, packageName) {\n\n    private val id1 = 1\n    private val id2 = 2\n    private val id3 = 3\n\n    private val id31 = 31\n    private val id32 = 32\n\n    private val id21 = 21\n    private val id22 = 22\n    private val id231 = 231\n    private val id232 = 232\n    private val id233 = 233\n\n    private var cornerRadiusInt: Int = 0\n    private val textColor by lazy { Color.parseColor(\"#999999\") }\n    private val footer by lazy { NewsBean(\"\", \"\", \"\", 0, 300, \"\", \"\", \"\", mutableListOf()) }\n    fun addFooter() {\n        mData.add(footer)\n        notifyItemInserted(mData.size - 1)\n    }\n\n    fun removeFooter() {\n        mData.removeAt(mData.size - 1)\n        notifyItemRemoved(mData.size)\n    }\n\n    override fun getLayoutResIdName(viewType: Int) = \"\"\n\n    override fun getItemViewType(position: Int): Int {\n        return if (position == 0) 0 else {\n            if (getItem(position).imgsrc3gtype == 2) 2\n            else if (getItem(position).imgsrc3gtype == 300) 3\n            else 1\n        }\n    }\n\n    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseBindingViewHolder {\n        if (context == null) {\n            context = parent.context\n            cornerRadiusInt = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 999f, parent.context.resources.displayMetrics).toInt()\n        }\n        val layout = when (viewType) {\n            0 -> {\n                val frameLayout = FrameLayout(context!!).apply {\n                    layoutParams = RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, context.getIntToDip(136f).toInt())\n                    val array: IntArray = intArrayOf(android.R.attr.selectableItemBackground)\n                    val typedValue = TypedValue()\n                    val attr = context.theme.obtainStyledAttributes(typedValue.resourceId, array)\n                    foreground = attr.getDrawable(0)!!\n                    attr.recycle()\n                    isClickable = true\n                    isFocusable = true\n                }\n\n                val img = ImageView(parent.context).apply {\n                    id = id31\n                    layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n                    scaleType = ImageView.ScaleType.FIT_XY\n                }\n                frameLayout.addView(img)\n\n                val title = TextView(context).apply {\n                    id = id32\n                    val size = context.getIntToDip(20f).toInt()\n                    layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, size).apply {\n                        gravity = Gravity.BOTTOM or Gravity.LEFT\n                    }\n                    gravity = Gravity.CENTER_VERTICAL\n                    setTextColor(Color.WHITE)\n                    setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15f)\n                    setBackgroundColor(Color.parseColor(\"#90000000\"))\n                }\n                frameLayout.addView(title)\n                frameLayout\n            }\n            2 -> {\n                val frameLayout = FrameLayout(context!!).apply {\n                    layoutParams = RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, context.getIntToDip(136f).toInt())\n                    val array: IntArray = intArrayOf(android.R.attr.selectableItemBackground)\n                    val typedValue = TypedValue()\n                    val attr = context.theme.obtainStyledAttributes(typedValue.resourceId, array)\n                    foreground = attr.getDrawable(0)!!\n                    attr.recycle()\n                    isClickable = true\n                    isFocusable = true\n                    val size = context.getIntToDip(20f).toInt()\n                    setPadding(size, 0, size, 0)\n                }\n\n                val title = TextView(context).apply {\n                    id = id21\n                    layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, context.getIntToDip(26f).toInt()).apply {\n                        gravity = Gravity.TOP or Gravity.LEFT\n                    }\n                    gravity = Gravity.CENTER_VERTICAL\n                    setTextColor(getPluginColor(skinRes, \"textColorPrimary\", SkinContains.packageName))\n                    setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20f)\n                }\n                frameLayout.addView(title)\n\n                val height = parent.context.getIntToDip(86f).toInt()\n                val margin = parent.context.getIntToDip(20f).toInt()\n                val width = (ScreenManager.screenWidth - 2 * margin) / 3 - parent.context.getIntToDip(3f).toInt()\n\n                val img1 = ImageView(context).apply {\n                    id = id231\n                    layoutParams = FrameLayout.LayoutParams(width, height).apply {\n                        gravity = Gravity.TOP or Gravity.LEFT\n                        topMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 26f, context.resources.displayMetrics).toInt()\n                    }\n                    scaleType = ImageView.ScaleType.CENTER_CROP\n                }\n                frameLayout.addView(img1)\n\n                val img2 = ImageView(context).apply {\n                    id = id232\n                    layoutParams = FrameLayout.LayoutParams(width, height).apply {\n                        gravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL\n                        topMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 26f, context.resources.displayMetrics).toInt()\n                    }\n                    scaleType = ImageView.ScaleType.CENTER_CROP\n                }\n                frameLayout.addView(img2)\n\n                val img3 = ImageView(context).apply {\n                    id = id233\n                    layoutParams = FrameLayout.LayoutParams(width, height).apply {\n                        gravity = Gravity.TOP or Gravity.RIGHT\n                        topMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 26f, context.resources.displayMetrics).toInt()\n                    }\n                    scaleType = ImageView.ScaleType.CENTER_CROP\n                }\n                frameLayout.addView(img3)\n\n                val time = TextView(context).apply {\n                    id = id22\n                    layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, context.getIntToDip(20f).toInt()).apply {\n                        gravity = Gravity.BOTTOM or Gravity.LEFT\n                    }\n                    gravity = Gravity.CENTER_VERTICAL\n                    setTextColor(textColor)\n                    setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13f)\n                    maxLines = 1\n                }\n                frameLayout.addView(time)\n                frameLayout\n            }\n            3 -> {\n                ProgressBar(context).apply {\n                    layoutParams = RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT).apply {\n                        topMargin = context.getIntToDip(5f).toInt()\n                    }\n                }\n            }\n            else -> {\n                val frameLayout = FrameLayout(context!!).apply {\n                    layoutParams = RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, context.getIntToDip(86f).toInt())\n                    val array: IntArray = intArrayOf(android.R.attr.selectableItemBackground)\n                    val typedValue = TypedValue()\n                    val attr = context.theme.obtainStyledAttributes(typedValue.resourceId, array)\n                    foreground = attr.getDrawable(0)!!\n                    attr.recycle()\n                    isClickable = true\n                    isFocusable = true\n                    val size = context.getIntToDip(20f).toInt()\n                    setPadding(size, 0, size, 0)\n                }\n\n                val img = ImageView(context!!).apply {\n                    id = id1\n                    val size = context.getIntToDip(80f).toInt()\n                    layoutParams = FrameLayout.LayoutParams(size, size).apply {\n                        gravity = Gravity.TOP or Gravity.LEFT\n                        topMargin = context.getIntToDip(3f).toInt()\n                    }\n                    scaleType = ImageView.ScaleType.FIT_XY\n                }\n                frameLayout.addView(img)\n\n                val textViewName = TextView(context).apply {\n                    id = id2\n                    layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, context.getIntToDip(45f).toInt()).apply {\n                        gravity = Gravity.TOP or Gravity.LEFT\n                        leftMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 90f, context.resources.displayMetrics).toInt()\n                        topMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 3f, context.resources.displayMetrics).toInt()\n                    }\n                    gravity = Gravity.CENTER_VERTICAL\n                    setTextColor(getPluginColor(skinRes, \"textColorPrimary\", SkinContains.packageName))\n                    setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18f)\n                    maxLines = 2\n                }\n                frameLayout.addView(textViewName)\n\n                val time = TextView(context).apply {\n                    id = id3\n                    layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, context.getIntToDip(26f).toInt()).apply {\n                        gravity = Gravity.BOTTOM or Gravity.LEFT\n                        leftMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 90f, context.resources.displayMetrics).toInt()\n                    }\n                    gravity = Gravity.CENTER_VERTICAL\n                    setTextColor(textColor)\n                    setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13f)\n                    maxLines = 1\n                }\n                frameLayout.addView(time)\n                frameLayout\n            }\n        }\n\n        return BaseBindingViewHolder(layout)\n    }\n\n    override fun onBindItem(context: Context, item: NewsBean, holder: RecyclerView.ViewHolder, position: Int) {\n        when (getItemViewType(position)) {\n            0 -> {\n                holder.itemView.findViewById<ImageView>(id31).loadUrl(item.imgsrc)\n                holder.itemView.findViewById<TextView>(id32).text = item.title\n            }\n            2 -> {\n                holder.itemView.findViewById<TextView>(id21).text = item.title\n                holder.itemView.findViewById<TextView>(id22).text = \"${item.source}  ${item.ptime}\"\n                holder.itemView.findViewById<ImageView>(id231).loadUrl(item.imgsrc)\n                holder.itemView.findViewById<ImageView>(id232).loadUrl(item.imgextra[0].imgsrc)\n                holder.itemView.findViewById<ImageView>(id233).loadUrl(item.imgextra[1].imgsrc)\n            }\n            3 -> {\n\n            }\n            else -> {\n                if (TextUtils.isEmpty(item.imgsrc)) {\n                    holder.itemView.findViewById<ImageView>(id1).setImageResource(Constants.defaultImgID)\n                    //todo Glide 里面可以配置 加载失败图片，这里只是 实例一下 这么写，可以这样直接用到宿主 资源\n                } else {\n                    holder.itemView.findViewById<ImageView>(id1).loadUrl(item.imgsrc)\n                }\n                holder.itemView.findViewById<TextView>(id2).text = item.title\n                holder.itemView.findViewById<TextView>(id3).text = \"${item.source}  ${item.ptime}\"\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_home/fragment/HomeFragment.kt",
    "content": "package com.wgllss.dynamic.sample.feature_home.fragment\n\nimport android.content.Intent\nimport android.content.res.Resources\nimport android.graphics.Color\nimport android.os.Bundle\nimport android.view.Gravity\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.FrameLayout\nimport androidx.lifecycle.lifecycleScope\nimport androidx.recyclerview.widget.GridLayoutManager\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport androidx.recyclerview.widget.RecyclerView\nimport androidx.swiperefreshlayout.widget.SwipeRefreshLayout\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.ex.initColors\nimport com.wgllss.core.ex.parseErrorString\nimport com.wgllss.core.fragment.BaseViewModelFragment\nimport com.wgllss.core.units.WLog\nimport com.wgllss.core.widget.DividerGridItemDecoration\nimport com.wgllss.core.widget.OnRecyclerViewItemClickListener\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.dynamic.plugin.manager.PluginResource\nimport com.wgllss.dynamic.sample.feature_home.adapter.HomeNewsAdapter\nimport com.wgllss.dynamic.sample.feature_home.pkg.ResourceContains\nimport com.wgllss.dynamic.sample.feature_home.viewmodels.HomeTabViewModel\nimport com.wgllss.dynamic.sample.feature_startup.startup.HomeContains\nimport com.wgllss.dynamic.sample.feature_startup.startup.LaunchInflateKey\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.onCompletion\nimport kotlinx.coroutines.flow.onStart\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.runBlocking\n\nclass HomeFragment : BaseViewModelFragment<HomeTabViewModel>(ResourceContains.packageName) {\n\n    var title: String = \"\"\n    private var key: String = \"\"\n\n    companion object {\n        private const val TITLE_KEY = \"TITLE_KEY\"\n        private const val KEY = \"KEY\"\n\n        fun newInstance(titleS: String, keyS: String): HomeFragment {\n            val fragment = HomeFragment().apply {\n                arguments = Bundle().apply {\n                    putString(TITLE_KEY, titleS)\n                    putString(KEY, keyS)\n                }\n                title = titleS\n            }\n            return fragment\n        }\n    }\n\n    override fun getPluginResources(): Resources? = null\n\n    override fun getSkinResources() = PluginResource.getSkinResources()\n\n//    private val homeTabViewModel by lazy { viewModels<HomeTabViewModel>().value }\n\n    private lateinit var rvPlList: RecyclerView\n    private lateinit var swipeRefreshLayout: SwipeRefreshLayout\n\n    private lateinit var homeNewsAdapter: HomeNewsAdapter\n\n//    override fun activitySameViewModel() = true\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        title = arguments?.getString(TITLE_KEY, \"\") ?: \"\"\n        key = arguments?.getString(KEY, \"\") ?: \"\"\n    }\n\n    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {\n        if (!this::swipeRefreshLayout.isInitialized) {\n            if (\"BBM54PGAwangning\" == key) {\n                runBlocking {\n                    swipeRefreshLayout = HomeContains.getViewByKey(inflater.context, LaunchInflateKey.home_fragment)!! as SwipeRefreshLayout\n                    rvPlList = swipeRefreshLayout.findViewById(getSkinPluginID(\"home_recycle_view\"))\n                }\n            } else {\n                swipeRefreshLayout = SwipeRefreshLayout(inflater.context).apply {\n                    layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n                    initColors()\n                }\n                rvPlList = RecyclerView(inflater.context).apply {\n                    val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n                    lp.gravity = Gravity.TOP and Gravity.LEFT\n                    layoutParams = lp\n                    layoutManager = LinearLayoutManager(context)\n                    setHasFixedSize(true)\n                    val itemDecoration = View(context)\n                    val size = context.getIntToDip(1.0f).toInt()\n                    itemDecoration.layoutParams = ViewGroup.LayoutParams(size, size)\n                    itemDecoration.setBackgroundColor(Color.parseColor(\"#60000000\"))\n                    addItemDecoration(DividerGridItemDecoration(context, GridLayoutManager.VERTICAL, itemDecoration))\n                }\n                swipeRefreshLayout.addView(rvPlList)\n            }\n        }\n        return swipeRefreshLayout\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        swipeRefreshLayout.setOnRefreshListener {\n            viewModel.reset(key)\n            viewModel.getData(key)\n        }\n        rvPlList?.run {\n            addOnItemTouchListener(object : OnRecyclerViewItemClickListener(this) {\n                override fun onItemClickListener(itemRootView: View, position: Int) {\n                    activity?.run {\n                        /** 方案一写法 other2 首次下载写法 start  **/\n                        showloading(\"请稍后...\")\n                        val status = PluginManager.instance.isLoadSuccessByKey(\"classes_other2_dex\", \"classes_other2_res\")\n                        hideLoading()\n                        if (!status) {\n                            onToast(\"缺少插件\")\n                            return\n                        }\n                        PluginManager.instance.startPluginSingleTaskActivity(\n                            this, \"classes_other2_res\",\n                            \"com.wgllss.sample.features_ui.page.other2.activity.WebViewActivity\",\n                            \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n                                putExtra(\"web_url_key\", homeNewsAdapter.getItem(position).docid)\n                                putExtra(\"title_key\", homeNewsAdapter.getItem(position).title)\n                                putExtra(\"docid_key\", StringBuilder(homeNewsAdapter.getItem(position).docid).append(\".html\").toString())\n                            }\n                        )\n                        /** 方案一写法 other2 首次下载写法 end  **/\n\n\n                        /** 方案二写法 other2 点击时候下载安装 start  **/\n//                        lifecycleScope.launch {\n//                            PluginManager.instance.dynamicLoadPlugin(this@run, Pair(\"classes_other2_dex\", 1000), Pair(\"classes_other2_res\", 1000)).onStart { showloading(\"加载中...\") }.onCompletion { hideLoading() }.catch {\n//                                onToast(it.parseErrorString())\n//                            }.collect {\n//                                PluginManager.instance.startPluginSingleTaskActivity(\n//                                    this@run, \"classes_other2_res\", \"com.wgllss.sample.features_ui.page.other2.activity.WebViewActivity\", \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n//                                        putExtra(\"web_url_key\", homeNewsAdapter.getItem(position).docid)\n//                                        putExtra(\"title_key\", homeNewsAdapter.getItem(position).title)\n//                                        putExtra(\"docid_key\", StringBuilder(homeNewsAdapter.getItem(position).docid).append(\".html\").toString())\n//                                    })\n//                            }\n//                        }\n                        /** 方案二写法 other2 首次下载写法 end  **/\n                    }\n                }\n\n                override fun onItemLongClickListener(itemRootView: View, position: Int) {\n                    viewModel.addToCollection(homeNewsAdapter.getItem(position))\n                }\n            })\n            addOnScrollListener(object : RecyclerView.OnScrollListener() {\n\n                override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {\n                    super.onScrolled(recyclerView, dx, dy)\n                    val linearLayoutManager = recyclerView.layoutManager as LinearLayoutManager?\n                    if (viewModel.enableLoadMore(key) && linearLayoutManager!!.itemCount == linearLayoutManager.findLastVisibleItemPosition() + 1) {\n                        viewModel.getData(key)\n                    }\n                }\n            })\n        }\n        if (rvPlList.adapter == null) {\n            homeNewsAdapter = HomeNewsAdapter(getSkinResources(), packageName)\n            homeNewsAdapter.skinRes = getSkinResources()\n            rvPlList.adapter = homeNewsAdapter\n        } else {\n            homeNewsAdapter = rvPlList.adapter as HomeNewsAdapter\n        }\n        homeNewsAdapter?.itemCount?.takeIf {\n            it > 0\n        }?.let {\n            viewModel.isLoadOffine = true\n        }\n        viewModel.getData(key)\n    }\n\n    override fun initObserve() {\n        super.initObserve()\n        viewModel.run {\n            initKey(key)\n            result[key]?.observe(viewLifecycleOwner) {\n                WLog.e(this@HomeFragment, key)\n                homeNewsAdapter.notifyData(it, getSkinResources())\n                homeNewsAdapter.addFooter()\n            }\n            enableLoadeMore[key]?.observe(viewLifecycleOwner) {\n                if (!it) homeNewsAdapter.removeFooter()\n            }\n            showUIDialog.observe(viewLifecycleOwner) {\n                if (!isLoadOffine) if (!isClick) {\n                    swipeRefreshLayout.isRefreshing = it.isShow && !isLoadingMore(key)\n                } else {\n                    if (it.isShow) showloading(it.msg) else hideLoading()\n                }\n            }\n            errorMsgLiveData.observe(viewLifecycleOwner) {\n                onToast(it)\n            }\n            liveDataLoadSuccessCount.observe(viewLifecycleOwner) {\n                if (it > 1) swipeRefreshLayout.isRefreshing = false\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_home/fragment/HomeTabFragment.kt",
    "content": "package com.wgllss.dynamic.sample.feature_home.fragment\n\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.util.TypedValue\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.TextView\nimport androidx.fragment.app.Fragment\nimport androidx.viewpager2.widget.ViewPager2\nimport com.google.android.material.tabs.TabLayout\nimport com.google.android.material.tabs.TabLayoutMediator\nimport com.wgllss.core.adapter.ViewPage2ChildFragmentAdapter\nimport com.wgllss.core.fragment.BaseViewModelFragment\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.dynamic.plugin.manager.PluginResource\nimport com.wgllss.dynamic.sample.feature_home.pkg.ResourceContains\nimport com.wgllss.dynamic.sample.feature_home.viewmodels.HomeViewModel\nimport com.wgllss.dynamic.sample.feature_startup.startup.HomeContains\nimport com.wgllss.dynamic.sample.feature_startup.startup.LaunchInflateKey\nimport kotlinx.coroutines.runBlocking\n\nclass HomeTabFragment : BaseViewModelFragment<HomeViewModel>(ResourceContains.packageName) {\n\n    private lateinit var childAdapter: ViewPage2ChildFragmentAdapter\n    private lateinit var homeTabLayout: TabLayout\n    private lateinit var viewPager2: ViewPager2\n    private lateinit var view_title_bar_bg: View\n    private lateinit var rootView: View\n    private var mTabLayoutMediator: TabLayoutMediator? = null\n\n    override fun activitySameViewModel() = true\n\n    override fun getPluginResources(): Resources? = null\n\n    override fun getSkinResources() = PluginResource.getSkinResources()\n\n    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {\n        runBlocking {\n            if (!::rootView.isInitialized) {\n                rootView = HomeContains.getViewByKey(inflater.context, LaunchInflateKey.home_tab_fragment_layout)!!\n                homeTabLayout = rootView.findViewById(getSkinPluginID(\"homeTabLayout\"))\n                viewPager2 = rootView.findViewById(getSkinPluginID(\"homeViewPager2\"))\n                view_title_bar_bg = rootView.findViewById(getSkinPluginID(\"view_title_bg\"))\n            }\n            rootView?.parent?.takeIf {\n                it is ViewGroup\n            }?.let {\n                (it as ViewGroup).removeView(rootView)\n            }\n        }\n        return rootView\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        viewModel.lazyTabViewPager2.observe(viewLifecycleOwner) {\n            childAdapter = ViewPage2ChildFragmentAdapter(childFragmentManager, lifecycle)\n            viewPager2.adapter = childAdapter\n            mTabLayoutMediator = TabLayoutMediator(homeTabLayout, viewPager2) { tab: TabLayout.Tab, position: Int ->\n                val textView = TextView(requireContext())\n                textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18f)\n                ResourceUtils.setTextColor(getSkinResources(), \"colorOnPrimary\", ResourceContains.packageName, textView)\n                tab.customView = textView\n                textView.text = (childAdapter.list[position] as HomeFragment).title\n            }.apply(TabLayoutMediator::attach)\n            homeTabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {\n                override fun onTabSelected(tab: TabLayout.Tab) {\n                    tab?.customView?.takeIf {\n                        it is TextView\n                    }?.run {\n                        (this as TextView).run {\n                            setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20f)\n//                            setTextColor(resources.getColor(R.color.colorPrimary))\n                        }\n                    }\n                }\n\n                override fun onTabUnselected(tab: TabLayout.Tab) {\n                    tab?.customView?.takeIf {\n                        it is TextView\n                    }?.run {\n                        (this as TextView).run {\n                            setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18f)\n//                            setTextColor(resources.getColor(R.color.white))\n                        }\n                    }\n                }\n\n                override fun onTabReselected(tab: TabLayout.Tab) {\n                }\n            })\n            childAdapter.notifyData(getList())\n            viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {\n                override fun onPageSelected(position: Int) {\n                    if (position > 0 && viewPager2.offscreenPageLimit != childAdapter.itemCount)\n                        viewPager2.offscreenPageLimit = childAdapter.itemCount\n                }\n            })\n        }\n    }\n\n    private fun getList() = mutableListOf<Fragment>(\n        HomeFragment.newInstance(\"手机\", \"BAI6I0O5wangning\"),\n        HomeFragment.newInstance(\"新闻\", \"BBM54PGAwangning\"),\n        HomeFragment.newInstance(\"娱乐\", \"BA10TA81wangning\"),\n        HomeFragment.newInstance(\"体育\", \"BA8E6OEOwangning\"),\n        HomeFragment.newInstance(\"时尚\", \"BA8F6ICNwangning\"),\n        HomeFragment.newInstance(\"财经\", \"BA8EE5GMwangning\"),\n        HomeFragment.newInstance(\"汽车\", \"BA8DOPCSwangning\"),\n        HomeFragment.newInstance(\"军事\", \"BAI67OGGwangning\"),\n        HomeFragment.newInstance(\"科技\", \"BA8D4A3Rwangning\"),\n    )\n\n    override fun onDetach() {\n        super.onDetach()\n        mTabLayoutMediator?.detach()\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", ResourceContains.packageName, view_title_bar_bg)\n        homeTabLayout?.run {\n            setSelectedTabIndicatorColor(ResourceUtils.getPluginColor(skinRes, \"colorOnPrimary\", ResourceContains.packageName))\n            for (i in 0 until tabCount) {\n                getTabAt(i)?.customView?.takeIf {\n                    it is TextView\n                }?.let {\n                    ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", ResourceContains.packageName, it as TextView)\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_home/pkg/ResourceContains.kt",
    "content": "package com.wgllss.dynamic.sample.feature_home.pkg\n\nobject ResourceContains {\n    const val packageName: String = \"com.wgllss.sample.skin\"\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_home/viewmodels/HomeTabViewModel.kt",
    "content": "package com.wgllss.dynamic.sample.feature_home.viewmodels\n\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.core.units.AppGlobals\nimport com.wgllss.core.units.WLog\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.sample.data.NewsBean\nimport com.wgllss.sample.datasource.repository.NewsRepository\nimport kotlinx.coroutines.flow.onEach\n\nclass HomeTabViewModel : BaseViewModel() {\n\n    private val newsRepositoryL by lazy { NewsRepository.getInstance(AppGlobals.sApplication) }\n\n\n    val liveDataLoadSuccessCount by lazy { MutableLiveData(0) }\n\n    var isClick = false\n\n    var isLoadOffine = false\n\n    val result by lazy { mutableMapOf<String, MutableLiveData<MutableList<NewsBean>>>() }\n    private val pageNoMap by lazy { mutableMapOf<String, Int>() }\n    private val isLoadingMore by lazy { mutableMapOf<String, Boolean>() }\n    val enableLoadeMore by lazy { mutableMapOf<String, MutableLiveData<Boolean>>() }\n\n    fun enableLoadMore(key: String) = !isLoadingMore[key]!! && enableLoadeMore[key]!!.value!!\n\n    fun isLoadingMore(key: String) = pageNoMap[key] != 0\n\n    override fun start() {\n    }\n\n    fun initKey(key: String) {\n        result[key] = MutableLiveData<MutableList<NewsBean>>()\n        isLoadingMore[key] = false\n        enableLoadeMore[key] = MutableLiveData(true)\n        pageNoMap[key] = 0\n    }\n\n    fun reset(key: String) {\n        pageNoMap[key] = 0\n    }\n\n\n    fun getData(key: String) {\n        isLoadingMore[key] = true\n        isClick = false\n        flowAsyncWorkOnViewModelScopeLaunch {\n            val start = pageNoMap[key]!!\n            val end = start + 10\n            newsRepositoryL.getNetTabInfo(key, start, end).onEach {\n                if (!isLoadOffine)\n                    if (pageNoMap[key] == 0) {\n                        WLog.e(this@HomeTabViewModel, key)\n                        result[key]?.postValue(it)\n                    } else {\n                        val list = result[key]?.value\n                        list?.removeAt(list.size - 1)\n                        list?.addAll(it)\n                        result[key]?.postValue(list)\n                    }\n                else isLoadOffine = false\n                var c = liveDataLoadSuccessCount.value?.plus(1)\n                liveDataLoadSuccessCount.postValue(c)\n                enableLoadeMore[key]?.postValue(it.size == 10)\n                if (it.size == 10)\n                    pageNoMap[key] = pageNoMap[key]!!.plus(10)\n                isLoadingMore[key] = false\n            }\n        }\n    }\n\n    fun addToCollection(it: NewsBean) {\n        flowAsyncWorkOnViewModelScopeLaunch {\n            newsRepositoryL.addToCollection(it).onEach {\n                errorMsgLiveData.postValue(it)\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_home/viewmodels/HomeViewModel.kt",
    "content": "package com.wgllss.dynamic.sample.feature_home.viewmodels\n\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.core.viewmodel.BaseViewModel\n\nclass HomeViewModel : BaseViewModel() {\n    val mCurrentFragmentTAG by lazy { StringBuilder() }\n\n    val lazyTabViewPager2 by lazy { MutableLiveData<Boolean>() }\n    var isFirst = true\n\n    fun lazyTabView() {\n        lazyTabViewPager2.value = true\n    }\n\n    override fun start() {\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_home/viewmodels/SettingViewModel.kt",
    "content": "package com.wgllss.dynamic.sample.feature_home.viewmodels\n//\n//import androidx.lifecycle.MutableLiveData\n//import com.wgllss.core.viewmodel.BaseViewModel\n//import com.wgllss.sample.feature_system.savestatus.MMKVHelp\n//\n//class SettingViewModel : BaseViewModel() {\n//\n//    val isOpenLockerUI by lazy { MutableLiveData<Boolean>() }\n//\n//    val isNotificationOpen by lazy { MutableLiveData<Boolean>() }\n//\n//    override fun start() {\n//        isOpenLockerUI.postValue(MMKVHelp.isOpenLockerUI())\n//    }\n//\n//    fun setLockerSwitch(isOpen: Boolean) {\n//        isOpenLockerUI.postValue(isOpen)\n//        MMKVHelp.setLockerSwitch(isOpen)\n//    }\n//\n//    fun setNotificationOpen(isOpen: Boolean) {\n//        isNotificationOpen.postValue(isOpen)\n//    }\n//\n//}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_startup/startup/GenerateHomeLayout.kt",
    "content": "package com.wgllss.dynamic.sample.feature_startup.startup\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.graphics.Color\nimport android.view.Gravity\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.FrameLayout\nimport androidx.fragment.app.FragmentContainerView\nimport androidx.recyclerview.widget.GridLayoutManager\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport androidx.recyclerview.widget.RecyclerView\nimport androidx.swiperefreshlayout.widget.SwipeRefreshLayout\nimport androidx.viewpager2.widget.ViewPager2\nimport com.google.android.material.bottomnavigation.BottomNavigationView\nimport com.google.android.material.navigation.NavigationBarView\nimport com.google.android.material.tabs.TabLayout\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.ex.initColors\nimport com.wgllss.core.widget.DividerGridItemDecoration\nimport com.wgllss.core.widget.clearLongClickToast\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.units.ScreenManager\nimport com.wgllss.dynamic.plugin.manager.PluginResource\nimport com.wgllss.dynamic.sample.feature_home.pkg.ResourceContains\n\nobject GenerateHomeLayout {\n\n    fun getCreateViewByKey(context: Context, key: String) = when (key) {\n        LaunchInflateKey.home_activity -> syncCreateHomeActivityLayout(context, PluginResource.getSkinResources())\n        LaunchInflateKey.home_navigation -> syncCreateHomeNavigationLayout(context, PluginResource.getSkinResources())\n        LaunchInflateKey.home_tab_fragment_layout -> syncCreateHomeTabFragmentLayout(context, PluginResource.getSkinResources())\n        LaunchInflateKey.home_fragment -> syncCreateHomeFragmentLayout(context, PluginResource.getSkinResources())\n        else -> null\n    }\n\n    private fun getPluginID(res: Resources, IDResName: String) = ResourceUtils.getPluginID(res, IDResName, ResourceContains.packageName)\n\n    private fun getStringValue(res: Resources, IDResName: String) = ResourceUtils.getPluginString(res, IDResName, ResourceContains.packageName)\n\n    private fun getDimenValue(res: Resources, IDResName: String) = ResourceUtils.getPluginDimen(res, IDResName, ResourceContains.packageName).toInt()\n\n    private fun getColorStatusList(res: Resources, resName: String) = ResourceUtils.getColorStatusList(res, resName, ResourceContains.packageName)\n\n    fun syncCreateHomeActivityLayout(context: Context, res: Resources): View {\n        val activityLayout = FragmentContainerView(context).apply {\n            val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n            setPadding(0, 0, 0, getDimenValue(res, \"navigation_height\"))\n            layoutParams = lp\n//            setBackgroundColor(ThemeUtils.getAndroidColorBackground(context))\n            setBackgroundColor(ResourceUtils.getPluginColor(res, \"colorBackground\", ResourceContains.packageName))\n            id = getPluginID(res, \"nav_host_fragment_activity_main\")// R.id.nav_host_fragment_activity_main\n        }\n        ScreenManager.measureAndLayout(activityLayout)\n        return activityLayout\n    }\n\n    fun syncCreateHomeNavigationLayout(context: Context, res: Resources): View {\n        val bottomNavigationView = BottomNavigationView(context).apply {\n            val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, getDimenValue(res, \"navigation_height\"))\n            lp.gravity = Gravity.BOTTOM or Gravity.LEFT\n            layoutParams = lp\n            id = getPluginID(res, \"buttom_navigation\")// R.id.buttom_navigation\n            setBackgroundColor(Color.TRANSPARENT)\n            labelVisibilityMode = NavigationBarView.LABEL_VISIBILITY_LABELED\n            menu.apply {\n                clear()\n                add(0, getPluginID(res, \"fmt_a\"), 0, getStringValue(res, \"title_home\"))\n                add(0, getPluginID(res, \"fmt_b\"), 0, getStringValue(res, \"title_collection\"))\n                add(0, getPluginID(res, \"fmt_c\"), 0, getStringValue(res, \"title_sample\"))\n                add(0, getPluginID(res, \"fmt_d\"), 0, getStringValue(res, \"title_setting\"))\n            }\n            val colorList = getColorStatusList(res, \"bottom_navigation_color_selector\")\n            itemTextColor = colorList\n            itemIconTintList = colorList\n            clearLongClickToast(\n                getPluginID(res, \"fmt_a\"),\n                getPluginID(res, \"fmt_b\"),\n                getPluginID(res, \"fmt_c\"),\n                getPluginID(res, \"fmt_d\")\n            )\n        }\n        ScreenManager.measureAndLayout(bottomNavigationView)\n        return bottomNavigationView\n    }\n\n    fun syncCreateHomeTabFragmentLayout(context: Context, res: Resources): View {\n        val tabFragmentLayout = FrameLayout(context).apply {\n            val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n            layoutParams = lp\n        }\n        val viewTitleBg = View(context).apply {\n            val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, getDimenValue(res, \"title_bar_height\"))\n            lp.gravity = Gravity.TOP or Gravity.LEFT\n            layoutParams = lp\n            id = getPluginID(res, \"view_title_bg\")\n//            setBackgroundColor(ThemeUtils.getColorPrimary(context))\n            setBackgroundColor(ResourceUtils.getPluginColor(res, \"colorPrimary\", ResourceContains.packageName))\n        }\n        tabFragmentLayout.addView(viewTitleBg)\n        val tabLayout = TabLayout(context).apply {\n            id = getPluginID(res, \"homeTabLayout\")//  R.id.homeTabLayout\n            val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, getDimenValue(res, \"title_bar_text_height\"))\n            lp.gravity = Gravity.TOP or Gravity.LEFT\n            lp.topMargin = getDimenValue(res, \"status_bar_height\") //res.getDimension(R.dimen.status_bar_height).toInt()\n            layoutParams = lp\n            setBackgroundColor(Color.TRANSPARENT)\n            tabMode = TabLayout.MODE_SCROLLABLE\n            tabGravity = TabLayout.GRAVITY_CENTER\n            setSelectedTabIndicatorColor(ResourceUtils.getPluginColor(res, \"colorOnPrimary\", ResourceContains.packageName))\n            setSelectedTabIndicatorHeight(8)\n        }\n        tabFragmentLayout.addView(tabLayout)\n        val viewPager2Layout = ViewPager2(context).apply {\n            id = getPluginID(res, \"homeViewPager2\")//R.id.homeViewPager2\n            val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n            lp.gravity = Gravity.TOP or Gravity.LEFT\n            lp.topMargin = getDimenValue(res, \"title_bar_height\") //res.getDimension(R.dimen.title_bar_height).toInt()\n            layoutParams = lp\n        }\n        tabFragmentLayout.addView(viewPager2Layout)\n        ScreenManager.measureAndLayout(tabFragmentLayout)\n        return tabFragmentLayout\n    }\n\n    fun syncCreateHomeFragmentLayout(context: Context, res: Resources): View {\n        val swipeRefreshLayout = SwipeRefreshLayout(context).apply {\n            layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n            initColors()\n        }\n        val homeFragmentView = RecyclerView(context).apply {\n            id = getPluginID(res, \"home_recycle_view\")//R.id.home_recycle_view\n            val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n            lp.gravity = Gravity.TOP or Gravity.LEFT\n            layoutParams = lp\n            layoutManager = LinearLayoutManager(context)\n            setHasFixedSize(true)\n            val itemDecoration = View(context)\n            val size = context.getIntToDip(1.0f).toInt()\n            itemDecoration.layoutParams = ViewGroup.LayoutParams(size, size)\n            itemDecoration.setBackgroundColor(Color.parseColor(\"#60000000\"))\n            addItemDecoration(DividerGridItemDecoration(context, GridLayoutManager.VERTICAL, itemDecoration))\n//            val json = MMKVHelp.getHomeTab1Data()\n//            json?.let {\n//                val homeMusicAdapter = HomeNewsAdapter(res, ResourceContains.packageName)\n//                adapter = homeMusicAdapter\n//                homeMusicAdapter.notifyData(Gson().fromJson(json, object : TypeToken<MutableList<NewsBean>>() {}.type), res)\n//            }\n        }\n        swipeRefreshLayout.addView(homeFragmentView)\n        return swipeRefreshLayout\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_startup/startup/HomeContains.kt",
    "content": "package com.wgllss.dynamic.sample.feature_startup.startup\n\nimport android.content.Context\nimport android.content.MutableContextWrapper\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.fragment.app.Fragment\nimport com.wgllss.core.units.WLog\nimport com.wgllss.dynamic.sample.feature_home.fragment.HomeTabFragment\nimport kotlinx.coroutines.Deferred\nimport java.util.concurrent.ConcurrentHashMap\n\nobject HomeContains {\n    private val map = ConcurrentHashMap<String, Deferred<View>>()\n    private val mapFragment = ConcurrentHashMap<String, Deferred<Fragment>>()\n\n    suspend fun getViewByKey(context: Context, key: String): View? {\n        val view = map.remove(key)?.await()\n        return if (view == null) {\n            WLog.e(this, \"getViewByKey key = $key is null\")\n            GenerateHomeLayout.getCreateViewByKey(context, key)\n        } else {\n            replaceContextForView(view, context)\n            view?.takeIf {\n                it.parent != null\n            }?.let {\n                (it.parent as ViewGroup).removeView(it)\n            }\n            view\n        }\n    }\n\n    fun putViewByKey(key: String, deferred: Deferred<View>) {\n        map[key] = deferred\n    }\n\n    fun putFragmentByKey(key: String, deferred: Deferred<Fragment>) {\n        mapFragment[key] = deferred\n    }\n\n    suspend fun getFragmentByKey(key: String) = mapFragment.remove(key)?.await() ?: HomeTabFragment()\n\n\n    private fun replaceContextForView(inflatedView: View?, context: Context?) {\n        if (inflatedView == null || context == null) {\n            return\n        }\n        val cxt = inflatedView.context\n        if (cxt is MutableContextWrapper) {\n            cxt.baseContext = context\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_startup/startup/InitHomeFirstInitializeHelp.kt",
    "content": "package com.wgllss.dynamic.sample.feature_startup.startup\n\nimport android.content.Context\nimport android.content.MutableContextWrapper\nimport com.tencent.mmkv.MMKV\nimport com.wgllss.core.ex.toTheme\nimport com.wgllss.core.units.ScreenManager\nimport com.wgllss.dynamic.host.lib.provider.WXProviderManager\nimport com.wgllss.dynamic.plugin.manager.PluginResource\nimport com.wgllss.dynamic.provider.TestContentProvider\nimport com.wgllss.dynamic.sample.feature_home.fragment.HomeTabFragment\nimport com.wgllss.sample.feature_system.savestatus.MMKVHelp\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.launch\n\nobject InitHomeFirstInitializeHelp {\n\n    fun initCreate(context: Context) {\n        CoroutineScope(Dispatchers.IO).launch {\n            ScreenManager.initScreenSize(context)\n            MMKV.initialize(context)\n\n            val themeID = context.resources.getIdentifier(\"Theme.WXDynamicPlugin\", \"style\", context.packageName)\n            val context: Context = MutableContextWrapper(context.toTheme(themeID))\n            val res = PluginResource.getSkinResources()\n            HomeContains.putViewByKey(LaunchInflateKey.home_activity, async {\n                GenerateHomeLayout.syncCreateHomeActivityLayout(context, res)\n            })\n            HomeContains.putViewByKey(LaunchInflateKey.home_navigation, async {\n                GenerateHomeLayout.syncCreateHomeNavigationLayout(context, res)\n            })\n            HomeContains.putFragmentByKey(LaunchInflateKey.home_tab_fragment, async {\n                HomeTabFragment()\n            })\n            HomeContains.putViewByKey(LaunchInflateKey.home_tab_fragment_layout, async {\n                GenerateHomeLayout.syncCreateHomeTabFragmentLayout(context, res)\n            })\n            HomeContains.putViewByKey(LaunchInflateKey.home_fragment, async {\n                GenerateHomeLayout.syncCreateHomeFragmentLayout(context, res)\n            })\n            async(Dispatchers.IO) {\n                val am = PluginResource.getWebRes().assets\n                try {\n                    val resJs = am.list(\"js\")\n                    val strOfflineResources = StringBuilder()\n                    if (resJs != null && resJs.isNotEmpty()) {\n                        for (i in resJs.indices) {\n                            strOfflineResources.append(resJs[i])\n                        }\n                    }\n                    val resCss = am.list(\"css\")\n                    if (resCss != null && resCss.isNotEmpty()) {\n                        for (i in resCss.indices) {\n                            strOfflineResources.append(resCss[i])\n                        }\n                    }\n                    MMKVHelp.saveJsPath(strOfflineResources.toString())\n                } catch (e: Exception) {\n                    e.printStackTrace()\n                }\n            }\n\n            /** 添加 ContentProvider **/\n            WXProviderManager.instance.addContentProvider(TestContentProvider(context))\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_startup/startup/LaunchInflateKey.kt",
    "content": "package com.wgllss.dynamic.sample.feature_startup.startup\n\nobject LaunchInflateKey {\n\n    const val home_navigation = \"home_navigation\"\n    const val home_activity = \"home_activity\"\n    const val home_fragment = \"home_fragment\"\n    const val home_tab_fragment = \"home_tab_fragment\"\n    const val home_tab_fragment_layout = \"home_tab_fragment_layout\"\n    const val home_tab_fragment_list = \"home_tab_fragment_list\"\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/ui/HomeActivity.kt",
    "content": "package com.wgllss.dynamic.ui\n\nimport android.annotation.SuppressLint\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport androidx.core.view.get\nimport androidx.fragment.app.Fragment\nimport androidx.lifecycle.lifecycleScope\nimport com.google.android.material.bottomnavigation.BottomNavigationView\nimport com.wgllss.core.activity.BaseViewModelActivity\nimport com.wgllss.core.ex.parseErrorString\nimport com.wgllss.core.ex.switchFragment\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.dynamic.plugin.manager.PluginResource\nimport com.wgllss.dynamic.sample.feature_startup.startup.HomeContains\nimport com.wgllss.dynamic.sample.feature_startup.startup.LaunchInflateKey\nimport com.wgllss.dynamic.sample.feature_home.pkg.ResourceContains\nimport com.wgllss.dynamic.sample.feature_home.viewmodels.HomeViewModel\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.home.fragment.CollectFragment\nimport com.wgllss.sample.features_ui.page.home.fragment.SampleFragment\nimport com.wgllss.sample.features_ui.page.home.fragment.SettingFragment\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.onCompletion\nimport kotlinx.coroutines.flow.onStart\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.runBlocking\n\nopen class HomeActivity : BaseViewModelActivity<HomeViewModel>(ResourceContains.packageName) {\n\n    private val collectFragmentL by lazy { CollectFragment() }\n\n    private val sampleFragmentL by lazy { SampleFragment() }\n\n    private val settingFragmentL by lazy { SettingFragment() }\n\n    private lateinit var homeTabFragment: Fragment\n\n    private lateinit var navigationView: BottomNavigationView\n\n    private lateinit var contentLayout: View\n\n    override fun getPluginResources(): Resources? = null\n\n    override fun getSkinResources() = PluginResource.getSkinResources()\n\n    override fun onSaveInstanceState(outState: Bundle) {\n        super.onSaveInstanceState(Bundle())\n    }\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        runBlocking {\n            contentLayout = HomeContains.getViewByKey(this@HomeActivity, LaunchInflateKey.home_activity)!!\n            addContentView(contentLayout, contentLayout.layoutParams)\n            if (savedInstanceState == null) {\n                initFragment()\n                setCurrentFragment(homeTabFragment)\n            } else {\n                initNavigation()\n                onNavBarItemSelected(navigationView.menu.getItem(getItemId()).itemId)\n            }\n        }\n    }\n\n\n    @SuppressLint(\"MissingSuperCall\")\n    override fun onBackPressed() {\n        exitApp()\n    }\n\n    override fun lazyInitValue() {\n        window.setBackgroundDrawable(null)//去掉主题背景颜色\n        if (viewModel.isFirst) {\n            viewModel.lazyTabView()\n            viewModel.isFirst = false\n        }\n        initNavigation()\n        addContentView(navigationView, navigationView.layoutParams)\n        initNavigation(navigationView)\n        lifecycleScope.launch(Dispatchers.IO) {\n            PluginManager.instance.deleteOldFile()\n        }\n    }\n\n    private fun initFragment() {\n        runBlocking {\n            if (!::homeTabFragment.isInitialized) {\n                homeTabFragment = HomeContains.getFragmentByKey(LaunchInflateKey.home_tab_fragment)\n            }\n        }\n    }\n\n    private fun initNavigation() {\n        runBlocking {\n            if (!::navigationView.isInitialized) {\n                navigationView = HomeContains.getViewByKey(this@HomeActivity, LaunchInflateKey.home_navigation)!! as BottomNavigationView\n            }\n        }\n    }\n\n    private fun initNavigation(bottomNavigationView: BottomNavigationView) {\n        bottomNavigationView.apply {\n            with(menu) {\n                get(0).icon = getPluginDrawable(getSkinResources(), \"ic_home_black_24dp\", SkinContains.packageName)\n                get(1).icon = getPluginDrawable(getSkinResources(), \"ic_baseline_grade_24\", SkinContains.packageName)\n                get(2).icon = getPluginDrawable(getSkinResources(), \"ic_dashboard_black_24dp\", SkinContains.packageName)\n                get(3).setIcon(getPluginDrawable(getSkinResources(), \"ic_notifications_black_24dp\", SkinContains.packageName))\n            }\n            if (viewModel.isFirst) viewModel.isFirst = false else selectedItemId = menu.getItem(getItemId()).itemId\n            setOnItemSelectedListener {\n                return@setOnItemSelectedListener onNavBarItemSelected(it.itemId)\n            }\n        }\n    }\n\n\n    private fun getItemId() = when (viewModel.mCurrentFragmentTAG.toString()) {\n        \"HomeFragment\" -> 0\n        \"CollectFragment\" -> 1\n        \"SampleFragment\" -> 2\n        \"SettingFragment\" -> 3\n        else -> 0\n    }\n\n    private fun onNavBarItemSelected(itemId: Int): Boolean {\n        when (itemId) {\n            getPluginID(getSkinResources(), \"fmt_a\", SkinContains.packageName) -> {\n                initFragment()\n                setCurrentFragment(homeTabFragment)\n            }\n\n            getPluginID(getSkinResources(), \"fmt_b\", SkinContains.packageName) -> {\n                /** 方案一写法 other 首次下载写法 start  **/\n                if (!isLoadSuccess()) return true\n                setCurrentFragment(collectFragmentL)\n                /** 方案一写法 other 首次下载写法 end  **/\n\n\n                /** 方案二写法 other 点击时候下载安装 start  **/\n//                downLoadPlugin {\n//                    setCurrentFragment(collectFragmentL)\n//                }\n                /** 方案二写法 other 点击时候下载安装 end  **/\n            }\n\n            getPluginID(getSkinResources(), \"fmt_c\", SkinContains.packageName) -> {\n                /** 方案一写法 other 首次下载写法 start  **/\n                if (!isLoadSuccess()) return true\n                setCurrentFragment(sampleFragmentL)\n                /** 方案一写法 other 首次下载写法 end  **/\n\n\n                /** 方案二写法 other 点击时候下载安装 start  **/\n//                downLoadPlugin {\n//                    setCurrentFragment(sampleFragmentL)\n//                }\n                /** 方案二写法 other 点击时候下载安装 end  **/\n            }\n\n            getPluginID(getSkinResources(), \"fmt_d\", SkinContains.packageName) -> {\n                /** 方案一写法 other 首次下载写法 start  **/\n                if (!isLoadSuccess()) return true\n                setCurrentFragment(settingFragmentL)\n                /** 方案一写法 other 首次下载写法 end  **/\n\n                /** 方案二写法 other 点击时候下载安装 start  **/\n//                downLoadPlugin {\n//                    setCurrentFragment(settingFragmentL)\n//                }\n                /** 方案二写法 other 点击时候下载安装 end  **/\n            }\n        }\n        return true\n    }\n\n    private fun setCurrentFragment(fragment: Fragment) {\n        switchFragment(fragment, viewModel.mCurrentFragmentTAG, getPluginID(getSkinResources(), \"nav_host_fragment_activity_main\", SkinContains.packageName))\n        viewModel.mCurrentFragmentTAG.delete(0, viewModel.mCurrentFragmentTAG.toString().length)\n        viewModel.mCurrentFragmentTAG.append(fragment.javaClass.simpleName)\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        if (!viewModel.isFirst) {\n            ResourceUtils.setBackgroundColor(skinRes, \"colorBackground\", ResourceContains.packageName, contentLayout)\n            val colorList = ResourceUtils.getColorStatusList(skinRes, \"bottom_navigation_color_selector\", ResourceContains.packageName)\n            navigationView.itemTextColor = colorList\n            navigationView.itemIconTintList = colorList\n        }\n    }\n\n    //方案一写法 other 首次下载写法\n    private fun isLoadSuccess(): Boolean {\n        showloading(\"请稍后...\")\n        //协程中主协程阻塞式，等到other 下载完，加载完后再执行后面的逻辑\n        val status = PluginManager.instance.isLoadSuccessByKey(\"classes_other_dex\", \"classes_other_res\")\n        hideLoading()\n        if (!status) {\n            onToast(\"缺少插件\")\n        }\n        return status\n    }\n\n    // 方案二写法 other 点击时候下载安装\n    private fun downLoadPlugin(loadCompleteBlock: () -> Unit) {\n        lifecycleScope.launch {\n            PluginManager.instance.dynamicLoadPlugin(this@HomeActivity, Pair(\"classes_other_dex\", 1000), Pair(\"classes_other_res\", 1000)).onStart { showloading(\"加载中...\") }.onCompletion { hideLoading() }.catch {\n                onToast(it.parseErrorString())\n            }.collect {\n                loadCompleteBlock.invoke()\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-loading/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-loading/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.loading\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\ndependencies {\n    compileOnly project(path: ':wgllss-common-re-library')\n    compileOnly project(path: ':wgllss-dynamic-host-skin-resource-lib')\n\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Lib-Impl')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Loader-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Download-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Constant-Lib')\n\n    compileOnly project(path: ':Wgllss-Dynamic-Host-Version-Lib')\n    compileOnly project(path: ':Wgllss-Dynamic-Host-Lib')\n\n    compileOnly libs.startup.runtime\n    compileOnly libs.androidx.core.ktx\n    compileOnly libs.androidx.lifecycle.runtime.ktx\n    compileOnly libs.androidx.activity.ktx\n    compileOnly libs.androidx.fragment.ktx\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_home_first.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_loading_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_loading_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-loading/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-loading/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.loading\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-loading/src/main/java/com/wgllss/dynamic/initializer/InitHomeFirstInitialize.kt",
    "content": "package com.wgllss.dynamic.initializer\n\nimport android.content.Context\nimport android.content.Intent\nimport androidx.startup.Initializer\nimport com.wgllss.core.ex.parseErrorString\nimport com.wgllss.core.widget.CommonToast\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.HOME\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.MLK\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.dldir\nimport com.wgllss.dynamic.host.lib.download.DownLoadResult\nimport com.wgllss.dynamic.host.lib.download.DynamicDownloadPlugin\nimport com.wgllss.dynamic.host.lib.impl.WXDynamicLoader\nimport com.wgllss.dynamic.system.broadcast.BroadCastAction\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.*\nimport kotlinx.coroutines.launch\nimport kotlin.text.StringBuilder\n\nclass InitHomeFirstInitialize : Initializer<Unit> {\n\n    override fun create(context: Context) {\n        CoroutineScope(Dispatchers.Main).launch {\n            WXDynamicLoader.instance.loader?.run {\n                val face = WXDynamicLoader.instance.loader.getDownloadFace()\n                val downloadHelp = DynamicDownloadPlugin(face)\n                val ddir = dldir\n                var flow: Flow<DownLoadResult>? = null\n                var flowNew: Flow<Any?>? = null\n                getMapDluImpl().forEach { (key, value) ->\n                    val createFlow = flow {\n                        emit(downloadHelp.initDynamicByKey(context, key, ddir, StringBuilder().append(value.first).append(\"_\").append(value.second).toString()))\n                    }\n                    if (flow == null) {\n                        flow = createFlow\n                    } else {\n                        if (flowNew == null) {\n                            val f = flow!!.zip(createFlow) { it, it2 ->\n                                it?.run {\n                                    initDynamicRunTime(context, contentKey, fileAbsolutePath)\n                                }\n                                it2?.run {\n                                    initDynamicRunTime(context, contentKey, fileAbsolutePath)\n                                }\n                            }\n                            flowNew = f\n                        } else {\n                            val f = flowNew!!.zip(createFlow) { _, it2 ->\n                                it2?.run {\n                                    if (HOME == key) {\n                                        initDynamicRunTime(context, MLK, fileAbsolutePath)\n                                        initHomeCreate(context, javaClass.classLoader)\n                                        context.sendBroadcast(Intent(BroadCastAction.DOWNLOAD_HOME_COMPLETE_ACTION))\n                                    } else {\n                                        initDynamicRunTime(context, contentKey, fileAbsolutePath)\n                                    }\n                                }\n                            }\n                            flowNew = f\n                        }\n                    }\n                }\n                flowNew?.flowOn(Dispatchers.IO)\n                    ?.catch {\n                        it.printStackTrace()\n                        CommonToast.show(it.parseErrorString())\n                    }?.collect()\n            }\n        }\n    }\n\n    override fun dependencies(): List<Class<out Initializer<*>>> {\n        return emptyList()\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-loading/src/main/java/com/wgllss/dynamic/system/broadcast/BroadCastAction.kt",
    "content": "package com.wgllss.dynamic.system.broadcast\n\nobject BroadCastAction {\n    const val DOWNLOAD_HOME_COMPLETE_ACTION = \"DOWNLOAD_HOME_COMPLETE_ACTION\"\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-loading/src/main/java/com/wgllss/dynamic/system/broadcast/DownLoadCompleteBroadCast.kt",
    "content": "package com.wgllss.dynamic.system.broadcast\n\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport com.wgllss.dynamic.ui.HomeActivity\nimport com.wgllss.dynamic.system.broadcast.BroadCastAction.DOWNLOAD_HOME_COMPLETE_ACTION\n\nclass DownLoadCompleteBroadCast : BroadcastReceiver() {\n\n    override fun onReceive(context: Context, intent: Intent) {\n        intent?.action?.run {\n            when (this) {\n                DOWNLOAD_HOME_COMPLETE_ACTION -> {\n                    try {\n                        val clazz = Class.forName(HomeActivity::class.java.name)\n                        context.startActivity(Intent(context, clazz))\n                    } catch (e: Exception) {\n                        e.printStackTrace()\n                    }\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-loading/src/main/java/com/wgllss/dynamic/ui/HomeActivity.kt",
    "content": "package com.wgllss.dynamic.ui\n\nimport android.app.Activity\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.content.IntentFilter\nimport android.graphics.Color\nimport android.os.Build\nimport android.os.Bundle\nimport android.view.View\nimport android.view.WindowManager\nimport android.widget.FrameLayout\nimport android.widget.ImageView\nimport com.wgllss.core.ex.finishActivity\nimport com.wgllss.dynamic.system.broadcast.BroadCastAction\n\nclass HomeActivity : Activity() {\n\n    private val downLoadCompleteBroadCast by lazy { DownLoadCompleteBroadCast() }\n\n    private fun setStatusBarTranslucent(activity: Activity) {\n        activity?.window?.apply {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {\n                //适配刘海屏\n                val layoutParams = attributes\n                layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;\n                attributes = layoutParams\n            }\n            decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)\n            statusBarColor = Color.TRANSPARENT\n        }\n    }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setStatusBarTranslucent(this)\n        val imageView = ImageView(this).apply {\n            val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n            layoutParams = lp\n            scaleType = ImageView.ScaleType.CENTER_CROP\n        }\n        imageView.setImageResource(com.wgllss.host.skin.R.drawable.loading)\n        setContentView(imageView)\n        val intentFilter = IntentFilter(BroadCastAction.DOWNLOAD_HOME_COMPLETE_ACTION)\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) registerReceiver(downLoadCompleteBroadCast, intentFilter, Context.RECEIVER_EXPORTED)\n        else registerReceiver(downLoadCompleteBroadCast, intentFilter)\n    }\n\n    override fun onDestroy() {\n        super.onDestroy()\n        downLoadCompleteBroadCast?.run {\n            unregisterReceiver(this)\n        }\n    }\n\n    inner class DownLoadCompleteBroadCast : BroadcastReceiver() {\n\n        override fun onReceive(context: Context, intent: Intent) {\n            intent?.action?.run {\n                when (this) {\n                    BroadCastAction.DOWNLOAD_HOME_COMPLETE_ACTION -> {\n                        try {\n                            val clazz = Class.forName(HomeActivity::class.java.name)\n                            context.startActivity(Intent(context, clazz))\n                            this@HomeActivity.finishActivity()\n                        } catch (e: Exception) {\n                            e.printStackTrace()\n                        }\n                    }\n\n                    else -> {}\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.dynamic.sample.other'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.dynamic.sample.other\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        release {\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"classes_other_res.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\n\ndef createCopyTask(assembleReleaseTask, buildType) {\n    def inputFile = file(\"${getProject().getBuildDir()}/outputs/apk/release/classes_other_res.apk\")\n    def outputFile = file(\"${rootProject.getBuildDir()}/classes_other_res\")\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    return tasks.create(\"assembleCopy\", Copy) {\n        group = 'other'\n        description = \"复制json到 指定输出目录\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(assembleReleaseTask.name)\n}\n\ntasks.whenTaskAdded { task ->\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(task, \"release\")\n    }\n//    if (task.name == \"cleanJson\") {\n//        createVersionJson(task, \"Release\")\n//    }\n}\n\n\ndependencies {\n\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other/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\n\n-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* #这个过滤器是谷歌推荐的算法，一般不做更改\n-optimizationpasses 7 # 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n-dontpreverify # 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n-dontusemixedcaseclassnames #混合时不使用大小写混合，混合后的类名为小写\n-verbose #包含有类名->混淆后类名的映射关系 日志记录\n-keepattributes SourceFile,LineNumberTable # 保留代码行号\n\n# Preserve some attributes that may be required for reflection.\n-keepattributes AnnotationDefault,*Annotation*,# 避免混淆注解\n                EnclosingMethod, # 避免混淆匿名类\n                InnerClasses, # 避免混淆内部类\n                RuntimeVisibleAnnotations,\n                RuntimeVisibleParameterAnnotations,\n                RuntimeVisibleTypeAnnotations,\n                Signature # 避免混淆泛型\n\n# Fragment\n-keep class * extends androidx.fragment.app.Fragment{}\n-keep class * extends androidx.fragment.app.FragmentActivity{}\n\n# keepclassmembers :防止类成员被移除或被混淆\n-keepclassmembers class * {\n    @android.webkit.JavascriptInterface <methods>;\n}\n\n# 保留本地native方法不被混淆\n-keepclasseswithmembernames class * { native <methods>;}\n\n# The support libraries contains references to newer platform versions.\n# Don't warn about those in case this app is linking against an older\n# platform version. We know about them, and they are safe.\n-dontnote android.support.**\n-dontnote androidx.**\n-dontwarn android.support.**\n-dontwarn androidx.**\n# 保留R下面的资源\n-keep class **.R$* {*;}\n## Android architecture components: Lifecycle\n# LifecycleObserver's empty constructor is considered to be unused by proguard\n-keepclassmembers class * implements androidx.lifecycle.LifecycleObserver {\n    <init>(...);\n}\n# ViewModel's empty constructor is considered to be unused by proguard\n-keepclassmembers class * extends androidx.lifecycle.ViewModel {\n    <init>(...);\n}\n# keep methods annotated with @OnLifecycleEvent even if they seem to be unused\n# (Mostly for LiveData.LifecycleBoundObserver.onStateChange(), but who knows)\n-keepclassmembers class * {\n    @androidx.lifecycle.OnLifecycleEvent *;\n}\n\n# ViewBinding\n-keep public class * extends androidx.viewbinding.ViewBinding {*;}\n\n# These classes are duplicated between android.jar and org.apache.http.legacy.jar.\n-dontnote org.apache.http.**\n-dontnote android.net.http.**\n\n# 保持自定义控件类不被混淆  # keepclasseswithmembers:防止拥有改成员的类和类成员被移除或被混淆\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet);\n}\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet, int);\n}\n# 保留枚举类不被混淆\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n\n# 保留Parcelable序列化类不被混淆\n#-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}\n## 保留Serializable序列化的类不被混淆\n#-keepnames class * implements java.io.Serializable\n#-keepclassmembers class * implements java.io.Serializable {\n#    static final long serialVersionUID;\n#    private static final java.io.ObjectStreamField[] serialPersistentFields;\n#    !static !transient <fields>;\n#    !private <fields>;\n#    !private <methods>;\n#    private void writeObject(java.io.ObjectOutputStream);\n#    private void readObject(java.io.ObjectInputStream);\n#    java.lang.Object writeReplace();\n#    java.lang.Object readResolve();\n#}\n## 对于带有回调函数的onXXEvent、**On*Listener的，不能被混淆\n#-keepclassmembers class * {\n#    void *(**On*Event);\n#    void *(**On*Listener);\n#}\n\n# Databinding\n-dontwarn android.databinding.**\n-keep class android.databinding.** { *; }\n-keep class androidx.lifecycle.** { *; }\n-keep class kotlinx.coroutines.** { *; }\n# kotlin 相关\n-dontwarn kotlin.**\n-keep class kotlin.** { *; }\n-keep interface kotlin.** { *; }\n################ 第三方库中的混淆规则start ##############################\n# Glide混淆\n#-keep public class * implements com.bumptech.glide.module.GlideModule\n#-keep class * extends com.bumptech.glide.module.AppGlideModule {\n# <init>(...);\n#}\n#-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {\n#  **[] $VALUES;\n#  public *;\n#}\n#-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {\n#  *** rewind();\n#}\n\n#友盟混淆\n-keep class com.umeng.** {*;}\n-keep class org.repackage.** {*;}\n-keepclassmembers class * {\n   public <init> (org.json.JSONObject);\n}\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n#Jsoup 混淆\n#-dontwarn org.jsoup.**\n#-keep class org.jsoup.**{*;}\n#-keeppackagenames org.jsoup.nodes\n\n# Gson\n#-keep class com.google.gson.** {*;}\n#-keep class com.google.gson.stream.** {*;}\n#-keep class com.google.** {\n#    <fields>;\n#    <methods>;\n#}\n\n\n#\n############### 对于一些基本指令的添加start ##################\n## 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n#-optimizationpasses 5\n## 混合时不使用大小写混合，混合后的类名为小写\n#-dontusemixedcaseclassnames\n## 指定不去忽略非公共库的类\n#-dontskipnonpubliclibraryclasses\n## 这句话能够使我们的项目混淆后产生映射文件\n## 包含有类名->混淆后类名的映射关系\n#-verbose\n## 指定不去忽略非公共库的类成员\n#-dontskipnonpubliclibraryclassmembers\n## 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n#-dontpreverify\n## 忽略警告\n#-ignorewarnings\n## 保留Annotation不混淆\n#-keepattributes *Annotation*,InnerClasses\n## 避免混淆泛型\n#-keepattributes Signature\n## 抛出异常时保留代码行号\n#-keepattributes SourceFile,LineNumberTable\n## 指定混淆是采用的算法，后面的参数是一个过滤器\n## 这个过滤器是谷歌推荐的算法，一般不做更改\n#-optimizations !code/simplification/cast,!field/*,!class/merging/*\n################ 对于一些基本指令的添加end #########################\n#\n#\n################ Android开发中一些需要保留的公共部分start ##################\n## 保留我们使用的四大组件，自定义的Application等等这些类不被混淆,因为这些子类都有可能被外部调用\n#-keep public class * extends android.app.Activity\n#-keep public class * extends android.app.Application\n#-keep public class * extends android.app.Service\n#-keep public class * extends android.content.BroadcastReceiver\n#-keep public class * extends android.content.ContentProvider\n#-keep public class * extends android.app.backup.BackupAgentHelper\n#-keep public class * extends android.preference.Preference\n#-keep public class * extends android.view.View\n## 保留support下的所有类及其内部类\n#-keep class android.support.** {*;}\n## 保留继承的\n#-keep public class * extends android.support.v4.**\n#-keep public class * extends android.support.v7.**\n#-keep public class * extends android.support.annotation.**\n## Androidx的混淆\n#-keep class com.google.android.material.** {*;}\n#-keep class androidx.** {*;}\n#-keep public class * extends androidx.**\n#-keep interface androidx.** {*;}\n#-dontwarn com.google.android.material.**\n#-dontnote com.google.android.material.**\n#-dontwarn androidx.**\n## 保留R下面的资源\n#-keep class **.R$* {*;}\n## 保留本地native方法不被混淆\n#-keepclasseswithmembernames class * { native <methods>;}\n## 保留在Activity中的方法参数是view的方法，\n## 这样以来我们在layout中写的onClick就不会被影响\n#-keepclassmembers class * extends android.app.Activity{ public void *(android.view.View);}\n## 保留枚举类不被混淆\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n## 保留我们自定义控件（继承自View）不被混淆\n#-keep public class * extends android.view.View{\n#    *** get*();\n#    void set*(***);\n#    public <init>(android.content.Context);\n#    public <init>(android.content.Context, android.util.AttributeSet);\n#    public <init>(android.content.Context, android.util.AttributeSet, int);\n#}\n## 保留Parcelable序列化类不被混淆\n#-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}\n## 保留Serializable序列化的类不被混淆\n#-keepnames class * implements java.io.Serializable\n#-keepclassmembers class * implements java.io.Serializable {\n#    static final long serialVersionUID;\n#    private static final java.io.ObjectStreamField[] serialPersistentFields;\n#    !static !transient <fields>;\n#    !private <fields>;\n#    !private <methods>;\n#    private void writeObject(java.io.ObjectOutputStream);\n#    private void readObject(java.io.ObjectInputStream);\n#    java.lang.Object writeReplace();\n#    java.lang.Object readResolve();\n#}\n## 对于带有回调函数的onXXEvent、**On*Listener的，不能被混淆\n#-keepclassmembers class * {\n#    void *(**On*Event);\n#    void *(**On*Listener);\n#}\n#\n## 所有实体类不能混淆 model文件夹下的所有实体类不能混淆\n#\n##-keep class com.btpj.lib_base.data.bean.** {*;}\n##-keep class com.btpj.wanandroid.data.** {*;}\n#\n################ Android开发中一些需要保留的公共部分end ##################\n#\n#\n################ 第三方库中的混淆规则start ##############################\n## Glide混淆\n#-keep public class * implements com.bumptech.glide.module.GlideModule\n#-keep class * extends com.bumptech.glide.module.AppGlideModule {\n# <init>(...);\n#}\n#-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {\n#  **[] $VALUES;\n#  public *;\n#}\n#-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {\n#  *** rewind();\n#}\n#\n##友盟混淆\n#-keep class com.umeng.** {*;}\n#-keep class org.repackage.** {*;}\n#-keepclassmembers class * {\n#   public <init> (org.json.JSONObject);\n#}\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n##Jsoup 混淆\n#-dontwarn org.jsoup.**\n#-keep class org.jsoup.**{*;}\n#-keeppackagenames org.jsoup.nodes\n\n# Gson\n#-keep class com.google.gson.** {*;}\n#-keep class com.google.gson.stream.** {*;}\n#-keep class com.google.** {\n#    <fields>;\n#    <methods>;\n#}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.sample.other\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other/src/main/res/layout/adapter_collection_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"120dp\"\n    android:layout_height=\"140dp\"\n    android:layout_marginTop=\"5dp\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    android:foreground=\"?android:attr/selectableItemBackground\"\n    android:orientation=\"vertical\">\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/collection_icon\"\n        android:layout_width=\"120dp\"\n        android:layout_height=\"120dp\"\n        android:layout_gravity=\"top|left\"\n        android:background=\"@null\"\n        android:scaleType=\"centerCrop\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/txt_title\"\n        android:layout_width=\"120dp\"\n        android:layout_height=\"20dp\"\n        android:gravity=\"center_vertical\"\n        android:textSize=\"15dp\" />\n</LinearLayout>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other/src/main/res/layout/adapter_sample_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"86dp\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    android:foreground=\"?android:attr/selectableItemBackground\"\n    android:paddingLeft=\"20dp\"\n    android:paddingRight=\"20dp\">\n\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/material_btn_name\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"3dp\"\n        android:clickable=\"false\"\n        android:focusable=\"false\"\n        android:focusableInTouchMode=\"false\"\n        android:gravity=\"center\"\n        android:insetTop=\"0dp\"\n        android:insetBottom=\"0dp\"\n        android:textColor=\"?android:textColorHighlight\"\n        android:textSize=\"16dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/material_item_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"center_vertical|left\"\n        android:layout_marginLeft=\"90dp\"\n        android:gravity=\"center_vertical\"\n        android:maxLines=\"1\"\n        android:textColor=\"?android:textColorPrimary\"\n        android:textSize=\"20dp\" />\n</FrameLayout>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other/src/main/res/layout/fragment_collection.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--<layout>-->\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <View\n        android:id=\"@+id/view_title_bar_bg\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"top|left\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"收藏列表\"\n        android:textSize=\"20dp\" />\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/rv_c_list\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"82dp\"\n        android:orientation=\"vertical\" />\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other/src/main/res/layout/fragment_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--<layout>-->\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <View\n        android:id=\"@+id/view_title_bar_bg\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"top|left\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"示例\"\n        android:textSize=\"20dp\" />\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/rv_s_list\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"82dp\"\n        android:orientation=\"vertical\" />\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other/src/main/res/layout/fragment_setting.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <View\n        android:id=\"@+id/view_title_bar_bg\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"left|top\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"设置\"\n        android:textSize=\"20dp\" />\n\n\n    <View\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"82dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/material_locker_setting\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"96dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"锁屏歌词\"\n        android:textSize=\"20dp\" />\n\n    <com.google.android.material.switchmaterial.SwitchMaterial\n        android:id=\"@+id/material_switch_settion\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"right|top\"\n        android:layout_marginTop=\"96dp\"\n        android:layout_marginRight=\"20dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/txt_loker_des\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"144dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"25dp\"\n        android:text=\"注：开启锁屏歌词需要打开 后台弹窗 权限并开启： 在其他应用上层显示 权限\"\n        android:textColor=\"#999999\"\n        android:textSize=\"16dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/material_notification\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"194dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"通知权限\"\n        android:textSize=\"18dp\" />\n\n    <com.google.android.material.switchmaterial.SwitchMaterial\n        android:id=\"@+id/material_notification_switch\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"right|top\"\n        android:layout_marginTop=\"194dp\"\n        android:layout_marginRight=\"20dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/txt_notification_des\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"239dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"25dp\"\n        android:paddingRight=\"25dp\"\n        android:text=\"注：开启通知权限后可保证长时间在后台播放音乐\"\n        android:textColor=\"#999999\"\n        android:textSize=\"16dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/setting_skin\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"290dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"切换皮肤\"\n        android:textSize=\"20dp\" />\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/skin_list\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"left|top\"\n        android:gravity=\"center_horizontal\"\n        android:layout_marginLeft=\"20dp\"\n        android:layout_marginTop=\"340dp\"\n        android:layout_marginRight=\"20dp\" />\n\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.sample.other\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildFeatures {\n        buildConfig true\n    }\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\n\ndependencies {\n\n    compileOnly project(path: ':Wgllss-Dynamic-Plugin-Common-Library')\n    compileOnly project(path: ':wgllss-common-re-library')\n\n    compileOnly project(path: ':wgllss-sample-business-library')\n    compileOnly project(path: ':wgllss-business-re-library')\n    compileOnly project(path: ':Wgllss-Dynamic-Plugin-Manager')\n\n\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Runtime-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Download-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-ClassLoader-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Loader-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Provider-Lib')\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Lib-Impl')\n\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Version-Lib')\n    compileOnly project(path: ':Wgllss-Dynamic-Host-Lib')\n\n\n    compileOnly libs.androidx.core.ktx\n    compileOnly libs.appcompat\n    compileOnly libs.androidx.recyclerview\n    compileOnly libs.google.material\n    compileOnly libs.constraintlayout\n\n    compileOnly libs.androidx.lifecycle.runtime.ktx\n    compileOnly libs.androidx.activity.ktx\n    compileOnly libs.androidx.fragment.ktx\n\n    compileOnly libs.converter.gson\n    compileOnly libs.mmkv\n\n    compileOnly libs.glide\n    //权限申请框架\n    compileOnly libs.xxpermissions\n    compileOnly libs.androidx.legacy.legacy.support.v44\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_other.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_other_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_other_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/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\n\n-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* #这个过滤器是谷歌推荐的算法，一般不做更改\n-optimizationpasses 7 # 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n-dontpreverify # 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n-dontusemixedcaseclassnames #混合时不使用大小写混合，混合后的类名为小写\n-verbose #包含有类名->混淆后类名的映射关系 日志记录\n-keepattributes SourceFile,LineNumberTable # 保留代码行号\n\n# Preserve some attributes that may be required for reflection.\n-keepattributes AnnotationDefault,*Annotation*,# 避免混淆注解\n                EnclosingMethod, # 避免混淆匿名类\n                InnerClasses, # 避免混淆内部类\n                RuntimeVisibleAnnotations,\n                RuntimeVisibleParameterAnnotations,\n                RuntimeVisibleTypeAnnotations,\n                Signature # 避免混淆泛型\n\n# Fragment\n-keep class * extends androidx.fragment.app.Fragment{}\n-keep class * extends androidx.fragment.app.FragmentActivity{}\n\n# keepclassmembers :防止类成员被移除或被混淆\n-keepclassmembers class * {\n    @android.webkit.JavascriptInterface <methods>;\n}\n\n# 保留本地native方法不被混淆\n-keepclasseswithmembernames class * { native <methods>;}\n\n# The support libraries contains references to newer platform versions.\n# Don't warn about those in case this app is linking against an older\n# platform version. We know about them, and they are safe.\n-dontnote android.support.**\n-dontnote androidx.**\n-dontwarn android.support.**\n-dontwarn androidx.**\n# 保留R下面的资源\n-keep class **.R$* {*;}\n## Android architecture components: Lifecycle\n# LifecycleObserver's empty constructor is considered to be unused by proguard\n-keepclassmembers class * implements androidx.lifecycle.LifecycleObserver {\n    <init>(...);\n}\n# ViewModel's empty constructor is considered to be unused by proguard\n-keepclassmembers class * extends androidx.lifecycle.ViewModel {\n    <init>(...);\n}\n# keep methods annotated with @OnLifecycleEvent even if they seem to be unused\n# (Mostly for LiveData.LifecycleBoundObserver.onStateChange(), but who knows)\n-keepclassmembers class * {\n    @androidx.lifecycle.OnLifecycleEvent *;\n}\n\n# ViewBinding\n-keep public class * extends androidx.viewbinding.ViewBinding {*;}\n\n# These classes are duplicated between android.jar and org.apache.http.legacy.jar.\n-dontnote org.apache.http.**\n-dontnote android.net.http.**\n\n# 保持自定义控件类不被混淆  # keepclasseswithmembers:防止拥有改成员的类和类成员被移除或被混淆\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet);\n}\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet, int);\n}\n# 保留枚举类不被混淆\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n\n# 保留Parcelable序列化类不被混淆\n#-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}\n## 保留Serializable序列化的类不被混淆\n#-keepnames class * implements java.io.Serializable\n#-keepclassmembers class * implements java.io.Serializable {\n#    static final long serialVersionUID;\n#    private static final java.io.ObjectStreamField[] serialPersistentFields;\n#    !static !transient <fields>;\n#    !private <fields>;\n#    !private <methods>;\n#    private void writeObject(java.io.ObjectOutputStream);\n#    private void readObject(java.io.ObjectInputStream);\n#    java.lang.Object writeReplace();\n#    java.lang.Object readResolve();\n#}\n## 对于带有回调函数的onXXEvent、**On*Listener的，不能被混淆\n#-keepclassmembers class * {\n#    void *(**On*Event);\n#    void *(**On*Listener);\n#}\n\n# Databinding\n-dontwarn android.databinding.**\n-keep class android.databinding.** { *; }\n-keep class androidx.lifecycle.** { *; }\n-keep class kotlinx.coroutines.** { *; }\n-keep class com.wgllss.sample.features_ui.page.** { *; }\n# kotlin 相关\n-dontwarn kotlin.**\n-keep class kotlin.** { *; }\n-keep interface kotlin.** { *; }\n################ 第三方库中的混淆规则start ##############################\n# Glide混淆\n#-keep public class * implements com.bumptech.glide.module.GlideModule\n#-keep class * extends com.bumptech.glide.module.AppGlideModule {\n# <init>(...);\n#}\n#-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {\n#  **[] $VALUES;\n#  public *;\n#}\n#-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {\n#  *** rewind();\n#}\n\n#友盟混淆\n-keep class com.umeng.** {*;}\n-keep class org.repackage.** {*;}\n-keepclassmembers class * {\n   public <init> (org.json.JSONObject);\n}\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n#Jsoup 混淆\n#-dontwarn org.jsoup.**\n#-keep class org.jsoup.**{*;}\n#-keeppackagenames org.jsoup.nodes\n\n# Gson\n#-keep class com.google.gson.** {*;}\n#-keep class com.google.gson.stream.** {*;}\n#-keep class com.google.** {\n#    <fields>;\n#    <methods>;\n#}\n\n\n#\n############### 对于一些基本指令的添加start ##################\n## 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n#-optimizationpasses 5\n## 混合时不使用大小写混合，混合后的类名为小写\n#-dontusemixedcaseclassnames\n## 指定不去忽略非公共库的类\n#-dontskipnonpubliclibraryclasses\n## 这句话能够使我们的项目混淆后产生映射文件\n## 包含有类名->混淆后类名的映射关系\n#-verbose\n## 指定不去忽略非公共库的类成员\n#-dontskipnonpubliclibraryclassmembers\n## 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n#-dontpreverify\n## 忽略警告\n#-ignorewarnings\n## 保留Annotation不混淆\n#-keepattributes *Annotation*,InnerClasses\n## 避免混淆泛型\n#-keepattributes Signature\n## 抛出异常时保留代码行号\n#-keepattributes SourceFile,LineNumberTable\n## 指定混淆是采用的算法，后面的参数是一个过滤器\n## 这个过滤器是谷歌推荐的算法，一般不做更改\n#-optimizations !code/simplification/cast,!field/*,!class/merging/*\n################ 对于一些基本指令的添加end #########################\n#\n#\n################ Android开发中一些需要保留的公共部分start ##################\n## 保留我们使用的四大组件，自定义的Application等等这些类不被混淆,因为这些子类都有可能被外部调用\n#-keep public class * extends android.app.Activity\n#-keep public class * extends android.app.Application\n#-keep public class * extends android.app.Service\n#-keep public class * extends android.content.BroadcastReceiver\n#-keep public class * extends android.content.ContentProvider\n#-keep public class * extends android.app.backup.BackupAgentHelper\n#-keep public class * extends android.preference.Preference\n#-keep public class * extends android.view.View\n## 保留support下的所有类及其内部类\n#-keep class android.support.** {*;}\n## 保留继承的\n#-keep public class * extends android.support.v4.**\n#-keep public class * extends android.support.v7.**\n#-keep public class * extends android.support.annotation.**\n## Androidx的混淆\n#-keep class com.google.android.material.** {*;}\n#-keep class androidx.** {*;}\n#-keep public class * extends androidx.**\n#-keep interface androidx.** {*;}\n#-dontwarn com.google.android.material.**\n#-dontnote com.google.android.material.**\n#-dontwarn androidx.**\n## 保留R下面的资源\n#-keep class **.R$* {*;}\n## 保留本地native方法不被混淆\n#-keepclasseswithmembernames class * { native <methods>;}\n## 保留在Activity中的方法参数是view的方法，\n## 这样以来我们在layout中写的onClick就不会被影响\n#-keepclassmembers class * extends android.app.Activity{ public void *(android.view.View);}\n## 保留枚举类不被混淆\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n## 保留我们自定义控件（继承自View）不被混淆\n#-keep public class * extends android.view.View{\n#    *** get*();\n#    void set*(***);\n#    public <init>(android.content.Context);\n#    public <init>(android.content.Context, android.util.AttributeSet);\n#    public <init>(android.content.Context, android.util.AttributeSet, int);\n#}\n## 保留Parcelable序列化类不被混淆\n#-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}\n## 保留Serializable序列化的类不被混淆\n#-keepnames class * implements java.io.Serializable\n#-keepclassmembers class * implements java.io.Serializable {\n#    static final long serialVersionUID;\n#    private static final java.io.ObjectStreamField[] serialPersistentFields;\n#    !static !transient <fields>;\n#    !private <fields>;\n#    !private <methods>;\n#    private void writeObject(java.io.ObjectOutputStream);\n#    private void readObject(java.io.ObjectInputStream);\n#    java.lang.Object writeReplace();\n#    java.lang.Object readResolve();\n#}\n## 对于带有回调函数的onXXEvent、**On*Listener的，不能被混淆\n#-keepclassmembers class * {\n#    void *(**On*Event);\n#    void *(**On*Listener);\n#}\n#\n## 所有实体类不能混淆 model文件夹下的所有实体类不能混淆\n#\n##-keep class com.btpj.lib_base.data.bean.** {*;}\n##-keep class com.btpj.wanandroid.data.** {*;}\n#\n################ Android开发中一些需要保留的公共部分end ##################\n#\n#\n################ 第三方库中的混淆规则start ##############################\n## Glide混淆\n#-keep public class * implements com.bumptech.glide.module.GlideModule\n#-keep class * extends com.bumptech.glide.module.AppGlideModule {\n# <init>(...);\n#}\n#-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {\n#  **[] $VALUES;\n#  public *;\n#}\n#-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {\n#  *** rewind();\n#}\n#\n##友盟混淆\n#-keep class com.umeng.** {*;}\n#-keep class org.repackage.** {*;}\n#-keepclassmembers class * {\n#   public <init> (org.json.JSONObject);\n#}\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n##Jsoup 混淆\n#-dontwarn org.jsoup.**\n#-keep class org.jsoup.**{*;}\n#-keeppackagenames org.jsoup.nodes\n\n# Gson\n#-keep class com.google.gson.** {*;}\n#-keep class com.google.gson.stream.** {*;}\n#-keep class com.google.** {\n#    <fields>;\n#    <methods>;\n#}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.sample.other\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/datasource/SettingRepository.kt",
    "content": "package com.wgllss.sample.datasource\n\nimport com.google.gson.Gson\nimport com.google.gson.reflect.TypeToken\nimport com.wgllss.core.http.HttpUrlConnectionRequest\nimport com.wgllss.dynamic.host.lib.impl.WXDynamicLoader\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.flow\nimport java.lang.StringBuilder\n\nclass SettingRepository private constructor() {\n\n    companion object {\n        val instance by lazy { SettingRepository() }\n    }\n\n    suspend fun getSkinConfig(): Flow<MutableList<SkinPluginBean>> = flow {\n        val face = WXDynamicLoader.instance.loader.getDownloadFace()\n        val json = HttpUrlConnectionRequest.getServerJson(StringBuilder().append(face.getHostL()).append(\"/skins/skins.txt\").toString())\n        val list = Gson().fromJson<MutableList<SkinPluginBean>>(json, object : TypeToken<MutableList<SkinPluginBean>>() {}.type)\n        emit(list)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/datasource/SkinPluginBean.kt",
    "content": "package com.wgllss.sample.datasource\n\ndata class SkinPluginBean(\n    val skinColor: String,\n    val skinUrl: String,\n    val dlfn: String\n)\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/base/BasePluginActivity.kt",
    "content": "package com.wgllss.sample.features_ui.page.base\n\nimport android.content.res.Resources\nimport com.wgllss.core.activity.BaseViewModePluginActivity\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.dynamic.sample.other.BuildConfig\nimport com.wgllss.dynamic.plugin.manager.PluginResource\n\nopen class BasePluginActivity<VM : BaseViewModel>(layoutName: String) : BaseViewModePluginActivity<VM>(layoutName, BuildConfig.LIBRARY_PACKAGE_NAME) {\n\n    override fun getPluginResources(): Resources? = PluginResource.getPluginResources(\"classes_other_res\")\n\n    override fun getSkinResources() = PluginResource.getSkinResources()\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/base/BasePluginFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.base\n\nimport android.content.res.Resources\nimport com.wgllss.core.fragment.BaseViewModelPluginFragment\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.dynamic.sample.other.BuildConfig\nimport com.wgllss.dynamic.plugin.manager.PluginResource\n\nopen class BasePluginFragment<VM : BaseViewModel>(layoutName: String) : BaseViewModelPluginFragment<VM>(layoutName, BuildConfig.LIBRARY_PACKAGE_NAME) {\n\n    override fun getPluginResources(): Resources = PluginResource.getPluginResources(\"classes_other_res\")\n\n    override fun getSkinResources() = PluginResource.getSkinResources()\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/base/SkinContains.kt",
    "content": "package com.wgllss.sample.features_ui.page.base\n\nobject SkinContains {\n    const val packageName: String = \"com.wgllss.sample.skin\"\n    const val packageNameHost: String = \"com.wgllss.dynamic.host.sample\"\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/adapter/CollectionAdapter.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.adapter\n\nimport android.content.Context\nimport android.content.res.Resources\nimport androidx.recyclerview.widget.RecyclerView\nimport com.google.android.material.imageview.ShapeableImageView\nimport com.google.android.material.shape.RoundedCornerTreatment\nimport com.google.android.material.shape.ShapeAppearanceModel\nimport com.google.android.material.textview.MaterialTextView\nimport com.wgllss.core.adapter.BasePluginRecyclerAdapter\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.ex.loadUrl\nimport com.wgllss.sample.feature_system.room.table.CollectTableBean\nimport com.wgllss.sample.features_ui.page.base.SkinContains\n\nclass CollectionAdapter(re: Resources, packageName: String) : BasePluginRecyclerAdapter<CollectTableBean>(re, packageName) {\n    override fun getLayoutResIdName(viewType: Int) = \"adapter_collection_item\"\n\n    override fun onBindItem(context: Context, item: CollectTableBean, holder: RecyclerView.ViewHolder, position: Int) {\n        item.run {\n            findViewByID<ShapeableImageView>(holder.itemView, re, \"collection_icon\").apply {\n                loadUrl(imgUrl)\n                shapeAppearanceModel = ShapeAppearanceModel.builder().apply {\n                    setAllCorners(RoundedCornerTreatment())\n                    setAllCornerSizes(context.getIntToDip(5f)) //设置圆， 40为正方形边长 80 一半，等于半径 ，需要注意单位\n                }.build()\n            }\n            findViewByID<MaterialTextView>(holder.itemView, re, \"txt_title\").apply {\n                text = title\n                setTextColor(getPluginColor(skinRes, \"textColorPrimary\", SkinContains.packageName))\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/adapter/SampleAdapter.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.adapter\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.graphics.Color\nimport android.util.TypedValue\nimport androidx.recyclerview.widget.RecyclerView\nimport com.google.android.material.button.MaterialButton\nimport com.google.android.material.textview.MaterialTextView\nimport com.wgllss.core.adapter.BasePluginRecyclerAdapter\nimport com.wgllss.sample.data.SampleItemBean\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport kotlin.random.Random\n\nclass SampleAdapter(re: Resources, packageName: String) : BasePluginRecyclerAdapter<SampleItemBean>(re, packageName) {\n\n    private var cornerRadiusInt: Int = 0\n    private val textColor by lazy { Color.parseColor(\"#999999\") }\n    private lateinit var array: Array<Int>\n\n    override fun getLayoutResIdName(viewType: Int) = \"adapter_sample_item\"\n\n    override fun onBindItem(context: Context, item: SampleItemBean, holder: RecyclerView.ViewHolder, position: Int) {\n        if (!this::array.isInitialized) {\n            array = arrayOf(\n                getPluginColor(skinRes, \"color_random_0\", SkinContains.packageName), getPluginColor(skinRes, \"color_random_1\", SkinContains.packageName), getPluginColor(skinRes, \"color_random_2\", SkinContains.packageName),\n                getPluginColor(skinRes, \"color_random_3\", SkinContains.packageName), getPluginColor(skinRes, \"color_random_4\", SkinContains.packageName), getPluginColor(skinRes, \"color_random_5\", SkinContains.packageName),\n                getPluginColor(skinRes, \"color_random_6\", SkinContains.packageName), getPluginColor(skinRes, \"color_random_7\", SkinContains.packageName), getPluginColor(skinRes, \"color_random_8\", SkinContains.packageName),\n                getPluginColor(skinRes, \"color_random_9\", SkinContains.packageName), getPluginColor(skinRes, \"color_random_10\", SkinContains.packageName), getPluginColor(skinRes, \"color_random_11\", SkinContains.packageName)\n            )\n        }\n        item.run {\n            findViewByID<MaterialButton>(holder.itemView, re, \"material_btn_name\").apply {\n                text = item.itemName\n                setTextColor(getPluginColor(skinRes, \"colorOnPrimary\", SkinContains.packageName))\n                background.setTint(array[Random.nextInt(array.size)])\n                if (cornerRadiusInt == 0)\n                    cornerRadiusInt = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 999f, context.resources.displayMetrics).toInt() else 0\n                cornerRadius = cornerRadiusInt\n            }\n            findViewByID<MaterialTextView>(holder.itemView, re, \"material_item_name\").apply {\n                text = item.itemName\n                setTextColor(getPluginColor(skinRes, \"textColorPrimary\", SkinContains.packageName))\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/adapter/SkinAdapter.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.adapter\n\nimport android.content.Context\nimport android.util.TypedValue\nimport android.view.ViewGroup\nimport androidx.recyclerview.widget.RecyclerView\nimport com.google.android.material.button.MaterialButton\nimport com.wgllss.core.adapter.BaseRecyclerAdapter\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.sample.datasource.SkinPluginBean\n\nclass SkinAdapter : BaseRecyclerAdapter<SkinPluginBean>() {\n    private var cornerRadiusInt: Int = 0\n    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseBindingViewHolder {\n        if (context == null) {\n            context = parent.context\n            cornerRadiusInt = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 999f, parent.context.resources.displayMetrics).toInt()\n        }\n        val textView = MaterialButton(parent.context).apply {\n            val size = context.getIntToDip(60f).toInt()\n            val lp = RecyclerView.LayoutParams(size, size)\n            layoutParams = lp\n            insetBottom = 0\n            insetTop = 0\n            cornerRadius = cornerRadiusInt\n        }\n        return BaseBindingViewHolder(textView)\n    }\n\n    override fun onBindItem(context: Context, item: SkinPluginBean, holder: RecyclerView.ViewHolder, position: Int) {\n        ResourceUtils.setMaterialButtonBackgroundHint(\"#600000\", item.skinColor, holder.itemView as MaterialButton)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/fragment/CollectFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.fragment\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.database.ContentObserver\nimport android.graphics.Color\nimport android.net.Uri\nimport android.os.Bundle\nimport android.os.Handler\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.TextView\nimport android.widget.Toast\nimport androidx.recyclerview.widget.GridLayoutManager\nimport androidx.recyclerview.widget.RecyclerView\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.widget.DividerGridItemDecoration\nimport com.wgllss.core.widget.OnRecyclerViewItemClickListener\nimport com.wgllss.dynamic.host.lib.provider.ProviderAuthority\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.home.adapter.CollectionAdapter\nimport com.wgllss.sample.features_ui.page.home.viewmodels.CollectViewModel\n\nclass CollectFragment : BasePluginFragment<CollectViewModel>(\"fragment_collection\") {\n\n    private lateinit var rv_c_list: RecyclerView;\n    private lateinit var view_title_bar_bg: View\n    private lateinit var title: TextView\n    private lateinit var collectionAdapter: CollectionAdapter\n\n\n    private val content_authority: String = StringBuilder(\"com.wgllss.dynamic.host.sample\").append(ProviderAuthority.authority).toString()\n\n    private val base_content_uri = Uri.parse(\"content://$content_authority\")\n\n    private val uri = base_content_uri.buildUpon().appendPath(\"com.wgllss.dynamic.provider.TestContentProvider\").build()\n\n    override fun findView(context: Context, containerView: View) {\n        rv_c_list = findViewByID(\"rv_c_list\")\n        view_title_bar_bg = findViewByID(\"view_title_bar_bg\")\n        title = findViewByID(\"title\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        rv_c_list.run {\n            layoutManager = GridLayoutManager(context, 3)\n            collectionAdapter = CollectionAdapter(resourcesPlugin, packageName)\n            adapter = collectionAdapter\n            addOnItemTouchListener(object : OnRecyclerViewItemClickListener(this) {\n                override fun onItemLongClickListener(itemRootView: View, position: Int) {\n                    viewModel.deleteFromId(collectionAdapter.getItem(position).id)\n                }\n            })\n            setHasFixedSize(true)\n            val itemDecoration = View(context)\n            val size = context.getIntToDip(1.0f).toInt()\n            itemDecoration.layoutParams = ViewGroup.LayoutParams(size, size)\n            itemDecoration.setBackgroundColor(Color.parseColor(\"#60000000\"))\n            addItemDecoration(DividerGridItemDecoration(context, GridLayoutManager.VERTICAL, itemDecoration))\n        }\n    }\n\n    override fun initObserve() {\n        super.initObserve()\n        viewModel.run {\n            start()\n            isInitSuccess.observe(viewLifecycleOwner) {\n                liveData.observe(viewLifecycleOwner) {\n                    collectionAdapter.notifyData(it, getSkinResources())\n                }\n            }\n        }\n\n\n        activity?.run {\n            contentResolver.registerContentObserver(uri, true, object : ContentObserver(Handler()) {\n                override fun onChange(selfChange: Boolean, uri: Uri?) {\n                    super.onChange(selfChange, uri)\n                    android.util.Log.e(\"CollectFragment\", \"uri : $uri  selfChange:$selfChange\")\n                    viewModel.start()\n                }\n            })\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, view_title_bar_bg)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, title)\n    }\n\n    override fun callChangeSkin(skinRes: Resources) {\n        super.callChangeSkin(skinRes)\n        collectionAdapter?.notifySkinRes(skinRes)\n    }\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/fragment/SampleFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.fragment\n\nimport android.app.Activity\nimport android.content.Context\nimport android.content.Intent\nimport android.content.res.Resources\nimport android.graphics.Color\nimport android.os.Bundle\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.TextView\nimport androidx.lifecycle.lifecycleScope\nimport androidx.recyclerview.widget.GridLayoutManager\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport androidx.recyclerview.widget.RecyclerView\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.ex.parseErrorString\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.widget.DividerGridItemDecoration\nimport com.wgllss.core.widget.OnRecyclerViewItemClickListener\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.sample.data.SampleItemBean\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.home.adapter.SampleAdapter\nimport com.wgllss.sample.features_ui.page.home.viewmodels.SampleViewModel\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.onCompletion\nimport kotlinx.coroutines.flow.onStart\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.runBlocking\n\nclass SampleFragment : BasePluginFragment<SampleViewModel>(\"fragment_sample\") {\n\n    private lateinit var rv_s_list: RecyclerView;\n    private lateinit var view_title_bar_bg: View\n    private lateinit var title: TextView\n    private lateinit var sampleAdapter: SampleAdapter\n\n    override fun findView(context: Context, containerView: View) {\n        rv_s_list = findViewByID(\"rv_s_list\")\n        view_title_bar_bg = findViewByID(\"view_title_bar_bg\")\n        title = findViewByID(\"title\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        rv_s_list.run {\n            layoutManager = LinearLayoutManager(context)\n            sampleAdapter = SampleAdapter(resourcesPlugin, packageName)\n            adapter = sampleAdapter\n            addOnItemTouchListener(object : OnRecyclerViewItemClickListener(this) {\n\n                override fun onItemClickListener(itemRootView: View, position: Int) {\n                    onItemClick(sampleAdapter.getItem(position))\n                }\n            })\n            setHasFixedSize(true)\n            val itemDecoration = View(context)\n            val size = context.getIntToDip(1.0f).toInt()\n            itemDecoration.layoutParams = ViewGroup.LayoutParams(size, size)\n            itemDecoration.setBackgroundColor(Color.parseColor(\"#60000000\"))\n            addItemDecoration(DividerGridItemDecoration(context, GridLayoutManager.VERTICAL, itemDecoration))\n        }\n    }\n\n    override fun initObserve() {\n        super.initObserve()\n        viewModel.run {\n            start()\n            sampleList.observe(viewLifecycleOwner) {\n                sampleAdapter.notifyData(it, getSkinResources())\n            }\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, view_title_bar_bg)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, title)\n    }\n\n    override fun callChangeSkin(skinRes: Resources) {\n        super.callChangeSkin(skinRes)\n        sampleAdapter.notifySkinRes(skinRes)\n    }\n\n    private fun onItemClick(item: SampleItemBean) {\n        activity?.run {\n            /** 方案一写法 other2 首次下载写法 start  **/\n            showloading(\"请稍后...\")\n            val status = PluginManager.instance.isLoadSuccessByKey(\"classes_other2_dex\", \"classes_other2_res\")\n            hideLoading()\n            if (!status) {\n                onToast(\"缺少插件\")\n                return\n            }\n            itemID(this, item)\n            /** 方案一写法 other2 首次下载写法 end  **/\n\n            /** 方案二写法 other2 点击时候下载安装 start  **/\n//            lifecycleScope.launch {\n//                PluginManager.instance.dynamicLoadPlugin(this@run, Pair(\"classes_other2_dex\", 1000), Pair(\"classes_other2_res\", 1000)).onStart { showloading(\"加载中...\") }.onCompletion { hideLoading() }.catch {\n//                    onToast(it.parseErrorString())\n//                }.collect {\n//                    itemID(this@run, item)\n//                }\n//            }\n            /** 方案二写法 other2 首次下载写法 end  **/\n        }\n    }\n\n    private fun itemID(activity: Activity, item: SampleItemBean) {\n        when (item.id) {\n            5 -> { //webview\n                PluginManager.instance.startPluginSingleTaskActivity(activity, \"classes_other2_res\", \"com.wgllss.sample.features_ui.page.other2.activity.WebViewActivity\", \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n                    putExtra(\"web_url_key\", \"I4D2IC730011819H\")\n                    putExtra(\"title_key\", \"红魔五周年发布\")\n                    putExtra(\"docid_key\", \"I4D2IC730011819H.html\")\n                })\n            }\n\n            9 -> {\n                //音频\n                PluginManager.instance.startPluginSingleTaskActivity(\n                    activity, \"classes_other2_res\", \"com.wgllss.sample.features_ui.page.other2.activity.AudioActivity\", \"com.wgllss.dynamic.sample.other2\"\n                )\n            }\n\n            8 -> {\n                //视频\n                PluginManager.instance.startPluginSingleTaskActivity(\n                    activity, \"classes_other2_res\", \"com.wgllss.sample.features_ui.page.other2.activity.VideoActivity\", \"com.wgllss.dynamic.sample.other2\"\n                )\n            }\n\n            10 -> {\n                //compose\n                PluginManager.instance.startPluginStandardComposeActivity(activity, \"classes_other2_res\", \"com.wgllss.sample.features_ui.page.other2.activity.ComposeDemoActivity\", \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n                    putExtra(\"action_type\", item.id)\n                    putExtra(\"itemName\", item.itemName)\n                })\n            }\n\n            else -> {\n                PluginManager.instance.startStandardActivity(activity, \"classes_other2_res\", \"com.wgllss.sample.features_ui.page.other2.activity.Other2Activity\", \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n                    putExtra(\"action_type\", item.id)\n                    putExtra(\"itemName\", item.itemName)\n                })\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/fragment/SettingFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.fragment\n\nimport android.app.Activity\nimport android.content.Context\nimport android.content.res.Resources\nimport android.graphics.Color\nimport android.os.Bundle\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.TextView\nimport androidx.recyclerview.widget.GridLayoutManager\nimport androidx.recyclerview.widget.RecyclerView\nimport com.google.android.material.switchmaterial.SwitchMaterial\nimport com.hjq.permissions.OnPermissionCallback\nimport com.hjq.permissions.Permission\nimport com.hjq.permissions.XXPermissions\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.permissions.PermissionInterceptor\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.widget.DividerGridItemDecoration\nimport com.wgllss.core.widget.OnRecyclerViewItemClickListener\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.home.adapter.SkinAdapter\nimport com.wgllss.sample.features_ui.page.home.viewmodels.SettingViewModel\n\nclass SettingFragment : BasePluginFragment<SettingViewModel>(\"fragment_setting\") {\n\n    private lateinit var material_switch_settion: SwitchMaterial\n    private lateinit var material_notification_switch: SwitchMaterial\n    private lateinit var view_title_bar_bg: View\n    private lateinit var title: TextView\n    private lateinit var material_locker_setting: TextView\n    private lateinit var material_notification: TextView\n    private lateinit var setting_skin: TextView\n    private lateinit var skin_list: RecyclerView\n    private val skinAdapter by lazy { SkinAdapter() }\n\n//    private val settingViewModelL = viewModels<SettingViewModel>()\n\n    override fun activitySameViewModel() = false\n\n    override fun findView(context: Context, containerView: View) {\n        view_title_bar_bg = findViewByID(\"view_title_bar_bg\")\n        title = findViewByID(\"title\")\n        material_locker_setting = findViewByID(\"material_locker_setting\")\n        setting_skin = findViewByID(\"setting_skin\")\n        material_notification = findViewByID(\"material_notification\")\n        material_switch_settion = findViewByID(\"material_switch_settion\")\n        material_notification_switch = findViewByID(\"material_notification_switch\")\n        skin_list = findViewByID(\"skin_list\")\n        material_switch_settion.switchMinWidth = context.getIntToDip(60f).toInt()\n        material_notification_switch.switchMinWidth = context.getIntToDip(60f).toInt()\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        viewModel.start()\n        skin_list.apply {\n            setHasFixedSize(true)\n            layoutManager = GridLayoutManager(requireActivity(), 5)\n            adapter = skinAdapter\n            addOnItemTouchListener(object : OnRecyclerViewItemClickListener(this) {\n                override fun onItemClickListener(itemRootView: View, position: Int) {\n                    skinAdapter.getItem(position)?.let {\n                        viewModel.downloadSkin(context, it)\n                    }\n                }\n            })\n            val size = context.getIntToDip(10.0f).toInt()\n            val itemDecoration = View(context)\n            itemDecoration.layoutParams = ViewGroup.LayoutParams(size, size)\n            itemDecoration.setBackgroundColor(Color.parseColor(\"#00000000\"))\n            addItemDecoration(DividerGridItemDecoration(context, GridLayoutManager.VERTICAL, itemDecoration))\n        }\n        material_switch_settion.setOnCheckedChangeListener { _, checked ->\n            if (checked) {\n                viewModel.isOpenLockerUI.value?.takeUnless {\n                    it\n                }?.let {\n                    XXPermissions.with(requireActivity())\n                        .permission(Permission.SYSTEM_ALERT_WINDOW)\n                        .interceptor(object : PermissionInterceptor() {\n                            override fun deniedPermissions(activity: Activity, allPermissions: List<String>, deniedPermissions: List<String>, never: Boolean, callback: OnPermissionCallback?) {\n                                super.deniedPermissions(activity, allPermissions, deniedPermissions, never, callback)\n                                viewModel.setLockerSwitch(false)\n                            }\n                        })\n                        .request(OnPermissionCallback { permissions, all ->\n                            if (!all) {\n                                viewModel.setLockerSwitch(false)\n                                return@OnPermissionCallback\n                            }\n                            viewModel.setLockerSwitch(true)\n                        })\n                }\n            } else {\n                viewModel.setLockerSwitch(false)\n            }\n        }\n        material_notification_switch.setOnCheckedChangeListener { _, checked ->\n            if (checked) {\n                viewModel.isNotificationOpen.value?.takeUnless {\n                    it\n                }?.let {\n                    setNotificationPermissions()\n                }\n            }\n        }\n        viewModel.isOpenLockerUI.observe(viewLifecycleOwner) {\n            material_switch_settion.isChecked = it\n        }\n        viewModel.isNotificationOpen.observe(viewLifecycleOwner) {\n            material_notification_switch.isChecked = it\n        }\n        setNotificationPermissions()\n        viewModel.downloadResult.observe(viewLifecycleOwner) {\n            PluginManager.instance.run {\n                it.fileAbsolutePath.takeUnless { path ->\n                    path == getCurrentSkinPath()\n                }?.run {\n                    switchSkinResources(this)\n                    callAllActivity(getPluginSkinResources())\n                }\n            }\n        }\n        viewModel.liveDataSkinList.observe(viewLifecycleOwner) {\n            skinAdapter.notifyData(it)\n        }\n    }\n\n    private fun setNotificationPermissions() {\n        XXPermissions.with(requireActivity())\n            .permission(Permission.NOTIFICATION_SERVICE)\n            .interceptor(object : PermissionInterceptor() {\n                override fun deniedPermissions(activity: Activity, allPermissions: List<String>, deniedPermissions: List<String>, never: Boolean, callback: OnPermissionCallback?) {\n                    super.deniedPermissions(activity, allPermissions, deniedPermissions, never, callback)\n                    viewModel.setNotificationOpen(false)\n                }\n            })\n            .request(OnPermissionCallback { _, all ->\n                if (!all) {\n                    viewModel.setNotificationOpen(false)\n                    return@OnPermissionCallback\n                }\n                viewModel.setNotificationOpen(true)\n            })\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.run {\n            setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, view_title_bar_bg)\n            setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, title)\n            setTextColor(skinRes, \"textColorPrimary\", SkinContains.packageName, material_locker_setting, material_notification, setting_skin)\n\n            material_switch_settion.thumbTintList = getColorStatusList(skinRes, \"switch_thumb_selector\", SkinContains.packageName)\n            material_switch_settion.trackTintList = getColorStatusList(skinRes, \"switch_track_selector\", SkinContains.packageName)\n\n            material_notification_switch.thumbTintList = getColorStatusList(skinRes, \"switch_thumb_selector\", SkinContains.packageName)\n            material_notification_switch.trackTintList = getColorStatusList(skinRes, \"switch_track_selector\", SkinContains.packageName)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/viewmodels/CollectViewModel.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.viewmodels\n\nimport androidx.lifecycle.LiveData\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.core.units.AppGlobals\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.sample.datasource.repository.NewsRepository\nimport com.wgllss.sample.feature_system.room.table.CollectTableBean\nimport kotlinx.coroutines.flow.onEach\n\nclass CollectViewModel : BaseViewModel() {\n    private val newsRepositoryL by lazy { NewsRepository.getInstance(AppGlobals.sApplication) }\n    lateinit var liveData: LiveData<MutableList<CollectTableBean>>\n    val isInitSuccess by lazy { MutableLiveData<Boolean>() }\n\n    override fun start() {\n        flowAsyncWorkOnViewModelScopeLaunch {\n            newsRepositoryL.getAllList().onEach {\n                liveData = it\n                isInitSuccess.postValue(true)\n            }\n        }\n    }\n\n    fun deleteFromId(id: Long) {\n        flowAsyncWorkOnViewModelScopeLaunch {\n            newsRepositoryL.deleteFromId(id)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/viewmodels/SampleViewModel.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.viewmodels\n\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.sample.data.SampleItemBean\n\nclass SampleViewModel : BaseViewModel() {\n    val sampleList by lazy { MutableLiveData<MutableList<SampleItemBean>>() }\n    override fun start() {\n        sampleList.postValue(\n            mutableListOf(\n                SampleItemBean(0, \"Activity\"),\n                SampleItemBean(1, \"Service\"),\n                SampleItemBean(2, \"BroadcastReceiver\"),\n                SampleItemBean(3, \"ContentProvider\"),\n                SampleItemBean(4, \"Notification\"),\n                SampleItemBean(5, \"WebView\"),\n                SampleItemBean(6, \"SO加载\"),\n                SampleItemBean(7, \"Dialog\"),\n                SampleItemBean(8, \"视频\"),\n                SampleItemBean(9, \"音频\"),\n                SampleItemBean(10, \"compose\")\n            )\n        )\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/viewmodels/SettingViewModel.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.viewmodels\n\nimport android.content.Context\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.dynamic.host.lib.download.DownLoadResult\nimport com.wgllss.dynamic.host.lib.download.DynamicDownloadPlugin\nimport com.wgllss.dynamic.host.lib.impl.WXDynamicLoader\nimport com.wgllss.sample.datasource.SettingRepository\nimport com.wgllss.sample.datasource.SkinPluginBean\nimport com.wgllss.sample.feature_system.savestatus.MMKVHelp\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.flow.onEach\nimport java.lang.StringBuilder\n\nclass SettingViewModel : BaseViewModel() {\n\n    val isOpenLockerUI by lazy { MutableLiveData<Boolean>() }\n\n    val isNotificationOpen by lazy { MutableLiveData<Boolean>() }\n    val downloadResult by lazy { MutableLiveData<DownLoadResult>() }\n    val liveDataSkinList by lazy { MutableLiveData<MutableList<SkinPluginBean>>() }\n\n    override fun start() {\n        getSkins()\n        isOpenLockerUI.postValue(MMKVHelp.isOpenLockerUI())\n    }\n\n    fun setLockerSwitch(isOpen: Boolean) {\n        isOpenLockerUI.postValue(isOpen)\n        MMKVHelp.setLockerSwitch(isOpen)\n    }\n\n    fun setNotificationOpen(isOpen: Boolean) {\n        isNotificationOpen.postValue(isOpen)\n    }\n\n    private fun getSkins() {\n        flowAsyncWorkOnViewModelScopeLaunch {\n            SettingRepository.instance.getSkinConfig().onEach {\n                liveDataSkinList.postValue(it)\n            }\n        }\n    }\n\n    fun downloadSkin(context: Context, skinPluginBean: SkinPluginBean) {\n        flowAsyncWorkOnViewModelScopeLaunch {\n            flow {\n                val face = WXDynamicLoader.instance.loader.getDownloadFace()\n                emit(DynamicDownloadPlugin(face).initDynamicPlugin(context, StringBuilder().append(face.getHostL()).append(\"/skins/\").append(skinPluginBean.skinUrl).toString(), \"skin\", skinPluginBean.dlfn))\n            }.onEach {\n                downloadResult.postValue(it)\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/res/layout/activity_locker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/content\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\" />\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/res/layout/activity_play.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/content\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\" />\n\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/res/layout/adapter_home_item_music.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--<layout>-->\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"88dp\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    android:focusableInTouchMode=\"true\"\n    android:foreground=\"?android:attr/selectableItemBackground\"\n    android:paddingLeft=\"20dp\"\n    android:paddingRight=\"20dp\">\n\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/author\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"top|left\"\n        android:clickable=\"false\"\n        android:focusable=\"false\"\n        android:focusableInTouchMode=\"false\"\n        android:gravity=\"center\"\n        android:insetTop=\"0dp\"\n        android:insetBottom=\"0dp\"\n        android:textColor=\"?android:textColorHighlight\"\n        android:textSize=\"16dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/sample_hz\"\n        android:layout_width=\"150dp\"\n        android:layout_height=\"20dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"90dp\"\n        android:layout_marginTop=\"15dp\"\n        android:gravity=\"center_vertical\"\n        android:textSize=\"15dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/mater_music_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"90dp\"\n        android:layout_marginTop=\"40dp\"\n        android:gravity=\"center_vertical\"\n        android:maxLines=\"1\"\n        android:textColor=\"?android:textColorPrimary\"\n        android:textSize=\"20dp\" />\n</FrameLayout>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/res/layout/adapter_item_music.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"88dp\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    android:foreground=\"?android:attr/selectableItemBackground\"\n    android:paddingLeft=\"20dp\"\n    android:paddingRight=\"20dp\">\n\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/material_buttom\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"top|left\"\n        android:clickable=\"false\"\n        android:focusable=\"false\"\n        android:focusableInTouchMode=\"false\"\n        android:gravity=\"center\"\n        android:insetTop=\"0dp\"\n        android:insetBottom=\"0dp\"\n        android:textColor=\"?android:textColorHighlight\"\n        android:textSize=\"16dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/material_sampling_rate\"\n        android:layout_width=\"150dp\"\n        android:layout_height=\"20dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"90dp\"\n        android:layout_marginTop=\"15dp\"\n        android:gravity=\"center_vertical\"\n        android:textSize=\"15dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/material_music_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"90dp\"\n        android:layout_marginTop=\"40dp\"\n        android:gravity=\"center_vertical\"\n        android:maxLines=\"1\"\n        android:textColor=\"?android:textColorPrimary\"\n        android:textSize=\"20dp\" />\n</FrameLayout>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/res/layout/adapter_music_playlist_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.mcxtzhang.swipemenulib.SwipeMenuLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"80dp\">\n\n    <FrameLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"80dp\"\n        android:layout_marginTop=\"1dp\"\n        android:layout_marginBottom=\"1dp\"\n        android:clickable=\"true\"\n        android:focusable=\"true\"\n        android:foreground=\"?android:attr/selectableItemBackground\"\n        android:paddingLeft=\"20dp\"\n        android:paddingRight=\"20dp\">\n\n        <com.google.android.material.imageview.ShapeableImageView\n            android:id=\"@+id/music_icon\"\n            android:layout_width=\"80dp\"\n            android:layout_height=\"80dp\"\n            android:layout_gravity=\"top|left\"\n            android:background=\"@null\"\n            android:scaleType=\"fitCenter\" />\n\n        <androidx.appcompat.widget.AppCompatTextView\n            android:id=\"@+id/author\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"40dp\"\n            android:layout_marginLeft=\"95dp\"\n            android:gravity=\"center_vertical\"\n            android:textColor=\"?android:textColorPrimary\"\n            android:textSize=\"16dp\" />\n\n        <com.google.android.material.textview.MaterialTextView\n            android:id=\"@+id/title\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"40dp\"\n            android:layout_marginLeft=\"95dp\"\n            android:layout_marginTop=\"35dp\"\n            android:gravity=\"center_vertical\"\n            android:textColor=\"?android:textColorPrimary\"\n            android:textSize=\"22dp\" />\n\n        <com.wgllss.core.widget.MusicVisualizerView\n            android:id=\"@+id/musicVisualizerView\"\n            android:layout_width=\"50dp\"\n            android:layout_height=\"50dp\"\n            android:layout_gravity=\"center_vertical|right\" />\n\n    </FrameLayout>\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/delete_right_tv\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"match_parent\"\n        android:gravity=\"center\"\n        android:text=\"删除\"\n        android:textColor=\"?android:textColorPrimary\"\n        android:textSize=\"16dp\" />\n\n</com.mcxtzhang.swipemenulib.SwipeMenuLayout>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/res/layout/fragment_history.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--<layout>-->\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <View\n        android:id=\"@+id/view_title_bar_bg\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"top|left\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"听歌列表\"\n        android:textColor=\"?android:textColorHighlight\"\n        android:textSize=\"20dp\" />\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/rv_pl_list\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"82dp\"\n        android:orientation=\"vertical\" />\n</FrameLayout><!--</layout>-->"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/res/layout/fragment_locker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/mainUI\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    android:gravity=\"center\"\n    android:orientation=\"vertical\">\n\n    <TextClock\n        android:id=\"@+id/txt_time\"\n        android:layout_width=\"130dp\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"30dp\"\n        android:layout_marginTop=\"40dp\"\n        android:format12Hour=\"HH:mm\"\n        android:format24Hour=\"HH:mm\"\n        android:gravity=\"center_vertical\"\n        android:text=\"12.06\"\n        android:textSize=\"45dp\" />\n\n    <TextClock\n        android:id=\"@+id/txt_date\"\n        android:layout_width=\"120dp\"\n        android:layout_height=\"25dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"35dp\"\n        android:layout_marginTop=\"100dp\"\n        android:format12Hour=\"MM月dd日\"\n        android:format24Hour=\"MM月dd日\"\n        android:gravity=\"center_vertical\"\n        android:text=\"14:25\"\n        android:textSize=\"18dp\" />\n\n    <TextClock\n        android:id=\"@+id/txt_week\"\n        android:layout_width=\"120dp\"\n        android:layout_height=\"25dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"35dp\"\n        android:layout_marginTop=\"130dp\"\n        android:format12Hour=\"EEEE\"\n        android:format24Hour=\"EEEE\"\n        android:gravity=\"center_vertical\"\n        android:text=\"星期二\"\n        android:textSize=\"18dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/mater_music_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"top|right\"\n        android:layout_marginLeft=\"165dp\"\n        android:layout_marginTop=\"100dp\"\n        android:layout_marginRight=\"30dp\"\n        android:gravity=\"center_vertical|right\"\n        android:singleLine=\"true\"\n        android:textSize=\"25dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/music_autor\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"top|right\"\n        android:layout_marginLeft=\"165dp\"\n        android:layout_marginTop=\"135dp\"\n        android:layout_marginRight=\"30dp\"\n        android:gravity=\"center_vertical|right\"\n        android:textSize=\"20dp\" />\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/iv_center\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"280dp\"\n        android:layout_gravity=\"center\"\n        android:scaleType=\"centerCrop\" />\n\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/iv_prev\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"left|bottom\"\n        android:layout_marginLeft=\"50dp\"\n        android:layout_marginBottom=\"120dp\" />\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/iv_play\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"center_horizontal|bottom\"\n        android:layout_marginBottom=\"120dp\"\n        android:visibility=\"visible\" />\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/iv_next\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"right|bottom\"\n        android:layout_marginRight=\"50dp\"\n        android:layout_marginBottom=\"120dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/txt_buttom\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"center_horizontal|bottom\"\n        android:layout_marginTop=\"26dp\"\n        android:layout_marginBottom=\"30dp\"\n        android:gravity=\"center\"\n        android:text=\">>>滑动解锁\"\n        android:textSize=\"20dp\" />\n\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/res/layout/fragment_play.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/layout_play_bg\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <ImageView\n        android:id=\"@+id/img_back\"\n        android:layout_width=\"50dp\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"26dp\"\n        android:clickable=\"true\"\n        android:focusable=\"true\"\n        android:foreground=\"?android:attr/selectableItemBackground\"\n        android:padding=\"7dp\"\n        android:scaleType=\"fitCenter\" />\n\n    <TextView\n        android:id=\"@+id/mater_music_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:layout_marginTop=\"26dp\"\n        android:gravity=\"center\"\n        android:textSize=\"25dp\" />\n\n    <androidx.viewpager.widget.ViewPager\n        android:id=\"@+id/view_pager\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"50dp\" />\n\n    <TextView\n        android:id=\"@+id/tv_current_time\"\n        android:layout_width=\"70dp\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"bottom|left\"\n        android:layout_marginLeft=\"40dp\"\n        android:layout_marginBottom=\"120dp\"\n        android:gravity=\"center_vertical|right\"\n        android:text=\"00:00\"\n        android:textSize=\"10dp\" />\n\n    <SeekBar\n        android:id=\"@+id/sb_progress\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"bottom|left\"\n        android:layout_marginLeft=\"120dp\"\n        android:layout_marginRight=\"120dp\"\n        android:layout_marginBottom=\"120dp\"\n        android:maxHeight=\"2dp\"\n        android:minHeight=\"2dp\" />\n\n    <TextView\n        android:id=\"@+id/tv_total_time\"\n        android:layout_width=\"70dp\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"bottom|right\"\n        android:layout_marginRight=\"40dp\"\n        android:layout_marginBottom=\"120dp\"\n        android:gravity=\"center_vertical|left\"\n        android:text=\"\"\n        android:textSize=\"10dp\" />\n\n    <ImageView\n        android:id=\"@+id/iv_mode\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"bottom|center_horizontal\"\n        android:layout_marginRight=\"150dp\"\n        android:layout_marginBottom=\"20dp\" />\n\n    <ImageView\n        android:id=\"@+id/iv_prev\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"bottom|center_horizontal\"\n        android:layout_marginRight=\"80dp\"\n        android:layout_marginBottom=\"20dp\" />\n\n    <ImageView\n        android:id=\"@+id/iv_play\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"bottom|center_horizontal\"\n        android:layout_marginBottom=\"20dp\"\n        android:visibility=\"gone\" />\n\n    <ProgressBar\n        android:id=\"@+id/pb_load\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"bottom|center_horizontal\"\n        android:layout_marginBottom=\"20dp\"\n        android:indeterminateBehavior=\"repeat\"\n        android:indeterminateOnly=\"true\"\n        android:padding=\"5dp\"\n        android:visibility=\"visible\" />\n\n    <ImageView\n        android:id=\"@+id/iv_next\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"center_horizontal|bottom\"\n        android:layout_marginLeft=\"80dp\"\n        android:layout_marginBottom=\"20dp\" />\n\n</FrameLayout>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/res/layout/fragment_search.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <View\n        android:id=\"@+id/view_title_bar_bg\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"top|left\" />\n\n    <androidx.appcompat.widget.AppCompatEditText\n        android:id=\"@+id/et_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"top\"\n        android:layout_marginTop=\"36dp\"\n        android:background=\"#00000000\"\n        android:gravity=\"center_vertical\"\n        android:hint=\"请输入歌曲名称\"\n        android:imeOptions=\"actionSearch\"\n        android:inputType=\"text\"\n        android:maxLines=\"1\"\n        android:paddingLeft=\"50dp\"\n        android:textColor=\"?android:textColorHighlight\"\n        android:textColorHint=\"?android:textColorHighlight\"\n        android:textSize=\"18dp\" />\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/shapeable_search\"\n        android:layout_width=\"45dp\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"top|right\"\n        android:layout_marginTop=\"36dp\"\n        android:layout_marginRight=\"20dp\"\n        android:background=\"@null\"\n        android:foreground=\"?android:attr/selectableItemBackground\"\n        android:padding=\"8dp\"\n        android:scaleType=\"fitCenter\" />\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/rv_result\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"82dp\"\n        android:orientation=\"vertical\" />\n\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/res/layout/fragment_setting.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <View\n        android:id=\"@+id/view_title_bar_bg\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"left|top\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"设置\"\n        android:textColor=\"?android:textColorHighlight\"\n        android:textSize=\"20dp\" />\n\n\n    <View\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"82dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/material_locker_setting\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"96dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"锁屏歌词\"\n        android:textColor=\"?android:textColorPrimary\"\n        android:textSize=\"20dp\" />\n\n    <com.google.android.material.switchmaterial.SwitchMaterial\n        android:id=\"@+id/material_switch_settion\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"right|top\"\n        android:layout_marginTop=\"96dp\"\n        android:layout_marginRight=\"20dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/txt_loker_des\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"144dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"25dp\"\n        android:text=\"注：开启锁屏歌词需要打开 后台弹窗 权限并开启： 在其他应用上层显示 权限\"\n        android:textColor=\"#999999\"\n        android:textSize=\"16dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/material_notification\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"194dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"通知权限\"\n        android:textColor=\"?android:textColorPrimary\"\n        android:textSize=\"18dp\" />\n\n    <com.google.android.material.switchmaterial.SwitchMaterial\n        android:id=\"@+id/material_notification_switch\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"right|top\"\n        android:layout_marginTop=\"194dp\"\n        android:layout_marginRight=\"20dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/txt_notification_des\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"239dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"25dp\"\n        android:paddingRight=\"25dp\"\n        android:text=\"注：开启通知权限后可保证长时间在后台播放音乐\"\n        android:textColor=\"#999999\"\n        android:textSize=\"16dp\" />\n\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib/src/main/res/layout/music_cd_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n\n    <FrameLayout\n        android:id=\"@+id/cd_layout\"\n        android:layout_width=\"250dp\"\n        android:layout_height=\"250dp\"\n        android:layout_gravity=\"center\">\n\n\n        <ImageView\n            android:id=\"@+id/img_circle\"\n            android:layout_width=\"250dp\"\n            android:layout_height=\"250dp\" />\n\n        <com.google.android.material.imageview.ShapeableImageView\n            android:id=\"@+id/iv_center2\"\n            android:layout_width=\"170dp\"\n            android:layout_height=\"170dp\"\n            android:layout_gravity=\"center\"\n            android:scaleType=\"centerCrop\" />\n\n    </FrameLayout>\n\n    <ImageView\n        android:id=\"@+id/iv_point\"\n        android:layout_width=\"90dp\"\n        android:layout_height=\"132dp\"\n        android:layout_gravity=\"center\"\n        android:layout_marginLeft=\"40dp\"\n        android:layout_marginBottom=\"120dp\" />\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.dynamic.sample.other2'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.dynamic.sample.other2\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        release {\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"classes_other2_res.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\n\ndef createCopyTask(assembleReleaseTask, buildType) {\n    def inputFile = file(\"${getProject().getBuildDir()}/outputs/apk/release/classes_other2_res.apk\")\n    def outputFile = file(\"${rootProject.getBuildDir()}/classes_other2_res\")\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    return tasks.create(\"assembleCopy\", Copy) {\n        group = 'other'\n        description = \"复制json到 指定输出目录\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(assembleReleaseTask.name)\n}\n\ntasks.whenTaskAdded { task ->\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(task, \"release\")\n    }\n//    if (task.name == \"cleanJson\") {\n//        createVersionJson(task, \"Release\")\n//    }\n}\n\n\ndependencies {\n\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/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\n\n-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* #这个过滤器是谷歌推荐的算法，一般不做更改\n-optimizationpasses 7 # 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n-dontpreverify # 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n-dontusemixedcaseclassnames #混合时不使用大小写混合，混合后的类名为小写\n-verbose #包含有类名->混淆后类名的映射关系 日志记录\n-keepattributes SourceFile,LineNumberTable # 保留代码行号\n\n# Preserve some attributes that may be required for reflection.\n-keepattributes AnnotationDefault,*Annotation*,# 避免混淆注解\n                EnclosingMethod, # 避免混淆匿名类\n                InnerClasses, # 避免混淆内部类\n                RuntimeVisibleAnnotations,\n                RuntimeVisibleParameterAnnotations,\n                RuntimeVisibleTypeAnnotations,\n                Signature # 避免混淆泛型\n\n# Fragment\n-keep class * extends androidx.fragment.app.Fragment{}\n-keep class * extends androidx.fragment.app.FragmentActivity{}\n\n# keepclassmembers :防止类成员被移除或被混淆\n-keepclassmembers class * {\n    @android.webkit.JavascriptInterface <methods>;\n}\n\n# 保留本地native方法不被混淆\n-keepclasseswithmembernames class * { native <methods>;}\n\n# The support libraries contains references to newer platform versions.\n# Don't warn about those in case this app is linking against an older\n# platform version. We know about them, and they are safe.\n-dontnote android.support.**\n-dontnote androidx.**\n-dontwarn android.support.**\n-dontwarn androidx.**\n# 保留R下面的资源\n-keep class **.R$* {*;}\n## Android architecture components: Lifecycle\n# LifecycleObserver's empty constructor is considered to be unused by proguard\n-keepclassmembers class * implements androidx.lifecycle.LifecycleObserver {\n    <init>(...);\n}\n# ViewModel's empty constructor is considered to be unused by proguard\n-keepclassmembers class * extends androidx.lifecycle.ViewModel {\n    <init>(...);\n}\n# keep methods annotated with @OnLifecycleEvent even if they seem to be unused\n# (Mostly for LiveData.LifecycleBoundObserver.onStateChange(), but who knows)\n-keepclassmembers class * {\n    @androidx.lifecycle.OnLifecycleEvent *;\n}\n\n# ViewBinding\n-keep public class * extends androidx.viewbinding.ViewBinding {*;}\n\n# These classes are duplicated between android.jar and org.apache.http.legacy.jar.\n-dontnote org.apache.http.**\n-dontnote android.net.http.**\n\n# 保持自定义控件类不被混淆  # keepclasseswithmembers:防止拥有改成员的类和类成员被移除或被混淆\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet);\n}\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet, int);\n}\n# 保留枚举类不被混淆\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n\n# 保留Parcelable序列化类不被混淆\n#-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}\n## 保留Serializable序列化的类不被混淆\n#-keepnames class * implements java.io.Serializable\n#-keepclassmembers class * implements java.io.Serializable {\n#    static final long serialVersionUID;\n#    private static final java.io.ObjectStreamField[] serialPersistentFields;\n#    !static !transient <fields>;\n#    !private <fields>;\n#    !private <methods>;\n#    private void writeObject(java.io.ObjectOutputStream);\n#    private void readObject(java.io.ObjectInputStream);\n#    java.lang.Object writeReplace();\n#    java.lang.Object readResolve();\n#}\n## 对于带有回调函数的onXXEvent、**On*Listener的，不能被混淆\n#-keepclassmembers class * {\n#    void *(**On*Event);\n#    void *(**On*Listener);\n#}\n\n# Databinding\n-dontwarn android.databinding.**\n-keep class android.databinding.** { *; }\n-keep class androidx.lifecycle.** { *; }\n-keep class kotlinx.coroutines.** { *; }\n# kotlin 相关\n-dontwarn kotlin.**\n-keep class kotlin.** { *; }\n-keep interface kotlin.** { *; }\n################ 第三方库中的混淆规则start ##############################\n# Glide混淆\n#-keep public class * implements com.bumptech.glide.module.GlideModule\n#-keep class * extends com.bumptech.glide.module.AppGlideModule {\n# <init>(...);\n#}\n#-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {\n#  **[] $VALUES;\n#  public *;\n#}\n#-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {\n#  *** rewind();\n#}\n\n#友盟混淆\n-keep class com.umeng.** {*;}\n-keep class org.repackage.** {*;}\n-keepclassmembers class * {\n   public <init> (org.json.JSONObject);\n}\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n#Jsoup 混淆\n#-dontwarn org.jsoup.**\n#-keep class org.jsoup.**{*;}\n#-keeppackagenames org.jsoup.nodes\n\n# Gson\n#-keep class com.google.gson.** {*;}\n#-keep class com.google.gson.stream.** {*;}\n#-keep class com.google.** {\n#    <fields>;\n#    <methods>;\n#}\n\n\n#\n############### 对于一些基本指令的添加start ##################\n## 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n#-optimizationpasses 5\n## 混合时不使用大小写混合，混合后的类名为小写\n#-dontusemixedcaseclassnames\n## 指定不去忽略非公共库的类\n#-dontskipnonpubliclibraryclasses\n## 这句话能够使我们的项目混淆后产生映射文件\n## 包含有类名->混淆后类名的映射关系\n#-verbose\n## 指定不去忽略非公共库的类成员\n#-dontskipnonpubliclibraryclassmembers\n## 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n#-dontpreverify\n## 忽略警告\n#-ignorewarnings\n## 保留Annotation不混淆\n#-keepattributes *Annotation*,InnerClasses\n## 避免混淆泛型\n#-keepattributes Signature\n## 抛出异常时保留代码行号\n#-keepattributes SourceFile,LineNumberTable\n## 指定混淆是采用的算法，后面的参数是一个过滤器\n## 这个过滤器是谷歌推荐的算法，一般不做更改\n#-optimizations !code/simplification/cast,!field/*,!class/merging/*\n################ 对于一些基本指令的添加end #########################\n#\n#\n################ Android开发中一些需要保留的公共部分start ##################\n## 保留我们使用的四大组件，自定义的Application等等这些类不被混淆,因为这些子类都有可能被外部调用\n#-keep public class * extends android.app.Activity\n#-keep public class * extends android.app.Application\n#-keep public class * extends android.app.Service\n#-keep public class * extends android.content.BroadcastReceiver\n#-keep public class * extends android.content.ContentProvider\n#-keep public class * extends android.app.backup.BackupAgentHelper\n#-keep public class * extends android.preference.Preference\n#-keep public class * extends android.view.View\n## 保留support下的所有类及其内部类\n#-keep class android.support.** {*;}\n## 保留继承的\n#-keep public class * extends android.support.v4.**\n#-keep public class * extends android.support.v7.**\n#-keep public class * extends android.support.annotation.**\n## Androidx的混淆\n#-keep class com.google.android.material.** {*;}\n#-keep class androidx.** {*;}\n#-keep public class * extends androidx.**\n#-keep interface androidx.** {*;}\n#-dontwarn com.google.android.material.**\n#-dontnote com.google.android.material.**\n#-dontwarn androidx.**\n## 保留R下面的资源\n#-keep class **.R$* {*;}\n## 保留本地native方法不被混淆\n#-keepclasseswithmembernames class * { native <methods>;}\n## 保留在Activity中的方法参数是view的方法，\n## 这样以来我们在layout中写的onClick就不会被影响\n#-keepclassmembers class * extends android.app.Activity{ public void *(android.view.View);}\n## 保留枚举类不被混淆\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n## 保留我们自定义控件（继承自View）不被混淆\n#-keep public class * extends android.view.View{\n#    *** get*();\n#    void set*(***);\n#    public <init>(android.content.Context);\n#    public <init>(android.content.Context, android.util.AttributeSet);\n#    public <init>(android.content.Context, android.util.AttributeSet, int);\n#}\n## 保留Parcelable序列化类不被混淆\n#-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}\n## 保留Serializable序列化的类不被混淆\n#-keepnames class * implements java.io.Serializable\n#-keepclassmembers class * implements java.io.Serializable {\n#    static final long serialVersionUID;\n#    private static final java.io.ObjectStreamField[] serialPersistentFields;\n#    !static !transient <fields>;\n#    !private <fields>;\n#    !private <methods>;\n#    private void writeObject(java.io.ObjectOutputStream);\n#    private void readObject(java.io.ObjectInputStream);\n#    java.lang.Object writeReplace();\n#    java.lang.Object readResolve();\n#}\n## 对于带有回调函数的onXXEvent、**On*Listener的，不能被混淆\n#-keepclassmembers class * {\n#    void *(**On*Event);\n#    void *(**On*Listener);\n#}\n#\n## 所有实体类不能混淆 model文件夹下的所有实体类不能混淆\n#\n##-keep class com.btpj.lib_base.data.bean.** {*;}\n##-keep class com.btpj.wanandroid.data.** {*;}\n#\n################ Android开发中一些需要保留的公共部分end ##################\n#\n#\n################ 第三方库中的混淆规则start ##############################\n## Glide混淆\n#-keep public class * implements com.bumptech.glide.module.GlideModule\n#-keep class * extends com.bumptech.glide.module.AppGlideModule {\n# <init>(...);\n#}\n#-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {\n#  **[] $VALUES;\n#  public *;\n#}\n#-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {\n#  *** rewind();\n#}\n#\n##友盟混淆\n#-keep class com.umeng.** {*;}\n#-keep class org.repackage.** {*;}\n#-keepclassmembers class * {\n#   public <init> (org.json.JSONObject);\n#}\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n##Jsoup 混淆\n#-dontwarn org.jsoup.**\n#-keep class org.jsoup.**{*;}\n#-keeppackagenames org.jsoup.nodes\n\n# Gson\n#-keep class com.google.gson.** {*;}\n#-keep class com.google.gson.stream.** {*;}\n#-keep class com.google.** {\n#    <fields>;\n#    <methods>;\n#}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.sample.other2\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/res/layout/activity_locker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/content\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\" />\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/res/layout/activity_other2.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <View\n        android:id=\"@+id/view_title_bar\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"top|left\" />\n\n    <ImageView\n        android:id=\"@+id/img_back\"\n        android:layout_width=\"45dp\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"36dp\"\n        android:clickable=\"true\"\n        android:gravity=\"center\"\n        android:focusable=\"true\"\n        android:padding=\"7dp\"\n        android:scaleType=\"fitCenter\" />\n\n    <TextView\n        android:id=\"@+id/txt_activity_title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"示例\"\n        android:textSize=\"18dp\" />\n\n    <FrameLayout\n        android:id=\"@+id/layout_content\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"82dp\" />\n</FrameLayout>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/res/layout/activity_other3.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <View\n        android:id=\"@+id/view_title_bar\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"top|left\" />\n\n    <ImageView\n        android:id=\"@+id/img_back\"\n        android:layout_width=\"45dp\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"36dp\"\n        android:clickable=\"true\"\n        android:focusable=\"true\"\n        android:gravity=\"center\"\n        android:padding=\"7dp\"\n        android:scaleType=\"fitCenter\" />\n\n    <TextView\n        android:id=\"@+id/txt_activity_title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"示例\"\n        android:textSize=\"18dp\" />\n\n    <FrameLayout\n        android:id=\"@+id/layout_content\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"82dp\">\n\n        <TextView\n            android:id=\"@+id/txt3\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"45dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"我是第三层activity\"\n            android:textSize=\"18dp\" />\n    </FrameLayout>\n</FrameLayout>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/res/layout/activity_play.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/content\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\" />\n\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/res/layout/activity_video.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/layout_content\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:keepScreenOn=\"true\">\n\n    <FrameLayout\n        android:id=\"@+id/layout_title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:visibility=\"gone\">\n\n        <ImageView\n            android:id=\"@+id/img_back\"\n            android:layout_width=\"45dp\"\n            android:layout_height=\"45dp\"\n            android:layout_gravity=\"left|bottom\"\n            android:padding=\"7dp\" />\n\n        <TextView\n            android:id=\"@+id/title\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"45dp\"\n            android:layout_gravity=\"left|bottom\"\n            android:layout_marginLeft=\"45dp\"\n            android:gravity=\"center_vertical\"\n            android:maxLines=\"1\"\n            android:textSize=\"16dp\" />\n    </FrameLayout>\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/res/layout/activity_webview.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <View\n        android:id=\"@+id/view_title_bar\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"top|left\" />\n\n    <ImageView\n        android:id=\"@+id/img_back\"\n        android:layout_width=\"45dp\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"36dp\"\n        android:clickable=\"true\"\n        android:focusable=\"true\"\n        android:gravity=\"center\"\n        android:padding=\"7dp\"\n        android:scaleType=\"fitCenter\" />\n\n    <TextView\n        android:id=\"@+id/txt_activity_title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"示例\"\n        android:textSize=\"18dp\" />\n\n    <WebView\n        android:id=\"@+id/webview\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"82dp\" />\n</FrameLayout>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/res/layout/dialog_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"500dp\"\n    android:layout_height=\"500dp\"\n    android:orientation=\"vertical\">\n\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/btn_dialog_0\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:gravity=\"center\"\n        android:text=\"我是弹出窗里面布局,点击我就消失了 \"\n        android:textSize=\"18dp\" />\n\n</LinearLayout>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/res/layout/fragment_activity_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n\n    <ImageView\n        android:id=\"@+id/img_url\"\n        android:layout_width=\"150dp\"\n        android:layout_height=\"150dp\"\n        android:clickable=\"true\"\n        android:focusable=\"true\"\n        android:scaleType=\"fitCenter\" />\n\n    <TextView\n        android:id=\"@+id/txt_test\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"示例\"\n        android:textSize=\"18dp\" />\n\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/btn_jump\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"再次跳转到插件Activity\"\n        android:textSize=\"18dp\" />\n</LinearLayout>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/res/layout/fragment_broadcast_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.core.widget.NestedScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_send_broadcast\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中: 动态广播 发送\"\n            android:textSize=\"18dp\" />\n\n    </LinearLayout>\n</androidx.core.widget.NestedScrollView>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/res/layout/fragment_dialog_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.core.widget.NestedScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_dialog\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"dialog \"\n            android:textSize=\"18dp\" />\n\n    </LinearLayout>\n</androidx.core.widget.NestedScrollView>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/res/layout/fragment_locker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/mainUI\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    android:gravity=\"center\"\n    android:orientation=\"vertical\">\n\n    <TextClock\n        android:id=\"@+id/txt_time\"\n        android:layout_width=\"130dp\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"30dp\"\n        android:layout_marginTop=\"40dp\"\n        android:format12Hour=\"HH:mm\"\n        android:format24Hour=\"HH:mm\"\n        android:gravity=\"center_vertical\"\n        android:text=\"12.06\"\n        android:textSize=\"45dp\" />\n\n    <TextClock\n        android:id=\"@+id/txt_date\"\n        android:layout_width=\"120dp\"\n        android:layout_height=\"25dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"35dp\"\n        android:layout_marginTop=\"100dp\"\n        android:format12Hour=\"MM月dd日\"\n        android:format24Hour=\"MM月dd日\"\n        android:gravity=\"center_vertical\"\n        android:text=\"14:25\"\n        android:textSize=\"18dp\" />\n\n    <TextClock\n        android:id=\"@+id/txt_week\"\n        android:layout_width=\"120dp\"\n        android:layout_height=\"25dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"35dp\"\n        android:layout_marginTop=\"130dp\"\n        android:format12Hour=\"EEEE\"\n        android:format24Hour=\"EEEE\"\n        android:gravity=\"center_vertical\"\n        android:text=\"星期二\"\n        android:textSize=\"18dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/mater_music_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"top|right\"\n        android:layout_marginLeft=\"165dp\"\n        android:layout_marginTop=\"100dp\"\n        android:layout_marginRight=\"30dp\"\n        android:gravity=\"center_vertical|right\"\n        android:singleLine=\"true\"\n        android:textSize=\"25dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/music_autor\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"top|right\"\n        android:layout_marginLeft=\"165dp\"\n        android:layout_marginTop=\"135dp\"\n        android:layout_marginRight=\"30dp\"\n        android:gravity=\"center_vertical|right\"\n        android:textSize=\"20dp\" />\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/iv_center\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"330dp\"\n        android:layout_gravity=\"center\"\n        android:scaleType=\"centerCrop\" />\n\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/iv_prev\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"left|bottom\"\n        android:layout_marginLeft=\"50dp\"\n        android:layout_marginBottom=\"120dp\" />\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/iv_play\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"center_horizontal|bottom\"\n        android:layout_marginBottom=\"120dp\"\n        android:visibility=\"visible\" />\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/iv_next\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"right|bottom\"\n        android:layout_marginRight=\"50dp\"\n        android:layout_marginBottom=\"120dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/txt_buttom\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"center_horizontal|bottom\"\n        android:layout_marginTop=\"26dp\"\n        android:layout_marginBottom=\"30dp\"\n        android:gravity=\"center\"\n        android:text=\">>>滑动解锁\"\n        android:textSize=\"20dp\" />\n\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/res/layout/fragment_notification_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.core.widget.NestedScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_notifacaion1\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"notification1 \"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_notifacaion2\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"notification2\"\n            android:textSize=\"18dp\" />\n    </LinearLayout>\n</androidx.core.widget.NestedScrollView>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/res/layout/fragment_play.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/layout_play_bg\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <ImageView\n        android:id=\"@+id/img_back\"\n        android:layout_width=\"50dp\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"26dp\"\n        android:clickable=\"true\"\n        android:foreground=\"?android:attr/selectableItemBackground\"\n        android:padding=\"7dp\"\n        android:scaleType=\"fitCenter\" />\n\n    <TextView\n        android:id=\"@+id/mater_music_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:layout_marginTop=\"26dp\"\n        android:gravity=\"center\"\n        android:textSize=\"25dp\" />\n\n    <androidx.viewpager.widget.ViewPager\n        android:id=\"@+id/view_pager\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"76dp\" />\n\n    <TextView\n        android:id=\"@+id/tv_current_time\"\n        android:layout_width=\"35dp\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"bottom|left\"\n        android:layout_marginLeft=\"10dp\"\n        android:layout_marginBottom=\"120dp\"\n        android:gravity=\"center_vertical|right\"\n        android:text=\"00:00\"\n        android:textSize=\"10dp\" />\n\n    <SeekBar\n        android:id=\"@+id/sb_progress\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"bottom|left\"\n        android:layout_marginLeft=\"45dp\"\n        android:layout_marginRight=\"45dp\"\n        android:layout_marginBottom=\"120dp\"\n        android:maxHeight=\"2dp\"\n        android:minHeight=\"2dp\" />\n\n    <TextView\n        android:id=\"@+id/tv_total_time\"\n        android:layout_width=\"35dp\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"bottom|right\"\n        android:layout_marginRight=\"10dp\"\n        android:layout_marginBottom=\"120dp\"\n        android:gravity=\"center_vertical|left\"\n        android:text=\"\"\n        android:textSize=\"10dp\" />\n\n    <ImageView\n        android:id=\"@+id/iv_mode\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"bottom|center_horizontal\"\n        android:layout_marginRight=\"150dp\"\n        android:visibility=\"gone\"\n        android:layout_marginBottom=\"20dp\" />\n\n    <ImageView\n        android:id=\"@+id/iv_prev\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"bottom|center_horizontal\"\n        android:layout_marginRight=\"80dp\"\n        android:layout_marginBottom=\"20dp\" />\n\n    <ImageView\n        android:id=\"@+id/iv_play\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"bottom|center_horizontal\"\n        android:layout_marginBottom=\"20dp\"\n        android:visibility=\"gone\" />\n\n    <ProgressBar\n        android:id=\"@+id/pb_load\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"bottom|center_horizontal\"\n        android:layout_marginBottom=\"20dp\"\n        android:indeterminateBehavior=\"repeat\"\n        android:indeterminateOnly=\"true\"\n        android:padding=\"5dp\"\n        android:visibility=\"visible\" />\n\n    <ImageView\n        android:id=\"@+id/iv_next\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"center_horizontal|bottom\"\n        android:layout_marginLeft=\"80dp\"\n        android:layout_marginBottom=\"20dp\" />\n\n</FrameLayout>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/res/layout/fragment_provider_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.core.widget.NestedScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_query\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"查询\"\n            android:textSize=\"18dp\" />\n\n        <TextView\n            android:id=\"@+id/txt_query_result\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"查询结果:\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_del\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"删除\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_update\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"修改\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_insert\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"插入\"\n            android:textSize=\"18dp\" />\n    </LinearLayout>\n</androidx.core.widget.NestedScrollView>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/res/layout/fragment_service_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.core.widget.NestedScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_start_service\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中: start Service\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_start_service2\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中: start Service2\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_start_service3\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中: start Service3\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_bind_service\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中: bind Service\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_bind_service2\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中: bind Service2\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_bind_service3\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中: bind Service3\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_start_service11\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中(单独进程): start Service\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_bind_service11\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中(单独进程): bind Service\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_bind_service_aidl\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"模拟AIDL(单独进程) 获取值\"\n            android:textSize=\"18dp\" />\n    </LinearLayout>\n</androidx.core.widget.NestedScrollView>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/res/layout/fragment_so_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.core.widget.NestedScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_so\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"下载并加载so \"\n            android:textSize=\"18dp\" />\n\n    </LinearLayout>\n</androidx.core.widget.NestedScrollView>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2/src/main/res/layout/music_cd_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n\n    <FrameLayout\n        android:id=\"@+id/cd_layout\"\n        android:layout_width=\"250dp\"\n        android:layout_height=\"250dp\"\n        android:layout_gravity=\"center\">\n\n\n        <ImageView\n            android:id=\"@+id/img_circle\"\n            android:layout_width=\"250dp\"\n            android:layout_height=\"250dp\" />\n\n        <com.google.android.material.imageview.ShapeableImageView\n            android:id=\"@+id/iv_center2\"\n            android:layout_width=\"170dp\"\n            android:layout_height=\"170dp\"\n            android:layout_gravity=\"center\"\n            android:scaleType=\"centerCrop\" />\n\n    </FrameLayout>\n\n    <ImageView\n        android:id=\"@+id/iv_point\"\n        android:layout_width=\"90dp\"\n        android:layout_height=\"132dp\"\n        android:layout_gravity=\"center\"\n        android:layout_marginLeft=\"40dp\"\n        android:layout_marginBottom=\"120dp\" />\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n    alias(libs.plugins.compose.compiler)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.sample.other2\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildFeatures {\n        buildConfig true\n        compose = true\n    }\n    composeOptions {\n        kotlinCompilerExtensionVersion = \"1.7.0\"\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n\n    lintOptions {\n        abortOnError false\n    }\n}\n\ndependencies {\n    implementation project(':Wgllss-Dynamic-Plugin-Common-Library')\n    implementation project(':wgllss-common-re-library')\n    implementation project(':wgllss-business-re-library')\n    implementation project(':wgllss-sample-business-library')\n\n    implementation project(':Wgllss-Dynamic-Plugin-Manager')\n    implementation project(':Wgllss-Dynamic-Plugin-Library')\n\n//    implementation project(':Wgllss-Dynamic-Host-Provider-Lib')\n//    implementation project(':Wgllss-Dynamic-Host-Download-Lib')\n//    implementation project(':Wgllss-Dynamic-Host-Lib-Impl')\n//    implementation project(':Wgllss-Dynamic-Host-Loader-Lib')\n\n//    compileOnly project(path: ':Wgllss-Dynamic-Host-Version-Lib')\n    implementation project(path: ':Wgllss-Dynamic-Host-Lib')\n\n    implementation libs.androidx.core.ktx\n    implementation libs.appcompat\n    implementation libs.androidx.recyclerview\n    implementation libs.google.material\n    implementation libs.constraintlayout\n\n    implementation libs.androidx.lifecycle.runtime.ktx\n    implementation libs.androidx.lifecycle.livedata.ktx\n    implementation libs.androidx.lifecycle.viewmodel.ktx\n    implementation libs.androidx.activity\n    implementation libs.androidx.activity.ktx\n    implementation libs.androidx.fragment.ktx\n\n    implementation libs.glide\n    implementation libs.palette.ktx\n\n    implementation libs.org.jsoup.jsoup\n    implementation libs.exoplayer.core\n    implementation libs.exoplayer.ui\n    compileOnly libs.google.extension.mediasession\n\n    //compose\n    implementation(libs.androidx.activity.compose)\n    implementation(platform(libs.androidx.compose.bom))\n    implementation(libs.androidx.ui)\n    implementation(libs.androidx.ui.graphics)\n    implementation(libs.androidx.ui.tooling.preview)\n    implementation(libs.androidx.material3)\n    implementation libs.androidx.constraintlayout.compose\n    implementation libs.androidx.runtime.livedata\n    implementation libs.coil.compose\n    implementation libs.androidx.navigation.compose\n    implementation libs.androidx.navigation.runtime.ktx\n    implementation libs.androidx.compose.material3.adaptive.navigation\n    implementation libs.androidx.compose.material3.adaptive\n    implementation libs.androidx.compose.material3.adaptive.layout\n    implementation libs.androidx.compose.material3.navigationSuite\n    implementation libs.androidx.compose.material3.windowSizeClass\n}\n\ndef commandDex(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_other2.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_other2_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_other2_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n    if (task.name == \"assembleRelease\") {\n        commandDex(\"Release\")\n    }\n//    if (task.name == \"assembleDxCommand\") {\n//        assembleCopyToHost.dependsOn assembleDxCommand\n//    }\n}\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/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\n\n-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* #这个过滤器是谷歌推荐的算法，一般不做更改\n-optimizationpasses 7 # 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n-dontpreverify # 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n-dontusemixedcaseclassnames #混合时不使用大小写混合，混合后的类名为小写\n-verbose #包含有类名->混淆后类名的映射关系 日志记录\n-keepattributes SourceFile,LineNumberTable # 保留代码行号\n\n# Preserve some attributes that may be required for reflection.\n-keepattributes AnnotationDefault,*Annotation*,# 避免混淆注解\n                EnclosingMethod, # 避免混淆匿名类\n                InnerClasses, # 避免混淆内部类\n                RuntimeVisibleAnnotations,\n                RuntimeVisibleParameterAnnotations,\n                RuntimeVisibleTypeAnnotations,\n                Signature # 避免混淆泛型\n\n# Fragment\n-keep class * extends androidx.fragment.app.Fragment{}\n-keep class * extends androidx.fragment.app.FragmentActivity{}\n\n# keepclassmembers :防止类成员被移除或被混淆\n-keepclassmembers class * {\n    @android.webkit.JavascriptInterface <methods>;\n}\n\n# 保留本地native方法不被混淆\n-keepclasseswithmembernames class * { native <methods>;}\n\n# The support libraries contains references to newer platform versions.\n# Don't warn about those in case this app is linking against an older\n# platform version. We know about them, and they are safe.\n-dontnote android.support.**\n-dontnote androidx.**\n-dontwarn android.support.**\n-dontwarn androidx.**\n# 保留R下面的资源\n-keep class **.R$* {*;}\n## Android architecture components: Lifecycle\n# LifecycleObserver's empty constructor is considered to be unused by proguard\n-keepclassmembers class * implements androidx.lifecycle.LifecycleObserver {\n    <init>(...);\n}\n# ViewModel's empty constructor is considered to be unused by proguard\n-keepclassmembers class * extends androidx.lifecycle.ViewModel {\n    <init>(...);\n}\n# keep methods annotated with @OnLifecycleEvent even if they seem to be unused\n# (Mostly for LiveData.LifecycleBoundObserver.onStateChange(), but who knows)\n-keepclassmembers class * {\n    @androidx.lifecycle.OnLifecycleEvent *;\n}\n\n# ViewBinding\n-keep public class * extends androidx.viewbinding.ViewBinding {*;}\n\n# These classes are duplicated between android.jar and org.apache.http.legacy.jar.\n-dontnote org.apache.http.**\n-dontnote android.net.http.**\n\n# 保持自定义控件类不被混淆  # keepclasseswithmembers:防止拥有改成员的类和类成员被移除或被混淆\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet);\n}\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet, int);\n}\n# 保留枚举类不被混淆\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n\n# 保留Parcelable序列化类不被混淆\n#-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}\n## 保留Serializable序列化的类不被混淆\n#-keepnames class * implements java.io.Serializable\n#-keepclassmembers class * implements java.io.Serializable {\n#    static final long serialVersionUID;\n#    private static final java.io.ObjectStreamField[] serialPersistentFields;\n#    !static !transient <fields>;\n#    !private <fields>;\n#    !private <methods>;\n#    private void writeObject(java.io.ObjectOutputStream);\n#    private void readObject(java.io.ObjectInputStream);\n#    java.lang.Object writeReplace();\n#    java.lang.Object readResolve();\n#}\n## 对于带有回调函数的onXXEvent、**On*Listener的，不能被混淆\n#-keepclassmembers class * {\n#    void *(**On*Event);\n#    void *(**On*Listener);\n#}\n\n# Databinding\n-dontwarn android.databinding.**\n-keep class android.databinding.** { *; }\n-keep class androidx.lifecycle.** { *; }\n-keep class kotlinx.coroutines.** { *; }\n-keep class com.wgllss.sample.features_ui.page.** { *; }\n# kotlin 相关\n-dontwarn kotlin.**\n-keep class kotlin.** { *; }\n-keep interface kotlin.** { *; }\n################ 第三方库中的混淆规则start ##############################\n# Glide混淆\n#-keep public class * implements com.bumptech.glide.module.GlideModule\n#-keep class * extends com.bumptech.glide.module.AppGlideModule {\n# <init>(...);\n#}\n#-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {\n#  **[] $VALUES;\n#  public *;\n#}\n#-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {\n#  *** rewind();\n#}\n\n#友盟混淆\n-keep class com.umeng.** {*;}\n-keep class org.repackage.** {*;}\n-keepclassmembers class * {\n   public <init> (org.json.JSONObject);\n}\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n#Jsoup 混淆\n#-dontwarn org.jsoup.**\n#-keep class org.jsoup.**{*;}\n#-keeppackagenames org.jsoup.nodes\n\n# Gson\n#-keep class com.google.gson.** {*;}\n#-keep class com.google.gson.stream.** {*;}\n#-keep class com.google.** {\n#    <fields>;\n#    <methods>;\n#}\n\n\n#\n############### 对于一些基本指令的添加start ##################\n## 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n#-optimizationpasses 5\n## 混合时不使用大小写混合，混合后的类名为小写\n#-dontusemixedcaseclassnames\n## 指定不去忽略非公共库的类\n#-dontskipnonpubliclibraryclasses\n## 这句话能够使我们的项目混淆后产生映射文件\n## 包含有类名->混淆后类名的映射关系\n#-verbose\n## 指定不去忽略非公共库的类成员\n#-dontskipnonpubliclibraryclassmembers\n## 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n#-dontpreverify\n## 忽略警告\n#-ignorewarnings\n## 保留Annotation不混淆\n#-keepattributes *Annotation*,InnerClasses\n## 避免混淆泛型\n#-keepattributes Signature\n## 抛出异常时保留代码行号\n#-keepattributes SourceFile,LineNumberTable\n## 指定混淆是采用的算法，后面的参数是一个过滤器\n## 这个过滤器是谷歌推荐的算法，一般不做更改\n#-optimizations !code/simplification/cast,!field/*,!class/merging/*\n################ 对于一些基本指令的添加end #########################\n#\n#\n################ Android开发中一些需要保留的公共部分start ##################\n## 保留我们使用的四大组件，自定义的Application等等这些类不被混淆,因为这些子类都有可能被外部调用\n#-keep public class * extends android.app.Activity\n#-keep public class * extends android.app.Application\n#-keep public class * extends android.app.Service\n#-keep public class * extends android.content.BroadcastReceiver\n#-keep public class * extends android.content.ContentProvider\n#-keep public class * extends android.app.backup.BackupAgentHelper\n#-keep public class * extends android.preference.Preference\n#-keep public class * extends android.view.View\n## 保留support下的所有类及其内部类\n#-keep class android.support.** {*;}\n## 保留继承的\n#-keep public class * extends android.support.v4.**\n#-keep public class * extends android.support.v7.**\n#-keep public class * extends android.support.annotation.**\n## Androidx的混淆\n#-keep class com.google.android.material.** {*;}\n#-keep class androidx.** {*;}\n#-keep public class * extends androidx.**\n#-keep interface androidx.** {*;}\n#-dontwarn com.google.android.material.**\n#-dontnote com.google.android.material.**\n#-dontwarn androidx.**\n## 保留R下面的资源\n#-keep class **.R$* {*;}\n## 保留本地native方法不被混淆\n#-keepclasseswithmembernames class * { native <methods>;}\n## 保留在Activity中的方法参数是view的方法，\n## 这样以来我们在layout中写的onClick就不会被影响\n#-keepclassmembers class * extends android.app.Activity{ public void *(android.view.View);}\n## 保留枚举类不被混淆\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n## 保留我们自定义控件（继承自View）不被混淆\n#-keep public class * extends android.view.View{\n#    *** get*();\n#    void set*(***);\n#    public <init>(android.content.Context);\n#    public <init>(android.content.Context, android.util.AttributeSet);\n#    public <init>(android.content.Context, android.util.AttributeSet, int);\n#}\n## 保留Parcelable序列化类不被混淆\n#-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}\n## 保留Serializable序列化的类不被混淆\n#-keepnames class * implements java.io.Serializable\n#-keepclassmembers class * implements java.io.Serializable {\n#    static final long serialVersionUID;\n#    private static final java.io.ObjectStreamField[] serialPersistentFields;\n#    !static !transient <fields>;\n#    !private <fields>;\n#    !private <methods>;\n#    private void writeObject(java.io.ObjectOutputStream);\n#    private void readObject(java.io.ObjectInputStream);\n#    java.lang.Object writeReplace();\n#    java.lang.Object readResolve();\n#}\n## 对于带有回调函数的onXXEvent、**On*Listener的，不能被混淆\n#-keepclassmembers class * {\n#    void *(**On*Event);\n#    void *(**On*Listener);\n#}\n#\n## 所有实体类不能混淆 model文件夹下的所有实体类不能混淆\n#\n##-keep class com.btpj.lib_base.data.bean.** {*;}\n##-keep class com.btpj.wanandroid.data.** {*;}\n#\n################ Android开发中一些需要保留的公共部分end ##################\n#\n#\n################ 第三方库中的混淆规则start ##############################\n## Glide混淆\n#-keep public class * implements com.bumptech.glide.module.GlideModule\n#-keep class * extends com.bumptech.glide.module.AppGlideModule {\n# <init>(...);\n#}\n#-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {\n#  **[] $VALUES;\n#  public *;\n#}\n#-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {\n#  *** rewind();\n#}\n#\n##友盟混淆\n#-keep class com.umeng.** {*;}\n#-keep class org.repackage.** {*;}\n#-keepclassmembers class * {\n#   public <init> (org.json.JSONObject);\n#}\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n##Jsoup 混淆\n#-dontwarn org.jsoup.**\n#-keep class org.jsoup.**{*;}\n#-keeppackagenames org.jsoup.nodes\n\n# Gson\n#-keep class com.google.gson.** {*;}\n#-keep class com.google.gson.stream.** {*;}\n#-keep class com.google.** {\n#    <fields>;\n#    <methods>;\n#}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.sample.other2\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/nativex/MainActivity.kt",
    "content": "package com.wgllss.nativex\n\nimport android.content.Context\nimport android.widget.Toast\n\nclass MainActivity {\n\n    external fun stringFromJNI(): String\n\n    external fun callJNI()\n\n    external fun stringFromJNIwithParameter(str: String): String\n\n    external fun callNativeCallJavaMethod()\n\n    external fun callNativeCallJavaField()\n\n    external fun callNativeWithCallBack(callBack: NativeCallBack)\n\n    external fun dynamicRegisterCallBack(callBack: NativeCallBack)\n\n    external fun jniint(): Boolean\n\n    external fun getKey(): String\n\n    fun toast(context: Context) {\n        Toast.makeText(context, stringFromJNI(), Toast.LENGTH_LONG).show()\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/nativex/NativeCallBack.kt",
    "content": "package com.wgllss.nativex\n\ninterface NativeCallBack {\n    fun nmd(str: String)\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/base/BasePluginActivity.kt",
    "content": "package com.wgllss.sample.features_ui.page.base\n\nimport android.content.res.Configuration\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport androidx.activity.ComponentActivity\nimport androidx.annotation.NonNull\nimport androidx.fragment.app.FragmentActivity\nimport androidx.lifecycle.SavedStateViewModelFactory\nimport androidx.lifecycle.ViewModelProvider\nimport androidx.lifecycle.ViewModelStore\nimport com.wgllss.core.activity.BaseActivity\nimport com.wgllss.core.activity.BaseViewModePluginActivity\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.dynamic.plugin.manager.PluginResource\nimport com.wgllss.dynamic.runtime.library.WXHostActivityDelegate\nimport com.wgllss.dynamic.sample.other2.BuildConfig\n\nopen class BasePluginActivity<VM : BaseViewModel>(layoutName: String) : BaseViewModePluginActivity<VM>(layoutName, BuildConfig.LIBRARY_PACKAGE_NAME), WXHostActivityDelegate {\n\n    private var isPlugin = false\n    protected lateinit var activity: FragmentActivity\n    private lateinit var resourcesP: Resources\n    private lateinit var mDefaultFactory: ViewModelProvider.Factory\n\n    override fun getSkinResources() = PluginResource.getSkinResources()\n\n    override fun getPluginResources() = PluginResource.getPluginResources(\"classes_other2_res\")!!\n\n\n    override fun attachContext(context: FragmentActivity, resources: Resources) {\n        isPlugin = true\n        activity = context\n        resourcesP = resources\n        attachBaseContext(context)\n    }\n\n    override fun attachContext(context: ComponentActivity?, resources: Resources?) {\n\n    }\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        ResourceUtils.setContentLayout(activity, resourcesPlugin, layoutName, packageNamePlugin)\n    }\n\n    override fun bindEvent() {\n        viewModel?.run {\n            showUIDialog.observe(activity) {\n                activity.takeIf { it is BaseActivity }?.run {\n                    if (it.isShow) {\n                        (activity as BaseActivity).showloading(it.msg)\n                    } else {\n                        (activity as BaseActivity).hideLoading()\n                    }\n                }\n            }\n            errorMsgLiveData.observe(activity) {\n                onToast(it)\n            }\n        }\n    }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        if (!isPlugin) {\n            super.onCreate(savedInstanceState)\n        }\n        initX(savedInstanceState)\n    }\n\n    override fun onResume() {\n        if (!isPlugin) {\n            super.onResume()\n        }\n    }\n\n    override fun onRestart() {\n        if (!isPlugin) {\n            super.onRestart()\n        }\n        onChangeSkin(getSkinResources())\n    }\n\n    override fun onStart() {\n        if (!isPlugin) {\n            super.onStart()\n        }\n        onChangeSkin(getSkinResources())\n    }\n\n    override fun onPause() {\n        if (!isPlugin) {\n            super.onPause()\n        }\n    }\n\n    override fun onStop() {\n        if (!isPlugin) {\n            super.onStop()\n        }\n    }\n\n    override fun onDestroy() {\n        if (!isPlugin) {\n            super.onDestroy()\n        }\n    }\n\n    override fun onSaveInstanceState(outState: Bundle) {\n        if (!isPlugin) {\n            super.onSaveInstanceState(outState)\n        }\n    }\n\n    override fun onConfigurationChanged(newConfig: Configuration) {\n        if (!isPlugin) {\n            super.onConfigurationChanged(newConfig)\n        }\n    }\n\n    override fun getResources() = activity.resources\n\n    override fun <T : View> findViewById(id: Int): T {\n        return activity.findViewById(id)\n    }\n\n    override fun getIntent() = activity.intent\n\n    override fun getWindow() = activity.window\n\n    override fun setRequestedOrientation(requestedOrientation: Int) {\n        activity.requestedOrientation = requestedOrientation\n    }\n\n    override val viewModelStore: ViewModelStore\n        get() = activity.viewModelStore\n\n    override val defaultViewModelProviderFactory: ViewModelProvider.Factory\n        get() {\n            if (!this::mDefaultFactory.isInitialized) {\n                mDefaultFactory = SavedStateViewModelFactory(\n                    activity.application, activity, if (activity.intent != null) activity.intent.extras else null\n                )\n            }\n            return mDefaultFactory\n        }\n\n    override fun lazyInitValue() {\n        if (!isPlugin) {\n            super.lazyInitValue()\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/base/BasePluginComposeActivity.kt",
    "content": "package com.wgllss.sample.features_ui.page.base\n\nimport android.content.res.Configuration\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport androidx.activity.ComponentActivity\nimport androidx.fragment.app.FragmentActivity\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.SavedStateViewModelFactory\nimport androidx.lifecycle.ViewModelProvider\nimport androidx.lifecycle.ViewModelStore\nimport com.wgllss.core.activity.compose.BaseComposeActivity\nimport com.wgllss.dynamic.plugin.manager.PluginResource\nimport com.wgllss.dynamic.runtime.library.WXHostActivityDelegate\n\nopen class BasePluginComposeActivity : BaseComposeActivity(), WXHostActivityDelegate {\n\n    private var isPlugin = false\n    protected lateinit var activity: ComponentActivity\n    private lateinit var resourcesP: Resources\n    private lateinit var mDefaultFactory: ViewModelProvider.Factory\n\n    fun getSkinResources() = PluginResource.getSkinResources()\n\n//    fun getPluginResources() = PluginResource.getPluginResources(\"classes_other2_res\")!!\n\n    override fun attachContext(context: FragmentActivity, resources: Resources) {\n        isPlugin = true\n        activity = context\n        resourcesP = resources\n        attachBaseContext(context)\n    }\n\n    override fun attachContext(context: ComponentActivity, resources: Resources) {\n        isPlugin = true\n        activity = context\n        resourcesP = resources\n        attachBaseContext(context)\n    }\n\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        if (!isPlugin) {\n            super.onCreate(savedInstanceState)\n        }\n    }\n\n    override fun onResume() {\n        if (!isPlugin) {\n            super.onResume()\n        }\n    }\n\n    override fun onRestart() {\n        if (!isPlugin) {\n            super.onRestart()\n        }\n    }\n\n    override fun onStart() {\n        if (!isPlugin) {\n            super.onStart()\n        }\n    }\n\n    override fun onPause() {\n        if (!isPlugin) {\n            super.onPause()\n        }\n    }\n\n    override fun onStop() {\n        if (!isPlugin) {\n            super.onStop()\n        }\n    }\n\n    override fun onDestroy() {\n        if (!isPlugin) {\n            super.onDestroy()\n        }\n    }\n\n    override fun onSaveInstanceState(outState: Bundle) {\n        if (!isPlugin) {\n            super.onSaveInstanceState(outState)\n        }\n    }\n\n    override fun onConfigurationChanged(newConfig: Configuration) {\n        if (!isPlugin) {\n            super.onConfigurationChanged(newConfig)\n        }\n    }\n\n    override fun getResources() = activity.resources\n\n    override fun <T : View> findViewById(id: Int): T {\n        return activity.findViewById(id)\n    }\n\n    override fun getIntent() = activity.intent\n\n    override fun getWindow() = activity.window\n\n    override fun setRequestedOrientation(requestedOrientation: Int) {\n        activity.requestedOrientation = requestedOrientation\n    }\n\n    override val viewModelStore: ViewModelStore\n        get() = activity.viewModelStore\n\n    override val defaultViewModelProviderFactory: ViewModelProvider.Factory\n        get() {\n            if (!this::mDefaultFactory.isInitialized) {\n                mDefaultFactory = SavedStateViewModelFactory(\n                    activity.application, activity, if (activity.intent != null) activity.intent.extras else null\n                )\n            }\n            return mDefaultFactory\n        }\n\n    override fun lazyInitValue() {\n        if (!isPlugin) {\n\n        }\n\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/base/BasePluginFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.base\n\nimport com.wgllss.core.fragment.BaseViewModelPluginFragment\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.dynamic.sample.other2.BuildConfig\nimport com.wgllss.dynamic.plugin.manager.PluginResource\n\nopen class BasePluginFragment<VM : BaseViewModel>(layoutName: String) : BaseViewModelPluginFragment<VM>(layoutName,  BuildConfig.LIBRARY_PACKAGE_NAME) {\n\n    override fun getSkinResources() = PluginResource.getSkinResources()\n\n    override fun getPluginResources() = PluginResource.getPluginResources(\"classes_other2_res\")!!\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/base/SkinContains.kt",
    "content": "package com.wgllss.sample.features_ui.page.base\n\nobject SkinContains {\n    const val packageName: String = \"com.wgllss.sample.skin\"\n    const val packageNameHost: String = \"com.wgllss.dynamic.host.sample\"\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/activity/AudioActivity.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.activity\n\nimport android.os.Bundle\nimport com.wgllss.core.ex.setFramgment\nimport com.wgllss.sample.features_ui.page.base.BasePluginActivity\nimport com.wgllss.sample.features_ui.page.other2.fragment.SampleMusicFragment\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.PlayModel\n\nclass AudioActivity : BasePluginActivity<PlayModel>(\"activity_play\") {\n    private val playFragmentL by lazy { SampleMusicFragment() }\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        super.initControl(savedInstanceState)\n        activity.setFramgment(playFragmentL, getPluginID(\"content\"))\n        window.setBackgroundDrawable(null)\n    }\n\n    override fun lazyInitValue() {\n        viewModel.run {\n            start()\n            rootMediaId.observe(activity) {\n                it.takeIf {\n                    it.isNotEmpty()\n                }?.let {\n                    subscribeByMediaID(it)\n                    playMp3()\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/activity/ComposeDemoActivity.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.activity\n\nimport android.annotation.SuppressLint\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.widget.Toast\nimport androidx.activity.ComponentActivity\nimport androidx.activity.compose.setContent\nimport androidx.activity.viewModels\nimport androidx.compose.foundation.Image\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.border\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.ExperimentalLayoutApi\nimport androidx.compose.foundation.layout.FlowColumn\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.offset\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.size\nimport androidx.compose.foundation.layout.wrapContentHeight\nimport androidx.compose.foundation.layout.wrapContentWidth\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Add\nimport androidx.compose.material3.BottomAppBar\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.FloatingActionButton\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBar\nimport androidx.compose.material3.TopAppBarDefaults.mediumTopAppBarColors\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.livedata.observeAsState\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.SolidColor\nimport androidx.compose.ui.graphics.asImageBitmap\nimport androidx.compose.ui.layout.ContentScale\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.res.painterResource\nimport androidx.compose.ui.text.TextStyle\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.tooling.preview.Preview\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport androidx.constraintlayout.compose.ConstraintLayout\nimport androidx.lifecycle.lifecycleScope\nimport com.wgllss.sample.features_ui.page.base.BasePluginComposeActivity\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.ComposeDemoViewModel\nimport com.wx.compose1.ui.ui.theme.WXComposeXXXTheme\nimport kotlinx.coroutines.launch\n\nclass ComposeDemoActivity : BasePluginComposeActivity() {\n\n    private lateinit var viewModel: ComposeDemoViewModel\n\n    override fun attachContext(context: ComponentActivity, resources: Resources) {\n        super.attachContext(context, resources)\n        viewModel = context.viewModels<ComposeDemoViewModel>().value\n    }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        activity.lifecycleScope.launch {\n            activity.setContent {\n                WXComposeXXXTheme {\n                    baseUIXXXX({ paddingvalues ->\n                        layoutExamplexxx(paddingvalues, viewModel)\n                    }, onClick = {\n                        Toast.makeText(activity, \"我是插件里面的\", Toast.LENGTH_SHORT).show()\n                        finish()\n                    })\n                }\n            }\n        }\n        viewModel.loadBitmap(resources)\n    }\n}\n\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nfun baseUIXXXX(content: @Composable (PaddingValues) -> Unit, onClick: () -> Unit) {\n    val context = LocalContext.current\n    Scaffold(topBar = {\n        TopAppBar(modifier = Modifier\n            .fillMaxWidth()\n            .background(Color.Blue)\n            .height(81.dp), colors = mediumTopAppBarColors(\n            containerColor = Color.Blue,\n            titleContentColor = MaterialTheme.colorScheme.primary,\n        ), title = {\n            Row(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .fillMaxHeight(), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.Center\n            ) {\n                Text(text = \"compose 插件化写法\", fontSize = 18.sp, color = Color.Red, style = TextStyle.Default)\n            }\n        })\n    }, bottomBar = {\n        BottomAppBar(\n            modifier = Modifier\n                .fillMaxWidth()\n                .height(50.dp),\n            containerColor = MaterialTheme.colorScheme.primaryContainer,\n            contentColor = MaterialTheme.colorScheme.primary,\n        ) {\n            Text(\n                text = \"compose 底部栏\", fontSize = 18.sp, color = Color.Red, style = TextStyle.Default, textAlign = TextAlign.Center, modifier = Modifier.fillMaxWidth()\n            )\n        }\n    }, floatingActionButton = {\n        FloatingActionButton(onClick = onClick) {\n            Icon(\n                Icons.Default.Add, contentDescription = \"Add\", tint = Color.Red\n            )\n        }\n    }) { innerPadding ->\n        content(innerPadding)\n    }\n}\n\n\n@SuppressLint(\"RememberReturnType\")\n@OptIn(ExperimentalLayoutApi::class)\n@Composable\nfun layoutExamplexxx(innerPadding: PaddingValues, viewModel: ComposeDemoViewModel) {\n    var offset by remember { mutableStateOf(0) }\n    val bitmap = viewModel.bitmap.observeAsState()\n//    val imageBitmap = remember { bitmap.value?.asImageBitmap() }\n\n    val context = LocalContext.current\n\n    Column(\n        modifier = Modifier\n            .padding(innerPadding)\n            .background(Color.Yellow)\n            .verticalScroll(rememberScrollState())\n            .padding(5.dp)\n            .fillMaxWidth()\n            .fillMaxHeight(),\n//            verticalArrangement = Arrangement.spacedBy(16.dp),\n    ) {\n        Text(\n            modifier = Modifier\n                .padding(8.dp)\n                .offset(offset.dp, offset.dp)\n                .border(2.dp, SolidColor(Color.Green), RoundedCornerShape(20.dp))\n                .background(Color.Cyan)\n                .padding(5.dp),\n            text = \"compose 内容1:我是插件里面的\".trimIndent(),\n        )\n        Box(\n            modifier = Modifier\n                .fillMaxWidth()\n                .height(116.dp)\n                .background(Color.LightGray)\n                .padding(8.dp)\n        ) {\n            Text(\n                text = \"compose 内容2:我是插件里面的 A\", modifier = Modifier\n                    .fillMaxWidth()\n                    .height(50.dp)\n//                        .padding(8.dp, 0.dp, 0.dp, 0.dp)\n                    .background(Color.Red)\n                    .align(Alignment.TopStart), textAlign = TextAlign.Center, style = TextStyle(fontSize = 18.sp), color = Color.White\n            )\n            Text(\n                modifier = Modifier\n                    .padding(8.dp, 58.dp, 0.dp, 0.dp)\n                    .fillMaxWidth()\n                    .height(50.dp)\n//                        .size(1000.dp, 50.dp)\n                    .background(Color.Green), textAlign = TextAlign.Center, style = TextStyle(fontSize = 18.sp), color = Color.Yellow, text = \"compose 内容3:文字控件 B\"\n\n            )\n        }\n        ConstraintLayout(\n            modifier = Modifier\n                .fillMaxWidth()\n                .wrapContentHeight()\n                .padding(5.dp)\n                .background(Color.Magenta)\n                .padding(5.dp)\n        ) {\n            val (buttonID, textID) = createRefs()\n            Button(onClick = {\n                Toast.makeText(context, \"我是插件里面的？\", Toast.LENGTH_LONG).show()\n            }, modifier = Modifier.constrainAs(buttonID) {\n                top.linkTo(parent.top, margin = 16.dp)\n            }) {\n                Text(\"compose 内容4 button 控件\")\n            }\n            // Assign reference \"text\" to the Text composable\n            // and constrain it to the bottom of the Button composable\n            Text(\"compose 内容5 text 我是插件里面的 控件\",\n                Modifier\n                    .wrapContentHeight()\n                    .wrapContentWidth()\n                    .background(Color.Red)\n                    .constrainAs(textID) {\n                        top.linkTo(buttonID.bottom, margin = 16.dp)\n                    })\n        }\n\n        FlowColumn(\n            modifier = Modifier\n                .fillMaxWidth()\n                .fillMaxHeight()\n                .padding(5.dp)\n                .background(Color.White)\n                .padding(5.dp)\n        ) {\n\n            //图片 需要从插件包 apk 里面拿到 resource ，从resource 里面取出drawable，然后转化为 bitmap 再 转化为 imageBitmap 然后显示\n\n//            val imageBitmap: ImageBitmap =\n            bitmap.value?.let {\n                Image(bitmap = it.asImageBitmap(), contentDescription = \"小姐姐\", modifier = Modifier\n                    .wrapContentHeight()\n                    .wrapContentWidth()\n                    .padding(5.dp)\n                    .weight(1.0f)\n                    .clickable {\n                        Toast\n                            .makeText(context, \"Image 点击事件\", Toast.LENGTH_SHORT)\n                            .show()\n                    })\n            }\n\n\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n\n\n        }\n    }\n\n\n}\n\n//@Preview  //注释掉预览\n//@Composable\n//fun GreetingPreview() {\n//    WXComposeXXXTheme {\n//        layoutExample()\n//    }\n//}\n//\n//@OptIn(ExperimentalLayoutApi::class)\n//@Composable\n//fun layoutExample(innerPadding: PaddingValues = PaddingValues(0.dp)) {\n//    var offset by remember { mutableStateOf(0) }\n//\n//    val context = LocalContext.current\n//    Column(\n//        modifier = Modifier\n//            .padding(innerPadding)\n//            .background(Color.Yellow)\n//            .verticalScroll(rememberScrollState())\n//            .padding(5.dp)\n//            .fillMaxWidth()\n//            .fillMaxHeight(),\n////            verticalArrangement = Arrangement.spacedBy(16.dp),\n//    ) {\n//        Text(\n//            modifier = Modifier\n//                .padding(8.dp)\n//                .offset(offset.dp, offset.dp)\n//                .border(2.dp, SolidColor(Color.Green), RoundedCornerShape(20.dp))\n//                .background(Color.Cyan)\n//                .padding(5.dp),\n//            text = \"compose 内容1:文字控件\".trimIndent(),\n//        )\n//        Box(\n//            modifier = Modifier\n//                .fillMaxWidth()\n//                .height(116.dp)\n//                .background(Color.LightGray)\n//                .padding(8.dp)\n//        ) {\n//            Text(\n//                text = \"compose 内容2:文字控件 A\", modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(50.dp)\n////                        .padding(8.dp, 0.dp, 0.dp, 0.dp)\n//                    .background(Color.Red)\n//                    .align(Alignment.TopStart), textAlign = TextAlign.Center, style = TextStyle(fontSize = 18.sp), color = Color.White\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .padding(8.dp, 58.dp, 0.dp, 0.dp)\n//                    .fillMaxWidth()\n//                    .height(50.dp)\n////                        .size(1000.dp, 50.dp)\n//                    .background(Color.Green), textAlign = TextAlign.Center, style = TextStyle(fontSize = 18.sp), color = Color.Yellow, text = \"compose 内容3:文字控件 B\"\n//\n//            )\n//        }\n//        ConstraintLayout(\n//            modifier = Modifier\n//                .fillMaxWidth()\n//                .wrapContentHeight()\n//                .padding(5.dp)\n//                .background(Color.Magenta)\n//                .padding(5.dp)\n//        ) {\n//            val (buttonID, textID) = createRefs()\n//            Button(onClick = {\n//                Toast.makeText(context, \"点击我干嘛？\", Toast.LENGTH_LONG).show()\n//            }, modifier = Modifier.constrainAs(buttonID) {\n//                top.linkTo(parent.top, margin = 16.dp)\n//            }) {\n//                Text(\"compose 内容4 button 控件\")\n//            }\n//            // Assign reference \"text\" to the Text composable\n//            // and constrain it to the bottom of the Button composable\n//            Text(\"compose 内容5 text 控件\",\n//                Modifier\n//                    .wrapContentHeight()\n//                    .wrapContentWidth()\n//                    .background(Color.Red)\n//                    .constrainAs(textID) {\n//                        top.linkTo(buttonID.bottom, margin = 16.dp)\n//                    })\n//        }\n//\n//\n//        FlowColumn(\n//            modifier = Modifier\n//                .fillMaxWidth()\n//                .fillMaxHeight()\n//                .padding(5.dp)\n//                .background(Color.White)\n//                .padding(5.dp)\n//        ) {\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//            Text(\n//                modifier = Modifier\n//                    .fillMaxWidth()\n//                    .height(30.dp)\n//                    .align(Alignment.CenterHorizontally)\n//                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n//            )\n//\n//        }\n//    }\n//}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/activity/Other2Activity.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.activity\n\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.ImageView\nimport android.widget.TextView\nimport com.wgllss.core.ex.finishActivity\nimport com.wgllss.core.ex.setFramgment\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.sample.features_ui.page.base.BasePluginActivity\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.fragment.*\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.Other2ViewModel\n\nclass Other2Activity : BasePluginActivity<Other2ViewModel>(\"activity_other2\") {\n    private lateinit var txt_activity_title: TextView\n    private lateinit var view_title_bar: View\n    private lateinit var layout_content: View\n    private lateinit var img_back: ImageView\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        super.initControl(savedInstanceState)\n        txt_activity_title = findViewById(getPluginID(\"txt_activity_title\"))\n        view_title_bar = findViewById(getPluginID(\"view_title_bar\"))\n        img_back = findViewById(getPluginID(\"img_back\"))\n        layout_content = findViewById(getPluginID(\"layout_content\"))\n        window.setBackgroundDrawable(null)\n    }\n\n    override fun bindEvent() {\n        super.bindEvent()\n        img_back.setOnClickListener {\n            activity.finishActivity()\n        }\n    }\n\n    override fun initValue() {\n        val actionType = intent?.getIntExtra(\"action_type\", 0)\n        val titestr = intent?.getStringExtra(\"itemName\")\n        txt_activity_title.text = \"示例(${titestr})\"\n        val fragment = when (actionType) {\n            0 -> SampleActivityFragment()\n            1 -> SampleServiceFragment()\n            2 -> SampleBroadCastFragment()\n            3 -> SampleContentProviderFragment()\n            4 -> SampleNotificationFragment()\n            6 -> SampleSoFragment()\n            7 -> SampleDialogFragment()\n            else -> {\n                null\n            }\n        }\n        fragment?.run {\n            this@Other2Activity.activity?.setFramgment(this, getPluginID(\"layout_content\"))\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.run {\n            setImageDrawable(skinRes, \"ic_baseline_arrow_back_24\", SkinContains.packageName, img_back)\n            setBackgroundColor(skinRes, \"colorBackground\", SkinContains.packageName, layout_content)\n            setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, view_title_bar)\n            setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, txt_activity_title)\n\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/activity/Other3Activity.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.activity\n\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.ImageView\nimport android.widget.TextView\nimport com.wgllss.core.ex.finishActivity\nimport com.wgllss.core.ex.setFramgment\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.sample.features_ui.page.base.BasePluginActivity\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.fragment.SampleActivityFragment\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.Other2ViewModel\n\nclass Other3Activity : BasePluginActivity<Other2ViewModel>(\"activity_other3\") {\n    private lateinit var txt_activity_title: TextView\n    private lateinit var txt3: TextView\n    private lateinit var view_title_bar: View\n    private lateinit var layout_content: View\n    private lateinit var img_back: ImageView\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        super.initControl(savedInstanceState)\n        txt_activity_title = findViewById(getPluginID(\"txt_activity_title\"))\n        txt3 = findViewById(getPluginID(\"txt3\"))\n        view_title_bar = findViewById(getPluginID(\"view_title_bar\"))\n        img_back = findViewById(getPluginID(\"img_back\"))\n        layout_content = findViewById(getPluginID(\"layout_content\"))\n        window.setBackgroundDrawable(null)\n    }\n\n    override fun bindEvent() {\n        super.bindEvent()\n        img_back.setOnClickListener {\n            activity.finishActivity()\n        }\n    }\n\n    override fun initValue() {\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.run {\n            setImageDrawable(skinRes, \"ic_baseline_arrow_back_24\", SkinContains.packageName, img_back)\n            setBackgroundColor(skinRes, \"colorBackground\", SkinContains.packageName, layout_content)\n            setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, view_title_bar)\n            setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, txt_activity_title)\n            setTextColor(skinRes, \"colorPrimary\", SkinContains.packageName, txt3)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/activity/VideoActivity.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.activity\n\nimport android.content.pm.ActivityInfo\nimport android.content.res.Configuration\nimport android.content.res.Resources\nimport android.net.Uri\nimport android.os.Build\nimport android.os.Bundle\nimport android.view.View\nimport android.view.WindowManager\nimport android.widget.FrameLayout\nimport android.widget.ImageView\nimport android.widget.TextView\nimport com.google.android.exoplayer2.DefaultLoadControl\nimport com.google.android.exoplayer2.DefaultRenderersFactory\nimport com.google.android.exoplayer2.ExoPlayer\nimport com.google.android.exoplayer2.MediaItem\nimport com.google.android.exoplayer2.audio.AudioAttributes\nimport com.google.android.exoplayer2.source.DefaultMediaSourceFactory\nimport com.google.android.exoplayer2.source.MediaSource\nimport com.google.android.exoplayer2.source.ProgressiveMediaSource\nimport com.google.android.exoplayer2.ui.StyledPlayerView\nimport com.google.android.exoplayer2.upstream.DefaultDataSourceFactory\nimport com.wgllss.core.ex.finishActivity\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.sample.features_ui.page.base.BasePluginActivity\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.Other2ViewModel\n\nclass VideoActivity : BasePluginActivity<Other2ViewModel>(\"activity_video\") {\n    private var player: ExoPlayer? = null\n\n    private lateinit var playerView: StyledPlayerView\n    private lateinit var layout_content: FrameLayout\n    private lateinit var img_back: ImageView\n    private lateinit var layout_title: FrameLayout\n    private lateinit var title: TextView\n\n    private var startItemIndex: Int = 0\n    private var startPosition: Long = 0\n\n    private var url = \"https://stream7.iqilu.com/10339/upload_transcode/202002/18/20200218093206z8V1JuPlpe.mp4\"\n\n    companion object {\n        private const val KEY_ITEM_INDEX = \"item_index\"\n        private const val KEY_POSITION = \"position\"\n    }\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        super.initControl(savedInstanceState)\n        layout_content = findViewById(getPluginID(\"layout_content\"))\n        playerView = StyledPlayerView(activity).apply {\n            layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n        }\n        layout_content.addView(playerView)\n\n        layout_title = findViewById(getPluginID(\"layout_title\"))\n        img_back = findViewById(getPluginID(\"img_back\"))\n        title = findViewById(getPluginID(\"title\"))\n        window.setBackgroundDrawable(null)\n        if (savedInstanceState != null) {\n            startItemIndex = savedInstanceState.getInt(KEY_ITEM_INDEX)\n            startPosition = savedInstanceState.getLong(KEY_POSITION)\n        }\n    }\n\n    override fun bindEvent() {\n        super.bindEvent()\n        playerView.setFullscreenButtonClickListener {\n            requestedOrientation = if (it) {\n                window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)\n                ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE\n            } else {\n                window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)\n                ActivityInfo.SCREEN_ORIENTATION_PORTRAIT\n            }\n        }\n        playerView.setControllerVisibilityListener(StyledPlayerView.ControllerVisibilityListener {\n            if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {\n                layout_title.layoutParams.height = activity.getIntToDip(45f).toInt()\n            }\n            if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) {\n                layout_title.layoutParams.height = activity.getIntToDip(81f).toInt()\n            }\n            layout_title.visibility = it\n        })\n        img_back.setOnClickListener {\n            activity.finishActivity()\n        }\n    }\n\n    override fun initValue() {\n        title.text = \"示例视频 在线视频\"\n        playerView.setShowFastForwardButton(false)\n        playerView.setShowNextButton(false)\n        playerView.setShowPreviousButton(false)\n        playerView.setShowRewindButton(false)\n        layout_title.bringToFront()\n    }\n\n    private fun buildMediaSource(uri: Uri): MediaSource {\n        val dataSourceFactory = DefaultDataSourceFactory(activity)\n        return ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(uri))\n    }\n\n\n    private fun initializePlayer(): Boolean {\n        if (player == null) {\n            val playerBuilder = ExoPlayer.Builder(activity)\n                .setMediaSourceFactory(DefaultMediaSourceFactory(activity))\n                .setRenderersFactory(DefaultRenderersFactory(activity))\n                .setLoadControl(DefaultLoadControl())\n            player = playerBuilder.build()\n            player?.setAudioAttributes(AudioAttributes.DEFAULT, true)\n            player?.playWhenReady = true\n            playerView.player = player\n        }\n        val playUri: Uri = Uri.parse(url)\n        val mediaSource: MediaSource = buildMediaSource(playUri)\n        player?.prepare(mediaSource, true, false)\n        player?.seekTo(startPosition)\n        return true\n    }\n\n    override fun onStart() {\n        super.onStart()\n        if (Build.VERSION.SDK_INT > 23) {\n            initializePlayer()\n            if (playerView != null) {\n                playerView.onResume()\n            }\n        }\n    }\n\n    override fun onResume() {\n        super.onResume()\n        if (Build.VERSION.SDK_INT <= 23 || player == null) {\n            initializePlayer()\n            if (playerView != null) {\n                playerView.onResume()\n            }\n        }\n    }\n\n    override fun onPause() {\n        super.onPause()\n        if (Build.VERSION.SDK_INT <= 23) {\n            if (playerView != null) {\n                playerView.onPause()\n            }\n            releasePlayer()\n        }\n    }\n\n    override fun onStop() {\n        super.onStop()\n        if (Build.VERSION.SDK_INT > 23) {\n            if (playerView != null) {\n                playerView.onPause()\n            }\n            releasePlayer()\n        }\n    }\n\n    private fun releasePlayer() {\n        if (player != null) {\n            updateStartPosition()\n            player?.release()\n            player = null\n            playerView.player = null\n        }\n        playerView.adViewGroup.removeAllViews()\n    }\n\n    private fun updateStartPosition() {\n        if (player != null) {\n            startItemIndex = player!!.currentMediaItemIndex\n            startPosition = Math.max(0, player!!.contentPosition)\n        }\n    }\n\n    override fun onSaveInstanceState(outState: Bundle) {\n        super.onSaveInstanceState(outState)\n        updateStartPosition()\n        outState.putInt(KEY_ITEM_INDEX, startItemIndex)\n        outState.putLong(KEY_POSITION, startPosition)\n    }\n\n    override fun onConfigurationChanged(newConfig: Configuration) {\n        super.onConfigurationChanged(newConfig)\n        if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {\n            if (layout_title.visibility == View.VISIBLE)\n                layout_title.layoutParams.height = activity.getIntToDip(45f).toInt()\n        }\n        if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) {\n            if (layout_title.visibility == View.VISIBLE)\n                layout_title.layoutParams.height = activity.getIntToDip(81f).toInt()\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.run {\n            setImageDrawable(skinRes, \"ic_baseline_arrow_back_24\", SkinContains.packageName, img_back)\n            setBackgroundColor(skinRes, \"black\", SkinContains.packageName, layout_content)\n            setTextColor(skinRes, \"white\", SkinContains.packageName, title)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/activity/WebViewActivity.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.activity\n\nimport android.content.res.Resources\nimport android.os.Build\nimport android.os.Bundle\nimport android.view.View\nimport android.webkit.WebSettings\nimport android.webkit.WebView\nimport android.widget.ImageView\nimport android.widget.TextView\nimport com.wgllss.core.ex.finishActivity\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.sample.features_ui.page.base.BasePluginActivity\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.WebViewModel\nimport com.wgllss.sample.features_ui.page.other2.web.ImplWebViewClient\nclass WebViewActivity : BasePluginActivity<WebViewModel>(\"activity_webview\") {\n    private lateinit var txt_activity_title: TextView\n    private lateinit var view_title_bar: View\n    private lateinit var webview: WebView\n    private lateinit var img_back: ImageView\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        super.initControl(savedInstanceState)\n        txt_activity_title = findViewById(getPluginID(\"txt_activity_title\"))\n        view_title_bar = findViewById(getPluginID(\"view_title_bar\"))\n        img_back = findViewById(getPluginID(\"img_back\"))\n        webview = findViewById(getPluginID(\"webview\"))\n        window.setBackgroundDrawable(null)\n    }\n\n    override fun bindEvent() {\n        super.bindEvent()\n        img_back.setOnClickListener {\n            activity.finishActivity()\n        }\n        viewModel.livedataHtml.observe(activity) {\n            android.util.Log.e(\"WebViewActivity \", \"html:${it}\")\n            webview.loadUrl(it)\n//            webview.loadData(it, \"text/html\", \"UTF-8\")\n        }\n    }\n\n    override fun initValue() {\n        webview.apply {\n            settings.apply {\n                defaultTextEncodingName = \"UTF-8\"\n                allowFileAccess = true\n                allowContentAccess = true\n                cacheMode = WebSettings.LOAD_NO_CACHE\n                javaScriptEnabled = true\n                domStorageEnabled = true\n                setTextSize(WebSettings.TextSize.LARGEST)\n                layoutAlgorithm = WebSettings.LayoutAlgorithm.NORMAL\n                javaScriptCanOpenWindowsAutomatically = true\n                setSupportMultipleWindows(true)\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n                    mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW\n                }\n            }\n            webViewClient = ImplWebViewClient()\n        }\n        val url = intent.getStringExtra(\"web_url_key\") ?: \"\"\n        val docid = intent.getStringExtra(\"docid_key\") ?: \"\"\n        val title = intent.getStringExtra(\"title_key\") ?: \"\"\n\n        txt_activity_title.text = if (title.length > 15) {\n            title.substring(0, 15)\n        } else title\n        viewModel.getNewsDetailInfo(url, docid)\n    }\n\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.run {\n            setImageDrawable(skinRes, \"ic_baseline_arrow_back_24\", SkinContains.packageName, img_back)\n            setBackgroundColor(skinRes, \"colorBackground\", SkinContains.packageName, webview)\n            setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, view_title_bar)\n            setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, txt_activity_title)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/broadcast/TestBroadCast.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.broadcast\n\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport com.wgllss.core.widget.CommonToast\n\nclass TestBroadCast : BroadcastReceiver() {\n\n    override fun onReceive(context: Context, intent: Intent) {\n        intent?.action?.run {\n            when (this) {\n                \"action_key\" -> {\n                    android.util.Log.e(\"TestBroadCast\", \"收到广播\")\n                    CommonToast.show(\"收到广播\")\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/dialog/MyDialog.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.dialog\n\nimport android.app.Dialog\nimport android.content.Context\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.LayoutInflater\nimport com.google.android.material.button.MaterialButton\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.sample.features_ui.page.base.SkinContains\n\nclass MyDialog(\n    context: Context,\n    private val skinRes: Resources,\n    private val resources: Resources,\n    private val layoutName: String,\n    private val packageName: String\n) : Dialog(context, android.R.style.ThemeOverlay_Material_Dialog_Alert) {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        val layoutID = resources.getIdentifier(layoutName, \"layout\", packageName)\n        val xmlResourceParser = resources.getLayout(layoutID)\n        val containerView = LayoutInflater.from(context).inflate(xmlResourceParser, null)\n        setContentView(containerView)\n\n\n        val id = resources.getIdentifier(\"btn_dialog_0\", \"id\", packageName)\n        val btn = containerView.findViewById<MaterialButton>(id).apply {\n            setOnClickListener {\n                dismiss()\n            }\n        }\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, btn)\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, btn)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/fragment/SampleActivityFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.fragment\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.ImageView\nimport android.widget.TextView\nimport com.wgllss.core.ex.loadUrl\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.SampleActivityViewModel\n\nclass SampleActivityFragment : BasePluginFragment<SampleActivityViewModel>(\"fragment_activity_sample\") {\n    private lateinit var img_url: ImageView;\n    private lateinit var txt_test: TextView\n    private lateinit var btn_jump: TextView\n\n    override fun findView(context: Context, containerView: View) {\n        img_url = findViewByID(\"img_url\")\n        txt_test = findViewByID(\"txt_test\")\n        btn_jump = findViewByID(\"btn_jump\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        btn_jump.setOnClickListener {\n            activity?.run {\n                PluginManager.instance.startStandardActivity(\n                    this, \"classes_other2_res\",\n                    \"com.wgllss.sample.features_ui.page.other2.activity.Other3Activity\",\n                    \"com.wgllss.dynamic.sample.other2\"\n                )\n            }\n        }\n        viewModel.run {\n            str.observe(viewLifecycleOwner) {\n                txt_test.text = it\n            }\n            url.observe(viewLifecycleOwner) {\n                img_url.loadUrl(it)\n            }\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, txt_test)\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, btn_jump)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, btn_jump)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/fragment/SampleBroadCastFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.fragment\n\nimport android.content.*\nimport android.content.res.Resources\nimport android.os.Build\nimport android.os.Bundle\nimport android.os.IBinder\nimport android.util.Log\nimport android.view.View\nimport android.widget.TextView\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.broadcast.TestBroadCast\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.SampleActivityViewModel\n\nclass SampleBroadCastFragment : BasePluginFragment<SampleActivityViewModel>(\"fragment_broadcast_sample\"), View.OnClickListener {\n    private lateinit var btn_send_broadcast: TextView\n    private val testBroadCast by lazy { TestBroadCast() }\n\n    override fun findView(context: Context, containerView: View) {\n        btn_send_broadcast = findViewByID(\"btn_send_broadcast\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        btn_send_broadcast.setOnClickListener(this)\n        val intentFilter = IntentFilter(\"action_key\")\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) activity?.registerReceiver(testBroadCast, intentFilter, Context.RECEIVER_EXPORTED)\n        else activity?.registerReceiver(testBroadCast, intentFilter)\n    }\n\n    override fun onClick(v: View) {\n        when (v) {\n            btn_send_broadcast -> {\n                activity?.sendBroadcast(Intent(\"action_key\"))\n            }\n\n            else -> {\n\n            }\n        }\n    }\n\n    override fun onDestroyView() {\n        super.onDestroyView()\n        activity?.unregisterReceiver(testBroadCast)\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, btn_send_broadcast)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, btn_send_broadcast)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/fragment/SampleContentProviderFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.fragment\n\nimport android.annotation.SuppressLint\nimport android.content.ContentValues\nimport android.content.Context\nimport android.content.res.Resources\nimport android.database.ContentObserver\nimport android.net.Uri\nimport android.os.Bundle\nimport android.os.Handler\nimport android.view.View\nimport android.widget.TextView\nimport android.widget.Toast\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.dynamic.host.lib.provider.ProviderAuthority\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.SampleActivityViewModel\n\nclass SampleContentProviderFragment : BasePluginFragment<SampleActivityViewModel>(\"fragment_provider_sample\"), View.OnClickListener {\n    private lateinit var btn_query: TextView\n    private lateinit var btn_del: TextView\n    private lateinit var btn_update: TextView\n    private lateinit var btn_insert: TextView\n    private lateinit var txt_query_result: TextView\n\n    private val content_authority: String = StringBuilder(\"com.wgllss.dynamic.host.sample\").append(ProviderAuthority.authority).toString()\n\n    private val base_content_uri = Uri.parse(\"content://$content_authority\")\n\n    private val uri = base_content_uri.buildUpon().appendPath(\"com.wgllss.dynamic.provider.TestContentProvider\").build()\n\n    override fun findView(context: Context, containerView: View) {\n        btn_query = findViewByID(\"btn_query\")\n        btn_del = findViewByID(\"btn_del\")\n        btn_update = findViewByID(\"btn_update\")\n        btn_insert = findViewByID(\"btn_insert\")\n        txt_query_result = findViewByID(\"txt_query_result\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        btn_query.setOnClickListener(this)\n        btn_del.setOnClickListener(this)\n        btn_update.setOnClickListener(this)\n        btn_insert.setOnClickListener(this)\n        activity?.run {\n            contentResolver.registerContentObserver(uri, true, object : ContentObserver(Handler()) {\n                override fun onChange(selfChange: Boolean, uri: Uri?) {\n                    super.onChange(selfChange, uri)\n                    Toast.makeText(this@run, uri.toString() + \" onChange\", Toast.LENGTH_SHORT).show()\n                }\n            })\n        }\n    }\n\n\n    @SuppressLint(\"Range\")\n    override fun onClick(v: View) {\n        when (v) {\n            btn_query -> {\n                activity?.run {\n                    val sb = StringBuilder()\n                    //可以 把 selection 当 sql 语句使用\n                    val cursor = contentResolver.query(uri, null, \"select * from collect_tab\", null, null)\n                    val count = cursor?.count ?: 0\n                    if (count > 0) {\n                        while (cursor?.moveToNext() == true) {\n                            val name = cursor.getString(cursor.getColumnIndex(\"title\"))\n                            sb.append(name).append(\"\\n\")\n                        }\n                    }\n                    txt_query_result.text = sb.toString()\n                    cursor?.close()\n                }\n            }\n            btn_del -> {\n                activity?.run {\n                    //测试 一下把 id >0 的全部删除\n                    contentResolver.delete(uri, \"id > ?\", arrayOf(\"0\"))\n                    onClick(btn_query)\n                }\n            }\n            btn_update -> {\n                activity?.run {\n                    //可以 把 selection 当 sql 语句使用\n                    val cursor = contentResolver.query(uri, null, \"select * from collect_tab\", null, null)\n                    val count = cursor?.count ?: 0\n                    if (count > 0 && cursor?.moveToNext() == true) {\n                        //moveToNext 这里测试 只修改一个\n                        val contentValues = ContentValues()\n                        contentValues.put(\"title\", \"AAAAAAAAAAAAAAAA\")\n                        val id = cursor.getLong(cursor.getColumnIndex(\"id\"))\n                        contentResolver.update(uri, contentValues, \"id = ?\", arrayOf(id.toString()))\n                    }\n                    cursor?.close()\n                    onClick(btn_query)\n                }\n            }\n            btn_insert -> {\n                activity?.run {\n                    val contentValues = ContentValues()\n                    contentValues.put(\"id\", 1232L)\n                    contentValues.put(\"title\", \"这是一个添加的title\")\n                    contentValues.put(\"imgUrl\", \"https://img0.baidu.com/it/u=1640392721,3287967405&fm=253&fmt=auto&app=138&f=JPEG\")\n                    contentValues.put(\"createTime\", System.currentTimeMillis())\n                    contentResolver.insert(uri, contentValues)\n                    onClick(btn_query)\n                }\n            }\n            else -> {\n\n            }\n        }\n    }\n\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, btn_query, btn_del, btn_update, btn_insert)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, btn_query, btn_del, btn_update, btn_insert)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/fragment/SampleDialogFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.fragment\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.TextView\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.dynamic.sample.other2.BuildConfig\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.dialog.MyDialog\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.SampleActivityViewModel\n\nclass SampleDialogFragment : BasePluginFragment<SampleActivityViewModel>(\"fragment_dialog_sample\"), View.OnClickListener {\n    private lateinit var btn_dialog: TextView\n\n    override fun findView(context: Context, containerView: View) {\n        btn_dialog = findViewByID(\"btn_dialog\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        btn_dialog.setOnClickListener(this)\n    }\n\n    override fun onClick(v: View) {\n        when (v) {\n            btn_dialog -> {\n                activity?.run {\n                    MyDialog(this, getSkinResources(), getPluginResources(), \"dialog_sample\", BuildConfig.LIBRARY_PACKAGE_NAME).show()\n                }\n            }\n\n            else -> {\n\n            }\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, btn_dialog)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, btn_dialog)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/fragment/SampleMusicFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.fragment\n\nimport android.animation.Animator\nimport android.animation.ValueAnimator\nimport android.content.Context\nimport android.content.res.Resources\nimport android.graphics.Bitmap\nimport android.os.Bundle\nimport android.support.v4.media.MediaMetadataCompat\nimport android.support.v4.media.session.PlaybackStateCompat\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.animation.LinearInterpolator\nimport android.widget.ImageView\nimport android.widget.ProgressBar\nimport android.widget.SeekBar\nimport android.widget.TextView\nimport androidx.palette.graphics.Palette\nimport androidx.viewpager.widget.ViewPager\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.request.target.SimpleTarget\nimport com.bumptech.glide.request.transition.Transition\nimport com.google.android.material.imageview.ShapeableImageView\nimport com.google.android.material.shape.RoundedCornerTreatment\nimport com.google.android.material.shape.ShapeAppearanceModel\nimport com.wgllss.core.adapter.BasePagerAdapter\nimport com.wgllss.core.ex.dpToPx\nimport com.wgllss.core.ex.finishActivity\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.ex.loadUrl\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.sample.feature_system.music.exoplayerimpl.ExoPlayerUtils.timestampToMSS\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.PlayModel\nimport com.wgllss.ssmusic.features_system.extensions.albumArtUri\nimport com.wgllss.ssmusic.features_system.extensions.title\n\nclass SampleMusicFragment : BasePluginFragment<PlayModel>(\"fragment_play\") {\n    private lateinit var layout_play_bg: View\n    private lateinit var img_back: ImageView\n    private lateinit var mater_music_name: TextView\n    private lateinit var tv_current_time: TextView\n    private lateinit var tv_total_time: TextView\n    private lateinit var view_pager: ViewPager\n    private lateinit var sb_progress: SeekBar\n    private lateinit var iv_mode: ImageView\n    private lateinit var iv_prev: ImageView\n    private lateinit var iv_next: ImageView\n    private lateinit var iv_play: ImageView\n    private lateinit var pb_load: ProgressBar\n\n    private val views by lazy { mutableListOf<View>() }\n    private var cdAnimator: ValueAnimator? = null\n    private var pointAnimator: ValueAnimator? = null\n    private val lin by lazy { LinearInterpolator() }\n\n    lateinit var iv_center: ShapeableImageView\n    lateinit var img_circle: ImageView\n    lateinit var iv_point: ImageView\n    lateinit var cd_layout: View\n\n    override fun activitySameViewModel() = true\n\n    override fun findView(context: Context, containerView: View) {\n        img_back = findViewByID(\"img_back\")\n        mater_music_name = findViewByID(\"mater_music_name\")\n        tv_current_time = findViewByID(\"tv_current_time\")\n        tv_total_time = findViewByID(\"tv_total_time\")\n        tv_current_time = findViewByID(\"tv_current_time\")\n        sb_progress = findViewByID(\"sb_progress\")\n        iv_prev = findViewByID(\"iv_prev\")\n        iv_play = findViewByID(\"iv_play\")\n        iv_next = findViewByID(\"iv_next\")\n        layout_play_bg = findViewByID(\"layout_play_bg\")\n        view_pager = findViewByID(\"view_pager\")\n        iv_mode = findViewByID(\"iv_mode\")\n        pb_load = findViewByID(\"pb_load\")\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        initViewPage()\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        sb_progress.setOnSeekBarChangeListener(\n            object : SeekBar.OnSeekBarChangeListener {\n                override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {\n                }\n\n                override fun onStartTrackingTouch(seekBar: SeekBar?) {\n                }\n\n                override fun onStopTrackingTouch(seekBar: SeekBar) {\n                    viewModel.seek(seekBar.progress.toLong())\n                }\n            })\n        initPointAnimat()\n        initCDAnimat()\n\n        viewModel.nowPlaying.observe(viewLifecycleOwner) {\n            mater_music_name.text = it!!.title\n            iv_center.loadUrl(it.albumArtUri)\n            Glide.with(this).asBitmap()\n                .load(it.albumArtUri)\n                .into(object : SimpleTarget<Bitmap>() {\n                    override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {\n                        resource?.let { it ->\n                            Palette.from(it).generate { p ->\n                                p?.lightMutedSwatch?.let { s ->\n                                    layout_play_bg.setBackgroundColor(s.rgb)\n                                    mater_music_name.setTextColor(s.titleTextColor)\n                                    tv_total_time.setTextColor(s.bodyTextColor)\n                                    tv_current_time.setTextColor(s.bodyTextColor)\n                                }\n                            }\n                        }\n                    }\n                })\n        }\n\n        viewModel.playbackState.observe(viewLifecycleOwner) {\n            when (it.state) {\n                PlaybackStateCompat.STATE_BUFFERING -> {\n                    pb_load.visibility = View.VISIBLE\n                    iv_play.visibility = View.GONE\n                }\n                PlaybackStateCompat.STATE_PLAYING -> {\n                    pb_load.visibility = View.GONE\n                    iv_play.visibility = View.VISIBLE\n                    if (iv_point.rotation == -40f) {\n                        iv_play.isSelected = true\n                        viewModel.isPlaying = true\n                        startPointAnimat(-40f, 0f)\n                    }\n                    it.extras?.getLong(MediaMetadataCompat.METADATA_KEY_DURATION)?.let { d ->\n                        tv_total_time.text = timestampToMSS(requireContext(), d)\n                        sb_progress.max = d.toInt()\n                    }\n                }\n                PlaybackStateCompat.STATE_PAUSED -> {\n                    if (pb_load.visibility != View.GONE) {\n                        pb_load.visibility = View.GONE\n                    }\n                    if (iv_play.visibility != View.VISIBLE) {\n                        iv_play.visibility = View.VISIBLE\n                    }\n                    iv_play.isSelected = false\n                    viewModel.isPlaying = false\n                    if (iv_point.rotation == 0f) {\n                        startPointAnimat(0f, -40f)\n                    }\n                }\n            }\n        }\n        viewModel.mediaPosition.observe(viewLifecycleOwner) {\n            sb_progress.progress = it.toInt()\n            tv_current_time.text = timestampToMSS(requireContext(), it)\n        }\n\n        iv_prev.setOnClickListener {\n            viewModel.onPlayPrevious(it)\n        }\n        iv_next.setOnClickListener {\n            viewModel.onPlayNext(it)\n        }\n        iv_play.setOnClickListener {\n            viewModel.onPlay(it)\n        }\n        img_back.setOnClickListener {\n            activity?.let { it.finishActivity() }\n        }\n    }\n\n    override fun onDetach() {\n        super.onDetach()\n        cdAnimator?.removeAllUpdateListeners()\n        cdAnimator?.removeAllListeners()\n        pauseCDanimat()\n        cdAnimator = null\n        pointAnimator?.removeAllUpdateListeners()\n        pointAnimator?.removeAllListeners()\n        pointAnimator?.cancel()\n        pointAnimator = null\n    }\n\n    private fun initViewPage() {\n        val layoutID = resourcesPlugin.getIdentifier(\"music_cd_layout\", \"layout\", packageName)\n        val coverView: View = LayoutInflater.from(context).inflate(resourcesPlugin.getLayout(layoutID), null)\n        iv_point = findViewByID(coverView, \"iv_point\")\n        cd_layout = findViewByID(coverView, \"cd_layout\")\n        iv_center = findViewByID(coverView, \"iv_center2\")\n        img_circle = findViewByID(coverView, \"img_circle\")\n        iv_point.rotation = -40f\n        views.add(coverView)\n        val pagerAdapter = BasePagerAdapter(views)\n        view_pager.adapter = pagerAdapter\n\n        ResourceUtils.setImageDrawable(resources, \"icon_chanpian\", SkinContains.packageNameHost, img_circle)\n        ResourceUtils.setImageDrawable(resources, \"icon_play_point\", SkinContains.packageNameHost, iv_point)\n        ResourceUtils.setImageDrawable(resources, \"icon_cd_default_bg\", SkinContains.packageNameHost, iv_center)\n\n\n        iv_center.apply {\n            shapeAppearanceModel = ShapeAppearanceModel.builder().apply {\n                setAllCorners(RoundedCornerTreatment())\n                setAllCornerSizes(context.getIntToDip(85f))\n            }.build()\n        }\n    }\n\n    /**\n     * 初始化指针动画\n     */\n    private fun initPointAnimat() {\n        iv_point.pivotX = requireContext().dpToPx(17.0f)\n        iv_point.pivotY = requireContext().dpToPx(15.0f)\n        pointAnimator = ValueAnimator.ofFloat(0f, 0f)\n        pointAnimator?.apply {\n            setTarget(iv_point)\n            repeatCount = 0\n            duration = 300\n            interpolator = lin\n            addUpdateListener { animation ->\n                val current = animation.animatedValue as Float\n                iv_point.rotation = current\n            }\n            addListener(object : Animator.AnimatorListener {\n                override fun onAnimationStart(animation: Animator) {\n                    if (!viewModel.isPlaying) {\n                        pauseCDanimat()\n                    }\n                }\n\n                override fun onAnimationEnd(animation: Animator) {\n                    if (viewModel.isPlaying) {\n                        resumeCDanimat()\n                    }\n                }\n\n                override fun onAnimationCancel(animation: Animator) {\n                }\n\n                override fun onAnimationRepeat(animation: Animator) {\n                }\n            })\n        }\n    }\n\n    /**\n     * 开始指针动画\n     *\n     * @param from\n     * @param end\n     */\n    private fun startPointAnimat(from: Float, end: Float) {\n        if (pointAnimator != null) {\n            if (from < end) {\n                if (!viewModel.isPlaying) {\n                    return\n                }\n            } else {\n                if (viewModel.isPlaying) {\n                    return\n                }\n            }\n            pointAnimator!!.setFloatValues(from, end)\n            pointAnimator!!.start()\n        }\n    }\n\n    /**\n     * 初始化CD动画\n     */\n    private fun initCDAnimat() {\n        cdAnimator = ValueAnimator.ofFloat(cd_layout.rotation, 360f + cd_layout.rotation)\n        cdAnimator?.apply {\n            setTarget(cd_layout)\n            repeatCount = ValueAnimator.INFINITE\n            duration = 15000\n            interpolator = lin\n            addUpdateListener { animation ->\n//                setCdRodio(current)  todo\n                cd_layout.rotation = animation.animatedValue as Float\n            }\n        }\n    }\n\n    /**\n     * 开始cd动画\n     */\n    private fun resumeCDanimat() {\n        cdAnimator?.takeIf { !it.isRunning }?.run {\n            setFloatValues(cd_layout.rotation, 360f + cd_layout.rotation)\n            start()\n        }\n    }\n\n    /**\n     * 暂停CD动画\n     */\n    private fun pauseCDanimat() {\n        cdAnimator?.takeIf { it.isRunning }?.run { cancel() }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.run {\n            setImageDrawable(skinRes, \"ic_baseline_arrow_back_24\", SkinContains.packageName, img_back)\n            setImageDrawable(skinRes, \"play_mode_level_list\", SkinContains.packageName, iv_mode)\n            setImageDrawable(skinRes, \"ic_play_btn_prev\", SkinContains.packageName, iv_prev)\n            setImageDrawable(skinRes, \"ic_play_btn_next\", SkinContains.packageName, iv_next)\n            setImageDrawable(skinRes, \"play_btn_play_pause_selector\", SkinContains.packageName, iv_play)\n            sb_progress.progressDrawable = getPluginDrawable(skinRes, \"seek_bar_progress_style\", SkinContains.packageName)\n            sb_progress.thumb = getPluginDrawable(skinRes, \"seekbar_thumb\", SkinContains.packageName)\n            pb_load.indeterminateDrawable = getPluginDrawable(skinRes, \"play_load_drawable\", SkinContains.packageName)\n\n            setBackgroundDrawable(skinRes, \"circle_gray_border\", SkinContains.packageName, img_circle)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/fragment/SampleNotificationFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.fragment\n\nimport android.app.NotificationChannel\nimport android.app.NotificationManager\nimport android.app.PendingIntent\nimport android.content.Context\nimport android.content.Context.NOTIFICATION_SERVICE\nimport android.content.res.Resources\nimport android.graphics.Bitmap\nimport android.os.Build\nimport android.os.Bundle\nimport android.os.Handler\nimport android.os.Message\nimport android.view.View\nimport android.widget.TextView\nimport androidx.core.app.NotificationCompat\nimport androidx.lifecycle.lifecycleScope\nimport com.bumptech.glide.Glide\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.units.SdkIntUtils\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.sample.feature_system.globle.Constants\nimport com.wgllss.sample.feature_system.globle.Constants.NOTIFICATION_LARGE_ICON_SIZE\nimport com.wgllss.sample.feature_system.globle.Constants.glideOptions\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.SampleActivityViewModel\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\n\nclass SampleNotificationFragment : BasePluginFragment<SampleActivityViewModel>(\"fragment_notification_sample\"), View.OnClickListener {\n    private lateinit var btn_notifacaion1: TextView\n    private lateinit var btn_notifacaion2: TextView\n\n    private val mNormalChannelId = \"渠道id\" // 唯一性\n    private val mNormalChannelName = \"渠道名称\"\n    private lateinit var mManager: NotificationManager\n    private lateinit var mBuilder: NotificationCompat.Builder\n    private val mNormalNotificationId = 9001 // 通知id\n\n    private val handler by lazy { MyHandler() }\n\n    private val imgUrl = \"https://pics0.baidu.com/feed/fcfaaf51f3deb48fa4ea6c867f33d9242cf578a5.jpeg\"\n    private val pendingIntent by lazy {\n        val intent = PluginManager.instance.getStandardActivityIntent(\n            requireActivity(),\n            \"classes_other2_res\",\n            \"com.wgllss.sample.features_ui.page.other2.activity.Other3Activity\",\n            \"com.wgllss.dynamic.sample.other2\"\n        )\n        val pendingFlags = if (SdkIntUtils.isLollipop()) {\n            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE\n        } else {\n            PendingIntent.FLAG_UPDATE_CURRENT\n        }\n        PendingIntent.getActivity(requireActivity(), 0, intent, pendingFlags)\n    }\n\n\n    override fun findView(context: Context, containerView: View) {\n        btn_notifacaion1 = findViewByID(\"btn_notifacaion1\")\n        btn_notifacaion2 = findViewByID(\"btn_notifacaion2\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        btn_notifacaion1.setOnClickListener(this)\n        btn_notifacaion2.setOnClickListener(this)\n\n        activity?.run {\n            mManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager\n        }\n    }\n\n    override fun onClick(v: View) {\n        when (v) {\n            btn_notifacaion1 -> {\n                activity?.run {\n                    // 适配8.0及以上 创建渠道\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n                        val channel = NotificationChannel(mNormalChannelId, mNormalChannelName, NotificationManager.IMPORTANCE_LOW).apply {\n                            description = \"描述2222\"\n                            setShowBadge(false) // 是否在桌面显示角标\n                        }\n                        mManager.createNotificationChannel(channel)\n                    }\n                    val intent = PluginManager.instance.getStandardActivityIntent(\n                        this,\n                        \"classes_other2_res\",\n                        \"com.wgllss.sample.features_ui.page.other2.activity.Other3Activity\",\n                        \"com.wgllss.dynamic.sample.other2\"\n                    )\n                    val pendingFlags = if (SdkIntUtils.isLollipop()) {\n                        PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE\n                    } else {\n                        PendingIntent.FLAG_UPDATE_CURRENT\n                    }\n                    val pendingIntent = PendingIntent.getActivity(this, 0, intent, pendingFlags)\n                    // 构建配置\n                    mBuilder = NotificationCompat.Builder(this, mNormalChannelId)\n                        .setContentTitle(\"普通通知111\") // 标题\n                        .setContentText(\"普通通知内容2222222222222\") // 文本\n                        .setSmallIcon(Constants.defaultImgID) // 小图标\n                        .setPriority(NotificationCompat.PRIORITY_DEFAULT) // 7.0 设置优先级\n                        .setContentIntent(pendingIntent) // 跳转配置\n                        .setAutoCancel(true) // 是否自动消失（点击）or mManager.cancel(mNormalNotificationId)、cancelAll、setTimeoutAfter()\n                    // 发起通知\n                    mManager.notify(mNormalNotificationId, mBuilder.build())\n                }\n            }\n            btn_notifacaion2 -> {\n                activity?.run {\n                    // 适配8.0及以上 创建渠道\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n                        val channel = NotificationChannel(mNormalChannelId + 1, mNormalChannelName, NotificationManager.IMPORTANCE_LOW).apply {\n                            description = \"描述2222\"\n                            setShowBadge(false) // 是否在桌面显示角标\n                        }\n                        mManager.createNotificationChannel(channel)\n                    }\n                    createBuildWithBitmap()\n                }\n            }\n            else -> {\n\n            }\n        }\n    }\n\n    private inner class MyHandler : Handler() {\n        override fun handleMessage(msg: Message) {\n            when (msg.what) {\n                1 -> {\n                    createBuildWithBitmap(msg.obj as Bitmap)\n                }\n                else -> {\n\n                }\n            }\n        }\n    }\n\n    private fun createBuildWithBitmap(bitmap: Bitmap? = null) {\n        activity?.run {\n            // 构建配置\n            mBuilder = NotificationCompat.Builder(this, mNormalChannelId + 1)\n                .setContentTitle(\"普通通知3333\") // 标题\n                .setContentText(\"普通通知内容55555566666666666aaaaaaaaaaaa\") // 文本\n                .setSmallIcon(Constants.defaultImgID) // 小图标\n            if (bitmap == null) {\n                lifecycleScope.launch {\n                    val bitmap = withContext(Dispatchers.IO) {\n                        Glide.with(this@run).applyDefaultRequestOptions(glideOptions)\n                            .asBitmap()\n                            .load(imgUrl)\n                            .submit(NOTIFICATION_LARGE_ICON_SIZE, NOTIFICATION_LARGE_ICON_SIZE)\n                            .get()\n                    }\n                    bitmap?.let {\n                        handler.sendMessage(handler.obtainMessage(1, it))\n                    }\n                }\n            } else {\n                mBuilder.setLargeIcon(bitmap)\n            }\n            mBuilder.setPriority(NotificationCompat.PRIORITY_DEFAULT) // 7.0 设置优先级\n                .setContentIntent(pendingIntent) // 跳转配置\n                .setAutoCancel(true) // 是否自动消失（点击）or mManager.cancel(mNormalNotificationId)、cancelAll、setTimeoutAfter()\n            // 发起通知\n            mManager.notify(mNormalNotificationId, mBuilder.build())\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, btn_notifacaion1, btn_notifacaion2)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, btn_notifacaion1, btn_notifacaion2)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/fragment/SampleServiceFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.fragment\n\nimport android.content.Context\nimport android.content.Intent\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.TextView\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.widget.CommonToast\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.SampleActivityViewModel\n\nclass SampleServiceFragment : BasePluginFragment<SampleActivityViewModel>(\"fragment_service_sample\"), View.OnClickListener {\n    private lateinit var btn_start_service: TextView\n    private lateinit var btn_start_service2: TextView\n    private lateinit var btn_start_service3: TextView\n\n    private lateinit var btn_bind_service: TextView\n    private lateinit var btn_bind_service2: TextView\n    private lateinit var btn_bind_service3: TextView\n\n    private lateinit var btn_start_service11: TextView\n    private lateinit var btn_bind_service11: TextView\n    private lateinit var btn_bind_service_aidl: TextView\n\n    override fun findView(context: Context, containerView: View) {\n        btn_start_service = findViewByID(\"btn_start_service\")\n        btn_start_service2 = findViewByID(\"btn_start_service2\")\n        btn_start_service3 = findViewByID(\"btn_start_service3\")\n\n        btn_bind_service = findViewByID(\"btn_bind_service\")\n        btn_bind_service2 = findViewByID(\"btn_bind_service2\")\n        btn_bind_service3 = findViewByID(\"btn_bind_service3\")\n\n        btn_start_service11 = findViewByID(\"btn_start_service11\")\n        btn_bind_service11 = findViewByID(\"btn_bind_service11\")\n        btn_bind_service_aidl = findViewByID(\"btn_bind_service_aidl\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        btn_start_service.setOnClickListener(this)\n        btn_start_service2.setOnClickListener(this)\n        btn_start_service3.setOnClickListener(this)\n\n        btn_bind_service.setOnClickListener(this)\n        btn_bind_service2.setOnClickListener(this)\n        btn_bind_service3.setOnClickListener(this)\n\n        btn_start_service11.setOnClickListener(this)\n        btn_bind_service11.setOnClickListener(this)\n\n        btn_bind_service_aidl.setOnClickListener(this)\n    }\n\n    override fun onClick(v: View) {\n        when (v) {\n            btn_start_service -> {\n                activity?.run {\n                    PluginManager.instance.startPluginStartNotStickyService(\n                        this, \"classes_other2_dex\",\n                        \"com.wgllss.sample.features_ui.page.other2.service.MyService\",\n                        \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n                            putExtra(\"service_key\", \"1321531\")\n                        }\n                    )\n                }\n            }\n            btn_start_service2 -> {\n                activity?.run {\n                    PluginManager.instance.startPluginStartNotStickyService(\n                        this, \"classes_other2_dex\",\n                        \"com.wgllss.sample.features_ui.page.other2.service.MyService2\",\n                        \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n                            putExtra(\"service_key\", \"1321531\")\n                        }\n                    )\n                }\n            }\n            btn_start_service3 -> {\n                activity?.run {\n                    PluginManager.instance.startPluginStartStickyService(\n                        this, \"classes_other2_dex\",\n                        \"com.wgllss.sample.features_ui.page.other2.service.MyService3\",\n                        \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n                            putExtra(\"service_key\", \"1321531\")\n                        }\n                    )\n                }\n            }\n            btn_bind_service -> {\n                activity?.run {\n                    PluginManager.instance.bindNotStickyService(this, \"classes_other2_dex\", \"com.wgllss.dynamic.sample.other2\", \"com.wgllss.sample.features_ui.page.other2.service.MyService\")\n                }\n            }\n            btn_bind_service2 -> {\n                activity?.run {\n                    PluginManager.instance.bindNotStickyService(this, \"classes_other2_dex\", \"com.wgllss.dynamic.sample.other2\", \"com.wgllss.sample.features_ui.page.other2.service.MyService2\")\n                }\n            }\n            btn_bind_service3 -> {\n                activity?.run {\n                    PluginManager.instance.bindStickyService(this, \"classes_other2_dex\", \"com.wgllss.dynamic.sample.other2\", \"com.wgllss.sample.features_ui.page.other2.service.MyService3\")\n                }\n            }\n            btn_start_service11 -> {\n                activity?.run {\n                    PluginManager.instance.startPluginProcessStartNotStickyService(\n                        this, \"classes_other2_dex\",\n                        \"com.wgllss.sample.features_ui.page.other2.service.MyProcessService\",\n                        \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n                            putExtra(\"service_key\", \"1321531\")\n                        }\n                    )\n                }\n            }\n            btn_bind_service11 -> {\n                activity?.run {\n                    PluginManager.instance.bindProcessNotStickyService(\n                        this, \"classes_other2_dex\",\n                        \"com.wgllss.dynamic.sample.other2\",\n                        \"com.wgllss.sample.features_ui.page.other2.service.MyProcessService\",\n                    )\n                }\n            }\n            btn_bind_service_aidl -> {\n                activity?.run {\n                    val result = PluginManager.instance.onProcessAidlNotStickyServiceCallBack(\n                        \"com.wgllss.sample.features_ui.page.other2.service.MyProcessService\",\n                        1\n                    )\n                    CommonToast.show(result)\n                }\n            }\n            else -> {\n\n            }\n        }\n    }\n\n    override fun onDestroyView() {\n        super.onDestroyView()\n        activity?.run {\n            PluginManager.instance.unBindNotStickyService(this)\n            PluginManager.instance.unBindNotStickyService(this)\n            PluginManager.instance.unBindStickyService(this)\n            PluginManager.instance.unBindProcessNotStickyService(this)\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, btn_start_service3, btn_start_service2, btn_start_service, btn_bind_service, btn_bind_service2, btn_bind_service3, btn_start_service11, btn_bind_service11, btn_bind_service_aidl)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, btn_start_service3, btn_start_service2, btn_start_service, btn_bind_service, btn_bind_service2, btn_bind_service3, btn_start_service11, btn_bind_service11, btn_bind_service_aidl)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/fragment/SampleSoFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.fragment\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.TextView\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.SampleActivityViewModel\n\nclass SampleSoFragment : BasePluginFragment<SampleActivityViewModel>(\"fragment_so_sample\"), View.OnClickListener {\n    private lateinit var btn_so: TextView\n\n    override fun findView(context: Context, containerView: View) {\n        btn_so = findViewByID(\"btn_so\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        btn_so.setOnClickListener(this)\n    }\n\n    override fun onClick(v: View) {\n        when (v) {\n            btn_so -> {\n                activity?.run {\n                    viewModel.downloadSo(this)\n                }\n            }\n\n            else -> {\n\n            }\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, btn_so)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, btn_so)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/service/MyProcessService.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.service\n\nimport android.app.Service\nimport android.content.Context\nimport android.content.Intent\nimport android.os.IBinder\nimport com.wgllss.dynamic.runtime.library.WXHostServiceDelegate\n\nclass MyProcessService : WXHostServiceDelegate {\n\n    private lateinit var context: Context\n\n    override fun attachBaseContext(newBase: Context) {\n        this.context = newBase\n        android.util.Log.e(\"MyProcessService\", \"START_NOT_STICKY attachBaseContext\")\n    }\n\n    override fun onBind(intent: Intent?): IBinder? {\n        android.util.Log.e(\"MyProcessService\", \"START_NOT_STICKY onBind\")\n        return null\n    }\n\n    override fun onCreate() {\n        android.util.Log.e(\"MyProcessService\", \"START_NOT_STICKY onCreate\")\n    }\n\n    override fun onStart(intent: Intent?, startId: Int) {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyProcessService\", \"START_NOT_STICKY onStart: str :$str\")\n    }\n\n    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyProcessService\", \"START_NOT_STICKY onStartCommand: str :$str\")\n\n\n        return Service.START_NOT_STICKY\n    }\n\n    override fun onUnbind(intent: Intent?): Boolean {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyProcessService\", \"START_NOT_STICKY onUnbind: str :$str\")\n        return false\n    }\n\n    override fun onDestroy() {\n        android.util.Log.e(\"MyProcessService\", \"START_NOT_STICKY onDestroy: \")\n    }\n\n    override fun callMethodByID(methodID: Int): String {\n        return when (methodID) {\n            1 -> {\n                android.util.Log.e(\"MyProcessService\", \" 换种方式实现 模拟 AIDL 方法调用 \")\n                \"AIDL 调用返回值\"\n            }\n            else -> {\n                \"\"\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/service/MyService.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.service\n\nimport android.app.Service\nimport android.content.Context\nimport android.content.Intent\nimport android.os.IBinder\nimport com.wgllss.dynamic.runtime.library.WXHostServiceDelegate\n\nclass MyService : WXHostServiceDelegate {\n\n    private lateinit var context: Context\n\n    override fun attachBaseContext(newBase: Context) {\n        this.context = newBase\n        android.util.Log.e(\"MyService\", \"START_NOT_STICKY attachBaseContext\")\n    }\n\n    override fun onBind(intent: Intent?): IBinder? {\n        android.util.Log.e(\"MyService\", \"START_NOT_STICKY onBind\")\n        return null\n    }\n\n    override fun onCreate() {\n        android.util.Log.e(\"MyService\", \"START_NOT_STICKY onCreate\")\n    }\n\n    override fun onStart(intent: Intent?, startId: Int) {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService\", \"START_NOT_STICKY onStart: str :$str\")\n    }\n\n    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService\", \"START_NOT_STICKY onStartCommand: str :$str\")\n\n\n        return Service.START_NOT_STICKY\n    }\n\n    override fun onUnbind(intent: Intent?): Boolean {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService\", \"START_NOT_STICKY onUnbind: str :$str\")\n        return false\n    }\n\n    override fun onDestroy() {\n        android.util.Log.e(\"MyService\", \"START_NOT_STICKY onDestroy: \")\n    }\n\n    override fun callMethodByID(methodID: Int): String {\n        return when (methodID) {\n            1 -> {\n                \"\"\n            }\n            else -> {\n                \"\"\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/service/MyService2.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.service\n\nimport android.app.Service\nimport android.content.Context\nimport android.content.Intent\nimport android.os.IBinder\nimport com.wgllss.dynamic.runtime.library.WXHostServiceDelegate\n\nclass MyService2 : WXHostServiceDelegate {\n\n    private lateinit var context: Context\n\n    override fun attachBaseContext(newBase: Context) {\n        this.context = newBase\n        android.util.Log.e(\"MyService2\", \"START_NOT_STICKY attachBaseContext\")\n    }\n\n    override fun onBind(intent: Intent?): IBinder? {\n        android.util.Log.e(\"MyService2\", \"START_NOT_STICKY onBind\")\n        return null\n    }\n\n    override fun onCreate() {\n        android.util.Log.e(\"MyService2\", \"START_NOT_STICKY onCreate\")\n    }\n\n    override fun onStart(intent: Intent?, startId: Int) {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService2\", \"START_NOT_STICKY onStart: str :$str\")\n    }\n\n    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService2\", \"START_NOT_STICKY onStartCommand: str :$str\")\n\n\n        return Service.START_NOT_STICKY\n    }\n\n    override fun onUnbind(intent: Intent?): Boolean {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService2\", \"START_NOT_STICKY onUnbind: str :$str\")\n        return false\n    }\n\n    override fun onDestroy() {\n        android.util.Log.e(\"MyService2\", \"START_NOT_STICKY onDestroy: \")\n    }\n\n    override fun callMethodByID(methodID: Int): String {\n        return when (methodID) {\n            1 -> {\n                \"\"\n            }\n            else -> {\n                \"\"\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/service/MyService3.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.service\n\nimport android.app.Service\nimport android.content.Context\nimport android.content.Intent\nimport android.os.IBinder\nimport com.wgllss.dynamic.runtime.library.WXHostServiceDelegate\n\nclass MyService3 : WXHostServiceDelegate {\n\n    private lateinit var context: Context\n\n    override fun attachBaseContext(newBase: Context) {\n        this.context = newBase\n        android.util.Log.e(\"MyService3\", \"START_STICKY attachBaseContext\")\n    }\n\n    override fun onBind(intent: Intent?): IBinder? {\n        android.util.Log.e(\"MyService3\", \"START_STICKY onBind\")\n        return null\n    }\n\n    override fun onCreate() {\n        android.util.Log.e(\"MyService3\", \"START_STICKY onCreate\")\n    }\n\n    override fun onStart(intent: Intent?, startId: Int) {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService3\", \"START_STICKY onStart: str :$str\")\n    }\n\n    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService3\", \"START_STICKY onStartCommand: str :$str\")\n\n\n        return Service.START_STICKY\n    }\n\n    override fun onUnbind(intent: Intent?): Boolean {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService3\", \"START_STICKY onUnbind: str :$str\")\n        return false\n    }\n\n    override fun onDestroy() {\n        android.util.Log.e(\"MyService3\", \"START_STICKY onDestroy: \")\n    }\n\n    override fun callMethodByID(methodID: Int): String {\n        return when (methodID) {\n            1 -> {\n                \"\"\n            }\n            else -> {\n                \"\"\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/viewmodel/ComposeDemoViewModel.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.viewmodel\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.graphics.Bitmap\nimport android.os.Build\nimport androidx.lifecycle.LiveData\nimport androidx.lifecycle.MutableLiveData\nimport androidx.lifecycle.viewModelScope\nimport com.wgllss.core.units.ImageUtils\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.units.WLog\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.core.widget.CommonToast\nimport com.wgllss.dynamic.host.lib.download.DynamicDownloadPlugin\nimport com.wgllss.dynamic.host.lib.impl.WXDynamicLoader\nimport com.wgllss.nativex.MainActivity\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.flow.onEach\nimport kotlinx.coroutines.launch\n\nclass ComposeDemoViewModel : BaseViewModel() {\n\n    private val _bitmap by lazy { MutableLiveData<Bitmap>() }\n    val bitmap: LiveData<Bitmap> = _bitmap\n\n    override fun start() {\n    }\n\n    fun loadBitmap(resources: Resources) {\n        viewModelScope.launch {\n            flow {\n                //注释掉的是拿取插件 皮肤下的 player_background_real.webp 图片 drawable 然后转成 bitmap\n//                    val bitmap = ImageUtils.drawableToBitmap(ResourceUtils.getPluginDrawable(getSkinResources(), \"player_background_real\", SkinContains.packageName))\n                val bitmap = ImageUtils.drawableToBitmap(ResourceUtils.getPluginDrawable(resources, \"loading\", SkinContains.packageNameHost))\n                emit(bitmap)\n            }.flowOnIOAndCatch().collect {\n                _bitmap.value = it\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/viewmodel/Other2ViewModel.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.viewmodel\n\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.core.viewmodel.BaseViewModel\n\nclass Other2ViewModel : BaseViewModel() {\n\n    val data222 = MutableLiveData<String>()\n\n    override fun start() {\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/viewmodel/PlayModel.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.viewmodel\n\nimport android.os.Bundle\nimport android.support.v4.media.MediaBrowserCompat\nimport android.support.v4.media.MediaMetadataCompat\nimport android.support.v4.media.session.PlaybackStateCompat\nimport android.view.View\nimport androidx.core.net.toUri\nimport androidx.lifecycle.*\nimport com.google.android.exoplayer2.extractor.mp4.Track.Transformation\nimport com.wgllss.core.units.AppGlobals\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.sample.feature_system.globle.Constants.MEDIA_ARTNETWORK_URL_KEY\nimport com.wgllss.sample.feature_system.globle.Constants.MEDIA_AUTHOR_KEY\nimport com.wgllss.sample.feature_system.globle.Constants.MEDIA_ID_KEY\nimport com.wgllss.sample.feature_system.globle.Constants.MEDIA_TITLE_KEY\nimport com.wgllss.sample.feature_system.globle.Constants.MEDIA_URL_KEY\nimport com.wgllss.sample.feature_system.music.exoplayerimpl.MusicServiceConnection\nimport com.wgllss.sample.feature_system.music.extensions.currentPlayBackPosition\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.flow.collect\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.launch\n\nclass PlayModel : BaseViewModel() {\n\n    private val musicServiceConnectionL by lazy { MusicServiceConnection.getInstance(AppGlobals.sApplication) }\n    var isPlaying: Boolean = false\n    val nowPlaying by lazy { MutableLiveData<MediaMetadataCompat>() }\n    val playbackState by lazy { MutableLiveData<PlaybackStateCompat>() }\n    private var updatePosition = true\n    val mediaPosition by lazy { MutableLiveData(0L) }\n\n    private val transportControls by lazy { musicServiceConnectionL.transportControls }\n\n    //播放列表\n    val liveData: MutableLiveData<MutableList<MediaBrowserCompat.MediaItem>> by lazy { MutableLiveData<MutableList<MediaBrowserCompat.MediaItem>>() }\n    val rootMediaId: LiveData<String> = musicServiceConnectionL.isConnected.map { isConnected ->\n        if (isConnected) {\n            musicServiceConnectionL.rootMediaId\n        } else {\n            \"\"\n        }\n\n//        musicServiceConnectionL.isConnected\n//        Transformations.map(musicServiceConnectionL.isConnected) { isConnected ->\n//            if (isConnected) {\n//                musicServiceConnectionL.rootMediaId\n//            } else {\n//                null\n//            }\n//        }\n    }\n\n    override fun start() {\n        musicServiceConnectionL.startConnect()\n    }\n\n    private val subscriptionCallback by lazy {\n        object : MediaBrowserCompat.SubscriptionCallback() {\n            override fun onChildrenLoaded(parentId: String, children: MutableList<MediaBrowserCompat.MediaItem>) {\n                liveData.value = children\n            }\n        }\n    }\n\n    fun subscribeByMediaID(mediaId: String) {\n        musicServiceConnectionL.run {\n            subscribe(mediaId, subscriptionCallback)\n            playbackState.observeForever(playbackStateObserver)\n            nowPlaying.observeForever(mediaMetadataObserver)\n            checkPlaybackPosition()\n        }\n    }\n\n    //从指定位置开始播放\n    fun seek(pos: Long) {\n        musicServiceConnectionL.transportControls.seekTo(pos)\n    }\n\n    fun playMp3() {\n        val url = \"https://storage.googleapis.com/automotive-media/Keys_To_The_Kingdom.mp3\"\n        val extras = Bundle().apply {\n            putString(MEDIA_ID_KEY, \"123156\")\n            putString(MEDIA_TITLE_KEY, \"Keys To The Kingdom\")\n            putString(MEDIA_AUTHOR_KEY, \"The 126ers\")\n            putString(MEDIA_ARTNETWORK_URL_KEY, \"https://storage.googleapis.com/automotive-media/album_art_3.jpg\")\n            putString(MEDIA_URL_KEY, url)\n        }\n        transportControls.prepareFromUri(url.toUri(), extras)\n    }\n\n    fun onPlay(it: View) {\n        isPlaying = !it.isSelected\n        musicServiceConnectionL.transportControls.run {\n            if (it.isSelected) pause() else {\n                play()\n            }\n        }\n    }\n\n    fun onPlayNext(it: View) {\n        musicServiceConnectionL.transportControls.skipToNext()\n    }\n\n\n    fun onPlayPrevious(it: View) {\n        musicServiceConnectionL.transportControls.skipToPrevious()\n    }\n\n    private val playbackStateObserver = Observer<PlaybackStateCompat> {\n        playbackState.postValue(it)\n    }\n\n    private val mediaMetadataObserver = Observer<MediaMetadataCompat> {\n        nowPlaying.postValue(it)\n    }\n\n    private fun checkPlaybackPosition() {\n        viewModelScope.launch {\n            flow {\n                while (updatePosition) {\n                    val currPosition = playbackState?.value?.currentPlayBackPosition ?: 0\n                    if (mediaPosition.value != currPosition) mediaPosition.postValue(currPosition)\n                    delay(998)\n                }\n                emit(0)\n            }.flowOnIOAndCatch().collect()\n        }\n    }\n\n    override fun onCleared() {\n        super.onCleared()\n        musicServiceConnectionL.playbackState.removeObserver(playbackStateObserver)\n        musicServiceConnectionL.nowPlaying.removeObserver(mediaMetadataObserver)\n        updatePosition = false\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/viewmodel/SampleActivityViewModel.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.viewmodel\n\nimport android.content.Context\nimport android.os.Build\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.core.units.WLog\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.core.widget.CommonToast\nimport com.wgllss.dynamic.host.lib.download.DynamicDownloadPlugin\nimport com.wgllss.dynamic.host.lib.impl.WXDynamicLoader\nimport com.wgllss.nativex.MainActivity\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.flow.onEach\n\nclass SampleActivityViewModel : BaseViewModel() {\n\n    val str by lazy { MutableLiveData(\" 我这是示例数据\") }\n    val url by lazy { MutableLiveData(\"https://dingyue.ws.126.net/2024/0408/901a74abj00sbly7z0090d000gh00h6m.jpg\") }\n\n\n    override fun start() {\n    }\n\n    fun downloadSo(context: Context) {\n        flowAsyncWorkOnViewModelScopeLaunch {\n            flow {\n                //todo so 一般比较大了，很难做到只有 40~50k左右，故不放在 版本控制里面去，需要单独业务区控制 下载完成之后 再调用\n                //todo 如果启动就下载 ，需要耗费大量下载时间与资源，影响启动性能\n                val face = WXDynamicLoader.instance.loader.getDownloadFace()\n                DynamicDownloadPlugin(face).initDynamicPlugin(context, StringBuilder().append(face.getHostL()).append(\"WXDynamicPlugin\").append(\"/so/lib/\").append(Build.CPU_ABI).append(\"/libnativex.so\").toString(), \"so\", \"libnativex.so\").run {\n                    System.load(fileAbsolutePath)\n                }\n                emit(0)\n            }.onEach {\n                errorMsgLiveData.postValue(MainActivity().stringFromJNI())\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/viewmodel/WebViewModel.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.viewmodel\n\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.core.units.AppGlobals\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.sample.datasource.repository.NewsRepository\nimport kotlinx.coroutines.flow.onEach\n\nclass WebViewModel : BaseViewModel() {\n\n    private val newsRepositoryL by lazy { NewsRepository.getInstance(AppGlobals.sApplication) }\n    val livedataHtml by lazy { MutableLiveData<String>() }\n\n\n    override fun start() {\n    }\n\n    fun getNewsDetailInfo(url: String, fileName: String) {\n        flowAsyncWorkOnViewModelScopeLaunch {\n            newsRepositoryL.getNewsDetailInfo(url, fileName)\n                .onEach {\n                    livedataHtml.postValue(it)\n                }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/web/ImplWebViewClient.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.web\n\nimport android.os.Build\nimport android.webkit.WebResourceRequest\nimport android.webkit.WebResourceResponse\nimport android.webkit.WebView\nimport android.webkit.WebViewClient\nimport androidx.annotation.RequiresApi\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.sample.feature_system.savestatus.MMKVHelp\n\nclass ImplWebViewClient : WebViewClient() {\n\n\n    private val strOfflineResources by lazy { MMKVHelp.getJsPath() }\n    private val webResAssets by lazy { PluginManager.instance.getWebRes().assets }\n\n    override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?) = true\n\n    override fun onPageFinished(view: WebView, url: String) {\n        super.onPageFinished(view, url)\n        view.loadUrl(\"javascript:loadImage()\")\n    }\n\n    @RequiresApi(Build.VERSION_CODES.N)\n    override fun shouldInterceptRequest(view: WebView, request: WebResourceRequest?): WebResourceResponse? {\n        val url = request?.url.toString()\n        val lastSlash: Int = url.lastIndexOf(\"/\")\n        if (lastSlash != -1) {\n            val suffix: String = url.substring(lastSlash + 1)\n            if (suffix.endsWith(\".css\")) {\n                if (strOfflineResources.contains(suffix)) {\n                    val mimeType = \"text/css\"\n                    val offlineRes = \"css/\"\n                    val inputs = webResAssets.open(\"$offlineRes$suffix\")\n                    return WebResourceResponse(mimeType, \"UTF-8\", inputs)\n                } else {\n                    android.util.Log.e(\"ImplWebViewClient\", \"request css :${url}\")\n                }\n            }\n            if (suffix.endsWith(\".js\")) {\n                if (strOfflineResources.contains(suffix)) {\n                    val mimeType = \"application/x-javascript\"\n                    val offlineRes = \"js/\"\n                    val inputs = webResAssets.open(\"$offlineRes$suffix\")\n                    return WebResourceResponse(mimeType, \"UTF-8\", inputs)\n                } else {\n                    android.util.Log.e(\"ImplWebViewClient\", \"request js :${url}\")\n                }\n            }\n        }\n        return super.shouldInterceptRequest(view, request)\n    }\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/theme/Color.kt",
    "content": "package com.wx.compose.plugin.theme\n\nimport androidx.compose.ui.graphics.Color\n\nval Purple80 = Color(0xFFD0BCFF)\nval PurpleGrey80 = Color(0xFFCCC2DC)\nval Pink80 = Color(0xFFEFB8C8)\n\nval Purple40 = Color(0xFF6650a4)\nval PurpleGrey40 = Color(0xFF625b71)\nval Pink40 = Color(0xFF7D5260)"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/theme/Theme.kt",
    "content": "package com.wx.compose1.ui.ui.theme\n\nimport android.os.Build\nimport androidx.compose.foundation.isSystemInDarkTheme\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.dynamicDarkColorScheme\nimport androidx.compose.material3.dynamicLightColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.platform.LocalContext\nimport com.wx.compose.plugin.theme.Pink40\nimport com.wx.compose.plugin.theme.Pink80\nimport com.wx.compose.plugin.theme.Purple40\nimport com.wx.compose.plugin.theme.Purple80\nimport com.wx.compose.plugin.theme.PurpleGrey40\nimport com.wx.compose.plugin.theme.PurpleGrey80\nimport com.wx.compose.plugin.theme.Typography\n\nprivate val DarkColorScheme = darkColorScheme(\n    primary = Purple80,\n    secondary = PurpleGrey80,\n    tertiary = Pink80\n)\n\nprivate val LightColorScheme = lightColorScheme(\n    primary = Purple40,\n    secondary = PurpleGrey40,\n    tertiary = Pink40\n\n    /* Other default colors to override\n    background = Color(0xFFFFFBFE),\n    surface = Color(0xFFFFFBFE),\n    onPrimary = Color.White,\n    onSecondary = Color.White,\n    onTertiary = Color.White,\n    onBackground = Color(0xFF1C1B1F),\n    onSurface = Color(0xFF1C1B1F),\n    */\n)\n\n@Composable\nfun WXComposeXXXTheme(\n    darkTheme: Boolean = isSystemInDarkTheme(),\n    // Dynamic color is available on Android 12+\n    dynamicColor: Boolean = true,\n    content: @Composable () -> Unit\n) {\n    val colorScheme = when {\n        dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {\n            val context = LocalContext.current\n            if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)\n        }\n\n        darkTheme -> DarkColorScheme\n        else -> LightColorScheme\n    }\n\n    MaterialTheme(\n        colorScheme = colorScheme,\n        typography = Typography,\n        content = content\n    )\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/theme/Type.kt",
    "content": "package com.wx.compose.plugin.theme\n\nimport androidx.compose.material3.Typography\nimport androidx.compose.ui.text.TextStyle\nimport androidx.compose.ui.text.font.FontFamily\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.unit.sp\n\n// Set of Material typography styles to start with\nval Typography = Typography(\n    bodyLarge = TextStyle(\n        fontFamily = FontFamily.Default,\n        fontWeight = FontWeight.Normal,\n        fontSize = 16.sp,\n        lineHeight = 24.sp,\n        letterSpacing = 0.5.sp\n    )\n    /* Other default text styles to override\n    titleLarge = TextStyle(\n        fontFamily = FontFamily.Default,\n        fontWeight = FontWeight.Normal,\n        fontSize = 22.sp,\n        lineHeight = 28.sp,\n        letterSpacing = 0.sp\n    ),\n    labelSmall = TextStyle(\n        fontFamily = FontFamily.Default,\n        fontWeight = FontWeight.Medium,\n        fontSize = 11.sp,\n        lineHeight = 16.sp,\n        letterSpacing = 0.5.sp\n    )\n    */\n)"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"blue.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#4A148C</color>\n    <color name=\"colorTrackCheck\">#4527A0</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#4A148C</color>\n    <color name=\"colorTrackCheck\">#4527A0</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#B0B0B0</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"brown.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#827717</color>\n    <color name=\"colorTrackCheck\">#999717</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#827717</color>\n    <color name=\"colorTrackCheck\">#999717</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#B0B0B0</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"dark_blue.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#330066</color>\n    <color name=\"colorTrackCheck\">#003366</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#330066</color>\n    <color name=\"colorTrackCheck\">#003366</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#B0B0B0</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"skin_dark_green.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#158bb8</color>\n    <color name=\"colorTrackCheck\">#1C6bb8</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#158bb8</color>\n    <color name=\"colorTrackCheck\">#1C6bb8</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#B0B0B0</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"dark_red.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#55000A</color>\n    <color name=\"colorTrackCheck\">#93000A</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#55000A</color>\n    <color name=\"colorTrackCheck\">#93000A</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#B0B0B0</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"skin_green.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#007A00</color>\n    <color name=\"colorTrackCheck\">#5dbe8a</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#007A00</color>\n    <color name=\"colorTrackCheck\">#5dbe8a</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#B0B0B0</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"light_green.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#3AAF00</color>\n    <color name=\"colorTrackCheck\">#3deD99</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#3AAF00</color>\n    <color name=\"colorTrackCheck\">#3deD99</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#FAFAFA</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"orange.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#F57F17</color>\n    <color name=\"colorTrackCheck\">#FF9917</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#F57F17</color>\n    <color name=\"colorTrackCheck\">#FF9917</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#FAFAFA</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"pink.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#D0006A</color>\n    <color name=\"colorTrackCheck\">#EC507A</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#D0006A</color>\n    <color name=\"colorTrackCheck\">#EC507A</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#FAFAFA</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"red_green.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#FF0000</color>\n    <color name=\"colorTrackCheck\">#CD4329</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#FF0000</color>\n    <color name=\"colorTrackCheck\">#CD4329</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#FAFAFA</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.host.lib\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildFeatures {\n        buildConfig true\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\ndependencies {\n//    implementation 'io.github.wgllss:Wgllss-Dynamic-Host-Version-Lib:1.0.0.7'\n//    implementation 'io.github.wgllss:Wgllss-Dynamic-Host-Constant-Lib:1.0.0.6'\n//    implementation 'io.github.wgllss:Wgllss-Dynamic-Host-VersionK-Lib:1.0.00'\n\n    implementation 'io.github.wgllss:Wgllss-Dynamic-Host-Protobuf-Lib:1.0.0.7'\n    implementation project(path: ':Wgllss-Dynamic-Host-Version-Lib')\n    implementation libs.androidx.activity\n    implementation libs.protobuf\n    implementation libs.okio\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/androidTest/java/com/wgllss/dynamic/host/wxdynamicpluginsdk/ExampleInstrumentedTest.kt",
    "content": "package com.wgllss.dynamic.host.wxdynamicpluginsdk\n\nimport androidx.test.platform.app.InstrumentationRegistry\nimport androidx.test.ext.junit.runners.AndroidJUnit4\n\nimport org.junit.Test\nimport org.junit.runner.RunWith\n\nimport org.junit.Assert.*\n\n/**\n * Instrumented test, which will execute on an Android device.\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\n@RunWith(AndroidJUnit4::class)\nclass ExampleInstrumentedTest {\n    @Test\n    fun useAppContext() {\n        // Context of the app under test.\n        val appContext = InstrumentationRegistry.getInstrumentation().targetContext\n        assertEquals(\"com.wgllss.dynamic.host.wxdynamicpluginsdk\", appContext.packageName)\n    }\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.host.lib\">\n    <application>\n        <provider\n            android:name=\"com.wgllss.dynamic.host.lib.provider.WXPluginContentProvider\"\n            android:exported=\"true\"\n            android:authorities=\"${applicationId}.wx.dynamic.plugin.author\" />\n    </application>\n</manifest>"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/classloader/PluginKey.java",
    "content": "package com.wgllss.dynamic.host.lib.classloader;\n\npublic class PluginKey {\n    public static final String pluginApkPathKey = \"PLUGIN_APK_PATH_KEY\";\n    public static final String activityNameKey = \"ACTIVITY_NAME_KEY\";\n    public static final String privatePackageKey = \"PRIVATE_PACKAGE_KEY\";\n    public static final String serviceNameKey = \"PLUGIN_SERVICE_NAME_KEY\";\n}\n"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/classloader/WXClassLoader.java",
    "content": "package com.wgllss.dynamic.host.lib.classloader;\n\nimport dalvik.system.DexClassLoader;\n\npublic class WXClassLoader extends DexClassLoader {\n    protected ClassLoader parent;\n\n    public WXClassLoader(String dexPath, String optimizedDirectory, ClassLoader parent) {\n        super(dexPath, optimizedDirectory, null, parent);\n        this.parent = parent;\n    }\n\n    public WXClassLoader(String dexPath, String optimizedDirectory, String librarySearchPath, ClassLoader parent) {\n        super(dexPath, optimizedDirectory, librarySearchPath, parent);\n        this.parent = parent;\n    }\n\n    public <T> T getInterface(Class<T> clazz, String className) {\n        try {\n            Class<?> interfaceImplementClass = loadClass(className);\n            Object interfaceImplement = interfaceImplementClass.newInstance();\n            return clazz.cast(interfaceImplement);\n        } catch (ClassNotFoundException | InstantiationException\n                | ClassCastException | IllegalAccessException e) {\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/download/DownLoadResult.kt",
    "content": "package com.wgllss.dynamic.host.lib.download\n\nimport android.content.Context\n\ndata class DownLoadResult(\n    val context: Context,\n    val contentKey: String,\n    val fileAbsolutePath: String\n)\n"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/download/DynamicDownloadPlugin.kt",
    "content": "package com.wgllss.dynamic.host.lib.download\n\nimport android.content.Context\nimport com.wgllss.dynamic.host.lib.protobuf.PluginMode\nimport okio.buffer\nimport okio.sink\nimport okio.source\nimport java.io.File\nimport java.net.HttpURLConnection\nimport java.net.Proxy\nimport java.net.URL\nimport java.security.SecureRandom\nimport java.security.cert.CertificateException\nimport java.security.cert.X509Certificate\nimport javax.net.ssl.*\n\nclass DynamicDownloadPlugin(private val face: IDynamicDownLoadFace) {\n    companion object {\n        private var mSSLSocketFactory: SSLSocketFactory? = null\n\n        /**\n         * 信任所有host\n         */\n        private val hnv = HostnameVerifier { _, _ -> true }\n\n        /**\n         * 设置https\n         *\n         * @author :Atar\n         * @createTime:2015-9-17下午4:57:39\n         * @version:1.0.0\n         * @modifyTime:\n         * @modifyAuthor:\n         * @description:\n         */\n        private fun trustAllHosts() {\n            try {\n                val trustAllCerts = arrayOf<TrustManager>(object : X509TrustManager {\n                    override fun getAcceptedIssuers(): Array<X509Certificate> {\n                        return arrayOf()\n                    }\n\n                    @Throws(CertificateException::class)\n                    override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {\n                    }\n\n                    @Throws(CertificateException::class)\n                    override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) {\n                    }\n                })\n                val sc = SSLContext.getInstance(\"TLS\")\n                sc.init(null, trustAllCerts, SecureRandom())\n                if (mSSLSocketFactory == null) {\n                    mSSLSocketFactory = sc.socketFactory\n                }\n                HttpsURLConnection.setDefaultHostnameVerifier(hnv)\n                HttpsURLConnection.setDefaultSSLSocketFactory(mSSLSocketFactory)\n            } catch (e: Exception) {\n                e.printStackTrace()\n            }\n        }\n\n        private fun getHttpURLConnection(url: URL, connectTimeOut: Int): HttpURLConnection? {\n            return try {\n                if (\"https\" == url.protocol) {\n                    trustAllHosts()\n                    (url.openConnection(Proxy.NO_PROXY) as HttpsURLConnection).apply {\n                        HttpsURLConnection.setDefaultHostnameVerifier(hnv)\n                        hostnameVerifier = hnv\n                        HttpsURLConnection.setDefaultSSLSocketFactory(mSSLSocketFactory)\n                        sslSocketFactory = mSSLSocketFactory\n                        connectTimeout = 3 * connectTimeOut\n                        readTimeout = 3 * connectTimeOut\n                    }\n                } else {\n                    (url.openConnection(Proxy.NO_PROXY) as HttpURLConnection).apply {\n                        connectTimeout = connectTimeOut\n                        readTimeout = connectTimeOut\n                    }\n                }\n            } catch (e: Exception) {\n                null\n            }\n        }\n\n        fun setConHead(httpConnection: HttpURLConnection) {\n            httpConnection.apply {\n                setRequestProperty(\"Accept\", \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\")\n                setRequestProperty(\"Upgrade-Insecure-Requests\", \"1\")\n                setRequestProperty(\"User-Agent\", \"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Mobile Safari/537.36\")\n                setRequestProperty(\"Accept-Language\", \"en-us,en;q=0.7,zh-cn;q=0.3\")\n//            httpConnection.setRequestProperty(\"Accept-Encoding\", \"gzip, deflate, br\")\n                setRequestProperty(\"Accept-Charset\", \"ISO-8859-1,utf-8;q=0.7,*;q=0.7\")\n                setRequestProperty(\"Keep-Alive\", \"300\")\n                setRequestProperty(\"Connection\", \"keep-alive\")\n                setRequestProperty(\"Cache-Control\", \"max-age=0\")\n            }\n        }\n    }\n\n    fun initDynamicByKey(context: Context, key: String, downloadDir: String, downLoadFileName: String) = initDynamicPlugin(context, face.getMapDLU()[key]!!, downloadDir, downLoadFileName)\n\n    fun initDynamicPlugin(context: Context, downUrl: String, downloadDir: String, downLoadFileName: String): DownLoadResult {\n        face?.run {\n            val sb = StringBuilder(context.filesDir.absolutePath)\n                .append(File.separator)\n                .append(downloadDir)\n                .append(File.separator)\n                .append(downLoadFileName)\n            val file = File(sb.toString())\n            if (file.exists()) {\n                if (isDebug())\n                    android.util.Log.e(\"DynamicDownloadPlugin\", \"本地已经存在 $downLoadFileName\")\n                return DownLoadResult(context, downLoadFileName, file.absolutePath)\n            } else {\n                val fileDir = File(file.parent)\n                if (!fileDir.exists()) {\n                    fileDir.mkdirs()\n                }\n                val startTime = if (isDebug()) System.currentTimeMillis() else 0\n                if (context != null && downUrl != null && downUrl.isNotEmpty()) {\n                    var conn: HttpURLConnection? = null\n                    try {\n                        val urlS = if (downUrl.contains(\"http\")) downUrl else \"${getBaseL()}$downUrl\"\n                        val url = URL(urlS)\n                        conn = getHttpURLConnection(url, 5000)!!\n                        val inputStream = conn.inputStream\n                        if (inputStream != null) {\n                            val sinkBuffer = file.sink().buffer()\n                            val bufferedSource = inputStream.source().buffer()\n                            sinkBuffer.write(bufferedSource.readByteArray())\n                            sinkBuffer.close()\n                            bufferedSource.close()\n                            inputStream.close()\n                        }\n                        if (isDebug()) {\n                            val endTime = System.currentTimeMillis()\n                            val times: Long = endTime - startTime\n                            android.util.Log.e(\"DynamicDownloadPlugin\", \"$downLoadFileName 下载成功,耗时:$times ms \")\n                        }\n                        return DownLoadResult(context, downLoadFileName, file.absolutePath)\n                    } catch (e: Exception) {\n                        e.printStackTrace()\n                    } finally {\n                        conn?.disconnect()\n                    }\n                }\n            }\n        }\n        return DownLoadResult(context, \" \", \" \")\n    }\n\n    fun getPluginInfo(): PluginMode._PluginMode {\n        var buf: ByteArray? = null\n        face?.run {\n            val startTime = if (isDebug()) System.currentTimeMillis() else 0\n            var httpConnection: HttpURLConnection? = null\n            try {\n                if (isDebug()) {\n                    android.util.Log.e(\"DynamicDownloadPlugin\", \"${getOtherDLU()}\")\n                }\n                val url = URL(getOtherDLU())\n                httpConnection = getHttpURLConnection(url, 5000)!!\n                setConHead(httpConnection)\n                httpConnection.connect()\n                val responseCode = httpConnection.responseCode\n                if (responseCode == HttpURLConnection.HTTP_OK || responseCode == HttpURLConnection.HTTP_PARTIAL) {\n                    val instream = httpConnection.inputStream\n                    if (instream != null) {\n                        val bufferedSource = instream.source().buffer()\n                        buf = bufferedSource.readByteArray()\n                        bufferedSource.close()\n                        instream.close()\n                    }\n                }\n            } catch (e: Exception) {\n                e.printStackTrace()\n            } finally {\n                httpConnection?.disconnect() // 关闭连接\n            }\n            if (isDebug()) {\n                val endTime = System.currentTimeMillis()\n                val times: Long = endTime - startTime\n                android.util.Log.e(\"DynamicDownloadPlugin\", \"请求网络耗时:$times ms \")\n            }\n        }\n        val startTime = if (face.isDebug()) System.currentTimeMillis() else 0\n        var pm: PluginMode._PluginMode? = null\n        try {\n            buf?.let {\n                pm = PluginMode._PluginMode.parseFrom(buf);\n            }\n        } catch (e: Exception) {\n            e.printStackTrace()\n        }\n        if (face.isDebug()) {\n            val endTime = System.currentTimeMillis()\n            val times: Long = endTime - startTime\n            android.util.Log.e(\"DynamicDownloadPlugin\", \"protobuf 序列号耗时:$times ms \")\n        }\n        return pm!!\n    }\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/download/IDynamicDownLoadFace.kt",
    "content": "package com.wgllss.dynamic.host.lib.download\n\ninterface IDynamicDownLoadFace {\n\n    fun getHostL(): String\n\n    fun getBaseL(): String\n\n    fun isDebug(): Boolean\n\n    fun getOtherDLU(): String\n\n    fun getMapDLU(): MutableMap<String, String>\n\n    fun getLoadVersionClassName(): String\n\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/home/ILoadHome.kt",
    "content": "package com.wgllss.dynamic.host.lib.home\n\nimport android.content.Context\n\ninterface ILoadHome {\n\n    /**总版本号*/\n    fun loadHomeCreate(context: Context)\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/impl/WXDynamicLoader.kt",
    "content": "package com.wgllss.dynamic.host.lib.impl\n\nimport android.content.Context\nimport android.text.TextUtils\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.dldir\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.versionFile\nimport com.wgllss.dynamic.host.lib.download.IDynamicDownLoadFace\nimport com.wgllss.dynamic.host.lib.loader.ILoaderManager\nimport com.wgllss.dynamic.host.lib.loader_base.DynamicManageUtils.getClassImpl\nimport com.wgllss.dynamic.host.lib.loader_base.DynamicManageUtils.getDlfn\nimport com.wgllss.dynamic.host.lib.loader_base.DynamicManageUtils.getDxFile\nimport com.wgllss.dynamic.host.lib.version.ILoaderVersion\nimport java.io.File\n\nclass WXDynamicLoader private constructor() {\n\n    lateinit var context: Context\n\n    lateinit var loader: ILoaderManager\n\n    companion object {\n        val instance by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { WXDynamicLoader() }\n    }\n\n    fun installPlugin(context: Context, face: IDynamicDownLoadFace, vImpl: ILoaderVersion) {\n        this.context = context\n        val file = getDxFile(context, dldir, versionFile).apply { setReadOnly() }\n        val optPath = context.getDir(\"dex\", Context.MODE_PRIVATE).absolutePath\n        val parent = javaClass.classLoader!!\n        File(file.parent).takeIf { !it.exists() }?.mkdirs()\n        getClassImpl(ILoaderVersion::class.java, face.getLoadVersionClassName(), file, optPath, parent, file.exists(), vImpl)?.run {\n            val fileCdldd = getDxFile(context, dldir, getDlfn(getCdlfd().second, getCdlfd().third))\n            val faceImpl = getClassImpl(IDynamicDownLoadFace::class.java, getCdlfd().first, fileCdldd, optPath, parent, fileCdldd.exists() && !TextUtils.isEmpty(getCdlfd().first), face)\n            val fileClmd = getDxFile(context, dldir, getDlfn(getClmd().second, getClmd().third))\n            loader = getClassImpl(ILoaderManager::class.java, getClmd().first, fileClmd, optPath, parent, fileClmd.exists() && !TextUtils.isEmpty(getClmd().first), WXLoaderManagerImpl())\n            loader.initDynamicLoader(context, getV(), getClfd(), getClmd(), getCdlfd(), getMapDLU(), getOthers(), faceImpl, isMustShowLoading())\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/impl/WXLoaderManagerImpl.kt",
    "content": "package com.wgllss.dynamic.host.lib.impl\n\nimport com.wgllss.dynamic.host.lib.loader_base.BaseLoaderManagerImpl\n\nclass WXLoaderManagerImpl : BaseLoaderManagerImpl() {\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/loader/ILoaderManager.kt",
    "content": "package com.wgllss.dynamic.host.lib.loader\n\nimport android.content.Context\nimport com.wgllss.dynamic.host.lib.download.IDynamicDownLoadFace\nimport kotlinx.coroutines.Deferred\n\ninterface ILoaderManager {\n\n\n    /**\n     *@param context : 上下文\n     *@param v : 总版本号\n     *@param clfd : 首次引导页 dex\n     *@param clmd : 加载插件管理器 dex\n     *@param cdlfd : 下载接口实现 dex\n     *@param mapDlu : app 必备的 （从启动到首页第一个界面） dex map集合\n     *@param cotd : app 必备的 （从启动到首页第一个界面）之外的其他 dex map集合\n     */\n    fun initDynamicLoader(context: Context, v: Int, clfd: Triple<String, String, Int>, clmd: Triple<String, String, Int>, cdlfd: Triple<String, String, Int>, mapDlu: MutableMap<String, Pair<String, Int>>, cotd: MutableMap<String, Int>, faceImpl: IDynamicDownLoadFace, isMustShowLoading: Boolean)\n\n    /**\n     * class load first dex\n     * 首次加载 实现 dex\n     * first:启动页之后的第一个首页实现类\n     * second:加载本地文件名称\n     * third:版本号\n     **/\n    fun getClfdImpl(): Triple<String, String, Int>\n\n    /**\n     * class load manager  dex\n     * 加载插件管理器 实现 dex\n     * first:启动页之后的第一个首页实现类\n     * second:加载本地文件名称\n     * third:版本号\n     **/\n    fun getClmdImpl(): Triple<String, String, Int>\n\n    /**\n     * class download face dex\n     * 下载接口实现 实现 dex\n     * first:启动页之后的第一个首页实现类\n     * second:加载本地文件名称\n     * third:版本号\n     **/\n    fun getCdlfdImpl(): Triple<String, String, Int>\n\n    /** 必备的 （从启动到首页第一个界面） dex map集合 **/\n    fun getMapDluImpl(): MutableMap<String, Pair<String, Int>>\n\n    /** 必备的 （从启动到首页第一个界面）之外的其他 dex map集合 **/\n    fun getCotdImpl(): MutableMap<String, Int>\n\n    /** 是否有旧的版本文件需要删除*/\n    fun hasOldFileNeedDelete(): Boolean\n\n    fun getDownloadFace(): IDynamicDownLoadFace\n\n    fun initDynamicRunTime(context: Context, contentKey: String, fileAbsolutePath: String)\n\n    fun initHomeCreate(context: Context, classLoader: ClassLoader)\n\n    fun isFShowLoadFlag(): Boolean\n\n    fun getOtherLoadStatus(): MutableMap<String, Deferred<Boolean>>\n\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/loader_base/BaseLoaderManagerImpl.kt",
    "content": "package com.wgllss.dynamic.host.lib.loader_base\n\nimport android.app.Application\nimport android.content.Context\nimport android.net.Proxy\nimport android.os.Build\nimport android.text.TextUtils\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.CDLFD\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.CLMD\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.FIRST\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.HOME\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.MLK\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.VERSION\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.dldir\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.fstdir\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.versionFile\nimport com.wgllss.dynamic.host.lib.download.DynamicDownloadPlugin\nimport com.wgllss.dynamic.host.lib.download.IDynamicDownLoadFace\nimport com.wgllss.dynamic.host.lib.home.ILoadHome\nimport com.wgllss.dynamic.host.lib.loader.ILoaderManager\nimport com.wgllss.dynamic.host.lib.loader_base.DynamicManageUtils.getDlfn\nimport com.wgllss.dynamic.host.lib.runtime.ContainerClassLoader\nimport com.wgllss.dynamic.host.lib.runtime.MultiDynamicRuntime\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Deferred\nimport kotlinx.coroutines.GlobalScope\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.launch\n\nopen class BaseLoaderManagerImpl : ILoaderManager {\n\n    /**总版本号*/\n    protected var v = 1000\n\n    /**宿主版本号*/\n    protected var hostV = 1000\n\n    /** class load first dex 首次加载 实现 dex first:启动页之后的第一个首页实现类 second:加载本地文件名称 third:版本号 **/\n    protected lateinit var clfd: Triple<String, String, Int>\n\n    /** 加载插件管理器 dex **/\n    protected lateinit var clmd: Triple<String, String, Int>\n\n    /** 下载接口实现 dex **/\n    protected lateinit var cdlfd: Triple<String, String, Int>\n\n    /** 必备的 （从启动到首页第一个界面） dex map集合 **/\n    protected lateinit var mapDlu: MutableMap<String, Pair<String, Int>>\n\n    /** 必备的 （从启动到首页第一个界面）之外的其他 dex map集合 **/\n    protected lateinit var cotd: MutableMap<String, Int>\n\n    protected lateinit var faceImpl: IDynamicDownLoadFace\n\n    protected val mapOthers by lazy { mutableMapOf<String, String>() }\n\n    /** 第一次安装 需要下载other ,监听其他插件是否加载完成，可能进入首页后，others 内的插件还没有下载完成，没有加载，导致第一次点击崩溃 **/\n    protected val mapOthersIsLoadComplete by lazy { mutableMapOf<String, Deferred<Boolean>>() }\n    protected val obj by lazy { Any() }\n\n    /** 是否显示启动加载页面标志 **/\n    protected var isShowLoadFlag = false\n\n    /** 代表前面的 lib dx 是否加载完成 ，只有加载完成了之后才能加载 others**/\n    @Volatile\n    protected var libIsLoadComplete = false\n\n    @Volatile\n    protected var firstLoadSuccess = false\n\n    /** 是否有旧的文件需要删除*/\n    protected var hasOldFileDelete = false\n    protected var libLoadCount: Int = 0\n\n    override fun getClfdImpl() = clfd\n\n    override fun getClmdImpl() = clmd\n\n    override fun getCdlfdImpl() = cdlfd\n\n    override fun getMapDluImpl() = mapDlu\n\n    override fun getCotdImpl() = cotd\n\n    override fun hasOldFileNeedDelete() = hasOldFileDelete\n\n    override fun getDownloadFace() = faceImpl\n\n    override fun isFShowLoadFlag() = isShowLoadFlag\n\n    override fun getOtherLoadStatus() = mapOthersIsLoadComplete\n\n\n    override fun initDynamicLoader(\n        context: Context,\n        v: Int,\n        clfd: Triple<String, String, Int>,\n        clmd: Triple<String, String, Int>,\n        cdlfd: Triple<String, String, Int>,\n        mapDlu: MutableMap<String, Pair<String, Int>>,\n        cotd: MutableMap<String, Int>,\n        faceImpl: IDynamicDownLoadFace,\n        isMustShowLoading: Boolean\n    ) {\n        this.v = v\n\n        this.clfd = clfd\n        this.clmd = clmd\n        this.cdlfd = cdlfd\n\n        this.mapDlu = mapDlu\n        this.cotd = cotd\n        this.faceImpl = faceImpl\n        isShowLoadFlag = isMustShowLoading\n        mapDlu.forEach { (key, value) ->\n            initPlugin(context, key, getDlfn(value.first, value.second))\n        }\n        checkConfig(context)\n    }\n\n    override fun initDynamicRunTime(context: Context, contentKey: String, fileAbsolutePath: String) {\n        val oDexPath = context.getDir(\"dex\", Application.MODE_PRIVATE).absolutePath\n        MultiDynamicRuntime.loadContainerDex(contentKey, fileAbsolutePath, oDexPath)\n    }\n\n    override fun initHomeCreate(context: Context, classLoader: ClassLoader) {\n        libIsLoadComplete = true\n        classLoader.parent?.takeIf {\n            it is ContainerClassLoader\n        }?.run {\n            (this as ContainerClassLoader).getInterface(ILoadHome::class.java, clfd.first).run {\n                loadHomeCreate(context)\n                synchronized(obj) {\n                    mapOthers.forEach {\n                        initDynamicRunTime(context, it.key, it.value)\n                    }\n                }\n            }\n        }\n    }\n\n    private fun initPlugin(context: Context, key: String, fileName: String) {\n        if (key == HOME) initPluginFirst(context, fileName) else initPluginLib(context, fileName)\n    }\n\n    /**\n     * @author:Wgllss\n     * 1:先检查是否有下载的启动页,有则加载\n     * 2:再检查是否下载过主页，有则加载\n     * 3:如果没有下载的主页，则加载默认load 页面，在展示load 页面是 下载所有插件\n     * @param context:上下文\n     * @param fileName:加载的首页本地文件名字\n     */\n    private fun initPluginFirst(context: Context, fileName: String) {\n        DynamicManageUtils.getDxFile(context, dldir, getDlfn(clfd.second, clfd.third)).takeIf { it.exists() }?.run {\n            initDynamicRunTime(context, MLK, absolutePath)\n            libLoadCount++\n            libIsLoadComplete = libLoadCount == mapDlu.size\n            return\n        }\n\n        if (!isShowLoadFlag) {\n            DynamicManageUtils.getDxFile(context, dldir, fileName).takeIf { it.exists() }?.run {\n                initDynamicRunTime(context, MLK, absolutePath)\n                firstLoadSuccess = true\n                libLoadCount++\n                libIsLoadComplete = libLoadCount == mapDlu.size\n                return\n            }\n        }\n        DynamicManageUtils.getDxFile(context, fstdir, getDlfn(clfd.second, clfd.third)).run {\n            takeUnless { it.exists() }?.run {\n                DynamicManageUtils.copyFileFromAssetsToSD(context, this, getDlfn(clfd.second, clfd.third))\n            }\n            initDynamicRunTime(context, MLK, absolutePath)\n        }\n    }\n\n    private fun initPluginLib(context: Context, fileName: String) {\n        if (isShowLoadFlag) return\n        val file = DynamicManageUtils.getDxFile(context, dldir, fileName)\n        if (file.exists()) {\n            initDynamicRunTime(context, fileName, file.absolutePath)\n            libLoadCount++\n        } else {\n            isShowLoadFlag = true\n        }\n    }\n\n\n    /**\n     * 检查配置\n     */\n    private fun checkConfig(context: Context) {\n        GlobalScope.launch {\n            try {\n                var needDownloadOther = false\n                cotd?.forEach { (key, v) ->\n                    val file = DynamicManageUtils.getDxFile(context, dldir, \"${key}_${v}\")\n                    if (file.exists()) {\n                        if (!key.contains(\"_res\"))\n                            initDynamicRunTime(context, key, file.absolutePath)\n                    } else {\n                        needDownloadOther = true\n                    }\n                }\n//                if (isWifiProxy(context)) {\n//                    return@launch\n//                }\n                val dynamicHelper = DynamicDownloadPlugin(faceImpl)\n                val result = dynamicHelper.getPluginInfo()\n                result?.run {\n                    log(\"BaseLoaderManagerImpl.v  ${this@BaseLoaderManagerImpl.v} v:$v libIsLoadComplete:$libIsLoadComplete\")\n                    val isFirstLoad = this@BaseLoaderManagerImpl.v == 1000\n                    if (isFirstLoad && this@BaseLoaderManagerImpl.v == v) {\n                        /**  第一次加载第一版版 时 的 others  **/\n                        othersList?.forEach {\n                            it.run {\n                                doOthers(context, this@launch, dynamicHelper, dlu, getDlfn(dlu, v), isApkRes, needDownloadOther) { }\n                            }\n                        }\n                        return@launch\n                    }\n\n                    othersList?.forEach {\n                        it.run {\n                            v.takeIf { ver ->\n                                !cotd.containsKey(dlu) || needDownloadOther || isFirstLoad || ver > cotd[dlu]!!\n                            }?.run {\n                                val isCondition = (isFirstLoad || needDownloadOther || firstLoadSuccess)\n                                doOthers(context, this@launch, dynamicHelper, dlu, getDlfn(dlu, v), isApkRes, isCondition) {\n                                    if (isFirstLoad || needDownloadOther) {\n                                        cotd[it.dlu] = v\n                                    }\n                                }\n                            }\n                        }\n                    }\n\n                    takeIf { v > this@BaseLoaderManagerImpl.v }?.run {\n                        async {\n                            DynamicManageUtils.getDxFile(context, dldir, versionFile).takeIf { it.exists() }?.delete()\n                            dynamicHelper.initDynamicByKey(context, VERSION, dldir, versionFile)\n                        }\n                        takeIf { clfd.v > this@BaseLoaderManagerImpl.clfd.third }?.run { async { dynamicHelper.initDynamicByKey(context, FIRST, dldir, getDlfn(clfd.dlu, clfd.v)) } }\n                        takeIf { clmd.v > this@BaseLoaderManagerImpl.clmd.third }?.run { async { dynamicHelper.initDynamicByKey(context, CLMD, dldir, getDlfn(clmd.dlu, clmd.v)) } }\n                        takeIf { cdlfd.v > this@BaseLoaderManagerImpl.cdlfd.third }?.run { async { dynamicHelper.initDynamicByKey(context, CDLFD, dldir, getDlfn(cdlfd.dlu, cdlfd.v)) } }\n                        mapDl.forEach { (key, p) ->\n                            p.takeIf { p.v > mapDlu[key]!!.second }?.run { async { dynamicHelper.initDynamicByKey(context, key, dldir, getDlfn(dlu, v)) } }\n                        }\n                    }\n                    /** 当本地版本和 线上版本一样时候 就检测有没有久的可以删除的文件 **/\n                    hasOldFileDelete = v == this@BaseLoaderManagerImpl.v\n                }\n            } catch (e: Exception) {\n                e.printStackTrace()\n            }\n        }\n    }\n\n    /**\n     * 统一处理others 插件\n     * @param context :上下文\n     * @param scope :协程域\n     * @param dynamicHelper :下载帮助工具类\n     * @param dlu :下载地址\n     * @param dlfn :下载本地文件名\n     * @param isApkRes :是否是纯apk的res资源\n     * @param dlfn :下载本地文件名\n     * @param contentKey :runtime 装载的key\n     * @param ifCondition :是否达到立即装载条件\n     * @param apkElseBlock :是apk纯资源res Apk 处理方式\n     */\n    private fun doOthers(context: Context, scope: CoroutineScope, dynamicHelper: DynamicDownloadPlugin, dlu: String, dlfn: String, isApkRes: Boolean, ifCondition: Boolean = true, apkElseBlock: () -> Unit) {\n        mapOthersIsLoadComplete[dlu] = scope.async {\n            var result = false\n            dynamicHelper.initDynamicPlugin(context, dlu, dldir, dlfn).run {\n                if (!TextUtils.isEmpty(fileAbsolutePath) && !TextUtils.isEmpty(fileAbsolutePath.trim())) {\n                    if (!isApkRes) synchronized(obj) {\n                        if (ifCondition) {\n                            if (libIsLoadComplete) {\n                                initDynamicRunTime(context, dlu, fileAbsolutePath)\n                            } else {\n                                mapOthers[dlu] = fileAbsolutePath\n                            }\n                        }\n                    }\n                    else apkElseBlock.invoke()\n                    result = true\n                }\n            }\n            result\n        }\n    }\n\n    private fun isWifiProxy(context: Context): Boolean {\n        val isIcsOr = Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH\n        var proxyAddress: String\n        var proxyPort: Int\n        if (isIcsOr) {\n            proxyAddress = System.getProperty(\"http.proxyHost\") ?: \"\" //获取代理主机\n            val portStr = System.getProperty(\"http.proxyPort\") ?: \"-1\"\n            proxyPort = portStr.toInt()\n        } else {\n            proxyAddress = Proxy.getHost(context) ?: \"\" //获取代理主机\n            proxyPort = Proxy.getPort(context)\n        }\n        return !TextUtils.isEmpty(proxyAddress) && proxyPort != -1\n    }\n\n    private fun log(message: String) {\n        if (faceImpl.isDebug())\n            android.util.Log.e(\"BaseLoaderManagerImpl\", message)\n    }\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/loader_base/DynamicManageUtils.kt",
    "content": "package com.wgllss.dynamic.host.lib.loader_base\n\nimport android.content.Context\nimport com.wgllss.dynamic.host.lib.classloader.WXClassLoader\nimport java.io.File\nimport java.io.FileOutputStream\nimport java.io.InputStream\n\nobject DynamicManageUtils {\n\n    fun getDlfn(k: String, v: Int): String {\n        return StringBuilder().append(k).append(\"_\").append(v).toString()\n    }\n\n    fun getDxFile(context: Context, dir: String, fileName: String) = File(StringBuilder(context.filesDir.absolutePath).append(File.separator).append(dir).append(File.separator).append(fileName).toString()).apply { setReadOnly() }\n\n    fun copyFileFromAssetsToSD(context: Context, desFile: File, fileName: String): Boolean {\n        var copyIsFinish = false\n        try {\n            val fileDir = File(desFile.parent)\n            if (!fileDir.exists()) {\n                fileDir.mkdirs()\n            }\n            val inputStream: InputStream = context.assets.open(fileName)\n            val fos = FileOutputStream(desFile)\n            val temp = ByteArray(1024)\n            var i = 0\n            while (inputStream.read(temp).also { i = it } > 0) {\n                fos.write(temp, 0, i) // 写入到文件\n            }\n            fos.close()\n            inputStream.close()\n            copyIsFinish = true\n        } catch (e: Exception) {\n            e.printStackTrace()\n        }\n        return copyIsFinish\n    }\n\n    fun <T> getClassImpl(cls: Class<T>, className: String, existsFile: File, optPath: String, parent: ClassLoader, ifCondition: Boolean, default: T): T {\n        return if (ifCondition) WXClassLoader(existsFile.absolutePath, optPath, parent).getInterface(cls, className)\n        else default\n    }\n\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/provider/ProviderAuthority.kt",
    "content": "package com.wgllss.dynamic.host.lib.provider\n\nobject ProviderAuthority {\n    const val authority = \".wx.dynamic.plugin.author\"\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/provider/WXHostContentProviderDelegate.kt",
    "content": "package com.wgllss.dynamic.host.lib.provider\n\nimport android.content.ContentValues\nimport android.database.Cursor\nimport android.net.Uri\n\ninterface WXHostContentProviderDelegate {\n\n    fun onCreate(): Boolean\n\n    fun query(uri: Uri?, projection: Array<String>?, selection: String?, selectionArgs: Array<String>?, sortOrder: String?): Cursor?\n\n    fun getType(uri: Uri?): String?\n\n\n    fun insert(uri: Uri?, values: ContentValues?): Uri?\n\n\n    fun delete(uri: Uri?, selection: String?, selectionArgs: Array<String>?): Int\n\n\n    fun update(uri: Uri?, values: ContentValues?, selection: String?, selectionArgs: Array<String>?): Int\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/provider/WXPluginContentProvider.kt",
    "content": "package com.wgllss.dynamic.host.lib.provider\n\nimport android.content.ContentProvider\nimport android.content.ContentValues\nimport android.database.Cursor\nimport android.net.Uri\n\nclass WXPluginContentProvider : ContentProvider() {\n\n    override fun onCreate(): Boolean {\n        return false\n    }\n\n    override fun query(uri: Uri, projection: Array<String>?, selection: String?, selectionArgs: Array<String>?, sortOrder: String?): Cursor? {\n        uri.path?.let {\n            return WXProviderManager.instance.containsKey(it)?.query(uri, projection, selection, selectionArgs, sortOrder)\n        }\n        return null\n    }\n\n    override fun getType(uri: Uri): String? {\n        uri.path?.let {\n            return WXProviderManager.instance.containsKey(it)?.getType(uri)\n        }\n        return null\n    }\n\n    override fun insert(uri: Uri, values: ContentValues?): Uri? {\n        uri.path?.let {\n            return WXProviderManager.instance.containsKey(it)?.insert(uri, values)\n        }\n        return null\n    }\n\n    override fun delete(uri: Uri, selection: String?, selectionArgs: Array<String>?): Int {\n        uri.path?.let {\n            return WXProviderManager.instance.containsKey(it)?.delete(uri, selection, selectionArgs) ?: 0\n        }\n        return 0\n    }\n\n    override fun update(uri: Uri, values: ContentValues?, selection: String?, selectionArgs: Array<String>?): Int {\n        uri.path?.let {\n            return WXProviderManager.instance.containsKey(it)?.update(uri, values, selection, selectionArgs) ?: 0\n        }\n        return 0\n    }\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/provider/WXProviderManager.kt",
    "content": "package com.wgllss.dynamic.host.lib.provider\n\nclass WXProviderManager private constructor() {\n\n    private val map by lazy { HashMap<String, WXHostContentProviderDelegate>() }\n\n    companion object {\n        val instance by lazy { WXProviderManager() }\n    }\n\n    fun containsKey(key: String): WXHostContentProviderDelegate? {\n        val newKey = key.replace(\"/\", \"\")\n        if (map.containsKey(newKey)) {\n            return map[newKey]\n        }\n        return null\n    }\n\n    fun addContentProvider(providerDelegateName: WXHostContentProviderDelegate) {\n        map[providerDelegateName.javaClass.name] = providerDelegateName\n        providerDelegateName.onCreate()\n    }\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/runtime/ContainerClassLoader.kt",
    "content": "package com.wgllss.dynamic.host.lib.runtime\n\nimport com.wgllss.dynamic.host.lib.classloader.WXClassLoader\nimport java.io.File\n\nclass ContainerClassLoader(\n    val containerKey: String? = null,\n    val apkPath: String, optimizedDirectory: String,\n    librarySearchPath: String?, parent: ClassLoader,\n    private val childClassLoader: ClassLoader? = null\n) : WXClassLoader(apkPath, File(optimizedDirectory).absolutePath, librarySearchPath, parent) {\n\n\n    @Throws(ClassNotFoundException::class)\n    override fun loadClass(className: String): Class<*> {\n        var clazz = findLoadedClass(className)\n        if (clazz == null) {\n            try {\n                clazz = findClass(className)\n            } catch (e: ClassNotFoundException) {\n\n            }\n            if (clazz == null) {\n                try {\n                    clazz = super.loadClass(className)\n                } catch (e: ClassNotFoundException) {\n                    try {\n                        clazz = childClassLoader!!.loadClass(className)\n                    } catch (e: Exception) {\n                        if (parent is ContainerClassLoader) {\n                            clazz = parent.loadClass(className)\n                        }\n                    }\n                }\n            }\n        }\n        return clazz\n    }\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/main/java/com/wgllss/dynamic/host/lib/runtime/MultiDynamicRuntime.kt",
    "content": "package com.wgllss.dynamic.host.lib.runtime\n\nimport android.text.TextUtils\nimport com.wgllss.dynamic.host.lib.BuildConfig\nimport java.io.File\nimport java.lang.reflect.Field\n\nobject MultiDynamicRuntime {\n\n    /**\n     * hack ContainerClassLoader到PathClassLoader之上\n     * 1. ClassLoader树结构中可能包含多个ContainerClassLoader\n     * 2. 在hack时，需要提供containerKey作为该插件containerApk的标识\n     *\n     * @param containerKey 插件业务对应的key，不随插件版本变动\n     * @param containerApk 插件zip包中的runtimeApk\n     */\n    fun loadContainerDex(containerKey: String, dexFilePathEx: String, oDexPathEx: String): Boolean {\n        // 根据key去查找对应的ContainerClassLoader\n        val pathClassLoader = MultiDynamicRuntime::class.java.classLoader\n        val containerClassLoader = findContainerClassLoader(containerKey)\n        if (containerClassLoader != null) {\n            val apkFilePath = containerClassLoader.apkPath\n            if (TextUtils.equals(apkFilePath, dexFilePathEx)) {\n                //已经加载相同版本的containerApk了,不需要加载\n                return false\n            } else {\n                // 同个插件的ContainerClassLoader版本不一样，说明要移除老的ContainerClassLoader，插入新的\n                try {\n                    removeContainerClassLoader(containerClassLoader)\n                } catch (e: Exception) {\n                    throw RuntimeException(e)\n                }\n            }\n        }\n        // 将ContainerClassLoader hack到PathClassloader之上\n        try {\n            hackContainerClassLoader(containerKey, dexFilePathEx, oDexPathEx, pathClassLoader)\n            if (BuildConfig.DEBUG)\n                android.util.Log.e(\"MultiDynamicRuntime\", \"containerApk插入成功，containerKey= $containerKey\")\n        } catch (e: Exception) {\n            throw RuntimeException(e)\n        }\n        return true\n    }\n\n    private fun findContainerClassLoader(containerKey: String): ContainerClassLoader? {\n        val current = MultiDynamicRuntime::class.java.classLoader\n        var parent = current.parent\n        while (parent != null) {\n            if (parent is ContainerClassLoader) {\n                val item = parent\n                if (TextUtils.equals(item.containerKey, containerKey)) {\n                    return item\n                }\n            }\n            parent = parent.parent\n        }\n        return null\n    }\n\n    @Throws(Exception::class)\n    private fun removeContainerClassLoader(containerClassLoader: ContainerClassLoader) {\n        val pathClassLoader = MultiDynamicRuntime::class.java.classLoader\n        var child = pathClassLoader\n        var parent = pathClassLoader.parent\n        while (parent != null) {\n            if (parent === containerClassLoader) {\n                break\n            }\n            child = parent\n            parent = parent.parent\n        }\n        if (child != null && parent === containerClassLoader) {\n            hackParentClassLoader(child, containerClassLoader.parent)\n        }\n    }\n\n    @Throws(Exception::class)\n    private fun hackContainerClassLoader(containerKey: String, apkFilePath: String, oDexPath: String, pathClassLoader: ClassLoader) {\n        File(oDexPath).setReadOnly()\n        File(apkFilePath).setReadOnly()\n//        containerApk.libraryPath?.let { File(it).setReadOnly() }\n        val containerClassLoader = ContainerClassLoader(\n            containerKey, apkFilePath, oDexPath,\n            null, pathClassLoader.parent, pathClassLoader\n        )\n        hackParentClassLoader(pathClassLoader, containerClassLoader)\n    }\n\n    /**\n     * 修改ClassLoader的parent\n     *\n     * @param classLoader          需要修改的ClassLoader\n     * @param newParentClassLoader classLoader的新的parent\n     * @throws Exception 失败时抛出\n     */\n    @Throws(Exception::class)\n    fun hackParentClassLoader(classLoader: ClassLoader?, newParentClassLoader: ClassLoader?) {\n        val field = getParentField() ?: throw RuntimeException(\"在ClassLoader.class中没找到类型为ClassLoader的parent域\")\n        field.isAccessible = true\n        field[classLoader] = newParentClassLoader\n    }\n\n    /**\n     * 安全地获取到ClassLoader类的parent域\n     *\n     * @return ClassLoader类的parent域.或不能通过反射访问该域时返回null.\n     */\n    private fun getParentField(): Field? {\n        val classLoader = MultiDynamicRuntime::class.java.classLoader\n        val parent = classLoader.parent\n        var field: Field? = null\n        for (f in ClassLoader::class.java.declaredFields) {\n            try {\n                val accessible = f.isAccessible\n                f.isAccessible = true\n                val o = f[classLoader]\n                f.isAccessible = accessible\n                if (o === parent) {\n                    field = f\n                    break\n                }\n            } catch (ignore: IllegalAccessException) {\n            }\n        }\n        return field\n    }\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib/src/test/java/com/wgllss/dynamic/host/wxdynamicpluginsdk/ExampleUnitTest.kt",
    "content": "package com.wgllss.dynamic.host.wxdynamicpluginsdk\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\nclass ExampleUnitTest {\n    @Test\n    fun addition_isCorrect() {\n        assertEquals(4, 2 + 2)\n    }\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Version-Lib/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Version-Lib/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.java.library)\n    alias(libs.plugins.java.kotlin)\n}\n\njava {\n    sourceCompatibility = JavaVersion.VERSION_21\n    targetCompatibility = JavaVersion.VERSION_21\n}\n\ndependencies {\n    implementation libs.kotlin.stdlib\n//    implementation \"org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version\"\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Version-Lib/consumer-rules.pro",
    "content": ""
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Version-Lib/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Version-Lib/src/main/java/com/wgllss/dynamic/host/lib/constant/DynamicPluginConstant.kt",
    "content": "package com.wgllss.dynamic.host.lib.constant\n\nobject DynamicPluginConstant {\n    const val COMMON = \"cp\"\n    const val COMMON_BUSINESS = \"cbp\"\n    const val HOME = \"hp\"\n    const val VERSION = \"v\"\n    const val RESOURCE_SKIN = \"rp\"\n    const val RUNTIME = \"rtmp\"\n    const val MANAGER = \"mar\"\n    const val FIRST = \"fst\"\n    const val WEB_ASSETS = \"WA\"\n    const val CLMD = \"clmd\"\n    const val CDLFD = \"cdlfd\"\n\n    /**首次载入key*/\n    const val MLK = \"main_loading_dex_key\"\n\n    /**--------------------------------------------------------------**/\n\n    /** 下载到本地 版本文件 名字 **/\n    const val versionFile = \"version\"\n\n    /** 本地下载目录 **/\n    const val dldir = \"d_dex\"\n\n    const val fstdir = \"f_dex\" //第一次加载目录\n\n}"
  },
  {
    "path": "WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Version-Lib/src/main/java/com/wgllss/dynamic/host/lib/version/ILoaderVersion.kt",
    "content": "package com.wgllss.dynamic.host.lib.version\n\ninterface ILoaderVersion {\n    /**总版本号*/\n    fun getV(): Int\n\n    /** 必须要更新宿主，或者下载耗时，显示loading 页面 **/\n    fun isMustShowLoading(): Boolean\n\n    /**\n     * class load first dex\n     * 首次加载 实现 dex\n     * first:启动页之后的第一个首页实现类\n     * second:加载本地文件名称\n     * third:版本号\n     **/\n    fun getClfd(): Triple<String, String, Int>\n\n    /**\n     * class loader manager dex\n     * 动态管理器 (管理插件的加载 和下载逻辑) 加载 实现 dex\n     * first:加载器实现的类名 (全路径)\n     * second:加载本地文件名称\n     * third:版本号\n     **/\n    fun getClmd(): Triple<String, String, Int>\n\n    /**\n     * class download face dex\n     * 动态下载接口实现 dex\n     * first:动态插件 下载接口实现 类的类名  (全路径)\n     * second:加载本地文件名称\n     * third:版本号\n     **/\n    fun getCdlfd(): Triple<String, String, Int>\n\n    /** 宿主必备的dex **/\n    fun getMapDLU(): MutableMap<String, Pair<String, Int>>\n\n    /** other dex*/\n    fun getOthers(): MutableMap<String, Int>\n\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    namespace 'com.wgllss.dynamic.host'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.dynamic.host.sample\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 10000\n        versionName \"1.0000\"\n        ndk {\n            abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'\n        }\n    }\n\n    signingConfigs {\n        def password = \"WXSample\"\n        def alias = \"WXSample\"\n        def filePath = \"./sign/WXSample.jks\"\n        debug {\n            keyAlias alias\n            keyPassword password\n            storeFile file(filePath)\n            storePassword(password)\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n        release {\n            keyAlias alias\n            keyPassword password\n            storeFile file(filePath)\n            storePassword(password)\n            v1SigningEnabled true\n            v2SigningEnabled true\n        }\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled true // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled true // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n            signingConfig signingConfigs.debug\n        }\n\n        release {\n            debuggable false\n            minifyEnabled true // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled true // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n            signingConfig signingConfigs.release\n        }\n\n        applicationVariants.all { variant ->\n            variant.outputs.all {\n                outputFileName = \"WXDynamicPlugin_Sample_${variant.buildType.name}.apk\"\n            }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n\n    buildFeatures {\n        buildConfig true\n    }\n\n    composeOptions {\n        kotlinCompilerExtensionVersion = \"1.7.0\"\n    }\n}\n\ndependencies {\n\n    implementation libs.appcompat\n    implementation libs.androidx.recyclerview\n    implementation libs.google.material\n    implementation libs.constraintlayout\n\n    implementation 'io.github.wgllss:Wgllss-Dynamic-Host-VersionK-Lib:1.0.00'\n    implementation 'io.github.wgllss:Wgllss-Dynamic-Host-Lib:1.0.02'\n//    implementation 'io.github.wgllss:Wgllss-Dynamic-Host-Lib-Impl:1.0.1.7'\n//    implementation 'io.github.wgllss:Wgllss-Dynamic-Host-Version-Lib:1.0.0.7'\n\n    implementation project(path: ':maven-wgllss-dynamic-host-skin-resource-lib')\n    implementation project(path: ':maven-wgllss-common-re-library')\n    implementation project(path: ':maven-wgllss-business-re-library')\n    implementation project(path: ':maven-wgllss-dynamic-host-library')\n\n\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample/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\n-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* #这个过滤器是谷歌推荐的算法，一般不做更改\n-optimizationpasses 7 # 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n-dontpreverify # 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n-dontusemixedcaseclassnames #混合时不使用大小写混合，混合后的类名为小写\n-verbose #包含有类名->混淆后类名的映射关系 日志记录\n-keepattributes SourceFile,LineNumberTable # 保留代码行号\n\n# Preserve some attributes that may be required for reflection.\n-keepattributes AnnotationDefault,*Annotation*,# 避免混淆注解\n                EnclosingMethod, # 避免混淆匿名类\n                InnerClasses, # 避免混淆内部类\n                RuntimeVisibleAnnotations,\n                RuntimeVisibleParameterAnnotations,\n                RuntimeVisibleTypeAnnotations,\n                Signature # 避免混淆泛型\n-keep class com.google.android.material.** { *; }\n\n\n-keep class androidx.appcompat.view.ContextThemeWrapper { }\n-keep class androidx.fragment.app.FragmentActivity { }\n-keep class androidx.lifecycle.** { *; }\n\n\n-keep class com.wgllss.core.** { *; }\n-keep class com.wgllss.sample.** { *; }\n-keep class com.wgllss.dynamic.host.lib.**{}\n#-keep class com.wgllss.host.library.** { *; }\n\n#-keep class com.wgllss.dynamic.lib.** { *; }\n#-keep class com.wgllss.host.library.** { *; }\n#-keep class com.wgllss.plugin.library.** { *; }\n#-keep class com.wgllss.host.library.impl.** { *; }\n\n-keep class androidx.savedstate.** { *; }\n-keep class androidx.arch.core.internal.**{*;}\n\n-keep class com.wgllss.**{*;}\n-keep class android.**{*;}\n-keep class android.app.**{*;}\n-keep class androidx.**{*;}\n-keep class androidx.activity.**{*;}\n-keep class kotlinx.**{*;}\n-keep class coil.**{*;}\n-keep class com.tencent.mmkv.**{*;}\n-keep class com.google.android.**{*;}\n-keep class com.google.android.exoplayer2**{*;}\n-keep class com.google.gson.**{*;}\n-keep class retrofit2.**{*;}\n-keep class okhttp3.**{*;}\n-keep class okio.**{*;}\n-keep class com.bumptech.glide.**{*;}\n-keep class com.mcxtzhang.**{*;}\n-keep class com.hjq.**{*;}\n-keep class com.umeng.**{*;}\n-keep class org.jsoup.**{*;}\n-keep class res.**{*;}\n-keep class com.wgllss.sample.skin.**{*;}\n-keep class androidx.compose.**{*;}\n-keep class androidx.constraintlayout.compose.**{*;}\n\n\n-keep class * extends androidx.startup.Initializer{}\n\n# Fragment\n-keep class * extends androidx.fragment.app.Fragment{}\n-keep class * extends android.app.Application{}\n-keep class * extends androidx.lifecycle.LiveData{}\n-keep class * extends androidx.startup.InitializationProvider{}\n\n# keepclassmembers :防止类成员被移除或被混淆\n-keepclassmembers class * {\n    @android.webkit.JavascriptInterface <methods>;\n}\n# 保留本地native方法不被混淆\n-keepclasseswithmembernames class * { native <methods>;}\n\n-dontnote androidx.**\n-dontwarn android.support.**\n-dontwarn androidx.**\n# 保留R下面的资源\n-keep class **.R$* {*;}\n## Android architecture components: Lifecycle\n# LifecycleObserver's empty constructor is considered to be unused by proguard\n-keepclassmembers class * implements androidx.lifecycle.LifecycleObserver {\n    <init>(...);\n}\n# ViewModel's empty constructor is considered to be unused by proguard\n-keepclassmembers class * extends androidx.lifecycle.ViewModel {\n    <init>(...);\n}\n-keepclassmembers class * extends androidx.lifecycle.LifecycleOwner {\n    <init>(...);\n}\n#-keepclassmembers class * extends androidx.savedstate.SavedStateRegistryOwner {\n#    <init>(...);\n#}\n# keep methods annotated with @OnLifecycleEvent even if they seem to be unused\n# (Mostly for LiveData.LifecycleBoundObserver.onStateChange(), but who knows)\n-keepclassmembers class * {\n    @androidx.lifecycle.OnLifecycleEvent *;\n}\n\n# ViewBinding\n#-keep class androidx.databinding.DataBindingUtil{}\n\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet);\n}\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet, int);\n}\n\n\n## Databinding\n#-dontwarn android.databinding.**\n#-keep class android.databinding.** { *; }\n#\n#-keep class android.content.Intent { *; }\n#-keep class android.os.Bundle { *; }\n\n# kotlin 相关\n-dontwarn kotlin.**\n-keep class kotlin.** { *; }\n-keep interface kotlin.** { *; }\n"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample/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    package=\"com.wgllss.dynamic.host\">\n\n    <application\n        android:name=\".SampleApplication\"\n        android:allowBackup=\"true\"\n        android:dataExtractionRules=\"@xml/data_extraction_rules\"\n        android:fullBackupContent=\"@xml/backup_rules\"\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"@string/app_name\"\n        android:largeHeap=\"true\"\n        android:networkSecurityConfig=\"@xml/network_security_config\"\n        android:requestLegacyExternalStorage=\"true\"\n        android:roundIcon=\"@mipmap/ic_launcher\"\n        android:supportsRtl=\"true\"\n        android:usesCleartextTraffic=\"true\" />\n\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample/src/main/java/com/wgllss/dynamic/host/FaceImpl.kt",
    "content": "package com.wgllss.dynamic.host\n\nimport android.text.TextUtils\nimport com.wgllss.core.units.DeviceIdUtil\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.CDLFD\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.CLMD\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.COMMON\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.COMMON_BUSINESS\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.FIRST\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.HOME\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.MANAGER\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.RESOURCE_SKIN\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.RUNTIME\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.VERSION\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.WEB_ASSETS\nimport com.wgllss.dynamic.host.lib.download.IDynamicDownLoadFace\n\nclass FaceImpl : IDynamicDownLoadFace {\n\n    private var baseXL: String = \"\"\n\n    //    override fun getHostL() = \"http://192.168.3.108:8080/assets/WXDynamicPlugin/\"\n//    override fun getHostL() = \"http://192.168.1.9:8080/assets/WXDynamicPlugin/\"\n    //todo 自己本地搭一个服务器，或者 自己服务器 或者 像我一样在gitee上面在自己的项目下建一个文件当作服务器 供下载,\n    // 切记不要往往我的 gitee 项目上面推\n    override fun getHostL() = \"https://gitee.com/wgllss888/WXDynamicPlugin/raw/master/WX-Resource/\"\n\n    /** 0:WXDynamicPlugin 动态化插件框架 理论上已经做到了可以完全不动宿主,但是如果一定要动宿主 可以提供以下思路:\n     *  1:可以根据 宿主版本号得到 宿主版本支持的 的插件,\n     *  2:当宿主必须 需要升级时,升级后原版本的插件不可用了，插件配置在新宿主版本文件夹下面，原宿主版本文件夹可可以先动态配置 在启动页 升级下载新的宿主\n     *  @example  宿主版本 10000 版本支持的插件 放在服务端 WXDynamicPlugin/10000/ 文件夹下  20000版本的插件放在 WXDynamicPlugin/20000/下面\n     */\n    override fun getBaseL(): String {\n        if (TextUtils.isEmpty(baseXL)) {\n            baseXL = StringBuilder().append(getHostL()).append(DeviceIdUtil.getDeviceId()).append(\"/\").append(BuildConfig.VERSION_CODE).append(\"/\").toString()\n        }\n        return baseXL\n    }\n\n    override fun isDebug() = false\n\n    override fun getOtherDLU() = realUrl(\"vc\")\n\n    /**\n     * 下面要添加删除 map内内容 map的key 不能自定义\n     * 即:VERSION,COMMON,WEB_ASSETS,COMMON_BUSINESS,HOME,RESOURCE_SKIN,RUNTIME,MANAGER,FIRST,CLMD,CDLFD不能动\n     */\n    override fun getMapDLU() = mutableMapOf(\n        VERSION to realUrl(\"classes_version_dex\"), // 对应 maven-wgllss-sample-loader-version打包后插件\n        COMMON to realUrl(\"classes_common_lib_dex\"), // 对应 Maven-Wgllss-Dynamic-Plugin-Common-Library打包后插件\n        WEB_ASSETS to realUrl(\"classes_business_web_res\"), // 对应 maven-wgllss-sample-assets-source-apk打包后插件\n        COMMON_BUSINESS to realUrl(\"classes_business_lib_dex\"), // 对应 maven-wgllss-sample-business-library打包后插件\n        HOME to realUrl(\"classes_home_dex\"), // 对应 maven-wgllss-sample-ui-home打包后插件\n        RESOURCE_SKIN to realUrl(\"classes_common_skin_res\"), // 对应 maven-wgllss-sample-skin-resource-apk打包后插件\n        RUNTIME to realUrl(\"classes_wgllss_dynamic_plugin_runtime\"),// 对应 Maven-Wgllss-Dynamic-Plugin-RunTime-Apk打包后插件\n        MANAGER to realUrl(\"classes_manager_dex\"), // 对应 Maven-Wgllss-Dynamic-Plugin-Manager打包后插件\n        FIRST to realUrl(\"classes_loading_dex\"), // 对应 maven-wgllss-sample-ui-loading打包后插件\n        CLMD to realUrl(\"class_loader_impl_dex\"), // 对应 Maven-Wgllss-Dynamic-Plugin-Loader-Impl打包后插件\n        CDLFD to realUrl(\"classes_downloadface_impl_dex\") // 对应 Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl打包后插件\n    )\n\n    /** 1:首次启动用 宿主里面的 VersionImpl,当有版本更新时用 WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-loader-version\n     *  2:首次时两个地方文件配置成一样\n     *  3: 以后每次修改插件，升级插件 ，需要修改 WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-loader-version 下面配置\n     **/\n    override fun getLoadVersionClassName() = \"com.wgllss.loader.version.LoaderVersionImpl\"\n\n    private fun realUrl(name: String) = StringBuilder().append(getBaseL()).append(name).toString()\n\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample/src/main/java/com/wgllss/dynamic/host/SampleApplication.kt",
    "content": "package com.wgllss.dynamic.host\n\nimport android.app.Application\nimport android.content.Context\nimport com.wgllss.core.units.AppGlobals\nimport com.wgllss.core.units.LogTimer\nimport com.wgllss.dynamic.host.lib.impl.WXDynamicLoader\n\nclass SampleApplication : Application() {\n\n    override fun attachBaseContext(base: Context) {\n        super.attachBaseContext(base)\n        LogTimer.initTime(this)\n        AppGlobals.sApplication = this\n        WXDynamicLoader.instance.installPlugin(base, FaceImpl(), VersionImpl())\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample/src/main/java/com/wgllss/dynamic/host/VersionImpl.kt",
    "content": "package com.wgllss.dynamic.host\n\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant\nimport com.wgllss.dynamic.host.lib.version.ILoaderVersion\n\n/**\n * 版本控制 宿主默认有此一份,首次需要和\n */\nclass VersionImpl : ILoaderVersion {\n\n    override fun getV() = 1000 //总版本号 只要下面每个地方改一下 此处版本号要往上加+1，下面可同一时间改多个，上面加一下版本号\n\n    override fun isMustShowLoading() = false//下次下载插件 是否显示主下载loading 页面\n\n    override fun getClfd() = Triple(\n        //配置loading 页插件实现 及版本号 对应 maven-wgllss-sample-loader-version 工程\n        \"com.wgllss.dynamic.impl.ILoadHomeImpl\", \"loading\", 1000\n    )\n\n    //配置 动态实现根据版本下载插件 及版本号 对应 Maven-Wgllss-Dynamic-Plugin-Loader-Impl 工程\n    override fun getClmd() = Triple(\"\", \"\", 0)\n\n    //动态实现更换下载插件地址，文件，已经debug  Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl\n    override fun getCdlfd() = Triple(\"\", \"\", 0)\n\n\n    /**\n     * 下面要添加删除 map内内容 map的key 不能自定义\n     * 即:COMMON,WEB_ASSETS,COMMON_BUSINESS,RUNTIME,MANAGER,RESOURCE_SKIN,HOME不能动\n     */\n    override fun getMapDLU() = linkedMapOf(\n        DynamicPluginConstant.COMMON to Pair(\"classes_common_lib_dex\", 1000), //Maven-Wgllss-Dynamic-Plugin-Common-Library 插件工程 和 版本号\n        DynamicPluginConstant.WEB_ASSETS to Pair(\"classes_business_web_res\", 1000), //maven-wgllss-sample-assets-source-apk 插件工程 和版本号\n        DynamicPluginConstant.COMMON_BUSINESS to Pair(\"classes_business_lib_dex\", 1000),//maven-wgllss-sample-business-library 插件工程 和 版本号\n        DynamicPluginConstant.RUNTIME to Pair(\"classes_wgllss_dynamic_plugin_runtime\", 1000), //Maven-Wgllss-Dynamic-Plugin-RunTime-Apk 插件工程 和 版本号\n        DynamicPluginConstant.MANAGER to Pair(\"classes_manager_dex\", 1000), // Maven-Wgllss-Dynamic-Plugin-Manager 插件工程 和 版本号\n        DynamicPluginConstant.RESOURCE_SKIN to Pair(\"classes_common_skin_res\", 1000), // maven-wgllss-sample-skin-resource-apk 插件工程 和 版本号\n        DynamicPluginConstant.HOME to Pair(\"classes_home_dex\", 1000) //maven-wgllss-sample-ui-home 插件工程 和 版本号\n    )\n\n//    override fun getOthers() = mutableMapOf<String, Int>()\n\n    override fun getOthers() = mutableMapOf(\n        \"classes_other_dex\" to 1000,  //maven-wgllss-sample-ui-other-lib 插件工程 和 版本号\n        \"classes_other_res\" to 1000,  //maven-wgllss-sample-ui-other 插件工程 和 版本号\n        \"classes_other2_dex\" to 1000, //maven-wgllss-sample-ui-other2-lib2 插件工程 和 版本号\n        \"classes_other2_res\" to 1000  //maven-wgllss-sample-ui-other2 插件工程 和 版本号\n    )\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample/src/main/res/drawable/ic_launcher_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector\n    android:height=\"108dp\"\n    android:width=\"108dp\"\n    android:viewportHeight=\"108\"\n    android:viewportWidth=\"108\"\n    xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"#3DDC84\"\n          android:pathData=\"M0,0h108v108h-108z\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M9,0L9,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,0L19,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M29,0L29,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M39,0L39,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M49,0L49,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M59,0L59,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M69,0L69,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M79,0L79,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M89,0L89,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M99,0L99,108\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,9L108,9\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,19L108,19\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,29L108,29\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,39L108,39\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,49L108,49\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,59L108,59\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,69L108,69\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,79L108,79\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,89L108,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M0,99L108,99\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,29L89,29\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,39L89,39\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,49L89,49\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,59L89,59\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,69L89,69\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M19,79L89,79\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M29,19L29,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M39,19L39,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M49,19L49,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M59,19L59,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M69,19L69,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n    <path android:fillColor=\"#00000000\" android:pathData=\"M79,19L79,89\"\n          android:strokeColor=\"#33FFFFFF\" android:strokeWidth=\"0.8\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample/src/main/res/drawable-v24/ic_launcher_foreground.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:aapt=\"http://schemas.android.com/aapt\"\n    android:width=\"108dp\"\n    android:height=\"108dp\"\n    android:viewportWidth=\"108\"\n    android:viewportHeight=\"108\">\n    <path android:pathData=\"M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z\">\n        <aapt:attr name=\"android:fillColor\">\n            <gradient\n                android:endX=\"85.84757\"\n                android:endY=\"92.4963\"\n                android:startX=\"42.9492\"\n                android:startY=\"49.59793\"\n                android:type=\"linear\">\n                <item\n                    android:color=\"#44000000\"\n                    android:offset=\"0.0\" />\n                <item\n                    android:color=\"#00000000\"\n                    android:offset=\"1.0\" />\n            </gradient>\n        </aapt:attr>\n    </path>\n    <path\n        android:fillColor=\"#FFFFFF\"\n        android:fillType=\"nonZero\"\n        android:pathData=\"M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z\"\n        android:strokeWidth=\"1\"\n        android:strokeColor=\"#00000000\" />\n</vector>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample/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=\"@drawable/ic_launcher_background\"/>\n    <foreground android:drawable=\"@mipmap/ic_launcher_foreground\"/>\n</adaptive-icon>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"purple_200\">#FFBB86FC</color>\n    <color name=\"purple_500\">#FF6200EE</color>\n    <color name=\"purple_700\">#FF3700B3</color>\n    <color name=\"teal_200\">#FF03DAC5</color>\n    <color name=\"teal_700\">#FF018786</color>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">WXDynamicPlugin</string>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n    <style name=\"Theme.WXDynamicPlugin\" parent=\"Theme.MaterialComponents.DayNight.DarkActionBar\">\n        <!-- Primary brand color. -->\n        <item name=\"colorPrimary\">@color/purple_500</item>\n        <item name=\"colorPrimaryVariant\">@color/purple_700</item>\n        <item name=\"colorOnPrimary\">@color/white</item>\n        <!-- Secondary brand color. -->\n        <item name=\"colorSecondary\">@color/teal_200</item>\n        <item name=\"colorSecondaryVariant\">@color/teal_700</item>\n        <item name=\"colorOnSecondary\">@color/black</item>\n        <!-- Status bar color. -->\n        <item name=\"android:statusBarColor\" tools:targetApi=\"l\">?attr/colorPrimaryVariant</item>\n        <!-- Customize your theme here. -->\n    </style>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n    <style name=\"Theme.WXDynamicPlugin\" parent=\"Theme.MaterialComponents.DayNight.DarkActionBar\">\n        <!-- Primary brand color. -->\n        <item name=\"colorPrimary\">@color/purple_200</item>\n        <item name=\"colorPrimaryVariant\">@color/purple_700</item>\n        <item name=\"colorOnPrimary\">@color/black</item>\n        <!-- Secondary brand color. -->\n        <item name=\"colorSecondary\">@color/teal_200</item>\n        <item name=\"colorSecondaryVariant\">@color/teal_200</item>\n        <item name=\"colorOnSecondary\">@color/black</item>\n        <!-- Status bar color. -->\n        <item name=\"android:statusBarColor\" tools:targetApi=\"l\">?attr/colorPrimaryVariant</item>\n        <!-- Customize your theme here. -->\n    </style>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample/src/main/res/xml/backup_rules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n   Sample backup rules file; uncomment and customize as necessary.\n   See https://developer.android.com/guide/topics/data/autobackup\n   for details.\n   Note: This file is ignored for devices older that API 31\n   See https://developer.android.com/about/versions/12/backup-restore\n-->\n<full-backup-content>\n    <!--\n   <include domain=\"sharedpref\" path=\".\"/>\n   <exclude domain=\"sharedpref\" path=\"device.xml\"/>\n-->\n</full-backup-content>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample/src/main/res/xml/data_extraction_rules.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--\n   Sample data extraction rules file; uncomment and customize as necessary.\n   See https://developer.android.com/about/versions/12/backup-restore#xml-changes\n   for details.\n-->\n<data-extraction-rules>\n    <cloud-backup>\n        <!-- TODO: Use <include> and <exclude> to control what is backed up.\n        <include .../>\n        <exclude .../>\n        -->\n    </cloud-backup>\n    <!--\n    <device-transfer>\n        <include .../>\n        <exclude .../>\n    </device-transfer>\n    -->\n</data-extraction-rules>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample/src/main/res/xml/network_security_config.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<network-security-config xmlns:tools=\"http://schemas.android.com/tools\">\n    <!--    <domain-config tools:ignore=\"NetworkSecurityConfig\">-->\n    <base-config cleartextTrafficPermitted=\"true\" />\n    <!--    </domain-config>-->\n</network-security-config>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-business-re-library/.gitignore",
    "content": "/build\n/.gradle"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-business-re-library/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n    alias(libs.plugins.kotlin.kapt)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.sample.library.re\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n    kapt {\n        generateStubs = true\n    }\n}\n\n\ndependencies {\n    implementation project(':maven-wgllss-dynamic-host-skin-resource-lib')\n\n    implementation libs.glide\n    implementation libs.swiperefreshlayout\n    implementation libs.startup.runtime\n    implementation libs.squareup.retrofit\n    implementation libs.com.squareup.okhttp3.logging.interceptor\n    implementation libs.okhttp3.okhttp\n    implementation libs.okio\n    implementation libs.converter.gson\n    implementation libs.converter.scalars\n    //解析html\n    implementation libs.org.jsoup.jsoup\n    //noinspection UseTomlInstead\n    implementation libs.palette.ktx\n    //room 数据库\n    implementation libs.room.runtime\n    kapt libs.room.compiler\n//    kapt \"androidx.room:room-compiler:2.6.1\"\n\n    //mmkv\n    implementation libs.mmkv\n    implementation libs.exoplayer.core\n    implementation libs.exoplayer.ui\n    implementation libs.google.extension.mediasession\n//    implementation libs.exoplayer.extension.mediasession\n\n//    def exoplayer_version = '2.18.0'\n//    implementation \"com.google.android.exoplayer:exoplayer-core:$exoplayer_version\"\n//    implementation \"com.google.android.exoplayer:exoplayer-ui:$exoplayer_version\"\n    //noinspection GradleDependency,GradleDependency\n//    implementation libs.google.extension.mediasession\n//    implementation \"com.google.android.exoplayer:extension-cast:$exoplayer_version\"\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-business-re-library/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-business-re-library/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.library.re\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n    <uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\" />\n    <uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\" />\n    <uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n\n    <uses-permission android:name=\"android.permission.REORDER_TASKS\" />\n\n    <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.MANAGE_EXTERNAL_STORAGE\" />\n    <uses-permission android:name=\"android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK\" />\n\n    <uses-permission android:name=\"android.permission.FOREGROUND_SERVICE\" />\n    <uses-permission android:name=\"android.permission.REORDER_TASKS\" />\n    <uses-permission android:name=\"android.permission.GET_TASKS\" />\n    <uses-permission android:name=\"android.permission.GET_TOP\" />、\n\n    <uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" />\n    <uses-permission android:name=\"android.permission.WAKE_LOCK\" />\n    <uses-permission android:name=\"android.permission.DISABLE_KEYGUARD\" />\n\n    <uses-permission android:name=\"android.permission.POST_NOTIFICATIONS\" />\n\n    <application>\n\n        <provider\n            android:name=\"androidx.startup.InitializationProvider\"\n            android:authorities=\"${applicationId}.androidx-startup\"\n            android:exported=\"false\">\n            <meta-data\n                android:name=\"com.wgllss.dynamic.initializer.InitHomeFirstInitialize\"\n                android:value=\"androidx.startup\" />\n        </provider>\n\n        <service\n            android:name=\"com.wgllss.sample.feature_system.services.MusicService\"\n            android:enabled=\"true\"\n            android:exported=\"true\"\n            android:foregroundServiceType=\"mediaPlayback\">\n            <intent-filter>\n                <action android:name=\"android.media.browse.MediaBrowserService\" />\n            </intent-filter>\n        </service>\n\n        <activity\n            android:name=\"com.wgllss.sample.features_ui.playing.activity.NotificationTargetActivity\"\n            android:exported=\"false\"\n            android:launchMode=\"singleTask\"\n            android:theme=\"@style/Transparent\" />\n\n        <receiver\n            android:name=\"androidx.media.session.MediaButtonReceiver\"\n            android:exported=\"true\">\n            <intent-filter>\n                <action android:name=\"android.intent.action.MEDIA_BUTTON\" />\n            </intent-filter>\n        </receiver>\n\n    </application>\n</manifest>\n\n"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-business-re-library/src/main/java/com/wgllss/sample/feature_system/globle/Constants.kt",
    "content": "package com.wgllss.sample.feature_system.globle\n\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\nimport com.bumptech.glide.request.RequestOptions\n\n\nobject Constants {\n    const val MEDIA_ID_ROOT = \"-1\"\n\n    const val MEDIA_TITLE_KEY = \"MEDIA_TITLE_KEY\"\n    const val MEDIA_ID_KEY = \"MEDIA_ID_KEY\"\n    const val MEDIA_AUTHOR_KEY = \"MEDIA_AUTHOR_KEY\"\n    const val MEDIA_ARTNETWORK_URL_KEY = \"MEDIA_ARTNETWORK_URL_KEY\"\n    const val MEDIA_URL_KEY = \"MEDIA_URL_KEY\"\n\n    const val NOTIFICATION_LARGE_ICON_SIZE = 144 // px\n\n    val defaultImgID = com.wgllss.host.skin.R.drawable.icon_loading\n\n    val glideOptions = RequestOptions().fallback(com.wgllss.host.skin.R.drawable.icon_loading).diskCacheStrategy(DiskCacheStrategy.DATA)\n\n    //单曲循环\n    const val MODE_PLAY_REPEAT_SONG = 2\n\n    //随机模式\n    const val MODE_PLAY_SHUFFLE_ALL = 1\n\n    //顺序播放重复队列\n    const val MODE_PLAY_REPEAT_QUEUE = 0\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-business-re-library/src/test/java/com/wgllss/sample/ExampleUnitTest.kt",
    "content": "package com.wgllss.sample\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\nclass ExampleUnitTest {\n    @Test\n    fun addition_isCorrect() {\n        assertEquals(4, 2 + 2)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.core.re\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1008\n        versionName \"1.0.0.8\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n\n    buildFeatures {\n        dataBinding = true\n        buildConfig true\n    }\n\n    lintOptions {\n        abortOnError false\n    }\n\n\n}\n\ndependencies {\n//    implementation files('libs/com_wang_avi_library-2.1.3.aar')\n\n//    implementation files('....../WX-Resource/aar_files/com_wang_avi_library-2.1.3.aar')\n//    implementation libs.avi.library\n\n    implementation libs.appcompat\n    implementation libs.androidx.core.ktx\n    implementation libs.androidx.lifecycle.runtime.ktx\n    implementation libs.androidx.lifecycle.livedata.ktx\n    implementation libs.androidx.lifecycle.viewmodel.ktx\n    implementation libs.glide\n    implementation libs.converter.gson\n    //权限申请框架\n    implementation libs.xxpermissions\n    implementation libs.androidx.activity.ktx\n    implementation libs.androidx.fragment.ktx\n\n    //compose\n    implementation(libs.androidx.activity.compose)\n    implementation(platform(libs.androidx.compose.bom))\n    implementation(libs.androidx.ui)\n    implementation(libs.androidx.ui.graphics)\n    implementation(libs.androidx.ui.tooling.preview)\n    implementation(libs.androidx.material3)\n    implementation libs.androidx.constraintlayout.compose\n    implementation libs.androidx.runtime.livedata\n    implementation libs.coil.compose\n    implementation libs.androidx.navigation.compose\n    implementation libs.androidx.navigation.runtime.ktx\n    implementation libs.androidx.compose.material3.adaptive.navigation\n    implementation libs.androidx.compose.material3.adaptive\n    implementation libs.androidx.compose.material3.adaptive.layout\n    implementation libs.androidx.compose.material3.navigationSuite\n    implementation libs.androidx.compose.material3.windowSizeClass\n\n    implementation libs.collapsing.toolbar.scaffold\n\n//    implementation libs.androidx.activity.ktx\n//    implementation libs.androidx.fragment.ktx\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.core.re\"></manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/java/com/wgllss/core/dialog/CommonLoadingView.kt",
    "content": "package com.wgllss.core.dialog\n\nimport android.app.Dialog\nimport android.content.Context\nimport android.view.Gravity\nimport android.view.View\nimport android.widget.TextView\nimport androidx.appcompat.app.AppCompatDialog\nimport androidx.core.app.ComponentActivity\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.LifecycleObserver\n//import androidx.lifecycle.OnLifecycleEvent\nimport com.wgllss.core.re.R\n\nclass CommonLoadingView constructor(context: Context) : Dialog(context, R.style.Loading) {\n\n    private lateinit var txt_loading_text: TextView\n\n//    constructor (context: Context) : super(context, R.style.Loading) {\n//        setContentView(R.layout.common_loading)\n//        window?.run {\n//            txt_loading_text = findViewById(R.id.txt_loading_text)\n//            attributes.gravity = Gravity.CENTER\n//        }\n//    }\n\n    init {\n\n//        context.takeIf {\n//            it is ComponentActivity\n//        }?.let {\n////            (it as ComponentActivity).lifecycle.addObserver(this)\n////            lifecycle =  (it as ComponentActivity).lifecycle\n//        }\n\n\n        setContentView(R.layout.common_loading)\n        window?.run {\n            txt_loading_text = findViewById(R.id.txt_loading_text)\n            attributes.gravity = Gravity.CENTER\n        }\n    }\n\n    fun show(showText: String) {\n        txt_loading_text?.apply {\n            if (showText.isNotEmpty()) {\n                text = showText\n                visibility = View.VISIBLE\n            } else {\n                visibility = View.GONE\n            }\n        }\n        if (!isShowing()) {\n            show()\n        }\n    }\n\n//    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)\n//    private fun onDestory() {\n//        if (isShowing) {\n//            dismiss()\n//        }\n//    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/java/com/wgllss/core/ex/ContextEX.kt",
    "content": "package com.wgllss.core.ex\n\nimport android.app.Activity\nimport android.content.Context\nimport android.content.Intent\nimport com.wgllss.core.re.R\n\n\nfun Context.launchActivity(intent: Intent) {\n    startActivity(intent)\n    if (this is Activity)\n        overridePendingTransition(R.anim.anim_alpha_121, R.anim.anim_alpha_121)\n}\n\nfun Activity.finishActivity() {\n    finish()\n    overridePendingTransition(R.anim.anim_alpha_121, R.anim.anim_alpha_121)\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/java/com/wgllss/core/ex/Flow.kt",
    "content": "package com.wgllss.core.ex\n\nimport androidx.lifecycle.MutableLiveData\nimport com.google.gson.JsonSyntaxException\nimport com.wgllss.core.re.R\nimport com.wgllss.core.units.AppGlobals\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.collect\nimport kotlinx.coroutines.flow.flowOn\nimport retrofit2.HttpException\nimport java.io.InterruptedIOException\nimport java.net.ConnectException\nimport java.net.SocketException\nimport java.net.SocketTimeoutException\nimport java.net.UnknownHostException\nimport java.util.concurrent.TimeoutException\n\nfun Throwable?.parseErrorString(): String = when (this) {\n    is ConnectException, is SocketException -> {\n        if (message?.contains(\"Network is unreachable\") == true)\n            getString(R.string.Mobilenetuseless_msg)\n        if (message?.contains(\"Failed to connect to\") == true)\n            getString(R.string.failed_to_connect_to)\n        else\n            getString(R.string.ConnectException)\n    }\n    is HttpException -> {\n        if (message?.contains(\"HTTP 50\") == true) {\n            message!!.substring(0, 8)\n        } else {\n            getString(R.string.HttpException)\n        }\n    }\n    is InterruptedIOException -> {\n        if (message?.contains(\"timeout\") == true)\n            getString(R.string.SocketTimeoutException)\n        else\n            getString(R.string.ConnectException)\n    }\n    is UnknownHostException -> getString(R.string.UnknownHostException)\n    is JsonSyntaxException -> getString(R.string.JsonSyntaxException)\n    is SocketTimeoutException, is TimeoutException -> getString(R.string.SocketTimeoutException)\n    is IllegalArgumentException -> {\n        if (message?.contains(\"baseUrl must end in \") == true)\n            if (AppGlobals.sApplication.isNetWorkActive()) getString(R.string.HostBaseUrlError)\n            else getString(R.string.Mobilenetuseless_msg)\n        else message ?: getString(R.string.ElseNetException)\n    }\n    else -> getString(R.string.ElseNetException)\n}\n\nfun <T> Flow<T>.flowOnIOAndCatch(errorMsgLiveData: MutableLiveData<String>? = null): Flow<T> =\n    flowOn(Dispatchers.IO)\n        .catch {\n            it.printStackTrace()\n            errorMsgLiveData?.value = it.parseErrorString();\n        }\n\nsuspend fun <T> Flow<T>.flowOnIOAndCatchAAndCollect() {\n    flowOnIOAndCatch().collect()//这里，开始结束全放在异步里面处理\n}\n\nfun getString(resID: Int) = AppGlobals.sApplication.getString(resID)\n\n//fun <T1, T2, T3, R> Flow<T1>.zip(flow2: Flow<T2>, flow3: Flow<T3>, transform: suspend (T1, T2, T3) -> R): Flow<R> = channelFlow {\n//\n//    val first: ReceiveChannel<T1> = produce {\n//        this@zip.collect {\n//            channel.send(it)\n//        }\n//    }\n//\n//    val second: ReceiveChannel<T2> = produce {\n//        flow2.collect {\n//            channel.send(it)\n//        }\n//    }\n//\n//    val third: ReceiveChannel<T3> = produce {\n//        flow3.collect {\n//            channel.send(it)\n//        }\n//    }\n//\n//    (second as SendChannel<*>).invokeOnClose {\n//        if (!first.isClosedForReceive) first.cancel(CancellationException())\n//        if (!third.isClosedForReceive) third.cancel(CancellationException())\n//    }\n//\n//    (third as SendChannel<*>).invokeOnClose {\n//        if (!first.isClosedForReceive) first.cancel(CancellationException())\n//        if (!second.isClosedForReceive) second.cancel(CancellationException())\n//    }\n//\n//    val otherIterator = second.iterator()\n//    val anotherIterator = third.iterator()\n//\n//    try {\n//        first.consumeEach { value ->\n//            if (!otherIterator.hasNext() || !anotherIterator.hasNext()) {\n//                return@consumeEach\n//            }\n//            send(transform(value, otherIterator.next(), anotherIterator.next()))\n//        }\n//    } catch (e: CancellationException) {\n//        e.printStackTrace()\n//        android.util.Log.e(\"TAG\", \"${e.message}\")\n//        // complete\n//    } finally {\n//        if (!second.isClosedForReceive) second.cancel(CancellationException())\n//        if (!third.isClosedForReceive) third.cancel(CancellationException())\n//    }\n//}\n\n\n"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/java/com/wgllss/core/ex/NetWorkHelp.kt",
    "content": "package com.wgllss.core.ex\nimport android.app.Application\nimport android.content.Context\nimport android.net.ConnectivityManager\nimport android.net.NetworkCapabilities\nimport android.os.Build\n\nfun Application.isNetWorkActive(): Boolean {\n    val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager\n    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {\n        val network = connectivityManager.activeNetwork ?: return false\n        val activeNetwork =\n            connectivityManager.getNetworkCapabilities(network) ?: return false\n        return when {\n            activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true\n            activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true\n            activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true\n            activeNetwork.hasTransport(NetworkCapabilities.TRANSPORT_BLUETOOTH) -> true\n            else -> false\n        }\n    } else {\n        @Suppress(\"DEPRECATION\") val networkInfo =\n            connectivityManager.activeNetworkInfo ?: return false\n        @Suppress(\"DEPRECATION\")\n        return networkInfo.isConnected\n    }\n    return true\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/java/com/wgllss/core/permissions/PermissionInterceptor.kt",
    "content": "package com.wgllss.core.permissions\n\nimport android.app.Activity\nimport android.app.AlertDialog\nimport android.content.DialogInterface\nimport android.os.Build\nimport com.hjq.permissions.*\nimport com.wgllss.core.re.R\nimport com.wgllss.core.widget.CommonToast\n\nopen class PermissionInterceptor : IPermissionInterceptor {\n\n    override fun grantedPermissions(activity: Activity?, allPermissions: List<String?>?, grantedPermissions: List<String?>?, all: Boolean, callback: OnPermissionCallback?) {\n        if (callback == null) {\n            return\n        }\n        callback.onGranted(grantedPermissions, all)\n    }\n\n    override fun deniedPermissions(activity: Activity, allPermissions: List<String>, deniedPermissions: List<String>, never: Boolean, callback: OnPermissionCallback?) {\n        callback?.onDenied(deniedPermissions, never)\n        if (never) {\n            if (deniedPermissions.size == 1 && Permission.ACCESS_MEDIA_LOCATION == deniedPermissions[0]) {\n                CommonToast.show(R.string.common_permission_media_location_hint_fail)\n                return\n            }\n            showPermissionSettingDialog(activity, allPermissions, deniedPermissions, callback)\n            return\n        }\n        if (deniedPermissions.size == 1) {\n            val deniedPermission = deniedPermissions[0]\n            if (Permission.ACCESS_BACKGROUND_LOCATION == deniedPermission) {\n                CommonToast.show(R.string.common_permission_background_location_fail_hint)\n                return\n            }\n            if (Permission.BODY_SENSORS_BACKGROUND == deniedPermission) {\n                CommonToast.show(R.string.common_permission_background_sensors_fail_hint)\n                return\n            }\n        }\n        val message: String\n        val permissionNames: List<String> = PermissionNameConvert.permissionsToNames(activity, deniedPermissions)\n        message = if (!permissionNames.isEmpty()) {\n            activity.getString(R.string.common_permission_fail_assign_hint, PermissionNameConvert.listToString(permissionNames))\n        } else {\n            activity.getString(R.string.common_permission_fail_hint)\n        }\n        CommonToast.show(message)\n    }\n\n    /**\n     * 显示授权对话框\n     */\n    private fun showPermissionSettingDialog(\n        activity: Activity?, allPermissions: List<String>,\n        deniedPermissions: List<String>, callback: OnPermissionCallback?\n    ) {\n        if (activity == null || activity.isFinishing ||\n            Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1 && activity.isDestroyed\n        ) {\n            return\n        }\n        val message: String\n        val permissionNames: List<String> = PermissionNameConvert.permissionsToNames(activity, deniedPermissions)\n        message = if (!permissionNames.isEmpty()) {\n            activity.getString(R.string.common_permission_manual_assign_fail_hint, PermissionNameConvert.listToString(permissionNames))\n        } else {\n            activity.getString(R.string.common_permission_manual_fail_hint)\n        }\n\n        // 这里的 Dialog 只是示例，没有用 DialogFragment 来处理 Dialog 生命周期\n        AlertDialog.Builder(activity)\n            .setTitle(R.string.common_permission_alert)\n            .setMessage(message)\n            .setPositiveButton(R.string.common_permission_goto_setting_page, DialogInterface.OnClickListener { dialog, which ->\n                dialog.dismiss()\n                XXPermissions.startPermissionActivity(activity,\n                    deniedPermissions, object : OnPermissionPageCallback {\n                        override fun onGranted() {\n                            if (callback == null) {\n                                return\n                            }\n                            callback.onGranted(allPermissions, true)\n                        }\n\n                        override fun onDenied() {\n                            showPermissionSettingDialog(\n                                activity, allPermissions,\n                                XXPermissions.getDenied(activity, allPermissions), callback\n                            )\n                        }\n                    })\n            })\n            .show()\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/java/com/wgllss/core/permissions/PermissionNameConvert.kt",
    "content": "package com.wgllss.core.permissions\n\nimport android.content.Context\nimport android.os.Build\nimport com.hjq.permissions.Permission\nimport com.wgllss.core.re.R\n\nobject PermissionNameConvert {\n    /**\n     * 获取权限名称\n     */\n    fun getPermissionString(context: Context?, permissions: List<String>): String {\n        return listToString(permissionsToNames(context, permissions))\n    }\n\n    /**\n     * String 列表拼接成一个字符串\n     */\n    fun listToString(hints: List<String>): String {\n        if (hints == null || hints.isEmpty()) {\n            return \"\"\n        }\n        val builder = StringBuilder()\n        for (text in hints) {\n            if (builder.toString().isEmpty()) {\n                builder.append(text)\n            } else {\n                builder.append(\"、\")\n                    .append(text)\n            }\n        }\n        return builder.toString()\n    }\n\n    /**\n     * 将权限列表转换成对应名称列表\n     */\n    fun permissionsToNames(context: Context?, permissions: List<String>): List<String> {\n        val permissionNames: MutableList<String> = ArrayList()\n        if (context == null) {\n            return permissionNames\n        }\n        if (permissions == null) {\n            return permissionNames\n        }\n        for (permission in permissions) {\n            when (permission) {\n                Permission.READ_EXTERNAL_STORAGE, Permission.WRITE_EXTERNAL_STORAGE -> {\n                    val hint = context.getString(R.string.common_permission_storage)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.READ_MEDIA_IMAGES, Permission.READ_MEDIA_VIDEO -> {\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n                        val hint = context.getString(R.string.common_permission_image_and_video)\n                        if (!permissionNames.contains(hint)) {\n                            permissionNames.add(hint)\n                        }\n                    }\n                }\n                Permission.READ_MEDIA_AUDIO -> {\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n                        val hint = context.getString(R.string.common_permission_audio)\n                        if (!permissionNames.contains(hint)) {\n                            permissionNames.add(hint)\n                        }\n                    }\n                }\n                Permission.CAMERA -> {\n                    val hint = context.getString(R.string.common_permission_camera)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.RECORD_AUDIO -> {\n                    val hint = context.getString(R.string.common_permission_microphone)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.ACCESS_FINE_LOCATION, Permission.ACCESS_COARSE_LOCATION, Permission.ACCESS_BACKGROUND_LOCATION -> {\n                    var hint: String = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q &&\n                        !permissions.contains(Permission.ACCESS_FINE_LOCATION) &&\n                        !permissions.contains(Permission.ACCESS_COARSE_LOCATION)\n                    ) {\n                        context.getString(R.string.common_permission_location_background)\n                    } else {\n                        context.getString(R.string.common_permission_location)\n                    }\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.BODY_SENSORS, Permission.BODY_SENSORS_BACKGROUND -> {\n                    var hint: String\n                    hint = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU &&\n                        !permissions.contains(Permission.BODY_SENSORS)\n                    ) {\n                        context.getString(R.string.common_permission_sensors_background)\n                    } else {\n                        context.getString(R.string.common_permission_sensors)\n                    }\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.BLUETOOTH_SCAN, Permission.BLUETOOTH_CONNECT, Permission.BLUETOOTH_ADVERTISE -> {\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {\n                        val hint = context.getString(R.string.common_permission_wireless_devices)\n                        if (!permissionNames.contains(hint)) {\n                            permissionNames.add(hint)\n                        }\n                    }\n                }\n                Permission.NEARBY_WIFI_DEVICES -> {\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n                        val hint = context.getString(R.string.common_permission_wireless_devices)\n                        if (!permissionNames.contains(hint)) {\n                            permissionNames.add(hint)\n                        }\n                    }\n                }\n                Permission.READ_PHONE_STATE, Permission.CALL_PHONE, Permission.ADD_VOICEMAIL, Permission.USE_SIP, Permission.READ_PHONE_NUMBERS, Permission.ANSWER_PHONE_CALLS -> {\n                    val hint = context.getString(R.string.common_permission_phone)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.GET_ACCOUNTS, Permission.READ_CONTACTS, Permission.WRITE_CONTACTS -> {\n                    val hint = context.getString(R.string.common_permission_contacts)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.READ_CALENDAR, Permission.WRITE_CALENDAR -> {\n                    val hint = context.getString(R.string.common_permission_calendar)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.READ_CALL_LOG, Permission.WRITE_CALL_LOG, Permission.PROCESS_OUTGOING_CALLS -> {\n                    val hint: String = context.getString(if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) R.string.common_permission_call_log else R.string.common_permission_phone)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.ACTIVITY_RECOGNITION -> {\n                    val hint: String = context.getString(if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) R.string.common_permission_activity_recognition_30 else R.string.common_permission_activity_recognition_29)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.ACCESS_MEDIA_LOCATION -> {\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {\n                        val hint = context.getString(R.string.common_permission_media_location)\n                        if (!permissionNames.contains(hint)) {\n                            permissionNames.add(hint)\n                        }\n                    }\n                }\n                Permission.SEND_SMS, Permission.RECEIVE_SMS, Permission.READ_SMS, Permission.RECEIVE_WAP_PUSH, Permission.RECEIVE_MMS -> {\n                    val hint = context.getString(R.string.common_permission_sms)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.MANAGE_EXTERNAL_STORAGE -> {\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {\n                        val hint = context.getString(R.string.common_permission_manage_storage)\n                        if (!permissionNames.contains(hint)) {\n                            permissionNames.add(hint)\n                        }\n                    }\n                }\n                Permission.REQUEST_INSTALL_PACKAGES -> {\n                    val hint = context.getString(R.string.common_permission_install)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.SYSTEM_ALERT_WINDOW -> {\n                    val hint = context.getString(R.string.common_permission_window)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.WRITE_SETTINGS -> {\n                    val hint = context.getString(R.string.common_permission_setting)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.NOTIFICATION_SERVICE -> {\n                    val hint = context.getString(R.string.common_permission_notification)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.POST_NOTIFICATIONS -> {\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {\n                        val hint = context.getString(R.string.common_permission_post_notifications)\n                        if (!permissionNames.contains(hint)) {\n                            permissionNames.add(hint)\n                        }\n                    }\n                }\n                Permission.BIND_NOTIFICATION_LISTENER_SERVICE -> {\n                    val hint = context.getString(R.string.common_permission_notification_listener)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.PACKAGE_USAGE_STATS -> {\n                    val hint = context.getString(R.string.common_permission_task)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.SCHEDULE_EXACT_ALARM -> {\n                    val hint = context.getString(R.string.common_permission_alarm)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.ACCESS_NOTIFICATION_POLICY -> {\n                    val hint = context.getString(R.string.common_permission_not_disturb)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS -> {\n                    val hint = context.getString(R.string.common_permission_ignore_battery)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.BIND_VPN_SERVICE -> {\n                    val hint = context.getString(R.string.common_permission_vpn)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                Permission.PICTURE_IN_PICTURE -> {\n                    val hint = context.getString(R.string.common_permission_picture_in_picture)\n                    if (!permissionNames.contains(hint)) {\n                        permissionNames.add(hint)\n                    }\n                }\n                else -> {}\n            }\n        }\n        return permissionNames\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/java/com/wgllss/core/units/AppGlobals.kt",
    "content": "package com.wgllss.core.units\n\nimport android.app.Application\n\nobject AppGlobals {\n    lateinit var sApplication: Application\n\n    fun getApplication(): Application {\n        if (!this::sApplication.isInitialized) {\n            //去反射得到\n            try {\n                val aClass = Class.forName(\"android.app.ActivityThread\")\n                //获取里面的currentApplication\n                val currentApplication = aClass.getDeclaredMethod(\"currentApplication\")\n                sApplication = currentApplication.invoke(null, null) as Application\n            } catch (e: Exception) {\n                e.printStackTrace()\n            }\n        }\n        return sApplication\n    }\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/java/com/wgllss/core/units/DeviceIdUtil.kt",
    "content": "package com.wgllss.core.units\n\nimport android.content.Context\nimport android.os.Build\nimport android.provider.Settings\nimport java.security.MessageDigest\nimport java.util.*\n\nobject DeviceIdUtil {\n\n    private const val isDeviceSelfSerial = false\n\n    //自己设备测试序号\n    private val setsD = setOf(\"B05F9543937A5BA61901FC14F2540C62DA3E86C2\", \"2F6039397BA7EEC402E7036339963B23810CCBFD\")\n\n    //其他设备测试序号 命名可自定义\n    private const val ELSED = \"dxde_m_p\"\n\n    fun getDeviceId(): String {\n        if (isDeviceSelfSerial) {\n            //todo 模拟序列号\n            return \"2F6039397BA7EEC402E7036339963B23810CCBFD\"\n        } else {\n            val context = AppGlobals.sApplication\n            val sbDeviceId = StringBuilder()\n            val androidID = getAndroidId(context)\n            val id = getDeviceUUID(context).replace(\"-\", \"\")\n            if (androidID != null && androidID.isNotEmpty()) {\n                sbDeviceId.append(androidID)\n                sbDeviceId.append(\"|\")\n            }\n            if (id != null && id.isNotEmpty()) {\n                sbDeviceId.append(id)\n            }\n            if (sbDeviceId.toString().isNotEmpty()) {\n                try {\n                    val hash = getHashByString(sbDeviceId.toString())\n                    val sha1 = bytesToHex(hash!!)\n                    if (sha1 != null && sha1.isNotEmpty()) {\n                        LogTimer.LogE(this, \"sha1:$sha1\")\n                        return if (setsD.contains(sha1)) sha1 else ELSED\n                    }\n                } catch (ex: Exception) {\n                    ex.printStackTrace()\n                }\n            }\n            val s = sbDeviceId.toString()\n            return if (setsD.contains(s)) s else ELSED\n        }\n    }\n\n    private fun bytesToHex(data: ByteArray): String? {\n        val sb = StringBuilder()\n        var stmp: String\n        for (n in data.indices) {\n            stmp = Integer.toHexString(data[n].toInt() and 0xFF)\n            if (stmp.length == 1) sb.append(\"0\")\n            sb.append(stmp)\n        }\n        return sb.toString().uppercase(Locale.CHINA)\n    }\n\n    private fun getHashByString(data: String): ByteArray? {\n        return try {\n            val messageDigest: MessageDigest = MessageDigest.getInstance(\"SHA1\")\n            messageDigest.reset()\n            messageDigest.update(data.toByteArray(charset(\"UTF-8\")))\n            messageDigest.digest()\n        } catch (e: java.lang.Exception) {\n            \" \".toByteArray()\n        }\n    }\n\n    private fun getDeviceUUID(context: Context): String {\n        val sb = StringBuilder().apply {\n            append(\"100001\")\n            append(Build.BOARD)\n            append(Build.BRAND)\n            append(Build.DEVICE)\n            append(Build.HARDWARE)\n            append(Build.ID)\n            append(Build.MODEL)\n            append(Build.PRODUCT)\n        }\n        val long = sb.toString().hashCode().toLong()\n        return UUID(long, long).toString()\n    }\n\n    private fun getAndroidId(context: Context): String {\n        try {\n            return Settings.Secure.getString(\n                context.contentResolver,\n                Settings.Secure.ANDROID_ID\n            )\n        } catch (ex: java.lang.Exception) {\n            ex.printStackTrace()\n        }\n        return \" \"\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/java/com/wgllss/core/units/LogTimer.kt",
    "content": "package com.wgllss.core.units\n\nimport android.util.Log\nimport com.wgllss.core.re.BuildConfig\n\n\nobject LogTimer {\n    var time: Long = System.currentTimeMillis()\n\n    fun initTime(any: Any) {\n        time = System.currentTimeMillis()\n    }\n\n    fun LogE(any: Any, tagName: String) {\n        val cur = System.currentTimeMillis()\n        val dis = cur - time\n        if (BuildConfig.DEBUG)\n            Log.e(\"${any.javaClass.simpleName}\", \" $tagName 耗时:${dis} ms\")\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/java/com/wgllss/core/widget/CommonToast.kt",
    "content": "package com.wgllss.core.widget\n\nimport android.content.Context\nimport android.graphics.Color\nimport android.graphics.drawable.GradientDrawable\nimport android.os.Handler\nimport android.os.Looper\nimport android.util.TypedValue\nimport android.view.Gravity\nimport android.widget.LinearLayout\nimport android.widget.TextView\nimport android.widget.Toast\nimport com.wgllss.core.units.AppGlobals\nimport java.util.*\n\nclass CommonToast {\n    companion object {\n        private val toastBackgroundId = -1\n        private val toastTextColorId = -1\n        private var lastDate: Date? = null\n\n        // 提示时间间隔3秒钟\n        private val toastPeriod = 3\n        private var mToast: Toast? = null\n        private var toastText: TextView? = null\n        private val mHandler: Handler = Handler(Looper.getMainLooper())\n        private val r = Runnable {\n            if (mToast != null) {\n                mToast!!.cancel()\n                mToast = null // toast隐藏后，将其置为null\n            }\n            if (toastText != null) {\n                toastText = null\n            }\n        }\n\n        /**\n         * 显示toast\n         *\n         * @param strContent      显示内容\n         * @param widthRate       占屏幕宽度比例 0为 WRAP_CONTENT\n         * @param heightRate      占屏幕高度比例 0为 WRAP_CONTENT\n         * @param gravity         占屏幕位置\n         * @param delayMillis     延迟多少毫秒隐藏tost\n         * @param isInToastPeriod isInToastPeriod 在规定的时间间隔里内是否显示\n         * @author :Atar\n         * @createTime:2016-3-18上午10:19:13\n         * @version:1.0.0\n         * @modifyTime:\n         * @modifyAuthor:\n         * @description:\n         */\n        @JvmStatic\n        fun show(context: Context, strContent: String?, widthRate: Int, heightRate: Int, gravity: Int, offy: Int, delayMillis: Long, isInToastPeriod: Boolean) {\n            show(context, strContent, widthRate, heightRate, gravity, offy, delayMillis, isInToastPeriod, 1, 0)\n        }\n\n        /**\n         * 显示toast\n         *\n         * @param strContent      显示内容\n         * @param widthRate       占屏幕宽度比例 0为 WRAP_CONTENT\n         * @param heightRate      占屏幕高度比例 0为 WRAP_CONTENT\n         * @param gravity         占屏幕位置\n         * @param delayMillis     延迟多少毫秒隐藏tost\n         * @param isInToastPeriod isInToastPeriod 在规定的时间间隔里内是否显示\n         * @param orientation     屏幕方向\n         * @param rotation        旋转角度\n         * @author :Atar\n         * @createTime:2016-3-18上午10:19:13\n         * @version:1.0.0\n         * @modifyTime:\n         * @modifyAuthor:\n         * @description:\n         */\n        @JvmStatic\n        fun show(context: Context, strContent: String?, widthRate: Int, heightRate: Int, gravity: Int, offy: Int, delayMillis: Long, isInToastPeriod: Boolean, orientation: Int, rotation: Int) {\n            try {\n                if (isInToastPeriod) {\n                    return\n                }\n                mHandler!!.removeCallbacks(r)\n                if (mToast == null || toastText == null) { // 只有mToast==null时才重新创建，否则只需更改提示文字\n                    mToast = Toast(context)\n                    val toastLayout = LinearLayout(context)\n                    toastLayout.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT)\n                    toastLayout.orientation = LinearLayout.VERTICAL\n                    toastLayout.gravity = Gravity.CENTER\n                    toastText = TextView(context)\n                    val size = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10f, context.resources.displayMetrics).toInt()\n                    var width = 0\n                    var height = 0\n                    if (orientation == 1) { // 1竖屏\n                        val widthPixels = context.resources.displayMetrics.widthPixels\n                        width = if (widthRate == 0) {\n                            LinearLayout.LayoutParams.WRAP_CONTENT\n                        } else {\n                            widthPixels / widthRate\n                        }\n                        height = if (heightRate == 0) {\n                            LinearLayout.LayoutParams.WRAP_CONTENT\n                        } else {\n                            widthPixels / heightRate\n                        }\n                        toastText!!.layoutParams = LinearLayout.LayoutParams(width, height)\n                        toastLayout.rotation = rotation.toFloat()\n                    } else {\n                        val widthPixels = context.resources.displayMetrics.heightPixels\n                        width = if (widthRate == 0) {\n                            LinearLayout.LayoutParams.WRAP_CONTENT\n                        } else {\n                            widthPixels / widthRate\n                        }\n                        height = if (heightRate == 0) {\n                            LinearLayout.LayoutParams.WRAP_CONTENT\n                        } else {\n                            widthPixels / heightRate\n                        }\n                        toastText!!.layoutParams = LinearLayout.LayoutParams(width, height)\n                        toastLayout.rotation = rotation.toFloat()\n                    }\n                    toastText!!.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16f)\n                    toastText!!.setPadding(size, size, size, size)\n                    toastText!!.gravity = Gravity.CENTER\n                    if (toastBackgroundId != -1) {\n                        toastLayout.setBackgroundDrawable(context.resources.getDrawable(toastBackgroundId))\n                    } else {\n                        setText(toastText!!)\n                    }\n                    if (toastTextColorId != -1) {\n                        toastText!!.setTextColor(context.resources.getColor(toastTextColorId))\n                    } else {\n                        setText(toastText!!)\n                    }\n                    toastLayout.addView(toastText)\n                    mToast!!.view = toastLayout\n                    mToast!!.setGravity(gravity, 0, offy)\n                    mToast!!.duration = Toast.LENGTH_SHORT\n                }\n                if (toastText != null) {\n                    toastText!!.text = strContent\n                }\n                mHandler.postDelayed(r, delayMillis) // 延迟delayMillis耗秒隐藏toast\n                try {\n                    mToast!!.show()\n                } catch (e: Exception) {\n                    e.printStackTrace()\n                }\n            } catch (e: Exception) {\n            }\n        }\n\n        @JvmStatic\n        fun show(resID: Int) {\n            show(AppGlobals.sApplication, AppGlobals.sApplication.resources.getString(resID), 0, 0, Gravity.CENTER, 0, 3000, false)\n        }\n\n        /**\n         * 显示Toast\n         *\n         * @param strContent:提示肉容\n         * @author :Atar\n         * @createTime:2014-6-25上午10:23:59\n         * @version:1.0.0\n         * @modifyTime:\n         * @modifyAuthor:\n         * @description:\n         */\n        @JvmStatic\n        fun show(strContent: String?) {\n            show(AppGlobals.sApplication, strContent, 0, 0, Gravity.CENTER, 0, 3000, false)\n        }\n\n        @JvmStatic\n        fun show(strContent: String?, dealyMills: Int) {\n            show(AppGlobals.sApplication, strContent, 0, 0, Gravity.CENTER, 300, dealyMills.toLong(), false)\n        }\n\n        @JvmStatic\n        fun show(strContent: String?, gravity: Int, offy: Int) {\n            show(AppGlobals.sApplication, strContent, 0, 0, Gravity.CENTER, offy, 3000, false)\n        }\n\n        /**\n         * 显示toast\n         *\n         * @param strContent  显示内容\n         * @param widthRate   占屏幕宽度比例\n         * @param heightRate  占屏幕高度比例\n         * @param gravity     占屏幕位置\n         * @param delayMillis 延迟多少毫秒隐藏tost\n         * @author :Atar\n         * @createTime:2016-3-18上午10:19:13\n         * @version:1.0.0\n         * @modifyTime:\n         * @modifyAuthor:\n         * @description:\n         */\n        @JvmStatic\n        fun show(strContent: String?, widthRate: Int, heightRate: Int, gravity: Int, delayMillis: Long) {\n            show(AppGlobals.sApplication, strContent, widthRate, heightRate, gravity, 300, delayMillis, false)\n        }\n\n        /**\n         * 在时间间隔内不作提示\n         *\n         * @param strContent\n         * @author :Atar\n         * @createTime:2015-9-23下午3:33:03\n         * @version:1.0.0\n         * @modifyTime:\n         * @modifyAuthor:\n         * @description:\n         */\n        @JvmStatic\n        fun showWhihPeriod(strContent: String?) {\n            show(AppGlobals.sApplication, strContent, 0, 0, Gravity.CENTER, 0, 3000, isInToastPeriod())\n        }\n\n        /**\n         * 在时间间隔内不作提示\n         *\n         * @param strContent\n         * @author :Atar\n         * @createTime:2015-9-23下午3:33:03\n         * @version:1.0.0\n         * @modifyTime:\n         * @modifyAuthor:\n         * @description:\n         */\n        fun showWhihPeriod(strContent: String?, delayMills: Int) {\n            show(AppGlobals.sApplication, strContent, 0, 0, Gravity.CENTER, 0, delayMills.toLong(), isInToastPeriod())\n        }\n\n        /**\n         * @param mTextView\n         * @author :Atar\n         * @createTime:2015-9-23下午3:33:13\n         * @version:1.0.0\n         * @modifyTime:\n         * @modifyAuthor:\n         * @description:\n         */\n        private fun setText(mTextView: TextView) {\n            mTextView.setTextColor(Color.WHITE)\n            val roundRadius = 8\n            val fillColor = Color.parseColor(\"#90000000\")\n            val gd = GradientDrawable()\n            gd.setColor(fillColor)\n            gd.cornerRadius = roundRadius.toFloat()\n            mTextView.setBackgroundDrawable(gd)\n        }\n\n        /**\n         * 是否在提示时间间隔内\n         *\n         * @return\n         * @author :Atar\n         * @createTime:2014-11-12上午11:26:54\n         * @version:1.0.0\n         * @modifyTime:\n         * @modifyAuthor:\n         * @description:\n         */\n        fun isInToastPeriod(): Boolean {\n            val curDate = Date(System.currentTimeMillis()) // 获取当前时间\n            return if (curDate != null) {\n                var lastTime: Long = 0\n                lastTime = if (lastDate == null) {\n                    0\n                } else {\n                    lastDate!!.time\n                }\n                val timeLong = curDate.time - lastTime\n                if (timeLong < toastPeriod * 1000) {\n                    true\n                } else {\n                    lastDate = curDate\n                    false\n                }\n            } else {\n                true\n            }\n        }\n\n        fun dissMissToast() {\n            if (mToast != null) {\n                mToast!!.cancel()\n                mToast = null // toast隐藏后，将其置为null\n            }\n            if (toastText != null) {\n                toastText = null\n            }\n            mHandler?.removeCallbacksAndMessages(null)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/res/anim/anim_alpha_121.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<set xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n\n    <alpha\n        android:duration=\"0\"\n        android:fromAlpha=\"1.0\"\n        android:toAlpha=\"1.0\" />\n\n    <translate\n        android:duration=\"0\"\n        android:fromXDelta=\"0%p\"\n        android:toXDelta=\"0%p\" >\n    </translate>\n\n</set>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/res/drawable/button_bg_transparent_helf.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <solid android:color=\"#80000000\"></solid>\n\n    <corners\n        android:bottomLeftRadius=\"4.5dp\"\n        android:bottomRightRadius=\"4.5dp\"\n        android:topLeftRadius=\"4.5dp\"\n        android:topRightRadius=\"4.5dp\" />\n</shape>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/res/drawable/progressbar_shape.xml",
    "content": "<?xml version =\"1.0\" encoding =\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:drawable=\"@drawable/ic_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\" />\n"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/res/layout/common_loading.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:background=\"#00000000\"\n    android:gravity=\"center\">\n\n    <LinearLayout\n        android:layout_width=\"wrap_content\"\n        android:layout_height=\"wrap_content\"\n        android:background=\"@drawable/button_bg_transparent_helf\"\n        android:gravity=\"center\"\n        android:orientation=\"vertical\"\n        android:padding=\"20dp\">\n\n        <ProgressBar\n            android:layout_width=\"40dp\"\n            android:layout_height=\"40dp\"\n            android:layout_gravity=\"center\"\n            android:indeterminateDrawable=\"@drawable/progressbar_shape\" />\n\n        <TextView\n            android:id=\"@+id/txt_loading_text\"\n            android:layout_width=\"wrap_content\"\n            android:layout_height=\"wrap_content\"\n            android:layout_gravity=\"center_horizontal\"\n            android:layout_marginTop=\"5dp\"\n            android:textColor=\"@android:color/white\"\n            android:textSize=\"12dp\" />\n<!--        <com.wang.avi.AVLoadingIndicatorView-->\n<!--            android:id=\"@+id/avi\"-->\n<!--            android:layout_width=\"wrap_content\"-->\n<!--            android:layout_height=\"wrap_content\"-->\n<!--            android:visibility=\"visible\"-->\n<!--            app:indicatorName=\"LineSpinFadeLoaderIndicator\" />-->\n\n<!--        <TextView-->\n<!--            android:id=\"@+id/txt_loading_text\"-->\n<!--            android:layout_width=\"wrap_content\"-->\n<!--            android:layout_height=\"wrap_content\"-->\n<!--            android:layout_marginTop=\"20dp\"-->\n<!--            android:textColor=\"@color/white\"-->\n<!--            android:textSize=\"17dp\"-->\n<!--            android:visibility=\"gone\" />-->\n    </LinearLayout>\n\n</LinearLayout>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!--    <string name=\"app_name\">WgllssCode</string>-->\n\n    <!-- 异常错误提示  by Atar start -->\n    <string name=\"ElseNetException\">未知错误异常</string>\n    <string name=\"SocketTimeoutException\">网络超时</string>\n    <string name=\"TimeoutException\">网络超时</string>\n    <string name=\"SocketException\">网络错误</string>\n    <string name=\"ConnectException\">网络错误</string>\n    <string name=\"HttpException\">服务器异常</string>\n    <string name=\"UnknownHostException\">无网络连接</string>\n    <string name=\"HostBaseUrlError\">请求地址错误</string>\n    <string name=\"Mobilenetuseless_msg\">当前网络不可用</string>\n    <string name=\"failed_to_connect_to\">无法连接到服务器</string>\n    <string name=\"JsonSyntaxException\">数据错误,json解析错误</string>\n    <!-- 异常错误提示  by end  -->\n\n    <!-- 权限相关提示  by Atar start -->\n\n    <string name=\"common_permission_hint\">授权提示</string>\n    <string name=\"common_permission_message\">使用此功能需要先授予%s</string>\n    <string name=\"common_permission_granted\">授予</string>\n    <string name=\"common_permission_denied\">取消</string>\n\n    <string name=\"common_permission_alert\">授权提醒</string>\n    <string name=\"common_permission_fail_hint\">授权失败，请正确授予权限</string>\n    <string name=\"common_permission_fail_assign_hint\">授权失败，请正确授予%s</string>\n    <string name=\"common_permission_manual_fail_hint\">获取权限失败，请手动授予权限</string>\n    <string name=\"common_permission_manual_assign_fail_hint\">获取权限失败，请手动授予%s</string>\n    <string name=\"common_permission_background_location_fail_hint\">获取后台定位权限失败，\\n请您选择《始终允许》</string>\n    <string name=\"common_permission_background_sensors_fail_hint\">获取后台传感器权限失败，\\n请您选择《始终允许》</string>\n    <string name=\"common_permission_media_location_hint_fail\">获取媒体位置权限失败\\n请清除应用数据后重试</string>\n    <string name=\"common_permission_goto_setting_page\">前往授权</string>\n\n    <string name=\"common_permission_calendar\">日历权限</string>\n    <string name=\"common_permission_camera\">相机权限</string>\n    <string name=\"common_permission_contacts\">通讯录权限</string>\n    <string name=\"common_permission_location\">定位权限</string>\n    <string name=\"common_permission_location_background\">后台定位权限</string>\n    <string name=\"common_permission_wireless_devices\">附近的设备权限</string>\n    <string name=\"common_permission_microphone\">麦克风权限</string>\n    <string name=\"common_permission_phone\">电话权限</string>\n    <string name=\"common_permission_call_log\">通话记录权限</string>\n    <string name=\"common_permission_sensors\">身体传感器权限</string>\n    <string name=\"common_permission_sensors_background\">后台身体传感器权限</string>\n    <string name=\"common_permission_activity_recognition_29\">健身运动权限</string>\n    <string name=\"common_permission_activity_recognition_30\">身体活动权限</string>\n    <string name=\"common_permission_media_location\">读取媒体文件位置权限</string>\n    <string name=\"common_permission_sms\">短信权限</string>\n    <string name=\"common_permission_storage\">存储权限</string>\n    <string name=\"common_permission_post_notifications\">发送通知权限</string>\n    <string name=\"common_permission_image_and_video\">照片和视频权限</string>\n    <string name=\"common_permission_audio\">音乐和音频权限</string>\n\n    <string name=\"common_permission_manage_storage\">所有文件访问权限</string>\n    <string name=\"common_permission_install\">安装应用权限</string>\n    <string name=\"common_permission_window\">悬浮窗权限</string>\n    <string name=\"common_permission_setting\">修改系统设置权限</string>\n    <string name=\"common_permission_notification\">通知权限</string>\n    <string name=\"common_permission_notification_listener\">通知栏监听权限</string>\n    <string name=\"common_permission_task\">查看使用情况权限</string>\n    <string name=\"common_permission_alarm\">查看闹钟提醒权限</string>\n    <string name=\"common_permission_not_disturb\">勿扰权限</string>\n    <string name=\"common_permission_ignore_battery\">忽略电池优化权限</string>\n    <string name=\"common_permission_picture_in_picture\">画中画权限</string>\n    <string name=\"common_permission_vpn\">\\tVPN\\t权限</string>\n\n    <!-- 权限相关提示  by end -->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n\n    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">\n        <item name=\"android:windowFrame\">@null</item>\n        <item name=\"android:windowIsFloating\">true</item>\n        <item name=\"android:windowIsTranslucent\">true</item>\n        <item name=\"android:windowNoTitle\">true</item>\n        <!-- 设置背景色 透明-->\n        <item name=\"android:background\">@android:color/transparent</item>\n        <item name=\"android:windowBackground\">@android:color/transparent</item>\n        <!-- 设置是否显示背景 -->\n        <item name=\"android:backgroundDimEnabled\">true</item>\n        <!-- 设置背景透明度 -->\n        <item name=\"android:backgroundDimAmount\">0</item>\n        <!-- 设置点击空白不消失 -->\n        <item name=\"android:windowCloseOnTouchOutside\">false</item>\n    </style>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-library/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-library/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.host.library\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\ndependencies {\n    implementation project(path: ':maven-wgllss-dynamic-host-skin-resource-lib')\n    implementation project(path: ':maven-wgllss-common-re-library')\n    implementation project(path: ':maven-wgllss-business-re-library')\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-library/consumer-rules.pro",
    "content": ""
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-library/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-library/src/androidTest/java/com/wgllss/host/library/ExampleInstrumentedTest.kt",
    "content": "package com.wgllss.host.library\n\nimport android.support.test.InstrumentationRegistry\nimport android.support.test.runner.AndroidJUnit4\n\nimport org.junit.Test\nimport org.junit.runner.RunWith\n\nimport org.junit.Assert.*\n\n/**\n * Instrumented test, which will execute on an Android device.\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\n@RunWith(AndroidJUnit4::class)\nclass ExampleInstrumentedTest {\n    @Test\n    fun useAppContext() {\n        // Context of the app under test.\n        val appContext = InstrumentationRegistry.getInstrumentation().targetContext\n        assertEquals(\"com.wgllss.host.library.test\", appContext.packageName)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-library/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.host.library\">\n\n    <application>\n\n        <activity\n            android:name=\"com.wgllss.dynamic.ui.HomeActivity\"\n            android:exported=\"true\"\n            android:theme=\"@style/LauncherTheme2\">\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\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginStandardActivity\"\n            android:launchMode=\"standard\"\n            android:theme=\"@style/LauncherTheme2\" />\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginStandardComposeActivity\"\n            android:launchMode=\"standard\"\n            android:theme=\"@style/LauncherTheme2\" />\n\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginSingleInstanceActivity\"\n            android:launchMode=\"singleInstance\"\n            android:theme=\"@style/LauncherTheme2\" />\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginSingleInstanceComposeActivity\"\n            android:launchMode=\"singleInstance\"\n            android:theme=\"@style/LauncherTheme2\" />\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginSingleTaskActivity\"\n            android:launchMode=\"singleTask\"\n            android:theme=\"@style/LauncherTheme2\" />\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginSingleTaskComposeActivity\"\n            android:launchMode=\"singleInstance\"\n            android:theme=\"@style/LauncherTheme2\" />\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginSingleTopActivity\"\n            android:launchMode=\"singleTop\"\n            android:theme=\"@style/LauncherTheme2\" />\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginSingleTopComposeActivity\"\n            android:launchMode=\"singleInstance\"\n            android:theme=\"@style/LauncherTheme2\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginStartStickyService\"\n            android:enabled=\"true\"\n            android:exported=\"true\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginStartNotStickyService\"\n            android:enabled=\"true\"\n            android:exported=\"true\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginStartRedeliverIntentService\"\n            android:enabled=\"true\"\n            android:exported=\"true\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginStartStickyCompatibilityService\"\n            android:enabled=\"true\"\n            android:exported=\"true\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginProcessStartStickyService\"\n            android:enabled=\"true\"\n            android:exported=\"true\"\n            android:process=\":processSticky\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginProcessStartNotStickyService\"\n            android:enabled=\"true\"\n            android:exported=\"true\"\n            android:process=\":processNotSticky\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginProcessStartRedeliverIntentService\"\n            android:enabled=\"true\"\n            android:exported=\"true\"\n            android:process=\":processRedeliver\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginProcessStartStickyCompatibilityService\"\n            android:enabled=\"true\"\n            android:exported=\"true\"\n            android:process=\":processStickyCompatibility\" />\n\n    </application>\n\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-library/src/test/java/com/wgllss/host/library/ExampleUnitTest.kt",
    "content": "package com.wgllss.host.library\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\nclass ExampleUnitTest {\n    @Test\n    fun addition_isCorrect() {\n        assertEquals(4, 2 + 2)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.host.skin\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n    implementation libs.appcompat\n    implementation libs.google.material\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.host.skin\" />\n"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/splash_preview.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item android:drawable=\"@color/white\"></item>\n\n    <item>\n        <bitmap\n            android:gravity=\"center\"\n            android:src=\"@drawable/icon_loading\" />\n    </item>\n\n</layer-list>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/src/main/res/drawable/splash_preview_dark.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n\n    <item android:drawable=\"@color/black\"></item>\n\n    <item>\n        <bitmap\n            android:gravity=\"center\"\n            android:src=\"@drawable/icon_loading\" />\n    </item>\n\n</layer-list>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#FF3300</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#FF000000</color>\n\n    <color name=\"colorBackground\">#008e99</color>\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/src/main/res/values/dimens.xml",
    "content": "<resources>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/src/main/res/values/strings.xml",
    "content": "<resources>\n    <string name=\"app_name\">WXDynamicPlugin</string>\n\n\n    <string name=\"duration_unknown\">--:--</string>\n    <string name=\"duration_format\">%d:%02d</string>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n    <style name=\"Base.Theme.WXDynamicPlugin\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">\n        <!-- Customize your light theme here. -->\n        <item name=\"colorPrimary\">@color/colorPrimary</item>\n        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>\n        <item name=\"android:colorBackground\">@color/design_default_color_background</item>\n        <item name=\"android:textColorPrimary\">@color/black</item>\n        <item name=\"windowActionBar\">false</item>\n        <item name=\"windowNoTitle\">true</item>\n        <!--        <item name=\"android:colorBackground\">?colorSurface</item>-->\n        <!--        <item name=\"android:statusBarColor\">?colorSurface</item>-->\n        <!--        <item name=\"android:windowLightStatusBar\">true</item>-->\n    </style>\n\n    <style name=\"Theme.WXDynamicPlugin\" parent=\"Base.Theme.WXDynamicPlugin\">\n        <item name=\"android:background\">@android:color/transparent</item>\n        <item name=\"android:windowIsTranslucent\">true</item>\n        <item name=\"android:windowBackground\">@color/white</item>\n        <!--        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>-->\n    </style>\n\n    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">\n        <item name=\"android:windowFrame\">@null</item>\n        <item name=\"android:windowIsFloating\">true</item>\n        <item name=\"android:windowIsTranslucent\">true</item>\n        <item name=\"android:windowNoTitle\">true</item>\n        <!-- 设置背景色 透明-->\n        <item name=\"android:background\">@android:color/transparent</item>\n        <item name=\"android:windowBackground\">@android:color/transparent</item>\n        <!-- 设置是否显示背景 -->\n        <item name=\"android:backgroundDimEnabled\">true</item>\n        <!-- 设置背景透明度 -->\n        <item name=\"android:backgroundDimAmount\">0</item>\n        <!-- 设置点击空白不消失 -->\n        <item name=\"android:windowCloseOnTouchOutside\">false</item>\n    </style>\n\n    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">\n\n        <item name=\"android:windowNoTitle\">true</item>\n        <item name=\"android:windowFullscreen\">true</item>\n        <item name=\"android:windowBackground\">@color/white</item>\n    </style>\n\n    <style name=\"LauncherTheme2\" parent=\"Base.Theme.WXDynamicPlugin\">\n        <!--        该方式看不到启动页-->\n\n        <item name=\"android:windowNoTitle\">true</item>\n        <!--        <item name=\"android:windowFullscreen\">true</item>-->\n        <item name=\"android:windowBackground\">@drawable/splash_preview</item>\n\n    </style>\n\n    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <item name=\"android:background\">@android:color/transparent</item>\n        <item name=\"android:windowIsTranslucent\">true</item>\n        <item name=\"android:windowNoTitle\">true</item>\n        <item name=\"android:windowBackground\">@android:color/transparent</item>\n        <item name=\"android:windowFullscreen\">true</item>\n        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>\n    </style>\n\n\n    <style name=\"CircleStyle\">\n        <item name=\"cornerFamily\">rounded</item>\n        <item name=\"cornerSize\">50%</item>\n    </style>\n\n    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">\n        <item name=\"android:colorControlHighlight\">#FF4081</item>\n        <!--        <item name=\"paddingStart\">20dp</item>-->\n        <!--        <item name=\"android:paddingTop\">20dp</item>-->\n        <item name=\"android:radius\">20dp</item>\n    </style>\n\n    <style name=\"onTextOff\" parent=\"Theme.WXDynamicPlugin\">\n        <item name=\"android:textColor\">@color/white</item>\n        <item name=\"android:textSize\">16dp</item>\n    </style>\n\n    <style name=\"ssStyle\" parent=\"Theme.WXDynamicPlugin\">\n        <item name=\"colorControlActivated\">@color/colorPrimary</item>\n        <item name=\"colorSwitchThumbNormal\">#999999</item>\n        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>\n    </style>\n\n    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">\n        <!--        <item name=\"android:textStyle\">nomal</item>-->\n        <item name=\"android:textSize\">20dp</item>\n    </style>\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#FF3300</color>\n    <color name=\"colorOnPrimary\">#B0B0B0</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n    <style name=\"Base.Theme.WXDynamicPlugin\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">\n        <!-- Customize your light theme here. -->\n        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>\n        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>\n        <item name=\"android:colorBackground\">@color/colorBackground</item>\n        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>\n        <item name=\"windowActionBar\">false</item>\n        <item name=\"windowNoTitle\">true</item>\n        <item name=\"android:statusBarColor\">@color/black</item>\n        <!--        <item name=\"android:colorBackground\">?colorSurface</item>-->\n        <!--        <item name=\"android:statusBarColor\">?colorSurface</item>-->\n        <!--        <item name=\"android:windowLightStatusBar\">true</item>-->\n    </style>\n\n    <style name=\"Theme.WXDynamicPlugin\" parent=\"Base.Theme.WXDynamicPlugin\">\n        <item name=\"android:background\">@android:color/transparent</item>\n        <item name=\"android:windowIsTranslucent\">true</item>\n        <!--        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>-->\n    </style>\n\n    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">\n        <item name=\"android:windowFrame\">@null</item>\n        <item name=\"android:windowIsFloating\">true</item>\n        <item name=\"android:windowIsTranslucent\">true</item>\n        <item name=\"android:windowNoTitle\">true</item>\n        <!-- 设置背景色 透明-->\n        <item name=\"android:background\">@android:color/transparent</item>\n        <item name=\"android:windowBackground\">@android:color/transparent</item>\n        <!-- 设置是否显示背景 -->\n        <item name=\"android:backgroundDimEnabled\">true</item>\n        <!-- 设置背景透明度 -->\n        <item name=\"android:backgroundDimAmount\">0</item>\n        <!-- 设置点击空白不消失 -->\n        <item name=\"android:windowCloseOnTouchOutside\">false</item>\n    </style>\n\n    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">\n\n        <item name=\"android:windowNoTitle\">true</item>\n        <item name=\"android:windowFullscreen\">true</item>\n        <item name=\"android:windowBackground\">@color/white</item>\n    </style>\n\n    <style name=\"LauncherTheme2\" parent=\"Base.Theme.WXDynamicPlugin\">\n        <!--        该方式看不到启动页-->\n\n        <item name=\"android:windowNoTitle\">true</item>\n        <!--        <item name=\"android:windowFullscreen\">true</item>-->\n        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>\n\n    </style>\n\n    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">\n        <item name=\"android:background\">@android:color/transparent</item>\n        <item name=\"android:windowIsTranslucent\">true</item>\n        <item name=\"android:windowNoTitle\">true</item>\n        <item name=\"android:windowBackground\">@android:color/transparent</item>\n        <item name=\"android:windowFullscreen\">true</item>\n        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>\n    </style>\n\n\n    <style name=\"CircleStyle\">\n        <item name=\"cornerFamily\">rounded</item>\n        <item name=\"cornerSize\">50%</item>\n    </style>\n\n    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">\n        <item name=\"android:colorControlHighlight\">#FF4081</item>\n        <!--        <item name=\"paddingStart\">20dp</item>-->\n        <!--        <item name=\"android:paddingTop\">20dp</item>-->\n        <item name=\"android:radius\">20dp</item>\n    </style>\n\n    <style name=\"onTextOff\" parent=\"Theme.WXDynamicPlugin\">\n        <item name=\"android:textColor\">@color/white</item>\n        <item name=\"android:textSize\">16dp</item>\n    </style>\n\n    <style name=\"ssStyle\" parent=\"Theme.WXDynamicPlugin\">\n        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>\n        <item name=\"colorSwitchThumbNormal\">#999999</item>\n        <item name=\"android:colorForeground\">@color/colorPrimary</item>\n    </style>\n\n    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">\n        <!--        <item name=\"android:textStyle\">nomal</item>-->\n        <item name=\"android:textSize\">20dp</item>\n    </style>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n    <style name=\"LauncherTheme2\" parent=\"Base.Theme.WXDynamicPlugin\">\n        <item name=\"android:windowNoTitle\">true</item>\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"statusBarBackground\">@color/colorPrimary</item>-->\n        <item name=\"android:statusBarColor\">@color/white</item>\n        <item name=\"android:windowBackground\">@drawable/splash_preview</item>\n        <!--指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到-->\n        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>\n    </style>\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n    <style name=\"Theme.WXDynamicPlugin\" parent=\"Base.Theme.WXDynamicPlugin\">\n        <!-- Transparent system bars for edge-to-edge. -->\n        <item name=\"android:navigationBarColor\">@android:color/transparent</item>\n        <item name=\"android:statusBarColor\">@android:color/transparent</item>\n        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>\n    </style>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n    alias(libs.plugins.kotlin.kapt)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.core\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1008\n        versionName \"1.0.0.8\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n\n    buildFeatures {\n        dataBinding = true\n        buildConfig = true\n    }\n    kapt {\n        generateStubs = true\n    }\n\n    lintOptions {\n        abortOnError false\n    }\n}\n\ndependencies {\n    compileOnly project(':maven-wgllss-common-re-library')\n\n    compileOnly libs.appcompat\n    compileOnly libs.androidx.recyclerview\n    compileOnly libs.google.material\n\n    compileOnly libs.androidx.lifecycle.runtime.ktx\n    compileOnly libs.androidx.lifecycle.livedata.ktx\n    compileOnly libs.androidx.lifecycle.viewmodel.ktx\n    compileOnly libs.androidx.activity.ktx\n    compileOnly libs.androidx.fragment.ktx\n\n    compileOnly libs.androidx.core.ktx\n    compileOnly libs.swiperefreshlayout\n\n    compileOnly libs.androidx.navigation.fragment.ktx\n    compileOnly libs.androidx.navigation.ui.ktx\n    compileOnly libs.glide\n    kapt libs.glide.compiler\n\n    //compose\n    compileOnly libs.androidx.activity.compose\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_common_lib.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_common_lib_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_common_lib_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.core\">\n\n    <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseActivity.kt",
    "content": "package com.wgllss.core.activity\n\nimport android.os.Bundle\nimport androidx.fragment.app.FragmentActivity\nimport com.wgllss.core.dialog.CommonLoadingView\nimport com.wgllss.core.ex.finishActivity\nimport com.wgllss.core.units.StatusBarUtil\nimport com.wgllss.core.widget.CommonToast\n\nabstract class BaseActivity : FragmentActivity() {\n    private var loading: CommonLoadingView? = null\n    private var initFlag = false\n    open fun hasNavigationBarStatusBarTranslucent() = true\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        if (hasNavigationBarStatusBarTranslucent()) StatusBarUtil.setStatusBarTranslucent(this)\n        beforeSuperOnCreate(savedInstanceState);\n        super.onCreate(savedInstanceState)\n        initX(savedInstanceState)\n    }\n\n    protected open fun initX(savedInstanceState: Bundle?) {\n        initControl(savedInstanceState)\n        bindEvent()\n        initValue()\n    }\n\n    override fun onWindowFocusChanged(hasFocus: Boolean) {\n        super.onWindowFocusChanged(hasFocus)\n        if (hasFocus) {\n            if (!initFlag) {\n                initFlag = true\n                lazyInitValue()\n            }\n        }\n    }\n\n    fun onToast(content: String) {\n        CommonToast.show(content);\n    }\n\n    //是否loading\n    open fun isShowloading(): Boolean? {\n        return loading?.isShowing()\n    }\n\n    open fun showloading(showText: String?) {\n        if (null == loading) loading = CommonLoadingView(this)\n        if (isShowloading() == true) return\n        if (showText != null) loading?.show(showText)\n    }\n\n    open fun hideLoading() {\n        loading?.dismiss()\n        loading = null\n    }\n\n    override fun onDestroy() {\n        hideLoading()\n        super.onDestroy()\n    }\n\n    override fun onBackPressed() {\n        super.onBackPressed()\n        finishActivity()\n    }\n\n    open fun beforeSuperOnCreate(savedInstanceState: Bundle?) {}\n    open abstract fun initControl(savedInstanceState: Bundle?)\n    open abstract fun bindEvent()\n    open abstract fun initValue()\n    open fun lazyInitValue() {}\n\n\n    private var exitTime: Long = 0\n\n    protected open fun exitApp() {\n        if (System.currentTimeMillis() - exitTime > 2000) {\n            onToast(\"再按一次退出程序\")\n            exitTime = System.currentTimeMillis()\n        } else {\n            WActivityManager.exitApplication()\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseMVVMActivity.kt",
    "content": "package com.wgllss.core.activity\n\nimport android.os.Bundle\nimport androidx.annotation.LayoutRes\nimport androidx.annotation.MainThread\nimport androidx.databinding.DataBindingUtil\nimport androidx.databinding.ViewDataBinding\nimport androidx.lifecycle.Observer\nimport androidx.lifecycle.ViewModelLazy\nimport com.wgllss.core.units.WLog\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport java.lang.reflect.ParameterizedType\nimport kotlin.system.measureTimeMillis\n\n/**\n * contentLayoutId 不传给父类，否则 binding = DataBindingUtil.setContentView(this, contentLayoutId) 设置一次\n * 父类里面ComponentActivity还要设置一次 共2次 见下\n *\n *\n * @Override\n * protected void onCreate(@Nullable Bundle savedInstanceState) {\n *     // Restore the Saved State first so that it is available to\n *     // OnContextAvailableListener instances\n *    mSavedStateRegistryController.performRestore(savedInstanceState);\n *    mContextAwareHelper.dispatchOnContextAvailable(this);\n *    super.onCreate(savedInstanceState);\n *    mActivityResultRegistry.onRestoreInstanceState(savedInstanceState);\n *    ReportFragment.injectIfNeededIn(this);\n *    if (mContentLayoutId != 0) {\n *      setContentView(mContentLayoutId);\n *    }\n *  }\n */\nabstract class BaseMVVMActivity<VM : BaseViewModel, VB : ViewDataBinding>(@LayoutRes private val contentLayoutId: Int) : BaseActivity() {\n\n    protected val viewModel by lazyViewModels()\n    protected lateinit var binding: VB\n\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        val time = measureTimeMillis {\n            binding = DataBindingUtil.setContentView(this, contentLayoutId)\n            binding.lifecycleOwner = this@BaseMVVMActivity\n        }\n        WLog.e(this, \"time:${time}\")\n    }\n\n    override fun bindEvent() {\n        viewModel?.run {\n            showUIDialog.observe(this@BaseMVVMActivity, Observer { it ->\n                if (it.isShow) showloading(it.msg) else hideLoading()\n            })\n            errorMsgLiveData.observe(this@BaseMVVMActivity, Observer {\n                onToast(it)\n            })\n        }\n    }\n\n    override fun initValue() {\n    }\n\n\n    @MainThread\n    inline fun lazyViewModels(): Lazy<VM> {\n        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>\n        return ViewModelLazy(cls.kotlin, { viewModelStore }, { defaultViewModelProviderFactory })\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseViewModePluginActivity.kt",
    "content": "package com.wgllss.core.activity\n\nimport android.os.Bundle\nimport androidx.annotation.MainThread\nimport androidx.lifecycle.Observer\nimport androidx.lifecycle.ViewModelLazy\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport java.lang.reflect.ParameterizedType\n\n/**\n * contentLayoutId 不传给父类，否则 binding = DataBindingUtil.setContentView(this, contentLayoutId) 设置一次\n * 父类里面ComponentActivity还要设置一次 共2次 见下\n *\n *\n * @Override\n * protected void onCreate(@Nullable Bundle savedInstanceState) {\n *     // Restore the Saved State first so that it is available to\n *     // OnContextAvailableListener instances\n *    mSavedStateRegistryController.performRestore(savedInstanceState);\n *    mContextAwareHelper.dispatchOnContextAvailable(this);\n *    super.onCreate(savedInstanceState);\n *    mActivityResultRegistry.onRestoreInstanceState(savedInstanceState);\n *    ReportFragment.injectIfNeededIn(this);\n *    if (mContentLayoutId != 0) {\n *      setContentView(mContentLayoutId);\n *    }\n *  }\n */\nabstract class BaseViewModePluginActivity<VM : BaseViewModel>(protected val layoutName: String, packageNamePlugin: String) : BaseViewPluginResActivity(packageNamePlugin) {\n\n    protected val viewModel by lazyViewModels()\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        ResourceUtils.setContentLayout(this, resourcesPlugin, layoutName, packageNamePlugin)\n    }\n\n    override fun bindEvent() {\n        viewModel?.run {\n            showUIDialog.observe(this@BaseViewModePluginActivity, Observer { it ->\n                if (it.isShow) showloading(it.msg) else hideLoading()\n            })\n            errorMsgLiveData.observe(this@BaseViewModePluginActivity, Observer {\n                onToast(it)\n            })\n        }\n    }\n\n    override fun initValue() {\n    }\n\n\n    @MainThread\n    inline fun lazyViewModels(): Lazy<VM> {\n        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>\n        return ViewModelLazy(cls.kotlin, { viewModelStore }, { defaultViewModelProviderFactory })\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseViewModelActivity.kt",
    "content": "package com.wgllss.core.activity\n\nimport android.os.Bundle\nimport androidx.annotation.MainThread\nimport androidx.lifecycle.Observer\nimport androidx.lifecycle.ViewModelLazy\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport java.lang.reflect.ParameterizedType\n\n/**\n * contentLayoutId 不传给父类，否则 binding = DataBindingUtil.setContentView(this, contentLayoutId) 设置一次\n * 父类里面ComponentActivity还要设置一次 共2次 见下\n *\n *\n * @Override\n * protected void onCreate(@Nullable Bundle savedInstanceState) {\n *     // Restore the Saved State first so that it is available to\n *     // OnContextAvailableListener instances\n *    mSavedStateRegistryController.performRestore(savedInstanceState);\n *    mContextAwareHelper.dispatchOnContextAvailable(this);\n *    super.onCreate(savedInstanceState);\n *    mActivityResultRegistry.onRestoreInstanceState(savedInstanceState);\n *    ReportFragment.injectIfNeededIn(this);\n *    if (mContentLayoutId != 0) {\n *      setContentView(mContentLayoutId);\n *    }\n *  }\n */\nabstract class BaseViewModelActivity<VM : BaseViewModel>(packageNamePlugin: String) : BaseViewPluginResActivity(packageNamePlugin) {\n\n    protected val viewModel by lazyViewModels()\n\n    override fun bindEvent() {\n        viewModel?.run {\n            showUIDialog.observe(this@BaseViewModelActivity, Observer { it ->\n                if (it.isShow) showloading(it.msg) else hideLoading()\n            })\n            errorMsgLiveData.observe(this@BaseViewModelActivity, Observer {\n                onToast(it)\n            })\n        }\n    }\n\n    override fun initValue() {\n    }\n\n\n    @MainThread\n    inline fun lazyViewModels(): Lazy<VM> {\n        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>\n        return ViewModelLazy(cls.kotlin, { viewModelStore }, { defaultViewModelProviderFactory })\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseViewModelClassActivity.kt",
    "content": "package com.wgllss.core.activity\n\nimport android.os.Bundle\nimport androidx.lifecycle.Observer\nimport androidx.lifecycle.ViewModelProvider\nimport com.wgllss.core.viewmodel.BaseViewModel\n\n/**\n * contentLayoutId 不传给父类，否则 binding = DataBindingUtil.setContentView(this, contentLayoutId) 设置一次\n * 父类里面ComponentActivity还要设置一次 共2次 见下\n *\n *\n * @Override\n * protected void onCreate(@Nullable Bundle savedInstanceState) {\n *     // Restore the Saved State first so that it is available to\n *     // OnContextAvailableListener instances\n *    mSavedStateRegistryController.performRestore(savedInstanceState);\n *    mContextAwareHelper.dispatchOnContextAvailable(this);\n *    super.onCreate(savedInstanceState);\n *    mActivityResultRegistry.onRestoreInstanceState(savedInstanceState);\n *    ReportFragment.injectIfNeededIn(this);\n *    if (mContentLayoutId != 0) {\n *      setContentView(mContentLayoutId);\n *    }\n *  }\n */\nabstract class BaseViewModelClassActivity : BaseActivity() {\n\n    val viewModel by lazy { ViewModelProvider(viewModelStore, defaultViewModelProviderFactory).get(getViewModelClass()) }\n\n    override fun bindEvent() {\n        viewModel?.run {\n            showUIDialog.observe(this@BaseViewModelClassActivity, Observer { it ->\n                if (it.isShow) showloading(it.msg) else hideLoading()\n            })\n            errorMsgLiveData.observe(this@BaseViewModelClassActivity, Observer {\n                onToast(it)\n            })\n        }\n    }\n\n    override fun initValue() {\n    }\n\n    open abstract fun getViewModelClass(): Class<out BaseViewModel>\n\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/BaseViewPluginResActivity.kt",
    "content": "package com.wgllss.core.activity\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.graphics.drawable.Drawable\nimport com.wgllss.core.fragment.BasePluginResFragment\nimport com.wgllss.core.units.ResourceUtils\n\n/**\n * contentLayoutId 不传给父类，否则 binding = DataBindingUtil.setContentView(this, contentLayoutId) 设置一次\n * 父类里面ComponentActivity还要设置一次 共2次 见下\n *\n *\n * @Override\n * protected void onCreate(@Nullable Bundle savedInstanceState) {\n *     // Restore the Saved State first so that it is available to\n *     // OnContextAvailableListener instances\n *    mSavedStateRegistryController.performRestore(savedInstanceState);\n *    mContextAwareHelper.dispatchOnContextAvailable(this);\n *    super.onCreate(savedInstanceState);\n *    mActivityResultRegistry.onRestoreInstanceState(savedInstanceState);\n *    ReportFragment.injectIfNeededIn(this);\n *    if (mContentLayoutId != 0) {\n *      setContentView(mContentLayoutId);\n *    }\n *  }\n */\nabstract class BaseViewPluginResActivity(protected val packageNamePlugin: String) : BaseActivity() {\n\n    protected lateinit var resourcesPlugin: Resources\n\n    override fun attachBaseContext(newBase: Context) {\n        super.attachBaseContext(newBase)\n        getPluginResources()?.let {\n            resourcesPlugin = it\n        }\n    }\n\n    override fun onStart() {\n        super.onStart()\n        onChangeSkin(getSkinResources())\n    }\n\n    abstract fun getSkinResources(): Resources\n\n    abstract fun getPluginResources(): Resources?\n\n    protected fun getPluginDrawable(resName: String): Drawable = ResourceUtils.getPluginDrawable(resourcesPlugin, resName, packageNamePlugin)\n\n    protected fun getPluginDrawable(skinRes: Resources, resName: String, skinPackageName: String): Drawable = ResourceUtils.getPluginDrawable(skinRes, resName, skinPackageName)\n\n    protected fun getPluginID(resName: String) = ResourceUtils.getPluginID(resourcesPlugin, resName, packageNamePlugin)\n\n    protected fun getPluginID(skinRes: Resources, resName: String, skinPackageName: String) = ResourceUtils.getPluginID(skinRes, resName, skinPackageName)\n\n    open fun onChangeSkin(skinRes: Resources) {\n\n    }\n\n    open fun callChangeSkin(skinRes: Resources) {\n        onChangeSkin(skinRes)\n        supportFragmentManager.fragments.forEach {\n            if (it.isAdded && it is BasePluginResFragment) {\n                it.callChangeSkin(skinRes)\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/WActivityManager.kt",
    "content": "package com.wgllss.core.activity\n\nimport android.app.Activity\nimport android.os.Process\nimport com.wgllss.core.ex.finishActivity\nimport java.lang.reflect.Field\nimport java.lang.reflect.Method\n\nobject WActivityManager {\n\n    fun getActivitys(block: (it: Activity) -> Any) {\n        try {\n            val activityThread = Class.forName(\"android.app.ActivityThread\")\n            val currentActivityThread: Method = activityThread.getDeclaredMethod(\"currentActivityThread\")\n            currentActivityThread.isAccessible = true\n            //获取主线程对象\n            val activityThreadObject: Any = currentActivityThread.invoke(null)\n            val mActivitiesField: Field = activityThread.getDeclaredField(\"mActivities\")\n            mActivitiesField.isAccessible = true\n            val mActivities = mActivitiesField[activityThreadObject] as Map<Any, Any>\n            mActivities.forEach {\n                val activityClientRecordClass: Class<*> = it.value.javaClass\n                val activityField = activityClientRecordClass.getDeclaredField(\"activity\")\n                activityField.isAccessible = true\n                activityField[it.value]?.let {\n                    block.invoke(it as Activity)\n                }\n            }\n        } catch (e: java.lang.Exception) {\n            e.printStackTrace()\n        }\n    }\n\n    fun popAllActivity() {\n        getActivitys() {\n            it.finishActivity()\n        }\n    }\n\n\n    fun exitApplication() {\n        object : Thread() {\n            override fun run() {\n                super.run()\n                popAllActivity()\n                Process.killProcess(Process.myPid())\n                System.exit(0) // 常规java、c#的标准退出法，返回值为0代表正常退出\n            }\n        }.start()\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/activity/compose/BaseComposeActivity.kt",
    "content": "package com.wgllss.core.activity.compose\n\nimport androidx.activity.ComponentActivity\n\n\nopen class BaseComposeActivity : ComponentActivity(){\n\n\n\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/adapter/BasePagerAdapter.kt",
    "content": "package com.wgllss.core.adapter\n\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.viewpager.widget.PagerAdapter\n\nclass BasePagerAdapter(val mViews: MutableList<View>) : PagerAdapter() {\n    override fun getCount() = mViews?.size ?: 0\n\n    override fun isViewFromObject(view: View, obj: Any) = view === obj\n\n    override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {\n        mViews?.takeIf { it.size > 0 }?.let { container.removeView(it[position]) }\n    }\n\n    override fun instantiateItem(container: ViewGroup, position: Int): Any {\n        container.addView(mViews[position])\n        return mViews[position]\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/adapter/BasePluginRecyclerAdapter.kt",
    "content": "package com.wgllss.core.adapter\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.recyclerview.widget.RecyclerView\n\nabstract class BasePluginRecyclerAdapter<T>(protected val re: Resources, private val packageName: String) : RecyclerView.Adapter<BasePluginRecyclerAdapter.BaseBindingViewHolder>() {\n\n    var context: Context? = null\n    protected lateinit var mData: MutableList<T>\n    lateinit var skinRes: Resources\n\n    fun notifyData(mData: MutableList<T>, skinRes: Resources) {\n        if (mData == null) {\n            this.mData = mutableListOf()\n        } else {\n            this.mData = mData\n        }\n        this.skinRes = skinRes\n        notifyDataSetChanged()\n    }\n\n    fun notifySkinRes(skinRes: Resources) {\n        this.skinRes = skinRes\n        notifyDataSetChanged()\n    }\n\n    fun removeItem(position: Int) {\n        mData?.takeIf {\n            it.size > position\n        }?.run {\n            removeAt(position)\n            notifyDataSetChanged()\n        }\n    }\n\n    fun clearList() {\n        mData?.run {\n            clear()\n            notifyDataSetChanged()\n        }\n    }\n\n    override fun getItemCount(): Int = if (!this::mData.isInitialized) 0 else mData.size\n\n    override fun getItemId(position: Int): Long {\n        return position.toLong()\n    }\n\n    fun getItem(position: Int): T = mData[position]\n\n    protected abstract fun getLayoutResIdName(viewType: Int): String\n\n    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseBindingViewHolder {\n        if (context == null) {\n            context = parent.context\n        }\n        val layoutID = re.getIdentifier(getLayoutResIdName(viewType), \"layout\", packageName)\n        val xmlResourceParser = re.getLayout(layoutID)\n        val view = LayoutInflater.from(context).inflate(xmlResourceParser, parent, false)\n        return BaseBindingViewHolder(view)\n    }\n\n    override fun onBindViewHolder(holder: BaseBindingViewHolder, position: Int) {\n        val item = getItem(position)\n        onBindItem(context!!, item, holder, position)\n    }\n\n    fun <T : View> findViewByID(contentView: View, resourcesPlugin: Resources, IDResName: String): T {\n        val ID = resourcesPlugin.getIdentifier(IDResName, \"id\", packageName)\n        return contentView.findViewById(ID)\n    }\n\n    fun getPluginColorID(IDResName: String): Int {\n        val ID = re.getIdentifier(IDResName, \"color\", packageName)\n        return ID\n    }\n\n    fun getPluginColor(IDResName: String): Int {\n        return re.getColor(getPluginColorID(IDResName))\n    }\n\n    fun getPluginColor(re: Resources, IDResName: String, packageName: String): Int {\n        return re.getColor(getPluginColorID(re, IDResName, packageName))\n    }\n\n    fun getPluginColorID(re: Resources, IDResName: String, packageName: String): Int {\n        val ID = re.getIdentifier(IDResName, \"color\", packageName)\n        return ID\n    }\n\n    protected abstract fun onBindItem(context: Context, item: T, holder: RecyclerView.ViewHolder, position: Int)\n\n    class BaseBindingViewHolder constructor(itemView: View) : RecyclerView.ViewHolder(itemView)\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/adapter/BaseRecyclerAdapter.kt",
    "content": "package com.wgllss.core.adapter\n\nimport android.content.Context\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.annotation.LayoutRes\nimport androidx.recyclerview.widget.RecyclerView\n\n\nabstract class BaseRecyclerAdapter<T> : RecyclerView.Adapter<BaseRecyclerAdapter.BaseBindingViewHolder>() {\n    var context: Context? = null\n    private lateinit var mData: MutableList<T>\n\n    fun notifyData(mData: MutableList<T>) {\n        if (mData == null) {\n            this.mData = mutableListOf()\n        } else {\n            this.mData = mData\n        }\n        notifyDataSetChanged()\n    }\n\n    fun removeItem(position: Int) {\n        mData?.takeIf {\n            it.size > position\n        }?.run {\n            removeAt(position)\n            notifyDataSetChanged()\n        }\n    }\n\n    fun clearList() {\n        mData?.run {\n            clear()\n            notifyDataSetChanged()\n        }\n    }\n\n    override fun getItemCount(): Int = if (!this::mData.isInitialized) 0 else mData.size\n\n    override fun getItemId(position: Int): Long {\n        return position.toLong()\n    }\n\n    fun getItem(position: Int): T = mData[position]\n\n    override fun onBindViewHolder(holder: BaseBindingViewHolder, position: Int) {\n        val item = getItem(position)\n        onBindItem(context!!, item, holder, position)\n    }\n\n    protected abstract fun onBindItem(context: Context, item: T, holder: RecyclerView.ViewHolder, position: Int)\n\n    class BaseBindingViewHolder constructor(itemView: View) : RecyclerView.ViewHolder(itemView)\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/adapter/ViewPage2ChildFragmentAdapter.kt",
    "content": "package com.wgllss.core.adapter\n\nimport androidx.fragment.app.Fragment\nimport androidx.fragment.app.FragmentManager\nimport androidx.lifecycle.Lifecycle\nimport androidx.viewpager2.adapter.FragmentStateAdapter\n\nclass ViewPage2ChildFragmentAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) : FragmentStateAdapter(fragmentManager, lifecycle) {\n    lateinit var list: MutableList<Fragment>\n\n    fun notifyData(mData: MutableList<Fragment>) {\n        if (mData == null) {\n            list = mutableListOf()\n        } else {\n            this.list = mData\n        }\n        notifyDataSetChanged()\n    }\n\n    override fun getItemCount() = if (!this::list.isInitialized) 0 else list.size\n\n    override fun createFragment(position: Int) = list[position]\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/data/DialogBean.kt",
    "content": "package com.wgllss.core.data\n\ndata class DialogBean(var msg:String, var isShow:Boolean){\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/Context.kt",
    "content": "package com.wgllss.core.ex\n\nimport android.app.Activity\nimport android.app.ActivityManager\nimport android.content.Context\nimport android.graphics.Rect\nimport android.os.Process\nimport android.util.DisplayMetrics\nimport android.util.Log\nimport android.util.TypedValue\nimport android.view.WindowManager\nimport androidx.annotation.StyleRes\nimport androidx.appcompat.view.ContextThemeWrapper\nimport java.lang.reflect.Field\n\n\nfun Context.toTheme(@StyleRes style: Int) = ContextThemeWrapper(this, style)\n\nfun Context.dpToPx(dp: Float) = dp * resources.displayMetrics.density\n\nfun Context.pxToDp(px: Float) = px / resources.displayMetrics.density\n\nfun Context.dp2px(dipValue: Float) = (dipValue * resources.displayMetrics.density + 0.5f).toInt()\n\nfun Context.dpToPxInt(dp: Float) = (dpToPx(dp) + 0.5f).toInt().toFloat()\n\nfun Context.pxToDpCeilInt(px: Float) = (pxToDp(px) + 0.5f).toInt().toFloat()\n\nfun Context.getIntToDip(intSize: Float) = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, intSize, resources.displayMetrics)\n\nfun Activity.getStatusHight() = window.decorView.getWindowVisibleDisplayFrame(Rect())\n\n/**\n * 得到状态栏高度\n *\n * @return\n */\nfun Activity.getStatusBarHeight(): Int {\n    /*\n     * 方法一，荣耀3c无效 Rect frame = new Rect(); act.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); int statusBarHeight = frame.top; return statusBarHeight;\n     */\n\n    /*\n     * 方法二，荣耀3c无效 Rect rectgle= new Rect(); Window window= act.getWindow(); window.getDecorView().getWindowVisibleDisplayFrame(rectgle); int StatusBarHeight= rectgle.top; int contentViewTop=\n     * window.findViewById(Window.ID_ANDROID_CONTENT).getTop(); int statusBar = contentViewTop - StatusBarHeight; return statusBar;\n     */\n    // 方法三，荣耀3c有效\n    var c: Class<*>? = null\n    var obj: Any? = null\n    var field: Field? = null\n    var x = 0\n    var sbar = 0\n    try {\n        c = Class.forName(\"com.android.internal.R\\$dimen\")\n        obj = c.newInstance()\n        field = c.getField(\"status_bar_height\")\n        x = field[obj].toString().toInt()\n        sbar = resources.getDimensionPixelSize(x)\n        return sbar\n    } catch (e1: Exception) {\n        e1.printStackTrace()\n    }\n    return 0\n}\n\nfun Activity.getDensity(): Float {\n    val dm = DisplayMetrics()\n    windowManager.defaultDisplay.getMetrics(dm)\n    val density: Float = dm.density//屏幕的密度density\n    return density\n}\n\nfun Activity.getDensityDpi(): Int {\n    val dm = DisplayMetrics()\n    windowManager.defaultDisplay.getMetrics(dm)\n    val density: Int = dm.densityDpi//屏幕的密度density\n    return density\n}\n\n\n/**\n * 获得屏幕宽度\n *\n * @param context\n * @return\n */\nfun Context.getScreenWidth(): Int {\n    val wm = getSystemService(Context.WINDOW_SERVICE) as WindowManager\n    val outMetrics = DisplayMetrics()\n    wm.defaultDisplay.getMetrics(outMetrics)\n    return outMetrics.widthPixels\n}\n\n/**\n * 获得屏幕高度\n *\n * @param context\n * @return\n */\nfun Context.getScreenHeight(): Int {\n    val wm = getSystemService(Context.WINDOW_SERVICE) as WindowManager\n    val outMetrics = DisplayMetrics()\n    wm.defaultDisplay.getMetrics(outMetrics)\n    return outMetrics.heightPixels\n}\n\n\n//获取底部导航栏高度\nfun Activity.getNavigationBarHeight(): Int {\n    val resourceId = resources.getIdentifier(\"navigation_bar_height\", \"dimen\", \"android\")\n    return resources.getDimensionPixelSize(resourceId)\n}\n\nfun Context.isUIProcess(): Boolean {\n    try {\n        val am: ActivityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager\n        val processInfos: List<ActivityManager.RunningAppProcessInfo> = am.runningAppProcesses\n        val mainProcessName: String = packageName\n        val myPid = Process.myPid()\n        for (info in processInfos) {\n            if (info.pid === myPid && mainProcessName == info.processName) {\n                return true\n            }\n        }\n    } catch (e: Exception) {\n        e.printStackTrace()\n    }\n    return false\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/Fragment.kt",
    "content": "package com.wgllss.core.ex\n\nimport android.content.Context\nimport android.view.View\nimport android.view.inputmethod.InputMethodManager\nimport androidx.annotation.IdRes\nimport androidx.fragment.app.Fragment\n\nfun Fragment.switchFragment(fragment: Fragment, mCurrentFragmentTAG: StringBuilder?, @IdRes idRes: Int) {\n    if (mCurrentFragmentTAG == null || fragment.javaClass.simpleName !== mCurrentFragmentTAG.toString()) {\n        childFragmentManager.apply {\n            val f = findFragmentByTag(mCurrentFragmentTAG.toString())\n            beginTransaction()?.let {\n                f?.let { f -> it.hide(f) }\n                fragment?.apply {\n                    if (!isAdded) {\n                        userVisibleHint = true;\n                        it.add(idRes, this, javaClass.simpleName).show(this)\n                    } else {\n                        it.show(this)\n                    }\n                }\n                it.commitAllowingStateLoss()\n            }\n        }\n    }\n}\n\nfun Fragment.setFramgment(fragment: Fragment, layoutID: Int) {\n    childFragmentManager.beginTransaction()?.let {\n        fragment?.apply {\n            if (!isAdded) {\n                userVisibleHint = true;\n                it.add(layoutID, this, javaClass.simpleName).show(this)\n            } else {\n                it.show(this)\n            }\n        }\n        it.commitAllowingStateLoss()\n    }\n}\n\nfun Fragment.HideSoftInputFromWindow(v: View) {\n    (activity?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager)?.hideSoftInputFromWindow(v.windowToken, 0); //强制隐藏键盘\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/FragmentActivity.kt",
    "content": "package com.wgllss.core.ex\n\nimport android.content.Context\nimport android.view.View\nimport android.view.WindowManager\nimport android.view.inputmethod.InputMethodManager\nimport androidx.activity.ComponentActivity\nimport androidx.activity.result.contract.ActivityResultContracts\nimport androidx.annotation.IdRes\nimport androidx.fragment.app.Fragment\nimport androidx.fragment.app.FragmentActivity\n\n\nfun FragmentActivity.switchFragment(fragment: Fragment, mCurrentFragmentTAG: StringBuilder?, @IdRes idRes: Int) {\n    if (mCurrentFragmentTAG == null || fragment.javaClass.simpleName !== mCurrentFragmentTAG.toString()) {\n        supportFragmentManager.apply {\n            val f = findFragmentByTag(mCurrentFragmentTAG.toString())\n            beginTransaction()?.let {\n                f?.let { f -> it.hide(f) }\n                fragment?.apply {\n                    if (!isAdded) {\n                        userVisibleHint = true;\n                        it.add(idRes, this, javaClass.simpleName).show(this)\n                    } else {\n                        it.show(this)\n                    }\n                }\n                it.commitAllowingStateLoss()\n            }\n        }\n    }\n}\n\nfun FragmentActivity.setFramgment(fragment: Fragment, layoutID: Int) {\n    supportFragmentManager.beginTransaction()?.let {\n        fragment?.apply {\n            if (!isAdded) {\n                userVisibleHint = true;\n                it.add(layoutID, this, javaClass.simpleName).show(this)\n            } else {\n                it.show(this)\n            }\n        }\n        it.commitAllowingStateLoss()\n    }\n}\n\nfun FragmentActivity.hideSoftInputFromWindow(v: View) {\n    (getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager)?.hideSoftInputFromWindow(v.windowToken, 0); //强制隐藏键盘\n}\n\nfun FragmentActivity.setFullScreen() {\n    window.apply {\n        addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);\n        addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)\n        clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)\n        addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION)\n        decorView.systemUiVisibility = (\n                View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION\n                        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION\n                        or View.SYSTEM_UI_FLAG_FULLSCREEN or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY\n                )\n    }\n}\n\nfun ComponentActivity.registerForActivityResultPermissionsLaunch(permission: Array<String>, blockPerSuccess: () -> Unit, blockPerFail: () -> Unit = {}) {\n    registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { it ->\n        var successCount = 0\n        it.forEach { k, v ->\n            if (k != null && v) {\n                successCount++\n            }\n        }\n        if (successCount == permission.size) {\n            blockPerSuccess()\n        } else {\n            blockPerFail()\n        }\n    }.launch(permission)\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/ImageView.kt",
    "content": "package com.wgllss.core.ex\n\nimport android.widget.ImageView\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.load.engine.DiskCacheStrategy\n\nfun ImageView.loadUrl(url: String) {\n    Glide.with(context).load(url)\n        .skipMemoryCache(false)\n        .diskCacheStrategy(DiskCacheStrategy.RESOURCE)\n        .into(this)\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/SwipeRefreshLayout.kt",
    "content": "package com.wgllss.core.ex\n\nimport androidx.swiperefreshlayout.widget.SwipeRefreshLayout\n\nfun SwipeRefreshLayout.initColors() {\n    setColorSchemeResources(\n        android.R.color.holo_purple, android.R.color.holo_red_light,\n        android.R.color.holo_orange_light, android.R.color.holo_green_light\n    )\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/ex/ViewModel.kt",
    "content": "package com.wgllss.core.ex\n\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.launch\n\n\nfun <T> ViewModel.flowAsyncWorkOnLaunch(flowAsyncWork: suspend () -> Flow<T>) {\n    viewModelScope.launch {\n        flowAsyncWork.invoke().flowOnIOAndCatchAAndCollect()\n    }\n}\n\n\n\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BaseFragment.kt",
    "content": "package com.wgllss.core.fragment\n\nimport androidx.annotation.LayoutRes\nimport androidx.fragment.app.Fragment\nimport com.wgllss.core.activity.BaseActivity\nimport com.wgllss.core.widget.CommonToast\n\nopen class BaseFragment(@LayoutRes private val contentLayoutId: Int) : Fragment(contentLayoutId) {\n\n    fun onToast(toastContent: String?) {\n        CommonToast.show(toastContent)\n    }\n\n    fun showloading() {\n        showloading(\"请稍候...\")\n    }\n\n    //是否loading\n    protected fun isShowloading(): Boolean? {\n        return if (activity != null && activity is BaseActivity)\n            (activity as BaseActivity)?.isShowloading()\n        else false\n    }\n\n    fun showloading(showText: String?) {\n        if (activity != null && activity is BaseActivity) {\n            (activity as BaseActivity?)?.showloading(showText)\n        }\n    }\n\n    fun hideLoading() {\n        if (activity != null && activity is BaseActivity) {\n            (activity as BaseActivity?)?.hideLoading()\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BasePluginResFragment.kt",
    "content": "package com.wgllss.core.fragment\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.view.View\nimport com.wgllss.core.units.ResourceUtils\n\nabstract class BasePluginResFragment(protected val packageName: String) : BaseFragment(0) {\n\n    protected lateinit var resourcesPlugin: Resources\n\n    override fun onAttach(context: Context) {\n        super.onAttach(context)\n        getPluginResources()?.let {\n            resourcesPlugin = it\n        }\n    }\n\n    override fun onStart() {\n        super.onStart()\n        onChangeSkin(getSkinResources())\n    }\n\n    abstract fun getPluginResources(): Resources?\n\n    abstract fun getSkinResources(): Resources\n\n    fun <T : View> findViewByID(contentView: View, IDResName: String): T = contentView.findViewById(ResourceUtils.getPluginID(resourcesPlugin, IDResName, packageName))\n\n    protected fun getPluginID(resName: String) = ResourceUtils.getPluginID(resourcesPlugin, resName, packageName)\n\n    protected fun getSkinPluginID(resName: String) = ResourceUtils.getPluginID(getSkinResources(), resName, packageName)\n\n    protected fun getPluginID(resources: Resources, resName: String) = ResourceUtils.getPluginID(resources, resName, packageName)\n\n    open fun onChangeSkin(skinRes: Resources) {\n\n    }\n\n    open fun callChangeSkin(skinRes: Resources) {\n        onChangeSkin(skinRes)\n        childFragmentManager.fragments.forEach {\n            if (it.isAdded && it is BasePluginResFragment) {\n                it.callChangeSkin(skinRes)\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BaseViewModelClassFragment.kt",
    "content": "package com.wgllss.core.fragment\n\nimport android.os.Bundle\nimport androidx.activity.ComponentActivity\nimport androidx.annotation.LayoutRes\nimport androidx.annotation.MainThread\nimport androidx.lifecycle.Observer\nimport androidx.lifecycle.ViewModelLazy\nimport androidx.lifecycle.ViewModelProvider\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport java.lang.reflect.ParameterizedType\n\nopen class BaseViewModelClassFragment<VM : BaseViewModel>(@LayoutRes private val contentLayoutId: Int) : BaseFragment(contentLayoutId) {\n    protected lateinit var viewModel: VM\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        activity?.let {\n            viewModel = lazyViewModels(it)\n            initObserve()\n        }\n    }\n\n    /**\n     * activity 和 fragmnet 是否公用同一个viewModel\n     */\n    protected open fun activitySameViewModel() = false\n\n    @MainThread\n    private fun lazyViewModels(activity: ComponentActivity): VM {\n        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>\n        return if (activitySameViewModel()) {\n            ViewModelProvider(activity.viewModelStore, activity.defaultViewModelProviderFactory).get(cls)\n        } else {\n            ViewModelProvider(viewModelStore, defaultViewModelProviderFactory).get(cls)\n        }\n    }\n\n    /**\n     * 监听当前ViewModel中 showDialog和error的值\n     */\n    protected open fun initObserve() {\n        if (!activitySameViewModel())\n            viewModel?.run {\n                showUIDialog.observe(viewLifecycleOwner, Observer { it ->\n                    if (it.isShow) showloading(it.msg) else hideLoading()\n                })\n                errorMsgLiveData.observe(viewLifecycleOwner, Observer {\n                    onToast(it)\n                })\n            }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BaseViewModelFragment.kt",
    "content": "package com.wgllss.core.fragment\n\nimport android.os.Bundle\nimport androidx.activity.ComponentActivity\nimport androidx.annotation.LayoutRes\nimport androidx.annotation.MainThread\nimport androidx.lifecycle.Observer\nimport androidx.lifecycle.ViewModelLazy\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport java.lang.reflect.ParameterizedType\n\nabstract class BaseViewModelFragment<VM : BaseViewModel>(packageName: String) : BasePluginResFragment(packageName) {\n    protected lateinit var viewModel: VM\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        activity?.let {\n            viewModel = lazyViewModels(it).value\n            initObserve()\n        }\n    }\n\n    /**\n     * activity 和 fragmnet 是否公用同一个viewModel\n     */\n    protected open fun activitySameViewModel() = false\n\n    @MainThread\n    private fun lazyViewModels(activity: ComponentActivity): Lazy<VM> {\n        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>\n        return if (activitySameViewModel()) ViewModelLazy(cls.kotlin, { activity.viewModelStore }, { activity.defaultViewModelProviderFactory })\n        else ViewModelLazy(cls.kotlin, { viewModelStore }, { defaultViewModelProviderFactory })\n    }\n\n    /**\n     * 监听当前ViewModel中 showDialog和error的值\n     */\n    protected open fun initObserve() {\n        if (!activitySameViewModel())\n            viewModel?.run {\n                showUIDialog.observe(viewLifecycleOwner, Observer { it ->\n                    if (it.isShow) showloading(it.msg) else hideLoading()\n                })\n                errorMsgLiveData.observe(viewLifecycleOwner, Observer {\n                    onToast(it)\n                })\n            }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/fragment/BaseViewModelPluginFragment.kt",
    "content": "package com.wgllss.core.fragment\n\nimport android.content.Context\nimport android.os.Bundle\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.activity.ComponentActivity\nimport androidx.annotation.MainThread\nimport androidx.lifecycle.Observer\nimport androidx.lifecycle.ViewModelLazy\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport java.lang.reflect.ParameterizedType\n\nabstract class BaseViewModelPluginFragment<VM : BaseViewModel>(private val layoutName: String, packageName: String) : BasePluginResFragment(packageName) {\n    protected lateinit var containerView: View\n    protected lateinit var viewModel: VM\n\n    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {\n        if (!this::containerView.isInitialized) {\n            resourcesPlugin.run {\n                val layoutID = getIdentifier(layoutName, \"layout\", packageName)\n                val xmlResourceParser = getLayout(layoutID)\n                containerView = LayoutInflater.from(inflater.context).inflate(xmlResourceParser, container, false)\n                findView(inflater.context, containerView)\n            }\n        }\n        return containerView\n    }\n\n    open fun findView(context: Context, containerView: View) {\n\n    }\n\n    fun <T : View> findViewByID(IDResName: String): T = containerView.findViewById(ResourceUtils.getPluginID(resourcesPlugin, IDResName, packageName))\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        activity?.let {\n            viewModel = lazyViewModels(it).value\n            initObserve()\n        }\n    }\n\n    /**\n     * activity 和 fragmnet 是否公用同一个viewModel\n     */\n    protected open fun activitySameViewModel() = false\n\n    @MainThread\n    private fun lazyViewModels(activity: ComponentActivity): Lazy<VM> {\n        val cls = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<VM>\n        return if (activitySameViewModel()) ViewModelLazy(cls.kotlin, { activity.viewModelStore }, { activity.defaultViewModelProviderFactory })\n        else ViewModelLazy(cls.kotlin, { viewModelStore }, { defaultViewModelProviderFactory })\n    }\n\n    /**\n     * 监听当前ViewModel中 showDialog和error的值\n     */\n    protected open fun initObserve() {\n        if (!activitySameViewModel())\n            viewModel?.run {\n                showUIDialog.observe(viewLifecycleOwner) {\n                    if (it.isShow) showloading(it.msg) else hideLoading()\n                }\n                errorMsgLiveData.observe(viewLifecycleOwner) {\n                    onToast(it)\n                }\n            }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/http/HttpRequest.kt",
    "content": "package com.wgllss.core.http\n\nimport java.net.HttpURLConnection\nimport java.net.URL\nimport java.security.SecureRandom\nimport java.security.cert.CertificateException\nimport java.security.cert.X509Certificate\nimport javax.net.ssl.*\n\nobject HttpRequest {\n\n    fun getHttpURLConnection(url: URL, connectTimeOut: Int): HttpURLConnection? {\n        return try {\n            if (\"https\" == url.protocol) {\n                trustAllHosts()\n                (url.openConnection() as HttpsURLConnection).apply {\n                    HttpsURLConnection.setDefaultHostnameVerifier(hnv)\n                    hostnameVerifier = hnv\n                    HttpsURLConnection.setDefaultSSLSocketFactory(mSSLSocketFactory)\n                    sslSocketFactory = mSSLSocketFactory\n                    connectTimeout = 3 * connectTimeOut\n                    readTimeout = 3 * connectTimeOut\n                }\n            } else {\n                (url.openConnection() as HttpURLConnection).apply {\n                    connectTimeout = connectTimeOut\n                    readTimeout = connectTimeOut\n                }\n            }\n        } catch (e: Exception) {\n            null\n        }\n    }\n\n    /**\n     * 信任所有host\n     */\n    var hnv = HostnameVerifier { hostname, session -> true }\n\n    /**\n     * 设置https\n     *\n     * @author :Atar\n     * @createTime:2015-9-17下午4:57:39\n     * @version:1.0.0\n     * @modifyTime:\n     * @modifyAuthor:\n     * @description:\n     */\n    private fun trustAllHosts() {\n        try {\n            val trustAllCerts = arrayOf<TrustManager>(object : X509TrustManager {\n                override fun getAcceptedIssuers(): Array<X509Certificate> {\n                    return arrayOf()\n                }\n\n                @Throws(CertificateException::class)\n                override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {\n                }\n\n                @Throws(CertificateException::class)\n                override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) {\n                }\n            })\n            val sc = SSLContext.getInstance(\"TLS\")\n            sc.init(null, trustAllCerts, SecureRandom())\n            if (mSSLSocketFactory == null) {\n                mSSLSocketFactory = sc.socketFactory\n            }\n            HttpsURLConnection.setDefaultHostnameVerifier(hnv)\n            HttpsURLConnection.setDefaultSSLSocketFactory(mSSLSocketFactory)\n        } catch (e: Exception) {\n            e.printStackTrace()\n        }\n    }\n\n    var mSSLSocketFactory: SSLSocketFactory? = null\n\n    /**\n     * 设置请求头\n     *\n     * @param httpConnection\n     */\n    fun setConHead(httpConnection: HttpURLConnection) {\n        httpConnection.apply {\n            setRequestProperty(\"Accept\", \"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\")\n            setRequestProperty(\"Upgrade-Insecure-Requests\", \"1\")\n            setRequestProperty(\"User-Agent\", \"Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Mobile Safari/537.36\")\n            setRequestProperty(\"Accept-Language\", \"en-us,en;q=0.7,zh-cn;q=0.3\")\n//            httpConnection.setRequestProperty(\"Accept-Encoding\", \"gzip, deflate, br\")\n            setRequestProperty(\"Accept-Charset\", \"ISO-8859-1,utf-8;q=0.7,*;q=0.7\")\n            setRequestProperty(\"Keep-Alive\", \"300\")\n            setRequestProperty(\"Connection\", \"keep-alive\")\n            setRequestProperty(\"Cache-Control\", \"max-age=0\")\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/http/HttpUrlConnectionRequest.kt",
    "content": "package com.wgllss.core.http\n\nimport java.io.BufferedReader\nimport java.io.InputStreamReader\nimport java.lang.StringBuilder\nimport java.net.HttpURLConnection\nimport java.net.URL\n\nobject HttpUrlConnectionRequest {\n\n    fun getServerJson(url: String): String {\n        val result = StringBuilder()\n        var httpConnection: HttpURLConnection? = null\n        try {\n            val url = URL(url)\n            httpConnection = HttpRequest.getHttpURLConnection(url, 5000)\n            HttpRequest.setConHead(httpConnection!!)\n            httpConnection!!.connect()\n            val responseCode = httpConnection!!.responseCode\n            if (responseCode == HttpURLConnection.HTTP_OK || responseCode == HttpURLConnection.HTTP_PARTIAL) {\n                val instream = httpConnection!!.inputStream\n                if (instream != null) {\n                    val inputreader = InputStreamReader(instream)\n                    val buffreader = BufferedReader(inputreader)\n                    var line: String?\n                    // 分行读取\n                    while (buffreader.readLine().also { line = it } != null) {\n                        result.append(line)\n                    }\n                    inputreader.close()\n                    instream.close()\n                    buffreader.close()\n                }\n            }\n        } catch (e: Exception) {\n            e.printStackTrace()\n        } finally {\n            httpConnection?.disconnect() // 关闭连接\n        }\n        return result.toString()\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/material/ThemeUtils.kt",
    "content": "package com.wgllss.core.material\n//\n//import android.content.Context\n//import android.util.TypedValue\n//\n//object ThemeUtils {\n//\n//\n//    @JvmStatic\n//    fun getColorPrimary(context: Context): Int {\n//        val typedValue = TypedValue()\n//        context.theme.resolveAttribute(android.R.attr.colorPrimary, typedValue, true)\n//        return typedValue.data\n//    }\n//\n//    @JvmStatic\n//    fun getColorOnPrimary(context: Context): Int {\n//        val typedValue = TypedValue()\n//        context.theme.resolveAttribute(android.R.attr.textColorHighlight, typedValue, true)\n//        return typedValue.data\n//    }\n//\n//    @JvmStatic\n//    fun getTextColorPrimary(context: Context): Int {\n//        val typedValue = TypedValue()\n//        context.theme.resolveAttribute(android.R.attr.textColorPrimary, typedValue, true)\n//        return typedValue.data\n//    }\n//\n//    @JvmStatic\n//    fun getAndroidColorBackground(context: Context): Int {\n//        val typedValue = TypedValue()\n//        context.theme.resolveAttribute(android.R.attr.colorBackground, typedValue, true)\n//        return typedValue.data\n//    }\n//}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/DeviceIdUtilX.kt",
    "content": "package com.wgllss.core.units\n\nimport android.content.Context\nimport android.os.Build\nimport android.provider.Settings\nimport java.security.MessageDigest\nimport java.util.*\n\n/**\n * 1847470F0A12C2F310F7311FA719DBFE50510192\n * 1847470F0A12C2F310F7311FA719DBFE50510192\n *\n * 2F6039397BA7EEC402E7036339963B23810CCBFD\n */\nobject DeviceIdUtilX {\n    private const val isDeviceSelfSerial = false\n    private const val WD = \"B03E4AFB9ADC842C9B3BDB6C57346ACEF6CE7504\"\n    private const val CD = \"2F6039397BA7EEC402E7036339963B23810CCBFD\"\n    private const val ELSED = \"dxde_m_p\"\n\n    fun getDeviceId(context: Context, needDevice: Boolean = false): String {\n        if (isDeviceSelfSerial) {\n            //todo 模拟序列号\n            return \"2F6039397BA7EEC402E7036339963B23810CCBFD\"\n//            return getSerial(AppGlobals.sApplication)\n        } else {\n//            val context = AppGlobals.sApplication\n            val sbDeviceId = StringBuilder()\n//            val imei = getIMEI(context)\n            val androidID = getAndroidId(context)\n//            val serial = getSerial(context)\n            val id = getDeviceUUID(context).replace(\"-\", \"\")\n            //追加imei\n//            if (imei != null && imei.isNotEmpty()) {\n//                sbDeviceId.append(imei)\n//                sbDeviceId.append(\"|\")\n//            }\n            //追加androidid\n            if (androidID != null && androidID.isNotEmpty()) {\n                sbDeviceId.append(androidID)\n                sbDeviceId.append(\"|\")\n            }\n            //追加serial\n//            if (serial != null && serial.isNotEmpty()) {\n//                sbDeviceId.append(serial)\n//                sbDeviceId.append(\"|\")\n//            }\n            //追加硬件uuid\n            if (id != null && id.isNotEmpty()) {\n                sbDeviceId.append(id)\n            }\n            if (sbDeviceId.toString().isNotEmpty()) {\n                try {\n                    val hash = getHashByString(sbDeviceId.toString())\n                    val sha1 = bytesToHex(hash!!)\n//                    LogTimer.LogE(this, sha1!!)\n                    if (sha1 != null && sha1.isNotEmpty()) {\n                        return if (needDevice || CD == sha1 || WD == sha1)\n                            sha1 else ELSED\n//                        return sha1\n                    }\n                } catch (ex: Exception) {\n                    ex.printStackTrace()\n                }\n            }\n            val s = sbDeviceId.toString()\n            return if (CD == s || WD == s)\n                s else ELSED\n        }\n    }\n\n    /**\n     * 转16进制字符串\n     *\n     * @param data 数据\n     * @return 16进制字符串\n     */\n    private fun bytesToHex(data: ByteArray): String? {\n        val sb = StringBuilder()\n        var stmp: String\n        for (n in data.indices) {\n            stmp = Integer.toHexString(data[n].toInt() and 0xFF)\n            if (stmp.length == 1) sb.append(\"0\")\n            sb.append(stmp)\n        }\n        return sb.toString().uppercase(Locale.CHINA)\n    }\n\n    /**\n     * 取SHA1\n     *\n     * @param data 数据\n     * @return 对应的hash值\n     */\n    private fun getHashByString(data: String): ByteArray? {\n        return try {\n            val messageDigest: MessageDigest = MessageDigest.getInstance(\"SHA1\")\n            messageDigest.reset()\n            messageDigest.update(data.toByteArray(charset(\"UTF-8\")))\n            messageDigest.digest()\n        } catch (e: java.lang.Exception) {\n            \" \".toByteArray()\n        }\n    }\n\n    // //获得硬件uuid（根据硬件相关属性，生成uuid）（无需权限）  数字  0   -10\n    private fun getDeviceUUID(context: Context): String {\n        val sb = StringBuilder().apply {\n            append(\"100001\")\n            append(Build.BOARD)\n            append(Build.BRAND)\n            append(Build.DEVICE)\n            append(Build.HARDWARE)\n            append(Build.ID)\n            append(Build.MODEL)\n            append(Build.PRODUCT)\n//            append(Build.SERIAL)\n        }\n        val long = sb.toString().hashCode().toLong()\n        return UUID(long, long).toString()\n    }\n\n//    private fun getSerial(context: Context): String {\n//        try {\n//            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {\n//                return Build.SERIAL\n//            } else {\n//                val permissionCheck = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE)\n//                if (permissionCheck == PackageManager.PERMISSION_GRANTED) {\n//                    return Build.getSerial()\n//                }\n//            }\n//        } catch (ex: Exception) {\n//            ex.printStackTrace()\n//        }\n//        return \" \"\n//    }\n\n    /**\n     * 获得设备的AndroidId\n     *\n     * @param context 上下文\n     * @return 设备的AndroidId\n     */\n    private fun getAndroidId(context: Context): String {\n        try {\n            return Settings.Secure.getString(\n                context.contentResolver,\n                Settings.Secure.ANDROID_ID\n            )\n        } catch (ex: java.lang.Exception) {\n            ex.printStackTrace()\n        }\n        return \" \"\n    }\n//\n//    //需要获得READ_PHONE_STATE权限，>=6.0，默认返回null\n//    private fun getIMEI(context: Context): String {\n//        try {\n//            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {\n//                val permissionCheck = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE)\n//                if (permissionCheck == PackageManager.PERMISSION_GRANTED) {\n//                    val tm = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager\n//                    return tm.deviceId ?: \" \"\n//                }\n//            }\n//        } catch (ex: Exception) {\n//            ex.printStackTrace()\n//        }\n//        return \" \"\n//    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/ImageUtils.kt",
    "content": "package com.wgllss.core.units\n\nimport android.graphics.Bitmap\nimport android.graphics.Canvas\nimport android.graphics.drawable.Drawable\n\nobject ImageUtils {\n\n    fun drawableToBitmap(drawable: Drawable): Bitmap {\n        val bitmap = Bitmap.createBitmap(\n            drawable.intrinsicWidth, drawable.intrinsicHeight, Bitmap.Config.ARGB_8888\n        )\n        val canvas = Canvas(bitmap)\n        drawable.setBounds(0, 0, canvas.width, canvas.height)\n        drawable.draw(canvas)\n        return bitmap\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/ResourceUtils.kt",
    "content": "package com.wgllss.core.units\n\nimport android.app.Activity\nimport android.content.Context\nimport android.content.res.ColorStateList\nimport android.content.res.Resources\nimport android.graphics.Color\nimport android.graphics.drawable.Drawable\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.EditText\nimport android.widget.ImageView\nimport android.widget.TextView\nimport com.google.android.material.button.MaterialButton\n\nobject ResourceUtils {\n\n    fun setContentLayout(activity: Activity, resourcesPlugin: Resources, layoutName: String, packageNamePlugin: String) {\n        val layoutID = resourcesPlugin.getIdentifier(layoutName, \"layout\", packageNamePlugin)\n        val view = LayoutInflater.from(activity).inflate(resourcesPlugin.getLayout(layoutID), activity.window.decorView as ViewGroup, false)\n        activity.setContentView(view)\n    }\n\n    fun getPluginView(context: Context, resourcesPlugin: Resources, resName: String, packageNamePlugin: String): View {\n        val layoutID = resourcesPlugin.getIdentifier(resName, \"layout\", packageNamePlugin)\n        return LayoutInflater.from(context).inflate(resourcesPlugin.getLayout(layoutID), null, false)\n    }\n\n    fun getPluginID(resourcesPlugin: Resources, resName: String, packageNamePlugin: String) = resourcesPlugin.getIdentifier(resName, \"id\", packageNamePlugin)\n\n    fun getPluginDrawable(resourcesPlugin: Resources, resName: String, packageNamePlugin: String): Drawable = resourcesPlugin.getDrawable(resourcesPlugin.getIdentifier(resName, \"drawable\", packageNamePlugin))\n\n    fun getPluginColor(resourcesPlugin: Resources, resName: String, packageNamePlugin: String) = resourcesPlugin.getColor(resourcesPlugin.getIdentifier(resName, \"color\", packageNamePlugin))\n\n    fun getPluginDimen(resourcesPlugin: Resources, resName: String, packageNamePlugin: String) = resourcesPlugin.getDimension(resourcesPlugin.getIdentifier(resName, \"dimen\", packageNamePlugin))\n\n    fun getPluginString(resourcesPlugin: Resources, resName: String, packageNamePlugin: String) = resourcesPlugin.getString(resourcesPlugin.getIdentifier(resName, \"string\", packageNamePlugin))\n\n    fun getColorStatusList(resourcesPlugin: Resources, resName: String, packageNamePlugin: String) = resourcesPlugin.getColorStateList(resourcesPlugin.getIdentifier(resName, \"drawable\", packageNamePlugin))\n\n    fun setBackgroundColor(resourcesPlugin: Resources, resName: String, packageNamePlugin: String, vararg view: View) {\n        view.forEach {\n            it.setBackgroundColor(getPluginColor(resourcesPlugin, resName, packageNamePlugin))\n        }\n    }\n\n    fun setBackgroundDrawable(resourcesPlugin: Resources, resName: String, packageNamePlugin: String, vararg view: View) {\n        view.forEach {\n            it.setBackgroundDrawable(getPluginDrawable(resourcesPlugin, resName, packageNamePlugin))\n        }\n    }\n\n    fun setImageDrawable(resourcesPlugin: Resources, resName: String, packageNamePlugin: String, vararg view: ImageView) {\n        view.forEach {\n            it.setImageDrawable(getPluginDrawable(resourcesPlugin, resName, packageNamePlugin))\n        }\n    }\n\n    fun setTextColor(resourcesPlugin: Resources, resName: String, packageNamePlugin: String, vararg view: TextView) {\n        view.forEach {\n            it.setTextColor(getPluginColor(resourcesPlugin, resName, packageNamePlugin))\n        }\n    }\n\n    fun setTextColorHint(resourcesPlugin: Resources, resName: String, packageNamePlugin: String, vararg view: EditText) {\n        view.forEach {\n            it.setHintTextColor(getPluginColor(resourcesPlugin, resName, packageNamePlugin))\n        }\n    }\n\n    fun setText(resourcesPlugin: Resources, resName: String, packageNamePlugin: String, vararg view: TextView) {\n        view.forEach {\n            it.text = getPluginString(resourcesPlugin, resName, packageNamePlugin)\n        }\n    }\n\n    fun setTextHint(resourcesPlugin: Resources, resName: String, packageNamePlugin: String, vararg view: TextView) {\n        view.forEach {\n            it.hint = getPluginString(resourcesPlugin, resName, packageNamePlugin)\n        }\n    }\n\n    fun setMaterialButtonBackgroundHint(resourcesPlugin: Resources, resName1: String, resName2: String, packageNamePlugin: String, vararg view: MaterialButton) {\n        val colors = intArrayOf(getPluginColor(resourcesPlugin, resName1, packageNamePlugin), getPluginColor(resourcesPlugin, resName2, packageNamePlugin))\n        val states = arrayOfNulls<IntArray>(2)\n        states[0] = intArrayOf(android.R.attr.state_pressed)\n        states[1] = intArrayOf(android.R.attr.state_enabled)\n        view.forEach {\n            it.backgroundTintList = ColorStateList(states, colors)\n        }\n    }\n\n    fun setMaterialButtonBackgroundHint(colorStrPressed: String, colorStrEnable: String, vararg view: MaterialButton) {\n        val colors = intArrayOf(Color.parseColor(colorStrPressed), Color.parseColor(colorStrEnable))\n        val states = arrayOfNulls<IntArray>(2)\n        states[0] = intArrayOf(android.R.attr.state_pressed)\n        states[1] = intArrayOf(android.R.attr.state_enabled)\n        view.forEach {\n            it.backgroundTintList = ColorStateList(states, colors)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/ScreenManager.kt",
    "content": "package com.wgllss.core.units\n\nimport android.content.Context\nimport android.util.DisplayMetrics\nimport android.view.View\nimport android.view.WindowManager\n\nobject ScreenManager {\n    var screenWidth = 0\n    var screenHeight = 0\n    var widthSpec = 0\n    var heightSpec = 0\n\n    //初始化 屏幕 宽高相关属性\n    fun initScreenSize(context: Context) {\n        val metric = DisplayMetrics()\n        val manager = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager\n        manager.defaultDisplay.getRealMetrics(metric)\n        screenWidth = metric.widthPixels\n        screenHeight = metric.heightPixels\n        widthSpec = View.MeasureSpec.makeMeasureSpec(screenWidth, View.MeasureSpec.EXACTLY)\n        heightSpec = View.MeasureSpec.makeMeasureSpec(screenHeight, View.MeasureSpec.EXACTLY)\n    }\n\n    fun measureAndLayout(view: View) {\n        view?.measure(widthSpec, heightSpec)\n        view?.layout(0, 0, screenWidth, screenHeight)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/SdkIntUtils.kt",
    "content": "package com.wgllss.core.units\n\nimport android.os.Build\n\nobject SdkIntUtils {\n    fun isOreo(): Boolean = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O\n\n    fun isMarshmallow() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.M\n\n    fun isLollipop() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP\n\n    fun isJellyBeanMR2() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2\n\n    fun isJellyBean() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN\n\n    fun isJellyBeanMR1() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/ServiceUtil.kt",
    "content": "package com.wgllss.core.units\n//\n//import android.app.ActivityManager\n//import android.content.Context\n//import android.content.Intent\n//import android.os.Build\n//import androidx.annotation.RequiresApi\n//\n//object ServiceUtil {\n//\n//    /**\n//     * 判断某个服务是否存在\n//     *\n//     * @param context\n//     * @param className\n//     * @return\n//     */\n//    fun isServiceExisted(context: Context, className: String): Boolean {\n//        val activityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager\n//        val serviceList = activityManager.getRunningServices(Int.MAX_VALUE)\n//        if (serviceList == null || serviceList.size <= 0) {\n//            return false\n//        }\n//        for (i in serviceList.indices) {\n//            val serviceInfo = serviceList[i]\n//            val serviceName = serviceInfo.service\n//            if (serviceName.className == className) {\n//                return true\n//            }\n//        }\n//        return false\n//    }\n//\n//    fun startService(packageContext: Context, cls: Class<*>) {\n//        try {\n//            if (!isServiceExisted(packageContext, cls.name)) {\n//                val intent = Intent(packageContext, cls)\n//                packageContext.startService(intent)\n//            }\n//        } catch (e: Exception) {\n//        }\n//    }\n//\n//    @RequiresApi(Build.VERSION_CODES.O)\n//    fun startForegroundService(packageContext: Context, cls: Class<*>) {\n//        try {\n//            if (!isServiceExisted(packageContext, cls.name)) {\n//                val intent = Intent(packageContext, cls)\n//                packageContext.startForegroundService(intent)\n//            }\n//        } catch (e: Exception) {\n//\n//        }\n//    }\n//\n//    fun stopService(packageContext: Context, cls: Class<*>) {\n//        try {\n//            if (!isServiceExisted(packageContext, cls.name)) {\n//                val intent = Intent(packageContext, cls)\n//                packageContext.stopService(intent)\n//            }\n//        } catch (e: Exception) {\n//        }\n//    }\n//}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/StatusBarUtil.kt",
    "content": "package com.wgllss.core.units\n\nimport android.app.Activity\nimport android.app.ActivityOptions\nimport android.content.Context\nimport android.graphics.Color\nimport android.graphics.drawable.ColorDrawable\nimport android.os.Build\nimport android.view.View\nimport android.view.ViewGroup\nimport android.view.Window\nimport android.view.WindowManager\nimport androidx.core.view.ViewCompat\nimport com.wgllss.core.ex.getIntToDip\nimport java.lang.reflect.Method\nimport java.util.*\n\n/**\n * 屏幕相关工具类\n *   1.设置沉浸式任务栏\n *\n * @author LTP 16/9/21.\n */\nobject StatusBarUtil {\n\n    /**\n     * 模拟沉浸式状态栏，本质上是通过设置状态栏的颜色，可设置为与toolbar相同达到沉浸式的效果\n     *\n     * @param activity 要设置的Activity\n     */\n//    fun setImmersionStatus(activity: Activity) {\n//        // 透明状态栏\n//        activity.window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)\n//        activity.window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)\n//        activity.window.statusBarColor = activity.resources.getColor(R.color.purple_500)\n//    }\n\n    /**\n     * 设置无状态栏，直接干掉顶部的状态栏，但要注意例如一些actionbar会自动顶到最上方需要适配\n     *\n     * @param activity 要设置的Activity\n     */\n    fun setNoStatus(activity: Activity) {\n        // 透明状态栏\n        activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)\n    }\n\n    fun setStatusBarTranslucent(activity: Activity) {\n        activity?.window?.apply {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {\n                //适配刘海屏\n                val layoutParams = attributes\n                layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;\n                attributes = layoutParams\n            }\n            decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)\n            statusBarColor = Color.TRANSPARENT\n        }\n    }\n\n    /**\n     * 设置状态栏  导航栏 透明\n     *\n     * @param activity       需要设置的activity\n     * @param color          状态栏颜色值\n     */\n    fun setNavigationBarStatusBarTranslucent(activity: Activity) {\n        activity?.window?.apply {\n            decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)\n            navigationBarColor = Color.TRANSPARENT\n            statusBarColor = Color.TRANSPARENT\n        }\n    }\n\n    /**\n     * 设置Android6.0上状态栏的字体颜色为黑色\n     *\n     * @param activity Activity\n     */\n    fun setStatusBarLightMode(activity: Activity) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {\n            activity.window.decorView.systemUiVisibility =\n                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR\n        }\n    }\n\n    /**\n     * 设置Android6.0上状态栏的字体颜色为黑色\n     *\n     * @param activity Activity\n     */\n    fun setStatusBarDarkMode(activity: Activity) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {\n            activity.window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN\n        }\n    }\n\n    /**\n     * 获取手机状态栏的高度\n     */\n    fun getStatusBarHeight(context: Context): Int {\n        val resourceId = context.resources.getIdentifier(\"status_bar_height\", \"dimen\", \"android\")\n        return context.resources.getDimensionPixelSize(resourceId)\n    }\n\n    fun translucentStatusBar(activity: Activity, toolbar: ViewGroup? = null) {\n        try {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n                val window = activity.window\n                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)\n                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)\n                window.statusBarColor = Color.TRANSPARENT\n                window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION\n                val mContentView = window.findViewById<View>(Window.ID_ANDROID_CONTENT) as ViewGroup\n                val mChildView = mContentView.getChildAt(0)\n                if (mChildView != null) {\n                    ViewCompat.setFitsSystemWindows(mChildView, false)\n                    ViewCompat.requestApplyInsets(mChildView)\n                }\n            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {\n                // 透明状态栏\n                activity.window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)\n            }\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && toolbar != null) {\n                val statusBarHeight: Int = getStatusBarHeight(activity)\n                val layoutHeight = (if (statusBarHeight > 0) statusBarHeight else 36) + activity.getIntToDip(42f) as Int\n                val lp = toolbar.layoutParams\n                lp.height = layoutHeight\n                toolbar.setPadding(0, statusBarHeight, 0, 0)\n            }\n        } catch (e: Exception) {\n        }\n    }\n\n    fun translucentActivity(activity: Activity) {\n        try {\n            activity.window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))\n            activity.window.decorView.background = null\n            val activityOptions: Method = Activity::class.java.getDeclaredMethod(\"getActivityOptions\")\n            activityOptions.isAccessible = true\n            val option = activityOptions.invoke(activity)\n            val classes = Activity::class.java.declaredClasses\n            var aClass: Class<out Any>? = null\n            classes.forEach {\n                if (it.simpleName.contains(\"TranslucentConversionListener\")) {\n                    aClass = it\n                }\n            }\n            val method: Method = Activity::class.java.getDeclaredMethod(\"convertToTranslucent\", aClass, ActivityOptions::class.java)\n            method.isAccessible = true\n            method.invoke(activity, null, option)\n        } catch (e: Exception) {\n            e.printStackTrace()\n        }\n    }\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/units/WLog.kt",
    "content": "package com.wgllss.core.units\n\nimport com.wgllss.core.BuildConfig\n\nobject WLog {\n\n    fun e(any: Any, message: String) {\n        if (BuildConfig.DEBUG)\n            android.util.Log.e(any.javaClass.simpleName, message)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/viewmodel/BaseViewModel.kt",
    "content": "package com.wgllss.core.viewmodel\n\nimport androidx.lifecycle.MutableLiveData\nimport androidx.lifecycle.ViewModel\nimport androidx.lifecycle.viewModelScope\nimport com.wgllss.core.data.DialogBean\nimport com.wgllss.core.ex.flowOnIOAndCatch\nimport kotlinx.coroutines.cancel\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.collect\nimport kotlinx.coroutines.flow.onCompletion\nimport kotlinx.coroutines.flow.onStart\nimport kotlinx.coroutines.launch\n\nabstract class BaseViewModel : ViewModel() {\n    val ViewModel.errorMsgLiveData by lazy { MutableLiveData<String>() }\n    val ViewModel.showUIDialog by lazy { MutableLiveData<DialogBean>() }\n\n    fun ViewModel.show(strMessage: String = \"正在请求数据\") {\n        val showBean = showUIDialog.value ?: DialogBean(strMessage, true)\n        showBean.isShow = true\n        showBean.msg = strMessage\n        showUIDialog.postValue(showBean)\n    }\n\n    fun ViewModel.hide() {\n        val showBean = showUIDialog.value ?: DialogBean(\"\", true)\n        showBean.isShow = false\n        showUIDialog.postValue(showBean)\n    }\n\n    override fun onCleared() {\n        viewModelScope.cancel()\n    }\n\n    abstract fun start()\n\n    protected fun <T> Flow<T>.flowOnIOAndCatch(): Flow<T> = flowOnIOAndCatch(errorMsgLiveData)\n\n    protected fun <T> Flow<T>.onStartAndShow(strMessage: String = \"正在请求数据\"): Flow<T> = onStart {\n        show()\n    }\n\n    protected fun <T> Flow<T>.onCompletionAndHide(): Flow<T> = onCompletion {\n        hide()\n    }\n\n    protected suspend fun <T> Flow<T>.onStartShowAndFlowOnIOAndCatchAndOnCompletionAndHideAndCollect() {\n        onStartAndShow().onCompletionAndHide().flowOnIOAndCatch().collect()//这里，开始结束全放在异步里面处理\n    }\n\n    fun <T> flowAsyncWorkOnViewModelScopeLaunch(flowAsyncWork: suspend () -> Flow<T>) {\n        viewModelScope.launch {\n            flowAsyncWork.invoke().onStartShowAndFlowOnIOAndCatchAndOnCompletionAndHideAndCollect()\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/widget/ButtomNavigationViewEx.kt",
    "content": "package com.wgllss.core.widget\n\nimport android.view.View\nimport android.view.ViewGroup\nimport com.google.android.material.bottomnavigation.BottomNavigationView\n\n/**\n * 处理BottomNavigationView中的tab长按出现toast的问题\n *\n * @param ids tab项的id集\n */\nfun BottomNavigationView.clearLongClickToast(vararg ids: Int) {\n    val bottomNavigationView: ViewGroup = getChildAt(0) as ViewGroup\n    for (position in ids.indices) {\n        bottomNavigationView.getChildAt(position).findViewById<View>(ids[position])\n            .setOnLongClickListener { true }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/widget/DividerGridItemDecoration.kt",
    "content": "package com.wgllss.core.widget\n\nimport android.content.Context\nimport android.graphics.Canvas\nimport android.graphics.Color\nimport android.graphics.Rect\nimport android.graphics.drawable.Drawable\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.ImageView\nimport androidx.recyclerview.widget.GridLayoutManager\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport androidx.recyclerview.widget.RecyclerView\nimport androidx.recyclerview.widget.StaggeredGridLayoutManager\n\nclass DividerGridItemDecoration : RecyclerView.ItemDecoration {\n\n    var ItemDecorationView //间隔视图\n            : View? = null\n    var ItemDecorationViewDrawble //间隔视图的drawble\n            : Drawable? = null\n    var ItemDecorationViewWidth = 0 //间隔视图的宽度\n\n    var ItemDecorationViewHeight = 0 //间隔视图的高度\n\n\n    constructor(context: Context?, orientation: Int, ItemDecorationView: View?) {\n        //判断传入的view以及传入的view的params是否为空，若其中一个为空则使用默认样式\n        var ItemDecorationView = ItemDecorationView\n        if (ItemDecorationView == null || ItemDecorationView.layoutParams == null) {\n            ItemDecorationView = ImageView(context)\n            ItemDecorationView.setLayoutParams(ViewGroup.LayoutParams(5, 5))\n            ItemDecorationView.setBackgroundColor(Color.parseColor(\"#EEEEEE\"))\n        }\n        this.ItemDecorationView = ItemDecorationView\n        this.ItemDecorationView!!.measure(0, 0)\n        this.ItemDecorationViewDrawble = ItemDecorationView.background\n        if (this.ItemDecorationView!!.getMeasuredHeight() >= 0) {\n            ItemDecorationViewHeight = this.ItemDecorationView!!.getMeasuredHeight()\n        }\n        if (this.ItemDecorationView!!.getMeasuredWidth() >= 0) {\n            ItemDecorationViewWidth = this.ItemDecorationView!!.getMeasuredWidth()\n        }\n        if (ItemDecorationView.layoutParams.height >= 0) {\n            ItemDecorationViewHeight = ItemDecorationView.layoutParams.height\n        }\n        if (ItemDecorationView.layoutParams.width >= 0) {\n            ItemDecorationViewWidth = ItemDecorationView.layoutParams.width\n        }\n    }\n\n    override fun onDraw(c: Canvas, parent: RecyclerView) {\n        drawHorizontal(c, parent!!)\n        drawVertical(c, parent)\n    }\n\n    open fun getSpanCount(parent: RecyclerView): Int {\n        // 列数\n        var spanCount = 1\n        val layoutManager = parent.layoutManager\n        if (layoutManager is GridLayoutManager) {\n            spanCount = layoutManager.spanCount\n        } else if (layoutManager is StaggeredGridLayoutManager) {\n            spanCount = layoutManager\n                .spanCount\n        }\n        return spanCount\n    }\n\n    open fun drawHorizontal(c: Canvas, parent: RecyclerView) {\n        val childCount = parent.childCount\n        for (i in 0 until childCount) {\n            val child = parent.getChildAt(i)\n            val params = child\n                .layoutParams as RecyclerView.LayoutParams\n            val left = child.left - params.leftMargin\n            val right = (child.right + params.rightMargin\n                    + ItemDecorationViewWidth)\n            val top = child.bottom + params.bottomMargin\n            val bottom = top + ItemDecorationViewHeight\n            ItemDecorationViewDrawble!!.setBounds(left, top, right, bottom)\n            ItemDecorationViewDrawble!!.draw(c)\n        }\n    }\n\n    open fun drawVertical(c: Canvas, parent: RecyclerView) {\n        val childCount = parent.childCount\n        val spanCount = getSpanCount(parent)\n        for (i in 0 until childCount) {\n            val child = parent.getChildAt(i)\n            val params = child\n                .layoutParams as RecyclerView.LayoutParams\n            val top = child.top - params.topMargin\n            val bottom = child.bottom + params.bottomMargin\n            val left = child.right + params.rightMargin\n            var right = left + ItemDecorationViewWidth\n            if ((i + 1) % spanCount == 0) { //最后一列\n                right = left\n            }\n            ItemDecorationViewDrawble!!.setBounds(left, top, right, bottom)\n            ItemDecorationViewDrawble!!.draw(c)\n        }\n    }\n\n    open fun isLastColum(\n        parent: RecyclerView, pos: Int, spanCount: Int,\n        childCount: Int\n    ): Boolean {\n        var childCount = childCount\n        parent.addOnItemTouchListener(object : OnRecyclerViewItemClickListener(parent) {\n            override fun onItemClickListener(viewHolder: RecyclerView.ViewHolder?, position: Int){\n                super.onItemClickListener(viewHolder, position)\n            }\n\n            override fun onItemLongClickListener(viewHolder: RecyclerView.ViewHolder?, position: Int) {\n                super.onItemLongClickListener(viewHolder, position)\n            }\n        })\n        val layoutManager = parent.layoutManager\n        if (layoutManager is GridLayoutManager) {\n            if ((pos + 1) % spanCount == 0) // 如果是最后一列，则不需要绘制右边\n            {\n                return true\n            }\n        } else if (layoutManager is StaggeredGridLayoutManager) {\n            val orientation = layoutManager\n                .orientation\n            if (orientation == StaggeredGridLayoutManager.VERTICAL) {\n                if ((pos + 1) % spanCount == 0) // 如果是最后一列，则不需要绘制右边\n                {\n                    return true\n                }\n            } else {\n                childCount = childCount - childCount % spanCount\n                if (pos >= childCount) // 如果是最后一列，则不需要绘制右边\n                    return true\n            }\n        } else if (layoutManager is LinearLayoutManager) {\n            val orientation = layoutManager\n                .orientation\n            if (orientation == LinearLayoutManager.HORIZONTAL) {\n                // 如果是最后一行，则不需要绘制底部\n                if (pos + 1 >= childCount) return true\n            }\n        }\n        return false\n    }\n\n    open fun isLastRaw(\n        parent: RecyclerView, pos: Int, spanCount: Int,\n        childCount: Int\n    ): Boolean {\n        var childCount = childCount\n        val layoutManager = parent.layoutManager\n        if (layoutManager is GridLayoutManager) {\n            childCount = childCount - childCount % spanCount\n            if (pos >= childCount) // 如果是最后一行，则不需要绘制底部\n                return true\n        } else if (layoutManager is StaggeredGridLayoutManager) {\n            val orientation = layoutManager\n                .orientation\n            // StaggeredGridLayoutManager 且纵向滚动\n            if (orientation == StaggeredGridLayoutManager.VERTICAL) {\n                childCount = childCount - childCount % spanCount\n                // 如果是最后一行，则不需要绘制底部\n                if (pos >= childCount) return true\n            } else  // StaggeredGridLayoutManager 且横向滚动\n            {\n                // 如果是最后一行，则不需要绘制底部\n                if ((pos + 1) % spanCount == 0) {\n                    return true\n                }\n            }\n        } else if (layoutManager is LinearLayoutManager) {\n            val orientation = layoutManager\n                .orientation\n            if (orientation == LinearLayoutManager.VERTICAL) {\n                // 如果是最后一行，则不需要绘制底部\n                if (pos + 1 >= childCount) return true\n            } else {\n                return true\n            }\n        }\n        return false\n    }\n\n    override fun getItemOffsets(\n        outRect: Rect, itemPosition: Int,\n        parent: RecyclerView\n    ) {\n        val spanCount = getSpanCount(parent)\n        val childCount = parent.adapter!!.itemCount\n        if (isLastRaw(parent, itemPosition, spanCount, childCount)) // 如果是最后一行，则不需要绘制底部\n        {\n            outRect[0, 0, ItemDecorationViewWidth] = 0\n            //        } else if (isLastColum(parent, itemPosition, spanCount, childCount))// 如果是最后一列，则不需要绘制右边\n//        {\n//            outRect.set(0, 0, 0, ItemDecorationViewHeight);\n        } else {\n            outRect[0, 0, ItemDecorationViewWidth] = ItemDecorationViewHeight\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/widget/DrawerBack.kt",
    "content": "package com.wgllss.core.widget\n\nimport android.R\nimport android.annotation.SuppressLint\nimport android.app.Activity\nimport android.graphics.Canvas\nimport android.graphics.Color\nimport android.graphics.Rect\nimport android.os.Handler\nimport android.view.*\nimport android.view.animation.Interpolator\nimport android.widget.FrameLayout\nimport android.widget.LinearLayout\nimport android.widget.ListView\nimport android.widget.Scroller\n\nclass DrawerBack(activity: Activity) : FrameLayout(activity) {\n    companion object {\n        private const val SLIDE_TARGET_CONTENT = 0\n        private const val SLIDE_TARGET_WINDOW = 1\n        private const val SCROLL_DURATION = 400\n        private const val TOUCH_TARGET_WIDTH_DIP = 30\n        private const val TOUCH_HANDLE_WIDTH_DIP = 1.33f // 屏幕左侧4分之3\n    }\n\n    private var mAdded = false\n    private var mDrawerEnabled = true\n    private var mDrawerOpened = false\n    private var mDrawerMoving = false\n    private var mGestureStarted = false\n    private var mDecorOffsetX = 0\n    private var mGestureStartX = 0\n    private var mGestureCurrentX = 0\n    private var mGestureStartY = 0\n    private var mGestureCurrentY = 0\n    private var mSlideTarget = 0\n    private var mTouchTargetWidth = 0\n    private var mScrollerHandler: Handler? = null\n    private var mScroller: Scroller? = null\n    private var mDecorView: ViewGroup? = null\n    private var mContentTarget: ViewGroup? = null\n    private var mContentTargetParent: ViewGroup? = null\n    private var mWindowTarget: ViewGroup? = null\n    private var mWindowTargetParent: ViewGroup? = null\n    private var mDecorContent: ViewGroup? = null\n    private var mDecorContentParent: ViewGroup? = null\n    private var mDrawerContent: LinearLayout? = null\n    private var mVelocityTracker: VelocityTracker? = null\n    private var mOnOpenDrawerCompleteListener: OnOpenDrawerCompleteListener? = null\n\n    private var mLastMotionX = 0f\n    private var mLastMotionY = 0f\n\n    private var qx = 0f\n    private var qy = 0f\n\n    init {\n        val dm = activity.resources.displayMetrics\n        mTouchTargetWidth = dm.widthPixels / TOUCH_TARGET_WIDTH_DIP\n        mScrollerHandler = Handler()\n        mScroller = Scroller(activity, SmoothInterpolator())\n        mSlideTarget = SLIDE_TARGET_WINDOW\n        mDecorView = activity.window.decorView as ViewGroup\n        mWindowTarget = mDecorView!!.getChildAt(0) as ViewGroup\n        mWindowTargetParent = mWindowTarget!!.parent as ViewGroup\n        mContentTarget = mDecorView!!.findViewById<View>(R.id.content) as ViewGroup\n        mContentTargetParent = mContentTarget!!.parent as ViewGroup\n        mDrawerContent = LinearLayout(context)\n        mDrawerContent!!.layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT)\n        mDrawerContent!!.setBackgroundColor(Color.TRANSPARENT)\n        reconfigureViewHierarchy()\n        mDrawerContent!!.setPadding(0, 0, mTouchTargetWidth, 0)\n\n    }\n\n    class SmoothInterpolator : Interpolator {\n        override fun getInterpolation(v: Float): Float {\n            return (Math.pow(v.toDouble() - 1.0, 5.0) + 1.0f).toFloat()\n        }\n    }\n\n    private fun reconfigureViewHierarchy() {\n        if (mDecorView == null) {\n            return\n        }\n        if (mDrawerContent != null) {\n            removeView(mDrawerContent)\n        }\n        if (mDecorContent != null) {\n            removeView(mDecorContent)\n            mDecorContentParent!!.addView(mDecorContent)\n            mDecorContent!!.setOnClickListener(null)\n            mDecorContent!!.setBackgroundColor(Color.TRANSPARENT)\n        }\n        if (mAdded) {\n            mDecorContentParent!!.removeView(this)\n        }\n        if (mSlideTarget == SLIDE_TARGET_CONTENT) {\n            mDecorContent = mContentTarget\n            mDecorContentParent = mContentTargetParent\n        } else if (mSlideTarget == SLIDE_TARGET_WINDOW) {\n            mDecorContent = mWindowTarget\n            mDecorContentParent = mWindowTargetParent\n        } else {\n            throw IllegalArgumentException(\"Slide target must be one of SLIDE_TARGET_CONTENT or SLIDE_TARGET_WINDOW.\")\n        }\n        (mDecorContent!!.parent as ViewGroup).removeView(mDecorContent)\n        addView(mDrawerContent)\n        addView(mDecorContent, LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT))\n        mDecorContentParent!!.addView(this)\n        mAdded = true\n        mDecorContent!!.setBackgroundColor(Color.TRANSPARENT)\n        mDecorContent!!.setOnClickListener { }\n    }\n\n    @SuppressLint(\"DrawAllocation\")\n    override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) {\n        val windowRect = Rect()\n        mDecorView!!.getWindowVisibleDisplayFrame(windowRect)\n        if (mSlideTarget == SLIDE_TARGET_WINDOW) {\n            mDrawerContent!!.layout(left, top + windowRect.top, right, bottom)\n        } else {\n            mDrawerContent!!.layout(left, mDecorContent!!.top, right, bottom)\n        }\n        mDecorContent!!.layout(mDecorContent!!.left, mDecorContent!!.top, mDecorContent!!.left + right, bottom)\n    }\n\n    override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {\n        val vc = ViewConfiguration.get(context)\n        val widthPixels = resources.displayMetrics.widthPixels\n        val touchThreshold = widthPixels / TOUCH_HANDLE_WIDTH_DIP\n        val hypo: Double\n        val overcameSlop: Boolean\n        if (!mDrawerEnabled) {\n            return false\n        }\n        val x = ev.x\n        val y = ev.y\n        when (ev.action) {\n            MotionEvent.ACTION_DOWN -> {\n                mLastMotionX = x\n                mLastMotionY = y\n                mGestureCurrentX = (ev.x + 0.5f).toInt()\n                mGestureStartX = mGestureCurrentX\n                mGestureCurrentY = (ev.y + 0.5f).toInt()\n                mGestureStartY = mGestureCurrentY\n                if (mGestureStartX < touchThreshold && !mDrawerOpened) {\n                    mGestureStarted = true\n                }\n                if (mGestureStartX > widthPixels - mTouchTargetWidth && mDrawerOpened) {\n                    mGestureStarted = true\n                }\n                return false\n            }\n            MotionEvent.ACTION_MOVE -> {\n                val dx = x - mLastMotionX\n                val dy = y - mLastMotionY\n                val xDiff = Math.abs(dx)\n                val yDiff = Math.abs(y - mLastMotionY)\n                if (xDiff > vc.scaledTouchSlop && Math.abs(xDiff) > Math.abs(yDiff) && Math.abs(dy) < Math.abs(vc.scaledTouchSlop / 1)) {\n                } else {\n                    return false\n                }\n                if (!mGestureStarted) {\n                    return false\n                }\n                if (!mDrawerOpened && (ev.x < mGestureCurrentX || ev.x < mGestureStartX)) {\n                    return false.also { mGestureStarted = it }\n                }\n                mGestureCurrentX = (ev.x + 0.5f).toInt()\n                mGestureCurrentY = (ev.y + 0.5f).toInt()\n                hypo = Math.hypot((mGestureCurrentX - mGestureStartX).toDouble(), (mGestureCurrentY - mGestureStartY).toDouble())\n                overcameSlop = hypo > vc.scaledTouchSlop\n                return overcameSlop\n            }\n            MotionEvent.ACTION_UP -> {\n                if (mGestureStartX > widthPixels - mTouchTargetWidth && mDrawerOpened) {\n                    closeDrawer()\n                }\n                mGestureStarted = false\n                mGestureCurrentX = -1\n                mGestureStartX = mGestureCurrentX\n                mGestureCurrentY = -1\n                mGestureStartY = mGestureCurrentY\n                return false\n            }\n        }\n        return false\n    }\n\n    @SuppressLint(\"Recycle\")\n    override fun onTouchEvent(event: MotionEvent): Boolean {\n        val vc = ViewConfiguration.get(context)\n        val widthPixels = resources.displayMetrics.widthPixels\n        val deltaX = (event.x + 0.5f).toInt() - mGestureCurrentX\n        val deltaY = (event.y + 0.5f).toInt() - mGestureCurrentY\n        if (mVelocityTracker == null) {\n            mVelocityTracker = VelocityTracker.obtain()\n        }\n        mVelocityTracker!!.addMovement(event)\n        mGestureCurrentX = (event.x + 0.5f).toInt()\n        mGestureCurrentY = (event.y + 0.5f).toInt()\n        when (event.action) {\n            MotionEvent.ACTION_MOVE -> {\n                mDrawerMoving = true\n                if (mDecorOffsetX + deltaX > widthPixels - mTouchTargetWidth) {\n                    if (mDecorOffsetX != widthPixels - mTouchTargetWidth) {\n                        mDrawerOpened = true\n                        mDecorContent!!.offsetLeftAndRight(widthPixels - mTouchTargetWidth - mDecorOffsetX)\n                        mDecorOffsetX = widthPixels - mTouchTargetWidth\n                        invalidate()\n                    }\n                } else if (mDecorOffsetX + deltaX < 0) {\n                    if (mDecorOffsetX != 0) {\n                        mDrawerOpened = false\n                        mDecorContent!!.offsetLeftAndRight(0 - mDecorContent!!.left)\n                        mDecorOffsetX = 0\n                        invalidate()\n                    }\n                } else {\n                    if (mOnOpenDrawerCompleteListener != null && mOnOpenDrawerCompleteListener!!.onMoveRight()) {\n                    } else {\n                        mDecorContent!!.offsetLeftAndRight(deltaX)\n                        mDecorOffsetX += deltaX\n                        invalidate()\n                        return false\n                    }\n                }\n                return true\n            }\n            MotionEvent.ACTION_UP -> {\n                qx = mGestureCurrentX.toFloat()\n                qy = mGestureCurrentY.toFloat()\n                mGestureStarted = false\n                mDrawerMoving = false\n                mVelocityTracker!!.computeCurrentVelocity(1000)\n                if (Math.abs(mVelocityTracker!!.xVelocity) > vc.scaledMinimumFlingVelocity) {\n                    if (mVelocityTracker!!.xVelocity > 0 && mDecorOffsetX > widthPixels / 5.0) {\n                        mDrawerOpened = false\n                        openDrawer()\n                    } else {\n                        mDrawerOpened = true\n                        closeDrawer()\n                    }\n                } else {\n                    if (mDecorOffsetX > widthPixels / 5.0) {\n                        mDrawerOpened = false\n                        openDrawer()\n                    } else {\n                        mDrawerOpened = true\n                        closeDrawer()\n                    }\n                }\n                return true\n            }\n        }\n        return false\n    }\n\n    override fun dispatchDraw(canvas: Canvas) {\n        super.dispatchDraw(canvas)\n        if (mDrawerOpened || mDrawerMoving) {\n            canvas.save()\n            canvas.translate(mDecorOffsetX.toFloat(), 0f)\n            canvas.restore()\n        }\n    }\n\n    fun setOnDrawerBackEnabled(enabled: Boolean) {\n        mDrawerEnabled = enabled\n    }\n\n    fun isDrawerEnabled(): Boolean {\n        return mDrawerEnabled\n    }\n\n    fun toggleDrawer(animate: Boolean) {\n        if (!mDrawerOpened) {\n            openDrawer(animate)\n        } else {\n            closeDrawer(animate)\n        }\n    }\n\n    fun toggleDrawer() {\n        toggleDrawer(true)\n    }\n\n    fun openDrawer(animate: Boolean) {\n        if (mDrawerOpened || mDrawerMoving) {\n            return\n        }\n        mDrawerMoving = true\n        val widthPixels = resources.displayMetrics.widthPixels\n        mScroller!!.startScroll(mDecorOffsetX, 0, widthPixels - mDecorOffsetX, 0, if (animate) SCROLL_DURATION else 0)\n        mScrollerHandler!!.postDelayed(object : Runnable {\n            override fun run() {\n                val scrolling = mScroller!!.computeScrollOffset()\n                mDecorContent!!.offsetLeftAndRight(mScroller!!.currX - mDecorOffsetX)\n                mDecorOffsetX = mScroller!!.currX\n                postInvalidate()\n                if (!scrolling) {\n                    mDrawerMoving = false\n                    mDrawerOpened = true\n                    mScrollerHandler!!.post {\n                        enableDisableViewGroup(mDecorContent, false)\n                        mOnOpenDrawerCompleteListener?.onOpenDrawerComplete()\n                    }\n                } else {\n                    mScrollerHandler!!.postDelayed(this, 16)\n                }\n            }\n        }, 16)\n    }\n\n    fun openDrawer() {\n        openDrawer(true)\n    }\n\n    fun closeDrawer(animate: Boolean) {\n        if (!mDrawerOpened || mDrawerMoving) {\n            return\n        }\n        mDrawerMoving = true\n        val widthPixels = resources.displayMetrics.widthPixels\n        mScroller!!.startScroll(mDecorOffsetX, 0, -mDecorOffsetX, 0, if (animate) SCROLL_DURATION else 0)\n        mScrollerHandler!!.postDelayed(object : Runnable {\n            override fun run() {\n                val scrolling = mScroller!!.computeScrollOffset()\n                mDecorContent!!.offsetLeftAndRight(mScroller!!.currX - mDecorOffsetX)\n                mDecorOffsetX = mScroller!!.currX\n                postInvalidate()\n                if (!scrolling) {\n                    mDrawerMoving = false\n                    mDrawerOpened = false\n                    // if (mDrawerCallbacks != null) {\n                    // mScrollerHandler.post(new Runnable() {\n                    // @Override\n                    // public void run() {\n                    // enableDisableViewGroup(mDecorContent, true);\n                    // mDrawerCallbacks.onDrawerClosed();\n                    // }\n                    // });\n                    // }\n                } else {\n                    mScrollerHandler!!.postDelayed(this, 16)\n                }\n            }\n        }, 16)\n    }\n\n    fun closeDrawer() {\n        closeDrawer(true)\n    }\n\n    fun isDrawerOpened(): Boolean {\n        return mDrawerOpened\n    }\n\n    fun isDrawerMoving(): Boolean {\n        return mDrawerMoving\n    }\n\n    fun setOnOpenDrawerCompleteListener(mOnOpenDrawerCompleteListener: OnOpenDrawerCompleteListener?) {\n        this.mOnOpenDrawerCompleteListener = mOnOpenDrawerCompleteListener\n    }\n\n    fun getSlideTarget(): Int {\n        return mSlideTarget\n    }\n\n    fun setSlideTarget(slideTarget: Int) {\n        if (mSlideTarget != slideTarget) {\n            mSlideTarget = slideTarget\n            reconfigureViewHierarchy()\n        }\n    }\n\n    fun enableDisableViewGroup(viewGroup: ViewGroup?, enabled: Boolean) {\n        val childCount = viewGroup!!.childCount\n        for (i in 0 until childCount) {\n            val view = viewGroup.getChildAt(i)\n            if (view.isFocusable) {\n                view.isEnabled = enabled\n            }\n            if (view is ViewGroup) {\n                enableDisableViewGroup(view, enabled)\n            } else if (view is ListView) {\n                if (view.isFocusable()) {\n                    view.setEnabled(enabled)\n                }\n                val listView = view\n                val listChildCount = listView.childCount\n                for (j in 0 until listChildCount) {\n                    if (view.isFocusable()) {\n                        listView.getChildAt(j).isEnabled = false\n                    }\n                }\n            }\n        }\n    }\n\n    interface OnOpenDrawerCompleteListener {\n        fun onOpenDrawerComplete()\n        fun onMoveRight(): Boolean\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/widget/MusicVisualizerView.kt",
    "content": "package com.wgllss.core.widget\n\nimport android.content.Context\nimport android.graphics.Canvas\nimport android.graphics.Paint\nimport android.util.AttributeSet\nimport android.util.TypedValue\nimport android.view.View\nimport java.util.*\n\nclass MusicVisualizerView constructor(context: Context, attrs: AttributeSet) : View(context, attrs) {\n    private var random = Random()\n    private var paint = Paint()\n    private val animateView: Runnable = object : Runnable {\n        override fun run() {\n            //run every 100 ms\n            postDelayed(this, 120)\n            invalidate()\n        }\n    }\n\n    init {\n        //start runnable\n        removeCallbacks(animateView)\n        post(animateView)\n    }\n\n    override fun onDraw(canvas: Canvas) {\n        super.onDraw(canvas)\n\n        //set paint style, Style.FILL will fill the color, Style.STROKE will stroke the color\n        paint.style = Paint.Style.FILL\n        canvas.drawRect(getDimensionInPixel(0).toFloat(), (height - (40 + random.nextInt((height / 1.5f).toInt() - 25))).toFloat(), getDimensionInPixel(7).toFloat(), (height - 15).toFloat(), paint)\n        canvas.drawRect(getDimensionInPixel(10).toFloat(), (height - (40 + random.nextInt((height / 1.5f).toInt() - 25))).toFloat(), getDimensionInPixel(17).toFloat(), (height - 15).toFloat(), paint)\n        canvas.drawRect(getDimensionInPixel(20).toFloat(), (height - (40 + random.nextInt((height / 1.5f).toInt() - 25))).toFloat(), getDimensionInPixel(27).toFloat(), (height - 15).toFloat(), paint)\n    }\n\n    fun setColor(color: Int) {\n        paint.color = color\n        invalidate()\n    }\n\n    //get all dimensions in dp so that views behaves properly on different screen resolutions\n    private fun getDimensionInPixel(dp: Int): Int {\n        return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp.toFloat(), resources.displayMetrics).toInt()\n    }\n\n    override fun onWindowVisibilityChanged(visibility: Int) {\n        super.onWindowVisibilityChanged(visibility)\n        if (visibility == VISIBLE) {\n            removeCallbacks(animateView)\n            post(animateView)\n        } else if (visibility == GONE) {\n            removeCallbacks(animateView)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library/src/main/java/com/wgllss/core/widget/OnRecyclerViewItemClickListener.kt",
    "content": "package com.wgllss.core.widget\n\nimport android.view.GestureDetector\nimport android.view.MotionEvent\nimport android.view.View\nimport androidx.core.view.GestureDetectorCompat\nimport androidx.recyclerview.widget.RecyclerView\n\nopen class OnRecyclerViewItemClickListener constructor(val recyclerView: RecyclerView) : RecyclerView.OnItemTouchListener {\n\n    private lateinit var gestureDetectorCompat: GestureDetectorCompat\n\n    init {\n        gestureDetectorCompat = GestureDetectorCompat(recyclerView.context, object : GestureDetector.SimpleOnGestureListener() {\n            override fun onLongPress(e: MotionEvent) {\n                trasfomerItemEvent(e, 1)\n            }\n\n            override fun onSingleTapUp(e: MotionEvent): Boolean {\n                trasfomerItemEvent(e, 0)\n                return true\n            }\n        })\n    }\n\n    private fun trasfomerItemEvent(e: MotionEvent, type: Int) {\n        recyclerView?.let {\n            it.findChildViewUnder(e.x, e.y)\n        }?.apply {\n            val viewHolder = recyclerView.getChildViewHolder(this)\n            val position = recyclerView.getChildPosition(this)\n            if (type == 0) {\n                onItemClickListener(this, position)\n            } else {\n                onItemLongClickListener(this, position)\n            }\n        }\n    }\n\n    open fun onItemClickListener(itemRootView: View, position: Int) {}\n\n    open fun onItemLongClickListener(itemRootView: View, position: Int) {}\n\n    open fun onItemClickListener(viewHolder: RecyclerView.ViewHolder?, position: Int) {}\n\n    open fun onItemLongClickListener(viewHolder: RecyclerView.ViewHolder?, position: Int) {}\n\n    override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean {\n        gestureDetectorCompat.onTouchEvent(e)\n        return false\n    }\n\n    override fun onTouchEvent(rv: RecyclerView, e: MotionEvent) {\n        gestureDetectorCompat.onTouchEvent(e)\n    }\n\n    override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {}\n\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-all-app/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-all-app/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n    alias(libs.plugins.jetbrains.kotlin.android)\n    alias(libs.plugins.kotlin.kapt)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.version.json\"\n\n    defaultConfig {\n        applicationId \"com.wgllss.dynamic.create.all.app\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n\n    kapt {\n        generateStubs = true\n    }\n}\n\ndependencies {\n    implementation project(path: ':maven-wgllss-sample-create-version-config-annotations')\n    kapt project(path: ':maven-wgllss-sample-create-version-config-compiler')\n}\n\n\ndef createVersionJson(assembleReleaseTask, buildType) {\n    def inputFile = file(\"${getProject().getBuildDir()}/outputs/apk/vc\")\n    def outputFile = file(\"${rootProject.getBuildDir()}/vc\")\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n\n    def inputFileJar = file(\"${project(\":maven-wgllss-sample-loader-version\").getBuildDir()}/intermediates/aar_main_jar/release/syncReleaseLibJars/classes.jar\")\n    def outputSrcFile = file(\"${project(\":maven-wgllss-sample-create-version-config-compiler\").projectDir}/libs/classes.jar\")\n    def assembleCopyJarToLibs = tasks.create(\"assembleCopyJarToLibs\") {\n        doLast {\n            if (outputSrcFile.exists()) {\n                outputSrcFile.delete()\n            }\n            copy {\n                from(inputFileJar.getParent()) {\n                    include(inputFileJar.name)\n                    rename { outputSrcFile.name }\n                }\n                into(outputSrcFile.getParent())\n            }\n        }\n    }.dependsOn(\":maven-wgllss-sample-loader-version:assembleDxCommandAndCopy\")\n            .dependsOn(\":maven-wgllss-sample-loader-version:assembleRelease\")\n\n\n    return tasks.create(\"assembleCreateAllFile${buildType.capitalize()}\") {\n        doLast {\n            copy {\n                from(inputFile.getParent()) {\n                    include(inputFile.name)\n                    rename { outputFile.name }\n                }\n                into(outputFile.getParent())\n            }\n        }\n    }.dependsOn(assembleReleaseTask.name)\n            .dependsOn(assembleCopyJarToLibs.name)\n\n            .dependsOn(\":Maven-Wgllss-Dynamic-Plugin-RunTime-Apk:assembleCopy\")\n\n            .dependsOn(\":maven-wgllss-sample-ui-other-lib:assembleDxCommandAndCopy\")\n\n            .dependsOn(\":maven-wgllss-sample-ui-other2-lib2:assembleDxCommandAndCopy\")\n\n            .dependsOn(\":maven-wgllss-sample-ui-other2:assembleCopy\")\n            .dependsOn(\":maven-wgllss-sample-ui-other:assembleCopy\")\n\n            .dependsOn(\":maven-wgllss-sample-ui-loading:assembleDxCommandAndCopy\")\n\n            .dependsOn(\":maven-wgllss-sample-ui-home:assembleDxCommandAndCopy\")\n\n            .dependsOn(\":maven-wgllss-sample-assets-source-apk:assembleCopy\")\n            .dependsOn(\":maven-wgllss-sample-skin-resource-apk:assembleCopy\")\n\n            .dependsOn(\":Maven-Wgllss-Dynamic-Plugin-Manager:assembleDxCommandAndCopy\")\n            .dependsOn(\":maven-wgllss-sample-business-library:assembleDxCommandAndCopy\")\n            .dependsOn(\":Maven-Wgllss-Dynamic-Plugin-Common-Library:assembleDxCommandAndCopy\")\n}\n\ntasks.whenTaskAdded { task ->\n    if (task.name == \"assembleRelease\") {\n        createVersionJson(task, \"Release\")\n    }\n//    if (task.name == \"cleanJson\") {\n//        createVersionJson(task, \"Release\")\n//    }\n}\n\ntask assemblecleanJson(type: Delete) {\n    delete buildDir\n}\n\n\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-all-app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-all-app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.version.json\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-all-app/src/main/java/com/wgllss/dynamic/version/json/Test.kt",
    "content": "package com.wgllss.dynamic.version.json\n\nimport com.wgllss.annotations.CreateVersionConfig\n\n@CreateVersionConfig\nclass Test {\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-version-config-annotations/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-version-config-annotations/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.java.library)\n    alias(libs.plugins.java.kotlin)\n}\n\njava {\n    sourceCompatibility = JavaVersion.VERSION_21\n    targetCompatibility = JavaVersion.VERSION_21\n}\n\ndependencies {\n    implementation libs.kotlin.stdlib\n//    implementation \"org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version\"\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-version-config-annotations/src/main/java/com/wgllss/annotations/CreateVersionConfig.kt",
    "content": "package com.wgllss.annotations\n\n\n@Suppress(\"SupportAnnotationUsage\")\n@Target(AnnotationTarget.CLASS)\n@Retention(AnnotationRetention.RUNTIME)\nannotation class CreateVersionConfig {\n\n}\n\n\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-version-config-app/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-version-config-app/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n    alias(libs.plugins.jetbrains.kotlin.android)\n    alias(libs.plugins.kotlin.kapt)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.version.json\"\n\n    defaultConfig {\n        applicationId \"com.wgllss.dynamic.create.all.app2\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n\n    kapt {\n        generateStubs = true\n    }\n}\n\ndependencies {\n    implementation project(path: ':maven-wgllss-sample-create-version-config-annotations')\n    kapt project(path: ':maven-wgllss-sample-create-version-config-compiler')\n}\n\n\ndef createVersionJson(assembleReleaseTask, buildType) {\n    def inputFile = file(\"${getProject().getBuildDir()}/outputs/apk/vc\")\n    def outputFile = file(\"${rootProject.getBuildDir()}/vc\")\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n\n    def inputFileJar = file(\"${project(\":maven-wgllss-sample-loader-version\").getBuildDir()}/intermediates/aar_main_jar/release/syncReleaseLibJars/classes.jar\")\n    def outputSrcFile = file(\"${project(\":maven-wgllss-sample-create-version-config-compiler\").projectDir}/libs/classes.jar\")\n    def assembleCopyJarToLibs = tasks.create(\"assembleCopyJarToLibs\") {\n        doLast {\n            if (outputSrcFile.exists()) {\n                outputSrcFile.delete()\n            }\n            copy {\n                from(inputFileJar.getParent()) {\n                    include(inputFileJar.name)\n                    rename { outputSrcFile.name }\n                }\n                into(outputSrcFile.getParent())\n            }\n        }\n    }.dependsOn(\":maven-wgllss-sample-loader-version:assembleDxCommandAndCopy\")\n            .dependsOn(\":maven-wgllss-sample-loader-version:assembleRelease\")\n\n    return tasks.create(\"assembleCreateVersion2File${buildType.capitalize()}\") {\n        doLast {\n            copy {\n                from(inputFile.getParent()) {\n                    include(inputFile.name)\n                    rename { outputFile.name }\n                }\n                into(outputFile.getParent())\n            }\n        }\n    }.dependsOn(assembleReleaseTask.name)\n            .dependsOn(assembleCopyJarToLibs.name)\n\n}\n\ntasks.whenTaskAdded { task ->\n    if (task.name == \"assembleRelease\") {\n        createVersionJson(task, \"Release\")\n    }\n//    if (task.name == \"cleanJson\") {\n//        createVersionJson(task, \"Release\")\n//    }\n}\n\ntask assemblecleanJson(type: Delete) {\n    delete buildDir\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-version-config-app/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-version-config-app/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.version.json\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-version-config-app/src/main/java/com/wgllss/dynamic/version/json/Test.kt",
    "content": "package com.wgllss.dynamic.version.json\n\nimport com.wgllss.annotations.CreateVersionConfig\n\n@CreateVersionConfig\nclass Test {\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-version-config-compiler/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-version-config-compiler/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.java.library)\n    alias(libs.plugins.java.kotlin)\n    alias(libs.plugins.java)\n    alias(libs.plugins.kotlin.kapt)\n}\n\njava {\n    sourceCompatibility = JavaVersion.VERSION_21\n    targetCompatibility = JavaVersion.VERSION_21\n}\n\ndependencies {\n    implementation fileTree(dir: \"libs\", include: [\"*.jar\"])\n    implementation libs.protobuf\n    implementation libs.auto.service\n    kapt libs.auto.service\n    implementation libs.kotlin.stdlib\n    implementation libs.kotlinpoet\n\n    implementation project(path: ':maven-wgllss-sample-create-version-config-annotations')\n//    implementation files(\"${project(\":maven-wgllss-sample-loader-version\").getBuildDir()}/intermediates/aar_main_jar/release/syncReleaseLibJars/classes.jar\")\n\n//    implementation libs.wgllss.dynamic.host.constant.lib\n//    implementation 'io.github.wgllss:Wgllss-Dynamic-Host-Constant-Lib:1.0.0.6'\n//    implementation 'io.github.wgllss:Wgllss-Dynamic-Host-Version-Lib:1.0.0.7'\n\n    implementation 'io.github.wgllss:Wgllss-Dynamic-Host-VersionK-Lib:1.0.00'\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-version-config-compiler/src/main/java/com/wgllss/compiler/AptCreateConfigProcessor.kt",
    "content": "package com.wgllss.compiler\n\nimport com.google.auto.service.AutoService\nimport com.wgllss.annotations.CreateVersionConfig\nimport com.wgllss.dynamic.host.lib.protobuf.PluginMode\nimport com.wgllss.loader.version.LoaderVersionImpl\nimport java.io.File\nimport java.io.FileOutputStream\nimport java.io.IOException\nimport javax.annotation.processing.*\nimport javax.lang.model.SourceVersion\nimport javax.lang.model.element.TypeElement\nimport javax.lang.model.util.Elements\nimport javax.tools.Diagnostic\nimport javax.tools.FileObject\nimport javax.tools.StandardLocation\n\n@AutoService(Processor::class)\nclass AptCreateConfigProcessor : AbstractProcessor() {\n    private val OUTPUT_FILE_NAME = \"vc\"\n    private var mFiler: Filer? = null\n    private var mElementUtils: Elements? = null\n\n    override fun init(processingEnv: ProcessingEnvironment?) {\n        super.init(processingEnv)\n        mFiler = processingEnv?.filer\n        mElementUtils = processingEnv?.elementUtils\n    }\n\n    //指定处理的版本\n    override fun getSupportedSourceVersion(): SourceVersion {\n        return SourceVersion.latestSupported()\n    }\n\n    //给到需要处理的注解\n    override fun getSupportedAnnotationTypes(): MutableSet<String> {\n        val types: LinkedHashSet<String> = LinkedHashSet()\n        getSupportedAnnotations().forEach { clazz: Class<out Annotation> ->\n            types.add(clazz.canonicalName)\n        }\n        return types\n    }\n\n    private fun getSupportedAnnotations(): Set<Class<out Annotation>> {\n        val annotations: LinkedHashSet<Class<out Annotation>> = LinkedHashSet()\n        // 需要解析的自定义注解\n        annotations.add(CreateVersionConfig::class.java)\n        return annotations\n    }\n\n    /**\n    KotlinPoet 官方helloWorld示例：\n    val greeterClass = ClassName(\"\", \"Greeter\")\n    val file = FileSpec.builder(\"\", \"HelloWorld\")\n    .addType(TypeSpec.classBuilder(\"Greeter\")\n    .primaryConstructor(FunSpec.constructorBuilder()\n    .addParameter(\"name\", String::class).build())\n    .addProperty(PropertySpec.builder(\"name\", String::class)\n    .initializer(\"name\").build())\n    .addFunction(FunSpec.builder(\"greet\")\n    .addStatement(\"println(%P)\", \"Hello, \\$name\").build())\n    .build())\n    .addFunction(FunSpec.builder(\"main\")\n    .addParameter(\"args\", String::class, VARARG)\n    .addStatement(\"%T(args[0]).greet()\", greeterClass).build())\n    .build()\n    file.writeTo(System.out)\n    ——————————————————————————————————\n    class Greeter(val name: String) {\n    fun greet() {println(\"\"\"Hello, $name\"\"\")}}\n    fun main(vararg args: String) {Greeter(args[0]).greet()}\n     */\n    override fun process(annotations: MutableSet<out TypeElement>, roundEnvironment: RoundEnvironment): Boolean {\n        var fos: FileOutputStream? = null\n        try {\n            //filer.createResource()意思是创建源文件\n            //我们可以指定为class文件输出的地方，\n            //StandardLocation.CLASS_OUTPUT：java文件生成class文件的位置，/app/build/intermediates/javac/debug/classes/目录下\n            //StandardLocation.SOURCE_OUTPUT：java文件的位置，一般在/ppjoke/app/build/generated/source/apt/目录下\n            //StandardLocation.CLASS_PATH 和 StandardLocation.SOURCE_PATH用的不多，指的了这个参数，就要指定生成文件的pkg包名了\n            val resource: FileObject = mFiler!!.createResource(StandardLocation.CLASS_OUTPUT, \"\", OUTPUT_FILE_NAME)\n            val resourcePath = resource.toUri().path\n            //由于我们想要把json文件生成在app/src/main/assets/目录下,所以这里可以对字符串做一个截取，\n            //以此便能准确获取项目在每个电脑上的 /app/src/main/assets/的路径\n            val appPath = resourcePath.substring(0, resourcePath.indexOf(\"app\") + 4)\n            val vcPath = appPath + \"build/outputs/apk/\"\n            val file = File(vcPath)\n            if (!file.exists()) {\n                file.mkdirs()\n            }\n\n            //此处就是稳健的写入了\n            val outPutFile = File(file, OUTPUT_FILE_NAME)\n            if (outPutFile.exists()) {\n                outPutFile.delete()\n            }\n            outPutFile.createNewFile()\n            val bytes = createConfig().toByteArray();\n\n            fos = FileOutputStream(outPutFile)\n            fos.write(bytes)\n            fos.flush()\n        } catch (e: IOException) {\n            e.printStackTrace()\n        } finally {\n            if (fos != null) {\n                try {\n                    fos.close()\n                } catch (e: IOException) {\n                    e.printStackTrace()\n                }\n            }\n        }\n        return true\n    }\n\n    private fun log(message: String) {\n        processingEnv.messager.printMessage(Diagnostic.Kind.NOTE, message)\n    }\n\n    private fun createConfig(): PluginMode._PluginMode {\n        val loader = LoaderVersionImpl()\n        val pluginMode = PluginMode._PluginMode.newBuilder()\n            .setV(loader.getV())\n            .setClfd(PluginMode._PluginMode._Plugin.newBuilder().setV(loader.getClfd().third).setDlu(loader.getClfd().second).setIsApkRes(false).build())\n            .setClmd(PluginMode._PluginMode._Plugin.newBuilder().setV(loader.getClmd().third).setDlu(loader.getClmd().second).setIsApkRes(false).build())\n            .setCdlfd(PluginMode._PluginMode._Plugin.newBuilder().setV(loader.getCdlfd().third).setDlu(loader.getCdlfd().second).setIsApkRes(false).build())\n        val map = linkedMapOf<String, PluginMode._PluginMode._Plugin>()\n        loader.getMapDLU().forEach { (key, value) ->\n            map[key] = PluginMode._PluginMode._Plugin.newBuilder().setV(value.second).setDlu(value.first).setIsApkRes(false).build()\n        }\n        pluginMode.putAllMapDl(map)\n        loader.getOthers().forEach { (key, value) ->\n            val isApkRes = key.contains(\"_res\")\n            pluginMode.addOthers(PluginMode._PluginMode._Plugin.newBuilder().setV(value).setDlu(key).setIsApkRes(isApkRes).build())\n        }\n        return pluginMode.build()\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.plugin.download_face.impl\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\ndependencies {\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Constant-Lib:1.0.0.6'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Download-Lib:1.0.0.8'\n    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-VersionK-Lib:1.0.00'\n    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Lib:1.0.02'\n    implementation project(path: ':maven-wgllss-common-re-library')\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_downloadface_impl.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_downloadface_impl_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_downloadface_impl_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.plugin.download_face.impl\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl/src/main/java/com/wgllss/dynamic/plugin/download_face/DownLoadFaceImpl.kt",
    "content": "package com.wgllss.dynamic.plugin.download_face\n\nimport android.text.TextUtils\nimport com.wgllss.core.units.DeviceIdUtil\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.CDLFD\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.CLMD\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.COMMON\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.COMMON_BUSINESS\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.FIRST\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.HOME\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.MANAGER\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.RESOURCE_SKIN\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.RUNTIME\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.VERSION\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.WEB_ASSETS\nimport com.wgllss.dynamic.host.lib.download.IDynamicDownLoadFace\n\nclass DownLoadFaceImpl : IDynamicDownLoadFace {\n\n    private var baseXL: String = \"\"\n\n    //    override fun getHostL() = \"http://192.168.3.21:8080/assets/WXDynamicPlugin/\"\n//    override fun getHostL() = \"http://192.168.1.9:8080/assets/WXDynamicPlugin/\"\n    override fun getHostL() = \"https://gitee.com/wgllss888/WXDynamicPlugin/raw/master/WX-Resource/\"\n\n    /** 0:WXDynamicPlugin 动态化插件框架 理论上已经做到了可以完全不动宿主,但是如果一定要动宿主 可以提供以下思路:\n     *  1:可以根据 宿主版本号得到 宿主版本支持的 的插件,\n     *  2:当宿主必须 需要升级时,升级后原版本的插件不可用了，插件配置在新宿主版本文件夹下面，原宿主版本文件夹可可以先动态配置 在启动页 升级下载新的宿主\n     *  @example  宿主版本 10000 版本支持的插件 放在服务端 WXDynamicPlugin/10000/ 文件夹下  20000版本的插件放在 WXDynamicPlugin/20000/下面\n     */\n    override fun getBaseL(): String {\n        if (TextUtils.isEmpty(baseXL)) {\n            baseXL = StringBuilder().append(getHostL()).append(DeviceIdUtil.getDeviceId()).append(\"/\").append(\"10000\").append(\"/\").toString()\n        }\n        return baseXL\n    }\n\n    override fun isDebug() = true\n\n    override fun getOtherDLU() = \"${getBaseL()}vc\"\n\n    /**\n     * 下面要添加删除 map内内容 map的key 不能自定义\n     * 即:VERSION,COMMON,WEB_ASSETS,COMMON_BUSINESS,HOME,RESOURCE_SKIN,RUNTIME,MANAGER,FIRST,CLMD,CDLFD不能动\n     */\n    override fun getMapDLU() = mutableMapOf(\n        VERSION to \"${getBaseL()}classes_version_dex\",\n        COMMON to \"${getBaseL()}classes_common_lib_dex\",\n        WEB_ASSETS to \"${getBaseL()}classes_business_web_res\",\n        COMMON_BUSINESS to \"${getBaseL()}classes_business_lib_dex\",\n        HOME to \"${getBaseL()}classes_home_dex\",\n        RESOURCE_SKIN to \"${getBaseL()}classes_common_skin_res\",\n        RUNTIME to \"${getBaseL()}classes_wgllss_dynamic_plugin_runtime\",\n        MANAGER to \"${getBaseL()}classes_manager_dex\",\n        FIRST to \"${getBaseL()}classes_loading_dex\",\n        CLMD to \"${getBaseL()}class_loader_impl_dex\",\n        CDLFD to \"${getBaseL()}classes_downloadface_impl_dex\"\n    )\n\n    override fun getLoadVersionClassName() = \"com.wgllss.loader.version.LoaderVersionImpl\"\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-Loader-Impl/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-Loader-Impl/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.plugin.loader.impl\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\ndependencies {\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Loader-Base-Lib:1.0.1.7'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Loader-Lib:1.0.0.9'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Download-Lib:1.0.0.8'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-VersionK-Lib:1.0.00'\n    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Lib:1.0.02'\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}class_loader_impl.jar\")\n    def outputDexFile = file(\"${workingDirPath}class_loader_impl_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/class_loader_impl_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-Loader-Impl/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-Loader-Impl/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.plugin.loader.impl\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-Loader-Impl/src/main/java/com/wgllss/dynamic/plugin/loader/LoaderManagerImpl.kt",
    "content": "package com.wgllss.dynamic.plugin.loader\n\nimport android.content.Context\nimport com.wgllss.dynamic.host.lib.download.IDynamicDownLoadFace\nimport com.wgllss.dynamic.host.lib.loader_base.BaseLoaderManagerImpl\n\nclass LoaderManagerImpl : BaseLoaderManagerImpl() {\n\n    override fun initDynamicLoader(\n        context: Context, v: Int,\n        clfd: Triple<String, String, Int>, clmd: Triple<String, String, Int>, cdlfd: Triple<String, String, Int>,\n        mapDlu: MutableMap<String, Pair<String, Int>>,\n        cotd: MutableMap<String, Int>,\n        faceImpl: IDynamicDownLoadFace,\n        isMustShowLoading: Boolean\n    ) {\n        android.util.Log.e(\"LoaderManagerImpl\", \"-----initDynamicLoader-----\")\n        super.initDynamicLoader(context, v, clfd, clmd, cdlfd, mapDlu, cotd, faceImpl, isMustShowLoading)\n    }\n\n    //    override fun initDynamicRunTime(context: Context, contentKey: String, fileAbsolutePath: String) {\n//        super.initDynamicRunTime(context, contentKey, fileAbsolutePath)\n//    }\n//\n//    override fun initHomeCreate(context: Context, classLoader: ClassLoader) {\n//        super.initHomeCreate(context, classLoader)\n//    }\n//\n    private fun test() {\n        this.v\n        this.clfd\n        this.clmd\n        this.cdlfd\n\n        this.mapDlu\n        this.cotd\n        this.faceImpl\n        this.mapOthers\n        this.isShowLoadFlag\n        this.libIsLoadComplete\n        this.firstLoadSuccess\n        this.hasOldFileDelete\n        this.libLoadCount\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-Manager/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-Manager/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.plugin.manager\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\ndependencies {\n    compileOnly libs.androidx.core.ktx\n    compileOnly libs.appcompat\n    compileOnly libs.androidx.activity\n\n    compileOnly project(path: ':Maven-Wgllss-Dynamic-Plugin-Common-Library')\n\n    compileOnly project(path: ':Maven-Wgllss-Dynamic-Plugin-Library')\n    compileOnly project(path: ':maven-wgllss-sample-business-library')\n\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-ClassLoader-Lib:1.0.0.7'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Constant-Lib:1.0.0.6'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Lib-Impl:1.0.1.7'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Loader-Base-Lib:1.0.1.7'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Loader-Lib:1.0.0.9'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Download-Lib:1.0.0.8'\n    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-VersionK-Lib:1.0.00'\n    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Lib:1.0.02'\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_manager.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_manager_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_manager_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-Manager/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-Manager/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.plugin.manager\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-Manager/src/main/java/com/wgllss/dynamic/plugin/manager/PluginManager.kt",
    "content": "package com.wgllss.dynamic.plugin.manager\n\nimport android.content.ComponentName\nimport android.content.Context\nimport android.content.Intent\nimport android.content.ServiceConnection\nimport android.content.pm.PackageManager\nimport android.content.res.Resources\nimport android.os.IBinder\nimport android.text.TextUtils\nimport com.wgllss.core.activity.BaseViewPluginResActivity\nimport com.wgllss.core.activity.WActivityManager\nimport com.wgllss.core.units.WLog\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.RESOURCE_SKIN\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.WEB_ASSETS\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.dldir\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.versionFile\nimport com.wgllss.dynamic.host.lib.download.DynamicDownloadPlugin\nimport com.wgllss.dynamic.host.lib.impl.WXDynamicLoader\nimport com.wgllss.dynamic.host.lib.loader_base.DynamicManageUtils\nimport com.wgllss.dynamic.host.lib.loader_base.DynamicManageUtils.getDlfn\nimport com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface\nimport com.wgllss.sample.feature_system.savestatus.MMKVHelp\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.flow.flowOf\nimport kotlinx.coroutines.flow.flowOn\nimport kotlinx.coroutines.flow.zip\nimport kotlinx.coroutines.runBlocking\nimport java.io.File\nimport java.util.concurrent.ConcurrentHashMap\n\n\nclass PluginManager private constructor() {\n\n    /** res apk*/\n    private val resFileName by lazy {\n        WXDynamicLoader.instance.loader.getMapDluImpl()[RESOURCE_SKIN]!!.run {\n            getDlfn(first, second)\n        }\n    }\n\n    private val webResFileName by lazy {\n        WXDynamicLoader.instance.loader.getMapDluImpl()[WEB_ASSETS]!!.run {\n            getDlfn(first, second)\n        }\n    }\n\n    /** 加载插件管理器 dex **/\n    private val clmd by lazy { WXDynamicLoader.instance.loader.getClmdImpl() }\n\n    /** 下载接口实现 dex **/\n    private val cdlfd by lazy { WXDynamicLoader.instance.loader.getCdlfdImpl() }\n\n    /**others dex*/\n    private val cotd by lazy { WXDynamicLoader.instance.loader.getCotdImpl() }\n\n    private val mapOtherLoadStatus by lazy { WXDynamicLoader.instance.loader.getOtherLoadStatus() }\n\n    private val context by lazy { WXDynamicLoader.instance.context }\n    private val skinMap by lazy { ConcurrentHashMap<String, Resources>() }\n\n    private val mapAidl by lazy { HashMap<String, WXDynamicAidlInterface>() }\n    private val mapConnection by lazy { HashMap<String, ServiceConnection>() }\n    private val mapContextPluginService by lazy { HashMap<String, MutableList<String>>() }\n\n    companion object {\n        const val pluginApkPathKey = \"PLUGIN_APK_PATH_KEY\"\n        const val activityNameKey = \"ACTIVITY_NAME_KEY\"\n        const val serviceNameKey = \"PLUGIN_SERVICE_NAME_KEY\"\n        const val privatePackageKey = \"PRIVATE_PACKAGE_KEY\"\n\n        private const val PluginStandardActivity = \"com.wgllss.dynamic.plugin.runtime.PluginStandardActivity\"\n        private const val PluginSingleInstanceActivity = \"com.wgllss.dynamic.plugin.runtime.PluginSingleInstanceActivity\"\n        private const val PluginSingleTaskActivity = \"com.wgllss.dynamic.plugin.runtime.PluginSingleTaskActivity\"\n        private const val PluginSingleTopActivity = \"com.wgllss.dynamic.plugin.runtime.PluginSingleTopActivity\"\n\n        private const val PluginStandardComposeActivity = \"com.wgllss.dynamic.plugin.runtime.PluginStandardComposeActivity\"\n        private const val PluginSingleInstanceComposeActivity = \"com.wgllss.dynamic.plugin.runtime.PluginSingleInstanceComposeActivity\"\n        private const val PluginSingleTaskComposeActivity = \"com.wgllss.dynamic.plugin.runtime.PluginSingleTaskComposeActivity\"\n        private const val PluginSingleTopComposeActivity = \"com.wgllss.dynamic.plugin.runtime.PluginSingleTopComposeActivity\"\n\n        private const val PluginStartStickyService = \"com.wgllss.dynamic.plugin.runtime.PluginStartStickyService\"\n        private const val PluginStartNotStickyService = \"com.wgllss.dynamic.plugin.runtime.PluginStartNotStickyService\"\n        private const val PluginStartRedeliverIntentService = \"com.wgllss.dynamic.plugin.runtime.PluginStartRedeliverIntentService\"\n        private const val PluginStartStickyCompatibilityService = \"com.wgllss.dynamic.plugin.runtime.PluginStartStickyCompatibilityService\"\n\n        private const val PluginProcessStartStickyService = \"com.wgllss.dynamic.plugin.runtime.PluginProcessStartStickyService\"\n        private const val PluginProcessStartNotStickyService = \"com.wgllss.dynamic.plugin.runtime.PluginProcessStartNotStickyService\"\n        private const val PluginProcessStartRedeliverIntentService = \"com.wgllss.dynamic.plugin.runtime.PluginProcessStartRedeliverIntentService\"\n        private const val PluginProcessStartStickyCompatibilityService = \"com.wgllss.dynamic.plugin.runtime.PluginProcessStartStickyCompatibilityService\"\n\n\n        val instance by lazy { PluginManager() }\n    }\n\n    fun switchSkinResources(skinPath: String) {\n        val file = File(skinPath)\n        if (file.exists()) {\n            val key = file.absolutePath\n            if (!skinMap.containsKey(key)) {\n                val res = getResourcesForApplication(file)\n                skinMap[key] = res\n            }\n            MMKVHelp.saveSkinPath(key)\n        }\n    }\n\n    fun callAllActivity(skinRes: Resources) {\n        WActivityManager.getActivitys {\n            if (it is BaseViewPluginResActivity) {\n                it.callChangeSkin(skinRes)\n            }\n        }\n    }\n\n    fun getCurrentSkinPath() = MMKVHelp.getSkinPath() ?: getDefaultSkinPath()\n\n    fun getPluginSkinResources(): Resources {\n        val skinPath = MMKVHelp.getSkinPath()\n        var file: File\n        if (!TextUtils.isEmpty(skinPath)) {\n            file = File(skinPath)\n            if (!file.exists()) {\n                file = File(getDefaultSkinPath())\n            }\n        } else {\n            file = File(getDefaultSkinPath())\n        }\n        val key = file.absolutePath\n        return if (skinMap.containsKey(key)) {\n            skinMap[key]!!\n        } else {\n            android.util.Log.e(\"PluginManager\", \"PluginManager :${file.absolutePath}\")\n            val res = getResourcesForApplication(file)\n            skinMap[key] = res\n            MMKVHelp.saveSkinPath(key)\n            res\n        }\n    }\n\n    fun getPluginResources(contentKey: String): Resources {\n        return getResourcesForApplication(DynamicManageUtils.getDxFile(context, dldir, getDlfn(contentKey, cotd[contentKey]!!)))\n    }\n\n    private fun getDefaultSkinPath() = StringBuilder(context.filesDir.absolutePath).apply {\n        append(File.separator)\n        append(dldir)\n        append(File.separator)\n        append(resFileName)\n    }.toString()\n\n    /**\n     * web res 资源\n     */\n    fun getWebRes(): Resources {\n        val file = DynamicManageUtils.getDxFile(context, dldir, webResFileName)\n        val flags = (PackageManager.GET_META_DATA or PackageManager.GET_ACTIVITIES or PackageManager.GET_SERVICES or PackageManager.GET_PROVIDERS or PackageManager.GET_RECEIVERS)\n        val packageManager = context.applicationContext.packageManager\n        val packageInfo = packageManager.getPackageArchiveInfo(file.absolutePath, flags)\n        val applicationInfo = packageInfo!!.applicationInfo\n        applicationInfo.publicSourceDir = file.absolutePath\n        applicationInfo.sourceDir = applicationInfo.publicSourceDir\n        MMKVHelp.saveWebResPath(file.absolutePath)\n        return packageManager.getResourcesForApplication(applicationInfo)\n    }\n\n\n    private fun getResourcesForApplication(file: File): Resources {\n        val flags = (PackageManager.GET_META_DATA or PackageManager.GET_ACTIVITIES or PackageManager.GET_SERVICES or PackageManager.GET_PROVIDERS or PackageManager.GET_RECEIVERS)\n        val packageManager = context.applicationContext.packageManager\n        val packageInfo = packageManager.getPackageArchiveInfo(file.absolutePath, flags)\n        val applicationInfo = packageInfo!!.applicationInfo\n        applicationInfo.publicSourceDir = file.absolutePath\n        applicationInfo.sourceDir = applicationInfo.publicSourceDir\n        return packageManager.getResourcesForApplication(applicationInfo)\n    }\n\n    fun startStandardActivity(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        startActivity(context, contentKey, PluginStandardActivity, activityName, packageName, intentOption)\n    }\n\n    fun startPluginSingleInstanceActivity(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        startActivity(context, contentKey, PluginSingleInstanceActivity, activityName, packageName, intentOption)\n    }\n\n    fun startPluginSingleTaskActivity(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        startActivity(context, contentKey, PluginSingleTaskActivity, activityName, packageName, intentOption)\n    }\n\n    fun startPluginSingleTopActivity(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        startActivity(context, contentKey, PluginSingleTopActivity, activityName, packageName, intentOption)\n    }\n\n    fun startPluginStandardComposeActivity(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        startActivity(context, contentKey, PluginStandardComposeActivity, activityName, packageName, intentOption)\n    }\n\n    fun startPluginSingleInstanceComposeActivity(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        startActivity(context, contentKey, PluginSingleInstanceComposeActivity, activityName, packageName, intentOption)\n    }\n\n    fun startPluginSingleTaskComposeActivity(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        startActivity(context, contentKey, PluginSingleTaskComposeActivity, activityName, packageName, intentOption)\n    }\n\n    fun startPluginSingleTopComposeActivity(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        startActivity(context, contentKey, PluginSingleTopComposeActivity, activityName, packageName, intentOption)\n    }\n\n    private fun startActivity(context: Context, contentKey: String, lunchName: String, activityName: String, packageName: String, intentOption: Intent? = null) {\n        try {\n            if (!cotd.containsKey(contentKey)) return\n            val clazz = Class.forName(lunchName)\n            val intent = intentOption ?: Intent(context, clazz)\n            if (intentOption != null) {\n                intent.setClass(context, clazz)\n            }\n            intent.apply {\n                putExtra(activityNameKey, activityName)\n                putExtra(privatePackageKey, packageName)\n                val file = DynamicManageUtils.getDxFile(context, dldir, getDlfn(contentKey, cotd[contentKey]!!))\n                if (!file.exists()) {\n                    return\n                }\n                putExtra(pluginApkPathKey, file.absolutePath)\n            }\n            context.startActivity(intent)\n        } catch (e: Exception) {\n            e.printStackTrace()\n        }\n    }\n\n    fun getStandardActivityIntent(context: Context, contentKey: String, activityName: String, packageName: String, intentOption: Intent? = null): Intent? {\n        return getActivityIntent(context, contentKey, PluginStandardActivity, activityName, packageName, intentOption)\n    }\n\n    private fun getActivityIntent(context: Context, contentKey: String, lunchName: String, activityName: String, packageName: String, intentOption: Intent? = null): Intent? {\n        if (!cotd.containsKey(contentKey)) return null\n        val clazz = Class.forName(lunchName)\n        val intent = intentOption ?: Intent(context, clazz)\n        if (intentOption != null) {\n            intent.setClass(context, clazz)\n        }\n        intent.apply {\n            putExtra(activityNameKey, activityName)\n            putExtra(privatePackageKey, packageName)\n            val file = DynamicManageUtils.getDxFile(context, dldir, getDlfn(contentKey, cotd[contentKey]!!))\n            if (!file.exists()) {\n                return null\n            }\n            putExtra(pluginApkPathKey, file.absolutePath)\n        }\n        return intent\n    }\n\n    fun startPluginStartStickyService(context: Context, contentKey: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        startPluginService(context, contentKey, PluginStartStickyService, pluginServiceName, packageName, intentOption)\n    }\n\n    fun startPluginStartNotStickyService(context: Context, contentKey: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        startPluginService(context, contentKey, PluginStartNotStickyService, pluginServiceName, packageName, intentOption)\n    }\n\n    fun startPluginStartRedeliverIntentService(context: Context, contentKey: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        startPluginService(context, contentKey, PluginStartRedeliverIntentService, pluginServiceName, packageName, intentOption)\n    }\n\n    fun startPluginStickyCompatibilityService(context: Context, contentKey: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        startPluginService(context, contentKey, PluginStartStickyCompatibilityService, pluginServiceName, packageName, intentOption)\n    }\n\n    fun startPluginProcessStartStickyService(context: Context, contentKey: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        startPluginService(context, contentKey, PluginProcessStartStickyService, pluginServiceName, packageName, intentOption)\n    }\n\n    fun startPluginProcessStartNotStickyService(context: Context, contentKey: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        startPluginService(context, contentKey, PluginProcessStartNotStickyService, pluginServiceName, packageName, intentOption)\n    }\n\n    fun startPluginProcessStartRedeliverIntentService(context: Context, contentKey: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        startPluginService(context, contentKey, PluginProcessStartRedeliverIntentService, pluginServiceName, packageName, intentOption)\n    }\n\n    fun startPluginProcessStickyCompatibilityService(context: Context, contentKey: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        startPluginService(context, contentKey, PluginProcessStartStickyCompatibilityService, pluginServiceName, packageName, intentOption)\n    }\n\n    private fun getServiceIntent(context: Context, contentKey: String, lunchName: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null): Intent? {\n        if (!cotd.containsKey(contentKey)) return null\n        val clazz = Class.forName(lunchName)\n        val intent = intentOption ?: Intent(context, clazz)\n        if (intentOption != null) {\n            intent.setClass(context, clazz)\n        }\n        intent.apply {\n            putExtra(serviceNameKey, pluginServiceName)\n            putExtra(privatePackageKey, packageName)\n            val file = DynamicManageUtils.getDxFile(context, dldir, getDlfn(contentKey, cotd[contentKey]!!))\n            if (!file.exists()) {\n                return null\n            }\n            putExtra(pluginApkPathKey, file.absolutePath)\n        }\n        return intent\n    }\n\n    private fun startPluginService(context: Context, contentKey: String, lunchName: String, pluginServiceName: String, packageName: String, intentOption: Intent? = null) {\n        try {\n            getServiceIntent(context, contentKey, lunchName, pluginServiceName, packageName, intentOption)?.run {\n                context.startService(this)\n            }\n        } catch (e: Exception) {\n            e.printStackTrace()\n        }\n    }\n\n    fun bindStickyService(context: Context, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        bindService(context, PluginStartStickyService, contentKey, packageName, pluginServiceName, intentOption)\n    }\n\n    fun bindNotStickyService(context: Context, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        bindService(context, PluginStartNotStickyService, contentKey, packageName, pluginServiceName, intentOption)\n    }\n\n    fun bindRedeliverService(context: Context, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        bindService(context, PluginStartRedeliverIntentService, contentKey, packageName, pluginServiceName, intentOption)\n    }\n\n    fun bindCompatibilityService(context: Context, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        bindService(context, PluginStartStickyCompatibilityService, contentKey, packageName, pluginServiceName, intentOption)\n    }\n\n    fun bindProcessStickyService(context: Context, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        bindService(context, PluginProcessStartStickyService, contentKey, packageName, pluginServiceName, intentOption)\n    }\n\n    fun bindProcessNotStickyService(context: Context, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        bindService(context, PluginProcessStartNotStickyService, contentKey, packageName, pluginServiceName, intentOption)\n    }\n\n    fun bindProcessRedeliverService(context: Context, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        bindService(context, PluginProcessStartRedeliverIntentService, contentKey, packageName, pluginServiceName, intentOption)\n    }\n\n    fun bindProcessCompatibilityService(context: Context, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        bindService(context, PluginProcessStartStickyCompatibilityService, contentKey, packageName, pluginServiceName, intentOption)\n    }\n\n    private fun bindService(context: Context, hostServiceName: String, contentKey: String, packageName: String, pluginServiceName: String, intentOption: Intent? = null) {\n        android.util.Log.e(\"bindService\", \"context:${context.javaClass.name}\")\n        val connectionKey = StringBuilder(hostServiceName).append(context.javaClass.name).toString()\n        if (!mapAidl.containsKey(hostServiceName)) {\n//            val intent =\n            getServiceIntent(context, contentKey, hostServiceName, pluginServiceName, packageName, intentOption)?.let {\n                val connection = object : ServiceConnection {\n                    override fun onServiceConnected(name: ComponentName?, service: IBinder?) {\n                        val aidl = WXDynamicAidlInterface.Stub.asInterface(service)\n                        mapAidl[hostServiceName] = aidl\n                    }\n\n                    override fun onServiceDisconnected(name: ComponentName?) {\n\n                    }\n                }\n                context.bindService(it, connection, Context.BIND_AUTO_CREATE)\n                if (!mapConnection.containsKey(connectionKey)) {\n                    mapConnection[connectionKey] = connection\n                }\n                if (!mapContextPluginService.containsKey(connectionKey)) {\n                    mapContextPluginService[connectionKey] = mutableListOf(pluginServiceName)\n                }\n            }\n        } else {\n            val file = DynamicManageUtils.getDxFile(context, dldir, getDlfn(contentKey, cotd[contentKey]!!))\n            if (!file.exists()) {\n                return\n            }\n            mapAidl[hostServiceName]?.onBind(pluginServiceName, packageName, file.absolutePath)\n\n            if (!mapContextPluginService.containsKey(connectionKey)) {\n                mapContextPluginService[connectionKey] = mutableListOf(pluginServiceName)\n            } else {\n                mapContextPluginService[connectionKey]?.add(pluginServiceName)\n            }\n        }\n    }\n\n    fun unBindStickyService(context: Context) {\n        unBindService(context, PluginStartStickyService)\n    }\n\n    fun unBindNotStickyService(context: Context) {\n        unBindService(context, PluginStartNotStickyService)\n    }\n\n    fun unBindRedeliverService(context: Context) {\n        unBindService(context, PluginStartRedeliverIntentService)\n    }\n\n    fun unBindCompatibilityService(context: Context) {\n        unBindService(context, PluginStartStickyCompatibilityService)\n    }\n\n    fun unBindProcessStickyService(context: Context) {\n        unBindService(context, PluginProcessStartStickyService)\n    }\n\n    fun unBindProcessNotStickyService(context: Context) {\n        unBindService(context, PluginProcessStartNotStickyService)\n    }\n\n    fun unBindProcessRedeliverService(context: Context) {\n        unBindService(context, PluginProcessStartRedeliverIntentService)\n    }\n\n    fun unBindProcessCompatibilityService(context: Context) {\n        unBindService(context, PluginProcessStartStickyCompatibilityService)\n    }\n\n    private fun unBindService(context: Context, hostServiceName: String) {\n        val connectionKey = StringBuilder(hostServiceName).append(context.javaClass.name).toString()\n        if (mapContextPluginService.containsKey(connectionKey)) {\n            mapContextPluginService[connectionKey]?.forEach { v ->\n                if (mapAidl.containsKey(hostServiceName)) {\n                    mapAidl[hostServiceName]?.onUnbind(v)\n                    mapAidl.remove(hostServiceName)\n                }\n            }\n            mapContextPluginService.remove(connectionKey)\n        }\n        if (mapConnection.containsKey(connectionKey)) {\n            context.unbindService(mapConnection[connectionKey]!!)\n            mapConnection.remove(connectionKey)\n        }\n    }\n\n    fun onAidlStickyServiceCallBack(PluginSerViceName: String, methodID: Int) = onAidlCallBack(PluginStartStickyService, PluginSerViceName, methodID)\n    fun onAidlNotStickyServiceCallBack(PluginSerViceName: String, methodID: Int) = onAidlCallBack(PluginStartNotStickyService, PluginSerViceName, methodID)\n    fun onAidlRedeliverServiceCallBack(PluginSerViceName: String, methodID: Int) = onAidlCallBack(PluginStartRedeliverIntentService, PluginSerViceName, methodID)\n    fun onAidlCompatibilityServiceCallBack(PluginSerViceName: String, methodID: Int) = onAidlCallBack(PluginStartStickyCompatibilityService, PluginSerViceName, methodID)\n\n    fun onProcessAidlStickyServiceCallBack(PluginSerViceName: String, methodID: Int) = onAidlCallBack(PluginProcessStartStickyService, PluginSerViceName, methodID)\n    fun onProcessAidlNotStickyServiceCallBack(PluginSerViceName: String, methodID: Int) = onAidlCallBack(PluginProcessStartNotStickyService, PluginSerViceName, methodID)\n    fun onProcessAidlRedeliverServiceCallBack(PluginSerViceName: String, methodID: Int) = onAidlCallBack(PluginProcessStartRedeliverIntentService, PluginSerViceName, methodID)\n    fun onProcessAidlCompatibilityServiceCallBack(PluginSerViceName: String, methodID: Int) = onAidlCallBack(PluginProcessStartStickyCompatibilityService, PluginSerViceName, methodID)\n\n    private fun onAidlCallBack(serviceName: String, PluginSerViceName: String, methodID: Int): String {\n        if (mapAidl.containsKey(serviceName)) {\n            mapAidl[serviceName]?.let {\n                return it.onAidlCallBack(PluginSerViceName, methodID)\n            }\n        }\n        return \"\"\n    }\n\n    fun deleteOldFile() {\n        WXDynamicLoader.instance.loader.run {\n            if (hasOldFileNeedDelete()) {\n                val sbdex = StringBuilder(context.filesDir.absolutePath).apply {\n                    append(File.separator)\n                    append(dldir)\n                    append(File.separator)\n                }\n                val fileDexDir = File(sbdex.toString())\n                if (!fileDexDir.exists()) return@run\n                val oatDir = \"oat\"\n                sbdex.append(oatDir)\n                val fileDexOatDir = File(sbdex.toString())\n                val list = mutableListOf<String>()\n                getMapDluImpl().forEach {\n                    list.add(it.value.run { getDlfn(first, second) })\n                }\n                cotd.forEach {\n                    list.add(it.run { getDlfn(key, value) })\n                }\n                list.add(clmd.run { getDlfn(second, third) })\n                list.add(cdlfd.run { getDlfn(second, third) })\n                fileDexDir.listFiles()?.forEach {\n                    it?.name.let { fn ->\n                        if (versionFile != fn && oatDir != fn && !list.contains(fn)) {\n                            WLog.e(this@PluginManager, \"文件:${fn}删除 \")\n                            it.delete()\n                        }\n                    }\n                }\n                if (!fileDexOatDir.exists()) return@run\n                fileDexOatDir.listFiles()?.forEach {\n                    it?.name.let { fn ->\n                        val oat = fn?.replace(\".cur.prof\", \"\")\n                        if (versionFile != oat && !list.contains(oat)) {\n                            WLog.e(this@PluginManager, \"文件:${fn}删除 \")\n                            it.delete()\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    /**  可用来当other没有下载 加载完时候，进行等待 **/\n    fun isLoadSuccessByKey(keyDex: String, keyRes: String): Boolean {\n        var status = false\n        runBlocking {\n            status = if (WXDynamicLoader.instance.loader.isFShowLoadFlag() || cotd.isEmpty()) {\n                if (mapOtherLoadStatus.containsKey(keyDex) && mapOtherLoadStatus.containsKey(keyRes)) mapOtherLoadStatus[keyDex]!!.await() && mapOtherLoadStatus[keyRes]!!.await()\n                else false\n            } else {\n                true\n            }\n        }\n        return status\n    }\n\n    /**\n     * 按需下载 other 2,other 3 other 4,other 5 (每一个包含dex 和 res apk 2个文件)\n     * 文件须放在 FaceImpl 配置的getBaseL() 服务器目录下面即可\n     * @param context： 上下问\n     * @param dexName： dex文件民\n     * @param resApkName： resApkName文件名\n     */\n    fun dynamicLoadPlugin(context: Context, dexName: Pair<String, Int>, resApkName: Pair<String, Int>): Flow<Int> {\n        if (cotd.containsKey(dexName.first) && cotd.containsKey(resApkName.first)) {\n            return flowOf(0)\n        }\n        val loader = WXDynamicLoader.instance.loader\n        val face = loader.getDownloadFace()\n        val dexFileUrl = StringBuilder().append(face.getBaseL()).append(dexName.first).toString()\n        val resApkFileUrl = StringBuilder().append(face.getBaseL()).append(resApkName.first).toString()\n        val dynamicHelper = DynamicDownloadPlugin(face)\n        return flow {\n            dynamicHelper.initDynamicPlugin(context, dexFileUrl, dldir, getDlfn(dexName.first, dexName.second)).run {\n                cotd[dexName.first] = dexName.second\n                if (!TextUtils.isEmpty(fileAbsolutePath) && !TextUtils.isEmpty(fileAbsolutePath.trim())) {\n                    loader.initDynamicRunTime(context, contentKey, fileAbsolutePath)\n                } else {\n                    throw Exception(\"文件下载异常\")\n                }\n            }\n            emit(0)\n        }.zip(flow {\n            dynamicHelper.initDynamicPlugin(context, resApkFileUrl, dldir, getDlfn(resApkName.first, resApkName.second))\n            cotd[resApkName.first] = resApkName.second\n            emit(0)\n        }) { _, _ ->\n            return@zip 0\n        }.flowOn(Dispatchers.IO)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-Manager/src/main/java/com/wgllss/dynamic/plugin/manager/PluginResource.kt",
    "content": "package com.wgllss.dynamic.plugin.manager\n\nimport android.content.res.Resources\nimport com.wgllss.core.units.WLog\nimport java.util.concurrent.ConcurrentHashMap\n\nobject PluginResource {\n    private val mapLayout by lazy { ConcurrentHashMap<String, Resources>() }\n\n    fun getPluginResources(contentKey: String): Resources {\n        WLog.e(this, \"contentKey: $contentKey\")\n        return if (mapLayout.containsKey(contentKey) && mapLayout[contentKey] != null) {\n            mapLayout[contentKey]!!\n        } else {\n            val res = PluginManager.instance.getPluginResources(contentKey)\n            mapLayout[contentKey] = res\n            res\n        }\n    }\n\n    fun getSkinResources(): Resources {\n        return PluginManager.instance.getPluginSkinResources()\n    }\n\n    fun getWebRes(): Resources {\n        return PluginManager.instance.getWebRes()\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-Library/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-Library/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.plugin.library\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n    compileOnly libs.appcompat\n//    compileOnly libSupportAppcompat\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-Library/consumer-rules.pro",
    "content": ""
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-Library/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-Library/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.plugin.library\">\n\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-Library/src/main/java/com/wgllss/dynamic/runtime/library/WXDynamicAidlInterface.java",
    "content": "package com.wgllss.dynamic.runtime.library;\n\npublic interface WXDynamicAidlInterface extends android.os.IInterface {\n\n    class Default implements com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface {\n        @Override\n        public void onBind(java.lang.String serviceName, java.lang.String packageName, java.lang.String pluginApkPath) throws android.os.RemoteException {\n        }\n\n        @Override\n        public void onUnbind(java.lang.String serviceName) throws android.os.RemoteException {\n        }\n\n        @Override\n        public java.lang.String onAidlCallBack(java.lang.String serviceName, int methodID) throws android.os.RemoteException {\n            return null;\n        }\n\n        @Override\n        public android.os.IBinder asBinder() {\n            return null;\n        }\n    }\n\n    abstract class Stub extends android.os.Binder implements com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface {\n        private static final java.lang.String DESCRIPTOR = \"com.wgllss.dynamic.plugin.runtime.WXDynamicAidlInterface\";\n\n        public Stub() {\n            this.attachInterface(this, DESCRIPTOR);\n        }\n\n        public static com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface asInterface(android.os.IBinder obj) {\n            if ((obj == null)) {\n                return null;\n            }\n            android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);\n            if (((iin != null) && (iin instanceof com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface))) {\n                return ((com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface) iin);\n            }\n            return new com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface.Stub.Proxy(obj);\n        }\n\n        @Override\n        public android.os.IBinder asBinder() {\n            return this;\n        }\n\n        @Override\n        public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException {\n            java.lang.String descriptor = DESCRIPTOR;\n            switch (code) {\n                case INTERFACE_TRANSACTION: {\n                    reply.writeString(descriptor);\n                    return true;\n                }\n                case TRANSACTION_onBind: {\n                    data.enforceInterface(descriptor);\n                    java.lang.String _arg0;\n                    _arg0 = data.readString();\n                    java.lang.String _arg1;\n                    _arg1 = data.readString();\n                    java.lang.String _arg2;\n                    _arg2 = data.readString();\n                    this.onBind(_arg0, _arg1, _arg2);\n                    reply.writeNoException();\n                    return true;\n                }\n                case TRANSACTION_onUnbind: {\n                    data.enforceInterface(descriptor);\n                    java.lang.String _arg0;\n                    _arg0 = data.readString();\n                    this.onUnbind(_arg0);\n                    reply.writeNoException();\n                    return true;\n                }\n                case TRANSACTION_onAidlCallBack: {\n                    data.enforceInterface(descriptor);\n                    java.lang.String _arg0;\n                    _arg0 = data.readString();\n                    int _arg1;\n                    _arg1 = data.readInt();\n                    java.lang.String _result = this.onAidlCallBack(_arg0, _arg1);\n                    reply.writeNoException();\n                    reply.writeString(_result);\n                    return true;\n                }\n                default: {\n                    return super.onTransact(code, data, reply, flags);\n                }\n            }\n        }\n\n        private static class Proxy implements com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface {\n            private android.os.IBinder mRemote;\n\n            Proxy(android.os.IBinder remote) {\n                mRemote = remote;\n            }\n\n            @Override\n            public android.os.IBinder asBinder() {\n                return mRemote;\n            }\n\n            public java.lang.String getInterfaceDescriptor() {\n                return DESCRIPTOR;\n            }\n\n            @Override\n            public void onBind(java.lang.String serviceName, java.lang.String packageName, java.lang.String pluginApkPath) throws android.os.RemoteException {\n                android.os.Parcel _data = android.os.Parcel.obtain();\n                android.os.Parcel _reply = android.os.Parcel.obtain();\n                try {\n                    _data.writeInterfaceToken(DESCRIPTOR);\n                    _data.writeString(serviceName);\n                    _data.writeString(packageName);\n                    _data.writeString(pluginApkPath);\n                    boolean _status = mRemote.transact(Stub.TRANSACTION_onBind, _data, _reply, 0);\n                    if (!_status && getDefaultImpl() != null) {\n                        getDefaultImpl().onBind(serviceName, packageName, pluginApkPath);\n                        return;\n                    }\n                    _reply.readException();\n                } finally {\n                    _reply.recycle();\n                    _data.recycle();\n                }\n            }\n\n            @Override\n            public void onUnbind(java.lang.String serviceName) throws android.os.RemoteException {\n                android.os.Parcel _data = android.os.Parcel.obtain();\n                android.os.Parcel _reply = android.os.Parcel.obtain();\n                try {\n                    _data.writeInterfaceToken(DESCRIPTOR);\n                    _data.writeString(serviceName);\n                    boolean _status = mRemote.transact(Stub.TRANSACTION_onUnbind, _data, _reply, 0);\n                    if (!_status && getDefaultImpl() != null) {\n                        getDefaultImpl().onUnbind(serviceName);\n                        return;\n                    }\n                    _reply.readException();\n                } finally {\n                    _reply.recycle();\n                    _data.recycle();\n                }\n            }\n\n            @Override\n            public java.lang.String onAidlCallBack(java.lang.String serviceName, int methodID) throws android.os.RemoteException {\n                android.os.Parcel _data = android.os.Parcel.obtain();\n                android.os.Parcel _reply = android.os.Parcel.obtain();\n                java.lang.String _result;\n                try {\n                    _data.writeInterfaceToken(DESCRIPTOR);\n                    _data.writeString(serviceName);\n                    _data.writeInt(methodID);\n                    boolean _status = mRemote.transact(Stub.TRANSACTION_onAidlCallBack, _data, _reply, 0);\n                    if (!_status && getDefaultImpl() != null) {\n                        return getDefaultImpl().onAidlCallBack(serviceName, methodID);\n                    }\n                    _reply.readException();\n                    _result = _reply.readString();\n                } finally {\n                    _reply.recycle();\n                    _data.recycle();\n                }\n                return _result;\n            }\n\n            public static com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface sDefaultImpl;\n        }\n\n        static final int TRANSACTION_onBind = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);\n        static final int TRANSACTION_onUnbind = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);\n        static final int TRANSACTION_onAidlCallBack = (android.os.IBinder.FIRST_CALL_TRANSACTION + 2);\n\n        public static boolean setDefaultImpl(com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface impl) {\n            if (Stub.Proxy.sDefaultImpl != null) {\n                throw new IllegalStateException(\"setDefaultImpl() called twice\");\n            }\n            if (impl != null) {\n                Stub.Proxy.sDefaultImpl = impl;\n                return true;\n            }\n            return false;\n        }\n\n        public static com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface getDefaultImpl() {\n            return Stub.Proxy.sDefaultImpl;\n        }\n    }\n\n    void onBind(java.lang.String serviceName, java.lang.String packageName, java.lang.String pluginApkPath) throws android.os.RemoteException;\n\n    void onUnbind(java.lang.String serviceName) throws android.os.RemoteException;\n\n    java.lang.String onAidlCallBack(java.lang.String serviceName, int methodID) throws android.os.RemoteException;\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-Library/src/main/java/com/wgllss/dynamic/runtime/library/WXHostActivityDelegate.java",
    "content": "package com.wgllss.dynamic.runtime.library;\n\nimport android.content.res.Configuration;\nimport android.content.res.Resources;\nimport android.os.Bundle;\n\nimport androidx.activity.ComponentActivity;\nimport androidx.annotation.NonNull;\nimport androidx.fragment.app.FragmentActivity;\n\npublic interface WXHostActivityDelegate {\n\n    void attachContext(FragmentActivity context, Resources resources);\n\n    void attachContext(ComponentActivity context, Resources resources);\n\n    void onCreate(Bundle savedInstanceState);\n\n    void onRestart();\n\n    void onStart();\n\n    void onResume();\n\n    void onPause();\n\n    void onStop();\n\n    void onDestroy();\n\n    void lazyInitValue();\n\n    void onSaveInstanceState(Bundle outState);\n\n    void onConfigurationChanged(Configuration newConfig);\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-Library/src/main/java/com/wgllss/dynamic/runtime/library/WXHostServiceDelegate.java",
    "content": "package com.wgllss.dynamic.runtime.library;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.os.IBinder;\n\npublic interface WXHostServiceDelegate {\n\n    void attachBaseContext(Context newBase);\n\n    IBinder onBind(Intent intent);\n\n    void onCreate();\n\n    void onStart(Intent intent, int startId);\n\n    int onStartCommand(Intent intent, int flags, int startId);\n\n    boolean onUnbind(Intent intent);\n\n    void onDestroy();\n\n    String callMethodByID(int methodID);\n\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-Library/src/test/java/com/wgllss/plugin/library/ExampleUnitTest.kt",
    "content": "package com.wgllss.plugin.library\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\nclass ExampleUnitTest {\n    @Test\n    fun addition_isCorrect() {\n        assertEquals(4, 2 + 2)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.dynamic.plugin.runtime'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.dynamic.plugin.runtime\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        release {\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all { variant ->\n            variant.outputs.all {\n                outputFileName = \"classes_wgllss_dynamic_plugin_runtime\"\n            }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    lintOptions {\n        abortOnError false\n    }\n}\n\ndependencies {\n    compileOnly libs.appcompat\n//    compileOnly libSupportAppcompat\n    implementation project(':Maven-Wgllss-Dynamic-Plugin-Library')\n    compileOnly project(path: ':Maven-Wgllss-Dynamic-Plugin-Common-Library')\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-ClassLoader-Lib:1.0.0.7'\n    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Lib:1.0.02'\n}\n\n\ndef createCopyTask(assembleReleaseTask, buildType) {\n    def inputFile = file(\"${getProject().getBuildDir()}/outputs/apk/release/classes_wgllss_dynamic_plugin_runtime\")\n    def outputFile = file(\"${rootProject.getBuildDir()}/classes_wgllss_dynamic_plugin_runtime\")\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    return tasks.create(\"assembleCopy\", Copy) {\n        group = 'other'\n        description = \"复制json到 指定输出目录\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(assembleReleaseTask.name)\n}\n\ntasks.whenTaskAdded { task ->\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(task, \"release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/consumer-rules.pro",
    "content": ""
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.plugin.runtime\">\n\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/HostComposePluginActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\nimport android.content.Context;\nimport android.content.pm.ApplicationInfo;\nimport android.content.pm.PackageInfo;\nimport android.content.pm.PackageManager;\nimport android.content.res.Configuration;\nimport android.content.res.Resources;\nimport android.graphics.Color;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.view.View;\nimport android.view.WindowManager;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\n\nimport com.wgllss.core.activity.compose.BaseComposeActivity;\nimport com.wgllss.dynamic.host.lib.classloader.PluginKey;\nimport com.wgllss.dynamic.runtime.library.WXHostActivityDelegate;\n\nimport java.io.File;\n\npublic class HostComposePluginActivity extends BaseComposeActivity {\n    private PluginClassLoader pluginDexClassLoader;\n    private Resources pluginResources;\n    private WXHostActivityDelegate mHostDelegate;\n    private String skinPackageName;\n    private boolean isFirst = true;\n\n    private String pluginApkPath = \"\";\n    private String activityName = \"\";\n    private String privatePackage = \"\";\n\n    @Override\n    protected void onSaveInstanceState(@NonNull Bundle outState) {\n        super.onSaveInstanceState(outState);\n        outState.putString(PluginKey.pluginApkPathKey, pluginApkPath);\n        outState.putString(PluginKey.activityNameKey, activityName);\n        outState.putString(PluginKey.privatePackageKey, privatePackage);\n        if (mHostDelegate != null) mHostDelegate.onSaveInstanceState(outState);\n    }\n\n    @Override\n    protected void onCreate(@Nullable Bundle savedInstanceState) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {\n            //适配刘海屏\n            WindowManager.LayoutParams lp = getWindow().getAttributes();\n            lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;\n            getWindow().setAttributes(lp);\n        }\n        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);\n        getWindow().setStatusBarColor(Color.TRANSPARENT);\n        super.onCreate(savedInstanceState);\n        if (savedInstanceState == null) {\n            if (getIntent() != null) {\n                pluginApkPath = getIntent().getStringExtra(PluginKey.pluginApkPathKey);\n                activityName = getIntent().getStringExtra(PluginKey.activityNameKey);\n                privatePackage = getIntent().getStringExtra(PluginKey.privatePackageKey);\n            } else {\n                throw new RuntimeException(\"There are no pluginApkPath, activityName, or privatePackage parameters in the intent\");\n            }\n        } else {\n            pluginApkPath = savedInstanceState.getString(PluginKey.pluginApkPathKey);\n            activityName = savedInstanceState.getString(PluginKey.activityNameKey);\n            privatePackage = savedInstanceState.getString(PluginKey.privatePackageKey);\n        }\n        new File(pluginApkPath).setReadOnly();\n        new File(getDir(\"dex\", Context.MODE_PRIVATE).getAbsolutePath()).setReadOnly();\n        pluginDexClassLoader = new PluginClassLoader(privatePackage, pluginApkPath, getDir(\"dex\", Context.MODE_PRIVATE).getAbsolutePath(), null, getClassLoader());\n        int flags = (PackageManager.GET_META_DATA | PackageManager.GET_ACTIVITIES | PackageManager.GET_SERVICES\n                | PackageManager.GET_PROVIDERS | PackageManager.GET_RECEIVERS);\n        PackageManager packageManager = getApplicationContext().getPackageManager();\n        PackageInfo packageInfo = packageManager.getPackageArchiveInfo(pluginApkPath, flags);\n        ApplicationInfo applicationInfo = packageInfo.applicationInfo;\n        applicationInfo.sourceDir = pluginApkPath;\n        applicationInfo.publicSourceDir = pluginApkPath;\n        try {\n            pluginResources = packageManager.getResourcesForApplication(applicationInfo);\n            skinPackageName = applicationInfo.packageName;\n\n            mHostDelegate = pluginDexClassLoader.getInterface(WXHostActivityDelegate.class, activityName);\n            mHostDelegate.attachContext(this, pluginResources);\n            mHostDelegate.onCreate(savedInstanceState);\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n\n    @Override\n    protected void onRestart() {\n        super.onRestart();\n        if (mHostDelegate != null) mHostDelegate.onRestart();\n    }\n\n    @Override\n    protected void onStart() {\n        super.onStart();\n        if (mHostDelegate != null) mHostDelegate.onStart();\n    }\n\n    @Override\n    protected void onResume() {\n        super.onResume();\n        if (mHostDelegate != null) mHostDelegate.onResume();\n    }\n\n    @Override\n    protected void onPause() {\n        super.onPause();\n        if (mHostDelegate != null) mHostDelegate.onPause();\n    }\n\n    @Override\n    protected void onStop() {\n        super.onStop();\n        if (mHostDelegate != null) mHostDelegate.onStop();\n    }\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n        if (mHostDelegate != null) mHostDelegate.onDestroy();\n    }\n\n    @Override\n    public void onWindowFocusChanged(boolean hasFocus) {\n        super.onWindowFocusChanged(hasFocus);\n        if (hasFocus) {\n            if (isFirst) {\n                isFirst = false;\n                if (mHostDelegate != null) mHostDelegate.lazyInitValue();\n            }\n        }\n    }\n\n    @Override\n    public void onConfigurationChanged(@NonNull Configuration newConfig) {\n        super.onConfigurationChanged(newConfig);\n        if (mHostDelegate != null) mHostDelegate.onConfigurationChanged(newConfig);\n    }\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/HostPluginActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\nimport android.content.Context;\nimport android.content.pm.ApplicationInfo;\nimport android.content.pm.PackageInfo;\nimport android.content.pm.PackageManager;\nimport android.content.res.Configuration;\nimport android.content.res.Resources;\nimport android.graphics.Color;\nimport android.os.Build;\nimport android.os.Bundle;\nimport android.view.View;\nimport android.view.WindowManager;\n\nimport androidx.annotation.NonNull;\nimport androidx.annotation.Nullable;\nimport androidx.core.view.MenuProvider;\nimport androidx.lifecycle.Lifecycle;\nimport androidx.lifecycle.LifecycleOwner;\n\nimport com.wgllss.core.activity.BaseActivity;\nimport com.wgllss.dynamic.host.lib.classloader.PluginKey;\nimport com.wgllss.dynamic.runtime.library.WXHostActivityDelegate;\n\nimport java.io.File;\n\npublic class HostPluginActivity extends BaseActivity {\n    private PluginClassLoader pluginDexClassLoader;\n    private Resources pluginResources;\n    private WXHostActivityDelegate mHostDelegate;\n    private String skinPackageName;\n    private boolean isFirst = true;\n\n    private String pluginApkPath = \"\";\n    private String activityName = \"\";\n    private String privatePackage = \"\";\n\n    @Override\n    protected void onSaveInstanceState(@NonNull Bundle outState) {\n        super.onSaveInstanceState(outState);\n        outState.putString(PluginKey.pluginApkPathKey, pluginApkPath);\n        outState.putString(PluginKey.activityNameKey, activityName);\n        outState.putString(PluginKey.privatePackageKey, privatePackage);\n        if (mHostDelegate != null) mHostDelegate.onSaveInstanceState(outState);\n    }\n\n    @Override\n    protected void onCreate(@Nullable Bundle savedInstanceState) {\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {\n            //适配刘海屏\n            WindowManager.LayoutParams lp = getWindow().getAttributes();\n            lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;\n            getWindow().setAttributes(lp);\n        }\n        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);\n        getWindow().setStatusBarColor(Color.TRANSPARENT);\n        super.onCreate(savedInstanceState);\n        if (savedInstanceState == null) {\n            if (getIntent() != null) {\n                pluginApkPath = getIntent().getStringExtra(PluginKey.pluginApkPathKey);\n                activityName = getIntent().getStringExtra(PluginKey.activityNameKey);\n                privatePackage = getIntent().getStringExtra(PluginKey.privatePackageKey);\n            } else {\n                throw new RuntimeException(\"There are no pluginApkPath, activityName, or privatePackage parameters in the intent\");\n            }\n        } else {\n            pluginApkPath = savedInstanceState.getString(PluginKey.pluginApkPathKey);\n            activityName = savedInstanceState.getString(PluginKey.activityNameKey);\n            privatePackage = savedInstanceState.getString(PluginKey.privatePackageKey);\n        }\n        new File(pluginApkPath).setReadOnly();\n        new File(getDir(\"dex\", Context.MODE_PRIVATE).getAbsolutePath()).setReadOnly();\n        pluginDexClassLoader = new PluginClassLoader(privatePackage, pluginApkPath, getDir(\"dex\", Context.MODE_PRIVATE).getAbsolutePath(), null, getClassLoader());\n        int flags = (PackageManager.GET_META_DATA | PackageManager.GET_ACTIVITIES | PackageManager.GET_SERVICES | PackageManager.GET_PROVIDERS | PackageManager.GET_RECEIVERS);\n        PackageManager packageManager = getApplicationContext().getPackageManager();\n        PackageInfo packageInfo = packageManager.getPackageArchiveInfo(pluginApkPath, flags);\n        ApplicationInfo applicationInfo = packageInfo.applicationInfo;\n        applicationInfo.sourceDir = pluginApkPath;\n        applicationInfo.publicSourceDir = pluginApkPath;\n        try {\n            pluginResources = packageManager.getResourcesForApplication(applicationInfo);\n            skinPackageName = applicationInfo.packageName;\n\n            mHostDelegate = pluginDexClassLoader.getInterface(WXHostActivityDelegate.class, activityName);\n            mHostDelegate.attachContext(this, pluginResources);\n            mHostDelegate.onCreate(savedInstanceState);\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n\n    @Override\n    protected void onRestart() {\n        super.onRestart();\n        if (mHostDelegate != null) mHostDelegate.onRestart();\n    }\n\n    @Override\n    protected void onStart() {\n        super.onStart();\n        if (mHostDelegate != null) mHostDelegate.onStart();\n    }\n\n    @Override\n    protected void onResume() {\n        super.onResume();\n        if (mHostDelegate != null) mHostDelegate.onResume();\n    }\n\n    @Override\n    protected void onPause() {\n        super.onPause();\n        if (mHostDelegate != null) mHostDelegate.onPause();\n    }\n\n    @Override\n    protected void onStop() {\n        super.onStop();\n        if (mHostDelegate != null) mHostDelegate.onStop();\n    }\n\n    @Override\n    protected void onDestroy() {\n        super.onDestroy();\n        if (mHostDelegate != null) mHostDelegate.onDestroy();\n    }\n\n    @Override\n    public void onWindowFocusChanged(boolean hasFocus) {\n        super.onWindowFocusChanged(hasFocus);\n        if (hasFocus) {\n            if (isFirst) {\n                isFirst = false;\n                if (mHostDelegate != null)\n                    mHostDelegate.lazyInitValue();\n            }\n        }\n    }\n\n    @Override\n    public void onPointerCaptureChanged(boolean hasCapture) {\n        super.onPointerCaptureChanged(hasCapture);\n    }\n\n    @Override\n    public void onConfigurationChanged(@NonNull Configuration newConfig) {\n        super.onConfigurationChanged(newConfig);\n        if (mHostDelegate != null) mHostDelegate.onConfigurationChanged(newConfig);\n    }\n\n    @Override\n    public void initControl(Bundle savedInstanceState) {\n\n    }\n\n    @Override\n    public void bindEvent() {\n\n    }\n\n    @Override\n    public void initValue() {\n\n    }\n\n    @Override\n    public void addMenuProvider(@NonNull MenuProvider provider, @NonNull LifecycleOwner owner, @NonNull Lifecycle.State state) {\n\n    }\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/HostPluginService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\nimport android.app.Service;\nimport android.content.Context;\nimport android.content.Intent;\nimport android.os.IBinder;\nimport android.os.RemoteException;\n\nimport androidx.annotation.Nullable;\n\nimport com.wgllss.dynamic.host.lib.classloader.PluginKey;\nimport com.wgllss.dynamic.runtime.library.WXDynamicAidlInterface;\nimport com.wgllss.dynamic.runtime.library.WXHostServiceDelegate;\n\nimport java.io.File;\nimport java.util.HashMap;\nimport java.util.LinkedHashMap;\n\npublic abstract class HostPluginService extends Service {\n\n    private PluginClassLoader pluginDexClassLoader;\n    private HashMap<String, WXHostServiceDelegate> map;\n\n    @Nullable\n    @Override\n    public IBinder onBind(Intent intent) {\n        initPluginService(intent, true);\n        return new WXDynamicAidlInterface.Stub() {\n\n            @Override\n            public void onBind(String serviceName, String packageName, String pluginApkPath) throws RemoteException {\n                android.util.Log.e(\"HostPluginService\", \"onBind(String serviceName):\" + serviceName + \"packageName:\" + packageName + \"pluginApkPath:\" + pluginApkPath);\n                initPluginService(new Intent().putExtra(PluginKey.serviceNameKey, serviceName).putExtra(PluginKey.privatePackageKey, packageName).putExtra(PluginKey.pluginApkPathKey, pluginApkPath), true);\n            }\n\n            @Override\n            public void onUnbind(String serviceName) throws RemoteException {\n                HostPluginService.this.onUnbind(new Intent().putExtra(PluginKey.serviceNameKey, serviceName));\n            }\n\n            @Override\n            public String onAidlCallBack(String serviceName, int methodID) throws RemoteException {\n                if (map != null && map.containsKey(serviceName)) {\n                    return map.get(serviceName).callMethodByID(methodID);\n                }\n                return null;\n            }\n        };\n    }\n\n    @Override\n    public void onCreate() {\n        super.onCreate();\n    }\n\n    @Override\n    public void onStart(Intent intent, int startId) {\n        if (map != null) {\n            for (WXHostServiceDelegate service : map.values()) {\n                if (service != null) service.onStart(intent, startId);\n            }\n        }\n        super.onStart(intent, startId);\n    }\n\n    @Override\n    public int onStartCommand(Intent intent, int flags, int startId) {\n        initPluginService(intent, false);\n        String serviceName = intent.getStringExtra(PluginKey.serviceNameKey);\n        if (map.containsKey(serviceName) && map.get(serviceName) != null) {\n            map.get(serviceName).onStartCommand(intent, flags, startId);\n            map.get(serviceName).onStart(intent, startId);\n        }\n        return onStartCommand();\n    }\n\n    public abstract int onStartCommand();\n\n    @Override\n    public boolean onUnbind(Intent intent) {\n        String serviceName = intent.getStringExtra(PluginKey.serviceNameKey);\n        if (map.containsKey(serviceName)) {\n            map.get(serviceName).onUnbind(intent);\n            map.remove(serviceName);\n            String bindKey = new StringBuilder(serviceName).append(\"_bind\").toString();\n            map.remove(bindKey);\n        }\n        return super.onUnbind(intent);\n    }\n\n    @Override\n    public void onDestroy() {\n        if (map != null) {\n            for (WXHostServiceDelegate service : map.values()) {\n                if (service != null) service.onDestroy();\n            }\n        }\n        super.onDestroy();\n    }\n\n    private void initPluginService(Intent intent, boolean isOnBind) {\n        try {\n            if (map == null) {\n                map = new LinkedHashMap();\n            }\n            if (intent != null) {\n                String serviceName = intent.getStringExtra(PluginKey.serviceNameKey);\n                if (!map.containsKey(serviceName)) {\n                    String pluginApkPath = intent.getStringExtra(PluginKey.pluginApkPathKey);\n                    String privatePackage = intent.getStringExtra(PluginKey.privatePackageKey);\n                    new File(pluginApkPath).setReadOnly();\n                    new File(getDir(\"dex\", Context.MODE_PRIVATE).getAbsolutePath()).setReadOnly();\n                    pluginDexClassLoader = new PluginClassLoader(privatePackage, pluginApkPath, getDir(\"dex\", Context.MODE_PRIVATE).getAbsolutePath(), null, getClassLoader());\n                    WXHostServiceDelegate serviceDelegate = pluginDexClassLoader.getInterface(WXHostServiceDelegate.class, serviceName);\n                    serviceDelegate.attachBaseContext(this);\n                    serviceDelegate.onCreate();\n                    map.put(serviceName, serviceDelegate);\n                }\n                String bindKey = new StringBuilder(serviceName).append(\"_bind\").toString();\n                if (isOnBind && !map.containsKey(bindKey)) {\n                    map.get(serviceName).onBind(intent);\n                    map.put(bindKey, null);\n                }\n            }\n        } catch (Exception e) {\n            e.printStackTrace();\n        }\n    }\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginClassLoader.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\n\nimport com.wgllss.dynamic.host.lib.classloader.WXClassLoader;\n\npublic class PluginClassLoader extends WXClassLoader {\n    private String privatePackage;\n\n    public PluginClassLoader(String privatePackage, String dexPath, String optimizedDirectory, String librarySearchPath, ClassLoader parent) {\n        super(dexPath, optimizedDirectory, librarySearchPath, parent);\n        this.privatePackage = privatePackage;\n    }\n\n    @Override\n    public Class<?> loadClass(String className) throws ClassNotFoundException {\n        if (!className.contains(privatePackage)) {\n            return parent.loadClass(className);\n        }\n        Class clazz = findLoadedClass(className);\n        if (clazz == null) {\n            try {\n                clazz = findClass(className);\n            } catch (ClassNotFoundException e) {\n            }\n            if (clazz == null) {\n                try {\n                    clazz = super.loadClass(className);\n                } catch (ClassNotFoundException e) {\n                    clazz = parent.loadClass(className);\n                }\n            }\n        }\n        return clazz;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartNotStickyService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginProcessStartNotStickyService extends HostPluginService {\n\n    @Override\n    public int onStartCommand() {\n        return START_NOT_STICKY;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartRedeliverIntentService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginProcessStartRedeliverIntentService extends HostPluginService {\n\n    @Override\n    public int onStartCommand() {\n        return START_REDELIVER_INTENT;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartStickyCompatibilityService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginProcessStartStickyCompatibilityService extends HostPluginService {\n\n    @Override\n    public int onStartCommand() {\n        return START_STICKY_COMPATIBILITY;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginProcessStartStickyService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginProcessStartStickyService extends HostPluginService {\n\n    @Override\n    public int onStartCommand() {\n        return START_STICKY;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleInstanceActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleInstanceActivity extends HostPluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleInstanceComposeActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleInstanceComposeActivity extends HostComposePluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTaskActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleTaskActivity extends HostPluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTaskComposeActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleTaskComposeActivity extends HostComposePluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTopActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleTopActivity extends HostPluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginSingleTopComposeActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginSingleTopComposeActivity extends HostComposePluginActivity {\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStandardActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStandardActivity extends HostPluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStandardComposeActivity.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStandardComposeActivity extends HostComposePluginActivity{\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartNotStickyService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStartNotStickyService extends HostPluginService {\n\n    @Override\n    public int onStartCommand() {\n        return START_NOT_STICKY;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartRedeliverIntentService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStartRedeliverIntentService extends HostPluginService {\n\n    @Override\n    public int onStartCommand() {\n        return START_REDELIVER_INTENT;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartStickyCompatibilityService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStartStickyCompatibilityService extends HostPluginService {\n\n    @Override\n    public int onStartCommand() {\n        return START_STICKY_COMPATIBILITY;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/main/java/com/wgllss/dynamic/plugin/runtime/PluginStartStickyService.java",
    "content": "package com.wgllss.dynamic.plugin.runtime;\n\npublic class PluginStartStickyService extends HostPluginService {\n\n    @Override\n    public int onStartCommand() {\n        return START_STICKY;\n    }\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk/src/test/java/com/wgllss/dynamic/runtime/ExampleUnitTest.kt",
    "content": "package com.wgllss.dynamic.runtime\n\nimport org.junit.Test\n\nimport org.junit.Assert.*\n\n/**\n * Example local unit test, which will execute on the development machine (host).\n *\n * See [testing documentation](http://d.android.com/tools/testing).\n */\nclass ExampleUnitTest {\n    @Test\n    fun addition_isCorrect() {\n        assertEquals(4, 2 + 2)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/README.md",
    "content": "# WXDynamicPlugin的 WX-Plugin 工程介绍\n#### 注意：需要配置ANT 编译环境 \n* **AS设置JDK 选11 打开工程下 local.properties**\n#####  以下为我本地电脑配置，需要添加一行下面一句，并改成自己电脑配置:\n\n```\n workingDirPath=D\\:\\\\android_software\\\\android_sdk\\\\android_sdk\\\\build-tools\\\\32.0.0\\\\\n```\n## 项目工程目录截图\n\n<img src=\"https://gitee.com/wgllss888/WXDynamicPlugin/raw/master/WX-Resource/wx-pic/project_img.png\" width=\"331\" height=\"631\"/>\n\n## 项目工程目录介绍\n\n| 文件夹                     | 介绍                  | 接入方式                 | \n|-------------------------|---------------------|----------------------|\n| WX-Code                 | 示例工程全源码级接入方式        | 接入方式一：依赖host模块工程     |   \n| WX-Dynamic-Host-SDK-Lib | 宿主工程所依赖的lib工程源码     |                      |       \n| WX-Maven                | 示例工程maven依赖仓库方式接入工程 | 接入方式二：maven引入host包 |    \n\n* **特别说明**：WX-Code 和 WX-Maven 下实际代码内容一样，目录结构一样，唯一区别接入全动态host代码方式不一样，另外WX-Maven 下所有文件夹和项目工程名多了 maven前缀，用于在同一工程下区分成 2个不同的项目\n\n#### 推荐用方式二： Maven接入方式\n\n#### 以 WX-Maven下目录结构介绍为例：\n\n#### WX-Host:   下面全部为host宿主项目代码\n\n&emsp;&emsp;sample:  host宿主真实工程app\n\n##### &emsp;&emsp;sample-lib:  下面为宿主工程依赖的4个工程模块\n\n&emsp;&emsp;&emsp;&emsp;maven-wgllss-business-re-library:涉及到app的公共业务带res资源的模块lib       \n&emsp;&emsp;&emsp;&emsp;maven-wgllss-common-re-library:涉及到公共代码带res资源的模块lib        \n&emsp;&emsp;&emsp;&emsp;maven-wgllss-dynamic-host-library:宿主里manifest注册所必备的四大组件等lib          \n&emsp;&emsp;&emsp;&emsp;maven-wgllss-dynamic-host-skin-resource-lib:宿主所必须的资源样式主题等lib\n\n#### WX-Plugin:  该文件夹下面的所有工程都是插件的形式，不存在宿主里面\n\n&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin-Common-Library:  插件中公共代码    \n&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin-Generate:  插件中打包所用的apt工程   \n&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin-Manager:  插件中管理插件，管理动态代码的3个工程   \n&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin-Sample:  插件中真正业务代码插件工程   \n&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin-SDK:  插件框架四大组件SDK代码，以插件形式存在  \n&emsp;&emsp;Maven-Wgllss-Dynamic-Plugin_Skin:  插件中换皮肤资源\n\n### WX-Resource: 为项目已经打包好的插件，so,皮肤包文件等 存放的文件夹\n\n#### 上面介绍 直接 run运行 ,打开app 进入宿主，直接下载的插件 为我已经放在准好的服务器上面了\n\n&emsp;&emsp;可以通过源码工程自行打包，上传到自己的服务器上部署，方法如下:  \n&emsp;&emsp;找到 WX/WX-Maven/WX-Host/sample/ com.wgllss.dynamic.host.FaceImpl\n\n```\n  //    override fun getHostL() = \"http://192.168.3.21:8080/assets/WXDynamicPlugin/\"\n//    override fun getHostL() = \"http://192.168.1.9:8080/assets/WXDynamicPlugin/\"\n    //todo 自己本地搭一个服务器，或者 自己服务器 或者 像我一样在gitee上面在自己的项目下建一个文件当作服务器 供下载,\n    // 切记不要往往我的 gitee 项目上面推\n    override fun getHostL() = \"https://gitee.com/wgllss888/WXDynamicPlugin/raw/master/WX-Resource/\"\n\n    /** 0:WXDynamicPlugin 动态化插件框架 理论上已经做到了可以完全不动宿主,但是如果一定要动宿主 可以提供以下思路:\n     *  1:可以根据 宿主版本号得到 宿主版本支持的 的插件,\n     *  2:当宿主必须 需要升级时,升级后原版本的插件不可用了，插件配置在新宿主版本文件夹下面，原宿主版本文件夹可可以先动态配置 在启动页 升级下载新的宿主\n     *  @example  宿主版本 10000 版本支持的插件 放在服务端 WXDynamicPlugin/10000/ 文件夹下  20000版本的插件放在 WXDynamicPlugin/20000/下面\n     */\n    override fun getBaseL(): String {\n        if (TextUtils.isEmpty(baseXL)) {\n            baseXL = StringBuilder().append(getHostL()).append(DeviceIdUtil.getDeviceId()).append(\"/\").append(BuildConfig.VERSION_CODE).append(\"/\").toString()\n        }\n        return baseXL\n    }\n```\n\n&emsp;&emsp;修改 getHostL() 地址为自己服务器地址, 修改 getBaseL() 中主要路劲,确保修改后地址可以访问通  \n&emsp;&emsp;然后将打包好的14个文件 放入getHostL()+getBaseL() 服务器文件夹下面  \n&emsp;&emsp;该 14个文件打包如下:  \n<img src=\"https://gitee.com/wgllss888/WXDynamicPlugin/raw/master/WX-Resource/wx-pic/createfile.jpeg\" width=\"628\" height=\"277\"/>\n\n&emsp;&emsp;点击 assembleCreateAllFileRelease 等待 14个文件生成 ，一次不行，再次点击执行命令  \n&emsp;&emsp;14个文件生成在以下目录:可以拷贝到自己的服务器上面供下载:即上面修改的 getHostL()+getBaseL() 服务器文件夹下面  ,同时把我准备的WX-Resource/so 文件夹和 WX-Resource/skins 文件夹拷贝过去，这是供sample 工程演示所用的，另外皮肤资源包多个apk文件也可以自行通过源码工程打包  \n<img src=\"https://gitee.com/wgllss888/WXDynamicPlugin/raw/master/WX-Resource/wx-pic/14file.jpg\" width=\"610\" height=\"260\"/>\n\n## 插件设计详解 (以WX-Maven为例)\n\n\n* **app 公共代码库插件模块** (Maven-Wgllss-Dynamic-Plugin-Common-Library):设计成插件下载，该模块内代码理论上可以很多app 来依赖，公司内A,B,C,D等app 都可以依赖，其他公司的app也可用的\n\n#### Maven-Wgllss-Dynamic-Plugin-Sample 真正插件app 下需要实现代码模块\n* **app 公共业务代码库插件模块** (maven-wgllss-sample-business-library):设计成插件下载，该模块内代码为一个app内公用的业务逻辑，比如服务类业务代码，很多地方调用，某些接口，很多地方调用等，公司内整体一套网络传输数据加密 token的设计\n* **app Assets资源插件模块** (maven-wgllss-sample-assets-source-apk):设计成插件下载，该模块内代码为app内用到的assets下存放资源\n* **app 皮肤插件模块** (maven-wgllss-sample-skin-resource-apk):设计成插件下载，该模块内代码全是皮肤资源，如图片，颜色，也可含有多语言String 下资源\n* **app 启动页插件模块** (maven-wgllss-sample-ui-loading):设计成插件下载，首次打开app展示的启动页面，在该页面停留，下载其他插件\n* **app 首页插件模块** (maven-wgllss-sample-ui-home):设计成插件下载，app主页面，为了提高启动速度，启动页面只有展示一屏的代码，像首页HomeActivity的第2,3,4...等tab下fragment则不在该模块中\n* **app 首页之外fragment插件模块** (maven-wgllss-sample-ui-other-lib):设计成插件下载，除开首页HomActivity maven-wgllss-sample-ui-home中存在的之外的 该Homactivity 持有的fragment相关代码\n* **app 首页之外fragment布局资源插件模块** (maven-wgllss-sample-ui-other):设计成插件下载，maven-wgllss-sample-ui-other-lib对应的相关布局资源\n* **app 首页之外的Activity插件模块** (maven-wgllss-sample-ui-other2-lib2):设计成插件下载，除开首页HomActivity 之外其他activity 模块代码\n* **app 首页之外的Activity插件模块布局资源** (maven-wgllss-sample-ui-other2):设计成插件下载，maven-wgllss-sample-ui-other2-lib2 模块对应的布局资源\n* **app 各个插件版本模块** (maven-wgllss-sample-loader-version):设计成插件下载，各个插件版本配置相关，后面特殊介绍\n#### Maven-Wgllss-Dynamic-Plugin-SDK  真正插件框架SDK代码 \n* **插件框架SDK中代理接口** (Maven-Wgllss-Dynamic-Plugin-Library) : 插件框架中代理接口\n* **插件框架SDK中代理接口实现** (Maven-Wgllss-Dynamic-Plugin-RunTime-Apk):设计成插件下载，插件框架SDK中代理接口 依赖 Maven-Wgllss-Dynamic-Plugin-Library，最终会参与到插件SDK 打包\n\n#### Maven-Wgllss-Dynamic-Plugin-Manager 插件中管理插件，管理动态代码的3个工程   \n* **管理插件中 activity跳转,service 启动绑定 ，皮肤，资源等** (Maven-Wgllss-Dynamic-Plugin-Manager) 设计成插件下载 必须有\n* **动态实现更换下载插件地址，文件，以及debug 等** (Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl) 宿主默认有一份， 可以不用\n* **动态实现根据版本下载插件，加载插件** (Maven-Wgllss-Dynamic-Plugin-Loader-Impl) 宿主默认有一份，可以不用\n\n#### Maven-Wgllss-Dynamic-Plugin-Generate 一个命令执行打包所有插件 apt工程\n* **注解处理器annotations 工程** (maven-wgllss-sample-create-version-config-annotations) \n* **注解处理器 工程** (maven-wgllss-sample-create-version-config-compiler) \n* **一键打包14个文件配置命令工程** (maven-wgllss-sample-create-all-app) \n* **一键打包版本配置的2个文件配置命令工程** (maven-wgllss-sample-create-version-config-app) \n\n## 宿主中FaceImpl 介绍及注释\n```\nclass FaceImpl : IDynamicDownLoadFace {\n\n    private var baseXL: String = \"\"\n\n    //    override fun getHostL() = \"http://192.168.3.21:8080/assets/WXDynamicPlugin/\"\n//    override fun getHostL() = \"http://192.168.1.9:8080/assets/WXDynamicPlugin/\"\n    //todo 自己本地搭一个服务器，或者 自己服务器 或者 像我一样在gitee上面在自己的项目下建一个文件当作服务器 供下载,\n    // 切记不要往往我的 gitee 项目上面推\n    override fun getHostL() = \"https://gitee.com/wgllss888/WXDynamicPlugin/raw/master/WX-Resource/\"\n\n    /** 0:WXDynamicPlugin 动态化插件框架 理论上已经做到了可以完全不动宿主,但是如果一定要动宿主 可以提供以下思路:\n     *  1:可以根据 宿主版本号得到 宿主版本支持的 的插件,\n     *  2:当宿主必须 需要升级时,升级后原版本的插件不可用了，插件配置在新宿主版本文件夹下面，原宿主版本文件夹可可以先动态配置 在启动页 升级下载新的宿主\n     *  @example  宿主版本 10000 版本支持的插件 放在服务端 WXDynamicPlugin/10000/ 文件夹下  20000版本的插件放在 WXDynamicPlugin/20000/下面\n     */\n    override fun getBaseL(): String {\n        if (TextUtils.isEmpty(baseXL)) {\n            baseXL = StringBuilder().append(getHostL()).append(DeviceIdUtil.getDeviceId()).append(\"/\").append(BuildConfig.VERSION_CODE).append(\"/\").toString()\n        }\n        return baseXL\n    }\n\n    override fun isDebug() = false\n\n    override fun getOtherDLU() = realUrl(\"vc\")\n\n    override fun getMapDLU() = mutableMapOf(\n        VERSION to realUrl(\"classes_version_dex\"), // 对应 maven-wgllss-sample-loader-version打包后插件\n        COMMON to realUrl(\"classes_common_lib_dex\"), // 对应 Maven-Wgllss-Dynamic-Plugin-Common-Library打包后插件\n        WEB_ASSETS to realUrl(\"classes_business_web_res\"), // 对应 maven-wgllss-sample-assets-source-apk打包后插件\n        COMMON_BUSINESS to realUrl(\"classes_business_lib_dex\"), // 对应 maven-wgllss-sample-business-library打包后插件\n        HOME to realUrl(\"classes_home_dex\"), // 对应 maven-wgllss-sample-ui-home打包后插件\n        RESOURCE_SKIN to realUrl(\"classes_common_skin_res\"), // 对应 maven-wgllss-sample-skin-resource-apk打包后插件\n        RUNTIME to realUrl(\"classes_wgllss_dynamic_plugin_runtime\"),// 对应 Maven-Wgllss-Dynamic-Plugin-RunTime-Apk打包后插件\n        MANAGER to realUrl(\"classes_manager_dex\"), // 对应 Maven-Wgllss-Dynamic-Plugin-Manager打包后插件\n        FIRST to realUrl(\"classes_loading_dex\"), // 对应 maven-wgllss-sample-ui-loading打包后插件\n        CLMD to realUrl(\"class_loader_impl_dex\"), // 对应 Maven-Wgllss-Dynamic-Plugin-Loader-Impl打包后插件\n        CDLFD to realUrl(\"classes_downloadface_impl_dex\") // 对应 Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl打包后插件\n    )\n\n    /** 1:首次启动用 宿主里面的 VersionImpl,当有版本更新时用 WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-loader-version\n     *  2:首次时两个地方文件配置成一样\n     *  3: 以后每次修改插件，升级插件 ，需要修改 WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-loader-version 下面配置\n     **/\n    override fun getLoadVersionClassName() = \"com.wgllss.loader.version.LoaderVersionImpl\"\n\n    private fun realUrl(name: String) = StringBuilder().append(getBaseL()).append(name).toString()\n\n}\n```\n* **注意 FaceImpl.getMapDLU内不需要的可以删除不用的插件模块，也可以添加插件模块**\n## 宿主中VersionImpl 介绍及注释\n```\nclass VersionImpl : ILoaderVersion {\n\n    override fun getV() = 1000 //总版本号 只要下面每个地方改一下 此处版本号要往上加+1，下面可同一时间改多个，上面加一下版本号\n\n    override fun isMustShowLoading() = false//下次下载插件 是否显示主下载loading 页面\n\n    override fun getClfd() = Triple(\n        //配置loading 页插件实现 及版本号 对应 maven-wgllss-sample-loader-version 工程\n        \"com.wgllss.dynamic.impl.ILoadHomeImpl\",\n        \"loading\",\n        1000\n    )\n\n    //配置 动态实现根据版本下载插件 及版本号 对应 Maven-Wgllss-Dynamic-Plugin-Loader-Impl 工程\n    override fun getClmd() = Triple(\"\", \"\", 0)\n\n    //动态实现更换下载插件地址，文件，已经debug  Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl\n    override fun getCdlfd() = Triple(\"\", \"\", 0)\n\n    override fun getMapDLU() = linkedMapOf(\n        DynamicPluginConstant.COMMON to Pair(\"classes_common_lib_dex\", 1000), //Maven-Wgllss-Dynamic-Plugin-Common-Library 插件工程 和 版本号\n        DynamicPluginConstant.WEB_ASSETS to Pair(\"classes_business_web_res\", 1000), //maven-wgllss-sample-assets-source-apk 插件工程 和版本号\n        DynamicPluginConstant.COMMON_BUSINESS to Pair(\"classes_business_lib_dex\", 1000),//maven-wgllss-sample-business-library 插件工程 和 版本号\n        DynamicPluginConstant.RUNTIME to Pair(\"classes_wgllss_dynamic_plugin_runtime\", 1000), //Maven-Wgllss-Dynamic-Plugin-RunTime-Apk 插件工程 和 版本号\n        DynamicPluginConstant.MANAGER to Pair(\"classes_manager_dex\", 1000), // Maven-Wgllss-Dynamic-Plugin-Manager 插件工程 和 版本号\n        DynamicPluginConstant.RESOURCE_SKIN to Pair(\"classes_common_skin_res\", 1000), // maven-wgllss-sample-skin-resource-apk 插件工程 和 版本号\n        DynamicPluginConstant.HOME to Pair(\"classes_home_dex\", 1000) //maven-wgllss-sample-ui-home 插件工程 和 版本号\n    )\n\n    override fun getOthers() = mutableMapOf(\n        \"classes_other_dex\" to 1000,  //maven-wgllss-sample-ui-other-lib 插件工程 和 版本号\n        \"classes_other_res\" to 1000,  //maven-wgllss-sample-ui-other 插件工程 和 版本号\n        \"classes_other2_dex\" to 1000, //maven-wgllss-sample-ui-other2-lib2 插件工程 和 版本号\n        \"classes_other2_res\" to 1000  //maven-wgllss-sample-ui-other2 插件工程 和 版本号\n    )\n}\n```\n* **注意 VersionImpl.getMapDLU内不需要的可以删除不用的插件模块,也可以添加插件模块**\n* **注意 VersionImpl.getOthers内不需要的可以删除不用的插件模块,也可以添加插件模块**\n### 各个插件模块对应的打包命令 如下：  \n\n| 工程名                                           | 打包插件task                 |\n|-----------------------------------------------|--------------------------|\n| Maven-Wgllss-Dynamic-Plugin-Common-Library    | assembleDxCommandAndCopy |\n| Maven-Wgllss-Dynamic-Plugin-Manager           | assembleDxCommandAndCopy |\n| Maven-Wgllss-Dynamic-Plugin-Loader-Impl       | assembleDxCommandAndCopy |\n| Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl | assembleDxCommandAndCopy |\n| maven-wgllss-sample-assets-source-apk         | assembleCopy             |\n| maven-wgllss-sample-business-library          | assembleDxCommandAndCopy |\n| maven-wgllss-sample-loader-version            | assembleDxCommandAndCopy |\n| maven-wgllss-sample-skin-resource-apk         | assembleCopy             |\n| maven-wgllss-sample-ui-home                   | assembleDxCommandAndCopy |\n| maven-wgllss-sample-ui-loading                | assembleDxCommandAndCopy |\n| maven-wgllss-sample-ui-other                  | assembleCopy             |\n| maven-wgllss-sample-ui-other2                 | assembleCopy             |\n| maven-wgllss-sample-ui-other2-lib2            | assembleDxCommandAndCopy |\n| maven-wgllss-sample-ui-other-lib              | assembleDxCommandAndCopy |\n| Maven-Wgllss-Dynamic-Plugin-RunTime-Apk       | assembleCopy             |\n| 其他工程为配置                                 | 系统自带assembleRelease   |\n\n* **上面配置15个task,所打包后的插件都在 WXDynamicPlugin\\build\\，外加一个vc文件 总共16个 ,Maven-Wgllss-Dynamic-Plugin-Loader-Impl 和 Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl 可以不用，总共14个文件**\n* **一次性打包task assembleCreateAllFileRelease 供首次使用生成14个文件**\n* **以后每次修改单独插件模块，可以单独用各自task单独打包，然后还需要修改配置版本文件LoaderVersionImpl类后，再执行assembleCreateVersion2FileRelease Task打包，会同时生成classes_version_dex和vc文件，然后把修改后的文件全部放到下载服务器上面，下次启动就可以无感知更新了**\n\n## 特别注意 \n* **首次打包 maven-wgllss-sample-ui-loading工程 生成的 classes_loading_dex 文件 需要重名命改为 loading_1000 放到宿主工程 assets 下面**\n* **首次打包 宿主默认包含3部分,其一:loading_1000 其二:VersionImpl类，其三:FaceImpl类**\n* **之后每次都可以不动宿主,直接修改 LoaderManagerImpl ,LoaderVersionImpl类，DownLoadFaceImpl类 和其他插件工程，插件框架SDK 等完全全动态插件化，无需动宿主**\n\n## 首次接入哪些可以接入宿主依赖\n* **宿主host里面包含哪些呢?**\n* **自己公司app 主要业务开发人员应该知道，比如，自己app 总要有网络请求框架吧，retrofit,okhttp,或者权限框架吧，比如自己做音乐类app,视频类app,可以把想用的音视频sdk ，第一次就接入,因为这些基本万年不修改，没有必要做成插件，浪费下载，加载插件性能?**\n#### 哪些是必须要接入的呢\n| 依赖项目                                                   | 涉及功能                  | 是否必须     |\n|--------------------------------------------------------|-----------------------|----------|\n| androidx.activity:activity-ktx:1.3.0-rc01              | kt协程相关                | 必须       |\n| androidx.fragment:fragment-ktx:1.4.0-alpha04           | kt协程相关                | 必须       |\n| androidx.core:core-ktx:$rootProject.ext.kotlin_version | kt协程相关                | 必须       |\n| com.github.bumptech.glide:glide:4.13.2                 | 图片加载                  | 必须       |\n| androidx.startup:startup-runtime:1.1.1                 | 启动框架                  | 必须       |\n| com.squareup.retrofit2:retrofit:2.9.0等                 | retrofit,okttp（包含好几个） | 必须       |\n| jetpack 相关库                                            | jetpack等              | 可以根据自己项目 |\n| 其他自己三方相关库                                              | 万年不动的                 | 可以接入     |\n|                                                        |                       |          |\n\n\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-assets-source-apk/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-assets-source-apk/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.web.assets.source'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.web.assets.source\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"classes_business_web_res.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndef createCopyTask(assembleReleaseTask, buildType) {\n    def inputFile = file(\"${getProject().getBuildDir()}/outputs/apk/release/classes_business_web_res.apk\")\n    def outputFile = file(\"${rootProject.getBuildDir()}/classes_business_web_res\")\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n   return tasks.create(\"assembleCopy\", Copy) {\n        group = 'other'\n        description = \"复制json到 指定输出目录\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(assembleReleaseTask.name)\n}\n\ntasks.whenTaskAdded { task ->\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(task, \"release\")\n    }\n//    if (task.name == \"cleanJson\") {\n//        createVersionJson(task, \"Release\")\n//    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-assets-source-apk/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-assets-source-apk/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.web.assets.source\" />\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-assets-source-apk/src/main/assets/css/main.8f39d45c.css",
    "content": "@charset \"UTF-8\";*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}:after,:before{text-decoration:inherit;vertical-align:inherit}:where(:root){-webkit-tap-highlight-color:transparent;-webkit-text-size-adjust:100%;cursor:default;line-height:1.5;overflow-wrap:break-word;-moz-tab-size:4;-o-tab-size:4;tab-size:4}:where(body){margin:0}:where(h1){font-size:2em;margin:.67em 0}:where(dl,ol,ul) :where(dl,ol,ul){margin:0}:where(hr){color:inherit;height:0}:where(nav) :where(ol,ul){list-style-type:none;padding:0}:where(nav li):before{content:\"\\200B\";float:left}:where(pre){font-family:monospace,monospace;font-size:1em;overflow:auto}:where(abbr[title]){text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,samp){font-family:monospace,monospace;font-size:1em}:where(small){font-size:80%}:where(audio,canvas,iframe,img,svg,video){vertical-align:middle}:where(iframe){border-style:none}:where(svg:not([fill])){fill:currentColor}:where(table){border-collapse:collapse;border-color:inherit;text-indent:0}:where(button,input,select){margin:0}:where(button,[type=button i],[type=reset i],[type=submit i]){-webkit-appearance:button}:where(fieldset){border:.01333rem solid #a0a0a0}:where(progress){vertical-align:baseline}:where(textarea){margin:0;resize:vertical}:where([type=search i]){-webkit-appearance:textfield;outline-offset:-.02667rem}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}:where(dialog){background-color:#fff;border:solid;color:#000;height:-moz-fit-content;height:-webkit-fit-content;height:fit-content;left:0;margin:auto;padding:1em;position:absolute;right:0;width:-moz-fit-content;width:-webkit-fit-content;width:fit-content}:where(dialog:not([open])){display:none}:where(details>summary:first-of-type){display:list-item}:where([aria-busy=true i]){cursor:progress}:where([aria-controls]){cursor:pointer}:where([aria-disabled=true i],[disabled]){cursor:not-allowed}:where([aria-hidden=false i][hidden]){display:inline;display:initial}:where([aria-hidden=false i][hidden]:not(:focus)){clip:rect(0,0,0,0);position:absolute}html{font-family:system-ui,-apple-system,BlinkMacSystemFont,Helvetica Neue,PingFang SC,sans-serif}code,kbd,pre,samp{font-family:Menlo,Consolas,Roboto Mono,monospace}a{-webkit-tap-highlight-color:rgba(0,0,0,0)}body.ios{cursor:pointer}@font-face{font-family:icomoon;font-style:normal;font-weight:400;src:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/icomoon.1adfe1c60f03e5bc8bd0.ttf) format(\"truetype\"),url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/icomoon.be9154276c565176b74c.woff) format(\"woff\"),url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/icomoon.c3831930ea32fc59358b.svg) format(\"svg\")}[class*=\" icon-\"],[class^=icon-]{speak:none;-webkit-font-feature-settings:normal;font-feature-settings:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:icomoon!important;font-style:normal;font-variant:normal;font-weight:400;line-height:1;text-transform:none}.icon-logo{color:#fff}.icon-play:before{content:\"\"}.icon-href:before{content:\"\"}.icon-radio:before{content:\"\"}.icon-radio-checked:before{content:\"\"}.icon-talk:before{content:\"\"}.icon-checkbox:before{content:\"\"}.icon-checkbox-checked:before{content:\"\"}.icon-flag:before{content:\"\"}.icon-image:before{content:\"\"}.icon-logo:before{content:\"\"}.icon-like:before{content:\"\"}.icon-liked:before{content:\"\"}.icon-timeline:before{content:\"\"}.icon-read:before{content:\"\"}.icon-audio:before{content:\"\"}.icon-arrow:before{content:\"\"}.icon-live:before{content:\"\"}.icon-quotes-left:before{content:\"\"}.icon-quotes-right:before{content:\"\"}.icon-close:before{content:\"\"}.icon-weixin:before{content:\"\"}.icon-qq:before{content:\"\"}.icon-weibo:before{content:\"\"}.icon-switch:before{content:\"\"}.icon-email:before{content:\"\"}.icon-talking:before{content:\"\"}.icon-vip{background:#f1c37e url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/vip.35d08192e94b04059f4f.png) 50%/100% 100% no-repeat;border-radius:.06667rem;display:inline-block;height:.48rem;width:.72rem}.main.main-paid .article .article-body:after{background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#fff),to(hsla(0,0%,100%,0)));background:linear-gradient(0deg,#fff 0,hsla(0,0%,100%,0));bottom:0;content:\"\";height:4.26667rem;left:0;pointer-events:none;position:absolute;width:100%}.main.main-paid .main-openApp{display:none}.main.main-paid .expend-title{pointer-events:none;position:relative;z-index:10}.banner-vipBanner{width:100%}.article-pay{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:0 0 .4rem}.article-pay.article-pay-collect .pay-price,.article-pay.article-pay-vip .pay-price{background:#f5f7f9;color:#333;font-weight:400}.article-pay .pay-buyCount-wrap{-webkit-box-align:center;-ms-flex-align:center;-ms-flex-item-align:stretch;align-items:center;align-self:stretch;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.32rem;margin:.26667rem 0 .64rem;text-align:center}.article-pay .pay-buyCount-wrap .pay-wordCount{font-size:.4rem;font-weight:600}.article-pay .pay-buyCount-wrap:after,.article-pay .pay-buyCount-wrap:before{-webkit-box-flex:1;-ms-flex-positive:1;background:#ddd;content:\"\";flex-grow:1;height:1PX;min-width:.13333rem;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.article-pay .pay-buyCount-wrap:before{margin:0 .33333rem 0 .13333rem}.article-pay .pay-buyCount-wrap:after{margin:0 .13333rem 0 .33333rem}.article-pay .pay-buyCount-wrap .icon-arrow{color:#999;margin:0 0 0 .2rem;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.article-pay .pay-buyCount{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow:hidden}.article-pay .pay-buyCount,.article-pay .pay-record{display:-webkit-box;display:-ms-flexbox;display:flex}.article-pay .pay-record{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.article-pay .pay-record .s-shrink{-ms-flex-negative:0;flex-shrink:0}.article-pay .pay-record .s-collectName{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.article-pay .pay-record .s-strong{color:#333;font-weight:500}.article-pay .pay-collect,.article-pay .pay-price{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#ee1a1a;border-radius:.53333rem;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.4rem;font-weight:500;font-weight:600;height:1.06667rem;justify-content:center;margin:.16rem 0;min-width:66%;padding:0 .13333rem;white-space:nowrap}.article-pay .pay-collect .s-small,.article-pay .pay-price .s-small{font-size:.34667rem;font-weight:400;margin:0 0 0 .2rem}.article-pay .pay-vip{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-image:-webkit-gradient(linear,left top,right top,from(rgba(195,143,58,.25)),to(rgba(195,143,58,.5)));background-image:linear-gradient(90deg,rgba(195,143,58,.25),rgba(195,143,58,.5));border-radius:1.33333rem;color:#783c00;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.4rem;font-weight:500;height:1.06667rem;justify-content:center;margin:.16rem 0;min-width:66%;padding:0 .13333rem;position:relative;white-space:nowrap}.article-pay .pay-vip .s-bubble{background:#783c00;border-radius:.26667rem;color:#fff;font-size:.29333rem;font-weight:600;line-height:.53333rem;padding:0 .2rem;position:absolute;right:1.06667rem;text-align:center;top:-.4rem;-webkit-transform:translateX(50%);transform:translateX(50%);z-index:10}.article-pay .pay-vip .s-bubble:after{border:.26667rem solid transparent;border-left-color:#783c00;bottom:-.13333rem;content:\"\";height:0;left:50%;position:absolute;width:0;z-index:-1}.article-pay .pay-vip-tip{background:#333;border-radius:.26667rem;color:#fff;font-size:.29333rem;font-weight:600;line-height:.53333rem;padding:0 .2rem;position:absolute;right:-.8rem;text-align:center;top:-.4rem;z-index:10}.article-pay .pay-vip-tip .tip-fullPrice{color:#fff;font-size:.29333rem;font-weight:200;opacity:.8;text-align:center;text-decoration:line-through}.article-pay .pay-vip-tip:after{border:.26667rem solid transparent;border-left-color:#333;bottom:-.13333rem;content:\"\";height:0;left:50%;position:absolute;width:0;z-index:-1}.article-pay .pay-bugNotes{color:#999;font-size:.32rem;font-weight:400;margin:.16rem 0}.article-pay .pay-bugNotes a{color:#666}.article-payCollect{-webkit-box-orient:vertical;-webkit-box-direction:normal;background:#f5f7f9;border-radius:.26667rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;margin:.4rem 0;padding:.16rem .32rem}.article-payCollect .s-title{color:#999;font-size:.32rem;padding:.08rem 0 0}.article-payCollect .payCollect-content{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;padding:.32rem 0}.article-payCollect .payCollect-cover{-ms-flex-negative:0;border-radius:.08rem;flex-shrink:0;height:1.33333rem;margin:0 .21333rem 0 0;-o-object-fit:cover;object-fit:cover;overflow:hidden;width:1.33333rem}.article-payCollect .payCollect-info{-webkit-box-orient:vertical;-webkit-box-direction:normal;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden}.article-payCollect .payCollect-name{color:#333;font-size:.42667rem;line-height:2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.article-payCollect .payCollect-count{color:#999;font-size:.32rem}.article-payCollect .paidCollect-line{background-color:#ddd;height:.01333rem;margin:0 0 .16rem;-webkit-transform:scaleY(.5);transform:scaleY(.5);width:100%}.article-payCollect .payCollect-recommend{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;height:1.17333rem;overflow:hidden;padding:0 .18667rem}.article-payCollect .recommend-tip{-ms-flex-negative:0;color:#999;flex-shrink:0;font-size:.32rem;font-weight:500;margin:0 .4rem 0 0}.article-payCollect .recommend-title{-webkit-box-flex:1;-ms-flex-positive:1;color:#666;flex-grow:1;font-size:.4rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.article-payCollect .icon-arrow{-ms-flex-negative:0;color:#b4b4b4;flex-shrink:0;font-size:.26667rem;margin:0 0 0 .06667rem}.article-payVip-recommend{-webkit-box-orient:vertical;-webkit-box-direction:normal;background:#f5f7f9;border-radius:.26667rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;margin:.4rem 0;padding:.16rem .32rem}.article-payVip-recommend.article-payVip-recommend-content{padding:0 .32rem}.article-payVip-recommend .payVip-swiper{overflow:hidden}.article-payVip-recommend .swiper-pagination{-webkit-box-pack:center;-ms-flex-pack:center;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:center}.article-payVip-recommend .swiper-pagination .swiper-pagination-bullet{background:rgba(0,0,0,.2);border-radius:50%;display:block;height:.16rem;margin:0 .06667rem;width:.16rem}.article-payVip-recommend .swiper-pagination .swiper-pagination-bullet.swiper-pagination-bullet-active{background:rgba(0,0,0,.5);border-radius:.08rem;width:.32rem}.article-payVip-recommend .s-header{-webkit-box-pack:justify;-ms-flex-pack:justify;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:space-between}.article-payVip-recommend .s-header a,.article-payVip-recommend .s-title{color:#999;font-size:.32rem;padding:.08rem 0 0}.article-payVip-recommend ul{list-style:none;margin:0;padding:0}.article-payVip-recommend .s-item{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;padding:.32rem 0}.article-payVip-recommend .s-cover{-ms-flex-negative:0;border-radius:.08rem;flex-shrink:0;height:1.6rem;margin:0 .21333rem 0 0;-o-object-fit:cover;object-fit:cover;overflow:hidden;width:2.13333rem}.article-payVip-recommend .s-info{-webkit-box-orient:vertical;-webkit-box-direction:normal;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden}.article-payVip-recommend .s-name{-webkit-line-clamp:2;-webkit-box-orient:vertical;color:#333;display:-webkit-box;font-size:.37333rem;line-height:.48rem;max-height:.96rem;min-height:.96rem;overflow:hidden;text-overflow:ellipsis}.article-payVip-recommend .s-desc{color:#999;font-size:.32rem;line-height:1;margin:.21333rem 0 0}.article-payVip-recommend .s-desc .s-price{font-weight:600;margin:0 .26667rem 0 0}.article-payVip-recommend .s-line{background-color:#ddd;height:.01333rem;margin:0 0 .16rem;-webkit-transform:scaleY(.5);transform:scaleY(.5);width:100%}body{background:#fff;margin:0 auto;max-width:750PX;overflow-x:hidden;overflow-y:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}a{color:#1b88ee;text-decoration:none}figure{margin:0}.main{font-size:.48rem;padding:0 .53333rem}.main .article-title{color:#333;font-size:.66667rem;font-weight:500;letter-spacing:0;line-height:.90667rem;margin:.53333rem 0}.main .article-info{-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:space-between;margin:.13333rem 0 .66667rem}.main .article-info .s-avatar{border-radius:50%;height:.86667rem;margin-right:.13333rem;width:.86667rem}.main .article-info .s-author{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-flex:1;-ms-flex-positive:1;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;flex-grow:1;line-height:1.5;overflow:hidden}.main .article-info address{color:#333;font-size:.34667rem;font-style:normal;letter-spacing:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.main .article-info address a{color:#333}.main .article-info .s-time{color:#b4b4b4;font-size:.32rem}.main .article-info .s-comment{-ms-flex-negative:0;background:#f5f7f9;border-radius:.38667rem;flex-shrink:0;font-size:.37333rem}.main .article-info .s-comment a{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#333;display:-webkit-box;display:-ms-flexbox;display:flex;height:.77333rem;line-height:.77333rem;padding:0 .32rem}.main .article-info .s-comment a:before{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/discuss2.13b37e82da55f366d844.png) 50% no-repeat;background-size:100% 100%;content:\"\";height:.53333rem;margin:0 .13333rem 0 0;width:.53333rem}.main .article-body{color:#333;font-weight:400;letter-spacing:0;line-height:.74667rem;overflow:hidden;overflow-wrap:break-word;position:relative;text-align:justify}.main .article-body.article-body-fold{max-height:200vh}.main .article-body.article-body-fold:after{background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#fff),to(hsla(0,0%,100%,0)));background:linear-gradient(0deg,#fff 0,hsla(0,0%,100%,0));bottom:0;content:\"\";height:4.26667rem;left:0;pointer-events:none;position:absolute;width:100%}.main .article-body .preset-original-title{color:#666;line-height:.8rem;margin-top:.36rem;text-align:justify;word-break:break-all}.main .article-body .preset-original-title:before{content:\"「\";margin:0 .08rem 0 -.13333rem}.main .article-body .preset-original-title:after{content:\"」\";margin-left:.08rem}.main .article-body blockquote{border-left:.06667rem solid #ddd;border-radius:.02667rem;color:#666;font-size:.45333rem;margin:0;padding:0 0 0 .26667rem}.main .article-body pre{white-space:pre-wrap}.main .article-body ol{padding-left:1em}.main .article-body .preset-text-border{border:.02667rem solid #000}.main .article-body .hljs{background-color:#f5f7f9;font-size:.75em;padding:.6em .8em!important}.main .unfold-wrap{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#333;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.4rem;justify-content:center;padding:.13333rem 0}.main .unfold-wrap .icon-arrow{font-size:.29333rem;margin:0 0 0 .2rem;-webkit-transform:rotate(90deg);transform:rotate(90deg)}.main .main-openApp{border:.02667rem solid #ee1a1a;border-radius:.58667rem;color:#ee1a1a;font-size:.45333rem;height:1.17333rem;margin:.53333rem auto .8rem;max-width:100%;text-align:center;width:90%}.main .main-openApp,.rumor{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:center}.rumor{background:rgba(254,93,16,.05);border-radius:.08rem;color:#fe5d10;font-size:.32rem;height:.66667rem;letter-spacing:0;line-height:1;margin:.32rem 0 0}.rumor:before{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/rumor.fb75769dd96838373339.png) 50%/100% 100% no-repeat;content:\"\";height:.4rem;margin:0 .10667rem 0 0;width:.4rem}.area-topBanner{max-width:100%;overflow:hidden}.loading{-webkit-box-pack:center;-ms-flex-pack:center;display:none;justify-content:center;margin:.13333rem 0}.loading.show{display:-webkit-box;display:-ms-flexbox;display:flex}.loading .circular{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;height:.93333rem;-webkit-transform-origin:center center;transform-origin:center center;width:.93333rem}.loading .path{stroke-dasharray:1,200;stroke-dashoffset:0;stroke:#ccc;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-.46667rem}to{stroke-dasharray:89,200;stroke-dashoffset:-1.65333rem}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-.46667rem}to{stroke-dasharray:89,200;stroke-dashoffset:-1.65333rem}}.article-footer{color:#999;font-size:.42667rem;line-height:.58667rem}.article-footer .s-statement{font-size:.37333rem;margin:.26667rem 0}.article-footer .s-info{margin:.13333rem 0}.footer{-webkit-box-sizing:content-box;box-sizing:content-box;height:2rem;padding-bottom:calc(env(safe-area-inset-bottom) - 16PX)}.hide-comment .comment,.hide-comment .main .article-info .s-comment,.hide-comment .topNav .s-comment{display:none}.toutiao .keyword-search{color:#404040;pointer-events:none}.miniprogram .m-photo .s-tip,.miniprogram .m-photoSet .s-tip,.miniprogram .m-video .s-tip,.miniprogram .main-openApp,.miniprogram .recommend .recommend-item .s-openApp,.newsapp .m-photo .s-tip,.newsapp .m-photoSet .s-tip,.newsapp .m-video .s-tip,.newsapp .main-openApp,.newsapp .recommend .recommend-item .s-openApp,.toutiao .comment,.toutiao .m-photo .s-tip,.toutiao .m-photoSet .s-tip,.toutiao .m-video .s-tip,.toutiao .recommend .recommend-item .s-openApp{display:none}.widget-slider{max-width:10rem!important}.widget-slider .widget-slider-article-simple{max-width:10rem}.pc .comment-open-app,.pc .m-photo .s-tip,.pc .m-photoSet .s-tip,.pc .m-video .s-tip,.pc .main-openApp,.pc .recommend .recommend-item .s-openApp{display:none}.pc .author-homePage{pointer-events:none}@media screen and (min-width:850px){body .floatMenu .floatMenu-content{right:-1.2rem}}body.paid .topNav{background:#fff}body.paid .topNav .s-comment.show{display:none}body.paid .topNav .s-back{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/home.470d92a5fdedaaba3191.png) 50% no-repeat;background-size:.66667rem .66667rem;padding:.26667rem .16rem .26667rem .13333rem}body.paid .topNav .s-search{background:#f5f7f9}body.paid .topNav .s-search .hot-word{color:#666}body.paid .topNav .s-search .hot-word:before{background-image:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/search-light.7f1f63c1c663f9ccd6b2.png);margin:0 .13333rem 0 0}body.paid .topNav .s-channel{display:none}body.paid .topNav .topNav-user{display:block}body.paid .main .article-info .s-comment{display:none}body.paid .m-photo img,body.paid .m-photoSet img,body.paid .m-video img{background:#e5e5e5 50%/3.6rem 2.69333rem no-repeat}body.paid .article-footer .s-info,body.paid .article-footer .s-statement{display:none}body.paid .main .article-info{pointer-events:none}body.paid .backflow-floating,body.paid .comment,body.paid .m-photo .s-tip,body.paid .m-photoSet .s-tip,body.paid .m-video .s-tip,body.paid .main-openApp,body.paid .recommend .recommend-item .s-openApp{display:none}.header,.topNav{height:1.28rem;max-width:750PX;width:100%}.topNav{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#ef4645;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;left:0;margin:0 auto;position:fixed;right:0;top:0;z-index:100}.topNav .s-back{-ms-flex-item-align:stretch;-ms-flex-negative:0;align-self:stretch;background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/logo.59f1e7f191ea16f90f29.png) 50% no-repeat;background-size:1.2rem .58667rem;-webkit-box-sizing:content-box;box-sizing:content-box;flex-shrink:0;font-size:0;padding:.26667rem .16rem .26667rem .4rem;width:1.2rem}.topNav .s-line{background:hsla(0,0%,100%,.5);height:.42667rem;width:1PX}.topNav .s-channel{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;-ms-flex-item-align:stretch;align-items:center;align-self:stretch;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;flex-shrink:0;font-size:.4rem;font-weight:400;justify-content:center;margin:0 .4rem 0 .16rem}.topNav .s-search{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;background:rgba(0,0,0,.1);border-radius:.46667rem;color:#fff;font-size:.4rem;height:.85333rem;justify-content:flex-start;margin:0 .4rem 0 0;padding:0 .13333rem 0 .26667rem;position:relative}.topNav .s-search,.topNav .s-search .hot-words{-webkit-box-flex:1;-ms-flex-positive:1;display:-webkit-box;display:-ms-flexbox;display:flex;flex-grow:1;overflow:hidden}.topNav .s-search .hot-words{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.topNav .s-search .hot-word{-webkit-box-pack:start;-ms-flex-pack:start;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;align-items:center;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;flex-shrink:0;height:.85333rem;justify-content:flex-start;overflow:hidden}.topNav .s-search .hot-word .s-text{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.topNav .s-search .hot-word:before{-ms-flex-negative:0;background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/search.f764c8e1be1bc69b6b2d.png) no-repeat 50%;background-size:100% 100%;content:\"\";flex-shrink:0;height:.4rem;margin:0 .05rem 0 0;width:.4rem}.topNav .s-comment{-ms-flex-negative:0;background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/discuss.aae7acd46aa0c6155bb1.png) no-repeat 0 100%;background-size:.66667rem .66667rem;color:#ee1a1a;flex-shrink:0;font-size:.26667rem;font-weight:700;height:.68rem;max-width:0;position:relative;-webkit-transform:scale(0);transform:scale(0)}.topNav .s-comment .s-count{background:#fff;border-radius:.16rem;height:.32rem;line-height:.32rem;margin:0 0 0 .4rem;padding:0 .06667rem}.topNav .s-comment.show{margin:0 .26667rem 0 0;max-width:unset;min-width:.06667rem;-webkit-transform:scale(1);transform:scale(1);-webkit-transition:-webkit-transform .25s linear;transition:-webkit-transform .25s linear;transition:transform .25s linear;transition:transform .25s linear,-webkit-transform .25s linear}.topNav .topNav-user{background:#f5f7f9 url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/mine.25627349a06a2600881b.png) 50%/.64rem .64rem no-repeat;border-radius:50%;display:none;height:.85333rem;margin:0 .33333rem 0 0;width:.85333rem}.hot-search{bottom:-13.32rem;font-size:.37333rem;position:fixed}.hot-search h3{font-size:.42667rem}.hot-search ul{list-style:none;margin:0;padding:0}.comment{padding:.93333rem 0 .66667rem}.comment h3{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/comment-title.2310fbb7c01acd14cb88.png) 50% no-repeat;background-size:100% 100%;font-size:0;height:.8rem;margin:0 auto;padding:0;width:3.84rem}.comment .comment-list{margin:.42667rem 0 0}.comment .comment-list .comment-card{margin:0 0 .48rem}.comment .comment-list .comment-card header{-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:space-between}.comment .comment-list .comment-card .s-avatar{-ms-flex-negative:0;border-radius:50%;flex-shrink:0;height:.93333rem;margin:0 .2rem 0 0;width:.93333rem}.comment .comment-list .comment-card .s-info{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-flex:1;-ms-flex-positive:1;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;flex-grow:1}.comment .comment-list .comment-card .s-nick{color:#333;font-size:.37333rem;line-height:.48rem}.comment .comment-list .comment-card .s-location{color:#b4b4b4;font-size:.29333rem;letter-spacing:0;line-height:.37333rem}.comment .comment-list .comment-card .s-vote{color:#999;font-size:.34667rem;font-weight:500;line-height:.4rem;line-height:.61333rem}.comment .comment-list .comment-card .icon-fav{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/praise.f8b126943a80fffc22b1.png);background-size:100% 100%;display:inline-block;height:.53333rem;margin:0 0 0 .06667rem;vertical-align:top;width:.53333rem}.comment .comment-list .comment-card .s-content{color:#333;font-size:.48rem;letter-spacing:0;margin:.16rem 0 .16rem 1.12rem}.comment .comment-list .comment-card .s-time{color:#b4b4b4;font-size:.32rem;letter-spacing:0;line-height:.45333rem;margin:0 0 0 1.12rem}.comment .comment-link{-ms-flex-pack:distribute;color:#ee1a1a;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.42667rem;font-weight:400;justify-content:space-around}.comment .comment-link a{color:#ee1a1a}.comment .comment-link .icon-arrow{font-size:.24rem;margin:.13333rem 0 .13333rem .06667rem}.comment .comment-empty{color:#333;font-size:.48rem;font-weight:400;letter-spacing:0;margin:1.33333rem 0;text-align:center}.ask{margin:.4rem 0 0;overflow:hidden}.ask h3{color:#333;font-size:.45333rem;font-weight:500;line-height:.66667rem}.ask ul{list-style:none;margin:0;padding:0}.ask li{-webkit-box-orient:vertical;-webkit-box-direction:normal;border-bottom:1px solid #e5e5e5;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden;padding:.32rem 0}.ask li a{color:#333}.ask li:last-child{border-bottom:none}.ask li .s-title{font-size:.48rem}.ask li .s-doctor{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.37333rem}.ask li .s-avatar{border-radius:.26667rem;height:1.06667rem;overflow:hidden;width:1.06667rem}.ask li .s-avatar img{height:auto;width:100%}.ask li .s-info{-webkit-box-orient:vertical;-webkit-box-direction:normal;color:#333;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;font-size:.37333rem;margin:.32rem 0 .21333rem .13333rem}.ask li .s-info .s-hospital{color:#999;font-size:.34667rem}.ask li .s-detial{-webkit-line-clamp:2;-webkit-box-orient:vertical;color:#666;display:-webkit-box;font-size:.42667rem;letter-spacing:.01333rem;line-height:.66667rem;max-height:1.33333rem;overflow:hidden;text-align:justify;text-overflow:ellipsis}.card-recommend-oneImg{color:#333;font-size:.48rem}.card-recommend-oneImg article{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;min-height:2.89333rem}.card-recommend-oneImg article .s-left{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-box-flex:1;-ms-flex-positive:1;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;flex-grow:1;justify-content:space-between;min-height:2.33333rem;min-width:0}.card-recommend-oneImg article .s-info{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#999;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.32rem}.card-recommend-oneImg article .s-source{margin:0 .21333rem 0 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-recommend-oneImg article .s-tag{color:#f52727}.card-recommend-oneImg article .s-replyCount,.card-recommend-oneImg article .s-tag{-ms-flex-negative:0;flex-shrink:0;margin:0 .21333rem 0 0}.card-recommend-oneImg article .s-openApp{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;align-items:center;border:.02667rem solid #ee1a1a;border-radius:1.33333rem;-webkit-box-sizing:content-box;box-sizing:content-box;color:#ee1a1a;display:-webkit-box;display:-ms-flexbox;display:flex;flex-shrink:0;font-size:.32rem;height:.58667rem;justify-content:center;padding:0 .24rem}.card-recommend-oneImg article .s-holder{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.card-recommend-oneImg article .s-right{-ms-flex-negative:0;border-radius:.08rem;flex-shrink:0;height:2.22667rem;margin:0 0 0 .4rem;overflow:hidden;position:relative;width:2.90667rem}.card-recommend-oneImg article .s-right img{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.card-recommend-oneImg article .s-right .icon-play{color:#fff;font-size:.42667rem;left:50%;position:absolute;text-align:center;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);z-index:5}.card-recommend-oneImg article .s-right .s-audioTime{-webkit-box-align:center;-ms-flex-align:center;align-items:center;bottom:.06667rem;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.32rem;position:absolute;right:.06667rem;z-index:5}.card-recommend-oneImg article .s-right .s-audioTime .icon-audio{color:#fff;font-size:.26667rem;margin:0 .13333rem 0 0;text-align:center}.card-recommend-oneImg article h4{-webkit-line-clamp:2;-webkit-box-orient:vertical;color:#333;display:-webkit-box;font-size:.48rem;font-weight:400;line-height:.66667rem;margin:0;max-height:1.33333rem;overflow:hidden;text-overflow:ellipsis}.card-recommend-threeImg{color:#333;font-size:.48rem}.card-recommend-threeImg article{-webkit-box-orient:vertical;-webkit-box-direction:normal;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-height:2.89333rem;padding:.21333rem 0}.card-recommend-threeImg article .s-info{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#999;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.32rem}.card-recommend-threeImg article .s-source{margin:0 .21333rem 0 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.card-recommend-threeImg article .s-tag{color:#f52727}.card-recommend-threeImg article .s-replyCount,.card-recommend-threeImg article .s-tag{-ms-flex-negative:0;flex-shrink:0;margin:0 .21333rem 0 0}.card-recommend-threeImg article .s-imgs-wrap{margin:.10667rem 0;padding-bottom:25%;position:relative;width:100%}.card-recommend-threeImg article .s-imgs{-webkit-box-pack:justify;-ms-flex-pack:justify;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:space-between;left:0;margin:0;position:absolute;right:0;top:0}.card-recommend-threeImg article .s-imgs img{border-radius:.08rem;max-height:190PX;-o-object-fit:cover;object-fit:cover;overflow:hidden;width:33%}.card-recommend-threeImg article .s-openApp{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;align-items:center;border:.02667rem solid #ee1a1a;border-radius:1.33333rem;-webkit-box-sizing:content-box;box-sizing:content-box;color:#ee1a1a;display:-webkit-box;display:-ms-flexbox;display:flex;flex-shrink:0;font-size:.32rem;height:.58667rem;justify-content:center;padding:0 .24rem}.card-recommend-threeImg article .s-holder{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.card-recommend-threeImg article h4{color:#333;font-size:.48rem;font-weight:400;line-height:.66667rem;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.recommend{margin:.4rem 0 0;overflow:hidden}.recommend h3{color:#333;font-size:.45333rem;font-weight:500;line-height:.66667rem}.recommend ul{list-style:none;margin:0;padding:0}.recommend li{border-bottom:1px solid #eef1f7}.recommend li:last-child{border-bottom:none}.floatMenu{bottom:0;left:50%;max-width:750PX;opacity:0;pointer-events:none;position:fixed;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:100%;z-index:999}.floatMenu.show{opacity:1;pointer-events:auto;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.floatMenu .floatMenu-content{-webkit-box-orient:vertical;-webkit-box-direction:normal;background:hsla(0,0%,100%,.95);border-radius:.53333rem;-webkit-box-shadow:0 0 .10667rem 0 rgba(0,0,0,.12);box-shadow:0 0 .10667rem 0 rgba(0,0,0,.12);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;font-size:0;position:absolute;right:.4rem;top:-4.4rem;width:1.06667rem}.floatMenu em{-ms-flex-item-align:center;align-self:center;background:#ddd;height:1PX;width:.74667rem}.floatMenu .floatMenu-home,.floatMenu .floatMenu-toTop{background:50% no-repeat;background-size:.53333rem .53333rem;height:1.2rem}.floatMenu .floatMenu-toTop{background-image:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/menu-toTop.fe4b74d7c16e0758813b.png)}.floatMenu .floatMenu-home{background-image:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/menu-home.86e6b645737e5812a0f5.png)}.m-sectionTitle{margin:.26667rem 0 0;text-align:center}.m-sectionTitle img{height:.98667rem;margin-bottom:.05333rem;width:auto}.m-sectionTitle h3{font-size:.48rem;font-weight:700;line-height:.72rem;margin:0;padding:0}.m-photo{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-pack:center;-ms-flex-pack:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;justify-content:center;margin:.66667rem auto .77333rem;width:100%}.m-photo.small-photo .s-tip{display:none}.m-photo .gif-photo:after{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/gif.7d4d9f13d1801ec9b843.png) 50%/1.28rem 1.28rem no-repeat}.m-photo .gif-photo-loading:after,.m-photo .gif-photo:after{bottom:0;content:\"\";left:0;position:absolute;right:0;top:0;z-index:10}.m-photo .gif-photo-loading:after{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/gif-loading.2f56edd154e8431be2c2.svg) 50%/1.28rem 1.28rem no-repeat}.m-photo .gif-photo-loading .circular{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;height:.93333rem;-webkit-transform-origin:center center;transform-origin:center center;width:.93333rem}.m-photo .gif-photo-loading .path{stroke-dasharray:1,200;stroke-dashoffset:0;stroke:#ccc;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}.m-photo .s-tip{background:#fff;border:1px solid #f5f7f9;-webkit-box-shadow:0 .02667rem .02667rem 0 rgba(0,0,0,.05);box-shadow:0 .02667rem .02667rem 0 rgba(0,0,0,.05);color:#333;font-size:.37333rem;height:1.25333rem;letter-spacing:0;line-height:1.25333rem;text-align:center}.m-photo .s-tip .icon-arrow{font-size:.26667rem}.m-photo .s-wrap{overflow:hidden;position:relative;text-align:center}.m-photo img{background:#e5e5e5 url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/bg.2256edadd69b78418e29.png) 50%/3.6rem 2.69333rem no-repeat;min-height:4.13333rem;-o-object-fit:contain;object-fit:contain;width:100%}.m-photo figcaption{color:#999;font-size:.37333rem;margin:.21333rem 0 0;padding:0 0 0 .34667rem;position:relative}.m-photo figcaption .icon-quotes-left{font-size:.21333rem;left:0;position:absolute;top:.21333rem}.photoPreview{background:#000;height:100%;left:0;position:fixed;top:0;width:100%;z-index:99999}.photoPreview.hide{display:none}.photoPreview .swiper-slide{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;justify-content:center;overflow:hidden;width:100%}.photoPreview .swiper-slide img{max-height:100%;max-width:100%}.photoPreview .swiper-pagination{bottom:.13333rem;color:#b4b4b4;font-size:.42667rem;font-weight:500;left:.26667rem;margin:0;position:absolute;z-index:10}.photoPreview .swiper-pagination .swiper-pagination-current{color:#ee1a1a;font-size:.74667rem}.photoPreview .s-close{height:.66667rem;left:.06667rem;position:absolute;top:.06667rem;width:.66667rem;z-index:50}.photoPreview .s-close:after,.photoPreview .s-close:before{background:#b4b4b4;content:\"\";height:.04rem;left:.13333rem;position:absolute;top:.29333rem;width:.4rem}.photoPreview .s-close:before{-webkit-transform:rotate(45deg);transform:rotate(45deg)}.photoPreview .s-close:after{-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.m-photoSet{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-pack:center;-ms-flex-pack:center;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;justify-content:center;margin:.66667rem auto .77333rem;width:100%}.m-photoSet .s-tip{background:#fff;border:1px solid #f5f7f9;-webkit-box-shadow:0 .02667rem .02667rem 0 rgba(0,0,0,.05);box-shadow:0 .02667rem .02667rem 0 rgba(0,0,0,.05);color:#333;font-size:.37333rem;height:1.25333rem;letter-spacing:0;line-height:1.25333rem;text-align:center}.m-photoSet .s-tip .icon-arrow{font-size:.26667rem}.m-photoSet .s-wrap{overflow:hidden;position:relative}.m-photoSet .s-tag{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:rgba(0,0,0,.6);border-radius:.34667rem;bottom:.21333rem;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.32rem;font-weight:500;height:.69333rem;line-height:.69333rem;padding:0 .32rem;position:absolute;right:.21333rem;z-index:5}.m-photoSet .s-tag:before{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/photo.7577501b5095467d8ff1.png) 50% no-repeat;background-size:100% 100%;content:\"\";height:.32rem;margin:0 .09333rem 0 0;width:.32rem}.m-photoSet img{background:#e5e5e5 url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/bg.2256edadd69b78418e29.png) 50%/3.6rem 2.69333rem no-repeat;min-height:4.13333rem;-o-object-fit:contain;object-fit:contain;width:100%}.m-photoSet figcaption{color:#999;font-size:.37333rem;margin:.21333rem 0 0;padding:0 0 0 .34667rem;position:relative}.m-photoSet figcaption .icon-quotes-left{font-size:.21333rem;left:0;position:absolute;top:.21333rem}.m-audio{margin:0;padding:0;text-align:center}.m-audio figcaption{color:#999;font-size:.37333rem;margin:.21333rem 0 1.06667rem;text-align:center}.m-video{text-align:center;width:100%}.m-video,.m-video figure{margin:0;padding:0}.m-video .s-wrap{background:#000;overflow:hidden;position:relative;text-align:center;width:100%}.m-video .s-cover{height:100%;left:0;position:absolute;top:0;width:100%;z-index:10}.m-video .s-cover.hide{display:none}.m-video .s-cover img{background:#e5e5e5 url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/bg.2256edadd69b78418e29.png) 50%/3.6rem 2.69333rem no-repeat;height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.m-video .s-cover .icon-play{background-color:hsla(0,0%,100%,.9);border-radius:50%;color:#333;font-size:.45333rem;height:1.28rem;left:50%;line-height:1.28rem;position:absolute;text-align:center;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:1.28rem}.m-video .s-video video{max-height:670PX;width:100%}.m-video figcaption{color:#999;font-size:.37333rem;margin:.21333rem 0 1.06667rem;padding:0 0 0 .34667rem;position:relative;text-align:left}.m-video figcaption .icon-quotes-left{font-size:.21333rem;left:0;position:absolute;top:.21333rem}.m-video .s-tip{background:#fff;border:1px solid #f5f7f9;-webkit-box-shadow:0 .02667rem .02667rem 0 rgba(0,0,0,.05);box-shadow:0 .02667rem .02667rem 0 rgba(0,0,0,.05);color:#333;font-size:.37333rem;height:1.25333rem;letter-spacing:0;line-height:1.25333rem;text-align:center}.m-video .s-tip .icon-arrow{font-size:.26667rem}.m-timeline header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#333;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.45333rem;font-weight:500;line-height:.66667rem}.m-timeline header .icon-timeline{font-size:.4rem;margin:0 .13333rem 0 0}.m-timeline ul{list-style:none;margin:.4rem 0 0;padding:0 0 0 .06667rem}.m-timeline ul li{position:relative}.m-timeline ul li:before{background:#eee;content:\"\";height:100%;left:.06667rem;position:absolute;top:.46667rem;width:.02667rem}.m-timeline ul li:last-child:before{display:none}.m-timeline .s-time{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#ee1a1a;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.37333rem;line-height:.77333rem}.m-timeline .s-time:before{background:#fff;border:.02667rem solid #ee1a1a;border-radius:50%;content:\"\";height:.16rem;margin:0 .32rem 0 0;width:.16rem}.m-timeline .s-event{color:#666;font-size:.42667rem;font-weight:400;line-height:.66667rem;margin:0 0 0 .48rem}.m-spinfo{margin:.66667rem 0 .4rem}.m-spinfo .s-type{color:#333;font-size:.45333rem;font-weight:500;line-height:.66667rem;margin:0 0 .4rem}.m-spinfo .s-type:before{background:url(https://static.ws.126.net/163/frontend/backflow-ssr/combined.svg) 50% no-repeat;background-size:100% 100%;content:\"\";display:inline-block;height:.29333rem;margin:0 .18667rem 0 0;width:.21333rem}.m-spinfo .s-content{color:#666;font-size:.42667rem;line-height:.66667rem}.m-linkCard{margin:.4rem 0}.m-linkCard a{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fcfcfc;border:1px solid #ddd;border-radius:.05333rem;color:#999;padding:.29333rem .4rem .29333rem .29333rem}.m-linkCard .s-info,.m-linkCard a{display:-webkit-box;display:-ms-flexbox;display:flex}.m-linkCard .s-info{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-flex:1;-ms-flex-positive:1;-ms-flex-direction:column;flex-direction:column;flex-grow:1;margin:0 .4rem;overflow:hidden}.m-linkCard .s-info h3{color:#333;font-size:.48rem;line-height:.66667rem;margin:0}.m-linkCard .s-info h3,.m-linkCard .s-info small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m-linkCard .s-info small{color:#999;font-size:.34667rem}.m-linkCard .s-img{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;align-items:center;border-radius:.06667rem;display:-webkit-box;display:-ms-flexbox;display:flex;flex-shrink:0;height:1.46667rem;justify-content:center;overflow:hidden;width:1.46667rem}.m-linkCard .s-img img{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.m-linkCard .icon-arrow{-ms-flex-negative:0;flex-shrink:0}.m-link{color:#1b88ee}.m-liveCard{margin:.4rem 0}.m-liveCard a{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#f5f7f9;border-radius:.05333rem;color:#999;padding:.29333rem .4rem .29333rem .29333rem}.m-liveCard .s-info,.m-liveCard a{display:-webkit-box;display:-ms-flexbox;display:flex}.m-liveCard .s-info{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-flex:1;-ms-flex-positive:1;-ms-flex-direction:column;flex-direction:column;flex-grow:1;margin:0 .4rem;overflow:hidden}.m-liveCard .s-info h3{color:#333;font-size:.48rem;font-weight:400;line-height:.66667rem;margin:0}.m-liveCard .s-info h3,.m-liveCard .s-info small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m-liveCard .s-info small{color:#999;font-size:.34667rem}.m-liveCard .s-img{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;align-items:center;border-radius:.06667rem;display:-webkit-box;display:-ms-flexbox;display:flex;flex-shrink:0;height:1.46667rem;justify-content:center;overflow:hidden;width:1.46667rem}.m-liveCard .s-img img{height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.m-variousTalks .s-header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#667c89;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.4rem;line-height:.53333rem;padding:.42667rem 0 .58667rem}.m-variousTalks .s-header .icon-talk{margin:0 .06667rem 0 0}.m-variousTalks ul{list-style:none;margin:0;padding:0 0 0 .13333rem}.m-variousTalks ul li{display:-webkit-box;display:-ms-flexbox;display:flex;margin:.10667rem 0}.m-variousTalks .s-avatar{-ms-flex-negative:0;border-radius:50%;flex-shrink:0;height:.85333rem;margin:0 .13333rem 0 0;overflow:hidden;width:.85333rem}.m-variousTalks .s-avatar img{height:100%;width:100%}.m-variousTalks .s-info{-webkit-box-orient:vertical;-webkit-box-direction:normal;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden}.m-variousTalks .s-info .s-blue{color:#5da4ef}.m-variousTalks .s-info .s-red{color:#e15241}.m-variousTalks .s-info .s-name{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.42667rem;line-height:.6rem;overflow:hidden}.m-variousTalks .s-info .s-name span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m-variousTalks .s-info .s-name .icon-flag{-ms-flex-negative:0;flex-shrink:0;font-size:.32rem;margin:0 0 0 .26667rem}.m-variousTalks .s-info .s-talk{color:#333;font-size:.42667rem;line-height:.6rem}.m-pk{-webkit-box-orient:vertical;-webkit-box-direction:normal;border:1px solid #ddd;border-radius:.08rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:.29333rem .4rem}.m-pk .s-title{color:#333;font-size:.45333rem;font-weight:400;line-height:.6rem;margin:0}.m-pk .s-opinions{-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#555;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.37333rem;justify-content:space-between;line-height:.6rem;margin:.29333rem 0}.m-pk .s-opinion{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;width:3.46667rem}.m-pk .s-opinion .s-blueFlag,.m-pk .s-opinion .s-redFlag{border-radius:.08rem;font-size:.29333rem;font-weight:500;line-height:.4rem;margin:0 .13333rem 0 0;padding:0 .10667rem}.m-pk .s-opinion .s-redFlag{background:rgba(238,26,26,.1);color:#ee1a1a}.m-pk .s-opinion .s-blueFlag{background:rgba(27,136,238,.1);color:#1b88ee}.m-pk .s-s,.m-pk .s-v{font-size:.66667rem;font-weight:600}.m-pk .s-v{color:#ee1a1a;margin:0 0 0 .29333rem}.m-pk .s-s{color:#1b88ee;margin:0 .29333rem 0 0}.m-pk .s-votes{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin:0 0 .4rem}.m-pk .s-vote-blue,.m-pk .s-vote-red,.m-pk .s-votes{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.m-pk .s-vote-blue,.m-pk .s-vote-red{-webkit-box-pack:center;-ms-flex-pack:center;border-radius:50%;font-size:0;height:1.17333rem;justify-content:center;width:1.17333rem}.m-pk .s-vote-blue:before,.m-pk .s-vote-red:before{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/pk-like.d2c827658dc0eaedb848.png) 50% no-repeat;background-size:100% 100%;content:\"\";height:.53333rem;margin:0 0 .06667rem;width:.53333rem}.m-pk .s-vote-red{background-image:-webkit-gradient(linear,left top,left bottom,from(#f77),to(#ee1a1a));background-image:linear-gradient(180deg,#f77,#ee1a1a)}.m-pk .s-vote-blue{background-image:-webkit-gradient(linear,left top,left bottom,from(#50c8ff),to(#1b88ee));background-image:linear-gradient(180deg,#50c8ff,#1b88ee)}.m-pk .s-vote-blue:before{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.m-pk .s-progress{-webkit-box-flex:1;-ms-flex-positive:1;display:-webkit-box;display:-ms-flexbox;display:flex;flex-grow:1;height:.16rem;margin:0 .16rem}.m-pk .s-num{font-size:.37333rem;font-weight:500;line-height:.50667rem;position:absolute;top:.16rem}.m-pk .s-red-progress{background:#ee1a1a;border-radius:.08rem 0 0 .08rem;margin:0 .04rem 0 0;position:relative;width:30%}.m-pk .s-red-progress .s-num{color:#ee1a1a;left:0}.m-pk .s-blue-progress{-webkit-box-flex:1;-ms-flex-positive:1;background:#1b88ee;border-radius:0 .08rem .08rem 0;flex-grow:1;margin:0 0 0 .04rem;position:relative}.m-pk .s-blue-progress .s-num{color:#1b88ee;right:0}.m-pk .s-info{color:#999;font-size:.32rem}.m-vote{-webkit-box-orient:vertical;-webkit-box-direction:normal;border:1px solid #ddd;border-radius:.08rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:.29333rem .4rem}.m-vote.m-voted .s-input{display:none}.m-vote.m-voted .s-num{display:-webkit-box;display:-ms-flexbox;display:flex}.m-vote.m-voted .s-form-item.s-selected{background:#eee}.m-vote.m-voted .s-submit{display:none}.m-vote .s-title{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#333;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.45333rem;font-weight:400;line-height:1.5;margin:0}.m-vote .s-type{background:#ee1a1a;border-radius:.08rem;color:#fff;font-size:.29333rem;font-weight:400;line-height:.4rem;margin:0 .06667rem 0 0;padding:0 .10667rem}.m-vote .s-form{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.m-vote .s-form,.m-vote .s-form-item{display:-webkit-box;display:-ms-flexbox;display:flex}.m-vote .s-form-item{-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #eee;border-radius:.13333rem;color:#333;justify-content:space-between;margin:.13333rem 0;padding:.13333rem}.m-vote .s-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#fff;border:.02667rem solid #333;border-radius:50%;height:.32rem;line-height:.8rem;margin:.12rem;width:.32rem}.m-vote .s-content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;font-size:.37333rem;line-height:1.5;margin:0 .66667rem 0 .16rem;text-align:left}.m-vote .s-num{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-negative:0;color:#666;display:none;-ms-flex-direction:column;flex-direction:column;flex-shrink:0;font-size:.29333rem;line-height:1.5;text-align:right}.m-vote .s-submit{background:#ee1a1a;border:none;border-radius:1.33333rem;color:#fff;font-size:.4rem;height:.88rem;margin:.4rem auto 0;text-align:center;width:3.2rem}.m-vote .s-info{color:#999;font-size:.32rem}.operate{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin:1.06667rem 0 .8rem}.operate,.operate .operate-share{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.operate .operate-share{-webkit-box-orient:vertical;-webkit-box-direction:normal;color:#666;-ms-flex-direction:column;flex-direction:column;font-size:.37333rem}.operate .operate-share .share-icon{background:#f5f7f9 url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/share.1b731a80ed582f2a26df.png) 50% no-repeat;background-size:.74667rem .74667rem;border-radius:50%;height:1.6rem;margin:0 0 .22667rem;width:1.6rem}.backflow-floating{-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background:#ee1a1a;border-radius:.58667rem;bottom:1.22667rem;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.45333rem;height:1.17333rem;justify-content:center;left:50%;padding:0 .64rem;position:fixed;-webkit-transform:translate(-50%);transform:translate(-50%);z-index:999}.backflow-floating i{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/logo-small.6a69e71772d6dd5466da.png) 50% no-repeat;background-size:100% 100%;display:block;height:.53333rem;margin-right:.16rem;width:.53333rem}.m_clearfix{clear:both;overflow:hidden}.m_a_d_logo{background:url(https://static.ws.126.net/163/frontend/images/ad-logo-0817.png);background-size:100%;bottom:.15rem;height:.23rem;position:absolute;right:.1rem;width:.4rem}.papa-item{position:relative}.papa-item .papa_flag{background:rgba(0,0,0,.5);border-top-right-radius:.15rem;bottom:.2rem;-webkit-box-sizing:border-box;box-sizing:border-box;color:#fff;font-size:.24rem;left:0;padding:1px 6px 1px 2px;position:absolute;text-align:center}.m_papa{font-size:.24rem}.m_papa.s-empty{padding:0}.m_papa .m_papa_img{float:left;height:1.46rem;margin-right:.2rem;overflow:hidden;position:relative;width:2.34rem}.m_papa .m_papa_img img{background:none;display:block;height:100%;-o-object-fit:contain;object-fit:contain;width:100%}.m_papa .m_papa_desc .m_papa_promote{font-size:12px;height:12px;line-height:12px;padding:2px}.m_papa .m_papa_desc .m_papa_time{color:#888;display:inline-block;font-size:.24rem;margin-left:.2rem}.m_papa .m_papa_desc .m_papa_desc_l{float:left}.m_papa .m_papa_info{overflow:hidden}.m_papa .m_papa_info .m_papa_title,.m_papa .m_papa_info a{color:#404040;font-size:.34rem;line-height:.42rem;margin-bottom:.2rem;text-decoration:none}.m_papa_m0 .m_papa_title{color:#404040;font-size:.34rem;margin-bottom:.2rem}.m_papa_m0 .m_papa_img{height:3.45rem;width:100%}.m_papa_m0 .m_papa_promote{border:1px solid #555;border-radius:3px;color:#555;float:right;font-size:.24rem;height:.32rem;line-height:.32rem;padding:2px}.m_papa_m1 .m_papa_title{color:#404040;font-size:.34rem;margin-bottom:.2rem}.m_papa_m1 .m_papa_title .m_papa_promote{border:1px solid #555;float:right;font-size:.24rem;height:12px;line-height:12px;padding:2px}.m_papa_m1 .m_papa_pic{display:block;margin:.22rem 0}.m_papa_m1 .m_papa_pic .m_papa_pic_wrap{-webkit-box-pack:justify;-ms-flex-pack:justify;height:1.46rem;justify-content:space-between;overflow:hidden}.m_papa_m1 .m_papa_pic .m_papa_pic_wrap img{float:left;height:100%;margin-right:1px;-o-object-fit:contain;object-fit:contain;width:33%}.m_papa_m2{background:#eee;border-top:1px solid #e5e5e5;margin:-1px 0 0;width:100%}.m_papa_m2 .m_papa_content{color:#4c9aea;font-size:.34rem}.m_papa_m2 .m_papa_content a,.m_papa_m2 .m_papa_content a:active,.m_papa_m2 .m_papa_content a:focus,.m_papa_m2 .m_papa_content a:visited{color:#4c9aea}.m_papa_m2 .m_papa_promote{border:1px solid #555;float:right;font-size:12px;height:12px;line-height:12px;padding:2px}.m_papa_live .m_papa_img{height:3.45rem}.m_papa_iframe .m_papa_iframe_wrap{height:1.4rem;overflow:hidden;width:6.9rem}.m_papa_iframe iframe{height:100%;width:100%}.m_papa_iframe_photoset .m_papa_iframe_wrap{height:2.44rem;overflow:hidden;width:6.9rem}.m_papa_iframe_photoset iframe{height:100%;width:100%}.m_photoset_square{background:#fff;border:0;-webkit-box-shadow:0 1px 1px #e3e3e3;box-shadow:0 1px 1px #e3e3e3;float:left;margin:.2rem 0 0;padding:0;width:3.35rem}.m_photoset_square .m_photoset_square_img{-webkit-animation:imgload2 1s ease-out;animation:imgload2 1s ease-out;-webkit-animation-duration:1s;-webkit-animation-name:imgload2;-webkit-animation-timing-function:ease-out;float:left;height:auto;overflow:hidden;position:relative;width:100%}.m_photoset_square .m_photoset_square_img img{display:block;min-height:2rem;width:100%}.m_photoset_square.papa_item .m_photoset_square_info .m_photoset_square_title span{display:inline}.m_photoset_square.papa_item .m_photoset_square_info .m_photoset_square_title .m_photoset_square_adflag{background-size:100% 100%;color:#efd469;display:inline-block;font-size:12px;line-height:12px;margin-right:.1rem;padding:2px}.m_photoset_square .m_photoset_square_info{-webkit-box-sizing:border-box;box-sizing:border-box;float:left;padding:.15rem;width:100%}.m_photoset_square .m_photoset_square_info .m_photoset_square_title{color:#555;margin-bottom:.15rem;width:100%}.m_photoset_square .m_photoset_square_info .m_photoset_square_title span{display:block;font-size:.28rem;line-height:.42rem}.m_photoset_square .m_photoset_square_info .m_photoset_square_desc{width:100%}.m_photoset_square .m_photoset_square_info .m_photoset_square_desc .m_photoset_square_desc_l{background-position:left 0;background-repeat:no-repeat;background-size:contain;color:#888;float:left;font-size:.24rem;line-height:.36rem}.m_photoset_square .m_photoset_square_info .m_photoset_square_desc .m_photoset_square_desc_l .iconfont{color:#a8a8a8;display:inline-block;font-size:.28rem;padding:0 .1rem 0 0}.m_photoset_square .m_photoset_square_info .m_photoset_square_desc .m_photoset_square_desc_r{background-position:left 0;background-repeat:no-repeat;background-size:contain;color:#888;float:right;font-size:.24rem;line-height:.36rem}.m_photoset_square .m_photoset_square_info .m_photoset_square_desc .m_photoset_square_desc_r .iconfont{color:#a8a8a8;display:inline-block;font-size:.28rem;padding:0 .1rem 0 0}.m_papa_m2{border-top:0}.m_papa_m2.m_papa{border-bottom:0;padding:0}.m_papa_m2 .m_papa_promote{background-size:100% 100%;border:none;border-radius:3px;color:#555;display:inline-block;font-size:.26rem;height:.37rem;line-height:.37rem;padding:.03rem;position:absolute;right:.3rem;top:.2rem}.m_papa_m1 .m_papa_title,.m_papa_m2 .m_papa_content{line-height:.44rem;width:6.2rem}.m_papa_m1 .m_papa_title .m_papa_promote{border:none;border-radius:3px;position:absolute;right:0;top:.2rem}.m_papa .m_papa_desc .m_papa_promote,.m_papa_m1 .m_papa_title .m_papa_promote{background-size:100% 100%;color:#555;display:inline-block;font-size:.26rem;height:.37rem;line-height:.37rem;padding:.03rem}.m_papa .m_papa_desc .m_papa_promote{border:none}.m_colum_a_d{font-size:.24rem;position:relative}.m_colum_a_d.s_empty{padding:0}.m_colum_a_d .s_img{float:left;margin-right:.2rem;max-height:5.45rem;overflow:hidden;position:relative;width:100%}.m_colum_a_d .s_img img{background:none;display:block;height:100%;-o-object-fit:contain;object-fit:contain;width:100%}.m_colum_a_d .s_title{color:#404040;font-size:.34rem;margin-bottom:.2rem}.m_colum_a_d .m_a_d_source{bottom:.15rem;color:#a3a3a3;font-size:.24rem;position:absolute;right:.1rem}.m_a_d_doc .m_papa_img{float:right;margin-left:.4rem;margin-right:0}.m_a_d_doc .m_a_d_logo{bottom:.1rem;left:.1rem;right:auto}.m_a_d_doc .m_papa_info{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-pack:justify;-ms-flex-pack:justify;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;justify-content:space-between}.m-ltrp{font-size:.24rem;overflow:hidden}.m-ltrp a{color:#333}.m-ltrp .m-ltrp-title{float:left;max-width:40%;min-height:1rem;width:40%}.m-ltrp .m-ltrp-title .s-title{-webkit-box-orient:vertical;-webkit-line-clamp:2;height:.7rem;margin:1px 0 0 3px;overflow:hidden;text-overflow:ellipsis}.m-ltrp .m-ltrp-title .s-source{bottom:1px;color:#999;font-size:.2rem;left:1px;line-height:.28rem;position:absolute}.m-ltrp .m-ltrp-title .s-promote{border:1px solid #999;border-radius:5px;display:inline-block;margin-right:5px;padding:0 5px;-webkit-transform:scale(.8);transform:scale(.8)}.m-ltrp .m-ltrp-img{-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:justify;-ms-flex-pack:justify;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;float:right;font-size:0;justify-content:space-between;width:60%}.m-ltrp .m-ltrp-img img{display:inline-block;width:33%}.m_a_d_card{-webkit-box-align:center;-ms-flex-align:center;align-items:center;background-color:#fcfcfc;border:1px solid #ddd;border-radius:.04rem;display:-webkit-box;display:-ms-flexbox;display:flex;font-family:-apple-system,Hiragino Sans GB,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;padding:.22rem .48rem .23rem .32rem}.m_a_d_card .info{-webkit-box-flex:1;-ms-flex-positive:1;color:#999;flex-grow:1;margin-right:.4rem;width:4.17rem}.m_a_d_card .info,.m_a_d_card .info h3{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.m_a_d_card .info h3{color:#333;font-size:.32rem;line-height:.5rem;margin:.1rem 0 .04rem}.m_a_d_card .info small{font-size:.26rem;line-height:.37rem;max-width:100%}.m_a_d_card .icon-arrow{background:url(https://static.ws.126.net/163/frontend/images/arrow-hdbk.png) no-repeat;background-size:100%;color:#999;font-size:.19rem;height:.3rem;width:.3rem}.m_a_d_card .icon-arrow,.m_a_d_card_img{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.m_a_d_card_img{-webkit-box-pack:center;-ms-flex-pack:center;-ms-flex-negative:0;flex-shrink:0;height:1.1rem;justify-content:center;margin-right:.34rem;width:1.1rem}.m_a_d_card_img img{border-radius:.08rem;height:100%;vertical-align:top;width:100%}@font-face{font-family:swiper-icons;font-style:normal;font-weight:400;src:url(\"data:application/font-woff;charset=utf-8;base64, d09GRgABAAAAAAZgABAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAGRAAAABoAAAAci6qHkUdERUYAAAWgAAAAIwAAACQAYABXR1BPUwAABhQAAAAuAAAANuAY7+xHU1VCAAAFxAAAAFAAAABm2fPczU9TLzIAAAHcAAAASgAAAGBP9V5RY21hcAAAAkQAAACIAAABYt6F0cBjdnQgAAACzAAAAAQAAAAEABEBRGdhc3AAAAWYAAAACAAAAAj//wADZ2x5ZgAAAywAAADMAAAD2MHtryVoZWFkAAABbAAAADAAAAA2E2+eoWhoZWEAAAGcAAAAHwAAACQC9gDzaG10eAAAAigAAAAZAAAArgJkABFsb2NhAAAC0AAAAFoAAABaFQAUGG1heHAAAAG8AAAAHwAAACAAcABAbmFtZQAAA/gAAAE5AAACXvFdBwlwb3N0AAAFNAAAAGIAAACE5s74hXjaY2BkYGAAYpf5Hu/j+W2+MnAzMYDAzaX6QjD6/4//Bxj5GA8AuRwMYGkAPywL13jaY2BkYGA88P8Agx4j+/8fQDYfA1AEBWgDAIB2BOoAeNpjYGRgYNBh4GdgYgABEMnIABJzYNADCQAACWgAsQB42mNgYfzCOIGBlYGB0YcxjYGBwR1Kf2WQZGhhYGBiYGVmgAFGBiQQkOaawtDAoMBQxXjg/wEGPcYDDA4wNUA2CCgwsAAAO4EL6gAAeNpj2M0gyAACqxgGNWBkZ2D4/wMA+xkDdgAAAHjaY2BgYGaAYBkGRgYQiAHyGMF8FgYHIM3DwMHABGQrMOgyWDLEM1T9/w8UBfEMgLzE////P/5//f/V/xv+r4eaAAeMbAxwIUYmIMHEgKYAYjUcsDAwsLKxc3BycfPw8jEQA/gZBASFhEVExcQlJKWkZWTl5BUUlZRVVNXUNTQZBgMAAMR+E+gAEQFEAAAAKgAqACoANAA+AEgAUgBcAGYAcAB6AIQAjgCYAKIArAC2AMAAygDUAN4A6ADyAPwBBgEQARoBJAEuATgBQgFMAVYBYAFqAXQBfgGIAZIBnAGmAbIBzgHsAAB42u2NMQ6CUAyGW568x9AneYYgm4MJbhKFaExIOAVX8ApewSt4Bic4AfeAid3VOBixDxfPYEza5O+Xfi04YADggiUIULCuEJK8VhO4bSvpdnktHI5QCYtdi2sl8ZnXaHlqUrNKzdKcT8cjlq+rwZSvIVczNiezsfnP/uznmfPFBNODM2K7MTQ45YEAZqGP81AmGGcF3iPqOop0r1SPTaTbVkfUe4HXj97wYE+yNwWYxwWu4v1ugWHgo3S1XdZEVqWM7ET0cfnLGxWfkgR42o2PvWrDMBSFj/IHLaF0zKjRgdiVMwScNRAoWUoH78Y2icB/yIY09An6AH2Bdu/UB+yxopYshQiEvnvu0dURgDt8QeC8PDw7Fpji3fEA4z/PEJ6YOB5hKh4dj3EvXhxPqH/SKUY3rJ7srZ4FZnh1PMAtPhwP6fl2PMJMPDgeQ4rY8YT6Gzao0eAEA409DuggmTnFnOcSCiEiLMgxCiTI6Cq5DZUd3Qmp10vO0LaLTd2cjN4fOumlc7lUYbSQcZFkutRG7g6JKZKy0RmdLY680CDnEJ+UMkpFFe1RN7nxdVpXrC4aTtnaurOnYercZg2YVmLN/d/gczfEimrE/fs/bOuq29Zmn8tloORaXgZgGa78yO9/cnXm2BpaGvq25Dv9S4E9+5SIc9PqupJKhYFSSl47+Qcr1mYNAAAAeNptw0cKwkAAAMDZJA8Q7OUJvkLsPfZ6zFVERPy8qHh2YER+3i/BP83vIBLLySsoKimrqKqpa2hp6+jq6RsYGhmbmJqZSy0sraxtbO3sHRydnEMU4uR6yx7JJXveP7WrDycAAAAAAAH//wACeNpjYGRgYOABYhkgZgJCZgZNBkYGLQZtIJsFLMYAAAw3ALgAeNolizEKgDAQBCchRbC2sFER0YD6qVQiBCv/H9ezGI6Z5XBAw8CBK/m5iQQVauVbXLnOrMZv2oLdKFa8Pjuru2hJzGabmOSLzNMzvutpB3N42mNgZGBg4GKQYzBhYMxJLMlj4GBgAYow/P/PAJJhLM6sSoWKfWCAAwDAjgbRAAB42mNgYGBkAIIbCZo5IPrmUn0hGA0AO8EFTQAA\") format(\"woff\")}:root{--swiper-theme-color:#007aff}.swiper{list-style:none;margin-left:auto;margin-right:auto;overflow:hidden;padding:0;position:relative;z-index:1}.swiper-vertical>.swiper-wrapper{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.swiper-wrapper{-webkit-box-sizing:content-box;box-sizing:content-box;display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;position:relative;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;width:100%;z-index:1}.swiper-android .swiper-slide,.swiper-wrapper{-webkit-transform:translateZ(0);transform:translateZ(0)}.swiper-pointer-events{-ms-touch-action:pan-y;touch-action:pan-y}.swiper-pointer-events.swiper-vertical{-ms-touch-action:pan-x;touch-action:pan-x}.swiper-slide{-ms-flex-negative:0;flex-shrink:0;height:100%;position:relative;-webkit-transition-property:-webkit-transform;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;width:100%}.swiper-slide-invisible-blank{visibility:hidden}.swiper-autoheight,.swiper-autoheight .swiper-slide{height:auto}.swiper-autoheight .swiper-wrapper{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-transition-property:height,-webkit-transform;transition-property:height,-webkit-transform;transition-property:transform,height;transition-property:transform,height,-webkit-transform}.swiper-backface-hidden .swiper-slide{-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform:translateZ(0);transform:translateZ(0)}.swiper-3d,.swiper-3d.swiper-css-mode .swiper-wrapper{-webkit-perspective:1200px;perspective:1200px}.swiper-3d .swiper-cube-shadow,.swiper-3d .swiper-slide,.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top,.swiper-3d .swiper-wrapper{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.swiper-3d .swiper-slide-shadow,.swiper-3d .swiper-slide-shadow-bottom,.swiper-3d .swiper-slide-shadow-left,.swiper-3d .swiper-slide-shadow-right,.swiper-3d .swiper-slide-shadow-top{height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:10}.swiper-3d .swiper-slide-shadow{background:rgba(0,0,0,.15)}.swiper-3d .swiper-slide-shadow-left{background-image:-webkit-gradient(linear,right top,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:linear-gradient(270deg,rgba(0,0,0,.5),transparent)}.swiper-3d .swiper-slide-shadow-right{background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(transparent));background-image:linear-gradient(90deg,rgba(0,0,0,.5),transparent)}.swiper-3d .swiper-slide-shadow-top{background-image:-webkit-gradient(linear,left bottom,left top,from(rgba(0,0,0,.5)),to(transparent));background-image:linear-gradient(0deg,rgba(0,0,0,.5),transparent)}.swiper-3d .swiper-slide-shadow-bottom{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.5)),to(transparent));background-image:linear-gradient(180deg,rgba(0,0,0,.5),transparent)}.swiper-css-mode>.swiper-wrapper{-ms-overflow-style:none;overflow:auto;scrollbar-width:none}.swiper-css-mode>.swiper-wrapper::-webkit-scrollbar{display:none}.swiper-css-mode>.swiper-wrapper>.swiper-slide{scroll-snap-align:start start}.swiper-horizontal.swiper-css-mode>.swiper-wrapper{-webkit-scroll-snap-type:x mandatory;-ms-scroll-snap-type:x mandatory;scroll-snap-type:x mandatory}.swiper-vertical.swiper-css-mode>.swiper-wrapper{-webkit-scroll-snap-type:y mandatory;-ms-scroll-snap-type:y mandatory;scroll-snap-type:y mandatory}.swiper-centered>.swiper-wrapper:before{-ms-flex-negative:0;-webkit-box-ordinal-group:10000;-ms-flex-order:9999;content:\"\";flex-shrink:0;order:9999}.swiper-centered.swiper-horizontal>.swiper-wrapper>.swiper-slide:first-child{-webkit-margin-start:var(--swiper-centered-offset-before);margin-inline-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-horizontal>.swiper-wrapper:before{height:100%;width:var(--swiper-centered-offset-after)}.swiper-centered.swiper-vertical>.swiper-wrapper>.swiper-slide:first-child{-webkit-margin-before:var(--swiper-centered-offset-before);margin-block-start:var(--swiper-centered-offset-before)}.swiper-centered.swiper-vertical>.swiper-wrapper:before{height:var(--swiper-centered-offset-after);width:100%}.swiper-centered>.swiper-wrapper>.swiper-slide{scroll-snap-align:center center}pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}\n/*!\n  Theme: GitHub\n  Description: Light theme as seen on github.com\n  Author: github.com\n  Maintainer: @Hirse\n  Updated: 2021-05-15\n\n  Outdated base version: https://github.com/primer/github-syntax-light\n  Current colors taken from GitHub's CSS\n*/.hljs{background:#fff;color:#24292e}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#d73a49}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#6f42c1}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#005cc5}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#032f62}.hljs-built_in,.hljs-symbol{color:#e36209}.hljs-code,.hljs-comment,.hljs-formula{color:#6a737d}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#22863a}.hljs-subst{color:#24292e}.hljs-section{color:#005cc5;font-weight:700}.hljs-bullet{color:#735c0f}.hljs-emphasis{color:#24292e;font-style:italic}.hljs-strong{color:#24292e;font-weight:700}.hljs-addition{background-color:#f0fff4;color:#22863a}.hljs-deletion{background-color:#ffeef0;color:#b31d28}.login-wrap{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:rgba(0,0,0,.5);bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:center;left:0;margin:auto;position:fixed;right:0;top:0;visibility:hidden;z-index:1999}.login-wrap.login-dialog-show{visibility:visible}.login-wrap.login-dialog-forceLogin .login-close{display:none}.login-wrap .login-title{color:#333;font-size:.37333rem;margin:0 0 .26667rem;text-align:center}.login-wrap .login-title strong{font-size:.42667rem}.login-wrap .login-module{background-color:#fff;border-radius:.4rem;max-width:300PX;min-height:6.66667rem;overflow:hidden;padding:20PX 20PX 10PX;position:relative;width:80%}.login-wrap .login-close{color:#666;font-size:.32rem;font-weight:600;padding:.26667rem;position:absolute;z-index:10}.dialog-alert,.login-wrap .login-close{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:center;right:0;top:0}.dialog-alert{background:rgba(0,0,0,.5);bottom:0;left:0;margin:auto;position:fixed;z-index:1499}.dialog-alert .alert-content{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:#fff;border-radius:.42667rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;overflow:hidden;width:8rem}.dialog-alert .alert-content .s-title{color:#333;font-size:.48rem;font-weight:600;margin:.97333rem .53333rem .4rem;text-align:center}.dialog-alert .alert-content .s-subTitle{color:#555;font-size:.42667rem;margin:0 .53333rem .4rem;text-align:center}.dialog-alert .alert-content .s-btn{background:#e64646;border-radius:.46667rem;color:#fff;font-size:.42667rem;height:.93333rem;line-height:.93333rem;margin:.26667rem 0 .4rem;max-width:6.93333rem;min-width:4.8rem;overflow:hidden;padding:0 .26667rem;text-align:center;text-overflow:ellipsis;white-space:nowrap}.dialog-confirm{-webkit-box-pack:center;-ms-flex-pack:center;background:rgba(0,0,0,.5);bottom:0;justify-content:center;left:0;margin:auto;position:fixed;right:0;top:0;z-index:1499}.dialog-confirm,.dialog-confirm .confirm-content{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.dialog-confirm .confirm-content{-webkit-box-orient:vertical;-webkit-box-direction:normal;background:#fff;border-radius:.42667rem;-ms-flex-direction:column;flex-direction:column;overflow:hidden;width:8rem}.dialog-confirm .confirm-content .s-title{color:#333;font-size:.48rem;font-weight:600;margin:.97333rem .53333rem .4rem;text-align:center}.dialog-confirm .confirm-content .s-subTitle{color:#555;font-size:.42667rem;margin:0 .53333rem .4rem;text-align:center}.dialog-confirm .confirm-content .s-btns{display:-webkit-box;display:-ms-flexbox;display:flex;margin:.26667rem 0 .66667rem}.dialog-confirm .confirm-content .s-btn{background:#e64646;border-radius:.46667rem;color:#fff;font-size:.42667rem;height:.93333rem;line-height:.93333rem;margin:0 .26667rem;min-width:2.66667rem;overflow:hidden;padding:0 .26667rem;text-align:center;text-overflow:ellipsis;white-space:nowrap}.dialog-confirm .confirm-content .s-btn.s-btn-2{background:#f5f7f9;color:#333}.login-drawer-wrap{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:rgba(0,0,0,.5);bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:center;left:0;margin:auto;max-width:750PX;position:fixed;right:0;top:0;visibility:hidden;z-index:1999}.login-drawer-wrap.login-drawer-show{visibility:visible}.login-drawer-wrap.login-drawer-show .login-drawer{-webkit-transform:translateX(0);transform:translateX(0)}.login-drawer-wrap .login-drawer{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-box-pack:justify;-ms-flex-pack:justify;background:#fff;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;justify-content:space-between;left:0;max-width:300PX;position:absolute;top:0;-webkit-transform:translateX(-100%);transform:translateX(-100%);-webkit-transition:-webkit-transform .3s linear;transition:-webkit-transform .3s linear;transition:transform .3s linear;transition:transform .3s linear,-webkit-transform .3s linear;width:75%}.login-drawer-wrap .s-holder{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.login-drawer-wrap .s-feedback{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#333;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.4rem;justify-content:center;margin:0 0 .26667rem}.login-drawer-wrap .s-feedback:before{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/feedback.79a4273c047bba72e222.png) 50% no-repeat;background-size:100% 100%;content:\"\";height:.64rem;margin:0 .06667rem 0 0;width:.64rem}.login-drawer-wrap .s-distribution{-ms-flex-item-align:center;align-self:center;margin:0 0 .26667rem;width:90%}.login-drawer-wrap .s-distribution img{width:100%}.login-drawer-wrap .login-drawer-module{background-color:#fff;border-radius:.4rem;max-width:300PX;min-height:6.66667rem;overflow:hidden;padding:20PX 20PX 10PX;position:relative;width:100%}.login-drawer-wrap .login-drawer-user{-webkit-box-orient:vertical;-webkit-box-direction:normal;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding:.66667rem .4rem}.login-drawer-wrap .login-drawer-user .s-avatar-wrap{height:1.86667rem;margin:0 auto;position:relative;width:1.86667rem}.login-drawer-wrap .login-drawer-user .s-avatar-wrap .icon-vip{bottom:0;position:absolute;right:0}.login-drawer-wrap .login-drawer-user .s-avatar{border-radius:50%;height:1.86667rem;width:1.86667rem}.login-drawer-wrap .login-drawer-user .s-nickname{color:#888;font-size:.37333rem;height:.53333rem;line-height:.53333rem;margin:.26667rem auto auto;max-width:5.33333rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.login-drawer-wrap .login-drawer-user .s-duration{color:#888;font-size:.26667rem;height:.53333rem;line-height:.53333rem;margin:auto;max-width:5.33333rem}.login-drawer-wrap .login-drawer-user .s-duration .s-icon-info{background:url(https://static.ws.126.net/163/wap/f2e/hbs/static/media/info.7ae9b5dda0b334947bba.png) 50%/100% 100% no-repeat;display:inline-block;height:.37333rem;margin:0 0 .06667rem .02667rem;vertical-align:bottom;width:.37333rem}.login-drawer-wrap .login-drawer-user .s-duration .icon-arrow{font-size:.18667rem}.login-drawer-wrap .login-drawer-user .s-duration .s-cancelAuto{text-decoration:underline}.login-drawer-wrap .login-drawer-user .s-duration a{color:#888}.login-drawer-wrap .login-drawer-user .s-link{-webkit-box-pack:justify;-ms-flex-pack:justify;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #eee;color:#666;display:-webkit-box;display:-ms-flexbox;display:flex;font-size:.4rem;height:1.2rem;justify-content:space-between}.login-drawer-wrap .login-drawer-user .s-holder{height:.26667rem}.login-drawer-wrap .login-drawer-user .s-text{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin:0 0 0 .53333rem}.login-drawer-wrap .login-drawer-user .icon-email{color:#f33}.login-drawer-wrap .login-drawer-user .icon-talking{color:#f90}.login-drawer-wrap .login-drawer-user .icon-switch{color:#36f}.login-drawer-wrap .login-drawer-user .icon-read{color:#5fa1b3}.toast{-webkit-box-pack:center;-ms-flex-pack:center;bottom:0;display:-webkit-box;display:-ms-flexbox;display:flex;justify-content:center;left:0;margin:auto;pointer-events:none;position:fixed;right:0;z-index:9999}.toast .toast-content{background-color:rgba(0,0,0,.7);border-radius:.13333rem;color:#fff;font-size:.37333rem;margin-bottom:3.2rem;max-width:75%;min-width:0;opacity:0;padding:.06667rem .2rem;-webkit-transition:opacity .1s linear;transition:opacity .1s linear}.toast .toast-content.toast-content-show{opacity:1}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-assets-source-apk/src/main/assets/js/jquery.js",
    "content": "/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license\n//@ sourceMappingURL=jquery.min.map\n*/\n(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f=\"1.10.2\",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,T=/\\S+/g,C=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,N=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,k=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,E=/^[\\],:{}\\s]*$/,S=/(?:^|:|,)(?:\\s*\\[)+/g,A=/\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,j=/\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/g,D=/^-ms-/,L=/-([\\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||\"load\"===e.type||\"complete\"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener(\"DOMContentLoaded\",q,!1),e.removeEventListener(\"load\",q,!1)):(a.detachEvent(\"onreadystatechange\",q),e.detachEvent(\"onload\",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if(\"string\"==typeof e){if(i=\"<\"===e.charAt(0)&&\">\"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:\"\",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for(\"boolean\"==typeof s&&(c=s,s=arguments[1]||{},l=2),\"object\"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:\"jQuery\"+(f+Math.random()).replace(/\\D/g,\"\"),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger(\"ready\").off(\"ready\"))}},isFunction:function(e){return\"function\"===x.type(e)},isArray:Array.isArray||function(e){return\"array\"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?c[y.call(e)]||\"object\":typeof e},isPlainObject:function(e){var n;if(!e||\"object\"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,\"constructor\")&&!v.call(e.constructor.prototype,\"isPrototypeOf\"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||\"string\"!=typeof e)return null;\"boolean\"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:\"string\"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,\"@\").replace(j,\"]\").replace(S,\"\")))?Function(\"return \"+n)():(x.error(\"Invalid JSON: \"+n),t)},parseXML:function(n){var r,i;if(!n||\"string\"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,\"text/xml\")):(r=new ActiveXObject(\"Microsoft.XMLDOM\"),r.async=\"false\",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName(\"parsererror\").length||x.error(\"Invalid XML: \"+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,\"ms-\").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call(\"\\ufeff\\u00a0\")?function(e){return null==e?\"\":b.call(e)}:function(e){return null==e?\"\":(e+\"\").replace(C,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,\"string\"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if(\"number\"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return\"string\"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if(\"object\"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),\"complete\"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener(\"DOMContentLoaded\",q,!1),e.addEventListener(\"load\",q,!1);else{a.attachEvent(\"onreadystatechange\",q),e.attachEvent(\"onload\",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll(\"left\")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"),function(e,t){c[\"[object \"+t+\"]\"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:\"array\"===n||\"function\"!==n&&(0===t||\"number\"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b=\"sizzle\"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",P=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",R=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",W=R.replace(\"w\",\"w#\"),$=\"\\\\[\"+P+\"*(\"+R+\")\"+P+\"*(?:([*^$|!~]?=)\"+P+\"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\"+W+\")|)|)\"+P+\"*\\\\]\",I=\":(\"+R+\")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+$.replace(3,8)+\")*)|.*)\\\\)|)\",z=RegExp(\"^\"+P+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+P+\"+$\",\"g\"),X=RegExp(\"^\"+P+\"*,\"+P+\"*\"),U=RegExp(\"^\"+P+\"*([>+~]|\"+P+\")\"+P+\"*\"),V=RegExp(P+\"*[+~]\"),Y=RegExp(\"=\"+P+\"*([^\\\\]'\\\"]*)\"+P+\"*\\\\]\",\"g\"),J=RegExp(I),G=RegExp(\"^\"+W+\"$\"),Q={ID:RegExp(\"^#(\"+R+\")\"),CLASS:RegExp(\"^\\\\.(\"+R+\")\"),TAG:RegExp(\"^(\"+R.replace(\"w\",\"w*\")+\")\"),ATTR:RegExp(\"^\"+$),PSEUDO:RegExp(\"^\"+I),CHILD:RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+P+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+P+\"*(?:([+-]|)\"+P+\"*(\\\\d+)|))\"+P+\"*\\\\)|)\",\"i\"),bool:RegExp(\"^(?:\"+B+\")$\",\"i\"),needsContext:RegExp(\"^\"+P+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+P+\"*((?:-\\\\d)?\\\\d*)\"+P+\"*\\\\)|)(?=[^-]|$)\",\"i\")},K=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\\d$/i,nt=/'|\\\\/g,rt=RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+P+\"?|(\"+P+\")|.)\",\"ig\"),it=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||\"string\"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&\"object\"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute(\"id\"))?m=d.replace(nt,\"\\\\$&\"):t.setAttribute(\"id\",m),m=\"[id='\"+m+\"'] \",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(\",\")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute(\"id\")}}}return kt(e.replace(z,\"$1\"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=\" \")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement(\"div\");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split(\"|\"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return\"input\"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?\"HTML\"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent(\"onbeforeunload\",function(){p()}),r.attributes=ut(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML=\"<div class='a'></div><div class='a i'></div>\",e.firstChild.className=\"i\",2===e.getElementsByClassName(\"i\").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute(\"id\")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode(\"id\");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML=\"<select><option selected=''></option></select>\",e.querySelectorAll(\"[selected]\").length||g.push(\"\\\\[\"+P+\"*(?:value|\"+B+\")\"),e.querySelectorAll(\":checked\").length||g.push(\":checked\")}),ut(function(e){var t=n.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"t\",\"\"),e.querySelectorAll(\"[t^='']\").length&&g.push(\"[*^$]=\"+P+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\":enabled\").length||g.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),g.push(\",.*:\")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,\"div\"),y.call(e,\"[s!='']:x\"),m.push(\"!=\",I)}),g=g.length&&RegExp(g.join(\"|\")),m=m.length&&RegExp(m.join(\"|\")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,\"='$1']\"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error(\"Syntax error, unrecognized expression: \"+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||\"\").replace(rt,it),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(\")\",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+\" \"];return t||(t=RegExp(\"(^|\"+P+\")\"+e+\"(\"+P+\"|$)\"))&&N(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?\"!=\"===t:t?(i+=\"\",\"=\"===t?i===n:\"!=\"===t?i!==n:\"^=\"===t?n&&0===i.indexOf(n):\"*=\"===t?n&&i.indexOf(n)>-1:\"$=\"===t?n&&i.slice(-n.length)===n:\"~=\"===t?(\" \"+i+\" \").indexOf(n)>-1:\"|=\"===t?i===n||i.slice(0,n.length+1)===n+\"-\":!1):!0}},CHILD:function(e,t,n,r,i){var o=\"nth\"!==e.slice(0,3),a=\"last\"!==e.slice(-4),s=\"of-type\"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?\"nextSibling\":\"previousSibling\",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g=\"only\"===e&&!h&&\"nextSibling\"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error(\"unsupported pseudo: \"+e);return r[b]?r(t):r.length>1?(n=[e,e,\"\",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,\"$1\"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||\"\")||at.error(\"unsupported lang: \"+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+\"-\");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>\"@\"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+\" \"];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z,\" \")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r=\"\";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&\"parentNode\"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+\" \"+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||\"*\",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[\" \"],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:\" \"===e[l-2].type?\"*\":\"\"})).replace(z,\"$1\"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b=\"0\",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG(\"*\",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+\" \"];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&\"ID\"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split(\"\").sort(A).join(\"\")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement(\"div\"))}),ut(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||ct(\"type|href|height|width\",function(e,n,r){return r?t:e.getAttribute(n,\"type\"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||ct(\"value\",function(e,n,r){return r||\"input\"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute(\"disabled\")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[\":\"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e=\"string\"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);\"function\"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&\"string\"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[[\"resolve\",\"done\",x.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",x.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",x.Callbacks(\"memory\")]],n=\"pending\",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+\"With\"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+\"With\"](this===i?r:this,arguments),this},i[o[0]+\"With\"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement(\"div\");if(d.setAttribute(\"className\",\"t\"),d.innerHTML=\"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\",n=d.getElementsByTagName(\"*\")||[],r=d.getElementsByTagName(\"a\")[0],!r||!r.style||!n.length)return t;s=a.createElement(\"select\"),u=s.appendChild(a.createElement(\"option\")),o=d.getElementsByTagName(\"input\")[0],r.style.cssText=\"top:1px;float:left;opacity:.5\",t.getSetAttribute=\"t\"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName(\"tbody\").length,t.htmlSerialize=!!d.getElementsByTagName(\"link\").length,t.style=/top/.test(r.getAttribute(\"style\")),t.hrefNormalized=\"/a\"===r.getAttribute(\"href\"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement(\"form\").enctype,t.html5Clone=\"<:nav></:nav>\"!==a.createElement(\"nav\").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement(\"input\"),o.setAttribute(\"value\",\"\"),t.input=\"\"===o.getAttribute(\"value\"),o.value=\"t\",o.setAttribute(\"type\",\"radio\"),t.radioValue=\"t\"===o.value,o.setAttribute(\"checked\",\"t\"),o.setAttribute(\"name\",\"t\"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent(\"onclick\",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c=\"on\"+f,\"t\"),t[f+\"Bubbles\"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip=\"content-box\",d.cloneNode(!0).style.backgroundClip=\"\",t.clearCloneStyle=\"content-box\"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast=\"0\"!==f,x(function(){var n,r,o,s=\"padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;\",l=a.getElementsByTagName(\"body\")[0];l&&(n=a.createElement(\"div\"),n.style.cssText=\"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\",l.appendChild(n).appendChild(d),d.innerHTML=\"<table><tr><td></td><td>t</td></tr></table>\",o=d.getElementsByTagName(\"td\"),o[0].style.cssText=\"padding:0;margin:0;border:0;display:none\",p=0===o[0].offsetHeight,o[0].style.display=\"\",o[1].style.display=\"none\",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML=\"\",d.style.cssText=\"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition=\"1%\"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable=\"4px\"===(e.getComputedStyle(d,null)||{width:\"4px\"}).width,r=d.appendChild(a.createElement(\"div\")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width=\"0\",d.style.width=\"1px\",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML=\"\",d.style.cssText=s+\"width:1px;padding:1px;display:inline;zoom:1\",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display=\"block\",d.innerHTML=\"<div></div>\",d.firstChild.style.width=\"5px\",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t\n}({});var B=/(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||\"string\"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),(\"object\"==typeof n||\"function\"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),\"string\"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(\" \")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute(\"classid\")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,\"parsedAttrs\"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf(\"data-\")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,\"parsedAttrs\",!0)}return o}return\"object\"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i=\"data-\"+n.replace(P,\"-$1\").toLowerCase();if(r=e.getAttribute(i),\"string\"==typeof r){try{r=\"true\"===r?!0:\"false\"===r?!1:\"null\"===r?null:+r+\"\"===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if((\"data\"!==t||!x.isEmptyObject(e[t]))&&\"toJSON\"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||\"fx\")+\"queue\",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||\"fx\";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks(\"once memory\").add(function(){x._removeData(e,t+\"queue\"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return\"string\"!=typeof e&&(n=e,e=\"fx\",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||\"fx\",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};\"string\"!=typeof e&&(n=e,e=t),e=e||\"fx\";while(s--)r=x._data(a[s],e+\"queueHooks\"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\\t\\r\\n\\f]/g,V=/\\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=\"string\"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||\"\").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(\" \"+n.className+\" \").replace(U,\" \"):\" \")){o=0;while(i=t[o++])0>r.indexOf(\" \"+i+\" \")&&(r+=i+\" \");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||\"string\"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||\"\").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(\" \"+n.className+\" \").replace(U,\" \"):\"\")){o=0;while(i=t[o++])while(r.indexOf(\" \"+i+\" \")>=0)r=r.replace(\" \"+i+\" \",\" \");n.className=e?x.trim(r):\"\"}return this},toggleClass:function(e,t){var n=typeof e;return\"boolean\"==typeof t&&\"string\"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(\"string\"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||\"boolean\"===n)&&(this.className&&x._data(this,\"__className__\",this.className),this.className=this.className||e===!1?\"\":x._data(this,\"__className__\")||\"\")})},hasClass:function(e){var t=\" \"+e+\" \",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(\" \"+this[n].className+\" \").replace(U,\" \").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o=\"\":\"number\"==typeof o?o+=\"\":x.isArray(o)&&(o=x.map(o,function(e){return null==e?\"\":e+\"\"})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&\"set\"in r&&r.set(this,o,\"value\")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&\"get\"in r&&(n=r.get(o,\"value\"))!==t?n:(n=o.value,\"string\"==typeof n?n.replace(V,\"\"):null==n?\"\":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,\"value\");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o=\"select-one\"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute(\"disabled\"))||n.parentNode.disabled&&x.nodeName(n.parentNode,\"optgroup\"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&\"get\"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&\"set\"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+\"\"),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase(\"default-\"+n)]=e[r]=!1:x.attr(e,n,\"\"),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&\"radio\"===t&&x.nodeName(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&\"set\"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&\"get\"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,\"tabindex\");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase(\"default-\"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase(\"default-\"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,\"input\")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+=\"\",\"value\"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&\"\"!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,\"\"===t?!1:t,n)}},x.each([\"width\",\"height\"],function(e,n){x.attrHooks[n]={set:function(e,r){return\"\"===r?(e.setAttribute(n,\"auto\"),r):t}}})),x.support.hrefNormalized||x.each([\"href\",\"src\"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+\"\"}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype=\"encoding\"),x.each([\"radio\",\"checkbox\"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||\"\").match(T)||[\"\"],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||\"\").split(\".\").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(\".\")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent(\"on\"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||\"\").match(T)||[\"\"],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||\"\").split(\".\").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&(\"**\"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,\"events\"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,\"type\")?n.type:n,m=v.call(n,\"namespace\")?n.namespace.split(\".\"):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(\".\")>=0&&(m=g.split(\".\"),g=m.shift(),m.sort()),l=0>g.indexOf(\":\")&&\"on\"+g,n=n[x.expando]?n:new x.Event(g,\"object\"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join(\".\"),n.namespace_re=n.namespace?RegExp(\"(^|\\\\.)\"+m.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,\"events\")||{})[n.type]&&x._data(u,\"handle\"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,\"events\")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||\"click\"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||\"click\"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+\" \",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:\"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:\"focusin\"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:\"focusout\"},click:{trigger:function(){return x.nodeName(this,\"input\")&&\"checkbox\"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,\"a\")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r=\"on\"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,\"form\")?!1:(x.event.add(this,\"click._submit keypress._submit\",function(e){var n=e.target,r=x.nodeName(n,\"input\")||x.nodeName(n,\"button\")?n.form:t;r&&!x._data(r,\"submitBubbles\")&&(x.event.add(r,\"submit._submit\",function(e){e._submit_bubble=!0}),x._data(r,\"submitBubbles\",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate(\"submit\",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,\"form\")?!1:(x.event.remove(this,\"._submit\"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?((\"checkbox\"===this.type||\"radio\"===this.type)&&(x.event.add(this,\"propertychange._change\",function(e){\"checked\"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,\"click._change\",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate(\"change\",this,e,!0)})),!1):(x.event.add(this,\"beforeactivate._change\",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,\"changeBubbles\")&&(x.event.add(t,\"change._change\",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate(\"change\",this.parentNode,e,!0)}),x._data(t,\"changeBubbles\",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||\"radio\"!==n.type&&\"checkbox\"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,\"._change\"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if(\"object\"==typeof e){\"string\"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&(\"string\"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+\".\"+i.namespace:i.origType,i.selector,i.handler),this;if(\"object\"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||\"function\"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\\[\\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if(\"string\"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+\" \"+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,\"string\"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||\"string\"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?\"string\"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n=\"string\"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,\"parentNode\")},parentsUntil:function(e,t,n){return x.dir(e,\"parentNode\",n)},next:function(e){return pt(e,\"nextSibling\")},prev:function(e){return pt(e,\"previousSibling\")},nextAll:function(e){return x.dir(e,\"nextSibling\")},prevAll:function(e){return x.dir(e,\"previousSibling\")},nextUntil:function(e,t,n){return x.dir(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return x.dir(e,\"previousSibling\",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,\"iframe\")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if(\"string\"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split(\"|\"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht=\"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",gt=/ jQuery\\d+=\"(?:null|\\d+)\"/g,mt=RegExp(\"<(?:\"+ht+\")[\\\\s/>]\",\"i\"),yt=/^\\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,bt=/<([\\w:]+)/,xt=/<tbody/i,wt=/<|&#?\\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\\s*(?:[^=]|=\\s*.checked.)/i,kt=/^$|\\/(?:java|ecma)script/i,Et=/^true\\/(.*)/,St=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,At={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],area:[1,\"<map>\",\"</map>\"],param:[1,\"<object>\",\"</object>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:x.support.htmlSerialize?[0,\"\",\"\"]:[1,\"X<div>\",\"</div>\"]},jt=dt(a),Dt=jt.appendChild(a.createElement(\"div\"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,\"script\")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,\"select\")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,\"\"):t;if(!(\"string\"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||[\"\",\"\"])[1].toLowerCase()])){e=e.replace(vt,\"<$1></$2>\");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||\"string\"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,\"script\"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,\"script\"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||\"\")&&!x._data(i,\"globalEval\")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||\"\").replace(St,\"\")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,\"table\")&&x.nodeName(1===t.nodeType?t:t.firstChild,\"tr\")?e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\")):e}function Ht(e){return e.type=(null!==x.find.attr(e,\"type\"))+\"/\"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute(\"type\"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,\"globalEval\",!t||x._data(t[r],\"globalEval\"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}\"script\"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):\"object\"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):\"input\"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):\"option\"===n?t.defaultSelected=t.selected=e.defaultSelected:(\"input\"===n||\"textarea\"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||\"*\"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||\"*\"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test(\"<\"+e.nodeName+\">\")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,\"script\"),r.length>0&&_t(r,!l&&Ft(e,\"script\")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if(\"object\"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement(\"div\")),l=(bt.exec(o)||[\"\",\"\"])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,\"<$1></$2>\")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o=\"table\"!==l||xt.test(o)?\"<table>\"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],\"tbody\")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent=\"\";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,\"input\"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),\"script\"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||\"\")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);\nu[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:\"GET\",dataType:\"script\",async:!1,global:!1,\"throws\":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,\"body\")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\\([^)]*\\)/i,It=/opacity\\s*=\\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp(\"^(\"+w+\")(.*)$\",\"i\"),Yt=RegExp(\"^(\"+w+\")(?!px)[a-z%]+$\",\"i\"),Jt=RegExp(\"^([+-])=(\"+w+\")\",\"i\"),Gt={BODY:\"block\"},Qt={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Kt={letterSpacing:0,fontWeight:400},Zt=[\"Top\",\"Right\",\"Bottom\",\"Left\"],en=[\"Webkit\",\"O\",\"Moz\",\"ms\"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,\"none\"===x.css(e,\"display\")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,\"olddisplay\"),n=r.style.display,t?(o[a]||\"none\"!==n||(r.style.display=\"\"),\"\"===r.style.display&&nn(r)&&(o[a]=x._data(r,\"olddisplay\",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&\"none\"!==n||!i)&&x._data(r,\"olddisplay\",i?n:x.css(r,\"display\"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&\"none\"!==r.style.display&&\"\"!==r.style.display||(r.style.display=t?o[a]||\"\":\"none\"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":x.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&\"get\"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,\"string\"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a=\"number\"),!(null==r||\"number\"===a&&isNaN(r)||(\"number\"!==a||x.cssNumber[l]||(r+=\"px\"),x.support.clearCloneStyle||\"\"!==r||0!==n.indexOf(\"background\")||(u[n]=\"inherit\"),s&&\"set\"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&\"get\"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),\"normal\"===a&&n in Kt&&(a=Kt[n]),\"\"===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(\"\"!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left=\"fontSize\"===n?\"1em\":l,l=u.pixelLeft+\"px\",u.left=i,a&&(o.left=a)),\"\"===l?\"auto\":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||\"px\"):t}function an(e,t,n,r,i){var o=n===(r?\"border\":\"content\")?4:\"width\"===t?1:0,a=0;for(;4>o;o+=2)\"margin\"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?(\"content\"===n&&(a-=x.css(e,\"padding\"+Zt[o],!0,i)),\"margin\"!==n&&(a-=x.css(e,\"border\"+Zt[o]+\"Width\",!0,i))):(a+=x.css(e,\"padding\"+Zt[o],!0,i),\"padding\"!==n&&(a+=x.css(e,\"border\"+Zt[o]+\"Width\",!0,i)));return a}function sn(e,t,n){var r=!0,i=\"width\"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&\"border-box\"===x.css(e,\"boxSizing\",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?\"border\":\"content\"),r,o)+\"px\"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),\"none\"!==n&&n||(Pt=(Pt||x(\"<iframe frameborder='0' width='0' height='0'/>\").css(\"cssText\",\"display:block !important\")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write(\"<!doctype html><html><body>\"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],\"display\");return n.remove(),r}x.each([\"height\",\"width\"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,\"display\"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&\"border-box\"===x.css(e,\"boxSizing\",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||\"\")?.01*parseFloat(RegExp.$1)+\"\":t?\"1\":\"\"},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?\"alpha(opacity=\"+100*t+\")\":\"\",o=r&&r.filter||n.filter||\"\";n.zoom=1,(t>=1||\"\"===t)&&\"\"===x.trim(o.replace($t,\"\"))&&n.removeAttribute&&(n.removeAttribute(\"filter\"),\"\"===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+\" \"+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:\"inline-block\"},Wt,[e,\"marginRight\"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each([\"top\",\"left\"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+\"px\":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&\"none\"===(e.style&&e.style.display||x.css(e,\"display\"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\\[\\]$/,fn=/\\r?\\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,\"elements\");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(\":disabled\")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,\"\\r\\n\")}}):{name:t.name,value:n.replace(fn,\"\\r\\n\")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?\"\":t,i[i.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join(\"&\").replace(cn,\"+\")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+\"[\"+(\"object\"==typeof i?t:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==x.type(t))r(e,t);else for(i in t)gn(e+\"[\"+i+\"]\",t[i],n,r)}x.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}});var mn,yn,vn=x.now(),bn=/\\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\\/\\//,En=/^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn=\"*/\".concat(\"*\");try{yn=o.href}catch(Ln){yn=a.createElement(\"a\"),yn.href=\"\",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return\"string\"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o[\"*\"]&&s(\"*\")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if(\"string\"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(\" \");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&\"object\"==typeof n&&(a=\"POST\"),s.length>0&&x.ajax({url:e,type:a,dataType:\"html\",data:n}).done(function(e){o=arguments,s.html(i?x(\"<div>\").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:\"GET\",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Dn,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":x.parseJSON,\"text xml\":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){\"object\"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks(\"once memory\"),m=p.statusCode||{},y={},v={},b=0,w=\"canceled\",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+\"\").replace(xn,\"\").replace(kn,mn[1]+\"//\"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||\"*\").toLowerCase().match(T)||[\"\"],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||(\"http:\"===r[1]?\"80\":\"443\"))===(mn[3]||(\"http:\"===mn[1]?\"80\":\"443\")))),p.data&&p.processData&&\"string\"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger(\"ajaxStart\"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?\"&\":\"?\")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,\"$1_=\"+vn++):o+(bn.test(o)?\"&\":\"?\")+\"_=\"+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader(\"If-Modified-Since\",x.lastModified[o]),x.etag[o]&&C.setRequestHeader(\"If-None-Match\",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader(\"Content-Type\",p.contentType),C.setRequestHeader(\"Accept\",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+(\"*\"!==p.dataTypes[0]?\", \"+Dn+\"; q=0.01\":\"\"):p.accepts[\"*\"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w=\"abort\";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger(\"ajaxSend\",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort(\"timeout\")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,\"No Transport\");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||\"\",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader(\"Last-Modified\"),T&&(x.lastModified[o]=T),T=C.getResponseHeader(\"etag\"),T&&(x.etag[o]=T)),204===e||\"HEAD\"===p.type?N=\"nocontent\":304===e?N=\"notmodified\":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N=\"error\",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+\"\",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?\"ajaxSuccess\":\"ajaxError\",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger(\"ajaxComplete\",[C,p]),--x.active||x.event.trigger(\"ajaxStop\")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,\"json\")},getScript:function(e,n){return x.get(e,t,n,\"script\")}}),x.each([\"get\",\"post\"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader(\"Content-Type\"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+\" \"+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if(\"*\"===o)o=l;else if(\"*\"!==l&&l!==o){if(a=u[l+\" \"+o]||u[\"* \"+o],!a)for(i in u)if(s=i.split(\" \"),s[1]===o&&(a=u[l+\" \"+s[0]]||u[\"* \"+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(p){return{state:\"parsererror\",error:a?p:\"No conversion from \"+l+\" to \"+o}}}return{state:\"success\",data:t}}x.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/(?:java|ecma)script/},converters:{\"text script\":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter(\"script\",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\",e.global=!1)}),x.ajaxTransport(\"script\",function(e){if(e.crossDomain){var n,r=a.head||x(\"head\")[0]||a.documentElement;return{send:function(t,i){n=a.createElement(\"script\"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,\"success\"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\\?(?=&|$)|\\?\\?/;x.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Fn.pop()||x.expando+\"_\"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter(\"json jsonp\",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?\"url\":\"string\"==typeof n.data&&!(n.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Bn.test(n.data)&&\"data\");return l||\"jsonp\"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,\"$1\"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?\"&\":\"?\")+n.jsonp+\"=\"+o),n.converters[\"script json\"]=function(){return s||x.error(o+\" was not called\"),s[0]},n.dataTypes[0]=\"json\",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),\"script\"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&\"withCredentials\"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),\"string\"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=\"\"}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp(\"^(?:([+-])=|)(\"+w+\")([a-z%]*)$\",\"i\"),Jn=/queueHooks$/,Gn=[nr],Qn={\"*\":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?\"\":\"px\"),a=(x.cssNumber[e]||\"px\"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||\".5\",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn[\"*\"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&\"expand\"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=[\"*\"]):e=e.split(\" \");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,\"fxshow\");n.queue||(s=x._queueHooks(e,\"fx\"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,\"fx\").length||s.empty.fire()})})),1===e.nodeType&&(\"height\"in t||\"width\"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],\"inline\"===x.css(e,\"display\")&&\"none\"===x.css(e,\"float\")&&(x.support.inlineBlockNeedsLayout&&\"inline\"!==ln(e.nodeName)?p.zoom=1:p.display=\"inline-block\")),n.overflow&&(p.overflow=\"hidden\",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||\"toggle\"===i,i===(f?\"hide\":\"show\"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?\"hidden\"in d&&(f=d.hidden):d=x._data(e,\"fxshow\",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,\"fxshow\");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start=\"width\"===r||\"height\"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||\"swing\",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?\"\":\"px\")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,\"\"),t&&\"auto\"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,\"finish\"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return\"string\"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,n=null!=e&&e+\"queueHooks\",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||\"fx\"),this.each(function(){var t,n=x._data(this),r=n[e+\"queue\"],i=n[e+\"queueHooks\"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r[\"margin\"+n]=r[\"padding\"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir(\"show\"),slideUp:ir(\"hide\"),slideToggle:ir(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&\"object\"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:\"number\"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,\"position\");\"static\"===r&&(e.style.position=\"relative\");var i=x(e),o=i.offset(),a=x.css(e,\"top\"),s=x.css(e,\"left\"),l=(\"absolute\"===r||\"fixed\"===r)&&x.inArray(\"auto\",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),\"using\"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return\"fixed\"===x.css(r,\"position\")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],\"html\")||(n=e.offset()),n.top+=x.css(e[0],\"borderTopWidth\",!0),n.left+=x.css(e[0],\"borderLeftWidth\",!0)),{top:t.top-n.top-x.css(r,\"marginTop\",!0),left:t.left-n.left-x.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,\"html\")&&\"static\"===x.css(e,\"position\"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:\"height\",Width:\"width\"},function(e,n){x.each({padding:\"inner\"+e,content:n,\"\":\"outer\"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||\"boolean\"!=typeof i),s=r||(i===!0||o===!0?\"margin\":\"border\");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement[\"client\"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body[\"scroll\"+e],o[\"scroll\"+e],n.body[\"offset\"+e],o[\"offset\"+e],o[\"client\"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,\"object\"==typeof module&&module&&\"object\"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return x}))})(window);\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-assets-source-apk/src/main/assets/js/jquery.lazyload.js",
    "content": "\n(function($, window, document, undefined) {\n    var $window = $(window);\n\n    $.fn.lazyload = function(options) {\n        var elements = this;\n        var $container;\n        var settings = {\n            threshold       : 0,\n            failure_limit   : 0,\n            event           : \"scroll\",\n            effect          : \"show\",\n            container       : window,\n            data_attribute  : \"original\",\n            skip_invisible  : true,\n            appear          : null,\n            load            : null,\n            placeholder     : \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC\"\n        };\n\n        function update() {\n            var counter = 0;\n\n            elements.each(function() {\n                var $this = $(this);\n                if (settings.skip_invisible && !$this.is(\":visible\")) {\n                    return;\n                }\n                if ($.abovethetop(this, settings) ||\n                    $.leftofbegin(this, settings)) {\n                        /* Nothing. */\n                } else if (!$.belowthefold(this, settings) &&\n                    !$.rightoffold(this, settings)) {\n                        $this.trigger(\"appear\");\n                        /* if we found an image we'll load, reset the counter */\n                        counter = 0;\n                } else {\n                    if (++counter > settings.failure_limit) {\n                        return false;\n                    }\n                }\n            });\n\n        }\n\n        if(options) {\n            /* Maintain BC for a couple of versions. */\n            if (undefined !== options.failurelimit) {\n                options.failure_limit = options.failurelimit;\n                delete options.failurelimit;\n            }\n            if (undefined !== options.effectspeed) {\n                options.effect_speed = options.effectspeed;\n                delete options.effectspeed;\n            }\n\n            $.extend(settings, options);\n        }\n\n        /* Cache container as jQuery as object. */\n        $container = (settings.container === undefined ||\n                      settings.container === window) ? $window : $(settings.container);\n\n        /* Fire one scroll event per scroll. Not one scroll event per image. */\n        if (0 === settings.event.indexOf(\"scroll\")) {\n            $container.bind(settings.event, function() {\n                return update();\n            });\n        }\n\n        this.each(function() {\n            var self = this;\n            var $self = $(self);\n\n            self.loaded = false;\n\n            /* If no src attribute given use data:uri. */\n            if ($self.attr(\"src\") === undefined || $self.attr(\"src\") === false) {\n                if ($self.is(\"img\")) {\n                    $self.attr(\"src\", settings.placeholder);\n                }\n            }\n\n            /* When appear is triggered load original image. */\n            $self.one(\"appear\", function() {\n                if (!this.loaded) {\n                    if (settings.appear) {\n                        var elements_left = elements.length;\n                        settings.appear.call(self, elements_left, settings);\n                    }\n                    $(\"<img />\")\n                        .bind(\"load\", function() {\n\n                            var original = $self.attr(\"data-\" + settings.data_attribute);\n                            $self.hide();\n                            if ($self.is(\"img\")) {\n                                $self.attr(\"src\", original);\n                            } else {\n                                $self.css(\"background-image\", \"url('\" + original + \"')\");\n                            }\n                            $self[settings.effect](settings.effect_speed);\n\n                            self.loaded = true;\n\n                            /* Remove image from array so it is not looped next time. */\n                            var temp = $.grep(elements, function(element) {\n                                return !element.loaded;\n                            });\n                            elements = $(temp);\n\n                            if (settings.load) {\n                                var elements_left = elements.length;\n                                settings.load.call(self, elements_left, settings);\n                            }\n                        })\n                        .attr(\"src\", $self.attr(\"data-\" + settings.data_attribute));\n                }\n            });\n\n            /* When wanted event is triggered load original image */\n            /* by triggering appear.                              */\n            if (0 !== settings.event.indexOf(\"scroll\")) {\n                $self.bind(settings.event, function() {\n                    if (!self.loaded) {\n                        $self.trigger(\"appear\");\n                    }\n                });\n            }\n        });\n\n        /* Check if something appears when window is resized. */\n        $window.bind(\"resize\", function() {\n            update();\n        });\n\n        /* With IOS5 force loading images when navigating with back button. */\n        /* Non optimal workaround. */\n        if ((/(?:iphone|ipod|ipad).*os 5/gi).test(navigator.appVersion)) {\n            $window.bind(\"pageshow\", function(event) {\n                if (event.originalEvent && event.originalEvent.persisted) {\n                    elements.each(function() {\n                        $(this).trigger(\"appear\");\n                    });\n                }\n            });\n        }\n\n        /* Force initial check if images should appear. */\n        $(document).ready(function() {\n            update();\n        });\n\n        return this;\n    };\n\n    /* Convenience methods in jQuery namespace.           */\n    /* Use as  $.belowthefold(element, {threshold : 100, container : window}) */\n\n    $.belowthefold = function(element, settings) {\n        var fold;\n\n        if (settings.container === undefined || settings.container === window) {\n            fold = (window.innerHeight ? window.innerHeight : $window.height()) + $window.scrollTop();\n        } else {\n            fold = $(settings.container).offset().top + $(settings.container).height();\n        }\n\n        return fold <= $(element).offset().top - settings.threshold;\n    };\n\n    $.rightoffold = function(element, settings) {\n        var fold;\n\n        if (settings.container === undefined || settings.container === window) {\n            fold = $window.width() + $window.scrollLeft();\n        } else {\n            fold = $(settings.container).offset().left + $(settings.container).width();\n        }\n\n        return fold <= $(element).offset().left - settings.threshold;\n    };\n\n    $.abovethetop = function(element, settings) {\n        var fold;\n\n        if (settings.container === undefined || settings.container === window) {\n            fold = $window.scrollTop();\n        } else {\n            fold = $(settings.container).offset().top;\n        }\n\n        return fold >= $(element).offset().top + settings.threshold  + $(element).height();\n    };\n\n    $.leftofbegin = function(element, settings) {\n        var fold;\n\n        if (settings.container === undefined || settings.container === window) {\n            fold = $window.scrollLeft();\n        } else {\n            fold = $(settings.container).offset().left;\n        }\n\n        return fold >= $(element).offset().left + settings.threshold + $(element).width();\n    };\n\n    $.inviewport = function(element, settings) {\n         return !$.rightoffold(element, settings) && !$.leftofbegin(element, settings) &&\n                !$.belowthefold(element, settings) && !$.abovethetop(element, settings);\n     };\n\n    /* Custom selectors for your convenience.   */\n    /* Use as $(\"img:below-the-fold\").something() or */\n    /* $(\"img\").filter(\":below-the-fold\").something() which is faster */\n\n    $.extend($.expr[\":\"], {\n        \"below-the-fold\" : function(a) { return $.belowthefold(a, {threshold : 0}); },\n        \"above-the-top\"  : function(a) { return !$.belowthefold(a, {threshold : 0}); },\n        \"right-of-screen\": function(a) { return $.rightoffold(a, {threshold : 0}); },\n        \"left-of-screen\" : function(a) { return !$.rightoffold(a, {threshold : 0}); },\n        \"in-viewport\"    : function(a) { return $.inviewport(a, {threshold : 0}); },\n        /* Maintain BC for couple of versions. */\n        \"above-the-fold\" : function(a) { return !$.belowthefold(a, {threshold : 0}); },\n        \"right-of-fold\"  : function(a) { return $.rightoffold(a, {threshold : 0}); },\n        \"left-of-fold\"   : function(a) { return !$.rightoffold(a, {threshold : 0}); }\n    });\n\n})(jQuery, window, document);\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/.gitignore",
    "content": "/build\n/.gradle"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n    alias(libs.plugins.kotlin.kapt)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.sample.library\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n    kapt {\n        generateStubs = true\n    }\n}\n\ndependencies {\n    implementation project(':maven-wgllss-dynamic-host-skin-resource-lib')\n    compileOnly project(':Maven-Wgllss-Dynamic-Plugin-Common-Library')\n    compileOnly project(':maven-wgllss-common-re-library')\n    compileOnly project(':maven-wgllss-business-re-library')\n\n    compileOnly libs.androidx.core.ktx\n    compileOnly libs.androidx.lifecycle.runtime.ktx\n    compileOnly libs.androidx.lifecycle.livedata.ktx\n    compileOnly libs.androidx.lifecycle.viewmodel.ktx\n//    compileOnly libs.androidx.activity.ktx\n//    compileOnly libs.androidx.fragment.ktx\n\n    compileOnly libs.org.jsoup.jsoup\n    compileOnly libs.squareup.retrofit\n    compileOnly libs.com.squareup.okhttp3.logging.interceptor\n    compileOnly libs.okhttp3.okhttp\n    compileOnly libs.okio\n    compileOnly libs.converter.gson\n    compileOnly libs.converter.scalars\n\n    compileOnly libs.mmkv\n    compileOnly libs.palette.ktx\n    //room 数据库\n    compileOnly libs.glide\n    compileOnly libs.room.runtime\n    kapt libs.room.compiler\n\n    compileOnly libs.exoplayer.core\n//    compileOnly libs.exoplayer.ui\n    compileOnly libs.google.extension.mediasession\n\n    compileOnly libs.androidx.legacy.legacy.support.v44\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_business_lib.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_business_lib_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_business_lib_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.library\">\n\n    <uses-permission android:name=\"android.permission.POST_NOTIFICATIONS\" />\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/data/ImgExtraData.kt",
    "content": "package com.wgllss.sample.data\n\ndata class ImgExtraData(val imgsrc: String)\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/data/NewsBean.kt",
    "content": "package com.wgllss.sample.data\n\nimport com.wgllss.sample.feature_system.untils.UUIDHelp\n\ndata class NewsBean(\n    val source: String,\n    val docid: String,\n    val title: String,\n    val commentCount: Int,\n    val imgsrc3gtype: Int,\n    val imgsrc: String,\n    val url: String,\n    val ptime: String,\n    val imgextra: MutableList<ImgExtraData>\n) {\n    inline val id: Long\n        get() = UUIDHelp.getUUID(title, source, imgsrc3gtype.toString(), ptime)\n}\n\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/data/SampleItemBean.kt",
    "content": "package com.wgllss.sample.data\n\ndata class SampleItemBean(val id: Int, val itemName: String)"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/datasource/net/HeaderInterceptor.kt",
    "content": "package com.wgllss.sample.datasource.net\n\nimport okhttp3.Interceptor\nimport okhttp3.Request\nimport okhttp3.Response\nimport java.io.IOException\n\nclass HeaderInterceptor : Interceptor {\n\n    @Throws(IOException::class)\n    override fun intercept(chain: Interceptor.Chain): Response {\n        val request: Request = chain.request()\n        val authorised = request\n            .newBuilder()\n            .addHeader(\"Connection\", \"keep-alive\") //\n            .addHeader(\"Accept-Language\", \"zh-CN,zh;q=0.9\") //\n            .addHeader(\"Upgrade-insecure-Requests\", \"1\") //\n        if (request.header(\"User-Agent\") == null) {\n            authorised.addHeader(\"User-Agent\", \"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36\") //\n        }\n        return chain.proceed(authorised.build())\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/datasource/net/MyApi.kt",
    "content": "package com.wgllss.sample.datasource.net\n\nimport retrofit2.http.*\n\n/**\n * http://3g.163.com/touch/reconstruct/article/list/BA10TA81wangning/10-20.html?size=0&hasad=10\n *\n * http://3g.163.com/touch/reconstruct/article/list/BBM54PGAwangning/0-10.html?size=0&hasad=0\n * http://3g.163.com/touch/reconstruct/article/list/BA10TA81wangning/0-10.html?size=0&hasad=0\n * http://3g.163.com/touch/reconstruct/article/list/BA8E6OEOwangning/0-10.html?size=0&hasad=0\n * http://3g.163.com/touch/reconstruct/article/list/BA8F6ICNwangning/0-10.html?size=0&hasad=0\n * http://3g.163.com/touch/reconstruct/article/list/BA8EE5GMwangning/0-10.html?size=0&hasad=0\n * http://3g.163.com/touch/reconstruct/article/list/BA8DOPCSwangning/0-10.html?size=0&hasad=0\n * http://3g.163.com/touch/reconstruct/article/list/BAI67OGGwangning/0-10.html?size=0&hasad=0\n * http://3g.163.com/touch/reconstruct/article/list/BA8D4A3Rwangning/0-10.html?size=0&hasad=0\n * http://3g.163.com/touch/reconstruct/article/list/BAI6I0O5wangning/0-10.html?size=0&hasad=0\n */\ninterface MyApi {\n\n    @GET(\"http://3g.163.com/touch/reconstruct/article/list/{path}/{start}-{end}.html?\")\n    suspend fun getNetTabInfo(@Path(\"path\") path: String, @Path(\"start\") start: String, @Path(\"end\") end: String, @Query(\"hasad\") hasad: Int, @Query(\"size\") size: Int = 0): String\n\n    @GET\n    suspend fun getNewsDetailInfo(@Url url: String, @Header(\"User-Agent\") user_Agent: String = \"Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0.3 Mobile/15E148 Safari/604.1\"): String\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/datasource/net/RetrofitUtils.kt",
    "content": "package com.wgllss.sample.datasource.net\n\nimport android.content.Context\nimport okhttp3.Cache\nimport okhttp3.OkHttpClient\nimport okhttp3.logging.HttpLoggingInterceptor\nimport retrofit2.Retrofit\nimport retrofit2.converter.scalars.ScalarsConverterFactory\nimport java.util.concurrent.TimeUnit\n\nclass RetrofitUtils private constructor(val context: Context) {\n\n    companion object {\n        const val base_url = \"http://3g.163.com/\"\n\n        @Volatile\n        private var instance: RetrofitUtils? = null\n\n        fun getInstance(context: Context) = instance ?: synchronized(this) {\n            instance ?: RetrofitUtils(context).also { instance = it }\n        }\n    }\n\n    private inline val retrofit: Retrofit\n        get() {\n            val logging = HttpLoggingInterceptor().apply {\n                level = HttpLoggingInterceptor.Level.BODY\n            }\n            val timeout = 30000L\n            val okHttpClient = OkHttpClient.Builder()\n                .addInterceptor(HeaderInterceptor())\n                .addInterceptor(logging)\n//            .addInterceptor(RetrofitClient.BaseUrlInterceptor())\n                .callTimeout(timeout, TimeUnit.MILLISECONDS)\n                //设置连接超时\n                .connectTimeout(timeout, TimeUnit.MILLISECONDS)\n                //设置从主机读信息超时\n                .readTimeout(timeout, TimeUnit.MILLISECONDS)\n                //设置写信息超时\n                .writeTimeout(timeout, TimeUnit.MILLISECONDS)\n                .retryOnConnectionFailure(true)//设置出现错误进行重新连接。\n                .cache(Cache(context.cacheDir, 50 * 1024 * 1024)) //10M cache\n                .build();\n            return Retrofit.Builder()\n                .client(okHttpClient)\n                .addConverterFactory(ScalarsConverterFactory.create())\n                .baseUrl(base_url)\n                .build()\n        }\n\n    fun <T> create(service: Class<T>?): T {\n        if (service == null) {\n            throw RuntimeException(\"Api service is null!\")\n        }\n        return retrofit?.create(service)!!\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/datasource/repository/NewsRepository.kt",
    "content": "package com.wgllss.sample.datasource.repository\n\nimport android.content.Context\nimport com.google.gson.Gson\nimport com.google.gson.reflect.TypeToken\nimport com.wgllss.sample.data.NewsBean\nimport com.wgllss.sample.datasource.net.MyApi\nimport com.wgllss.sample.datasource.net.RetrofitUtils\nimport com.wgllss.sample.feature_system.room.CollectDataBase\nimport com.wgllss.sample.feature_system.room.help.RoomDBMigration\nimport com.wgllss.sample.feature_system.room.table.CollectTableBean\nimport com.wgllss.sample.feature_system.savestatus.MMKVHelp\nimport kotlinx.coroutines.flow.flow\nimport okio.buffer\nimport okio.sink\nimport okio.source\nimport org.jsoup.Jsoup\nimport java.io.File\n\nclass NewsRepository private constructor(private val context: Context) {\n\n    private val apiL by lazy { RetrofitUtils.getInstance(context).create(MyApi::class.java) }\n    private val collectDataBaseL by lazy { CollectDataBase.getInstance(context, RoomDBMigration.instance) }\n\n    companion object {\n\n        @Volatile\n        private var instance: NewsRepository? = null\n\n        fun getInstance(context: Context) = instance ?: synchronized(this) {\n            instance ?: NewsRepository(context).also { instance = it }\n        }\n    }\n\n    suspend fun getNetTabInfo(path: String, start: Int, end: Int) = flow {\n        val str = apiL.getNetTabInfo(path, start.toString(), end.toString(), start).let {\n            it.substring(9, it.length - 1)\n        }\n        val map = Gson().fromJson<MutableMap<String, MutableList<NewsBean>>>(str, object : TypeToken<Map<String, MutableList<NewsBean>>>() {}.type)\n        emit(map[path]!!)\n        if (start == 0 && \"BAI6I0O5wangning\" == path) {\n            MMKVHelp.saveHomeTab1Data(str)\n        }\n    }\n\n    suspend fun getNewsDetailInfo(id: String, fileName: String) = flow {\n        val dir = \"down_dir\"\n        val file = File(StringBuilder(context.filesDir.absolutePath).append(File.separator).append(dir).append(File.separator).append(fileName).toString())\n        if (!file.exists()) {\n            File(file.parent).takeUnless { it.exists() }?.run { mkdirs() }\n            val html = apiL.getNewsDetailInfo(\"https://3g.163.com/all/article/${id}.html#offset=1\")\n            val document = Jsoup.parse(html, \"https://3g.163.com/\")\n            document.select(\"script\").remove()\n            document.select(\".main-openApp\").remove()\n            document.select(\".operate\").remove()\n            document.select(\".js-open-app\").remove()\n            document.select(\".comment\").remove()\n            document.select(\".recommend\").remove()\n            document.select(\"head\")?.append(\"<script type=\\\"text/javascript\\\" src=\\\"../js/jquery.js\\\"></script>\")\n            document.select(\"head\")?.append(\"<script type=\\\"text/javascript\\\" src=\\\"../js/jquery.lazyload.js\\\"></script>\")\n            document.select(\"head\")?.append(\"<script> function loadImage(){setTimeout(function (){\\$(\\\"img.lazy\\\").lazyload();window.scrollTo('0','1');window.scrollTo('1','0');}, 300);}</script>\")\n\n            val lint = document.select(\"link\")\n            lint?.forEach {\n                val link = it?.attr(\"abs:href\")\n                if (link != null && link!!.contains(\"0ccc5aad.js\")) {\n                    it.remove()\n                }\n            }\n\n            val figure = document.select(\"figure\")\n            figure?.forEach {\n                it.select(\"div\")?.takeIf { d ->\n                    d.size > 1\n                }?.get(1)?.remove()\n            }\n            val nav = document.select(\"header\")\n            nav?.remove()\n\n            val newHtml = document.html()\n                .replace(\"image-lazy image-error\", \"lazy\")\n                .replace(\"data-src\", \"data-original\")\n                .replace(\"image-lazy image-reload\", \"lazy\")\n\n            val inputStream = newHtml.byteInputStream()\n            if (inputStream != null) {\n                val sinkBuffer = file.sink().buffer()\n                val bufferedSource = inputStream.source().buffer()\n                sinkBuffer.write(bufferedSource.readByteArray())\n                sinkBuffer.close()\n                bufferedSource.close()\n                inputStream.close()\n            }\n        }\n        emit(StringBuilder().append(\"file:///\").append(file.absolutePath).toString())\n    }\n\n    suspend fun addToCollection(it: NewsBean) = flow {\n        it.run {\n            val count = collectDataBaseL.collectDao().queryByUUID(id)\n            if (count > 0) {\n                emit(\"已经收藏过\")\n            } else {\n                collectDataBaseL.collectDao().insertCollectBean(CollectTableBean(id, title, imgsrc, System.currentTimeMillis()))\n                emit(\"收藏成功\")\n            }\n        }\n    }\n\n    suspend fun getAllList() = flow {\n        emit(collectDataBaseL.collectDao().getList())\n    }\n\n    suspend fun deleteFromId(id: Long) = flow {\n        collectDataBaseL.collectDao().deleteFromID(id)\n        emit(0)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/music/exoplayerimpl/ExoPlayerUtils.kt",
    "content": "package com.wgllss.sample.feature_system.music.exoplayerimpl\n\nimport android.content.Context\nimport com.wgllss.host.skin.R\nimport kotlin.math.floor\n\nobject ExoPlayerUtils {\n    fun timestampToMSS(context: Context, position: Long): String {\n        val totalSeconds = floor(position / 1E3).toInt()\n        val minutes = totalSeconds / 60\n        val remainingSeconds = totalSeconds - (minutes * 60)\n        return if (position < 0) context.getString(R.string.duration_unknown)\n        else context.getString(R.string.duration_format).format(minutes, remainingSeconds)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/music/exoplayerimpl/MusicServiceConnection.kt",
    "content": "package com.wgllss.sample.feature_system.music.exoplayerimpl\n\nimport android.content.ComponentName\nimport android.content.Context\nimport android.os.Bundle\nimport android.os.Handler\nimport android.os.ResultReceiver\nimport android.support.v4.media.MediaBrowserCompat\nimport android.support.v4.media.MediaMetadataCompat\nimport android.support.v4.media.session.MediaControllerCompat\nimport android.support.v4.media.session.MediaSessionCompat\nimport android.support.v4.media.session.PlaybackStateCompat\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.ssmusic.features_system.extensions.duration\nimport com.wgllss.ssmusic.features_system.extensions.id\nimport com.wgllss.sample.feature_system.services.MusicService\n\nclass MusicServiceConnection private constructor(context: Context) {\n\n    companion object {\n\n        @Volatile\n        private var instance: MusicServiceConnection? = null\n\n        fun getInstance(context: Context) = instance ?: synchronized(this) {\n            instance ?: MusicServiceConnection(context).also { instance = it }\n        }\n    }\n\n    val isConnected by lazy { MutableLiveData(false) }\n//    val networkFailure = MutableLiveData<Boolean>()\n//        .apply { postValue(false) }\n\n    val rootMediaId by lazy { mediaBrowser.root }\n\n    val playbackState by lazy {\n        MutableLiveData<PlaybackStateCompat>()\n            .apply { postValue(EMPTY_PLAYBACK_STATE) }\n    }\n    val nowPlaying by lazy {\n        MutableLiveData<MediaMetadataCompat>()\n            .apply { postValue(NOTHING_PLAYING) }\n    }\n\n//    val queueData: MutableLiveData<QueueData>\n\n    val transportControls by lazy {\n        mediaController.transportControls\n    }\n\n    private val mediaBrowserConnectionCallback by lazy { MediaBrowserConnectionCallback(context) }\n    private val mediaBrowser by lazy {\n        MediaBrowserCompat(context, ComponentName(context, MusicService::class.java), mediaBrowserConnectionCallback, null).apply {\n            android.util.Log.e(\"MusicServiceConnection\", \"开始 connect\")\n            connect()\n        }\n    }\n\n    fun startConnect() {\n        mediaBrowser\n    }\n\n    private lateinit var mediaController: MediaControllerCompat\n\n    fun subscribe(parentId: String, callback: MediaBrowserCompat.SubscriptionCallback) {\n        mediaBrowser.subscribe(parentId, callback)\n    }\n\n    fun unsubscribe(parentId: String, callback: MediaBrowserCompat.SubscriptionCallback) {\n        mediaBrowser.unsubscribe(parentId, callback)\n    }\n\n    fun sendCommand(command: String, parameters: Bundle?) =\n        sendCommand(command, parameters) { _, _ -> }\n\n    fun sendCommand(\n        command: String,\n        parameters: Bundle?,\n        resultCallback: ((Int, Bundle?) -> Unit)\n    ) = if (mediaBrowser.isConnected) {\n        mediaController.sendCommand(command, parameters, object : ResultReceiver(Handler()) {\n            override fun onReceiveResult(resultCode: Int, resultData: Bundle?) {\n                resultCallback(resultCode, resultData)\n            }\n        })\n        true\n    } else {\n        false\n    }\n\n    private inner class MediaBrowserConnectionCallback(private val context: Context) : MediaBrowserCompat.ConnectionCallback() {\n        override fun onConnected() {\n            android.util.Log.e(\"MusicServiceConnection\", \"onConnected\")\n            mediaController = MediaControllerCompat(context, mediaBrowser.sessionToken).apply {\n                registerCallback(MediaControllerCallback())\n            }\n\n            isConnected.postValue(true)\n        }\n\n        override fun onConnectionSuspended() {\n            isConnected.postValue(false)\n        }\n\n        override fun onConnectionFailed() {\n            isConnected.postValue(false)\n        }\n    }\n\n    private inner class MediaControllerCallback : MediaControllerCompat.Callback() {\n        private var stateL = PlaybackStateCompat.STATE_NONE\n        private var mediaID = \"\"\n        private var duration = 0L\n\n        override fun onPlaybackStateChanged(state: PlaybackStateCompat?) {\n            state?.state.takeIf {\n                it != stateL\n            }?.let {\n                stateL = it\n                playbackState.postValue(state)\n            }\n        }\n\n        override fun onMetadataChanged(it: MediaMetadataCompat?) {\n            it?.takeIf {\n                mediaID != it.id && duration != it.duration\n            }?.let {\n                mediaID = it.id ?: \"\"\n                duration = it.duration\n                nowPlaying.postValue(it)\n            }\n        }\n\n        override fun onQueueChanged(queue: MutableList<MediaSessionCompat.QueueItem>?) {\n        }\n\n        override fun onExtrasChanged(extras: Bundle?) {\n            super.onExtrasChanged(extras)\n        }\n\n        override fun onSessionDestroyed() {\n            mediaBrowserConnectionCallback.onConnectionSuspended()\n        }\n    }\n}\n\n@Suppress(\"PropertyName\")\nval EMPTY_PLAYBACK_STATE: PlaybackStateCompat = PlaybackStateCompat.Builder()\n    .setState(PlaybackStateCompat.STATE_NONE, 0, 0f)\n    .build()\n\n@Suppress(\"PropertyName\")\nval NOTHING_PLAYING: MediaMetadataCompat = MediaMetadataCompat.Builder()\n    .putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, \"\")\n    .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, 0)\n    .build()"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/music/extensions/MediaExtensions.kt",
    "content": "package com.wgllss.sample.feature_system.music.extensions\n\nimport android.support.v4.media.session.MediaSessionCompat\nimport android.support.v4.media.session.PlaybackStateCompat\n\nfun MediaSessionCompat.isPlaying(): Boolean {\n    return controller.playbackState.state == PlaybackStateCompat.STATE_PLAYING\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/music/extensions/MediaMetadataCompatExt.kt",
    "content": "\npackage com.wgllss.ssmusic.features_system.extensions\n\nimport android.graphics.Bitmap\nimport android.net.Uri\nimport android.os.Bundle\nimport android.support.v4.media.MediaBrowserCompat.MediaItem\nimport android.support.v4.media.MediaMetadataCompat\nimport androidx.core.net.toUri\nimport com.google.android.exoplayer2.MediaMetadata\nimport com.google.android.exoplayer2.util.MimeTypes\n\n/**\n * Useful extensions for [MediaMetadataCompat].\n */\ninline val MediaMetadataCompat.id: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID)\n\ninline val MediaMetadataCompat.title: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_TITLE)\n\ninline val MediaMetadataCompat.artist: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_ARTIST)\n\ninline val MediaMetadataCompat.duration\n    get() = getLong(MediaMetadataCompat.METADATA_KEY_DURATION)\n\ninline val MediaMetadataCompat.album: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_ALBUM)\n\ninline val MediaMetadataCompat.author: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_AUTHOR)\n\ninline val MediaMetadataCompat.writer: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_WRITER)\n\ninline val MediaMetadataCompat.composer: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_COMPOSER)\n\ninline val MediaMetadataCompat.compilation: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_COMPILATION)\n\ninline val MediaMetadataCompat.date: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_DATE)\n\ninline val MediaMetadataCompat.year: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_YEAR)\n\ninline val MediaMetadataCompat.genre: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_GENRE)\n\ninline val MediaMetadataCompat.trackNumber\n    get() = getLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER)\n\ninline val MediaMetadataCompat.trackCount\n    get() = getLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS)\n\ninline val MediaMetadataCompat.discNumber\n    get() = getLong(MediaMetadataCompat.METADATA_KEY_DISC_NUMBER)\n\ninline val MediaMetadataCompat.albumArtist: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_ALBUM_ARTIST)\n\ninline val MediaMetadataCompat.art: Bitmap\n    get() = getBitmap(MediaMetadataCompat.METADATA_KEY_ART)\n\ninline val MediaMetadataCompat.artUri: Uri\n    get() = this.getString(MediaMetadataCompat.METADATA_KEY_ART_URI).toUri()\n\ninline val MediaMetadataCompat.albumArt: Bitmap?\n    get() = getBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART)\n\ninline val MediaMetadataCompat.albumArtUri: String\n    get() = getString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI) ?: \"\"\n\ninline val MediaMetadataCompat.userRating\n    get() = getLong(MediaMetadataCompat.METADATA_KEY_USER_RATING)\n\ninline val MediaMetadataCompat.rating\n    get() = getLong(MediaMetadataCompat.METADATA_KEY_RATING)\n\ninline val MediaMetadataCompat.displayTitle: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE)\n\ninline val MediaMetadataCompat.displaySubtitle: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE)\n\ninline val MediaMetadataCompat.displayDescription: String?\n    get() = getString(MediaMetadataCompat.METADATA_KEY_DISPLAY_DESCRIPTION)\n\ninline val MediaMetadataCompat.displayIcon: Bitmap\n    get() = getBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON)\n\ninline val MediaMetadataCompat.displayIconUri: Uri\n    get() = this.getString(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI).toUri()\n\ninline val MediaMetadataCompat.mediaUri: Uri\n    get() = this.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_URI).toUri()\n\ninline val MediaMetadataCompat.downloadStatus\n    get() = getLong(MediaMetadataCompat.METADATA_KEY_DOWNLOAD_STATUS)\n\n/**\n * Custom property for storing whether a [MediaMetadataCompat] item represents an\n * item that is [MediaItem.FLAG_BROWSABLE] or [MediaItem.FLAG_PLAYABLE].\n */\ninline val MediaMetadataCompat.flag\n    get() = this.getLong(METADATA_KEY_UAMP_FLAGS).toInt()\n\n/**\n * Useful extensions for [MediaMetadataCompat.Builder].\n */\n\n// These do not have getters, so create a message for the error.\nconst val NO_GET = \"Property does not have a 'get'\"\n\ninline var MediaMetadataCompat.Builder.id: String\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, value)\n    }\n\ninline var MediaMetadataCompat.Builder.title: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_TITLE, value)\n    }\n\ninline var MediaMetadataCompat.Builder.artist: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_ARTIST, value)\n    }\n\ninline var MediaMetadataCompat.Builder.album: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_ALBUM, value)\n    }\n\ninline var MediaMetadataCompat.Builder.duration: Long\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putLong(MediaMetadataCompat.METADATA_KEY_DURATION, value)\n    }\n\ninline var MediaMetadataCompat.Builder.genre: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_GENRE, value)\n    }\n\ninline var MediaMetadataCompat.Builder.mediaUri: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_MEDIA_URI, value)\n    }\n\ninline var MediaMetadataCompat.Builder.albumArtUri: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, value)\n    }\n\ninline var MediaMetadataCompat.Builder.albumArt: Bitmap?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, value)\n    }\n\ninline var MediaMetadataCompat.Builder.trackNumber: Long\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER, value)\n    }\n\ninline var MediaMetadataCompat.Builder.trackCount: Long\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, value)\n    }\n\ninline var MediaMetadataCompat.Builder.displayTitle: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, value)\n    }\n\ninline var MediaMetadataCompat.Builder.displaySubtitle: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE, value)\n    }\n\ninline var MediaMetadataCompat.Builder.displayDescription: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_DESCRIPTION, value)\n    }\n\ninline var MediaMetadataCompat.Builder.displayIconUri: String?\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI, value)\n    }\n\ninline var MediaMetadataCompat.Builder.downloadStatus: Long\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putLong(MediaMetadataCompat.METADATA_KEY_DOWNLOAD_STATUS, value)\n    }\n\n/**\n * Custom property for storing whether a [MediaMetadataCompat] item represents an\n * item that is [MediaItem.FLAG_BROWSABLE] or [MediaItem.FLAG_PLAYABLE].\n */\ninline var MediaMetadataCompat.Builder.flag: Int\n    @Deprecated(NO_GET, level = DeprecationLevel.ERROR)\n    get() = throw IllegalAccessException(\"Cannot get from MediaMetadataCompat.Builder\")\n    set(value) {\n        putLong(METADATA_KEY_UAMP_FLAGS, value.toLong())\n    }\n\nfun MediaMetadataCompat.toMediaItemMetadata(): com.google.android.exoplayer2.MediaMetadata {\n    return with(MediaMetadata.Builder()) {\n        setTitle(title)\n        setDisplayTitle(displayTitle)\n        setAlbumArtist(artist)\n        setAlbumTitle(album)\n        setComposer(composer)\n        setTrackNumber(trackNumber.toInt())\n        setTotalTrackCount(trackCount.toInt())\n        setDiscNumber(discNumber.toInt())\n        setWriter(writer)\n        setArtworkUri(albumArtUri?.toUri())\n        val extras = Bundle()\n//        getString(JsonSource.ORIGINAL_ARTWORK_URI_KEY)?.let {\n//            // album art is a content:// URI. Keep the original for Cast.\n//            extras.putString(\n//                JsonSource.ORIGINAL_ARTWORK_URI_KEY,\n//                getString(JsonSource.ORIGINAL_ARTWORK_URI_KEY)\n//            )\n//        }\n        extras.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, duration)\n        setExtras(extras)\n    }.build()\n}\n\nfun MediaMetadataCompat.toMediaItem(): com.google.android.exoplayer2.MediaItem {\n    return with(com.google.android.exoplayer2.MediaItem.Builder()) {\n        setMediaId(mediaUri.toString())\n        setUri(mediaUri)\n        setMimeType(MimeTypes.AUDIO_MPEG)\n        setMediaMetadata(toMediaItemMetadata())\n    }.build()\n}\n\n/**\n * Custom property that holds whether an item is [MediaItem.FLAG_BROWSABLE] or\n * [MediaItem.FLAG_PLAYABLE].\n */\nconst val METADATA_KEY_UAMP_FLAGS = \"com.example.android.uamp.media.METADATA_KEY_UAMP_FLAGS\"\n\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/music/extensions/PlaybackStateCompatExt.kt",
    "content": "\npackage com.wgllss.sample.feature_system.music.extensions\n\nimport android.os.SystemClock\nimport android.support.v4.media.session.PlaybackStateCompat\n\n/**\n * Useful extension methods for [PlaybackStateCompat].\n */\ninline val PlaybackStateCompat.isPrepared\n    get() = (state == PlaybackStateCompat.STATE_BUFFERING) ||\n            (state == PlaybackStateCompat.STATE_PLAYING) ||\n            (state == PlaybackStateCompat.STATE_PAUSED)\n\ninline val PlaybackStateCompat.isPlaying\n    get() = (state == PlaybackStateCompat.STATE_BUFFERING) ||\n            (state == PlaybackStateCompat.STATE_PLAYING)\n\ninline val PlaybackStateCompat.isPlayEnabled\n    get() = (actions and PlaybackStateCompat.ACTION_PLAY != 0L) ||\n            ((actions and PlaybackStateCompat.ACTION_PLAY_PAUSE != 0L) &&\n                    (state == PlaybackStateCompat.STATE_PAUSED))\n\ninline val PlaybackStateCompat.isPauseEnabled\n    get() = (actions and PlaybackStateCompat.ACTION_PAUSE != 0L) ||\n            ((actions and PlaybackStateCompat.ACTION_PLAY_PAUSE != 0L) &&\n                    (state == PlaybackStateCompat.STATE_BUFFERING ||\n                            state == PlaybackStateCompat.STATE_PLAYING))\n\ninline val PlaybackStateCompat.isSkipToNextEnabled\n    get() = actions and PlaybackStateCompat.ACTION_SKIP_TO_NEXT != 0L\n\ninline val PlaybackStateCompat.isSkipToPreviousEnabled\n    get() = actions and PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS != 0L\n\ninline val PlaybackStateCompat.stateName\n    get() = when (state) {\n        PlaybackStateCompat.STATE_NONE -> \"STATE_NONE\"\n        PlaybackStateCompat.STATE_STOPPED -> \"STATE_STOPPED\"\n        PlaybackStateCompat.STATE_PAUSED -> \"STATE_PAUSED\"\n        PlaybackStateCompat.STATE_PLAYING -> \"STATE_PLAYING\"\n        PlaybackStateCompat.STATE_FAST_FORWARDING -> \"STATE_FAST_FORWARDING\"\n        PlaybackStateCompat.STATE_REWINDING -> \"STATE_REWINDING\"\n        PlaybackStateCompat.STATE_BUFFERING -> \"STATE_BUFFERING\"\n        PlaybackStateCompat.STATE_ERROR -> \"STATE_ERROR\"\n        else -> \"UNKNOWN_STATE\"\n    }\n\n/**\n * Calculates the current playback position based on last update time along with playback\n * state and speed.\n */\ninline val PlaybackStateCompat.currentPlayBackPosition: Long\n    get() = if (state == PlaybackStateCompat.STATE_PLAYING) {\n        val timeDelta = SystemClock.elapsedRealtime() - lastPositionUpdateTime\n        (position + (timeDelta * playbackSpeed)).toLong()\n    } else {\n        position\n    }\n\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/music/notification/WXNotificationListener.kt",
    "content": "package com.wgllss.sample.feature_system.music.notification\n\nimport android.app.Notification\n\ninterface WXNotificationListener {\n\n    fun onNotificationCancelled(notificationId: Int, dismissedByUser: Boolean)\n\n    fun onNotificationPosted(notificationId: Int, notification: Notification, ongoing: Boolean)\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/music/notification/WXPlayerNotificationManager.kt",
    "content": "package com.wgllss.sample.feature_system.music.notification\n\nimport android.Manifest\nimport android.app.Notification\nimport android.app.NotificationChannel\nimport android.app.NotificationManager\nimport android.app.PendingIntent\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.content.IntentFilter\nimport android.content.pm.PackageManager\nimport android.graphics.Bitmap\nimport android.graphics.Color\nimport android.os.Build\nimport android.os.Build.VERSION\nimport android.os.Handler\nimport android.os.Looper\nimport android.os.Message\nimport android.support.v4.media.MediaMetadataCompat\nimport android.support.v4.media.session.MediaSessionCompat\nimport android.support.v4.media.session.PlaybackStateCompat\nimport androidx.core.app.ActivityCompat\nimport androidx.core.app.NotificationCompat\nimport androidx.core.app.NotificationManagerCompat\nimport androidx.media.session.MediaButtonReceiver\nimport androidx.palette.graphics.Palette\nimport com.bumptech.glide.Glide\nimport com.google.android.exoplayer2.C\nimport com.google.android.exoplayer2.Player\nimport com.google.android.exoplayer2.util.Assertions\nimport com.google.android.exoplayer2.util.Util\nimport com.wgllss.core.units.SdkIntUtils\nimport kotlinx.coroutines.*\nimport com.wgllss.host.skin.R\nimport com.wgllss.sample.feature_system.globle.Constants.NOTIFICATION_LARGE_ICON_SIZE\nimport com.wgllss.sample.feature_system.globle.Constants.glideOptions\nimport com.wgllss.sample.feature_system.savestatus.MMKVHelp\n\nclass WXPlayerNotificationManager(private val context: Context, private val mediaSession: MediaSessionCompat, private val notificationsListener: WXNotificationListener) {\n\n    companion object {\n\n        private const val CHANNEL_ID = \"wx_music_channel_00001\"\n        private const val ACTION_PLAY = \"com.wgllss.wx_music.play\"\n        private const val ACTION_PAUSE = \"com.wgllss.wx_music.pause\"\n        private const val ACTION_PREVIOUS = \"com.wgllss.wx_music.prev\"\n        private const val ACTION_NEXT = \"com.wgllss.wx_music.next\"\n        private const val ACTION_CONTENT = \"com.wgllss.wx_music.content.intent\"\n\n        private const val MSG_START_OR_UPDATE_NOTIFICATION = 0\n        private const val MSG_UPDATE_NOTIFICATION_BITMAP = 1\n    }\n\n\n    private val notificationManagerCompat by lazy { NotificationManagerCompat.from(context) }\n    private var player: Player? = null\n    private val playerListener: Player.Listener by lazy { PlayerListener() }\n    private var currentNotificationTag = 0\n\n    private val mainHandler by lazy { Util.createHandler(Looper.getMainLooper(), Handler.Callback { msg: Message -> this.handleMessage(msg) }) }\n\n\n    private var postTime: Long = -1L\n    private val notificationId = hashCode()\n    private var isNotificationStarted = false\n    private val serviceJob by lazy { SupervisorJob() }\n    private val serviceScope by lazy { CoroutineScope(Dispatchers.Main + serviceJob) }\n    private val mediaLargeBitmapAdapter by lazy { MediaLargeBitmapAdapter() }\n    private var instanceId = 0\n    private var builder: NotificationCompat.Builder? = null\n    private val intentFilter by lazy {\n        val actions = arrayOf(ACTION_PLAY, ACTION_PAUSE, ACTION_PREVIOUS, ACTION_NEXT, ACTION_CONTENT, Intent.ACTION_SCREEN_OFF, Intent.ACTION_SCREEN_ON, Intent.ACTION_POWER_CONNECTED)\n        IntentFilter().apply {\n            actions.forEach { action ->\n                takeUnless {\n                    it.hasAction(action)\n                }?.addAction(action)\n            }\n        }\n    }\n    private val notificationBroadcastReceiver by lazy { NotificationBroadcastReceiver() }\n    private var currentIconUrl: String = \"\"\n\n    @Volatile\n    private var isNotificationChange = true\n\n\n    init {\n        instanceId++\n    }\n\n    private fun handleMessage(msg: Message): Boolean {\n        when (msg.what) {\n            MSG_START_OR_UPDATE_NOTIFICATION -> if (player != null) {\n                startOrUpdateNotification(player!!,  /* bitmap= */null)\n            }\n\n            MSG_UPDATE_NOTIFICATION_BITMAP -> if (player != null && isNotificationStarted && currentNotificationTag == msg.arg1) {\n                startOrUpdateNotification(player!!, msg.obj as Bitmap)\n            }\n\n            else -> return false\n        }\n        return true\n    }\n\n    fun hideNotification() {\n        showNotificationForPlayer(null)\n    }\n\n    fun showNotificationForPlayer(player: Player?) {\n        Assertions.checkState(Looper.myLooper() == Looper.getMainLooper())\n        Assertions.checkArgument(player == null || player.applicationLooper == Looper.getMainLooper())\n        if (this.player === player) {\n            return\n        }\n        if (this.player != null) {\n            this.player?.removeListener(playerListener)\n            if (player == null) {\n                stopNotification( /* dismissedByUser= */false)\n            }\n        }\n        this.player = player\n        if (player != null) {\n            player.addListener(playerListener)\n            postStartOrUpdateNotification()\n        }\n    }\n\n    private fun createNotificationChannel() {\n        if (VERSION.SDK_INT >= 26) {\n            val name: CharSequence = \"wgllss\"\n            val mChannel = NotificationChannel(CHANNEL_ID, name, NotificationManager.IMPORTANCE_LOW).apply {\n                description = \"play back status \"\n                setShowBadge(false)\n                lockscreenVisibility = Notification.VISIBILITY_PUBLIC\n            }\n            notificationManagerCompat.createNotificationChannel(mChannel)\n        }\n    }\n\n    private fun createNotification(player: Player, builderIn: NotificationCompat.Builder?, ongoing: Boolean, bitmap: Bitmap?): NotificationCompat.Builder? {\n        if (player.playbackState == Player.STATE_IDLE && player.currentTimeline.isEmpty) {\n            return null\n        }\n        if (mediaSession.controller == null || mediaSession.controller.metadata == null || mediaSession.controller.playbackState == null) {\n            return null\n        }\n        val artistName = mediaSession.controller.metadata.getString(MediaMetadataCompat.METADATA_KEY_ARTIST)\n        val trackName = mediaSession.controller.metadata.getString(MediaMetadataCompat.METADATA_KEY_TITLE)\n        val artworkUrl = mediaSession.controller.metadata.getString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI)\n        val isPlaying = shouldShowPauseButton(player)\n        val playButtonResId: Int = if (isPlaying) R.drawable.ic_baseline_pause_36 else R.drawable.ic_baseline_play_arrow_36\n        val togglePausePendingIntent = if (isPlaying) retrievePlaybackAction(ACTION_PAUSE) else retrievePlaybackAction(ACTION_PLAY)\n\n        if (postTime == -1L) {\n            postTime = System.currentTimeMillis()\n        }\n        createNotificationChannel()\n        var builder = builderIn\n        if (builder == null || isNotificationChange != isPlaying) {\n            isNotificationChange = isPlaying\n            builder = NotificationCompat.Builder(context, CHANNEL_ID)\n            builder?.apply {\n                addAction(R.drawable.ic_baseline_skip_previous_36, \"\", retrievePlaybackAction(ACTION_PREVIOUS))\n                addAction(playButtonResId, \"\", togglePausePendingIntent)\n                addAction(R.drawable.ic_baseline_skip_next_36, \"\", retrievePlaybackAction(ACTION_NEXT))\n            }\n        }\n\n        val style = androidx.media.app.NotificationCompat.MediaStyle().setMediaSession(mediaSession.sessionToken).setShowCancelButton(true).setShowActionsInCompactView(0, 1, 2, 3).setCancelButtonIntent(MediaButtonReceiver.buildMediaButtonPendingIntent(context, PlaybackStateCompat.ACTION_STOP))\n\n        builder?.apply {\n            setStyle(style)\n            setSmallIcon(R.drawable.loading)\n            setOngoing(ongoing)\n//            setContentIntent(retrievePlaybackAction(ACTION_CONTENT))\n            setContentIntent(mediaSession.controller.sessionActivity)\n            setContentTitle(trackName)\n            setContentText(artistName)\n//            setSubText(albumName)\n            setColorized(true)\n            setShowWhen(false)\n            setWhen(postTime)\n            setVisibility(NotificationCompat.VISIBILITY_PUBLIC)\n            priority = NotificationCompat.PRIORITY_LOW\n            setDeleteIntent(MediaButtonReceiver.buildMediaButtonPendingIntent(context, PlaybackStateCompat.ACTION_STOP))\n        }\n        var largeIcon: Bitmap? = bitmap\n        if (largeIcon == null) {\n            val notificationTag = if (currentIconUrl != artworkUrl) {\n                ++currentNotificationTag\n            } else currentNotificationTag\n            largeIcon = mediaLargeBitmapAdapter.getCurrentLargeIcon(artworkUrl, LoadLargeIconBitMapCall(notificationTag))\n        }\n        if (SdkIntUtils.isLollipop() && player.isPlaying && !player.isPlayingAd && !player.isCurrentMediaItemDynamic && player.playbackParameters.speed == 1f) {\n            builder?.apply {\n                setWhen(System.currentTimeMillis() - player.contentPosition)\n                setShowWhen(true)\n                setUsesChronometer(true)\n            }\n            largeIcon?.let {\n                builder?.color = Palette.from(it).generate().getVibrantColor(Color.parseColor(\"#F44336\"))\n            }\n        } else {\n            builder?.apply {\n                setShowWhen(false)\n                setUsesChronometer(false)\n                setWhen(postTime)\n            }\n        }\n        builder?.setLargeIcon(largeIcon)\n        builder?.setOnlyAlertOnce(true)\n        return builder\n    }\n\n    private fun shouldShowPauseButton(player: Player): Boolean {\n        return player.playbackState != Player.STATE_ENDED && player.playbackState != Player.STATE_IDLE && player.playWhenReady\n    }\n\n    private fun getOngoing(player: Player): Boolean {\n        val playbackState = player.playbackState\n        return ((playbackState == Player.STATE_BUFFERING || playbackState == Player.STATE_READY) && player.playWhenReady)\n    }\n\n\n    private fun startOrUpdateNotification(player: Player, bitmap: Bitmap?) {\n        val ongoing: Boolean = getOngoing(player)\n        builder = createNotification(player, builder, ongoing, bitmap)\n        if (builder == null) {\n            stopNotification( /* dismissedByUser= */false)\n            return\n        }\n        val notification: Notification = builder!!.build()\n        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {\n            return\n        }\n        notificationManagerCompat.notify(notificationId, notification)\n        if (!isNotificationStarted) {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) context.registerReceiver(notificationBroadcastReceiver, intentFilter, Context.RECEIVER_EXPORTED)\n            else context.registerReceiver(notificationBroadcastReceiver, intentFilter)\n        }\n        notificationsListener?.onNotificationPosted(notificationId, notification, ongoing || !isNotificationStarted)\n        isNotificationStarted = true\n    }\n\n    private fun stopNotification(dismissedByUser: Boolean) {\n        if (isNotificationStarted) {\n            isNotificationStarted = false\n            this.player?.removeListener(playerListener)\n            mainHandler.removeMessages(MSG_START_OR_UPDATE_NOTIFICATION)\n            notificationManagerCompat.cancel(notificationId)\n            context.unregisterReceiver(notificationBroadcastReceiver)\n            notificationsListener?.onNotificationCancelled(notificationId, dismissedByUser)\n        }\n    }\n\n    private fun postStartOrUpdateNotification() {\n        if (!mainHandler.hasMessages(MSG_START_OR_UPDATE_NOTIFICATION)) {\n            mainHandler.sendEmptyMessage(MSG_START_OR_UPDATE_NOTIFICATION)\n        }\n    }\n\n//    private fun postUpdateNotificationBitmap(bitmap: Bitmap, notificationTag: Int) {\n//        mainHandler.obtainMessage(MSG_UPDATE_NOTIFICATION_BITMAP, notificationTag, C.INDEX_UNSET, bitmap).sendToTarget()\n//    }\n\n    private fun retrievePlaybackAction(action: String): PendingIntent {\n        val intent = Intent(action).setPackage(context.packageName)\n        val pendingFlags = if (SdkIntUtils.isLollipop()) PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE\n        else PendingIntent.FLAG_UPDATE_CURRENT\n        return PendingIntent.getBroadcast(context, instanceId, intent, pendingFlags);\n    }\n\n\n    private inner class MediaLargeBitmapAdapter {\n\n        @Volatile\n        private var currentBitmap: Bitmap? = null\n\n        fun getCurrentLargeIcon(bitmapUrl: String, loadLargeIconBitMapCall: LoadLargeIconBitMapCall): Bitmap? {\n\n            return if (currentIconUrl == null || currentIconUrl != bitmapUrl) {\n                currentIconUrl = bitmapUrl\n                serviceScope.launch {\n                    currentBitmap = null\n                    currentBitmap = bitmapUrl?.let {\n                        resolveUriAsBitmap(it)\n                    }\n                    currentBitmap?.let {\n                        loadLargeIconBitMapCall.onBitmap(it)\n                    }\n                }\n                null\n            } else {\n                currentBitmap\n            }\n        }\n\n        private suspend fun resolveUriAsBitmap(uri: String): Bitmap? {\n            return withContext(Dispatchers.IO) {\n                try {\n                    Glide.with(context).applyDefaultRequestOptions(glideOptions).asBitmap().load(uri).submit(NOTIFICATION_LARGE_ICON_SIZE, NOTIFICATION_LARGE_ICON_SIZE).get()\n                } catch (e: Exception) {\n                    null\n                }\n            }\n        }\n    }\n\n    inner class LoadLargeIconBitMapCall(private val notificationTag: Int) {\n\n        fun onBitmap(bitmap: Bitmap) {\n            bitmap?.let { mainHandler.obtainMessage(MSG_UPDATE_NOTIFICATION_BITMAP, notificationTag, C.INDEX_UNSET, bitmap).sendToTarget() }\n        }\n    }\n\n\n    private inner class PlayerListener : Player.Listener {\n        override fun onEvents(player: Player, events: Player.Events) {\n            if (events.containsAny(\n                    Player.EVENT_PLAYBACK_STATE_CHANGED,\n                    Player.EVENT_PLAY_WHEN_READY_CHANGED,\n                    Player.EVENT_IS_PLAYING_CHANGED,\n                    Player.EVENT_TIMELINE_CHANGED,\n                    Player.EVENT_PLAYBACK_PARAMETERS_CHANGED,\n                    Player.EVENT_POSITION_DISCONTINUITY,\n                    Player.EVENT_REPEAT_MODE_CHANGED,\n                    Player.EVENT_SHUFFLE_MODE_ENABLED_CHANGED,\n                    Player.EVENT_MEDIA_METADATA_CHANGED\n                )\n            ) {\n                postStartOrUpdateNotification()\n            }\n        }\n    }\n\n    private inner class NotificationBroadcastReceiver : BroadcastReceiver() {\n        override fun onReceive(context: Context, intent: Intent?) {\n            when (intent?.action ?: \"\") {\n                ACTION_PLAY -> {\n                    if (player!!.playbackState == Player.STATE_IDLE) {\n                        player?.prepare()\n                    } else if (player!!.playbackState == Player.STATE_ENDED) {\n                        player?.seekToDefaultPosition(player!!.currentMediaItemIndex)\n                    }\n                    player?.play()\n                }\n\n                ACTION_PAUSE -> {\n                    player?.pause()\n                }\n\n                ACTION_PREVIOUS -> {\n                    mediaSession.controller?.transportControls?.skipToPrevious()\n                }\n\n                ACTION_NEXT -> {\n                    mediaSession.controller?.transportControls?.skipToNext()\n                }\n\n                Intent.ACTION_SCREEN_OFF, Intent.ACTION_POWER_CONNECTED, Intent.ACTION_SCREEN_ON -> {//锁屏显示歌词等等\n                    if (MMKVHelp.isOpenLockerUI() && player!!.isPlaying) {\n                        try {\n                            //todo 此处未实现\n//                            val intent = Intent(context, Class.forName(\"com.xxx.WXactivity\"))\n//                            intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS\n//                            context.startActivity(intent)\n                        } catch (e: Exception) {\n                            e.printStackTrace()\n                        }\n                    }\n                }\n\n                ACTION_CONTENT -> {\n\n                }\n\n                else -> {\n\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/room/CollectDataBase.kt",
    "content": "package com.wgllss.sample.feature_system.room\n\nimport android.content.Context\nimport androidx.room.Database\nimport androidx.room.Room\nimport androidx.room.RoomDatabase\nimport androidx.sqlite.db.SupportSQLiteDatabase\nimport com.wgllss.core.units.WLog\nimport com.wgllss.sample.feature_system.room.dao.CollectDao\nimport com.wgllss.sample.feature_system.room.help.RoomDBMigration\nimport com.wgllss.sample.feature_system.room.table.CollectTableBean\n\n@Database(entities = [CollectTableBean::class], version = 1, exportSchema = false)\nabstract class CollectDataBase : RoomDatabase() {\n\n    companion object {\n        @Volatile\n        private var instance: CollectDataBase? = null\n        fun getInstance(context: Context, roomDBMigration: RoomDBMigration): CollectDataBase {\n            if (instance == null) {\n                synchronized(CollectDataBase::class.java) {\n                    if (instance == null) {\n                        val builder = Room.databaseBuilder(context, CollectDataBase::class.java, \"wx_sample_db\")\n                        val migrations = roomDBMigration.createMigration()\n                        migrations?.takeIf {\n                            it.isNotEmpty()\n                        }?.let {\n                            builder.addMigrations(*it)\n                        }\n                        builder.addCallback(object : RoomDatabase.Callback() {\n                            override fun onCreate(db: SupportSQLiteDatabase) {\n                                super.onCreate(db)\n                                WLog.e(this@Companion, \"RoomDatabase onCreate\")\n                            }\n\n                            override fun onOpen(db: SupportSQLiteDatabase) {\n                                super.onOpen(db)\n                                WLog.e(this@Companion, \"RoomDatabase onOpen\")\n                            }\n\n                            override fun onDestructiveMigration(db: SupportSQLiteDatabase) {\n                                super.onDestructiveMigration(db)\n                                WLog.e(this@Companion, \"RoomDatabase onDestructiveMigration\")\n                            }\n                        })\n                        instance = builder.build()\n                    }\n                }\n            }\n            return instance!!\n        }\n    }\n\n    abstract fun collectDao(): CollectDao\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/room/dao/CollectDao.kt",
    "content": "package com.wgllss.sample.feature_system.room.dao\n\nimport androidx.lifecycle.LiveData\nimport androidx.room.Dao\nimport androidx.room.Insert\nimport androidx.room.OnConflictStrategy\nimport androidx.room.Query\nimport com.wgllss.sample.feature_system.room.table.CollectTableBean\n\n@Dao\ninterface CollectDao {\n\n    @Insert(onConflict = OnConflictStrategy.REPLACE)\n    fun insertCollectBean(collectTableBean: CollectTableBean)\n\n    //ASC 默认值，从小到大，升序排列 DESC 从大到小，降序排列\n    @Query(\"SELECT * FROM collect_tab ORDER BY createTime ASC\")\n    fun getList(): LiveData<MutableList<CollectTableBean>>\n\n    @Query(\"SELECT COUNT(*) FROM collect_tab WHERE id = :uuID\")\n    fun queryByUUID(uuID: Long): Int\n\n    @Query(\"DELETE FROM collect_tab WHERE id =:id\")\n    fun deleteFromID(id: Long)\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/room/help/RoomDBHelper.kt",
    "content": "package com.wgllss.sample.feature_system.room.help\n\nimport android.content.Context\nimport androidx.sqlite.db.SupportSQLiteDatabase\nimport com.wgllss.sample.feature_system.room.CollectDataBase\n\nobject RoomDBHelper {\n\n\n    fun getReadableDatabase(context: Context): SupportSQLiteDatabase {\n        return CollectDataBase.getInstance(context, RoomDBMigration.instance).openHelper.readableDatabase\n    }\n\n    fun getWritableDatabase(context: Context): SupportSQLiteDatabase {\n        return CollectDataBase.getInstance(context, RoomDBMigration.instance).openHelper.writableDatabase\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/room/help/RoomDBMigration.kt",
    "content": "package com.wgllss.sample.feature_system.room.help\n\nimport androidx.room.migration.Migration\n\nclass RoomDBMigration {\n\n    companion object {\n        val instance by lazy { RoomDBMigration() }\n    }\n\n    fun createMigration(): Array<Migration> {\n        val migrations = arrayListOf<Migration>()\n        return migrations.toTypedArray()\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/room/table/CollectTableBean.kt",
    "content": "package com.wgllss.sample.feature_system.room.table\n\nimport androidx.room.ColumnInfo\nimport androidx.room.Entity\nimport androidx.room.PrimaryKey\n\n@Entity(tableName = \"collect_tab\")\nclass CollectTableBean(\n    @PrimaryKey @ColumnInfo(name = \"id\", typeAffinity = ColumnInfo.INTEGER, defaultValue = \"0\") var id: Long,\n    @ColumnInfo(name = \"title\", typeAffinity = ColumnInfo.TEXT, defaultValue = \"\") val title: String,\n    @ColumnInfo(name = \"imgUrl\", typeAffinity = ColumnInfo.TEXT, defaultValue = \"\") val imgUrl: String,\n    @ColumnInfo(name = \"createTime\", typeAffinity = ColumnInfo.INTEGER, defaultValue = \"\") val createTime: Long\n)"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/savestatus/MMKVHelp.kt",
    "content": "package com.wgllss.sample.feature_system.savestatus\n\nimport com.tencent.mmkv.MMKV\n\nobject MMKVHelp {\n    private val mmkv by lazy { MMKV.defaultMMKV() }\n\n    /**\n     * 设置桌面歌词开关\n     */\n    fun setLockerSwitch(isOpen: Boolean) = mmkv.encode(\"open_locker_ui\", isOpen)\n\n    /**\n     * 桌面歌词开关是否打开\n     */\n    fun isOpenLockerUI() = mmkv.decodeBool(\"open_locker_ui\")\n\n    /**\n     * 设置播放模式 单曲循环 随机 顺序播放\n     */\n    fun setPlayMode(playMode: Int) = mmkv.encode(\"PlayMode\", playMode)\n\n    /**\n     * 得到播放模式\n     */\n    fun getPlayMode() = mmkv.decodeInt(\"PlayMode\")\n\n    fun saveHomeTab1Data(data: String) = mmkv.encode(\"home_fragment_tab1\", data)\n\n    fun getHomeTab1Data() = mmkv.decodeString(\"home_fragment_tab1\")\n\n    fun saveSkinPath(path: String) = mmkv.encode(\"skin_path_key\", path)\n\n    fun getSkinPath() = mmkv.decodeString(\"skin_path_key\")\n\n    fun saveJsPath(path: String) = mmkv.encode(\"webview_js_Key\", path)\n\n    fun getJsPath() = mmkv.decodeString(\"webview_js_Key\") ?: \"\"\n\n    fun saveWebResPath(path: String) = mmkv.encode(\"web_res_path_key\", path)\n\n    fun getWebResPath() = mmkv.decodeString(\"web_res_path_key\")\n\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/services/MusicService.kt",
    "content": "package com.wgllss.sample.feature_system.services\n\nimport android.app.Notification\nimport android.app.PendingIntent\nimport android.content.Intent\nimport android.net.Uri\nimport android.os.Bundle\nimport android.os.ResultReceiver\nimport android.support.v4.media.MediaBrowserCompat\nimport android.support.v4.media.MediaDescriptionCompat\nimport android.support.v4.media.MediaMetadataCompat\nimport android.support.v4.media.session.MediaSessionCompat\nimport android.support.v4.media.session.PlaybackStateCompat\nimport androidx.core.content.ContextCompat\nimport androidx.media.MediaBrowserServiceCompat\nimport com.google.android.exoplayer2.C\nimport com.google.android.exoplayer2.ExoPlayer\nimport com.google.android.exoplayer2.PlaybackException\nimport com.google.android.exoplayer2.Player\nimport com.google.android.exoplayer2.audio.AudioAttributes\nimport com.google.android.exoplayer2.ext.mediasession.MediaSessionConnector\nimport com.google.android.exoplayer2.ext.mediasession.TimelineQueueNavigator\nimport com.wgllss.core.units.SdkIntUtils\nimport com.wgllss.sample.feature_system.globle.Constants.MEDIA_ID_ROOT\nimport com.wgllss.sample.feature_system.music.notification.WXPlayerNotificationManager\nimport com.wgllss.host.skin.R\nimport com.wgllss.sample.feature_system.globle.Constants\nimport com.wgllss.sample.feature_system.music.notification.WXNotificationListener\nimport com.wgllss.sample.features_ui.playing.activity.NotificationTargetActivity\nimport com.wgllss.ssmusic.features_system.extensions.*\n\nclass MusicService : MediaBrowserServiceCompat(), MediaSessionConnector.PlaybackPreparer {\n    private lateinit var notificationManager: WXPlayerNotificationManager\n\n    private var isForegroundService = false\n    private var currentMediaMetadataCompat: MediaMetadataCompat? = null\n    private val playerListener by lazy { PlayerEventListener() }\n\n    private val uAmpAudioAttributes by lazy {\n        AudioAttributes.Builder()\n            .setContentType(C.AUDIO_CONTENT_TYPE_MUSIC)\n            .setUsage(C.USAGE_MEDIA)\n            .build()\n    }\n\n    val exoPlayer: ExoPlayer by lazy {\n        ExoPlayer.Builder(this).build().apply {\n            setAudioAttributes(uAmpAudioAttributes, true)\n            setHandleAudioBecomingNoisy(true)\n            addListener(playerListener)\n        }\n    }\n\n    val mediaSession by lazy {\n        MediaSessionCompat(this, getString(R.string.app_name))\n            .apply {\n                setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS or MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS)\n                val pendingFlags = if (SdkIntUtils.isLollipop()) {\n                    PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE\n                } else {\n                    PendingIntent.FLAG_UPDATE_CURRENT\n                }\n                val sessionIntent = Intent(this@MusicService, NotificationTargetActivity::class.java)\n                val sessionActivityPendingIntent = PendingIntent.getActivity(this@MusicService, 0, sessionIntent, pendingFlags)\n                setSessionActivity(sessionActivityPendingIntent)\n                isActive = true\n            }\n    }\n\n    private val mediaSessionConnector by lazy {\n        MediaSessionConnector(mediaSession).apply {\n            setPlaybackPreparer(this@MusicService)\n            setQueueNavigator(SSQueueNavigator(mediaSession))\n        }\n    }\n\n    override fun onCreate() {\n        super.onCreate()\n        sessionToken = mediaSession.sessionToken\n        notificationManager = WXPlayerNotificationManager(this, mediaSession, PlayerNotificationListener())\n        notificationManager.showNotificationForPlayer(exoPlayer)\n        mediaSessionConnector.setPlayer(exoPlayer)\n        exoPlayer.clearMediaItems()\n    }\n\n    override fun onStart(intent: Intent?, startId: Int) {\n        super.onStart(intent, startId)\n    }\n\n    override fun onTaskRemoved(rootIntent: Intent?) {\n        super.onTaskRemoved(rootIntent)\n        exoPlayer.stop(true)\n    }\n\n    override fun onDestroy() {\n        super.onDestroy()\n    }\n\n    override fun onGetRoot(clientPackageName: String, clientUid: Int, rootHints: Bundle?): BrowserRoot? {\n        android.util.Log.e(\"MusicServiceConnection\", \"开始 onGetRoot\")\n        return BrowserRoot(MEDIA_ID_ROOT, null)\n    }\n\n    override fun onLoadChildren(parentId: String, result: Result<MutableList<MediaBrowserCompat.MediaItem>>) {\n        result.detach()\n        if (MEDIA_ID_ROOT == parentId) {\n            android.util.Log.e(\"MusicServiceConnection\", \"开始 onLoadChildren\")\n            //todo 查询 到列表\n            result.sendResult(mutableListOf())\n        }\n    }\n\n    override fun onCommand(player: Player, command: String, extras: Bundle?, cb: ResultReceiver?) = false\n\n    override fun getSupportedPrepareActions() = PlaybackStateCompat.ACTION_PREPARE_FROM_MEDIA_ID or\n            PlaybackStateCompat.ACTION_PLAY_FROM_MEDIA_ID or\n            PlaybackStateCompat.ACTION_PREPARE_FROM_SEARCH or\n            PlaybackStateCompat.ACTION_PLAY_FROM_SEARCH or\n            PlaybackStateCompat.ACTION_PLAY_FROM_URI or\n            PlaybackStateCompat.ACTION_PREPARE_FROM_URI or\n            PlaybackStateCompat.ACTION_SEEK_TO or\n            PlaybackStateCompat.ACTION_SKIP_TO_NEXT or\n            PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS\n\n    override fun onPrepare(playWhenReady: Boolean) {\n    }\n\n    override fun onPrepareFromMediaId(mediaId: String, playWhenReady: Boolean, extras: Bundle?) {\n    }\n\n    override fun onPrepareFromSearch(query: String, playWhenReady: Boolean, extras: Bundle?) {\n    }\n\n    override fun onPrepareFromUri(uri: Uri, playWhenReady: Boolean, extras: Bundle?) {\n        extras?.run {\n            preparePlay(\n                getString(Constants.MEDIA_ID_KEY) ?: \"\",\n                getString(Constants.MEDIA_TITLE_KEY) ?: \"\",\n                getString(Constants.MEDIA_AUTHOR_KEY) ?: \"\",\n                getString(Constants.MEDIA_ARTNETWORK_URL_KEY) ?: \"\",\n                getString(Constants.MEDIA_URL_KEY) ?: \"\"\n            )\n        }\n    }\n\n    private fun preparePlay(mediaId: String, musicTitle: String, author: String, pic: String, url: String) {\n        val mediaMetadataCompat = MediaMetadataCompat.Builder().apply {\n            id = mediaId\n            title = musicTitle\n            mediaUri = url\n            artist = author\n            albumArtUri = pic\n            downloadStatus = MediaDescriptionCompat.STATUS_NOT_DOWNLOADED\n        }.build().apply {\n            description.extras?.putAll(bundle)\n        }\n        currentMediaMetadataCompat = mediaMetadataCompat\n        exoPlayer.stop()\n        exoPlayer.playWhenReady = true\n        exoPlayer.setMediaItem(mediaMetadataCompat.toMediaItem())\n        exoPlayer.prepare()\n    }\n\n    private inner class PlayerEventListener : Player.Listener {\n\n        override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {\n            when (playbackState) {\n                Player.STATE_BUFFERING, Player.STATE_READY -> {\n                    if (playbackState == Player.STATE_READY) {\n                        if (playWhenReady) {\n                        }\n                        setPlaybackState(PlaybackStateCompat.STATE_PLAYING)\n                    }\n                    notificationManager.showNotificationForPlayer(exoPlayer)\n                }\n                Player.STATE_ENDED -> {\n                    playNext()\n                }\n                else -> {\n//                    notificationManager.hideNotification()\n                }\n            }\n        }\n\n        private fun setPlaybackState(playbackState: Int) {\n            val speed = exoPlayer.playbackParameters?.speed ?: 1.0f\n            mediaSession.setPlaybackState(PlaybackStateCompat.Builder().apply {\n                setState(playbackState, exoPlayer.contentPosition, speed)\n                    .setActions(supportedPrepareActions)\n                setExtras(Bundle().apply {\n                    putLong(MediaMetadataCompat.METADATA_KEY_DURATION, exoPlayer.duration)\n                })\n            }.build())\n        }\n\n        override fun onPlayerError(error: PlaybackException) {\n            super.onPlayerError(error)\n            playNext()\n        }\n    }\n\n    private inner class SSQueueNavigator(mediaSession: MediaSessionCompat) : TimelineQueueNavigator(mediaSession) {\n        override fun getMediaDescription(player: Player, windowIndex: Int): MediaDescriptionCompat = currentMediaMetadataCompat?.description ?: MediaDescriptionCompat.Builder().build()\n\n        override fun onSkipToNext(player: Player) = playNext()\n\n        override fun onSkipToPrevious(player: Player) = playPrevious()\n\n        override fun getSupportedQueueNavigatorActions(player: Player) = PlaybackStateCompat.ACTION_SKIP_TO_NEXT or PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS\n    }\n\n    /**\n     * Listen for notification events.\n     */\n    private inner class PlayerNotificationListener : WXNotificationListener {\n        override fun onNotificationPosted(notificationId: Int, notification: Notification, ongoing: Boolean) {\n            if (ongoing && !isForegroundService) {\n                ContextCompat.startForegroundService(this@MusicService, Intent(this@MusicService, this@MusicService.javaClass))\n                startForeground(notificationId, notification)\n                isForegroundService = true\n            }\n        }\n\n        override fun onNotificationCancelled(notificationId: Int, dismissedByUser: Boolean) {\n            stopForeground(true)\n            isForegroundService = false\n            stopSelf()\n        }\n    }\n\n    protected open fun playNext() {\n\n    }\n\n    protected open fun playPrevious() {\n\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/feature_system/untils/UUIDHelp.kt",
    "content": "package com.wgllss.sample.feature_system.untils\n\nimport java.util.*\nimport kotlin.math.abs\n\nobject UUIDHelp {\n\n    fun getUUID(title: String, author: String, requestRealUrl: String, pic: String): Long {\n        val sb = StringBuilder()\n        sb.append(title).append(author).append(requestRealUrl).append(pic)\n        val uuLongID = sb.toString().hashCode().toLong()\n        return abs(UUID(uuLongID, uuLongID).toString().replace(\"-\", \"\").hashCode()).toLong()\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library/src/main/java/com/wgllss/sample/features_ui/playing/activity/NotificationTargetActivity.kt",
    "content": "package com.wgllss.sample.features_ui.playing.activity\n\nimport android.app.Activity\nimport android.os.Bundle\nimport com.wgllss.core.ex.finishActivity\n\nclass NotificationTargetActivity : Activity() {\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        finishActivity()\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-loader-version/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-loader-version/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.loading\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\ndependencies {\n    compileOnly libs.kotlin.stdlib\n\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Version-Lib:1.0.0.7'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Constant-Lib:1.0.0.6'\n    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-VersionK-Lib:1.0.00'\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_version.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_version_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_version_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-loader-version/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-loader-version/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.loading\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-loader-version/src/main/java/com/wgllss/loader/version/LoaderVersionImpl.kt",
    "content": "package com.wgllss.loader.version\n\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.COMMON\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.COMMON_BUSINESS\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.HOME\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.MANAGER\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.RESOURCE_SKIN\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.RUNTIME\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.WEB_ASSETS\nimport com.wgllss.dynamic.host.lib.version.ILoaderVersion\n\n/** 特别提示:\n *  1:首次启动用 宿主里面的 VersionImpl,当有版本更新时用 WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-loader-version\n *  2:首次时两个地方文件配置成一样\n *  3: 以后每次修改插件，升级插件 ，需要修改 WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-loader-version 下面配置\n **/\nclass LoaderVersionImpl : ILoaderVersion {\n\n    override fun getV() = 1005 //总版本号 只要下面每个地方改一下 此处版本号要往上加+1，下面可同一时间改多个，上面加一下版本号\n\n    override fun isMustShowLoading() = false //下次下载插件 是否显示主下载loading 页面\n\n    override fun getClfd() = Triple( //配置loading 页插件实现 及版本号 对应 maven-wgllss-sample-loader-version 工程\n        \"com.wgllss.dynamic.impl.ILoadHomeImpl\", \"loading\", 1000\n    )\n\n    override fun getClmd() = Triple(\"\", \"\", 0)\n\n    override fun getCdlfd() = Triple(\"\", \"\", 0)\n\n    /**  上面两个方法 默认 没有，如果需要动态 配置，见下面 已经注释掉的 方式配置 **/\n//    override fun getClmd() = Triple(\"com.wgllss.dynamic.plugin.loader.LoaderManagerImpl\", \"class_loader_impl_dex\", 1000)\n//\n//    override fun getCdlfd() = Triple(\"com.wgllss.dynamic.plugin.download_face.DownLoadFaceImpl\", \"classes_downloadface_impl_dex\", 1000)\n\n    /**\n     * 下面要添加删除 map内内容 map的key 不能自定义\n     * 即:COMMON,WEB_ASSETS,COMMON_BUSINESS,RUNTIME,MANAGER,RESOURCE_SKIN,HOME不能动\n     */\n    override fun getMapDLU() = linkedMapOf(\n        COMMON to Pair(\n            \"classes_common_lib_dex\", 1001\n        ), //Maven-Wgllss-Dynamic-Plugin-Common-Library 插件工程 和 版本号\n        WEB_ASSETS to Pair(\n            \"classes_business_web_res\", 1000\n        ),  //maven-wgllss-sample-assets-source-apk 插件工程 和版本号\n        COMMON_BUSINESS to Pair(\n            \"classes_business_lib_dex\", 1003\n        ), //maven-wgllss-sample-business-library 插件工程 和 版本号\n        RUNTIME to Pair(\n            \"classes_wgllss_dynamic_plugin_runtime\", 1000\n        ), //Maven-Wgllss-Dynamic-Plugin-RunTime-Apk 插件工程 和 版本号\n        MANAGER to Pair(\n            \"classes_manager_dex\", 1000\n        ), // Maven-Wgllss-Dynamic-Plugin-Manager 插件工程 和 版本号\n        RESOURCE_SKIN to Pair(\n            \"classes_common_skin_res\", 1000\n        ), // maven-wgllss-sample-skin-resource-apk 插件工程 和 版本号\n        HOME to Pair(\"classes_home_dex\", 1002)//maven-wgllss-sample-ui-home 插件工程 和 版本号\n    )\n\n//    override fun getOthers() = mutableMapOf<String, Int>()\n\n    override fun getOthers() = mutableMapOf(\n        \"classes_other_dex\" to 1000,  //maven-wgllss-sample-ui-other-lib 插件工程 和 版本号\n        \"classes_other_res\" to 1000, //maven-wgllss-sample-ui-other 插件工程 和 版本号\n        \"classes_other2_dex\" to 1001, //maven-wgllss-sample-ui-other2-lib2 插件工程 和 版本号\n        \"classes_other2_res\" to 1000 //maven-wgllss-sample-ui-other2 插件工程 和 版本号\n    )\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"classes_common_skin_res.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\n\ndef createCopyTask(assembleReleaseTask, buildType) {\n    def inputFile = file(\"${getProject().getBuildDir()}/outputs/apk/release/classes_common_skin_res.apk\")\n    def outputFile = file(\"${rootProject.getBuildDir()}/classes_common_skin_res\")\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    return tasks.create(\"assembleCopy\", Copy) {\n        group = 'other'\n        description = \"复制json到 指定输出目录\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(assembleReleaseTask.name)\n}\n\ntasks.whenTaskAdded { task ->\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(task, \"release\")\n    }\n//    if (task.name == \"cleanJson\") {\n//        createVersionJson(task, \"Release\")\n//    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#FF0000</color>\n    <color name=\"colorTrackCheck\">#CD4329</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#007A00</color>\n    <color name=\"colorTrackCheck\">#5dbe8a</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#B0B0B0</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.sample.home\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\ndependencies {\n\n    compileOnly project(path: ':Maven-Wgllss-Dynamic-Plugin-Common-Library')\n    compileOnly project(path: ':maven-wgllss-common-re-library')\n\n    compileOnly project(path: ':maven-wgllss-sample-business-library')\n    compileOnly project(path: ':maven-wgllss-business-re-library')\n\n    compileOnly project(path: ':maven-wgllss-sample-ui-other-lib')\n    compileOnly project(path: ':Maven-Wgllss-Dynamic-Plugin-Manager')\n\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Home-Lib:1.0.0.7'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Provider-Lib:1.0.0.6'\n    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Lib:1.0.02'\n\n    compileOnly libs.androidx.sqlite.framework\n    compileOnly libs.androidx.core.ktx\n    implementation libs.appcompat\n    implementation libs.androidx.recyclerview\n    implementation libs.google.material\n\n    compileOnly libs.androidx.lifecycle.runtime.ktx\n    compileOnly libs.androidx.activity.ktx\n    compileOnly libs.androidx.fragment.ktx\n\n    compileOnly libs.converter.gson\n    compileOnly libs.mmkv\n    compileOnly libs.startup.runtime\n    compileOnly libs.androidx.legacy.legacy.support.v44\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_home.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_home_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_home_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.home\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/impl/ILoadHomeImpl.kt",
    "content": "package com.wgllss.dynamic.impl\n\nimport android.content.Context\nimport com.wgllss.dynamic.host.lib.home.ILoadHome\nimport com.wgllss.dynamic.sample.feature_startup.startup.InitHomeFirstInitializeHelp\n\nclass ILoadHomeImpl : ILoadHome {\n\n    override fun loadHomeCreate(context: Context) {\n        InitHomeFirstInitializeHelp.initCreate(context)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/initializer/InitHomeFirstInitialize.kt",
    "content": "package com.wgllss.dynamic.initializer\n\nimport android.content.Context\nimport androidx.startup.Initializer\nimport com.wgllss.dynamic.sample.feature_startup.startup.InitHomeFirstInitializeHelp\n\nclass InitHomeFirstInitialize : Initializer<Unit> {\n\n    override fun create(activity: Context) {\n        InitHomeFirstInitializeHelp.initCreate(activity)\n    }\n\n    override fun dependencies(): List<Class<out Initializer<*>>> {\n        return emptyList()\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/provider/TestContentProvider.kt",
    "content": "package com.wgllss.dynamic.provider\n\nimport android.content.ContentUris\nimport android.content.ContentValues\nimport android.content.Context\nimport android.database.Cursor\nimport android.database.sqlite.SQLiteDatabase\nimport android.net.Uri\nimport com.wgllss.dynamic.host.lib.provider.WXHostContentProviderDelegate\nimport com.wgllss.sample.feature_system.room.help.RoomDBHelper\n\nclass TestContentProvider(val context: Context) : WXHostContentProviderDelegate {\n\n    override fun onCreate(): Boolean {\n\n        android.util.Log.e(\"TestContentProvider\", \"onCreate\")\n        return false\n    }\n\n    override fun query(uri: Uri?, projection: Array<String>?, selection: String?, selectionArgs: Array<String>?, sortOrder: String?): Cursor? {\n        val db = RoomDBHelper.getReadableDatabase(context)\n        try {\n            db.beginTransaction()\n//            return db.query(\"select * from collect_tab\")\n            selection?.let {\n                return db.query(it)\n            }\n        } catch (e: Exception) {\n            e.printStackTrace()\n        } finally {\n            db.endTransaction()\n        }\n        android.util.Log.e(\"TestContentProvider\", \"query\")\n        return null\n    }\n\n\n    override fun getType(uri: Uri?): String? {\n        android.util.Log.e(\"TestContentProvider\", \"getType\")\n        return null\n    }\n\n    override fun insert(uri: Uri?, values: ContentValues?): Uri? {\n        android.util.Log.e(\"TestContentProvider\", \"insert\")\n        var insertUri: Uri? = null\n        values?.let {\n            val db = RoomDBHelper.getWritableDatabase(context)\n            try {\n                db.beginTransaction()\n                insertUri = ContentUris.withAppendedId(uri!!, db.insert(\"collect_tab\", SQLiteDatabase.CONFLICT_REPLACE, it))\n                db.setTransactionSuccessful()\n                context.contentResolver.notifyChange(uri!!, null)\n            } catch (e: Exception) {\n                e.printStackTrace()\n            } finally {\n                db.endTransaction()\n            }\n        }\n        return insertUri\n    }\n\n    override fun delete(uri: Uri?, selection: String?, selectionArgs: Array<String>?): Int {\n        android.util.Log.e(\"TestContentProvider\", \"delete \")\n        val db = RoomDBHelper.getWritableDatabase(context)\n        var result = 0\n        try {\n            db.beginTransaction()\n            result = db.delete(\"collect_tab\", selection, selectionArgs)\n            db.setTransactionSuccessful()\n            if (result > 0) {\n                context.contentResolver.notifyChange(uri!!, null)\n            }\n        } catch (e: Exception) {\n            e.printStackTrace()\n        } finally {\n            db.endTransaction()\n        }\n        return result\n    }\n\n    override fun update(uri: Uri?, values: ContentValues?, selection: String?, selectionArgs: Array<String>?): Int {\n        android.util.Log.e(\"TestContentProvider\", \"update\")\n        var result = 0\n        values?.let {\n            val db = RoomDBHelper.getWritableDatabase(context)\n            try {\n                db.beginTransaction()\n                result = db.update(\"collect_tab\", SQLiteDatabase.CONFLICT_NONE, it, selection!!, selectionArgs!!)\n                db.setTransactionSuccessful()\n                if (result > 0) {\n                    context.contentResolver.notifyChange(uri!!, null)\n                }\n            } catch (e: Exception) {\n                e.printStackTrace()\n            } finally {\n                db.endTransaction()\n            }\n        }\n        return result\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_home/adapter/HomeNewsAdapter.kt",
    "content": "package com.wgllss.dynamic.sample.feature_home.adapter\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.graphics.Color\nimport android.text.TextUtils\nimport android.util.TypedValue\nimport android.view.Gravity\nimport android.view.ViewGroup\nimport android.widget.FrameLayout\nimport android.widget.ImageView\nimport android.widget.ProgressBar\nimport android.widget.TextView\nimport androidx.recyclerview.widget.RecyclerView\nimport com.wgllss.core.adapter.BasePluginRecyclerAdapter\nimport com.wgllss.core.adapter.BaseRecyclerAdapter\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.ex.loadUrl\nimport com.wgllss.core.units.ScreenManager\nimport com.wgllss.sample.data.NewsBean\nimport com.wgllss.sample.feature_system.globle.Constants\nimport com.wgllss.sample.features_ui.page.base.SkinContains\n\nclass HomeNewsAdapter(re: Resources, packageName: String) : BasePluginRecyclerAdapter<NewsBean>(re, packageName) {\n\n    private val id1 = 1\n    private val id2 = 2\n    private val id3 = 3\n\n    private val id31 = 31\n    private val id32 = 32\n\n    private val id21 = 21\n    private val id22 = 22\n    private val id231 = 231\n    private val id232 = 232\n    private val id233 = 233\n\n    private var cornerRadiusInt: Int = 0\n    private val textColor by lazy { Color.parseColor(\"#999999\") }\n    private val footer by lazy { NewsBean(\"\", \"\", \"\", 0, 300, \"\", \"\", \"\", mutableListOf()) }\n    fun addFooter() {\n        mData.add(footer)\n        notifyItemInserted(mData.size - 1)\n    }\n\n    fun removeFooter() {\n        mData.removeAt(mData.size - 1)\n        notifyItemRemoved(mData.size)\n    }\n\n    override fun getLayoutResIdName(viewType: Int) = \"\"\n\n    override fun getItemViewType(position: Int): Int {\n        return if (position == 0) 0 else {\n            if (getItem(position).imgsrc3gtype == 2) 2\n            else if (getItem(position).imgsrc3gtype == 300) 3\n            else 1\n        }\n    }\n\n    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseBindingViewHolder {\n        if (context == null) {\n            context = parent.context\n            cornerRadiusInt = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 999f, parent.context.resources.displayMetrics).toInt()\n        }\n        val layout = when (viewType) {\n            0 -> {\n                val frameLayout = FrameLayout(context!!).apply {\n                    layoutParams = RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, context.getIntToDip(136f).toInt())\n                    val array: IntArray = intArrayOf(android.R.attr.selectableItemBackground)\n                    val typedValue = TypedValue()\n                    val attr = context.theme.obtainStyledAttributes(typedValue.resourceId, array)\n                    foreground = attr.getDrawable(0)!!\n                    attr.recycle()\n                    isClickable = true\n                    isFocusable = true\n                }\n\n                val img = ImageView(parent.context).apply {\n                    id = id31\n                    layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n                    scaleType = ImageView.ScaleType.FIT_XY\n                }\n                frameLayout.addView(img)\n\n                val title = TextView(context).apply {\n                    id = id32\n                    val size = context.getIntToDip(20f).toInt()\n                    layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, size).apply {\n                        gravity = Gravity.BOTTOM or Gravity.LEFT\n                    }\n                    gravity = Gravity.CENTER_VERTICAL\n                    setTextColor(Color.WHITE)\n                    setTextSize(TypedValue.COMPLEX_UNIT_DIP, 15f)\n                    setBackgroundColor(Color.parseColor(\"#90000000\"))\n                }\n                frameLayout.addView(title)\n                frameLayout\n            }\n            2 -> {\n                val frameLayout = FrameLayout(context!!).apply {\n                    layoutParams = RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, context.getIntToDip(136f).toInt())\n                    val array: IntArray = intArrayOf(android.R.attr.selectableItemBackground)\n                    val typedValue = TypedValue()\n                    val attr = context.theme.obtainStyledAttributes(typedValue.resourceId, array)\n                    foreground = attr.getDrawable(0)!!\n                    attr.recycle()\n                    isClickable = true\n                    isFocusable = true\n                    val size = context.getIntToDip(20f).toInt()\n                    setPadding(size, 0, size, 0)\n                }\n\n                val title = TextView(context).apply {\n                    id = id21\n                    layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, context.getIntToDip(26f).toInt()).apply {\n                        gravity = Gravity.TOP or Gravity.LEFT\n                    }\n                    gravity = Gravity.CENTER_VERTICAL\n                    setTextColor(getPluginColor(skinRes, \"textColorPrimary\", SkinContains.packageName))\n                    setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20f)\n                }\n                frameLayout.addView(title)\n\n                val height = parent.context.getIntToDip(86f).toInt()\n                val margin = parent.context.getIntToDip(20f).toInt()\n                val width = (ScreenManager.screenWidth - 2 * margin) / 3 - parent.context.getIntToDip(3f).toInt()\n\n                val img1 = ImageView(context).apply {\n                    id = id231\n                    layoutParams = FrameLayout.LayoutParams(width, height).apply {\n                        gravity = Gravity.TOP or Gravity.LEFT\n                        topMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 26f, context.resources.displayMetrics).toInt()\n                    }\n                    scaleType = ImageView.ScaleType.CENTER_CROP\n                }\n                frameLayout.addView(img1)\n\n                val img2 = ImageView(context).apply {\n                    id = id232\n                    layoutParams = FrameLayout.LayoutParams(width, height).apply {\n                        gravity = Gravity.TOP or Gravity.CENTER_HORIZONTAL\n                        topMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 26f, context.resources.displayMetrics).toInt()\n                    }\n                    scaleType = ImageView.ScaleType.CENTER_CROP\n                }\n                frameLayout.addView(img2)\n\n                val img3 = ImageView(context).apply {\n                    id = id233\n                    layoutParams = FrameLayout.LayoutParams(width, height).apply {\n                        gravity = Gravity.TOP or Gravity.RIGHT\n                        topMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 26f, context.resources.displayMetrics).toInt()\n                    }\n                    scaleType = ImageView.ScaleType.CENTER_CROP\n                }\n                frameLayout.addView(img3)\n\n                val time = TextView(context).apply {\n                    id = id22\n                    layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, context.getIntToDip(20f).toInt()).apply {\n                        gravity = Gravity.BOTTOM or Gravity.LEFT\n                    }\n                    gravity = Gravity.CENTER_VERTICAL\n                    setTextColor(textColor)\n                    setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13f)\n                    maxLines = 1\n                }\n                frameLayout.addView(time)\n                frameLayout\n            }\n            3 -> {\n                ProgressBar(context).apply {\n                    layoutParams = RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, RecyclerView.LayoutParams.WRAP_CONTENT).apply {\n                        topMargin = context.getIntToDip(5f).toInt()\n                    }\n                }\n            }\n            else -> {\n                val frameLayout = FrameLayout(context!!).apply {\n                    layoutParams = RecyclerView.LayoutParams(RecyclerView.LayoutParams.MATCH_PARENT, context.getIntToDip(86f).toInt())\n                    val array: IntArray = intArrayOf(android.R.attr.selectableItemBackground)\n                    val typedValue = TypedValue()\n                    val attr = context.theme.obtainStyledAttributes(typedValue.resourceId, array)\n                    foreground = attr.getDrawable(0)!!\n                    attr.recycle()\n                    isClickable = true\n                    isFocusable = true\n                    val size = context.getIntToDip(20f).toInt()\n                    setPadding(size, 0, size, 0)\n                }\n\n                val img = ImageView(context!!).apply {\n                    id = id1\n                    val size = context.getIntToDip(80f).toInt()\n                    layoutParams = FrameLayout.LayoutParams(size, size).apply {\n                        gravity = Gravity.TOP or Gravity.LEFT\n                        topMargin = context.getIntToDip(3f).toInt()\n                    }\n                    scaleType = ImageView.ScaleType.FIT_XY\n                }\n                frameLayout.addView(img)\n\n                val textViewName = TextView(context).apply {\n                    id = id2\n                    layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, context.getIntToDip(45f).toInt()).apply {\n                        gravity = Gravity.TOP or Gravity.LEFT\n                        leftMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 90f, context.resources.displayMetrics).toInt()\n                        topMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 3f, context.resources.displayMetrics).toInt()\n                    }\n                    gravity = Gravity.CENTER_VERTICAL\n                    setTextColor(getPluginColor(skinRes, \"textColorPrimary\", SkinContains.packageName))\n                    setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18f)\n                    maxLines = 2\n                }\n                frameLayout.addView(textViewName)\n\n                val time = TextView(context).apply {\n                    id = id3\n                    layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, context.getIntToDip(26f).toInt()).apply {\n                        gravity = Gravity.BOTTOM or Gravity.LEFT\n                        leftMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 90f, context.resources.displayMetrics).toInt()\n                    }\n                    gravity = Gravity.CENTER_VERTICAL\n                    setTextColor(textColor)\n                    setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13f)\n                    maxLines = 1\n                }\n                frameLayout.addView(time)\n                frameLayout\n            }\n        }\n\n        return BaseBindingViewHolder(layout)\n    }\n\n    override fun onBindItem(context: Context, item: NewsBean, holder: RecyclerView.ViewHolder, position: Int) {\n        when (getItemViewType(position)) {\n            0 -> {\n                holder.itemView.findViewById<ImageView>(id31).loadUrl(item.imgsrc)\n                holder.itemView.findViewById<TextView>(id32).text = item.title\n            }\n            2 -> {\n                holder.itemView.findViewById<TextView>(id21).text = item.title\n                holder.itemView.findViewById<TextView>(id22).text = \"${item.source}  ${item.ptime}\"\n                holder.itemView.findViewById<ImageView>(id231).loadUrl(item.imgsrc)\n                holder.itemView.findViewById<ImageView>(id232).loadUrl(item.imgextra[0].imgsrc)\n                holder.itemView.findViewById<ImageView>(id233).loadUrl(item.imgextra[1].imgsrc)\n            }\n            3 -> {\n\n            }\n            else -> {\n                if (TextUtils.isEmpty(item.imgsrc)) {\n                    holder.itemView.findViewById<ImageView>(id1).setImageResource(Constants.defaultImgID)\n                    //todo Glide 里面可以配置 加载失败图片，这里只是 实例一下 这么写，可以这样直接用到宿主 资源\n                } else {\n                    holder.itemView.findViewById<ImageView>(id1).loadUrl(item.imgsrc)\n                }\n                holder.itemView.findViewById<TextView>(id2).text = item.title\n                holder.itemView.findViewById<TextView>(id3).text = \"${item.source}  ${item.ptime}\"\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_home/fragment/HomeFragment.kt",
    "content": "package com.wgllss.dynamic.sample.feature_home.fragment\n\nimport android.content.Intent\nimport android.content.res.Resources\nimport android.graphics.Color\nimport android.os.Bundle\nimport android.view.Gravity\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.FrameLayout\nimport androidx.recyclerview.widget.GridLayoutManager\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport androidx.recyclerview.widget.RecyclerView\nimport androidx.swiperefreshlayout.widget.SwipeRefreshLayout\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.ex.initColors\nimport com.wgllss.core.fragment.BaseViewModelFragment\nimport com.wgllss.core.units.WLog\nimport com.wgllss.core.widget.DividerGridItemDecoration\nimport com.wgllss.core.widget.OnRecyclerViewItemClickListener\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.dynamic.plugin.manager.PluginResource\nimport com.wgllss.dynamic.sample.feature_home.adapter.HomeNewsAdapter\nimport com.wgllss.dynamic.sample.feature_home.pkg.ResourceContains\nimport com.wgllss.dynamic.sample.feature_home.viewmodels.HomeTabViewModel\nimport com.wgllss.dynamic.sample.feature_startup.startup.HomeContains\nimport com.wgllss.dynamic.sample.feature_startup.startup.LaunchInflateKey\nimport kotlinx.coroutines.runBlocking\n\nclass HomeFragment : BaseViewModelFragment<HomeTabViewModel>(ResourceContains.packageName) {\n\n    var title: String = \"\"\n    private var key: String = \"\"\n\n    companion object {\n        private const val TITLE_KEY = \"TITLE_KEY\"\n        private const val KEY = \"KEY\"\n\n        fun newInstance(titleS: String, keyS: String): HomeFragment {\n            val fragment = HomeFragment().apply {\n                arguments = Bundle().apply {\n                    putString(TITLE_KEY, titleS)\n                    putString(KEY, keyS)\n                }\n                title = titleS\n            }\n            return fragment\n        }\n    }\n\n    override fun getPluginResources(): Resources? = null\n\n    override fun getSkinResources() = PluginResource.getSkinResources()\n\n//    private val homeTabViewModel by lazy { viewModels<HomeTabViewModel>().value }\n\n    private lateinit var rvPlList: RecyclerView\n    private lateinit var swipeRefreshLayout: SwipeRefreshLayout\n\n    private lateinit var homeNewsAdapter: HomeNewsAdapter\n\n//    override fun activitySameViewModel() = true\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        title = arguments?.getString(TITLE_KEY, \"\") ?: \"\"\n        key = arguments?.getString(KEY, \"\") ?: \"\"\n    }\n\n    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {\n        if (!this::swipeRefreshLayout.isInitialized) {\n            if (\"BAI6I0O5wangning\" == key) {\n                runBlocking {\n                    swipeRefreshLayout = HomeContains.getViewByKey(inflater.context, LaunchInflateKey.home_fragment)!! as SwipeRefreshLayout\n                    rvPlList = swipeRefreshLayout.findViewById(getSkinPluginID(\"home_recycle_view\"))\n                }\n            } else {\n                swipeRefreshLayout = SwipeRefreshLayout(inflater.context).apply {\n                    layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n                    initColors()\n                }\n                rvPlList = RecyclerView(inflater.context).apply {\n                    val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n                    lp.gravity = Gravity.TOP and Gravity.LEFT\n                    layoutParams = lp\n                    layoutManager = LinearLayoutManager(context)\n                    setHasFixedSize(true)\n                    val itemDecoration = View(context)\n                    val size = context.getIntToDip(1.0f).toInt()\n                    itemDecoration.layoutParams = ViewGroup.LayoutParams(size, size)\n                    itemDecoration.setBackgroundColor(Color.parseColor(\"#60000000\"))\n                    addItemDecoration(DividerGridItemDecoration(context, GridLayoutManager.VERTICAL, itemDecoration))\n                }\n                swipeRefreshLayout.addView(rvPlList)\n            }\n        }\n        return swipeRefreshLayout\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        swipeRefreshLayout.setOnRefreshListener {\n            viewModel.reset(key)\n            viewModel.getData(key)\n        }\n        rvPlList?.run {\n            addOnItemTouchListener(object : OnRecyclerViewItemClickListener(this) {\n                override fun onItemClickListener(itemRootView: View, position: Int) {\n                    activity?.run {\n                        /** 方案一写法 other2 首次下载写法 start  **/\n                        showloading(\"请稍后...\")\n                        val status = PluginManager.instance.isLoadSuccessByKey(\"classes_other2_dex\", \"classes_other2_res\")\n                        hideLoading()\n                        if (!status) {\n                            onToast(\"缺少插件\")\n                            return\n                        }\n                        PluginManager.instance.startPluginSingleTaskActivity(\n                            this@run, \"classes_other2_res\",\n                            \"com.wgllss.sample.features_ui.page.other2.activity.WebViewActivity\",\n                            \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n                                putExtra(\"web_url_key\", homeNewsAdapter.getItem(position).docid)\n                                putExtra(\"title_key\", homeNewsAdapter.getItem(position).title)\n                                putExtra(\"docid_key\", StringBuilder(homeNewsAdapter.getItem(position).docid).append(\".html\").toString())\n                            }\n                        )\n                        /** 方案一写法 other2 首次下载写法 end  **/\n\n\n                        /** 方案二写法 other2 点击时候下载安装 start  **/\n//                    lifecycleScope.launch {\n//                        PluginManager.instance.dynamicLoadPlugin(this@run, Pair(\"classes_other2_dex\", 1000), Pair(\"classes_other2_res\", 1000)).onStart { showloading(\"加载中...\") }.onCompletion { hideLoading() }.catch {\n//                            onToast(it.parseErrorString())\n//                        }.collect {\n//                            PluginManager.instance.startPluginSingleTaskActivity(\n//                                this@run, \"classes_other2_res\", \"com.wgllss.sample.features_ui.page.other2.activity.WebViewActivity\", \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n//                                    putExtra(\"web_url_key\", homeNewsAdapter.getItem(position).docid)\n//                                    putExtra(\"title_key\", homeNewsAdapter.getItem(position).title)\n//                                    putExtra(\"docid_key\", StringBuilder(homeNewsAdapter.getItem(position).docid).append(\".html\").toString())\n//                                })\n//                        }\n//                    }\n                        /** 方案二写法 other2 首次下载写法 end  **/\n                    }\n                }\n\n                override fun onItemLongClickListener(itemRootView: View, position: Int) {\n                    viewModel.addToCollection(homeNewsAdapter.getItem(position))\n                }\n            })\n            addOnScrollListener(object : RecyclerView.OnScrollListener() {\n\n                override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {\n                    super.onScrolled(recyclerView, dx, dy)\n                    val linearLayoutManager = recyclerView.layoutManager as LinearLayoutManager?\n                    if (viewModel.enableLoadMore(key) && linearLayoutManager!!.itemCount == linearLayoutManager.findLastVisibleItemPosition() + 1) {\n                        viewModel.getData(key)\n                    }\n                }\n            })\n        }\n        if (rvPlList.adapter == null) {\n            homeNewsAdapter = HomeNewsAdapter(getSkinResources(), packageName)\n            homeNewsAdapter.skinRes = getSkinResources()\n            rvPlList.adapter = homeNewsAdapter\n        } else {\n            homeNewsAdapter = rvPlList.adapter as HomeNewsAdapter\n        }\n        homeNewsAdapter?.itemCount?.takeIf {\n            it > 0\n        }?.let {\n            viewModel.isLoadOffine = true\n        }\n        viewModel.getData(key)\n    }\n\n    override fun initObserve() {\n        super.initObserve()\n        viewModel.run {\n            initKey(key)\n            result[key]?.observe(viewLifecycleOwner) {\n                WLog.e(this@HomeFragment, key)\n                if (\"BAI6I0O5wangning\" != key || !viewModel.isLoadOffine) {\n                    homeNewsAdapter.notifyData(it, getSkinResources())\n                }\n                homeNewsAdapter.addFooter()\n            }\n            enableLoadeMore[key]?.observe(viewLifecycleOwner) {\n                if (!it)\n                    homeNewsAdapter.removeFooter()\n            }\n            showUIDialog.observe(viewLifecycleOwner) {\n                if (!isLoadOffine)\n                    if (!isClick) {\n                        swipeRefreshLayout.isRefreshing = it.isShow && !isLoadingMore(key)\n                    } else {\n                        if (it.isShow) showloading(it.msg) else hideLoading()\n                    }\n            }\n            errorMsgLiveData.observe(viewLifecycleOwner) {\n                onToast(it)\n            }\n            liveDataLoadSuccessCount.observe(viewLifecycleOwner) {\n                if (it > 1) swipeRefreshLayout.isRefreshing = false\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_home/fragment/HomeTabFragment.kt",
    "content": "package com.wgllss.dynamic.sample.feature_home.fragment\n\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.util.TypedValue\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.TextView\nimport androidx.fragment.app.Fragment\nimport androidx.viewpager2.widget.ViewPager2\nimport com.google.android.material.tabs.TabLayout\nimport com.google.android.material.tabs.TabLayoutMediator\nimport com.wgllss.core.adapter.ViewPage2ChildFragmentAdapter\nimport com.wgllss.core.fragment.BaseViewModelFragment\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.dynamic.plugin.manager.PluginResource\nimport com.wgllss.dynamic.sample.feature_home.pkg.ResourceContains\nimport com.wgllss.dynamic.sample.feature_home.viewmodels.HomeViewModel\nimport com.wgllss.dynamic.sample.feature_startup.startup.HomeContains\nimport com.wgllss.dynamic.sample.feature_startup.startup.LaunchInflateKey\nimport kotlinx.coroutines.runBlocking\n\nclass HomeTabFragment : BaseViewModelFragment<HomeViewModel>(ResourceContains.packageName) {\n\n    private lateinit var childAdapter: ViewPage2ChildFragmentAdapter\n    private lateinit var homeTabLayout: TabLayout\n    private lateinit var viewPager2: ViewPager2\n    private lateinit var view_title_bar_bg: View\n    private lateinit var rootView: View\n    private var mTabLayoutMediator: TabLayoutMediator? = null\n\n    override fun activitySameViewModel() = true\n\n    override fun getPluginResources(): Resources? = null\n\n    override fun getSkinResources() = PluginResource.getSkinResources()\n\n    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {\n        runBlocking {\n            if (!::rootView.isInitialized) {\n                rootView = HomeContains.getViewByKey(inflater.context, LaunchInflateKey.home_tab_fragment_layout)!!\n                homeTabLayout = rootView.findViewById(getSkinPluginID(\"homeTabLayout\"))\n                viewPager2 = rootView.findViewById(getSkinPluginID(\"homeViewPager2\"))\n                view_title_bar_bg = rootView.findViewById(getSkinPluginID(\"view_title_bg\"))\n            }\n            rootView?.parent?.takeIf {\n                it is ViewGroup\n            }?.let {\n                (it as ViewGroup).removeView(rootView)\n            }\n        }\n        return rootView\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        viewModel.lazyTabViewPager2.observe(viewLifecycleOwner) {\n            childAdapter = ViewPage2ChildFragmentAdapter(childFragmentManager, lifecycle)\n            viewPager2.adapter = childAdapter\n            mTabLayoutMediator = TabLayoutMediator(homeTabLayout, viewPager2) { tab: TabLayout.Tab, position: Int ->\n                val textView = TextView(requireContext())\n                textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18f)\n                ResourceUtils.setTextColor(getSkinResources(), \"colorOnPrimary\", ResourceContains.packageName, textView)\n                tab.customView = textView\n                textView.text = (childAdapter.list[position] as HomeFragment).title\n            }.apply(TabLayoutMediator::attach)\n            homeTabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {\n                override fun onTabSelected(tab: TabLayout.Tab) {\n                    tab?.customView?.takeIf {\n                        it is TextView\n                    }?.run {\n                        (this as TextView).run {\n                            setTextSize(TypedValue.COMPLEX_UNIT_DIP, 20f)\n//                            setTextColor(resources.getColor(R.color.colorPrimary))\n                        }\n                    }\n                }\n\n                override fun onTabUnselected(tab: TabLayout.Tab) {\n                    tab?.customView?.takeIf {\n                        it is TextView\n                    }?.run {\n                        (this as TextView).run {\n                            setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18f)\n//                            setTextColor(resources.getColor(R.color.white))\n                        }\n                    }\n                }\n\n                override fun onTabReselected(tab: TabLayout.Tab) {\n                }\n            })\n            childAdapter.notifyData(getList())\n            viewPager2.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {\n                override fun onPageSelected(position: Int) {\n                    if (position > 0 && viewPager2.offscreenPageLimit != childAdapter.itemCount)\n                        viewPager2.offscreenPageLimit = childAdapter.itemCount\n                }\n            })\n        }\n    }\n\n    private fun getList() = mutableListOf<Fragment>(\n        HomeFragment.newInstance(\"手机\", \"BAI6I0O5wangning\"),\n        HomeFragment.newInstance(\"新闻\", \"BBM54PGAwangning\"),\n        HomeFragment.newInstance(\"娱乐\", \"BA10TA81wangning\"),\n        HomeFragment.newInstance(\"体育\", \"BA8E6OEOwangning\"),\n        HomeFragment.newInstance(\"时尚\", \"BA8F6ICNwangning\"),\n        HomeFragment.newInstance(\"财经\", \"BA8EE5GMwangning\"),\n        HomeFragment.newInstance(\"汽车\", \"BA8DOPCSwangning\"),\n        HomeFragment.newInstance(\"军事\", \"BAI67OGGwangning\"),\n        HomeFragment.newInstance(\"科技\", \"BA8D4A3Rwangning\"),\n    )\n\n    override fun onDetach() {\n        super.onDetach()\n        mTabLayoutMediator?.detach()\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", ResourceContains.packageName, view_title_bar_bg)\n        homeTabLayout?.run {\n            setSelectedTabIndicatorColor(ResourceUtils.getPluginColor(skinRes, \"colorOnPrimary\", ResourceContains.packageName))\n            for (i in 0 until tabCount) {\n                getTabAt(i)?.customView?.takeIf {\n                    it is TextView\n                }?.let {\n                    ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", ResourceContains.packageName, it as TextView)\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_home/pkg/ResourceContains.kt",
    "content": "package com.wgllss.dynamic.sample.feature_home.pkg\n\nobject ResourceContains {\n    const val packageName: String = \"com.wgllss.sample.skin\"\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_home/viewmodels/HomeTabViewModel.kt",
    "content": "package com.wgllss.dynamic.sample.feature_home.viewmodels\n\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.core.units.AppGlobals\nimport com.wgllss.core.units.WLog\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.sample.data.NewsBean\nimport com.wgllss.sample.datasource.repository.NewsRepository\nimport kotlinx.coroutines.flow.onEach\n\nclass HomeTabViewModel : BaseViewModel() {\n\n    private val newsRepositoryL by lazy { NewsRepository.getInstance(AppGlobals.sApplication) }\n\n\n    val liveDataLoadSuccessCount by lazy { MutableLiveData(0) }\n\n    var isClick = false\n\n    var isLoadOffine = false\n\n    val result by lazy { mutableMapOf<String, MutableLiveData<MutableList<NewsBean>>>() }\n    private val pageNoMap by lazy { mutableMapOf<String, Int>() }\n    private val isLoadingMore by lazy { mutableMapOf<String, Boolean>() }\n    val enableLoadeMore by lazy { mutableMapOf<String, MutableLiveData<Boolean>>() }\n\n    fun enableLoadMore(key: String) = !isLoadingMore[key]!! && enableLoadeMore[key]!!.value!!\n\n    fun isLoadingMore(key: String) = pageNoMap[key] != 0\n\n    override fun start() {\n    }\n\n    fun initKey(key: String) {\n        result[key] = MutableLiveData<MutableList<NewsBean>>()\n        isLoadingMore[key] = false\n        enableLoadeMore[key] = MutableLiveData(true)\n        pageNoMap[key] = 0\n    }\n\n    fun reset(key: String) {\n        pageNoMap[key] = 0\n    }\n\n\n    fun getData(key: String) {\n        isLoadingMore[key] = true\n        isClick = false\n        flowAsyncWorkOnViewModelScopeLaunch {\n            val start = pageNoMap[key]!!\n            val end = start + 10\n            newsRepositoryL.getNetTabInfo(key, start, end).onEach {\n                if (pageNoMap[key] == 0) {\n                    WLog.e(this@HomeTabViewModel, key)\n                    result[key]?.postValue(it)\n                    isLoadOffine = false\n                } else {\n                    val list = result[key]?.value ?: mutableListOf()\n                    list?.removeAt(list.size - 1)\n                    list?.addAll(it)\n                    result[key]?.postValue(list)\n                }\n                var c = liveDataLoadSuccessCount.value?.plus(1)\n                liveDataLoadSuccessCount.postValue(c)\n                enableLoadeMore[key]?.postValue(it.size == 10)\n                if (it.size == 10)\n                    pageNoMap[key] = pageNoMap[key]!!.plus(10)\n                isLoadingMore[key] = false\n            }\n        }\n    }\n\n    fun addToCollection(it: NewsBean) {\n        flowAsyncWorkOnViewModelScopeLaunch {\n            newsRepositoryL.addToCollection(it).onEach {\n                errorMsgLiveData.postValue(it)\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_home/viewmodels/HomeViewModel.kt",
    "content": "package com.wgllss.dynamic.sample.feature_home.viewmodels\n\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.core.viewmodel.BaseViewModel\n\nclass HomeViewModel : BaseViewModel() {\n    val mCurrentFragmentTAG by lazy { StringBuilder() }\n\n    val lazyTabViewPager2 by lazy { MutableLiveData<Boolean>() }\n    var isFirst = true\n\n    fun lazyTabView() {\n        lazyTabViewPager2.value = true\n    }\n\n    override fun start() {\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_home/viewmodels/SettingViewModel.kt",
    "content": "package com.wgllss.dynamic.sample.feature_home.viewmodels\n//\n//import androidx.lifecycle.MutableLiveData\n//import com.wgllss.core.viewmodel.BaseViewModel\n//import com.wgllss.sample.feature_system.savestatus.MMKVHelp\n//\n//class SettingViewModel : BaseViewModel() {\n//\n//    val isOpenLockerUI by lazy { MutableLiveData<Boolean>() }\n//\n//    val isNotificationOpen by lazy { MutableLiveData<Boolean>() }\n//\n//    override fun start() {\n//        isOpenLockerUI.postValue(MMKVHelp.isOpenLockerUI())\n//    }\n//\n//    fun setLockerSwitch(isOpen: Boolean) {\n//        isOpenLockerUI.postValue(isOpen)\n//        MMKVHelp.setLockerSwitch(isOpen)\n//    }\n//\n//    fun setNotificationOpen(isOpen: Boolean) {\n//        isNotificationOpen.postValue(isOpen)\n//    }\n//\n//}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_startup/startup/GenerateHomeLayout.kt",
    "content": "package com.wgllss.dynamic.sample.feature_startup.startup\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.graphics.Color\nimport android.view.Gravity\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.FrameLayout\nimport androidx.fragment.app.FragmentContainerView\nimport androidx.recyclerview.widget.GridLayoutManager\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport androidx.recyclerview.widget.RecyclerView\nimport androidx.swiperefreshlayout.widget.SwipeRefreshLayout\nimport androidx.viewpager2.widget.ViewPager2\nimport com.google.android.material.bottomnavigation.BottomNavigationView\nimport com.google.android.material.navigation.NavigationBarView\nimport com.google.android.material.tabs.TabLayout\nimport com.google.gson.Gson\nimport com.google.gson.reflect.TypeToken\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.ex.initColors\nimport com.wgllss.core.widget.DividerGridItemDecoration\nimport com.wgllss.core.widget.clearLongClickToast\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.units.ScreenManager\nimport com.wgllss.dynamic.plugin.manager.PluginResource\nimport com.wgllss.dynamic.sample.feature_home.adapter.HomeNewsAdapter\nimport com.wgllss.dynamic.sample.feature_home.pkg.ResourceContains\nimport com.wgllss.sample.data.NewsBean\nimport com.wgllss.sample.feature_system.savestatus.MMKVHelp\n\nobject GenerateHomeLayout {\n\n    fun getCreateViewByKey(context: Context, key: String) = when (key) {\n        LaunchInflateKey.home_activity -> syncCreateHomeActivityLayout(context, PluginResource.getSkinResources())\n        LaunchInflateKey.home_navigation -> syncCreateHomeNavigationLayout(context, PluginResource.getSkinResources())\n        LaunchInflateKey.home_tab_fragment_layout -> syncCreateHomeTabFragmentLayout(context, PluginResource.getSkinResources())\n        LaunchInflateKey.home_fragment -> syncCreateHomeFragmentLayout(context, PluginResource.getSkinResources())\n        else -> null\n    }\n\n    private fun getPluginID(res: Resources, IDResName: String) = ResourceUtils.getPluginID(res, IDResName, ResourceContains.packageName)\n\n    private fun getStringValue(res: Resources, IDResName: String) = ResourceUtils.getPluginString(res, IDResName, ResourceContains.packageName)\n\n    private fun getDimenValue(res: Resources, IDResName: String) = ResourceUtils.getPluginDimen(res, IDResName, ResourceContains.packageName).toInt()\n\n    private fun getColorStatusList(res: Resources, resName: String) = ResourceUtils.getColorStatusList(res, resName, ResourceContains.packageName)\n\n    fun syncCreateHomeActivityLayout(context: Context, res: Resources): View {\n        val activityLayout = FragmentContainerView(context).apply {\n            val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n            setPadding(0, 0, 0, getDimenValue(res, \"navigation_height\"))\n            layoutParams = lp\n//            setBackgroundColor(ThemeUtils.getAndroidColorBackground(context))\n            setBackgroundColor(ResourceUtils.getPluginColor(res, \"colorBackground\", ResourceContains.packageName))\n            id = getPluginID(res, \"nav_host_fragment_activity_main\")// R.id.nav_host_fragment_activity_main\n        }\n        ScreenManager.measureAndLayout(activityLayout)\n        return activityLayout\n    }\n\n    fun syncCreateHomeNavigationLayout(context: Context, res: Resources): View {\n        val bottomNavigationView = BottomNavigationView(context).apply {\n            val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, getDimenValue(res, \"navigation_height\"))\n            lp.gravity = Gravity.BOTTOM or Gravity.LEFT\n            layoutParams = lp\n            id = getPluginID(res, \"buttom_navigation\")// R.id.buttom_navigation\n            setBackgroundColor(Color.TRANSPARENT)\n            labelVisibilityMode = NavigationBarView.LABEL_VISIBILITY_LABELED\n            menu.apply {\n                clear()\n                add(0, getPluginID(res, \"fmt_a\"), 0, getStringValue(res, \"title_home\"))\n                add(0, getPluginID(res, \"fmt_b\"), 0, getStringValue(res, \"title_collection\"))\n                add(0, getPluginID(res, \"fmt_c\"), 0, getStringValue(res, \"title_sample\"))\n                add(0, getPluginID(res, \"fmt_d\"), 0, getStringValue(res, \"title_setting\"))\n            }\n            val colorList = getColorStatusList(res, \"bottom_navigation_color_selector\")\n            itemTextColor = colorList\n            itemIconTintList = colorList\n            clearLongClickToast(\n                getPluginID(res, \"fmt_a\"),\n                getPluginID(res, \"fmt_b\"),\n                getPluginID(res, \"fmt_c\"),\n                getPluginID(res, \"fmt_d\")\n            )\n        }\n        ScreenManager.measureAndLayout(bottomNavigationView)\n        return bottomNavigationView\n    }\n\n    fun syncCreateHomeTabFragmentLayout(context: Context, res: Resources): View {\n        val tabFragmentLayout = FrameLayout(context).apply {\n            val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n            layoutParams = lp\n        }\n        val viewTitleBg = View(context).apply {\n            val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, getDimenValue(res, \"title_bar_height\"))\n            lp.gravity = Gravity.TOP or Gravity.LEFT\n            layoutParams = lp\n            id = getPluginID(res, \"view_title_bg\")\n//            setBackgroundColor(ThemeUtils.getColorPrimary(context))\n            setBackgroundColor(ResourceUtils.getPluginColor(res, \"colorPrimary\", ResourceContains.packageName))\n        }\n        tabFragmentLayout.addView(viewTitleBg)\n        val tabLayout = TabLayout(context).apply {\n            id = getPluginID(res, \"homeTabLayout\")//  R.id.homeTabLayout\n            val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, getDimenValue(res, \"title_bar_text_height\"))\n            lp.gravity = Gravity.TOP or Gravity.LEFT\n            lp.topMargin = getDimenValue(res, \"status_bar_height\") //res.getDimension(R.dimen.status_bar_height).toInt()\n            layoutParams = lp\n            setBackgroundColor(Color.TRANSPARENT)\n            tabMode = TabLayout.MODE_SCROLLABLE\n            tabGravity = TabLayout.GRAVITY_CENTER\n            setSelectedTabIndicatorColor(ResourceUtils.getPluginColor(res, \"colorOnPrimary\", ResourceContains.packageName))\n            setSelectedTabIndicatorHeight(8)\n        }\n        tabFragmentLayout.addView(tabLayout)\n        val viewPager2Layout = ViewPager2(context).apply {\n            id = getPluginID(res, \"homeViewPager2\")//R.id.homeViewPager2\n            val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n            lp.gravity = Gravity.TOP or Gravity.LEFT\n            lp.topMargin = getDimenValue(res, \"title_bar_height\") //res.getDimension(R.dimen.title_bar_height).toInt()\n            layoutParams = lp\n        }\n        tabFragmentLayout.addView(viewPager2Layout)\n        ScreenManager.measureAndLayout(tabFragmentLayout)\n        return tabFragmentLayout\n    }\n\n    fun syncCreateHomeFragmentLayout(context: Context, res: Resources): View {\n        val swipeRefreshLayout = SwipeRefreshLayout(context).apply {\n            layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n            initColors()\n        }\n        val homeFragmentView = RecyclerView(context).apply {\n            id = getPluginID(res, \"home_recycle_view\")//R.id.home_recycle_view\n            val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n            lp.gravity = Gravity.TOP or Gravity.LEFT\n            layoutParams = lp\n            layoutManager = LinearLayoutManager(context)\n            setHasFixedSize(true)\n            val itemDecoration = View(context)\n            val size = context.getIntToDip(1.0f).toInt()\n            itemDecoration.layoutParams = ViewGroup.LayoutParams(size, size)\n            itemDecoration.setBackgroundColor(Color.parseColor(\"#60000000\"))\n            addItemDecoration(DividerGridItemDecoration(context, GridLayoutManager.VERTICAL, itemDecoration))\n            val json = MMKVHelp.getHomeTab1Data()\n            json?.let {\n                val homeNewsAdapter = HomeNewsAdapter(res, ResourceContains.packageName)\n                adapter = homeNewsAdapter\n                val map = Gson().fromJson<MutableMap<String, MutableList<NewsBean>>>(it, object : TypeToken<Map<String, MutableList<NewsBean>>>() {}.type)\n                homeNewsAdapter.notifyData(map[\"BAI6I0O5wangning\"]!!, PluginResource.getSkinResources())\n            }\n        }\n        swipeRefreshLayout.addView(homeFragmentView)\n        return swipeRefreshLayout\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_startup/startup/HomeContains.kt",
    "content": "package com.wgllss.dynamic.sample.feature_startup.startup\n\nimport android.content.Context\nimport android.content.MutableContextWrapper\nimport android.view.View\nimport android.view.ViewGroup\nimport androidx.fragment.app.Fragment\nimport com.wgllss.core.units.WLog\nimport com.wgllss.dynamic.sample.feature_home.fragment.HomeTabFragment\nimport kotlinx.coroutines.Deferred\nimport java.util.concurrent.ConcurrentHashMap\n\nobject HomeContains {\n    private val map = ConcurrentHashMap<String, Deferred<View>>()\n    private val mapFragment = ConcurrentHashMap<String, Deferred<Fragment>>()\n\n    suspend fun getViewByKey(context: Context, key: String): View? {\n        val view = map.remove(key)?.await()\n        return if (view == null) {\n            WLog.e(this, \"getViewByKey key = $key is null\")\n            GenerateHomeLayout.getCreateViewByKey(context, key)\n        } else {\n            replaceContextForView(view, context)\n            view?.takeIf {\n                it.parent != null\n            }?.let {\n                (it.parent as ViewGroup).removeView(it)\n            }\n            view\n        }\n    }\n\n    fun putViewByKey(key: String, deferred: Deferred<View>) {\n        map[key] = deferred\n    }\n\n    fun putFragmentByKey(key: String, deferred: Deferred<Fragment>) {\n        mapFragment[key] = deferred\n    }\n\n    suspend fun getFragmentByKey(key: String) = mapFragment.remove(key)?.await() ?: HomeTabFragment()\n\n\n    private fun replaceContextForView(inflatedView: View?, context: Context?) {\n        if (inflatedView == null || context == null) {\n            return\n        }\n        val cxt = inflatedView.context\n        if (cxt is MutableContextWrapper) {\n            cxt.baseContext = context\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_startup/startup/InitHomeFirstInitializeHelp.kt",
    "content": "package com.wgllss.dynamic.sample.feature_startup.startup\n\nimport android.content.Context\nimport android.content.MutableContextWrapper\nimport com.tencent.mmkv.MMKV\nimport com.wgllss.core.ex.toTheme\nimport com.wgllss.core.units.ScreenManager\nimport com.wgllss.dynamic.host.lib.provider.WXProviderManager\nimport com.wgllss.dynamic.plugin.manager.PluginResource\nimport com.wgllss.dynamic.provider.TestContentProvider\nimport com.wgllss.dynamic.sample.feature_home.fragment.HomeTabFragment\nimport com.wgllss.sample.feature_system.savestatus.MMKVHelp\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.async\nimport kotlinx.coroutines.launch\n\nobject InitHomeFirstInitializeHelp {\n\n    fun initCreate(context: Context) {\n        CoroutineScope(Dispatchers.IO).launch {\n            ScreenManager.initScreenSize(context)\n            MMKV.initialize(context)\n\n            val themeID = context.resources.getIdentifier(\"Theme.WXDynamicPlugin\", \"style\", context.packageName)\n            val context: Context = MutableContextWrapper(context.toTheme(themeID))\n            val res = PluginResource.getSkinResources()\n            HomeContains.putViewByKey(LaunchInflateKey.home_activity, async {\n                GenerateHomeLayout.syncCreateHomeActivityLayout(context, res)\n            })\n            HomeContains.putViewByKey(LaunchInflateKey.home_navigation, async {\n                GenerateHomeLayout.syncCreateHomeNavigationLayout(context, res)\n            })\n            HomeContains.putFragmentByKey(LaunchInflateKey.home_tab_fragment, async {\n                HomeTabFragment()\n            })\n            HomeContains.putViewByKey(LaunchInflateKey.home_tab_fragment_layout, async {\n                GenerateHomeLayout.syncCreateHomeTabFragmentLayout(context, res)\n            })\n            HomeContains.putViewByKey(LaunchInflateKey.home_fragment, async {\n                GenerateHomeLayout.syncCreateHomeFragmentLayout(context, res)\n            })\n            async(Dispatchers.IO) {\n                val am = PluginResource.getWebRes().assets\n                try {\n                    val resJs = am.list(\"js\")\n                    val strOfflineResources = StringBuilder()\n                    if (resJs != null && resJs.isNotEmpty()) {\n                        for (i in resJs.indices) {\n                            strOfflineResources.append(resJs[i])\n                        }\n                    }\n                    val resCss = am.list(\"css\")\n                    if (resCss != null && resCss.isNotEmpty()) {\n                        for (i in resCss.indices) {\n                            strOfflineResources.append(resCss[i])\n                        }\n                    }\n                    MMKVHelp.saveJsPath(strOfflineResources.toString())\n                } catch (e: Exception) {\n                    e.printStackTrace()\n                }\n            }\n\n            /** 添加 ContentProvider **/\n            WXProviderManager.instance.addContentProvider(TestContentProvider(context))\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/sample/feature_startup/startup/LaunchInflateKey.kt",
    "content": "package com.wgllss.dynamic.sample.feature_startup.startup\n\nobject LaunchInflateKey {\n\n    const val home_navigation = \"home_navigation\"\n    const val home_activity = \"home_activity\"\n    const val home_fragment = \"home_fragment\"\n    const val home_tab_fragment = \"home_tab_fragment\"\n    const val home_tab_fragment_layout = \"home_tab_fragment_layout\"\n    const val home_tab_fragment_list = \"home_tab_fragment_list\"\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home/src/main/java/com/wgllss/dynamic/ui/HomeActivity.kt",
    "content": "package com.wgllss.dynamic.ui\n\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport androidx.core.view.get\nimport androidx.fragment.app.Fragment\nimport androidx.lifecycle.lifecycleScope\nimport com.google.android.material.bottomnavigation.BottomNavigationView\nimport com.wgllss.core.activity.BaseViewModelActivity\nimport com.wgllss.core.ex.parseErrorString\nimport com.wgllss.core.ex.switchFragment\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.dynamic.plugin.manager.PluginResource\nimport com.wgllss.dynamic.sample.feature_startup.startup.HomeContains\nimport com.wgllss.dynamic.sample.feature_startup.startup.LaunchInflateKey\nimport com.wgllss.dynamic.sample.feature_home.pkg.ResourceContains\nimport com.wgllss.dynamic.sample.feature_home.viewmodels.HomeViewModel\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.home.fragment.CollectFragment\nimport com.wgllss.sample.features_ui.page.home.fragment.SampleFragment\nimport com.wgllss.sample.features_ui.page.home.fragment.SettingFragment\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.onCompletion\nimport kotlinx.coroutines.flow.onStart\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.runBlocking\n\nopen class HomeActivity : BaseViewModelActivity<HomeViewModel>(ResourceContains.packageName) {\n\n    private val collectFragmentL by lazy { CollectFragment() }\n\n    private val sampleFragmentL by lazy { SampleFragment() }\n\n    private val settingFragmentL by lazy { SettingFragment() }\n\n    private lateinit var homeTabFragment: Fragment\n\n    private lateinit var navigationView: BottomNavigationView\n\n    private lateinit var contentLayout: View\n\n    override fun getPluginResources(): Resources? = null\n\n    override fun getSkinResources() = PluginResource.getSkinResources()\n\n    override fun onSaveInstanceState(outState: Bundle) {\n        super.onSaveInstanceState(Bundle())\n    }\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        runBlocking {\n            contentLayout = HomeContains.getViewByKey(this@HomeActivity, LaunchInflateKey.home_activity)!!\n            addContentView(contentLayout, contentLayout.layoutParams)\n            if (savedInstanceState == null) {\n                initFragment()\n                setCurrentFragment(homeTabFragment)\n            } else {\n                initNavigation()\n                onNavBarItemSelected(navigationView.menu.getItem(getItemId()).itemId)\n            }\n        }\n    }\n\n\n    override fun onBackPressed() {\n        exitApp()\n    }\n\n    override fun lazyInitValue() {\n        window.setBackgroundDrawable(null)//去掉主题背景颜色\n        if (viewModel.isFirst) {\n            viewModel.lazyTabView()\n            viewModel.isFirst = false\n        }\n        initNavigation()\n        addContentView(navigationView, navigationView.layoutParams)\n        initNavigation(navigationView)\n        lifecycleScope.launch(Dispatchers.IO) {\n            PluginManager.instance.deleteOldFile()//检查是否有旧版本插件文件需要删除\n        }\n    }\n\n    private fun initFragment() {\n        runBlocking {\n            if (!::homeTabFragment.isInitialized) {\n                homeTabFragment = HomeContains.getFragmentByKey(LaunchInflateKey.home_tab_fragment)\n            }\n        }\n    }\n\n    private fun initNavigation() {\n        runBlocking {\n            if (!::navigationView.isInitialized) {\n                navigationView = HomeContains.getViewByKey(this@HomeActivity, LaunchInflateKey.home_navigation)!! as BottomNavigationView\n            }\n        }\n    }\n\n    private fun initNavigation(bottomNavigationView: BottomNavigationView) {\n        bottomNavigationView.apply {\n            with(menu) {\n                get(0).icon = getPluginDrawable(getSkinResources(), \"ic_home_black_24dp\", SkinContains.packageName)\n                get(1).icon = getPluginDrawable(getSkinResources(), \"ic_baseline_grade_24\", SkinContains.packageName)\n                get(2).icon = getPluginDrawable(getSkinResources(), \"ic_dashboard_black_24dp\", SkinContains.packageName)\n                get(3).setIcon(getPluginDrawable(getSkinResources(), \"ic_notifications_black_24dp\", SkinContains.packageName))\n            }\n            if (viewModel.isFirst) viewModel.isFirst = false else selectedItemId = menu.getItem(getItemId()).itemId\n            setOnItemSelectedListener {\n                return@setOnItemSelectedListener onNavBarItemSelected(it.itemId)\n            }\n        }\n    }\n\n\n    private fun getItemId() = when (viewModel.mCurrentFragmentTAG.toString()) {\n        \"HomeFragment\" -> 0\n        \"CollectFragment\" -> 1\n        \"SampleFragment\" -> 2\n        \"SettingFragment\" -> 3\n        else -> 0\n    }\n\n    private fun onNavBarItemSelected(itemId: Int): Boolean {\n        when (itemId) {\n            getPluginID(getSkinResources(), \"fmt_a\", SkinContains.packageName) -> {\n                initFragment()\n                setCurrentFragment(homeTabFragment)\n            }\n\n            getPluginID(getSkinResources(), \"fmt_b\", SkinContains.packageName) -> {\n                /** 方案一写法 other 首次下载写法 start  **/\n                if (!isLoadSuccess()) return true\n                setCurrentFragment(collectFragmentL)\n                /** 方案一写法 other 首次下载写法 end  **/\n\n\n                /** 方案二写法 other 点击时候下载安装 start  **/\n//                downLoadPlugin {\n//                    setCurrentFragment(collectFragmentL)\n//                }\n                /** 方案二写法 other 点击时候下载安装 end  **/\n            }\n\n            getPluginID(getSkinResources(), \"fmt_c\", SkinContains.packageName) -> {\n                /** 方案一写法 other 首次下载写法 start  **/\n                if (!isLoadSuccess()) return true\n                setCurrentFragment(sampleFragmentL)\n                /** 方案一写法 other 首次下载写法 end  **/\n\n\n                /** 方案二写法 other 点击时候下载安装 start  **/\n//                downLoadPlugin {\n//                    setCurrentFragment(sampleFragmentL)\n//                }\n                /** 方案二写法 other 点击时候下载安装 end  **/\n            }\n\n            getPluginID(getSkinResources(), \"fmt_d\", SkinContains.packageName) -> {\n                /** 方案一写法 other 首次下载写法 start  **/\n                if (!isLoadSuccess()) return true\n                setCurrentFragment(settingFragmentL)\n                /** 方案一写法 other 首次下载写法 end  **/\n\n                /** 方案二写法 other 点击时候下载安装 start  **/\n//                downLoadPlugin {\n//                    setCurrentFragment(settingFragmentL)\n//                }\n                /** 方案二写法 other 点击时候下载安装 end  **/\n            }\n        }\n        return true\n    }\n\n    private fun setCurrentFragment(fragment: Fragment) {\n        switchFragment(fragment, viewModel.mCurrentFragmentTAG, getPluginID(getSkinResources(), \"nav_host_fragment_activity_main\", SkinContains.packageName))\n        viewModel.mCurrentFragmentTAG.delete(0, viewModel.mCurrentFragmentTAG.toString().length)\n        viewModel.mCurrentFragmentTAG.append(fragment.javaClass.simpleName)\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        if (!viewModel.isFirst) {\n            ResourceUtils.setBackgroundColor(skinRes, \"colorBackground\", ResourceContains.packageName, contentLayout)\n            val colorList = ResourceUtils.getColorStatusList(skinRes, \"bottom_navigation_color_selector\", ResourceContains.packageName)\n            navigationView.itemTextColor = colorList\n            navigationView.itemIconTintList = colorList\n        }\n    }\n\n    //方案一写法 other 首次下载写法\n    private fun isLoadSuccess(): Boolean {\n        showloading(\"请稍后...\")\n        //协程中主协程阻塞式，等到other 下载完，加载完后再执行后面的逻辑\n        val status = PluginManager.instance.isLoadSuccessByKey(\"classes_other_dex\", \"classes_other_res\")\n        hideLoading()\n        if (!status) {\n            onToast(\"缺少插件\")\n        }\n        return status\n    }\n\n    // 方案二写法 other 点击时候下载安装\n    private fun downLoadPlugin(loadCompleteBlock: () -> Unit) {\n        lifecycleScope.launch {\n            PluginManager.instance.dynamicLoadPlugin(this@HomeActivity, Pair(\"classes_other_dex\", 1000), Pair(\"classes_other_res\", 1000))\n                .onStart { showloading(\"加载中...\") }.onCompletion { hideLoading() }.catch {\n                    onToast(it.parseErrorString())\n                }.collect {\n                    loadCompleteBlock.invoke()\n                }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-loading/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-loading/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.loading\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        release {\n            minifyEnabled false\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\ndependencies {\n//    implementation libs.kotlin.stdlib\n\n//    compileOnly \"androidx.core:core-ktx:$rootProject.ext.kotlin_version\"\n    compileOnly project(path: ':maven-wgllss-common-re-library')\n    compileOnly project(path: ':maven-wgllss-dynamic-host-skin-resource-lib')\n\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Lib-Impl:1.0.1.7'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Loader-Lib:1.0.0.9'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Constant-Lib:1.0.0.6'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Download-Lib:1.0.0.8'\n    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-VersionK-Lib:1.0.00'\n    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Lib:1.0.02'\n\n    compileOnly libs.startup.runtime\n    compileOnly libs.androidx.core.ktx\n    compileOnly libs.androidx.lifecycle.runtime.ktx\n    compileOnly libs.androidx.activity.ktx\n    compileOnly libs.androidx.fragment.ktx\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_home_first.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_loading_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_loading_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-loading/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-loading/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.loading\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-loading/src/main/java/com/wgllss/dynamic/initializer/InitHomeFirstInitialize.kt",
    "content": "package com.wgllss.dynamic.initializer\n\nimport android.content.Context\nimport android.content.Intent\nimport androidx.startup.Initializer\nimport com.wgllss.core.ex.parseErrorString\nimport com.wgllss.core.widget.CommonToast\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.HOME\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.MLK\nimport com.wgllss.dynamic.host.lib.constant.DynamicPluginConstant.dldir\nimport com.wgllss.dynamic.host.lib.download.DownLoadResult\nimport com.wgllss.dynamic.host.lib.download.DynamicDownloadPlugin\nimport com.wgllss.dynamic.host.lib.impl.WXDynamicLoader\nimport com.wgllss.dynamic.system.broadcast.BroadCastAction\nimport kotlinx.coroutines.CoroutineScope\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.flow.*\nimport kotlinx.coroutines.launch\nimport kotlin.text.StringBuilder\n\nclass InitHomeFirstInitialize : Initializer<Unit> {\n\n    override fun create(context: Context) {\n        CoroutineScope(Dispatchers.Main).launch {\n            WXDynamicLoader.instance.loader?.run {\n                val face = WXDynamicLoader.instance.loader.getDownloadFace()\n                val downloadHelp = DynamicDownloadPlugin(face)\n                val ddir = dldir\n                var flow: Flow<DownLoadResult>? = null\n                var flowNew: Flow<Any?>? = null\n                getMapDluImpl().forEach { (key, value) ->\n                    val createFlow = flow {\n                        emit(downloadHelp.initDynamicByKey(context, key, ddir, StringBuilder().append(value.first).append(\"_\").append(value.second).toString()))\n                    }\n                    if (flow == null) {\n                        flow = createFlow\n                    } else {\n                        if (flowNew == null) {\n                            val f = flow!!.zip(createFlow) { it, it2 ->\n                                it?.run {\n                                    initDynamicRunTime(context, contentKey, fileAbsolutePath)\n                                }\n                                it2?.run {\n                                    initDynamicRunTime(context, contentKey, fileAbsolutePath)\n                                }\n                            }\n                            flowNew = f\n                        } else {\n                            val f = flowNew!!.zip(createFlow) { _, it2 ->\n                                it2?.run {\n                                    if (HOME == key) {\n                                        initDynamicRunTime(context, MLK, fileAbsolutePath)\n                                        initHomeCreate(context, javaClass.classLoader)\n                                        context.sendBroadcast(Intent(BroadCastAction.DOWNLOAD_HOME_COMPLETE_ACTION))\n                                    } else {\n                                        initDynamicRunTime(context, contentKey, fileAbsolutePath)\n                                    }\n                                }\n                            }\n                            flowNew = f\n                        }\n                    }\n                }\n                flowNew?.flowOn(Dispatchers.IO)\n                    ?.catch {\n                        it.printStackTrace()\n                        CommonToast.show(it.parseErrorString())\n                    }?.collect()\n            }\n        }\n    }\n\n    override fun dependencies(): List<Class<out Initializer<*>>> {\n        return emptyList()\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-loading/src/main/java/com/wgllss/dynamic/system/broadcast/BroadCastAction.kt",
    "content": "package com.wgllss.dynamic.system.broadcast\n\nobject BroadCastAction {\n    const val DOWNLOAD_HOME_COMPLETE_ACTION = \"DOWNLOAD_HOME_COMPLETE_ACTION\"\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-loading/src/main/java/com/wgllss/dynamic/system/broadcast/DownLoadCompleteBroadCast.kt",
    "content": "package com.wgllss.dynamic.system.broadcast\n\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport com.wgllss.dynamic.ui.HomeActivity\nimport com.wgllss.dynamic.system.broadcast.BroadCastAction.DOWNLOAD_HOME_COMPLETE_ACTION\n\nclass DownLoadCompleteBroadCast : BroadcastReceiver() {\n\n    override fun onReceive(context: Context, intent: Intent) {\n        intent?.action?.run {\n            when (this) {\n                DOWNLOAD_HOME_COMPLETE_ACTION -> {\n                    try {\n                        val clazz = Class.forName(HomeActivity::class.java.name)\n                        context.startActivity(Intent(context, clazz))\n                    } catch (e: Exception) {\n                        e.printStackTrace()\n                    }\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-loading/src/main/java/com/wgllss/dynamic/ui/HomeActivity.kt",
    "content": "package com.wgllss.dynamic.ui\n\nimport android.app.Activity\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport android.content.IntentFilter\nimport android.graphics.Color\nimport android.os.Build\nimport android.os.Bundle\nimport android.view.View\nimport android.view.WindowManager\nimport android.widget.FrameLayout\nimport android.widget.ImageView\nimport com.wgllss.core.ex.finishActivity\nimport com.wgllss.dynamic.system.broadcast.BroadCastAction\n\nclass HomeActivity : Activity() {\n\n    private val downLoadCompleteBroadCast by lazy { DownLoadCompleteBroadCast() }\n\n    private fun setStatusBarTranslucent(activity: Activity) {\n        activity?.window?.apply {\n            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {\n                //适配刘海屏\n                val layoutParams = attributes\n                layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;\n                attributes = layoutParams\n            }\n            decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)\n            statusBarColor = Color.TRANSPARENT\n        }\n    }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        setStatusBarTranslucent(this)\n        val imageView = ImageView(this).apply {\n            val lp = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n            layoutParams = lp\n            scaleType = ImageView.ScaleType.CENTER_CROP\n        }\n        imageView.setImageResource(com.wgllss.host.skin.R.drawable.loading)\n        setContentView(imageView)\n        val intentFilter = IntentFilter(BroadCastAction.DOWNLOAD_HOME_COMPLETE_ACTION)\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) registerReceiver(downLoadCompleteBroadCast, intentFilter, Context.RECEIVER_EXPORTED)\n        else registerReceiver(downLoadCompleteBroadCast, intentFilter)\n    }\n\n    override fun onDestroy() {\n        super.onDestroy()\n        downLoadCompleteBroadCast?.run {\n            unregisterReceiver(this)\n        }\n    }\n\n    inner class DownLoadCompleteBroadCast : BroadcastReceiver() {\n\n        override fun onReceive(context: Context, intent: Intent) {\n            intent?.action?.run {\n                when (this) {\n                    BroadCastAction.DOWNLOAD_HOME_COMPLETE_ACTION -> {\n                        try {\n                            val clazz = Class.forName(HomeActivity::class.java.name)\n                            context.startActivity(Intent(context, clazz))\n                            this@HomeActivity.finishActivity()\n                        } catch (e: Exception) {\n                            e.printStackTrace()\n                        }\n                    }\n\n                    else -> {}\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.dynamic.sample.other'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.dynamic.sample.other\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        release {\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"classes_other_res.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\n\ndef createCopyTask(assembleReleaseTask, buildType) {\n    def inputFile = file(\"${getProject().getBuildDir()}/outputs/apk/release/classes_other_res.apk\")\n    def outputFile = file(\"${rootProject.getBuildDir()}/classes_other_res\")\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    return tasks.create(\"assembleCopy\", Copy) {\n        group = 'other'\n        description = \"复制json到 指定输出目录\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(assembleReleaseTask.name)\n}\n\ntasks.whenTaskAdded { task ->\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(task, \"release\")\n    }\n//    if (task.name == \"cleanJson\") {\n//        createVersionJson(task, \"Release\")\n//    }\n}\n\n\ndependencies {\n\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other/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\n\n-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* #这个过滤器是谷歌推荐的算法，一般不做更改\n-optimizationpasses 7 # 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n-dontpreverify # 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n-dontusemixedcaseclassnames #混合时不使用大小写混合，混合后的类名为小写\n-verbose #包含有类名->混淆后类名的映射关系 日志记录\n-keepattributes SourceFile,LineNumberTable # 保留代码行号\n\n# Preserve some attributes that may be required for reflection.\n-keepattributes AnnotationDefault,*Annotation*,# 避免混淆注解\n                EnclosingMethod, # 避免混淆匿名类\n                InnerClasses, # 避免混淆内部类\n                RuntimeVisibleAnnotations,\n                RuntimeVisibleParameterAnnotations,\n                RuntimeVisibleTypeAnnotations,\n                Signature # 避免混淆泛型\n\n# Fragment\n-keep class * extends androidx.fragment.app.Fragment{}\n-keep class * extends androidx.fragment.app.FragmentActivity{}\n\n# keepclassmembers :防止类成员被移除或被混淆\n-keepclassmembers class * {\n    @android.webkit.JavascriptInterface <methods>;\n}\n\n# 保留本地native方法不被混淆\n-keepclasseswithmembernames class * { native <methods>;}\n\n# The support libraries contains references to newer platform versions.\n# Don't warn about those in case this app is linking against an older\n# platform version. We know about them, and they are safe.\n-dontnote android.support.**\n-dontnote androidx.**\n-dontwarn android.support.**\n-dontwarn androidx.**\n# 保留R下面的资源\n-keep class **.R$* {*;}\n## Android architecture components: Lifecycle\n# LifecycleObserver's empty constructor is considered to be unused by proguard\n-keepclassmembers class * implements androidx.lifecycle.LifecycleObserver {\n    <init>(...);\n}\n# ViewModel's empty constructor is considered to be unused by proguard\n-keepclassmembers class * extends androidx.lifecycle.ViewModel {\n    <init>(...);\n}\n# keep methods annotated with @OnLifecycleEvent even if they seem to be unused\n# (Mostly for LiveData.LifecycleBoundObserver.onStateChange(), but who knows)\n-keepclassmembers class * {\n    @androidx.lifecycle.OnLifecycleEvent *;\n}\n\n# ViewBinding\n-keep public class * extends androidx.viewbinding.ViewBinding {*;}\n\n# These classes are duplicated between android.jar and org.apache.http.legacy.jar.\n-dontnote org.apache.http.**\n-dontnote android.net.http.**\n\n# 保持自定义控件类不被混淆  # keepclasseswithmembers:防止拥有改成员的类和类成员被移除或被混淆\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet);\n}\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet, int);\n}\n# 保留枚举类不被混淆\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n\n# 保留Parcelable序列化类不被混淆\n#-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}\n## 保留Serializable序列化的类不被混淆\n#-keepnames class * implements java.io.Serializable\n#-keepclassmembers class * implements java.io.Serializable {\n#    static final long serialVersionUID;\n#    private static final java.io.ObjectStreamField[] serialPersistentFields;\n#    !static !transient <fields>;\n#    !private <fields>;\n#    !private <methods>;\n#    private void writeObject(java.io.ObjectOutputStream);\n#    private void readObject(java.io.ObjectInputStream);\n#    java.lang.Object writeReplace();\n#    java.lang.Object readResolve();\n#}\n## 对于带有回调函数的onXXEvent、**On*Listener的，不能被混淆\n#-keepclassmembers class * {\n#    void *(**On*Event);\n#    void *(**On*Listener);\n#}\n\n# Databinding\n-dontwarn android.databinding.**\n-keep class android.databinding.** { *; }\n-keep class androidx.lifecycle.** { *; }\n-keep class kotlinx.coroutines.** { *; }\n# kotlin 相关\n-dontwarn kotlin.**\n-keep class kotlin.** { *; }\n-keep interface kotlin.** { *; }\n################ 第三方库中的混淆规则start ##############################\n# Glide混淆\n#-keep public class * implements com.bumptech.glide.module.GlideModule\n#-keep class * extends com.bumptech.glide.module.AppGlideModule {\n# <init>(...);\n#}\n#-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {\n#  **[] $VALUES;\n#  public *;\n#}\n#-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {\n#  *** rewind();\n#}\n\n#友盟混淆\n-keep class com.umeng.** {*;}\n-keep class org.repackage.** {*;}\n-keepclassmembers class * {\n   public <init> (org.json.JSONObject);\n}\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n#Jsoup 混淆\n#-dontwarn org.jsoup.**\n#-keep class org.jsoup.**{*;}\n#-keeppackagenames org.jsoup.nodes\n\n# Gson\n#-keep class com.google.gson.** {*;}\n#-keep class com.google.gson.stream.** {*;}\n#-keep class com.google.** {\n#    <fields>;\n#    <methods>;\n#}\n\n\n#\n############### 对于一些基本指令的添加start ##################\n## 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n#-optimizationpasses 5\n## 混合时不使用大小写混合，混合后的类名为小写\n#-dontusemixedcaseclassnames\n## 指定不去忽略非公共库的类\n#-dontskipnonpubliclibraryclasses\n## 这句话能够使我们的项目混淆后产生映射文件\n## 包含有类名->混淆后类名的映射关系\n#-verbose\n## 指定不去忽略非公共库的类成员\n#-dontskipnonpubliclibraryclassmembers\n## 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n#-dontpreverify\n## 忽略警告\n#-ignorewarnings\n## 保留Annotation不混淆\n#-keepattributes *Annotation*,InnerClasses\n## 避免混淆泛型\n#-keepattributes Signature\n## 抛出异常时保留代码行号\n#-keepattributes SourceFile,LineNumberTable\n## 指定混淆是采用的算法，后面的参数是一个过滤器\n## 这个过滤器是谷歌推荐的算法，一般不做更改\n#-optimizations !code/simplification/cast,!field/*,!class/merging/*\n################ 对于一些基本指令的添加end #########################\n#\n#\n################ Android开发中一些需要保留的公共部分start ##################\n## 保留我们使用的四大组件，自定义的Application等等这些类不被混淆,因为这些子类都有可能被外部调用\n#-keep public class * extends android.app.Activity\n#-keep public class * extends android.app.Application\n#-keep public class * extends android.app.Service\n#-keep public class * extends android.content.BroadcastReceiver\n#-keep public class * extends android.content.ContentProvider\n#-keep public class * extends android.app.backup.BackupAgentHelper\n#-keep public class * extends android.preference.Preference\n#-keep public class * extends android.view.View\n## 保留support下的所有类及其内部类\n#-keep class android.support.** {*;}\n## 保留继承的\n#-keep public class * extends android.support.v4.**\n#-keep public class * extends android.support.v7.**\n#-keep public class * extends android.support.annotation.**\n## Androidx的混淆\n#-keep class com.google.android.material.** {*;}\n#-keep class androidx.** {*;}\n#-keep public class * extends androidx.**\n#-keep interface androidx.** {*;}\n#-dontwarn com.google.android.material.**\n#-dontnote com.google.android.material.**\n#-dontwarn androidx.**\n## 保留R下面的资源\n#-keep class **.R$* {*;}\n## 保留本地native方法不被混淆\n#-keepclasseswithmembernames class * { native <methods>;}\n## 保留在Activity中的方法参数是view的方法，\n## 这样以来我们在layout中写的onClick就不会被影响\n#-keepclassmembers class * extends android.app.Activity{ public void *(android.view.View);}\n## 保留枚举类不被混淆\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n## 保留我们自定义控件（继承自View）不被混淆\n#-keep public class * extends android.view.View{\n#    *** get*();\n#    void set*(***);\n#    public <init>(android.content.Context);\n#    public <init>(android.content.Context, android.util.AttributeSet);\n#    public <init>(android.content.Context, android.util.AttributeSet, int);\n#}\n## 保留Parcelable序列化类不被混淆\n#-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}\n## 保留Serializable序列化的类不被混淆\n#-keepnames class * implements java.io.Serializable\n#-keepclassmembers class * implements java.io.Serializable {\n#    static final long serialVersionUID;\n#    private static final java.io.ObjectStreamField[] serialPersistentFields;\n#    !static !transient <fields>;\n#    !private <fields>;\n#    !private <methods>;\n#    private void writeObject(java.io.ObjectOutputStream);\n#    private void readObject(java.io.ObjectInputStream);\n#    java.lang.Object writeReplace();\n#    java.lang.Object readResolve();\n#}\n## 对于带有回调函数的onXXEvent、**On*Listener的，不能被混淆\n#-keepclassmembers class * {\n#    void *(**On*Event);\n#    void *(**On*Listener);\n#}\n#\n## 所有实体类不能混淆 model文件夹下的所有实体类不能混淆\n#\n##-keep class com.btpj.lib_base.data.bean.** {*;}\n##-keep class com.btpj.wanandroid.data.** {*;}\n#\n################ Android开发中一些需要保留的公共部分end ##################\n#\n#\n################ 第三方库中的混淆规则start ##############################\n## Glide混淆\n#-keep public class * implements com.bumptech.glide.module.GlideModule\n#-keep class * extends com.bumptech.glide.module.AppGlideModule {\n# <init>(...);\n#}\n#-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {\n#  **[] $VALUES;\n#  public *;\n#}\n#-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {\n#  *** rewind();\n#}\n#\n##友盟混淆\n#-keep class com.umeng.** {*;}\n#-keep class org.repackage.** {*;}\n#-keepclassmembers class * {\n#   public <init> (org.json.JSONObject);\n#}\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n##Jsoup 混淆\n#-dontwarn org.jsoup.**\n#-keep class org.jsoup.**{*;}\n#-keeppackagenames org.jsoup.nodes\n\n# Gson\n#-keep class com.google.gson.** {*;}\n#-keep class com.google.gson.stream.** {*;}\n#-keep class com.google.** {\n#    <fields>;\n#    <methods>;\n#}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.sample.other\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other/src/main/res/layout/adapter_collection_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"120dp\"\n    android:layout_height=\"140dp\"\n    android:layout_marginTop=\"5dp\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    android:foreground=\"?android:attr/selectableItemBackground\"\n    android:orientation=\"vertical\">\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/collection_icon\"\n        android:layout_width=\"120dp\"\n        android:layout_height=\"120dp\"\n        android:layout_gravity=\"top|left\"\n        android:background=\"@null\"\n        android:scaleType=\"centerCrop\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/txt_title\"\n        android:layout_width=\"120dp\"\n        android:layout_height=\"20dp\"\n        android:gravity=\"center_vertical\"\n        android:textSize=\"15dp\" />\n</LinearLayout>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other/src/main/res/layout/adapter_sample_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"86dp\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    android:foreground=\"?android:attr/selectableItemBackground\"\n    android:paddingLeft=\"20dp\"\n    android:paddingRight=\"20dp\">\n\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/material_btn_name\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"3dp\"\n        android:clickable=\"false\"\n        android:focusable=\"false\"\n        android:focusableInTouchMode=\"false\"\n        android:gravity=\"center\"\n        android:insetTop=\"0dp\"\n        android:insetBottom=\"0dp\"\n        android:textColor=\"?android:textColorHighlight\"\n        android:textSize=\"16dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/material_item_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"center_vertical|left\"\n        android:layout_marginLeft=\"90dp\"\n        android:gravity=\"center_vertical\"\n        android:maxLines=\"1\"\n        android:textColor=\"?android:textColorPrimary\"\n        android:textSize=\"20dp\" />\n</FrameLayout>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other/src/main/res/layout/fragment_collection.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--<layout>-->\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <View\n        android:id=\"@+id/view_title_bar_bg\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"top|left\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"收藏列表\"\n        android:textSize=\"20dp\" />\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/rv_c_list\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"82dp\"\n        android:orientation=\"vertical\" />\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other/src/main/res/layout/fragment_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--<layout>-->\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <View\n        android:id=\"@+id/view_title_bar_bg\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"top|left\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"示例\"\n        android:textSize=\"20dp\" />\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/rv_s_list\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"82dp\"\n        android:orientation=\"vertical\" />\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other/src/main/res/layout/fragment_setting.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <View\n        android:id=\"@+id/view_title_bar_bg\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"left|top\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"设置\"\n        android:textSize=\"20dp\" />\n\n\n    <View\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"82dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/material_locker_setting\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"96dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"锁屏歌词\"\n        android:textSize=\"20dp\" />\n\n    <com.google.android.material.switchmaterial.SwitchMaterial\n        android:id=\"@+id/material_switch_settion\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"right|top\"\n        android:layout_marginTop=\"96dp\"\n        android:layout_marginRight=\"20dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/txt_loker_des\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"144dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"25dp\"\n        android:text=\"注：开启锁屏歌词需要打开 后台弹窗 权限并开启： 在其他应用上层显示 权限\"\n        android:textColor=\"#999999\"\n        android:textSize=\"16dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/material_notification\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"194dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"通知权限\"\n        android:textSize=\"18dp\" />\n\n    <com.google.android.material.switchmaterial.SwitchMaterial\n        android:id=\"@+id/material_notification_switch\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"right|top\"\n        android:layout_marginTop=\"194dp\"\n        android:layout_marginRight=\"20dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/txt_notification_des\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"239dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"25dp\"\n        android:paddingRight=\"25dp\"\n        android:text=\"注：开启通知权限后可保证长时间在后台播放音乐\"\n        android:textColor=\"#999999\"\n        android:textSize=\"16dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/setting_skin\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"290dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"切换皮肤\"\n        android:textSize=\"20dp\" />\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/skin_list\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"left|top\"\n        android:gravity=\"center_horizontal\"\n        android:layout_marginLeft=\"20dp\"\n        android:layout_marginTop=\"340dp\"\n        android:layout_marginRight=\"20dp\" />\n\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.sample.other\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildFeatures {\n        buildConfig true\n    }\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\n\ndependencies {\n\n    compileOnly project(path: ':Maven-Wgllss-Dynamic-Plugin-Common-Library')\n    compileOnly project(path: ':maven-wgllss-common-re-library')\n\n    compileOnly project(path: ':maven-wgllss-sample-business-library')\n    compileOnly project(path: ':maven-wgllss-business-re-library')\n    compileOnly project(path: ':Maven-Wgllss-Dynamic-Plugin-Manager')\n\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Runtime-Lib:1.0.1.0'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Download-Lib:1.0.0.8'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-ClassLoader-Lib:1.0.0.7'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Loader-Lib:1.0.0.9'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Provider-Lib:1.0.0.6'\n//    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Lib-Impl:1.0.1.7'\n    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Lib:1.0.02'\n\n    compileOnly libs.androidx.core.ktx\n    compileOnly libs.appcompat\n    compileOnly libs.androidx.recyclerview\n    compileOnly libs.google.material\n    compileOnly libs.constraintlayout\n\n    compileOnly libs.androidx.lifecycle.runtime.ktx\n    compileOnly libs.androidx.activity.ktx\n    compileOnly libs.androidx.fragment.ktx\n\n    compileOnly libs.converter.gson\n    compileOnly libs.mmkv\n\n    compileOnly libs.glide\n    //权限申请框架\n    compileOnly libs.xxpermissions\n    compileOnly libs.androidx.legacy.legacy.support.v44\n}\n\n\ndef createCopyTask(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_other.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_other_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_other_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n//    if (task.name == \"assembleDebug\") {\n//        createCopyTask(\"Debug\")\n//    }\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(\"Release\")\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/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\n\n-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* #这个过滤器是谷歌推荐的算法，一般不做更改\n-optimizationpasses 7 # 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n-dontpreverify # 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n-dontusemixedcaseclassnames #混合时不使用大小写混合，混合后的类名为小写\n-verbose #包含有类名->混淆后类名的映射关系 日志记录\n-keepattributes SourceFile,LineNumberTable # 保留代码行号\n\n# Preserve some attributes that may be required for reflection.\n-keepattributes AnnotationDefault,*Annotation*,# 避免混淆注解\n                EnclosingMethod, # 避免混淆匿名类\n                InnerClasses, # 避免混淆内部类\n                RuntimeVisibleAnnotations,\n                RuntimeVisibleParameterAnnotations,\n                RuntimeVisibleTypeAnnotations,\n                Signature # 避免混淆泛型\n\n# Fragment\n-keep class * extends androidx.fragment.app.Fragment{}\n-keep class * extends androidx.fragment.app.FragmentActivity{}\n\n# keepclassmembers :防止类成员被移除或被混淆\n-keepclassmembers class * {\n    @android.webkit.JavascriptInterface <methods>;\n}\n\n# 保留本地native方法不被混淆\n-keepclasseswithmembernames class * { native <methods>;}\n\n# The support libraries contains references to newer platform versions.\n# Don't warn about those in case this app is linking against an older\n# platform version. We know about them, and they are safe.\n-dontnote android.support.**\n-dontnote androidx.**\n-dontwarn android.support.**\n-dontwarn androidx.**\n# 保留R下面的资源\n-keep class **.R$* {*;}\n## Android architecture components: Lifecycle\n# LifecycleObserver's empty constructor is considered to be unused by proguard\n-keepclassmembers class * implements androidx.lifecycle.LifecycleObserver {\n    <init>(...);\n}\n# ViewModel's empty constructor is considered to be unused by proguard\n-keepclassmembers class * extends androidx.lifecycle.ViewModel {\n    <init>(...);\n}\n# keep methods annotated with @OnLifecycleEvent even if they seem to be unused\n# (Mostly for LiveData.LifecycleBoundObserver.onStateChange(), but who knows)\n-keepclassmembers class * {\n    @androidx.lifecycle.OnLifecycleEvent *;\n}\n\n# ViewBinding\n-keep public class * extends androidx.viewbinding.ViewBinding {*;}\n\n# These classes are duplicated between android.jar and org.apache.http.legacy.jar.\n-dontnote org.apache.http.**\n-dontnote android.net.http.**\n\n# 保持自定义控件类不被混淆  # keepclasseswithmembers:防止拥有改成员的类和类成员被移除或被混淆\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet);\n}\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet, int);\n}\n# 保留枚举类不被混淆\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n\n# 保留Parcelable序列化类不被混淆\n#-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}\n## 保留Serializable序列化的类不被混淆\n#-keepnames class * implements java.io.Serializable\n#-keepclassmembers class * implements java.io.Serializable {\n#    static final long serialVersionUID;\n#    private static final java.io.ObjectStreamField[] serialPersistentFields;\n#    !static !transient <fields>;\n#    !private <fields>;\n#    !private <methods>;\n#    private void writeObject(java.io.ObjectOutputStream);\n#    private void readObject(java.io.ObjectInputStream);\n#    java.lang.Object writeReplace();\n#    java.lang.Object readResolve();\n#}\n## 对于带有回调函数的onXXEvent、**On*Listener的，不能被混淆\n#-keepclassmembers class * {\n#    void *(**On*Event);\n#    void *(**On*Listener);\n#}\n\n# Databinding\n-dontwarn android.databinding.**\n-keep class android.databinding.** { *; }\n-keep class androidx.lifecycle.** { *; }\n-keep class kotlinx.coroutines.** { *; }\n-keep class com.wgllss.sample.features_ui.page.** { *; }\n# kotlin 相关\n-dontwarn kotlin.**\n-keep class kotlin.** { *; }\n-keep interface kotlin.** { *; }\n################ 第三方库中的混淆规则start ##############################\n# Glide混淆\n#-keep public class * implements com.bumptech.glide.module.GlideModule\n#-keep class * extends com.bumptech.glide.module.AppGlideModule {\n# <init>(...);\n#}\n#-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {\n#  **[] $VALUES;\n#  public *;\n#}\n#-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {\n#  *** rewind();\n#}\n\n#友盟混淆\n-keep class com.umeng.** {*;}\n-keep class org.repackage.** {*;}\n-keepclassmembers class * {\n   public <init> (org.json.JSONObject);\n}\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n#Jsoup 混淆\n#-dontwarn org.jsoup.**\n#-keep class org.jsoup.**{*;}\n#-keeppackagenames org.jsoup.nodes\n\n# Gson\n#-keep class com.google.gson.** {*;}\n#-keep class com.google.gson.stream.** {*;}\n#-keep class com.google.** {\n#    <fields>;\n#    <methods>;\n#}\n\n\n#\n############### 对于一些基本指令的添加start ##################\n## 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n#-optimizationpasses 5\n## 混合时不使用大小写混合，混合后的类名为小写\n#-dontusemixedcaseclassnames\n## 指定不去忽略非公共库的类\n#-dontskipnonpubliclibraryclasses\n## 这句话能够使我们的项目混淆后产生映射文件\n## 包含有类名->混淆后类名的映射关系\n#-verbose\n## 指定不去忽略非公共库的类成员\n#-dontskipnonpubliclibraryclassmembers\n## 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n#-dontpreverify\n## 忽略警告\n#-ignorewarnings\n## 保留Annotation不混淆\n#-keepattributes *Annotation*,InnerClasses\n## 避免混淆泛型\n#-keepattributes Signature\n## 抛出异常时保留代码行号\n#-keepattributes SourceFile,LineNumberTable\n## 指定混淆是采用的算法，后面的参数是一个过滤器\n## 这个过滤器是谷歌推荐的算法，一般不做更改\n#-optimizations !code/simplification/cast,!field/*,!class/merging/*\n################ 对于一些基本指令的添加end #########################\n#\n#\n################ Android开发中一些需要保留的公共部分start ##################\n## 保留我们使用的四大组件，自定义的Application等等这些类不被混淆,因为这些子类都有可能被外部调用\n#-keep public class * extends android.app.Activity\n#-keep public class * extends android.app.Application\n#-keep public class * extends android.app.Service\n#-keep public class * extends android.content.BroadcastReceiver\n#-keep public class * extends android.content.ContentProvider\n#-keep public class * extends android.app.backup.BackupAgentHelper\n#-keep public class * extends android.preference.Preference\n#-keep public class * extends android.view.View\n## 保留support下的所有类及其内部类\n#-keep class android.support.** {*;}\n## 保留继承的\n#-keep public class * extends android.support.v4.**\n#-keep public class * extends android.support.v7.**\n#-keep public class * extends android.support.annotation.**\n## Androidx的混淆\n#-keep class com.google.android.material.** {*;}\n#-keep class androidx.** {*;}\n#-keep public class * extends androidx.**\n#-keep interface androidx.** {*;}\n#-dontwarn com.google.android.material.**\n#-dontnote com.google.android.material.**\n#-dontwarn androidx.**\n## 保留R下面的资源\n#-keep class **.R$* {*;}\n## 保留本地native方法不被混淆\n#-keepclasseswithmembernames class * { native <methods>;}\n## 保留在Activity中的方法参数是view的方法，\n## 这样以来我们在layout中写的onClick就不会被影响\n#-keepclassmembers class * extends android.app.Activity{ public void *(android.view.View);}\n## 保留枚举类不被混淆\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n## 保留我们自定义控件（继承自View）不被混淆\n#-keep public class * extends android.view.View{\n#    *** get*();\n#    void set*(***);\n#    public <init>(android.content.Context);\n#    public <init>(android.content.Context, android.util.AttributeSet);\n#    public <init>(android.content.Context, android.util.AttributeSet, int);\n#}\n## 保留Parcelable序列化类不被混淆\n#-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}\n## 保留Serializable序列化的类不被混淆\n#-keepnames class * implements java.io.Serializable\n#-keepclassmembers class * implements java.io.Serializable {\n#    static final long serialVersionUID;\n#    private static final java.io.ObjectStreamField[] serialPersistentFields;\n#    !static !transient <fields>;\n#    !private <fields>;\n#    !private <methods>;\n#    private void writeObject(java.io.ObjectOutputStream);\n#    private void readObject(java.io.ObjectInputStream);\n#    java.lang.Object writeReplace();\n#    java.lang.Object readResolve();\n#}\n## 对于带有回调函数的onXXEvent、**On*Listener的，不能被混淆\n#-keepclassmembers class * {\n#    void *(**On*Event);\n#    void *(**On*Listener);\n#}\n#\n## 所有实体类不能混淆 model文件夹下的所有实体类不能混淆\n#\n##-keep class com.btpj.lib_base.data.bean.** {*;}\n##-keep class com.btpj.wanandroid.data.** {*;}\n#\n################ Android开发中一些需要保留的公共部分end ##################\n#\n#\n################ 第三方库中的混淆规则start ##############################\n## Glide混淆\n#-keep public class * implements com.bumptech.glide.module.GlideModule\n#-keep class * extends com.bumptech.glide.module.AppGlideModule {\n# <init>(...);\n#}\n#-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {\n#  **[] $VALUES;\n#  public *;\n#}\n#-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {\n#  *** rewind();\n#}\n#\n##友盟混淆\n#-keep class com.umeng.** {*;}\n#-keep class org.repackage.** {*;}\n#-keepclassmembers class * {\n#   public <init> (org.json.JSONObject);\n#}\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n##Jsoup 混淆\n#-dontwarn org.jsoup.**\n#-keep class org.jsoup.**{*;}\n#-keeppackagenames org.jsoup.nodes\n\n# Gson\n#-keep class com.google.gson.** {*;}\n#-keep class com.google.gson.stream.** {*;}\n#-keep class com.google.** {\n#    <fields>;\n#    <methods>;\n#}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.sample.other\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/datasource/SettingRepository.kt",
    "content": "package com.wgllss.sample.datasource\n\nimport com.google.gson.Gson\nimport com.google.gson.reflect.TypeToken\nimport com.wgllss.core.http.HttpUrlConnectionRequest\nimport com.wgllss.dynamic.host.lib.impl.WXDynamicLoader\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.flow\nimport java.lang.StringBuilder\n\nclass SettingRepository private constructor() {\n\n    companion object {\n        val instance by lazy { SettingRepository() }\n    }\n\n    suspend fun getSkinConfig(): Flow<MutableList<SkinPluginBean>> = flow {\n        val face = WXDynamicLoader.instance.loader.getDownloadFace()\n        val json = HttpUrlConnectionRequest.getServerJson(StringBuilder().append(face.getHostL()).append(\"/skins/skins.txt\").toString())\n        val list = Gson().fromJson<MutableList<SkinPluginBean>>(json, object : TypeToken<MutableList<SkinPluginBean>>() {}.type)\n        emit(list)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/datasource/SkinPluginBean.kt",
    "content": "package com.wgllss.sample.datasource\n\ndata class SkinPluginBean(\n    val skinColor: String,\n    val skinUrl: String,\n    val dlfn: String\n)\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/base/BasePluginActivity.kt",
    "content": "package com.wgllss.sample.features_ui.page.base\n\nimport android.content.res.Resources\nimport com.wgllss.core.activity.BaseViewModePluginActivity\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.dynamic.sample.other.BuildConfig\nimport com.wgllss.dynamic.plugin.manager.PluginResource\n\nopen class BasePluginActivity<VM : BaseViewModel>(layoutName: String) : BaseViewModePluginActivity<VM>(layoutName, BuildConfig.LIBRARY_PACKAGE_NAME) {\n\n    override fun getPluginResources(): Resources? = PluginResource.getPluginResources(\"classes_other_res\")\n\n    override fun getSkinResources() = PluginResource.getSkinResources()\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/base/BasePluginFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.base\n\nimport android.content.res.Resources\nimport com.wgllss.core.fragment.BaseViewModelPluginFragment\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.dynamic.sample.other.BuildConfig\nimport com.wgllss.dynamic.plugin.manager.PluginResource\n\nopen class BasePluginFragment<VM : BaseViewModel>(layoutName: String) : BaseViewModelPluginFragment<VM>(layoutName, BuildConfig.LIBRARY_PACKAGE_NAME) {\n\n    override fun getPluginResources(): Resources = PluginResource.getPluginResources(\"classes_other_res\")\n\n    override fun getSkinResources() = PluginResource.getSkinResources()\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/base/SkinContains.kt",
    "content": "package com.wgllss.sample.features_ui.page.base\n\nobject SkinContains {\n    const val packageName: String = \"com.wgllss.sample.skin\"\n    const val packageNameHost: String = \"com.wgllss.dynamic.host.sample\"\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/adapter/CollectionAdapter.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.adapter\n\nimport android.content.Context\nimport android.content.res.Resources\nimport androidx.recyclerview.widget.RecyclerView\nimport com.google.android.material.imageview.ShapeableImageView\nimport com.google.android.material.shape.RoundedCornerTreatment\nimport com.google.android.material.shape.ShapeAppearanceModel\nimport com.google.android.material.textview.MaterialTextView\nimport com.wgllss.core.adapter.BasePluginRecyclerAdapter\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.ex.loadUrl\nimport com.wgllss.sample.feature_system.room.table.CollectTableBean\nimport com.wgllss.sample.features_ui.page.base.SkinContains\n\nclass CollectionAdapter(re: Resources, packageName: String) : BasePluginRecyclerAdapter<CollectTableBean>(re, packageName) {\n    override fun getLayoutResIdName(viewType: Int) = \"adapter_collection_item\"\n\n    override fun onBindItem(context: Context, item: CollectTableBean, holder: RecyclerView.ViewHolder, position: Int) {\n        item.run {\n            findViewByID<ShapeableImageView>(holder.itemView, re, \"collection_icon\").apply {\n                loadUrl(imgUrl)\n                shapeAppearanceModel = ShapeAppearanceModel.builder().apply {\n                    setAllCorners(RoundedCornerTreatment())\n                    setAllCornerSizes(context.getIntToDip(5f)) //设置圆， 40为正方形边长 80 一半，等于半径 ，需要注意单位\n                }.build()\n            }\n            findViewByID<MaterialTextView>(holder.itemView, re, \"txt_title\").apply {\n                text = title\n                setTextColor(getPluginColor(skinRes, \"textColorPrimary\", SkinContains.packageName))\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/adapter/SampleAdapter.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.adapter\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.graphics.Color\nimport android.util.TypedValue\nimport androidx.recyclerview.widget.RecyclerView\nimport com.google.android.material.button.MaterialButton\nimport com.google.android.material.textview.MaterialTextView\nimport com.wgllss.core.adapter.BasePluginRecyclerAdapter\nimport com.wgllss.sample.data.SampleItemBean\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport kotlin.random.Random\n\nclass SampleAdapter(re: Resources, packageName: String) : BasePluginRecyclerAdapter<SampleItemBean>(re, packageName) {\n\n    private var cornerRadiusInt: Int = 0\n    private val textColor by lazy { Color.parseColor(\"#999999\") }\n    private lateinit var array: Array<Int>\n\n    override fun getLayoutResIdName(viewType: Int) = \"adapter_sample_item\"\n\n    override fun onBindItem(context: Context, item: SampleItemBean, holder: RecyclerView.ViewHolder, position: Int) {\n        if (!this::array.isInitialized) {\n            array = arrayOf(\n                getPluginColor(skinRes, \"color_random_0\", SkinContains.packageName), getPluginColor(skinRes, \"color_random_1\", SkinContains.packageName), getPluginColor(skinRes, \"color_random_2\", SkinContains.packageName),\n                getPluginColor(skinRes, \"color_random_3\", SkinContains.packageName), getPluginColor(skinRes, \"color_random_4\", SkinContains.packageName), getPluginColor(skinRes, \"color_random_5\", SkinContains.packageName),\n                getPluginColor(skinRes, \"color_random_6\", SkinContains.packageName), getPluginColor(skinRes, \"color_random_7\", SkinContains.packageName), getPluginColor(skinRes, \"color_random_8\", SkinContains.packageName),\n                getPluginColor(skinRes, \"color_random_9\", SkinContains.packageName), getPluginColor(skinRes, \"color_random_10\", SkinContains.packageName), getPluginColor(skinRes, \"color_random_11\", SkinContains.packageName)\n            )\n        }\n        item.run {\n            findViewByID<MaterialButton>(holder.itemView, re, \"material_btn_name\").apply {\n                text = item.itemName\n                setTextColor(getPluginColor(skinRes, \"colorOnPrimary\", SkinContains.packageName))\n                background.setTint(array[Random.nextInt(array.size)])\n                if (cornerRadiusInt == 0)\n                    cornerRadiusInt = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 999f, context.resources.displayMetrics).toInt() else 0\n                cornerRadius = cornerRadiusInt\n            }\n            findViewByID<MaterialTextView>(holder.itemView, re, \"material_item_name\").apply {\n                text = item.itemName\n                setTextColor(getPluginColor(skinRes, \"textColorPrimary\", SkinContains.packageName))\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/adapter/SkinAdapter.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.adapter\n\nimport android.content.Context\nimport android.util.TypedValue\nimport android.view.ViewGroup\nimport androidx.recyclerview.widget.RecyclerView\nimport com.google.android.material.button.MaterialButton\nimport com.wgllss.core.adapter.BaseRecyclerAdapter\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.sample.datasource.SkinPluginBean\n\nclass SkinAdapter : BaseRecyclerAdapter<SkinPluginBean>() {\n    private var cornerRadiusInt: Int = 0\n    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseBindingViewHolder {\n        if (context == null) {\n            context = parent.context\n            cornerRadiusInt = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 999f, parent.context.resources.displayMetrics).toInt()\n        }\n        val textView = MaterialButton(parent.context).apply {\n            val size = context.getIntToDip(60f).toInt()\n            val lp = RecyclerView.LayoutParams(size, size)\n            layoutParams = lp\n            insetBottom = 0\n            insetTop = 0\n            cornerRadius = cornerRadiusInt\n        }\n        return BaseBindingViewHolder(textView)\n    }\n\n    override fun onBindItem(context: Context, item: SkinPluginBean, holder: RecyclerView.ViewHolder, position: Int) {\n        ResourceUtils.setMaterialButtonBackgroundHint(\"#600000\", item.skinColor, holder.itemView as MaterialButton)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/fragment/CollectFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.fragment\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.database.ContentObserver\nimport android.graphics.Color\nimport android.net.Uri\nimport android.os.Bundle\nimport android.os.Handler\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.TextView\nimport android.widget.Toast\nimport androidx.recyclerview.widget.GridLayoutManager\nimport androidx.recyclerview.widget.RecyclerView\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.widget.DividerGridItemDecoration\nimport com.wgllss.core.widget.OnRecyclerViewItemClickListener\nimport com.wgllss.dynamic.host.lib.provider.ProviderAuthority\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.home.adapter.CollectionAdapter\nimport com.wgllss.sample.features_ui.page.home.viewmodels.CollectViewModel\n\nclass CollectFragment : BasePluginFragment<CollectViewModel>(\"fragment_collection\") {\n\n    private lateinit var rv_c_list: RecyclerView;\n    private lateinit var view_title_bar_bg: View\n    private lateinit var title: TextView\n    private lateinit var collectionAdapter: CollectionAdapter\n\n\n    private val content_authority: String = StringBuilder(\"com.wgllss.dynamic.host.sample\").append(ProviderAuthority.authority).toString()\n\n    private val base_content_uri = Uri.parse(\"content://$content_authority\")\n\n    private val uri = base_content_uri.buildUpon().appendPath(\"com.wgllss.dynamic.provider.TestContentProvider\").build()\n\n    override fun findView(context: Context, containerView: View) {\n        rv_c_list = findViewByID(\"rv_c_list\")\n        view_title_bar_bg = findViewByID(\"view_title_bar_bg\")\n        title = findViewByID(\"title\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        rv_c_list.run {\n            layoutManager = GridLayoutManager(context, 3)\n            collectionAdapter = CollectionAdapter(resourcesPlugin, packageName)\n            adapter = collectionAdapter\n            addOnItemTouchListener(object : OnRecyclerViewItemClickListener(this) {\n                override fun onItemLongClickListener(itemRootView: View, position: Int) {\n                    viewModel.deleteFromId(collectionAdapter.getItem(position).id)\n                }\n            })\n            setHasFixedSize(true)\n            val itemDecoration = View(context)\n            val size = context.getIntToDip(1.0f).toInt()\n            itemDecoration.layoutParams = ViewGroup.LayoutParams(size, size)\n            itemDecoration.setBackgroundColor(Color.parseColor(\"#60000000\"))\n            addItemDecoration(DividerGridItemDecoration(context, GridLayoutManager.VERTICAL, itemDecoration))\n        }\n    }\n\n    override fun initObserve() {\n        super.initObserve()\n        viewModel.run {\n            start()\n            isInitSuccess.observe(viewLifecycleOwner) {\n                liveData.observe(viewLifecycleOwner) {\n                    collectionAdapter.notifyData(it, getSkinResources())\n                }\n            }\n        }\n\n\n        activity?.run {\n            contentResolver.registerContentObserver(uri, true, object : ContentObserver(Handler()) {\n                override fun onChange(selfChange: Boolean, uri: Uri?) {\n                    super.onChange(selfChange, uri)\n                    android.util.Log.e(\"CollectFragment\", \"uri : $uri  selfChange:$selfChange\")\n                    viewModel.start()\n                }\n            })\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, view_title_bar_bg)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, title)\n    }\n\n    override fun callChangeSkin(skinRes: Resources) {\n        super.callChangeSkin(skinRes)\n        collectionAdapter?.notifySkinRes(skinRes)\n    }\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/fragment/SampleFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.fragment\n\nimport android.app.Activity\nimport android.content.Context\nimport android.content.Intent\nimport android.content.res.Resources\nimport android.graphics.Color\nimport android.os.Bundle\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.TextView\nimport androidx.lifecycle.lifecycleScope\nimport androidx.recyclerview.widget.GridLayoutManager\nimport androidx.recyclerview.widget.LinearLayoutManager\nimport androidx.recyclerview.widget.RecyclerView\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.ex.parseErrorString\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.widget.DividerGridItemDecoration\nimport com.wgllss.core.widget.OnRecyclerViewItemClickListener\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.sample.data.SampleItemBean\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.home.adapter.SampleAdapter\nimport com.wgllss.sample.features_ui.page.home.viewmodels.SampleViewModel\nimport kotlinx.coroutines.flow.catch\nimport kotlinx.coroutines.flow.onCompletion\nimport kotlinx.coroutines.flow.onStart\nimport kotlinx.coroutines.launch\n\nclass SampleFragment : BasePluginFragment<SampleViewModel>(\"fragment_sample\") {\n\n    private lateinit var rv_s_list: RecyclerView;\n    private lateinit var view_title_bar_bg: View\n    private lateinit var title: TextView\n    private lateinit var sampleAdapter: SampleAdapter\n\n    override fun findView(context: Context, containerView: View) {\n        rv_s_list = findViewByID(\"rv_s_list\")\n        view_title_bar_bg = findViewByID(\"view_title_bar_bg\")\n        title = findViewByID(\"title\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        rv_s_list.run {\n            layoutManager = LinearLayoutManager(context)\n            sampleAdapter = SampleAdapter(resourcesPlugin, packageName)\n            adapter = sampleAdapter\n            addOnItemTouchListener(object : OnRecyclerViewItemClickListener(this) {\n\n                override fun onItemClickListener(itemRootView: View, position: Int) {\n                    onItemClick(sampleAdapter.getItem(position))\n                }\n            })\n            setHasFixedSize(true)\n            val itemDecoration = View(context)\n            val size = context.getIntToDip(1.0f).toInt()\n            itemDecoration.layoutParams = ViewGroup.LayoutParams(size, size)\n            itemDecoration.setBackgroundColor(Color.parseColor(\"#60000000\"))\n            addItemDecoration(DividerGridItemDecoration(context, GridLayoutManager.VERTICAL, itemDecoration))\n        }\n    }\n\n    override fun initObserve() {\n        super.initObserve()\n        viewModel.run {\n            start()\n            sampleList.observe(viewLifecycleOwner) {\n                sampleAdapter.notifyData(it, getSkinResources())\n            }\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, view_title_bar_bg)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, title)\n    }\n\n    override fun callChangeSkin(skinRes: Resources) {\n        super.callChangeSkin(skinRes)\n        sampleAdapter?.notifySkinRes(skinRes)\n    }\n\n    private fun onItemClick(item: SampleItemBean) {\n        activity?.run {\n            /** 方案一写法 other2 首次下载写法 start  **/\n            showloading(\"请稍后...\")\n            val status = PluginManager.instance.isLoadSuccessByKey(\"classes_other2_dex\", \"classes_other2_res\")\n            hideLoading()\n            if (!status) {\n                onToast(\"缺少插件\")\n                return\n            }\n            itemID(this, item)\n            /** 方案一写法 other2 首次下载写法 end  **/\n\n            /** 方案二写法 other2 点击时候下载安装 start  **/\n//            lifecycleScope.launch {\n//                PluginManager.instance.dynamicLoadPlugin(this@run, Pair(\"classes_other2_dex\", 1000), Pair(\"classes_other2_res\", 1000))\n//                    .onStart { showloading(\"加载中...\") }.onCompletion { hideLoading() }.catch {\n//                        onToast(it.parseErrorString())\n//                    }.collect {\n//                        itemID(this@run, item)\n//                    }\n//            }\n            /** 方案二写法 other2 首次下载写法 end  **/\n        }\n    }\n\n    private fun itemID(activity: Activity, item: SampleItemBean) {\n        when (item.id) {\n            5 -> { //webview\n                PluginManager.instance.startPluginSingleTaskActivity(activity, \"classes_other2_res\", \"com.wgllss.sample.features_ui.page.other2.activity.WebViewActivity\", \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n                    putExtra(\"web_url_key\", \"I4D2IC730011819H\")\n                    putExtra(\"title_key\", \"红魔五周年发布\")\n                    putExtra(\"docid_key\", \"I4D2IC730011819H.html\")\n                })\n            }\n\n            9 -> {\n                //音频\n                PluginManager.instance.startPluginSingleTaskActivity(\n                    activity, \"classes_other2_res\", \"com.wgllss.sample.features_ui.page.other2.activity.AudioActivity\", \"com.wgllss.dynamic.sample.other2\"\n                )\n            }\n\n            8 -> {\n                //视频\n                PluginManager.instance.startPluginSingleTaskActivity(\n                    activity, \"classes_other2_res\", \"com.wgllss.sample.features_ui.page.other2.activity.VideoActivity\", \"com.wgllss.dynamic.sample.other2\"\n                )\n            }\n\n            10 -> {\n                //compose\n                PluginManager.instance.startPluginStandardComposeActivity(activity, \"classes_other2_res\", \"com.wgllss.sample.features_ui.page.other2.activity.ComposeDemoActivity\", \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n                    putExtra(\"action_type\", item.id)\n                    putExtra(\"itemName\", item.itemName)\n                })\n            }\n\n            else -> {\n                PluginManager.instance.startStandardActivity(activity, \"classes_other2_res\", \"com.wgllss.sample.features_ui.page.other2.activity.Other2Activity\", \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n                    putExtra(\"action_type\", item.id)\n                    putExtra(\"itemName\", item.itemName)\n                })\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/fragment/SettingFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.fragment\n\nimport android.app.Activity\nimport android.content.Context\nimport android.content.res.Resources\nimport android.graphics.Color\nimport android.os.Bundle\nimport android.view.View\nimport android.view.ViewGroup\nimport android.widget.TextView\nimport androidx.recyclerview.widget.GridLayoutManager\nimport androidx.recyclerview.widget.RecyclerView\nimport com.google.android.material.switchmaterial.SwitchMaterial\nimport com.hjq.permissions.OnPermissionCallback\nimport com.hjq.permissions.Permission\nimport com.hjq.permissions.XXPermissions\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.permissions.PermissionInterceptor\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.widget.DividerGridItemDecoration\nimport com.wgllss.core.widget.OnRecyclerViewItemClickListener\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.home.adapter.SkinAdapter\nimport com.wgllss.sample.features_ui.page.home.viewmodels.SettingViewModel\n\nclass SettingFragment : BasePluginFragment<SettingViewModel>(\"fragment_setting\") {\n\n    private lateinit var material_switch_settion: SwitchMaterial\n    private lateinit var material_notification_switch: SwitchMaterial\n    private lateinit var view_title_bar_bg: View\n    private lateinit var title: TextView\n    private lateinit var material_locker_setting: TextView\n    private lateinit var material_notification: TextView\n    private lateinit var setting_skin: TextView\n    private lateinit var skin_list: RecyclerView\n    private val skinAdapter by lazy { SkinAdapter() }\n\n//    private val settingViewModelL = viewModels<SettingViewModel>()\n\n    override fun activitySameViewModel() = false\n\n    override fun findView(context: Context, containerView: View) {\n        view_title_bar_bg = findViewByID(\"view_title_bar_bg\")\n        title = findViewByID(\"title\")\n        material_locker_setting = findViewByID(\"material_locker_setting\")\n        setting_skin = findViewByID(\"setting_skin\")\n        material_notification = findViewByID(\"material_notification\")\n        material_switch_settion = findViewByID(\"material_switch_settion\")\n        material_notification_switch = findViewByID(\"material_notification_switch\")\n        skin_list = findViewByID(\"skin_list\")\n        material_switch_settion.switchMinWidth = context.getIntToDip(60f).toInt()\n        material_notification_switch.switchMinWidth = context.getIntToDip(60f).toInt()\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        viewModel.start()\n        skin_list.apply {\n            setHasFixedSize(true)\n            layoutManager = GridLayoutManager(requireActivity(), 5)\n            adapter = skinAdapter\n            addOnItemTouchListener(object : OnRecyclerViewItemClickListener(this) {\n                override fun onItemClickListener(itemRootView: View, position: Int) {\n                    skinAdapter.getItem(position)?.let {\n                        viewModel.downloadSkin(context, it)\n                    }\n                }\n            })\n            val size = context.getIntToDip(10.0f).toInt()\n            val itemDecoration = View(context)\n            itemDecoration.layoutParams = ViewGroup.LayoutParams(size, size)\n            itemDecoration.setBackgroundColor(Color.parseColor(\"#00000000\"))\n            addItemDecoration(DividerGridItemDecoration(context, GridLayoutManager.VERTICAL, itemDecoration))\n        }\n        material_switch_settion.setOnCheckedChangeListener { _, checked ->\n            if (checked) {\n                viewModel.isOpenLockerUI.value?.takeUnless {\n                    it\n                }?.let {\n                    XXPermissions.with(requireActivity())\n                        .permission(Permission.SYSTEM_ALERT_WINDOW)\n                        .interceptor(object : PermissionInterceptor() {\n                            override fun deniedPermissions(activity: Activity, allPermissions: List<String>, deniedPermissions: List<String>, never: Boolean, callback: OnPermissionCallback?) {\n                                super.deniedPermissions(activity, allPermissions, deniedPermissions, never, callback)\n                                viewModel.setLockerSwitch(false)\n                            }\n                        })\n                        .request(OnPermissionCallback { permissions, all ->\n                            if (!all) {\n                                viewModel.setLockerSwitch(false)\n                                return@OnPermissionCallback\n                            }\n                            viewModel.setLockerSwitch(true)\n                        })\n                }\n            } else {\n                viewModel.setLockerSwitch(false)\n            }\n        }\n        material_notification_switch.setOnCheckedChangeListener { _, checked ->\n            if (checked) {\n                viewModel.isNotificationOpen.value?.takeUnless {\n                    it\n                }?.let {\n                    setNotificationPermissions()\n                }\n            }\n        }\n        viewModel.isOpenLockerUI.observe(viewLifecycleOwner) {\n            material_switch_settion.isChecked = it\n        }\n        viewModel.isNotificationOpen.observe(viewLifecycleOwner) {\n            material_notification_switch.isChecked = it\n        }\n        setNotificationPermissions()\n        viewModel.downloadResult.observe(viewLifecycleOwner) {\n            PluginManager.instance.run {\n                it.fileAbsolutePath.takeUnless { path ->\n                    path == getCurrentSkinPath()\n                }?.run {\n                    switchSkinResources(this)\n                    callAllActivity(getPluginSkinResources())\n                }\n            }\n        }\n        viewModel.liveDataSkinList.observe(viewLifecycleOwner) {\n            skinAdapter.notifyData(it)\n        }\n    }\n\n    private fun setNotificationPermissions() {\n        XXPermissions.with(requireActivity())\n            .permission(Permission.NOTIFICATION_SERVICE)\n            .interceptor(object : PermissionInterceptor() {\n                override fun deniedPermissions(activity: Activity, allPermissions: List<String>, deniedPermissions: List<String>, never: Boolean, callback: OnPermissionCallback?) {\n                    super.deniedPermissions(activity, allPermissions, deniedPermissions, never, callback)\n                    viewModel.setNotificationOpen(false)\n                }\n            })\n            .request(OnPermissionCallback { _, all ->\n                if (!all) {\n                    viewModel.setNotificationOpen(false)\n                    return@OnPermissionCallback\n                }\n                viewModel.setNotificationOpen(true)\n            })\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.run {\n            setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, view_title_bar_bg)\n            setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, title)\n            setTextColor(skinRes, \"textColorPrimary\", SkinContains.packageName, material_locker_setting, material_notification, setting_skin)\n\n            material_switch_settion.thumbTintList = getColorStatusList(skinRes, \"switch_thumb_selector\", SkinContains.packageName)\n            material_switch_settion.trackTintList = getColorStatusList(skinRes, \"switch_track_selector\", SkinContains.packageName)\n\n            material_notification_switch.thumbTintList = getColorStatusList(skinRes, \"switch_thumb_selector\", SkinContains.packageName)\n            material_notification_switch.trackTintList = getColorStatusList(skinRes, \"switch_track_selector\", SkinContains.packageName)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/viewmodels/CollectViewModel.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.viewmodels\n\nimport androidx.lifecycle.LiveData\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.core.units.AppGlobals\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.sample.datasource.repository.NewsRepository\nimport com.wgllss.sample.feature_system.room.table.CollectTableBean\nimport kotlinx.coroutines.flow.onEach\n\nclass CollectViewModel : BaseViewModel() {\n    private val newsRepositoryL by lazy { NewsRepository.getInstance(AppGlobals.sApplication) }\n    lateinit var liveData: LiveData<MutableList<CollectTableBean>>\n    val isInitSuccess by lazy { MutableLiveData<Boolean>() }\n\n    override fun start() {\n        flowAsyncWorkOnViewModelScopeLaunch {\n            newsRepositoryL.getAllList().onEach {\n                liveData = it\n                isInitSuccess.postValue(true)\n            }\n        }\n    }\n\n    fun deleteFromId(id: Long) {\n        flowAsyncWorkOnViewModelScopeLaunch {\n            newsRepositoryL.deleteFromId(id)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/viewmodels/SampleViewModel.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.viewmodels\n\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.sample.data.SampleItemBean\n\nclass SampleViewModel : BaseViewModel() {\n    val sampleList by lazy { MutableLiveData<MutableList<SampleItemBean>>() }\n    override fun start() {\n        sampleList.postValue(\n            mutableListOf(\n                SampleItemBean(0, \"Activity\"),\n                SampleItemBean(1, \"Service\"),\n                SampleItemBean(2, \"BroadcastReceiver\"),\n                SampleItemBean(3, \"ContentProvider\"),\n                SampleItemBean(4, \"Notification\"),\n                SampleItemBean(5, \"WebView\"),\n                SampleItemBean(6, \"SO加载\"),\n                SampleItemBean(7, \"Dialog\"),\n                SampleItemBean(8, \"视频\"),\n                SampleItemBean(9, \"音频\"),\n                SampleItemBean(10, \"compose\")\n            )\n        )\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/java/com/wgllss/sample/features_ui/page/home/viewmodels/SettingViewModel.kt",
    "content": "package com.wgllss.sample.features_ui.page.home.viewmodels\n\nimport android.content.Context\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.dynamic.host.lib.download.DownLoadResult\nimport com.wgllss.dynamic.host.lib.download.DynamicDownloadPlugin\nimport com.wgllss.dynamic.host.lib.impl.WXDynamicLoader\nimport com.wgllss.sample.datasource.SettingRepository\nimport com.wgllss.sample.datasource.SkinPluginBean\nimport com.wgllss.sample.feature_system.savestatus.MMKVHelp\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.flow.onEach\nimport java.lang.StringBuilder\n\nclass SettingViewModel : BaseViewModel() {\n\n    val isOpenLockerUI by lazy { MutableLiveData<Boolean>() }\n\n    val isNotificationOpen by lazy { MutableLiveData<Boolean>() }\n    val downloadResult by lazy { MutableLiveData<DownLoadResult>() }\n    val liveDataSkinList by lazy { MutableLiveData<MutableList<SkinPluginBean>>() }\n\n    override fun start() {\n        getSkins()\n        isOpenLockerUI.postValue(MMKVHelp.isOpenLockerUI())\n    }\n\n    fun setLockerSwitch(isOpen: Boolean) {\n        isOpenLockerUI.postValue(isOpen)\n        MMKVHelp.setLockerSwitch(isOpen)\n    }\n\n    fun setNotificationOpen(isOpen: Boolean) {\n        isNotificationOpen.postValue(isOpen)\n    }\n\n    private fun getSkins() {\n        flowAsyncWorkOnViewModelScopeLaunch {\n            SettingRepository.instance.getSkinConfig().onEach {\n                liveDataSkinList.postValue(it)\n            }\n        }\n    }\n\n    fun downloadSkin(context: Context, skinPluginBean: SkinPluginBean) {\n        flowAsyncWorkOnViewModelScopeLaunch {\n            flow {\n                val face = WXDynamicLoader.instance.loader.getDownloadFace()\n                emit(DynamicDownloadPlugin(face).initDynamicPlugin(context, StringBuilder().append(face.getHostL()).append(\"/skins/\").append(skinPluginBean.skinUrl).toString(), \"skin\", skinPluginBean.dlfn))\n            }.onEach {\n                downloadResult.postValue(it)\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/res/layout/activity_locker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/content\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\" />\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/res/layout/activity_play.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/content\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\" />\n\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/res/layout/adapter_home_item_music.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--<layout>-->\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"88dp\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    android:focusableInTouchMode=\"true\"\n    android:foreground=\"?android:attr/selectableItemBackground\"\n    android:paddingLeft=\"20dp\"\n    android:paddingRight=\"20dp\">\n\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/author\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"top|left\"\n        android:clickable=\"false\"\n        android:focusable=\"false\"\n        android:focusableInTouchMode=\"false\"\n        android:gravity=\"center\"\n        android:insetTop=\"0dp\"\n        android:insetBottom=\"0dp\"\n        android:textColor=\"?android:textColorHighlight\"\n        android:textSize=\"16dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/sample_hz\"\n        android:layout_width=\"150dp\"\n        android:layout_height=\"20dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"90dp\"\n        android:layout_marginTop=\"15dp\"\n        android:gravity=\"center_vertical\"\n        android:textSize=\"15dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/mater_music_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"90dp\"\n        android:layout_marginTop=\"40dp\"\n        android:gravity=\"center_vertical\"\n        android:maxLines=\"1\"\n        android:textColor=\"?android:textColorPrimary\"\n        android:textSize=\"20dp\" />\n</FrameLayout>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/res/layout/adapter_item_music.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"88dp\"\n    android:clickable=\"true\"\n    android:focusable=\"true\"\n    android:foreground=\"?android:attr/selectableItemBackground\"\n    android:paddingLeft=\"20dp\"\n    android:paddingRight=\"20dp\">\n\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/material_buttom\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"top|left\"\n        android:clickable=\"false\"\n        android:focusable=\"false\"\n        android:focusableInTouchMode=\"false\"\n        android:gravity=\"center\"\n        android:insetTop=\"0dp\"\n        android:insetBottom=\"0dp\"\n        android:textColor=\"?android:textColorHighlight\"\n        android:textSize=\"16dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/material_sampling_rate\"\n        android:layout_width=\"150dp\"\n        android:layout_height=\"20dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"90dp\"\n        android:layout_marginTop=\"15dp\"\n        android:gravity=\"center_vertical\"\n        android:textSize=\"15dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/material_music_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"90dp\"\n        android:layout_marginTop=\"40dp\"\n        android:gravity=\"center_vertical\"\n        android:maxLines=\"1\"\n        android:textColor=\"?android:textColorPrimary\"\n        android:textSize=\"20dp\" />\n</FrameLayout>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/res/layout/adapter_music_playlist_item.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<com.mcxtzhang.swipemenulib.SwipeMenuLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"80dp\">\n\n    <FrameLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"80dp\"\n        android:layout_marginTop=\"1dp\"\n        android:layout_marginBottom=\"1dp\"\n        android:clickable=\"true\"\n        android:focusable=\"true\"\n        android:foreground=\"?android:attr/selectableItemBackground\"\n        android:paddingLeft=\"20dp\"\n        android:paddingRight=\"20dp\">\n\n        <com.google.android.material.imageview.ShapeableImageView\n            android:id=\"@+id/music_icon\"\n            android:layout_width=\"80dp\"\n            android:layout_height=\"80dp\"\n            android:layout_gravity=\"top|left\"\n            android:background=\"@null\"\n            android:scaleType=\"fitCenter\" />\n\n        <androidx.appcompat.widget.AppCompatTextView\n            android:id=\"@+id/author\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"40dp\"\n            android:layout_marginLeft=\"95dp\"\n            android:gravity=\"center_vertical\"\n            android:textColor=\"?android:textColorPrimary\"\n            android:textSize=\"16dp\" />\n\n        <com.google.android.material.textview.MaterialTextView\n            android:id=\"@+id/title\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"40dp\"\n            android:layout_marginLeft=\"95dp\"\n            android:layout_marginTop=\"35dp\"\n            android:gravity=\"center_vertical\"\n            android:textColor=\"?android:textColorPrimary\"\n            android:textSize=\"22dp\" />\n\n        <com.wgllss.core.widget.MusicVisualizerView\n            android:id=\"@+id/musicVisualizerView\"\n            android:layout_width=\"50dp\"\n            android:layout_height=\"50dp\"\n            android:layout_gravity=\"center_vertical|right\" />\n\n    </FrameLayout>\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/delete_right_tv\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"match_parent\"\n        android:gravity=\"center\"\n        android:text=\"删除\"\n        android:textColor=\"?android:textColorPrimary\"\n        android:textSize=\"16dp\" />\n\n</com.mcxtzhang.swipemenulib.SwipeMenuLayout>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/res/layout/fragment_history.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?><!--<layout>-->\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:app=\"http://schemas.android.com/apk/res-auto\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <View\n        android:id=\"@+id/view_title_bar_bg\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"top|left\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"听歌列表\"\n        android:textColor=\"?android:textColorHighlight\"\n        android:textSize=\"20dp\" />\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/rv_pl_list\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"82dp\"\n        android:orientation=\"vertical\" />\n</FrameLayout><!--</layout>-->"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/res/layout/fragment_locker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/mainUI\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    android:gravity=\"center\"\n    android:orientation=\"vertical\">\n\n    <TextClock\n        android:id=\"@+id/txt_time\"\n        android:layout_width=\"130dp\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"30dp\"\n        android:layout_marginTop=\"40dp\"\n        android:format12Hour=\"HH:mm\"\n        android:format24Hour=\"HH:mm\"\n        android:gravity=\"center_vertical\"\n        android:text=\"12.06\"\n        android:textSize=\"45dp\" />\n\n    <TextClock\n        android:id=\"@+id/txt_date\"\n        android:layout_width=\"120dp\"\n        android:layout_height=\"25dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"35dp\"\n        android:layout_marginTop=\"100dp\"\n        android:format12Hour=\"MM月dd日\"\n        android:format24Hour=\"MM月dd日\"\n        android:gravity=\"center_vertical\"\n        android:text=\"14:25\"\n        android:textSize=\"18dp\" />\n\n    <TextClock\n        android:id=\"@+id/txt_week\"\n        android:layout_width=\"120dp\"\n        android:layout_height=\"25dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"35dp\"\n        android:layout_marginTop=\"130dp\"\n        android:format12Hour=\"EEEE\"\n        android:format24Hour=\"EEEE\"\n        android:gravity=\"center_vertical\"\n        android:text=\"星期二\"\n        android:textSize=\"18dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/mater_music_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"top|right\"\n        android:layout_marginLeft=\"165dp\"\n        android:layout_marginTop=\"100dp\"\n        android:layout_marginRight=\"30dp\"\n        android:gravity=\"center_vertical|right\"\n        android:singleLine=\"true\"\n        android:textSize=\"25dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/music_autor\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"top|right\"\n        android:layout_marginLeft=\"165dp\"\n        android:layout_marginTop=\"135dp\"\n        android:layout_marginRight=\"30dp\"\n        android:gravity=\"center_vertical|right\"\n        android:textSize=\"20dp\" />\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/iv_center\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"280dp\"\n        android:layout_gravity=\"center\"\n        android:scaleType=\"centerCrop\" />\n\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/iv_prev\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"left|bottom\"\n        android:layout_marginLeft=\"50dp\"\n        android:layout_marginBottom=\"120dp\" />\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/iv_play\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"center_horizontal|bottom\"\n        android:layout_marginBottom=\"120dp\"\n        android:visibility=\"visible\" />\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/iv_next\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"right|bottom\"\n        android:layout_marginRight=\"50dp\"\n        android:layout_marginBottom=\"120dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/txt_buttom\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"center_horizontal|bottom\"\n        android:layout_marginTop=\"26dp\"\n        android:layout_marginBottom=\"30dp\"\n        android:gravity=\"center\"\n        android:text=\">>>滑动解锁\"\n        android:textSize=\"20dp\" />\n\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/res/layout/fragment_play.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/layout_play_bg\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <ImageView\n        android:id=\"@+id/img_back\"\n        android:layout_width=\"50dp\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"26dp\"\n        android:clickable=\"true\"\n        android:focusable=\"true\"\n        android:foreground=\"?android:attr/selectableItemBackground\"\n        android:padding=\"7dp\"\n        android:scaleType=\"fitCenter\" />\n\n    <TextView\n        android:id=\"@+id/mater_music_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:layout_marginTop=\"26dp\"\n        android:gravity=\"center\"\n        android:textSize=\"25dp\" />\n\n    <androidx.viewpager.widget.ViewPager\n        android:id=\"@+id/view_pager\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"50dp\" />\n\n    <TextView\n        android:id=\"@+id/tv_current_time\"\n        android:layout_width=\"70dp\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"bottom|left\"\n        android:layout_marginLeft=\"40dp\"\n        android:layout_marginBottom=\"120dp\"\n        android:gravity=\"center_vertical|right\"\n        android:text=\"00:00\"\n        android:textSize=\"10dp\" />\n\n    <SeekBar\n        android:id=\"@+id/sb_progress\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"bottom|left\"\n        android:layout_marginLeft=\"120dp\"\n        android:layout_marginRight=\"120dp\"\n        android:layout_marginBottom=\"120dp\"\n        android:maxHeight=\"2dp\"\n        android:minHeight=\"2dp\" />\n\n    <TextView\n        android:id=\"@+id/tv_total_time\"\n        android:layout_width=\"70dp\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"bottom|right\"\n        android:layout_marginRight=\"40dp\"\n        android:layout_marginBottom=\"120dp\"\n        android:gravity=\"center_vertical|left\"\n        android:text=\"\"\n        android:textSize=\"10dp\" />\n\n    <ImageView\n        android:id=\"@+id/iv_mode\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"bottom|center_horizontal\"\n        android:layout_marginRight=\"150dp\"\n        android:layout_marginBottom=\"20dp\" />\n\n    <ImageView\n        android:id=\"@+id/iv_prev\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"bottom|center_horizontal\"\n        android:layout_marginRight=\"80dp\"\n        android:layout_marginBottom=\"20dp\" />\n\n    <ImageView\n        android:id=\"@+id/iv_play\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"bottom|center_horizontal\"\n        android:layout_marginBottom=\"20dp\"\n        android:visibility=\"gone\" />\n\n    <ProgressBar\n        android:id=\"@+id/pb_load\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"bottom|center_horizontal\"\n        android:layout_marginBottom=\"20dp\"\n        android:indeterminateBehavior=\"repeat\"\n        android:indeterminateOnly=\"true\"\n        android:padding=\"5dp\"\n        android:visibility=\"visible\" />\n\n    <ImageView\n        android:id=\"@+id/iv_next\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"center_horizontal|bottom\"\n        android:layout_marginLeft=\"80dp\"\n        android:layout_marginBottom=\"20dp\" />\n\n</FrameLayout>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/res/layout/fragment_search.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n    <View\n        android:id=\"@+id/view_title_bar_bg\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"top|left\" />\n\n    <androidx.appcompat.widget.AppCompatEditText\n        android:id=\"@+id/et_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"top\"\n        android:layout_marginTop=\"36dp\"\n        android:background=\"#00000000\"\n        android:gravity=\"center_vertical\"\n        android:hint=\"请输入歌曲名称\"\n        android:imeOptions=\"actionSearch\"\n        android:inputType=\"text\"\n        android:maxLines=\"1\"\n        android:paddingLeft=\"50dp\"\n        android:textColor=\"?android:textColorHighlight\"\n        android:textColorHint=\"?android:textColorHighlight\"\n        android:textSize=\"18dp\" />\n\n    <androidx.appcompat.widget.AppCompatImageView\n        android:id=\"@+id/shapeable_search\"\n        android:layout_width=\"45dp\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"top|right\"\n        android:layout_marginTop=\"36dp\"\n        android:layout_marginRight=\"20dp\"\n        android:background=\"@null\"\n        android:foreground=\"?android:attr/selectableItemBackground\"\n        android:padding=\"8dp\"\n        android:scaleType=\"fitCenter\" />\n\n    <androidx.recyclerview.widget.RecyclerView\n        android:id=\"@+id/rv_result\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"82dp\"\n        android:orientation=\"vertical\" />\n\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/res/layout/fragment_setting.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <View\n        android:id=\"@+id/view_title_bar_bg\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"left|top\" />\n\n    <androidx.appcompat.widget.AppCompatTextView\n        android:id=\"@+id/title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"设置\"\n        android:textColor=\"?android:textColorHighlight\"\n        android:textSize=\"20dp\" />\n\n\n    <View\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"82dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/material_locker_setting\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"96dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"锁屏歌词\"\n        android:textColor=\"?android:textColorPrimary\"\n        android:textSize=\"20dp\" />\n\n    <com.google.android.material.switchmaterial.SwitchMaterial\n        android:id=\"@+id/material_switch_settion\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"right|top\"\n        android:layout_marginTop=\"96dp\"\n        android:layout_marginRight=\"20dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/txt_loker_des\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"144dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"25dp\"\n        android:text=\"注：开启锁屏歌词需要打开 后台弹窗 权限并开启： 在其他应用上层显示 权限\"\n        android:textColor=\"#999999\"\n        android:textSize=\"16dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/material_notification\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"194dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"通知权限\"\n        android:textColor=\"?android:textColorPrimary\"\n        android:textSize=\"18dp\" />\n\n    <com.google.android.material.switchmaterial.SwitchMaterial\n        android:id=\"@+id/material_notification_switch\"\n        android:layout_width=\"100dp\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"right|top\"\n        android:layout_marginTop=\"194dp\"\n        android:layout_marginRight=\"20dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"20dp\"\n        android:text=\"\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/txt_notification_des\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"left|top\"\n        android:layout_marginTop=\"239dp\"\n        android:gravity=\"center_vertical\"\n        android:paddingLeft=\"25dp\"\n        android:paddingRight=\"25dp\"\n        android:text=\"注：开启通知权限后可保证长时间在后台播放音乐\"\n        android:textColor=\"#999999\"\n        android:textSize=\"16dp\" />\n\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib/src/main/res/layout/music_cd_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n\n    <FrameLayout\n        android:id=\"@+id/cd_layout\"\n        android:layout_width=\"250dp\"\n        android:layout_height=\"250dp\"\n        android:layout_gravity=\"center\">\n\n\n        <ImageView\n            android:id=\"@+id/img_circle\"\n            android:layout_width=\"250dp\"\n            android:layout_height=\"250dp\" />\n\n        <com.google.android.material.imageview.ShapeableImageView\n            android:id=\"@+id/iv_center2\"\n            android:layout_width=\"170dp\"\n            android:layout_height=\"170dp\"\n            android:layout_gravity=\"center\"\n            android:scaleType=\"centerCrop\" />\n\n    </FrameLayout>\n\n    <ImageView\n        android:id=\"@+id/iv_point\"\n        android:layout_width=\"90dp\"\n        android:layout_height=\"132dp\"\n        android:layout_gravity=\"center\"\n        android:layout_marginLeft=\"40dp\"\n        android:layout_marginBottom=\"120dp\" />\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.dynamic.sample.other2'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.dynamic.sample.other2\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        release {\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"classes_other2_res.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\n\ndef createCopyTask(assembleReleaseTask, buildType) {\n    def inputFile = file(\"${getProject().getBuildDir()}/outputs/apk/release/classes_other2_res.apk\")\n    def outputFile = file(\"${rootProject.getBuildDir()}/classes_other2_res\")\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    return tasks.create(\"assembleCopy\", Copy) {\n        group = 'other'\n        description = \"复制json到 指定输出目录\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(assembleReleaseTask.name)\n}\n\ntasks.whenTaskAdded { task ->\n    if (task.name == \"assembleRelease\") {\n        createCopyTask(task, \"release\")\n    }\n//    if (task.name == \"cleanJson\") {\n//        createVersionJson(task, \"Release\")\n//    }\n}\n\n\ndependencies {\n\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/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\n\n-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* #这个过滤器是谷歌推荐的算法，一般不做更改\n-optimizationpasses 7 # 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n-dontpreverify # 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n-dontusemixedcaseclassnames #混合时不使用大小写混合，混合后的类名为小写\n-verbose #包含有类名->混淆后类名的映射关系 日志记录\n-keepattributes SourceFile,LineNumberTable # 保留代码行号\n\n# Preserve some attributes that may be required for reflection.\n-keepattributes AnnotationDefault,*Annotation*,# 避免混淆注解\n                EnclosingMethod, # 避免混淆匿名类\n                InnerClasses, # 避免混淆内部类\n                RuntimeVisibleAnnotations,\n                RuntimeVisibleParameterAnnotations,\n                RuntimeVisibleTypeAnnotations,\n                Signature # 避免混淆泛型\n\n# Fragment\n-keep class * extends androidx.fragment.app.Fragment{}\n-keep class * extends androidx.fragment.app.FragmentActivity{}\n\n# keepclassmembers :防止类成员被移除或被混淆\n-keepclassmembers class * {\n    @android.webkit.JavascriptInterface <methods>;\n}\n\n# 保留本地native方法不被混淆\n-keepclasseswithmembernames class * { native <methods>;}\n\n# The support libraries contains references to newer platform versions.\n# Don't warn about those in case this app is linking against an older\n# platform version. We know about them, and they are safe.\n-dontnote android.support.**\n-dontnote androidx.**\n-dontwarn android.support.**\n-dontwarn androidx.**\n# 保留R下面的资源\n-keep class **.R$* {*;}\n## Android architecture components: Lifecycle\n# LifecycleObserver's empty constructor is considered to be unused by proguard\n-keepclassmembers class * implements androidx.lifecycle.LifecycleObserver {\n    <init>(...);\n}\n# ViewModel's empty constructor is considered to be unused by proguard\n-keepclassmembers class * extends androidx.lifecycle.ViewModel {\n    <init>(...);\n}\n# keep methods annotated with @OnLifecycleEvent even if they seem to be unused\n# (Mostly for LiveData.LifecycleBoundObserver.onStateChange(), but who knows)\n-keepclassmembers class * {\n    @androidx.lifecycle.OnLifecycleEvent *;\n}\n\n# ViewBinding\n-keep public class * extends androidx.viewbinding.ViewBinding {*;}\n\n# These classes are duplicated between android.jar and org.apache.http.legacy.jar.\n-dontnote org.apache.http.**\n-dontnote android.net.http.**\n\n# 保持自定义控件类不被混淆  # keepclasseswithmembers:防止拥有改成员的类和类成员被移除或被混淆\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet);\n}\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet, int);\n}\n# 保留枚举类不被混淆\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n\n# 保留Parcelable序列化类不被混淆\n#-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}\n## 保留Serializable序列化的类不被混淆\n#-keepnames class * implements java.io.Serializable\n#-keepclassmembers class * implements java.io.Serializable {\n#    static final long serialVersionUID;\n#    private static final java.io.ObjectStreamField[] serialPersistentFields;\n#    !static !transient <fields>;\n#    !private <fields>;\n#    !private <methods>;\n#    private void writeObject(java.io.ObjectOutputStream);\n#    private void readObject(java.io.ObjectInputStream);\n#    java.lang.Object writeReplace();\n#    java.lang.Object readResolve();\n#}\n## 对于带有回调函数的onXXEvent、**On*Listener的，不能被混淆\n#-keepclassmembers class * {\n#    void *(**On*Event);\n#    void *(**On*Listener);\n#}\n\n# Databinding\n-dontwarn android.databinding.**\n-keep class android.databinding.** { *; }\n-keep class androidx.lifecycle.** { *; }\n-keep class kotlinx.coroutines.** { *; }\n# kotlin 相关\n-dontwarn kotlin.**\n-keep class kotlin.** { *; }\n-keep interface kotlin.** { *; }\n################ 第三方库中的混淆规则start ##############################\n# Glide混淆\n#-keep public class * implements com.bumptech.glide.module.GlideModule\n#-keep class * extends com.bumptech.glide.module.AppGlideModule {\n# <init>(...);\n#}\n#-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {\n#  **[] $VALUES;\n#  public *;\n#}\n#-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {\n#  *** rewind();\n#}\n\n#友盟混淆\n-keep class com.umeng.** {*;}\n-keep class org.repackage.** {*;}\n-keepclassmembers class * {\n   public <init> (org.json.JSONObject);\n}\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n#Jsoup 混淆\n#-dontwarn org.jsoup.**\n#-keep class org.jsoup.**{*;}\n#-keeppackagenames org.jsoup.nodes\n\n# Gson\n#-keep class com.google.gson.** {*;}\n#-keep class com.google.gson.stream.** {*;}\n#-keep class com.google.** {\n#    <fields>;\n#    <methods>;\n#}\n\n\n#\n############### 对于一些基本指令的添加start ##################\n## 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n#-optimizationpasses 5\n## 混合时不使用大小写混合，混合后的类名为小写\n#-dontusemixedcaseclassnames\n## 指定不去忽略非公共库的类\n#-dontskipnonpubliclibraryclasses\n## 这句话能够使我们的项目混淆后产生映射文件\n## 包含有类名->混淆后类名的映射关系\n#-verbose\n## 指定不去忽略非公共库的类成员\n#-dontskipnonpubliclibraryclassmembers\n## 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n#-dontpreverify\n## 忽略警告\n#-ignorewarnings\n## 保留Annotation不混淆\n#-keepattributes *Annotation*,InnerClasses\n## 避免混淆泛型\n#-keepattributes Signature\n## 抛出异常时保留代码行号\n#-keepattributes SourceFile,LineNumberTable\n## 指定混淆是采用的算法，后面的参数是一个过滤器\n## 这个过滤器是谷歌推荐的算法，一般不做更改\n#-optimizations !code/simplification/cast,!field/*,!class/merging/*\n################ 对于一些基本指令的添加end #########################\n#\n#\n################ Android开发中一些需要保留的公共部分start ##################\n## 保留我们使用的四大组件，自定义的Application等等这些类不被混淆,因为这些子类都有可能被外部调用\n#-keep public class * extends android.app.Activity\n#-keep public class * extends android.app.Application\n#-keep public class * extends android.app.Service\n#-keep public class * extends android.content.BroadcastReceiver\n#-keep public class * extends android.content.ContentProvider\n#-keep public class * extends android.app.backup.BackupAgentHelper\n#-keep public class * extends android.preference.Preference\n#-keep public class * extends android.view.View\n## 保留support下的所有类及其内部类\n#-keep class android.support.** {*;}\n## 保留继承的\n#-keep public class * extends android.support.v4.**\n#-keep public class * extends android.support.v7.**\n#-keep public class * extends android.support.annotation.**\n## Androidx的混淆\n#-keep class com.google.android.material.** {*;}\n#-keep class androidx.** {*;}\n#-keep public class * extends androidx.**\n#-keep interface androidx.** {*;}\n#-dontwarn com.google.android.material.**\n#-dontnote com.google.android.material.**\n#-dontwarn androidx.**\n## 保留R下面的资源\n#-keep class **.R$* {*;}\n## 保留本地native方法不被混淆\n#-keepclasseswithmembernames class * { native <methods>;}\n## 保留在Activity中的方法参数是view的方法，\n## 这样以来我们在layout中写的onClick就不会被影响\n#-keepclassmembers class * extends android.app.Activity{ public void *(android.view.View);}\n## 保留枚举类不被混淆\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n## 保留我们自定义控件（继承自View）不被混淆\n#-keep public class * extends android.view.View{\n#    *** get*();\n#    void set*(***);\n#    public <init>(android.content.Context);\n#    public <init>(android.content.Context, android.util.AttributeSet);\n#    public <init>(android.content.Context, android.util.AttributeSet, int);\n#}\n## 保留Parcelable序列化类不被混淆\n#-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}\n## 保留Serializable序列化的类不被混淆\n#-keepnames class * implements java.io.Serializable\n#-keepclassmembers class * implements java.io.Serializable {\n#    static final long serialVersionUID;\n#    private static final java.io.ObjectStreamField[] serialPersistentFields;\n#    !static !transient <fields>;\n#    !private <fields>;\n#    !private <methods>;\n#    private void writeObject(java.io.ObjectOutputStream);\n#    private void readObject(java.io.ObjectInputStream);\n#    java.lang.Object writeReplace();\n#    java.lang.Object readResolve();\n#}\n## 对于带有回调函数的onXXEvent、**On*Listener的，不能被混淆\n#-keepclassmembers class * {\n#    void *(**On*Event);\n#    void *(**On*Listener);\n#}\n#\n## 所有实体类不能混淆 model文件夹下的所有实体类不能混淆\n#\n##-keep class com.btpj.lib_base.data.bean.** {*;}\n##-keep class com.btpj.wanandroid.data.** {*;}\n#\n################ Android开发中一些需要保留的公共部分end ##################\n#\n#\n################ 第三方库中的混淆规则start ##############################\n## Glide混淆\n#-keep public class * implements com.bumptech.glide.module.GlideModule\n#-keep class * extends com.bumptech.glide.module.AppGlideModule {\n# <init>(...);\n#}\n#-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {\n#  **[] $VALUES;\n#  public *;\n#}\n#-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {\n#  *** rewind();\n#}\n#\n##友盟混淆\n#-keep class com.umeng.** {*;}\n#-keep class org.repackage.** {*;}\n#-keepclassmembers class * {\n#   public <init> (org.json.JSONObject);\n#}\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n##Jsoup 混淆\n#-dontwarn org.jsoup.**\n#-keep class org.jsoup.**{*;}\n#-keeppackagenames org.jsoup.nodes\n\n# Gson\n#-keep class com.google.gson.** {*;}\n#-keep class com.google.gson.stream.** {*;}\n#-keep class com.google.** {\n#    <fields>;\n#    <methods>;\n#}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.sample.other2\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/res/layout/activity_locker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/content\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\" />\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/res/layout/activity_other2.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <View\n        android:id=\"@+id/view_title_bar\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"top|left\" />\n\n    <ImageView\n        android:id=\"@+id/img_back\"\n        android:layout_width=\"45dp\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"36dp\"\n        android:clickable=\"true\"\n        android:gravity=\"center\"\n        android:focusable=\"true\"\n        android:padding=\"7dp\"\n        android:scaleType=\"fitCenter\" />\n\n    <TextView\n        android:id=\"@+id/txt_activity_title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"示例\"\n        android:textSize=\"18dp\" />\n\n    <FrameLayout\n        android:id=\"@+id/layout_content\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"82dp\" />\n</FrameLayout>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/res/layout/activity_other3.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <View\n        android:id=\"@+id/view_title_bar\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"top|left\" />\n\n    <ImageView\n        android:id=\"@+id/img_back\"\n        android:layout_width=\"45dp\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"36dp\"\n        android:clickable=\"true\"\n        android:focusable=\"true\"\n        android:gravity=\"center\"\n        android:padding=\"7dp\"\n        android:scaleType=\"fitCenter\" />\n\n    <TextView\n        android:id=\"@+id/txt_activity_title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"示例\"\n        android:textSize=\"18dp\" />\n\n    <FrameLayout\n        android:id=\"@+id/layout_content\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"82dp\">\n\n        <TextView\n            android:id=\"@+id/txt3\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"45dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"我是第三层activity\"\n            android:textSize=\"18dp\" />\n    </FrameLayout>\n</FrameLayout>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/res/layout/activity_play.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/content\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\" />\n\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/res/layout/activity_video.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/layout_content\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:keepScreenOn=\"true\">\n\n    <FrameLayout\n        android:id=\"@+id/layout_title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:visibility=\"gone\">\n\n        <ImageView\n            android:id=\"@+id/img_back\"\n            android:layout_width=\"45dp\"\n            android:layout_height=\"45dp\"\n            android:layout_gravity=\"left|bottom\"\n            android:padding=\"7dp\" />\n\n        <TextView\n            android:id=\"@+id/title\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"45dp\"\n            android:layout_gravity=\"left|bottom\"\n            android:layout_marginLeft=\"45dp\"\n            android:gravity=\"center_vertical\"\n            android:maxLines=\"1\"\n            android:textSize=\"16dp\" />\n    </FrameLayout>\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/res/layout/activity_webview.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <View\n        android:id=\"@+id/view_title_bar\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"82dp\"\n        android:layout_gravity=\"top|left\" />\n\n    <ImageView\n        android:id=\"@+id/img_back\"\n        android:layout_width=\"45dp\"\n        android:layout_height=\"45dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"36dp\"\n        android:clickable=\"true\"\n        android:focusable=\"true\"\n        android:gravity=\"center\"\n        android:padding=\"7dp\"\n        android:scaleType=\"fitCenter\" />\n\n    <TextView\n        android:id=\"@+id/txt_activity_title\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"示例\"\n        android:textSize=\"18dp\" />\n\n    <WebView\n        android:id=\"@+id/webview\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"82dp\" />\n</FrameLayout>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/res/layout/dialog_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"500dp\"\n    android:layout_height=\"500dp\"\n    android:orientation=\"vertical\">\n\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/btn_dialog_0\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:gravity=\"center\"\n        android:text=\"我是弹出窗里面布局,点击我就消失了 \"\n        android:textSize=\"18dp\" />\n\n</LinearLayout>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/res/layout/fragment_activity_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:orientation=\"vertical\">\n\n\n    <ImageView\n        android:id=\"@+id/img_url\"\n        android:layout_width=\"150dp\"\n        android:layout_height=\"150dp\"\n        android:clickable=\"true\"\n        android:focusable=\"true\"\n        android:scaleType=\"fitCenter\" />\n\n    <TextView\n        android:id=\"@+id/txt_test\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"示例\"\n        android:textSize=\"18dp\" />\n\n    <com.google.android.material.button.MaterialButton\n        android:id=\"@+id/btn_jump\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"45dp\"\n        android:layout_marginTop=\"36dp\"\n        android:gravity=\"center\"\n        android:text=\"再次跳转到插件Activity\"\n        android:textSize=\"18dp\" />\n</LinearLayout>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/res/layout/fragment_broadcast_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.core.widget.NestedScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_send_broadcast\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中: 动态广播 发送\"\n            android:textSize=\"18dp\" />\n\n    </LinearLayout>\n</androidx.core.widget.NestedScrollView>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/res/layout/fragment_dialog_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.core.widget.NestedScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_dialog\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"dialog \"\n            android:textSize=\"18dp\" />\n\n    </LinearLayout>\n</androidx.core.widget.NestedScrollView>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/res/layout/fragment_locker.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/mainUI\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\"\n    android:fitsSystemWindows=\"true\"\n    android:gravity=\"center\"\n    android:orientation=\"vertical\">\n\n    <TextClock\n        android:id=\"@+id/txt_time\"\n        android:layout_width=\"130dp\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"30dp\"\n        android:layout_marginTop=\"40dp\"\n        android:format12Hour=\"HH:mm\"\n        android:format24Hour=\"HH:mm\"\n        android:gravity=\"center_vertical\"\n        android:text=\"12.06\"\n        android:textSize=\"45dp\" />\n\n    <TextClock\n        android:id=\"@+id/txt_date\"\n        android:layout_width=\"120dp\"\n        android:layout_height=\"25dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"35dp\"\n        android:layout_marginTop=\"100dp\"\n        android:format12Hour=\"MM月dd日\"\n        android:format24Hour=\"MM月dd日\"\n        android:gravity=\"center_vertical\"\n        android:text=\"14:25\"\n        android:textSize=\"18dp\" />\n\n    <TextClock\n        android:id=\"@+id/txt_week\"\n        android:layout_width=\"120dp\"\n        android:layout_height=\"25dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginLeft=\"35dp\"\n        android:layout_marginTop=\"130dp\"\n        android:format12Hour=\"EEEE\"\n        android:format24Hour=\"EEEE\"\n        android:gravity=\"center_vertical\"\n        android:text=\"星期二\"\n        android:textSize=\"18dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/mater_music_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"top|right\"\n        android:layout_marginLeft=\"165dp\"\n        android:layout_marginTop=\"100dp\"\n        android:layout_marginRight=\"30dp\"\n        android:gravity=\"center_vertical|right\"\n        android:singleLine=\"true\"\n        android:textSize=\"25dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/music_autor\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"top|right\"\n        android:layout_marginLeft=\"165dp\"\n        android:layout_marginTop=\"135dp\"\n        android:layout_marginRight=\"30dp\"\n        android:gravity=\"center_vertical|right\"\n        android:textSize=\"20dp\" />\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/iv_center\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"330dp\"\n        android:layout_gravity=\"center\"\n        android:scaleType=\"centerCrop\" />\n\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/iv_prev\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"left|bottom\"\n        android:layout_marginLeft=\"50dp\"\n        android:layout_marginBottom=\"120dp\" />\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/iv_play\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"center_horizontal|bottom\"\n        android:layout_marginBottom=\"120dp\"\n        android:visibility=\"visible\" />\n\n    <com.google.android.material.imageview.ShapeableImageView\n        android:id=\"@+id/iv_next\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"right|bottom\"\n        android:layout_marginRight=\"50dp\"\n        android:layout_marginBottom=\"120dp\" />\n\n    <com.google.android.material.textview.MaterialTextView\n        android:id=\"@+id/txt_buttom\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"center_horizontal|bottom\"\n        android:layout_marginTop=\"26dp\"\n        android:layout_marginBottom=\"30dp\"\n        android:gravity=\"center\"\n        android:text=\">>>滑动解锁\"\n        android:textSize=\"20dp\" />\n\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/res/layout/fragment_notification_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.core.widget.NestedScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_notifacaion1\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"notification1 \"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_notifacaion2\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"notification2\"\n            android:textSize=\"18dp\" />\n    </LinearLayout>\n</androidx.core.widget.NestedScrollView>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/res/layout/fragment_play.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:id=\"@+id/layout_play_bg\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <ImageView\n        android:id=\"@+id/img_back\"\n        android:layout_width=\"50dp\"\n        android:layout_height=\"50dp\"\n        android:layout_gravity=\"top|left\"\n        android:layout_marginTop=\"26dp\"\n        android:clickable=\"true\"\n        android:foreground=\"?android:attr/selectableItemBackground\"\n        android:padding=\"7dp\"\n        android:scaleType=\"fitCenter\" />\n\n    <TextView\n        android:id=\"@+id/mater_music_name\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"50dp\"\n        android:layout_marginTop=\"26dp\"\n        android:gravity=\"center\"\n        android:textSize=\"25dp\" />\n\n    <androidx.viewpager.widget.ViewPager\n        android:id=\"@+id/view_pager\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:layout_marginTop=\"76dp\" />\n\n    <TextView\n        android:id=\"@+id/tv_current_time\"\n        android:layout_width=\"35dp\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"bottom|left\"\n        android:layout_marginLeft=\"10dp\"\n        android:layout_marginBottom=\"120dp\"\n        android:gravity=\"center_vertical|right\"\n        android:text=\"00:00\"\n        android:textSize=\"10dp\" />\n\n    <SeekBar\n        android:id=\"@+id/sb_progress\"\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"bottom|left\"\n        android:layout_marginLeft=\"45dp\"\n        android:layout_marginRight=\"45dp\"\n        android:layout_marginBottom=\"120dp\"\n        android:maxHeight=\"2dp\"\n        android:minHeight=\"2dp\" />\n\n    <TextView\n        android:id=\"@+id/tv_total_time\"\n        android:layout_width=\"35dp\"\n        android:layout_height=\"30dp\"\n        android:layout_gravity=\"bottom|right\"\n        android:layout_marginRight=\"10dp\"\n        android:layout_marginBottom=\"120dp\"\n        android:gravity=\"center_vertical|left\"\n        android:text=\"\"\n        android:textSize=\"10dp\" />\n\n    <ImageView\n        android:id=\"@+id/iv_mode\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"bottom|center_horizontal\"\n        android:layout_marginRight=\"150dp\"\n        android:visibility=\"gone\"\n        android:layout_marginBottom=\"20dp\" />\n\n    <ImageView\n        android:id=\"@+id/iv_prev\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"bottom|center_horizontal\"\n        android:layout_marginRight=\"80dp\"\n        android:layout_marginBottom=\"20dp\" />\n\n    <ImageView\n        android:id=\"@+id/iv_play\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"bottom|center_horizontal\"\n        android:layout_marginBottom=\"20dp\"\n        android:visibility=\"gone\" />\n\n    <ProgressBar\n        android:id=\"@+id/pb_load\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"bottom|center_horizontal\"\n        android:layout_marginBottom=\"20dp\"\n        android:indeterminateBehavior=\"repeat\"\n        android:indeterminateOnly=\"true\"\n        android:padding=\"5dp\"\n        android:visibility=\"visible\" />\n\n    <ImageView\n        android:id=\"@+id/iv_next\"\n        android:layout_width=\"80dp\"\n        android:layout_height=\"80dp\"\n        android:layout_gravity=\"center_horizontal|bottom\"\n        android:layout_marginLeft=\"80dp\"\n        android:layout_marginBottom=\"20dp\" />\n\n</FrameLayout>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/res/layout/fragment_provider_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.core.widget.NestedScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_query\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"查询\"\n            android:textSize=\"18dp\" />\n\n        <TextView\n            android:id=\"@+id/txt_query_result\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"wrap_content\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"查询结果:\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_del\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"删除\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_update\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"修改\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_insert\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"插入\"\n            android:textSize=\"18dp\" />\n    </LinearLayout>\n</androidx.core.widget.NestedScrollView>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/res/layout/fragment_service_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.core.widget.NestedScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_start_service\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中: start Service\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_start_service2\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中: start Service2\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_start_service3\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中: start Service3\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_bind_service\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中: bind Service\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_bind_service2\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中: bind Service2\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_bind_service3\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中: bind Service3\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_start_service11\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中(单独进程): start Service\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_bind_service11\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"启动插件中(单独进程): bind Service\"\n            android:textSize=\"18dp\" />\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_bind_service_aidl\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"模拟AIDL(单独进程) 获取值\"\n            android:textSize=\"18dp\" />\n    </LinearLayout>\n</androidx.core.widget.NestedScrollView>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/res/layout/fragment_so_sample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<androidx.core.widget.NestedScrollView xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n    <LinearLayout\n        android:layout_width=\"match_parent\"\n        android:layout_height=\"match_parent\"\n        android:orientation=\"vertical\">\n\n        <com.google.android.material.button.MaterialButton\n            android:id=\"@+id/btn_so\"\n            android:layout_width=\"match_parent\"\n            android:layout_height=\"50dp\"\n            android:layout_marginTop=\"36dp\"\n            android:gravity=\"center\"\n            android:text=\"下载并加载so \"\n            android:textSize=\"18dp\" />\n\n    </LinearLayout>\n</androidx.core.widget.NestedScrollView>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2/src/main/res/layout/music_cd_layout.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<FrameLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    android:layout_width=\"match_parent\"\n    android:layout_height=\"match_parent\">\n\n\n    <FrameLayout\n        android:id=\"@+id/cd_layout\"\n        android:layout_width=\"250dp\"\n        android:layout_height=\"250dp\"\n        android:layout_gravity=\"center\">\n\n\n        <ImageView\n            android:id=\"@+id/img_circle\"\n            android:layout_width=\"250dp\"\n            android:layout_height=\"250dp\" />\n\n        <com.google.android.material.imageview.ShapeableImageView\n            android:id=\"@+id/iv_center2\"\n            android:layout_width=\"170dp\"\n            android:layout_height=\"170dp\"\n            android:layout_gravity=\"center\"\n            android:scaleType=\"centerCrop\" />\n\n    </FrameLayout>\n\n    <ImageView\n        android:id=\"@+id/iv_point\"\n        android:layout_width=\"90dp\"\n        android:layout_height=\"132dp\"\n        android:layout_gravity=\"center\"\n        android:layout_marginLeft=\"40dp\"\n        android:layout_marginBottom=\"120dp\" />\n</FrameLayout>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.library)\n    alias(libs.plugins.jetbrains.kotlin.android)\n    alias(libs.plugins.compose.compiler)\n}\n\nandroid {\n    compileSdk libs.versions.compileSdk.get().toInteger()\n    namespace \"com.wgllss.dynamic.sample.other2\"\n\n    defaultConfig {\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n    buildFeatures {\n        buildConfig true\n        compose = true\n    }\n\n    composeOptions {\n        kotlinCompilerExtensionVersion = \"1.7.0\"\n    }\n\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n\n    kotlinOptions {\n        jvmTarget = '1.8'\n    }\n}\n\ndependencies {\n\n    implementation project(':Maven-Wgllss-Dynamic-Plugin-Common-Library')\n    implementation project(':maven-wgllss-common-re-library')\n    implementation project(':maven-wgllss-business-re-library')\n    implementation project(':maven-wgllss-sample-business-library')\n\n    implementation project(':Maven-Wgllss-Dynamic-Plugin-Manager')\n    implementation project(':Maven-Wgllss-Dynamic-Plugin-Library')\n\n//    implementation 'io.github.wgllss:Wgllss-Dynamic-Host-Provider-Lib:1.0.0.6'\n//    implementation 'io.github.wgllss:Wgllss-Dynamic-Host-Download-Lib:1.0.0.8'\n//    implementation 'io.github.wgllss:Wgllss-Dynamic-Host-Lib-Impl:1.0.1.7'\n//    implementation 'io.github.wgllss:Wgllss-Dynamic-Host-Loader-Lib:1.0.0.9'\n    compileOnly 'io.github.wgllss:Wgllss-Dynamic-Host-Lib:1.0.02'\n\n    implementation libs.androidx.core.ktx\n    implementation libs.appcompat\n    implementation libs.androidx.recyclerview\n    implementation libs.google.material\n    implementation libs.constraintlayout\n\n    implementation libs.androidx.lifecycle.runtime.ktx\n    implementation libs.androidx.lifecycle.livedata.ktx\n    implementation libs.androidx.lifecycle.viewmodel.ktx\n    implementation libs.androidx.activity\n    implementation libs.androidx.activity.ktx\n    implementation libs.androidx.fragment.ktx\n\n    implementation libs.glide\n    implementation libs.palette.ktx\n\n    implementation libs.org.jsoup.jsoup\n    implementation libs.exoplayer.core\n    implementation libs.exoplayer.ui\n    implementation libs.google.extension.mediasession\n\n    //compose\n    implementation(libs.androidx.activity.compose)\n    implementation(platform(libs.androidx.compose.bom))\n    implementation(libs.androidx.ui)\n    implementation(libs.androidx.ui.graphics)\n    implementation(libs.androidx.ui.tooling.preview)\n    implementation(libs.androidx.material3)\n    implementation libs.androidx.constraintlayout.compose\n    implementation libs.androidx.runtime.livedata\n    implementation libs.coil.compose\n    implementation libs.androidx.navigation.compose\n    implementation libs.androidx.navigation.runtime.ktx\n    implementation libs.androidx.compose.material3.adaptive.navigation\n    implementation libs.androidx.compose.material3.adaptive\n    implementation libs.androidx.compose.material3.adaptive.layout\n    implementation libs.androidx.compose.material3.navigationSuite\n    implementation libs.androidx.compose.material3.windowSizeClass\n\n}\n\ndef commandDex(buildType) {\n    def workingDirPath = rootProject.ext.workingDirPath\n    def outputFile = file(\"${workingDirPath}classes_other2.jar\")\n    def outputDexFile = file(\"${workingDirPath}classes_other2_dex.jar\")\n    def lastOutputDexFile = file(\"${rootProject.getBuildDir()}/classes_other2_dex\")\n    if (lastOutputDexFile.exists()) {\n        lastOutputDexFile.delete()\n    }\n    if (outputDexFile.exists()) {\n        outputDexFile.delete()\n    }\n    if (outputFile.exists()) {\n        outputFile.delete()\n    }\n    def inputFile = file(\"${getProject().getBuildDir()}/intermediates/aar_main_jar/${buildType}/sync${buildType}LibJars/classes.jar\")\n    def copyTask = tasks.create(\"assembleCopy${buildType.capitalize()}\", Copy) {\n        group = 'other'\n        description = \"复制${name}到dx环境中.\"\n        from(inputFile.getParent()) {\n            include(inputFile.name)\n            rename { outputFile.name }\n        }\n        into(outputFile.getParent())\n    }.dependsOn(\"assemble${buildType.capitalize()}\")\n\n    def assembleDxCommand = tasks.create(\"assembleDxCommand\", Exec) {\n        group = 'other'\n        description = \"${name}到dx执行中...\"\n        workingDir workingDirPath\n        if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {\n            it.commandLine 'cmd', '/c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        } else {\n            it.commandLine 'bash', '-c', \"d8 --release --output ${outputDexFile.name} ${outputFile.name}\"\n        }\n//        it.commandLine 'cmd', \"/c\", \"d8 --output ${outputDexFile.name} ${outputFile.name}\"\n    }.dependsOn(copyTask.name)\n\n    return tasks.create(\"assembleDxCommandAndCopy\") {\n        doLast {\n            copy {\n                from(outputDexFile.getParent()) {\n                    include(outputDexFile.name)\n                    rename { lastOutputDexFile.name }\n                }\n                into(lastOutputDexFile.getParent())\n            }\n        }\n    }.dependsOn(assembleDxCommand.name)\n}\n\ntasks.whenTaskAdded { task ->\n    if (task.name == \"assembleRelease\") {\n        commandDex(\"Release\")\n    }\n//    if (task.name == \"assembleDxCommand\") {\n//        assembleCopyToHost.dependsOn assembleDxCommand\n//    }\n}\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/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\n\n-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/* #这个过滤器是谷歌推荐的算法，一般不做更改\n-optimizationpasses 7 # 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n-dontpreverify # 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n-dontusemixedcaseclassnames #混合时不使用大小写混合，混合后的类名为小写\n-verbose #包含有类名->混淆后类名的映射关系 日志记录\n-keepattributes SourceFile,LineNumberTable # 保留代码行号\n\n# Preserve some attributes that may be required for reflection.\n-keepattributes AnnotationDefault,*Annotation*,# 避免混淆注解\n                EnclosingMethod, # 避免混淆匿名类\n                InnerClasses, # 避免混淆内部类\n                RuntimeVisibleAnnotations,\n                RuntimeVisibleParameterAnnotations,\n                RuntimeVisibleTypeAnnotations,\n                Signature # 避免混淆泛型\n\n# Fragment\n-keep class * extends androidx.fragment.app.Fragment{}\n-keep class * extends androidx.fragment.app.FragmentActivity{}\n\n# keepclassmembers :防止类成员被移除或被混淆\n-keepclassmembers class * {\n    @android.webkit.JavascriptInterface <methods>;\n}\n\n# 保留本地native方法不被混淆\n-keepclasseswithmembernames class * { native <methods>;}\n\n# The support libraries contains references to newer platform versions.\n# Don't warn about those in case this app is linking against an older\n# platform version. We know about them, and they are safe.\n-dontnote android.support.**\n-dontnote androidx.**\n-dontwarn android.support.**\n-dontwarn androidx.**\n# 保留R下面的资源\n-keep class **.R$* {*;}\n## Android architecture components: Lifecycle\n# LifecycleObserver's empty constructor is considered to be unused by proguard\n-keepclassmembers class * implements androidx.lifecycle.LifecycleObserver {\n    <init>(...);\n}\n# ViewModel's empty constructor is considered to be unused by proguard\n-keepclassmembers class * extends androidx.lifecycle.ViewModel {\n    <init>(...);\n}\n# keep methods annotated with @OnLifecycleEvent even if they seem to be unused\n# (Mostly for LiveData.LifecycleBoundObserver.onStateChange(), but who knows)\n-keepclassmembers class * {\n    @androidx.lifecycle.OnLifecycleEvent *;\n}\n\n# ViewBinding\n-keep public class * extends androidx.viewbinding.ViewBinding {*;}\n\n# These classes are duplicated between android.jar and org.apache.http.legacy.jar.\n-dontnote org.apache.http.**\n-dontnote android.net.http.**\n\n# 保持自定义控件类不被混淆  # keepclasseswithmembers:防止拥有改成员的类和类成员被移除或被混淆\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet);\n}\n-keepclasseswithmembers class * {\n    public <init>(android.content.Context, android.util.AttributeSet, int);\n}\n# 保留枚举类不被混淆\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n\n# 保留Parcelable序列化类不被混淆\n#-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}\n## 保留Serializable序列化的类不被混淆\n#-keepnames class * implements java.io.Serializable\n#-keepclassmembers class * implements java.io.Serializable {\n#    static final long serialVersionUID;\n#    private static final java.io.ObjectStreamField[] serialPersistentFields;\n#    !static !transient <fields>;\n#    !private <fields>;\n#    !private <methods>;\n#    private void writeObject(java.io.ObjectOutputStream);\n#    private void readObject(java.io.ObjectInputStream);\n#    java.lang.Object writeReplace();\n#    java.lang.Object readResolve();\n#}\n## 对于带有回调函数的onXXEvent、**On*Listener的，不能被混淆\n#-keepclassmembers class * {\n#    void *(**On*Event);\n#    void *(**On*Listener);\n#}\n\n# Databinding\n-dontwarn android.databinding.**\n-keep class android.databinding.** { *; }\n-keep class androidx.lifecycle.** { *; }\n-keep class kotlinx.coroutines.** { *; }\n-keep class com.wgllss.sample.features_ui.page.** { *; }\n# kotlin 相关\n-dontwarn kotlin.**\n-keep class kotlin.** { *; }\n-keep interface kotlin.** { *; }\n################ 第三方库中的混淆规则start ##############################\n# Glide混淆\n#-keep public class * implements com.bumptech.glide.module.GlideModule\n#-keep class * extends com.bumptech.glide.module.AppGlideModule {\n# <init>(...);\n#}\n#-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {\n#  **[] $VALUES;\n#  public *;\n#}\n#-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {\n#  *** rewind();\n#}\n\n#友盟混淆\n-keep class com.umeng.** {*;}\n-keep class org.repackage.** {*;}\n-keepclassmembers class * {\n   public <init> (org.json.JSONObject);\n}\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n#Jsoup 混淆\n#-dontwarn org.jsoup.**\n#-keep class org.jsoup.**{*;}\n#-keeppackagenames org.jsoup.nodes\n\n# Gson\n#-keep class com.google.gson.** {*;}\n#-keep class com.google.gson.stream.** {*;}\n#-keep class com.google.** {\n#    <fields>;\n#    <methods>;\n#}\n\n\n#\n############### 对于一些基本指令的添加start ##################\n## 代码混淆压缩比，在0~7之间，默认为5，一般不做修改\n#-optimizationpasses 5\n## 混合时不使用大小写混合，混合后的类名为小写\n#-dontusemixedcaseclassnames\n## 指定不去忽略非公共库的类\n#-dontskipnonpubliclibraryclasses\n## 这句话能够使我们的项目混淆后产生映射文件\n## 包含有类名->混淆后类名的映射关系\n#-verbose\n## 指定不去忽略非公共库的类成员\n#-dontskipnonpubliclibraryclassmembers\n## 不做预校验，preverify是proguard的四个步骤之一，Android不需要preverify，去掉这一步能够加快混淆速度。\n#-dontpreverify\n## 忽略警告\n#-ignorewarnings\n## 保留Annotation不混淆\n#-keepattributes *Annotation*,InnerClasses\n## 避免混淆泛型\n#-keepattributes Signature\n## 抛出异常时保留代码行号\n#-keepattributes SourceFile,LineNumberTable\n## 指定混淆是采用的算法，后面的参数是一个过滤器\n## 这个过滤器是谷歌推荐的算法，一般不做更改\n#-optimizations !code/simplification/cast,!field/*,!class/merging/*\n################ 对于一些基本指令的添加end #########################\n#\n#\n################ Android开发中一些需要保留的公共部分start ##################\n## 保留我们使用的四大组件，自定义的Application等等这些类不被混淆,因为这些子类都有可能被外部调用\n#-keep public class * extends android.app.Activity\n#-keep public class * extends android.app.Application\n#-keep public class * extends android.app.Service\n#-keep public class * extends android.content.BroadcastReceiver\n#-keep public class * extends android.content.ContentProvider\n#-keep public class * extends android.app.backup.BackupAgentHelper\n#-keep public class * extends android.preference.Preference\n#-keep public class * extends android.view.View\n## 保留support下的所有类及其内部类\n#-keep class android.support.** {*;}\n## 保留继承的\n#-keep public class * extends android.support.v4.**\n#-keep public class * extends android.support.v7.**\n#-keep public class * extends android.support.annotation.**\n## Androidx的混淆\n#-keep class com.google.android.material.** {*;}\n#-keep class androidx.** {*;}\n#-keep public class * extends androidx.**\n#-keep interface androidx.** {*;}\n#-dontwarn com.google.android.material.**\n#-dontnote com.google.android.material.**\n#-dontwarn androidx.**\n## 保留R下面的资源\n#-keep class **.R$* {*;}\n## 保留本地native方法不被混淆\n#-keepclasseswithmembernames class * { native <methods>;}\n## 保留在Activity中的方法参数是view的方法，\n## 这样以来我们在layout中写的onClick就不会被影响\n#-keepclassmembers class * extends android.app.Activity{ public void *(android.view.View);}\n## 保留枚举类不被混淆\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n## 保留我们自定义控件（继承自View）不被混淆\n#-keep public class * extends android.view.View{\n#    *** get*();\n#    void set*(***);\n#    public <init>(android.content.Context);\n#    public <init>(android.content.Context, android.util.AttributeSet);\n#    public <init>(android.content.Context, android.util.AttributeSet, int);\n#}\n## 保留Parcelable序列化类不被混淆\n#-keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *;}\n## 保留Serializable序列化的类不被混淆\n#-keepnames class * implements java.io.Serializable\n#-keepclassmembers class * implements java.io.Serializable {\n#    static final long serialVersionUID;\n#    private static final java.io.ObjectStreamField[] serialPersistentFields;\n#    !static !transient <fields>;\n#    !private <fields>;\n#    !private <methods>;\n#    private void writeObject(java.io.ObjectOutputStream);\n#    private void readObject(java.io.ObjectInputStream);\n#    java.lang.Object writeReplace();\n#    java.lang.Object readResolve();\n#}\n## 对于带有回调函数的onXXEvent、**On*Listener的，不能被混淆\n#-keepclassmembers class * {\n#    void *(**On*Event);\n#    void *(**On*Listener);\n#}\n#\n## 所有实体类不能混淆 model文件夹下的所有实体类不能混淆\n#\n##-keep class com.btpj.lib_base.data.bean.** {*;}\n##-keep class com.btpj.wanandroid.data.** {*;}\n#\n################ Android开发中一些需要保留的公共部分end ##################\n#\n#\n################ 第三方库中的混淆规则start ##############################\n## Glide混淆\n#-keep public class * implements com.bumptech.glide.module.GlideModule\n#-keep class * extends com.bumptech.glide.module.AppGlideModule {\n# <init>(...);\n#}\n#-keep public enum com.bumptech.glide.load.ImageHeaderParser$** {\n#  **[] $VALUES;\n#  public *;\n#}\n#-keep class com.bumptech.glide.load.data.ParcelFileDescriptorRewinder$InternalRewinder {\n#  *** rewind();\n#}\n#\n##友盟混淆\n#-keep class com.umeng.** {*;}\n#-keep class org.repackage.** {*;}\n#-keepclassmembers class * {\n#   public <init> (org.json.JSONObject);\n#}\n#-keepclassmembers enum * {\n#    public static **[] values();\n#    public static ** valueOf(java.lang.String);\n#}\n##Jsoup 混淆\n#-dontwarn org.jsoup.**\n#-keep class org.jsoup.**{*;}\n#-keeppackagenames org.jsoup.nodes\n\n# Gson\n#-keep class com.google.gson.** {*;}\n#-keep class com.google.gson.stream.** {*;}\n#-keep class com.google.** {\n#    <fields>;\n#    <methods>;\n#}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.dynamic.sample.other2\">\n\n\n</manifest>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/nativex/MainActivity.kt",
    "content": "package com.wgllss.nativex\n\nimport android.content.Context\nimport android.widget.Toast\n\nclass MainActivity {\n\n    external fun stringFromJNI(): String\n\n    external fun callJNI()\n\n    external fun stringFromJNIwithParameter(str: String): String\n\n    external fun callNativeCallJavaMethod()\n\n    external fun callNativeCallJavaField()\n\n    external fun callNativeWithCallBack(callBack: NativeCallBack)\n\n    external fun dynamicRegisterCallBack(callBack: NativeCallBack)\n\n    external fun jniint(): Boolean\n\n    external fun getKey(): String\n\n    fun toast(context: Context) {\n        Toast.makeText(context, stringFromJNI(), Toast.LENGTH_LONG).show()\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/nativex/NativeCallBack.kt",
    "content": "package com.wgllss.nativex\n\ninterface NativeCallBack {\n    fun nmd(str: String)\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/base/BasePluginActivity.kt",
    "content": "package com.wgllss.sample.features_ui.page.base\n\nimport android.content.res.Configuration\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport androidx.activity.ComponentActivity\nimport androidx.fragment.app.FragmentActivity\nimport androidx.lifecycle.SavedStateViewModelFactory\nimport androidx.lifecycle.ViewModelProvider\nimport androidx.lifecycle.ViewModelStore\nimport com.wgllss.core.activity.BaseActivity\nimport com.wgllss.core.activity.BaseViewModePluginActivity\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.dynamic.sample.other2.BuildConfig\nimport com.wgllss.dynamic.runtime.library.WXHostActivityDelegate\nimport com.wgllss.dynamic.plugin.manager.PluginResource\n\nopen class BasePluginActivity<VM : BaseViewModel>(layoutName: String) :\n    BaseViewModePluginActivity<VM>(layoutName, BuildConfig.LIBRARY_PACKAGE_NAME),\n    WXHostActivityDelegate {\n\n    private var isPlugin = false\n    protected lateinit var activity: FragmentActivity\n    private lateinit var resourcesP: Resources\n    private lateinit var mDefaultFactory: ViewModelProvider.Factory\n\n    override fun getSkinResources() = PluginResource.getSkinResources()\n\n    override fun getPluginResources() = PluginResource.getPluginResources(\"classes_other2_res\")!!\n\n\n    override fun attachContext(context: FragmentActivity, resources: Resources) {\n        isPlugin = true\n        activity = context\n        resourcesP = resources\n        attachBaseContext(context)\n    }\n\n    override fun attachContext(context: ComponentActivity?, resources: Resources?) {\n\n    }\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        ResourceUtils.setContentLayout(activity, resourcesPlugin, layoutName, packageNamePlugin)\n    }\n\n    override fun bindEvent() {\n        viewModel?.run {\n            showUIDialog.observe(activity) {\n                activity.takeIf { it is BaseActivity }?.run {\n                    if (it.isShow) {\n                        (activity as BaseActivity).showloading(it.msg)\n                    } else {\n                        (activity as BaseActivity).hideLoading()\n                    }\n                }\n            }\n            errorMsgLiveData.observe(activity) {\n                onToast(it)\n            }\n        }\n    }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        if (!isPlugin) {\n            super.onCreate(savedInstanceState)\n        }\n        initX(savedInstanceState)\n    }\n\n    override fun onResume() {\n        if (!isPlugin) {\n            super.onResume()\n        }\n    }\n\n    override fun onRestart() {\n        if (!isPlugin) {\n            super.onRestart()\n        }\n        onChangeSkin(getSkinResources())\n    }\n\n    override fun onStart() {\n        if (!isPlugin) {\n            super.onStart()\n        }\n        onChangeSkin(getSkinResources())\n    }\n\n    override fun onPause() {\n        if (!isPlugin) {\n            super.onPause()\n        }\n    }\n\n    override fun onStop() {\n        if (!isPlugin) {\n            super.onStop()\n        }\n    }\n\n    override fun onDestroy() {\n        if (!isPlugin) {\n            super.onDestroy()\n        }\n    }\n\n    override fun onSaveInstanceState(outState: Bundle) {\n        if (!isPlugin) {\n            super.onSaveInstanceState(outState)\n        }\n    }\n\n    override fun onConfigurationChanged(newConfig: Configuration) {\n        if (!isPlugin) {\n            super.onConfigurationChanged(newConfig)\n        }\n    }\n\n    override fun getResources() = activity.resources\n\n    override fun <T : View> findViewById(id: Int): T {\n        return activity.findViewById(id)\n    }\n\n    override fun getIntent() = activity.intent\n\n    override fun getWindow() = activity.window\n\n    override fun setRequestedOrientation(requestedOrientation: Int) {\n        activity.requestedOrientation = requestedOrientation\n    }\n\n    override val viewModelStore: ViewModelStore\n        get() = activity.viewModelStore\n\n    override val defaultViewModelProviderFactory: ViewModelProvider.Factory\n        get() {\n            if (!this::mDefaultFactory.isInitialized) {\n                mDefaultFactory = SavedStateViewModelFactory(\n                    activity.application, activity, if (activity.intent != null) activity.intent.extras else null\n                )\n            }\n            return mDefaultFactory\n        }\n\n    override fun lazyInitValue() {\n        if (!isPlugin) {\n            super.lazyInitValue()\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/base/BasePluginComposeActivity.kt",
    "content": "package com.wgllss.sample.features_ui.page.base\n\nimport android.content.res.Configuration\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport androidx.activity.ComponentActivity\nimport androidx.fragment.app.FragmentActivity\nimport androidx.lifecycle.Lifecycle\nimport androidx.lifecycle.SavedStateViewModelFactory\nimport androidx.lifecycle.ViewModelProvider\nimport androidx.lifecycle.ViewModelStore\nimport com.wgllss.core.activity.compose.BaseComposeActivity\nimport com.wgllss.dynamic.plugin.manager.PluginResource\nimport com.wgllss.dynamic.runtime.library.WXHostActivityDelegate\n\nopen class BasePluginComposeActivity : BaseComposeActivity(), WXHostActivityDelegate {\n\n    private var isPlugin = false\n    protected lateinit var activity: ComponentActivity\n    private lateinit var resourcesP: Resources\n    private lateinit var mDefaultFactory: ViewModelProvider.Factory\n\n    fun getSkinResources() = PluginResource.getSkinResources()\n\n//    fun getPluginResources() = PluginResource.getPluginResources(\"classes_other2_res\")!!\n\n    override fun attachContext(context: FragmentActivity, resources: Resources) {\n        isPlugin = true\n        activity = context\n        resourcesP = resources\n        attachBaseContext(context)\n    }\n\n    override fun attachContext(context: ComponentActivity, resources: Resources) {\n        isPlugin = true\n        activity = context\n        resourcesP = resources\n        attachBaseContext(context)\n    }\n\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        if (!isPlugin) {\n            super.onCreate(savedInstanceState)\n        }\n    }\n\n    override fun onResume() {\n        if (!isPlugin) {\n            super.onResume()\n        }\n    }\n\n    override fun onRestart() {\n        if (!isPlugin) {\n            super.onRestart()\n        }\n    }\n\n    override fun onStart() {\n        if (!isPlugin) {\n            super.onStart()\n        }\n    }\n\n    override fun onPause() {\n        if (!isPlugin) {\n            super.onPause()\n        }\n    }\n\n    override fun onStop() {\n        if (!isPlugin) {\n            super.onStop()\n        }\n    }\n\n    override fun onDestroy() {\n        if (!isPlugin) {\n            super.onDestroy()\n        }\n    }\n\n    override fun onSaveInstanceState(outState: Bundle) {\n        if (!isPlugin) {\n            super.onSaveInstanceState(outState)\n        }\n    }\n\n    override fun onConfigurationChanged(newConfig: Configuration) {\n        if (!isPlugin) {\n            super.onConfigurationChanged(newConfig)\n        }\n    }\n\n    override fun getResources() = activity.resources\n\n    override fun <T : View> findViewById(id: Int): T {\n        return activity.findViewById(id)\n    }\n\n    override fun getIntent() = activity.intent\n\n    override fun getWindow() = activity.window\n\n    override fun setRequestedOrientation(requestedOrientation: Int) {\n        activity.requestedOrientation = requestedOrientation\n    }\n\n    override val viewModelStore: ViewModelStore\n        get() = activity.viewModelStore\n\n    override val defaultViewModelProviderFactory: ViewModelProvider.Factory\n        get() {\n            if (!this::mDefaultFactory.isInitialized) {\n                mDefaultFactory = SavedStateViewModelFactory(\n                    activity.application, activity, if (activity.intent != null) activity.intent.extras else null\n                )\n            }\n            return mDefaultFactory\n        }\n\n    override fun lazyInitValue() {\n        if (!isPlugin) {\n\n        }\n\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/base/BasePluginFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.base\n\nimport com.wgllss.core.fragment.BaseViewModelPluginFragment\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.dynamic.sample.other2.BuildConfig\nimport com.wgllss.dynamic.plugin.manager.PluginResource\n\nopen class BasePluginFragment<VM : BaseViewModel>(layoutName: String) : BaseViewModelPluginFragment<VM>(layoutName,  BuildConfig.LIBRARY_PACKAGE_NAME) {\n\n    override fun getSkinResources() = PluginResource.getSkinResources()\n\n    override fun getPluginResources() = PluginResource.getPluginResources(\"classes_other2_res\")!!\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/base/SkinContains.kt",
    "content": "package com.wgllss.sample.features_ui.page.base\n\nobject SkinContains {\n    const val packageName: String = \"com.wgllss.sample.skin\"\n    const val packageNameHost: String = \"com.wgllss.dynamic.host.sample\"\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/activity/AudioActivity.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.activity\n\nimport android.os.Bundle\nimport com.wgllss.core.ex.setFramgment\nimport com.wgllss.sample.features_ui.page.base.BasePluginActivity\nimport com.wgllss.sample.features_ui.page.other2.fragment.SampleMusicFragment\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.PlayModel\n\nclass AudioActivity : BasePluginActivity<PlayModel>(\"activity_play\") {\n    private val playFragmentL by lazy { SampleMusicFragment() }\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        super.initControl(savedInstanceState)\n        activity.setFramgment(playFragmentL, getPluginID(\"content\"))\n        window.setBackgroundDrawable(null)\n    }\n\n    override fun lazyInitValue() {\n        viewModel.run {\n            start()\n            rootMediaId.observe(activity) {\n                it.takeIf {\n                    it.isNotEmpty()\n                }?.let {\n                    subscribeByMediaID(it)\n                    playMp3()\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/activity/ComposeDemoActivity.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.activity\n\nimport android.annotation.SuppressLint\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.widget.Toast\nimport androidx.activity.ComponentActivity\nimport androidx.activity.compose.setContent\nimport androidx.activity.viewModels\nimport androidx.compose.foundation.Image\nimport androidx.compose.foundation.background\nimport androidx.compose.foundation.border\nimport androidx.compose.foundation.clickable\nimport androidx.compose.foundation.layout.Arrangement\nimport androidx.compose.foundation.layout.Box\nimport androidx.compose.foundation.layout.Column\nimport androidx.compose.foundation.layout.ExperimentalLayoutApi\nimport androidx.compose.foundation.layout.FlowColumn\nimport androidx.compose.foundation.layout.PaddingValues\nimport androidx.compose.foundation.layout.Row\nimport androidx.compose.foundation.layout.fillMaxHeight\nimport androidx.compose.foundation.layout.fillMaxWidth\nimport androidx.compose.foundation.layout.height\nimport androidx.compose.foundation.layout.offset\nimport androidx.compose.foundation.layout.padding\nimport androidx.compose.foundation.layout.wrapContentHeight\nimport androidx.compose.foundation.layout.wrapContentWidth\nimport androidx.compose.foundation.rememberScrollState\nimport androidx.compose.foundation.shape.RoundedCornerShape\nimport androidx.compose.foundation.verticalScroll\nimport androidx.compose.material.icons.Icons\nimport androidx.compose.material.icons.filled.Add\nimport androidx.compose.material3.BottomAppBar\nimport androidx.compose.material3.Button\nimport androidx.compose.material3.ExperimentalMaterial3Api\nimport androidx.compose.material3.FloatingActionButton\nimport androidx.compose.material3.Icon\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.Scaffold\nimport androidx.compose.material3.Text\nimport androidx.compose.material3.TopAppBar\nimport androidx.compose.material3.TopAppBarDefaults.mediumTopAppBarColors\nimport androidx.compose.runtime.Composable\nimport androidx.compose.runtime.getValue\nimport androidx.compose.runtime.livedata.observeAsState\nimport androidx.compose.runtime.mutableStateOf\nimport androidx.compose.runtime.remember\nimport androidx.compose.runtime.setValue\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.graphics.Color\nimport androidx.compose.ui.graphics.SolidColor\nimport androidx.compose.ui.graphics.asImageBitmap\nimport androidx.compose.ui.platform.LocalContext\nimport androidx.compose.ui.text.TextStyle\nimport androidx.compose.ui.text.style.TextAlign\nimport androidx.compose.ui.tooling.preview.Preview\nimport androidx.compose.ui.unit.dp\nimport androidx.compose.ui.unit.sp\nimport androidx.constraintlayout.compose.ConstraintLayout\nimport androidx.lifecycle.lifecycleScope\nimport com.wgllss.sample.features_ui.page.base.BasePluginComposeActivity\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.ComposeDemoViewModel\nimport com.wx.compose1.ui.ui.theme.WXComposeXXXTheme\nimport kotlinx.coroutines.launch\n\nclass ComposeDemoActivity : BasePluginComposeActivity() {\n\n    private lateinit var viewModel: ComposeDemoViewModel\n\n    override fun attachContext(context: ComponentActivity, resources: Resources) {\n        super.attachContext(context, resources)\n        viewModel = context.viewModels<ComposeDemoViewModel>().value\n    }\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        activity.lifecycleScope.launch {\n            activity.setContent {\n                WXComposeXXXTheme {\n                    baseUIXXXX({ paddingvalues ->\n                        layoutExamplexxx(paddingvalues, viewModel)\n                    }, onClick = {\n                        Toast.makeText(activity, \"我是插件里面的\", Toast.LENGTH_SHORT).show()\n                        finish()\n                    })\n                }\n            }\n        }\n        viewModel.loadBitmap(resources)\n    }\n}\n\n\n@OptIn(ExperimentalMaterial3Api::class)\n@Composable\nfun baseUIXXXX(content: @Composable (PaddingValues) -> Unit, onClick: () -> Unit) {\n    val context = LocalContext.current\n    Scaffold(topBar = {\n        TopAppBar(modifier = Modifier\n            .fillMaxWidth()\n            .background(Color.Blue)\n            .height(81.dp), colors = mediumTopAppBarColors(\n            containerColor = Color.Blue,\n            titleContentColor = MaterialTheme.colorScheme.primary,\n        ), title = {\n            Row(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .fillMaxHeight(), verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.Center\n            ) {\n                Text(text = \"compose 插件化写法\", fontSize = 18.sp, color = Color.Red, style = TextStyle.Default)\n            }\n        })\n    }, bottomBar = {\n        BottomAppBar(\n            modifier = Modifier\n                .fillMaxWidth()\n                .height(50.dp),\n            containerColor = MaterialTheme.colorScheme.primaryContainer,\n            contentColor = MaterialTheme.colorScheme.primary,\n        ) {\n            Text(\n                text = \"compose 底部栏\", fontSize = 18.sp, color = Color.Red, style = TextStyle.Default, textAlign = TextAlign.Center, modifier = Modifier.fillMaxWidth()\n            )\n        }\n    }, floatingActionButton = {\n        FloatingActionButton(onClick = onClick) {\n            Icon(\n                Icons.Default.Add, contentDescription = \"Add\", tint = Color.Red\n            )\n        }\n    }) { innerPadding ->\n        content(innerPadding)\n    }\n}\n\n\n@SuppressLint(\"RememberReturnType\")\n@OptIn(ExperimentalLayoutApi::class)\n@Composable\nfun layoutExamplexxx(innerPadding: PaddingValues, viewModel: ComposeDemoViewModel) {\n    var offset by remember { mutableStateOf(0) }\n    val bitmap = viewModel.bitmap.observeAsState()\n//    val imageBitmap = remember { bitmap.value?.asImageBitmap() }\n\n    val context = LocalContext.current\n\n    Column(\n        modifier = Modifier\n            .padding(innerPadding)\n            .background(Color.Yellow)\n            .verticalScroll(rememberScrollState())\n            .padding(5.dp)\n            .fillMaxWidth()\n            .fillMaxHeight(),\n//            verticalArrangement = Arrangement.spacedBy(16.dp),\n    ) {\n        Text(\n            modifier = Modifier\n                .padding(8.dp)\n                .offset(offset.dp, offset.dp)\n                .border(2.dp, SolidColor(Color.Green), RoundedCornerShape(20.dp))\n                .background(Color.Cyan)\n                .padding(5.dp),\n            text = \"compose 内容1:我是插件里面的\".trimIndent(),\n        )\n        Box(\n            modifier = Modifier\n                .fillMaxWidth()\n                .height(116.dp)\n                .background(Color.LightGray)\n                .padding(8.dp)\n        ) {\n            Text(\n                text = \"compose 内容2:我是插件里面的 A\", modifier = Modifier\n                    .fillMaxWidth()\n                    .height(50.dp)\n//                        .padding(8.dp, 0.dp, 0.dp, 0.dp)\n                    .background(Color.Red)\n                    .align(Alignment.TopStart), textAlign = TextAlign.Center, style = TextStyle(fontSize = 18.sp), color = Color.White\n            )\n            Text(\n                modifier = Modifier\n                    .padding(8.dp, 58.dp, 0.dp, 0.dp)\n                    .fillMaxWidth()\n                    .height(50.dp)\n//                        .size(1000.dp, 50.dp)\n                    .background(Color.Green), textAlign = TextAlign.Center, style = TextStyle(fontSize = 18.sp), color = Color.Yellow, text = \"compose 内容3:文字控件 B\"\n\n            )\n        }\n        ConstraintLayout(\n            modifier = Modifier\n                .fillMaxWidth()\n                .wrapContentHeight()\n                .padding(5.dp)\n                .background(Color.Magenta)\n                .padding(5.dp)\n        ) {\n            val (buttonID, textID) = createRefs()\n            Button(onClick = {\n                Toast.makeText(context, \"我是插件里面的？\", Toast.LENGTH_LONG).show()\n            }, modifier = Modifier.constrainAs(buttonID) {\n                top.linkTo(parent.top, margin = 16.dp)\n            }) {\n                Text(\"compose 内容4 button 控件\")\n            }\n            // Assign reference \"text\" to the Text composable\n            // and constrain it to the bottom of the Button composable\n            Text(\"compose 内容5 text 我是插件里面的 控件\",\n                Modifier\n                    .wrapContentHeight()\n                    .wrapContentWidth()\n                    .background(Color.Red)\n                    .constrainAs(textID) {\n                        top.linkTo(buttonID.bottom, margin = 16.dp)\n                    })\n        }\n\n        FlowColumn(\n            modifier = Modifier\n                .fillMaxWidth()\n                .fillMaxHeight()\n                .padding(5.dp)\n                .background(Color.White)\n                .padding(5.dp)\n        ) {\n\n            //图片 需要从插件包 apk 里面拿到 resource ，从resource 里面取出drawable，然后转化为 bitmap 再 转化为 imageBitmap 然后显示\n\n//            val imageBitmap: ImageBitmap =\n            bitmap.value?.let {\n                Image(bitmap = it.asImageBitmap(), contentDescription = \"小姐姐\", modifier = Modifier\n                    .wrapContentHeight()\n                    .wrapContentWidth()\n                    .padding(5.dp)\n                    .weight(1.0f)\n                    .clickable {\n                        Toast\n                            .makeText(context, \"Image 点击事件\", Toast.LENGTH_SHORT)\n                            .show()\n                    })\n            }\n\n\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:我是插件里面的\", textAlign = TextAlign.Center, color = Color.Black\n            )\n\n\n        }\n    }\n\n\n}\n\n\n@Preview  //注释掉预览\n@Composable\nfun GreetingPreview() {\n    WXComposeXXXTheme {\n        layoutExample()\n    }\n}\n\n@OptIn(ExperimentalLayoutApi::class)\n@Composable\nfun layoutExample(innerPadding: PaddingValues = PaddingValues(0.dp)) {\n    var offset by remember { mutableStateOf(0) }\n\n    val context = LocalContext.current\n    Column(\n        modifier = Modifier\n            .padding(innerPadding)\n            .background(Color.Yellow)\n            .verticalScroll(rememberScrollState())\n            .padding(5.dp)\n            .fillMaxWidth()\n            .fillMaxHeight(),\n//            verticalArrangement = Arrangement.spacedBy(16.dp),\n    ) {\n        Text(\n            modifier = Modifier\n                .padding(8.dp)\n                .offset(offset.dp, offset.dp)\n                .border(2.dp, SolidColor(Color.Green), RoundedCornerShape(20.dp))\n                .background(Color.Cyan)\n                .padding(5.dp),\n            text = \"compose 内容1:文字控件\".trimIndent(),\n        )\n        Box(\n            modifier = Modifier\n                .fillMaxWidth()\n                .height(116.dp)\n                .background(Color.LightGray)\n                .padding(8.dp)\n        ) {\n            Text(\n                text = \"compose 内容2:文字控件 A\", modifier = Modifier\n                    .fillMaxWidth()\n                    .height(50.dp)\n//                        .padding(8.dp, 0.dp, 0.dp, 0.dp)\n                    .background(Color.Red)\n                    .align(Alignment.TopStart), textAlign = TextAlign.Center, style = TextStyle(fontSize = 18.sp), color = Color.White\n            )\n            Text(\n                modifier = Modifier\n                    .padding(8.dp, 58.dp, 0.dp, 0.dp)\n                    .fillMaxWidth()\n                    .height(50.dp)\n//                        .size(1000.dp, 50.dp)\n                    .background(Color.Green), textAlign = TextAlign.Center, style = TextStyle(fontSize = 18.sp), color = Color.Yellow, text = \"compose 内容3:文字控件 B\"\n\n            )\n        }\n        ConstraintLayout(\n            modifier = Modifier\n                .fillMaxWidth()\n                .wrapContentHeight()\n                .padding(5.dp)\n                .background(Color.Magenta)\n                .padding(5.dp)\n        ) {\n            val (buttonID, textID) = createRefs()\n            Button(onClick = {\n                Toast.makeText(context, \"点击我干嘛？\", Toast.LENGTH_LONG).show()\n            }, modifier = Modifier.constrainAs(buttonID) {\n                top.linkTo(parent.top, margin = 16.dp)\n            }) {\n                Text(\"compose 内容4 button 控件\")\n            }\n            // Assign reference \"text\" to the Text composable\n            // and constrain it to the bottom of the Button composable\n            Text(\"compose 内容5 text 控件\",\n                Modifier\n                    .wrapContentHeight()\n                    .wrapContentWidth()\n                    .background(Color.Red)\n                    .constrainAs(textID) {\n                        top.linkTo(buttonID.bottom, margin = 16.dp)\n                    })\n        }\n\n\n        FlowColumn(\n            modifier = Modifier\n                .fillMaxWidth()\n                .fillMaxHeight()\n                .padding(5.dp)\n                .background(Color.White)\n                .padding(5.dp)\n        ) {\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n            Text(\n                modifier = Modifier\n                    .fillMaxWidth()\n                    .height(30.dp)\n                    .align(Alignment.CenterHorizontally)\n                    .background(Color.LightGray), text = \"compose 内容列表:文字控件\", textAlign = TextAlign.Center, color = Color.Black\n            )\n\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/activity/Other2Activity.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.activity\n\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.ImageView\nimport android.widget.TextView\nimport com.wgllss.core.ex.finishActivity\nimport com.wgllss.core.ex.setFramgment\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.sample.features_ui.page.base.BasePluginActivity\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.fragment.*\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.Other2ViewModel\n\nclass Other2Activity : BasePluginActivity<Other2ViewModel>(\"activity_other2\") {\n    private lateinit var txt_activity_title: TextView\n    private lateinit var view_title_bar: View\n    private lateinit var layout_content: View\n    private lateinit var img_back: ImageView\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        super.initControl(savedInstanceState)\n        txt_activity_title = findViewById(getPluginID(\"txt_activity_title\"))\n        view_title_bar = findViewById(getPluginID(\"view_title_bar\"))\n        img_back = findViewById(getPluginID(\"img_back\"))\n        layout_content = findViewById(getPluginID(\"layout_content\"))\n        window.setBackgroundDrawable(null)\n    }\n\n    override fun bindEvent() {\n        super.bindEvent()\n        img_back.setOnClickListener {\n            activity.finishActivity()\n        }\n    }\n\n    override fun initValue() {\n        val actionType = intent?.getIntExtra(\"action_type\", 0)\n        val titestr = intent?.getStringExtra(\"itemName\")\n        txt_activity_title.text = \"示例(${titestr})\"\n        val fragment = when (actionType) {\n            0 -> SampleActivityFragment()\n            1 -> SampleServiceFragment()\n            2 -> SampleBroadCastFragment()\n            3 -> SampleContentProviderFragment()\n            4 -> SampleNotificationFragment()\n            6 -> SampleSoFragment()\n            7 -> SampleDialogFragment()\n            else -> {\n                null\n            }\n        }\n        fragment?.run {\n            this@Other2Activity.activity?.setFramgment(this, getPluginID(\"layout_content\"))\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.run {\n            setImageDrawable(skinRes, \"ic_baseline_arrow_back_24\", SkinContains.packageName, img_back)\n            setBackgroundColor(skinRes, \"colorBackground\", SkinContains.packageName, layout_content)\n            setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, view_title_bar)\n            setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, txt_activity_title)\n\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/activity/Other3Activity.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.activity\n\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.ImageView\nimport android.widget.TextView\nimport com.wgllss.core.ex.finishActivity\nimport com.wgllss.core.ex.setFramgment\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.sample.features_ui.page.base.BasePluginActivity\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.fragment.SampleActivityFragment\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.Other2ViewModel\n\nclass Other3Activity : BasePluginActivity<Other2ViewModel>(\"activity_other3\") {\n    private lateinit var txt_activity_title: TextView\n    private lateinit var txt3: TextView\n    private lateinit var view_title_bar: View\n    private lateinit var layout_content: View\n    private lateinit var img_back: ImageView\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        super.initControl(savedInstanceState)\n        txt_activity_title = findViewById(getPluginID(\"txt_activity_title\"))\n        txt3 = findViewById(getPluginID(\"txt3\"))\n        view_title_bar = findViewById(getPluginID(\"view_title_bar\"))\n        img_back = findViewById(getPluginID(\"img_back\"))\n        layout_content = findViewById(getPluginID(\"layout_content\"))\n        window.setBackgroundDrawable(null)\n    }\n\n    override fun bindEvent() {\n        super.bindEvent()\n        img_back.setOnClickListener {\n            activity.finishActivity()\n        }\n    }\n\n    override fun initValue() {\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.run {\n            setImageDrawable(skinRes, \"ic_baseline_arrow_back_24\", SkinContains.packageName, img_back)\n            setBackgroundColor(skinRes, \"colorBackground\", SkinContains.packageName, layout_content)\n            setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, view_title_bar)\n            setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, txt_activity_title)\n            setTextColor(skinRes, \"colorPrimary\", SkinContains.packageName, txt3)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/activity/VideoActivity.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.activity\n\nimport android.content.pm.ActivityInfo\nimport android.content.res.Configuration\nimport android.content.res.Resources\nimport android.net.Uri\nimport android.os.Build\nimport android.os.Bundle\nimport android.view.View\nimport android.view.WindowManager\nimport android.widget.FrameLayout\nimport android.widget.ImageView\nimport android.widget.TextView\nimport com.google.android.exoplayer2.DefaultLoadControl\nimport com.google.android.exoplayer2.DefaultRenderersFactory\nimport com.google.android.exoplayer2.ExoPlayer\nimport com.google.android.exoplayer2.MediaItem\nimport com.google.android.exoplayer2.audio.AudioAttributes\nimport com.google.android.exoplayer2.source.DefaultMediaSourceFactory\nimport com.google.android.exoplayer2.source.MediaSource\nimport com.google.android.exoplayer2.source.ProgressiveMediaSource\nimport com.google.android.exoplayer2.ui.StyledPlayerView\nimport com.google.android.exoplayer2.upstream.DefaultDataSourceFactory\nimport com.wgllss.core.ex.finishActivity\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.sample.features_ui.page.base.BasePluginActivity\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.Other2ViewModel\n\nclass VideoActivity : BasePluginActivity<Other2ViewModel>(\"activity_video\") {\n    private var player: ExoPlayer? = null\n\n    private lateinit var playerView: StyledPlayerView\n    private lateinit var layout_content: FrameLayout\n    private lateinit var img_back: ImageView\n    private lateinit var layout_title: FrameLayout\n    private lateinit var title: TextView\n\n    private var startItemIndex: Int = 0\n    private var startPosition: Long = 0\n\n    private var url = \"https://stream7.iqilu.com/10339/upload_transcode/202002/18/20200218093206z8V1JuPlpe.mp4\"\n\n    companion object {\n        private const val KEY_ITEM_INDEX = \"item_index\"\n        private const val KEY_POSITION = \"position\"\n    }\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        super.initControl(savedInstanceState)\n        layout_content = findViewById(getPluginID(\"layout_content\"))\n        playerView = StyledPlayerView(activity).apply {\n            layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)\n        }\n        layout_content.addView(playerView)\n\n        layout_title = findViewById(getPluginID(\"layout_title\"))\n        img_back = findViewById(getPluginID(\"img_back\"))\n        title = findViewById(getPluginID(\"title\"))\n        window.setBackgroundDrawable(null)\n        if (savedInstanceState != null) {\n            startItemIndex = savedInstanceState.getInt(KEY_ITEM_INDEX)\n            startPosition = savedInstanceState.getLong(KEY_POSITION)\n        }\n    }\n\n    override fun bindEvent() {\n        super.bindEvent()\n        playerView.setFullscreenButtonClickListener {\n            requestedOrientation = if (it) {\n                window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)\n                ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE\n            } else {\n                window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)\n                ActivityInfo.SCREEN_ORIENTATION_PORTRAIT\n            }\n        }\n        playerView.setControllerVisibilityListener(StyledPlayerView.ControllerVisibilityListener {\n            if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {\n                layout_title.layoutParams.height = activity.getIntToDip(45f).toInt()\n            }\n            if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) {\n                layout_title.layoutParams.height = activity.getIntToDip(81f).toInt()\n            }\n            layout_title.visibility = it\n        })\n        img_back.setOnClickListener {\n            activity.finishActivity()\n        }\n    }\n\n    override fun initValue() {\n        title.text = \"示例视频 在线视频\"\n        playerView.setShowFastForwardButton(false)\n        playerView.setShowNextButton(false)\n        playerView.setShowPreviousButton(false)\n        playerView.setShowRewindButton(false)\n        layout_title.bringToFront()\n    }\n\n    private fun buildMediaSource(uri: Uri): MediaSource {\n        val dataSourceFactory = DefaultDataSourceFactory(activity)\n        return ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(uri))\n    }\n\n\n    private fun initializePlayer(): Boolean {\n        if (player == null) {\n            val playerBuilder = ExoPlayer.Builder(activity)\n                .setMediaSourceFactory(DefaultMediaSourceFactory(activity))\n                .setRenderersFactory(DefaultRenderersFactory(activity))\n                .setLoadControl(DefaultLoadControl())\n            player = playerBuilder.build()\n            player?.setAudioAttributes(AudioAttributes.DEFAULT, true)\n            player?.playWhenReady = true\n            playerView.player = player\n        }\n        val playUri: Uri = Uri.parse(url)\n        val mediaSource: MediaSource = buildMediaSource(playUri)\n        player?.prepare(mediaSource, true, false)\n        player?.seekTo(startPosition)\n        return true\n    }\n\n    override fun onStart() {\n        super.onStart()\n        if (Build.VERSION.SDK_INT > 23) {\n            initializePlayer()\n            if (playerView != null) {\n                playerView.onResume()\n            }\n        }\n    }\n\n    override fun onResume() {\n        super.onResume()\n        if (Build.VERSION.SDK_INT <= 23 || player == null) {\n            initializePlayer()\n            if (playerView != null) {\n                playerView.onResume()\n            }\n        }\n    }\n\n    override fun onPause() {\n        super.onPause()\n        if (Build.VERSION.SDK_INT <= 23) {\n            if (playerView != null) {\n                playerView.onPause()\n            }\n            releasePlayer()\n        }\n    }\n\n    override fun onStop() {\n        super.onStop()\n        if (Build.VERSION.SDK_INT > 23) {\n            if (playerView != null) {\n                playerView.onPause()\n            }\n            releasePlayer()\n        }\n    }\n\n    private fun releasePlayer() {\n        if (player != null) {\n            updateStartPosition()\n            player?.release()\n            player = null\n            playerView.player = null\n        }\n        playerView.adViewGroup.removeAllViews()\n    }\n\n    private fun updateStartPosition() {\n        if (player != null) {\n            startItemIndex = player!!.currentMediaItemIndex\n            startPosition = Math.max(0, player!!.contentPosition)\n        }\n    }\n\n    override fun onSaveInstanceState(outState: Bundle) {\n        super.onSaveInstanceState(outState)\n        updateStartPosition()\n        outState.putInt(KEY_ITEM_INDEX, startItemIndex)\n        outState.putLong(KEY_POSITION, startPosition)\n    }\n\n    override fun onConfigurationChanged(newConfig: Configuration) {\n        super.onConfigurationChanged(newConfig)\n        if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {\n            if (layout_title.visibility == View.VISIBLE)\n                layout_title.layoutParams.height = activity.getIntToDip(45f).toInt()\n        }\n        if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) {\n            if (layout_title.visibility == View.VISIBLE)\n                layout_title.layoutParams.height = activity.getIntToDip(81f).toInt()\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.run {\n            setImageDrawable(skinRes, \"ic_baseline_arrow_back_24\", SkinContains.packageName, img_back)\n            setBackgroundColor(skinRes, \"black\", SkinContains.packageName, layout_content)\n            setTextColor(skinRes, \"white\", SkinContains.packageName, title)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/activity/WebViewActivity.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.activity\n\nimport android.content.res.Resources\nimport android.os.Build\nimport android.os.Bundle\nimport android.view.View\nimport android.webkit.WebSettings\nimport android.webkit.WebView\nimport android.widget.ImageView\nimport android.widget.TextView\nimport com.wgllss.core.ex.finishActivity\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.sample.features_ui.page.base.BasePluginActivity\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.WebViewModel\nimport com.wgllss.sample.features_ui.page.other2.web.ImplWebViewClient\nclass WebViewActivity : BasePluginActivity<WebViewModel>(\"activity_webview\") {\n    private lateinit var txt_activity_title: TextView\n    private lateinit var view_title_bar: View\n    private lateinit var webview: WebView\n    private lateinit var img_back: ImageView\n\n    override fun initControl(savedInstanceState: Bundle?) {\n        super.initControl(savedInstanceState)\n        txt_activity_title = findViewById(getPluginID(\"txt_activity_title\"))\n        view_title_bar = findViewById(getPluginID(\"view_title_bar\"))\n        img_back = findViewById(getPluginID(\"img_back\"))\n        webview = findViewById(getPluginID(\"webview\"))\n        window.setBackgroundDrawable(null)\n    }\n\n    override fun bindEvent() {\n        super.bindEvent()\n        img_back.setOnClickListener {\n            activity.finishActivity()\n        }\n        viewModel.livedataHtml.observe(activity) {\n            android.util.Log.e(\"WebViewActivity \", \"html:${it}\")\n            webview.loadUrl(it)\n//            webview.loadData(it, \"text/html\", \"UTF-8\")\n        }\n    }\n\n    override fun initValue() {\n        webview.apply {\n            settings.apply {\n                defaultTextEncodingName = \"UTF-8\"\n                allowFileAccess = true\n                allowContentAccess = true\n                cacheMode = WebSettings.LOAD_NO_CACHE\n                javaScriptEnabled = true\n                domStorageEnabled = true\n                setTextSize(WebSettings.TextSize.LARGEST)\n                layoutAlgorithm = WebSettings.LayoutAlgorithm.NORMAL\n                javaScriptCanOpenWindowsAutomatically = true\n                setSupportMultipleWindows(true)\n                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {\n                    mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW\n                }\n            }\n            webViewClient = ImplWebViewClient()\n        }\n        val url = intent.getStringExtra(\"web_url_key\") ?: \"\"\n        val docid = intent.getStringExtra(\"docid_key\") ?: \"\"\n        val title = intent.getStringExtra(\"title_key\") ?: \"\"\n\n        txt_activity_title.text = if (title.length > 15) {\n            title.substring(0, 15)\n        } else title\n        viewModel.getNewsDetailInfo(url, docid)\n    }\n\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.run {\n            setImageDrawable(skinRes, \"ic_baseline_arrow_back_24\", SkinContains.packageName, img_back)\n            setBackgroundColor(skinRes, \"colorBackground\", SkinContains.packageName, webview)\n            setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, view_title_bar)\n            setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, txt_activity_title)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/broadcast/TestBroadCast.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.broadcast\n\nimport android.content.BroadcastReceiver\nimport android.content.Context\nimport android.content.Intent\nimport com.wgllss.core.widget.CommonToast\n\nclass TestBroadCast : BroadcastReceiver() {\n\n    override fun onReceive(context: Context, intent: Intent) {\n        intent?.action?.run {\n            when (this) {\n                \"action_key\" -> {\n                    android.util.Log.e(\"TestBroadCast\", \"收到广播\")\n                    CommonToast.show(\"收到广播\")\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/dialog/MyDialog.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.dialog\n\nimport android.app.Dialog\nimport android.content.Context\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.LayoutInflater\nimport com.google.android.material.button.MaterialButton\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.sample.features_ui.page.base.SkinContains\n\nclass MyDialog(\n    context: Context,\n    private val skinRes: Resources,\n    private val resources: Resources,\n    private val layoutName: String,\n    private val packageName: String\n) : Dialog(context, android.R.style.ThemeOverlay_Material_Dialog_Alert) {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n        val layoutID = resources.getIdentifier(layoutName, \"layout\", packageName)\n        val xmlResourceParser = resources.getLayout(layoutID)\n        val containerView = LayoutInflater.from(context).inflate(xmlResourceParser, null)\n        setContentView(containerView)\n\n\n        val id = resources.getIdentifier(\"btn_dialog_0\", \"id\", packageName)\n        val btn = containerView.findViewById<MaterialButton>(id).apply {\n            setOnClickListener {\n                dismiss()\n            }\n        }\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, btn)\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, btn)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/fragment/SampleActivityFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.fragment\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.ImageView\nimport android.widget.TextView\nimport com.wgllss.core.ex.loadUrl\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.SampleActivityViewModel\n\nclass SampleActivityFragment : BasePluginFragment<SampleActivityViewModel>(\"fragment_activity_sample\") {\n    private lateinit var img_url: ImageView;\n    private lateinit var txt_test: TextView\n    private lateinit var btn_jump: TextView\n\n    override fun findView(context: Context, containerView: View) {\n        img_url = findViewByID(\"img_url\")\n        txt_test = findViewByID(\"txt_test\")\n        btn_jump = findViewByID(\"btn_jump\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        btn_jump.setOnClickListener {\n            activity?.run {\n                PluginManager.instance.startStandardActivity(\n                    this, \"classes_other2_res\",\n                    \"com.wgllss.sample.features_ui.page.other2.activity.Other3Activity\",\n                    \"com.wgllss.dynamic.sample.other2\"\n                )\n            }\n        }\n        viewModel.run {\n            str.observe(viewLifecycleOwner) {\n                txt_test.text = it\n            }\n            url.observe(viewLifecycleOwner) {\n                img_url.loadUrl(it)\n            }\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, txt_test)\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, btn_jump)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, btn_jump)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/fragment/SampleBroadCastFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.fragment\n\nimport android.content.*\nimport android.content.res.Resources\nimport android.os.Build\nimport android.os.Bundle\nimport android.os.IBinder\nimport android.util.Log\nimport android.view.View\nimport android.widget.TextView\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.broadcast.TestBroadCast\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.SampleActivityViewModel\n\nclass SampleBroadCastFragment : BasePluginFragment<SampleActivityViewModel>(\"fragment_broadcast_sample\"), View.OnClickListener {\n    private lateinit var btn_send_broadcast: TextView\n    private val testBroadCast by lazy { TestBroadCast() }\n\n    override fun findView(context: Context, containerView: View) {\n        btn_send_broadcast = findViewByID(\"btn_send_broadcast\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        btn_send_broadcast.setOnClickListener(this)\n        val intentFilter = IntentFilter(\"action_key\")\n        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) activity?.registerReceiver(testBroadCast, intentFilter, Context.RECEIVER_EXPORTED)\n        else activity?.registerReceiver(testBroadCast, intentFilter)\n    }\n\n    override fun onClick(v: View) {\n        when (v) {\n            btn_send_broadcast -> {\n                activity?.sendBroadcast(Intent(\"action_key\"))\n            }\n            else -> {\n\n            }\n        }\n    }\n\n    override fun onDestroyView() {\n        super.onDestroyView()\n        activity?.unregisterReceiver(testBroadCast)\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, btn_send_broadcast)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, btn_send_broadcast)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/fragment/SampleContentProviderFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.fragment\n\nimport android.annotation.SuppressLint\nimport android.content.ContentValues\nimport android.content.Context\nimport android.content.res.Resources\nimport android.database.ContentObserver\nimport android.net.Uri\nimport android.os.Bundle\nimport android.os.Handler\nimport android.view.View\nimport android.widget.TextView\nimport android.widget.Toast\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.dynamic.host.lib.provider.ProviderAuthority\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.SampleActivityViewModel\n\nclass SampleContentProviderFragment : BasePluginFragment<SampleActivityViewModel>(\"fragment_provider_sample\"), View.OnClickListener {\n    private lateinit var btn_query: TextView\n    private lateinit var btn_del: TextView\n    private lateinit var btn_update: TextView\n    private lateinit var btn_insert: TextView\n    private lateinit var txt_query_result: TextView\n\n    private val content_authority: String = StringBuilder(\"com.wgllss.dynamic.host.sample\").append(ProviderAuthority.authority).toString()\n\n    private val base_content_uri = Uri.parse(\"content://$content_authority\")\n\n    private val uri = base_content_uri.buildUpon().appendPath(\"com.wgllss.dynamic.provider.TestContentProvider\").build()\n\n    override fun findView(context: Context, containerView: View) {\n        btn_query = findViewByID(\"btn_query\")\n        btn_del = findViewByID(\"btn_del\")\n        btn_update = findViewByID(\"btn_update\")\n        btn_insert = findViewByID(\"btn_insert\")\n        txt_query_result = findViewByID(\"txt_query_result\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        btn_query.setOnClickListener(this)\n        btn_del.setOnClickListener(this)\n        btn_update.setOnClickListener(this)\n        btn_insert.setOnClickListener(this)\n        activity?.run {\n            contentResolver.registerContentObserver(uri, true, object : ContentObserver(Handler()) {\n                override fun onChange(selfChange: Boolean, uri: Uri?) {\n                    super.onChange(selfChange, uri)\n                    Toast.makeText(this@run, uri.toString() + \" onChange\", Toast.LENGTH_SHORT).show()\n                }\n            })\n        }\n    }\n\n\n    @SuppressLint(\"Range\")\n    override fun onClick(v: View) {\n        when (v) {\n            btn_query -> {\n                activity?.run {\n                    val sb = StringBuilder()\n                    //可以 把 selection 当 sql 语句使用\n                    val cursor = contentResolver.query(uri, null, \"select * from collect_tab\", null, null)\n                    val count = cursor?.count ?: 0\n                    if (count > 0) {\n                        while (cursor?.moveToNext() == true) {\n                            val name = cursor.getString(cursor.getColumnIndex(\"title\"))\n                            sb.append(name).append(\"\\n\")\n                        }\n                    }\n                    txt_query_result.text = sb.toString()\n                    cursor?.close()\n                }\n            }\n            btn_del -> {\n                activity?.run {\n                    //测试 一下把 id >0 的全部删除\n                    contentResolver.delete(uri, \"id > ?\", arrayOf(\"0\"))\n                    onClick(btn_query)\n                }\n            }\n            btn_update -> {\n                activity?.run {\n                    //可以 把 selection 当 sql 语句使用\n                    val cursor = contentResolver.query(uri, null, \"select * from collect_tab\", null, null)\n                    val count = cursor?.count ?: 0\n                    if (count > 0 && cursor?.moveToNext() == true) {\n                        //moveToNext 这里测试 只修改一个\n                        val contentValues = ContentValues()\n                        contentValues.put(\"title\", \"AAAAAAAAAAAAAAAA\")\n                        val id = cursor.getLong(cursor.getColumnIndex(\"id\"))\n                        contentResolver.update(uri, contentValues, \"id = ?\", arrayOf(id.toString()))\n                    }\n                    cursor?.close()\n                    onClick(btn_query)\n                }\n            }\n            btn_insert -> {\n                activity?.run {\n                    val contentValues = ContentValues()\n                    contentValues.put(\"id\", 1232L)\n                    contentValues.put(\"title\", \"这是一个添加的title\")\n                    contentValues.put(\"imgUrl\", \"https://img0.baidu.com/it/u=1640392721,3287967405&fm=253&fmt=auto&app=138&f=JPEG\")\n                    contentValues.put(\"createTime\", System.currentTimeMillis())\n                    contentResolver.insert(uri, contentValues)\n                    onClick(btn_query)\n                }\n            }\n            else -> {\n\n            }\n        }\n    }\n\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, btn_query, btn_del, btn_update, btn_insert)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, btn_query, btn_del, btn_update, btn_insert)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/fragment/SampleDialogFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.fragment\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.TextView\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.dynamic.sample.other2.BuildConfig\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.dialog.MyDialog\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.SampleActivityViewModel\n\nclass SampleDialogFragment : BasePluginFragment<SampleActivityViewModel>(\"fragment_dialog_sample\"), View.OnClickListener {\n    private lateinit var btn_dialog: TextView\n\n    override fun findView(context: Context, containerView: View) {\n        btn_dialog = findViewByID(\"btn_dialog\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        btn_dialog.setOnClickListener(this)\n    }\n\n    override fun onClick(v: View) {\n        when (v) {\n            btn_dialog -> {\n                activity?.run {\n                    MyDialog(this, getSkinResources(), getPluginResources(), \"dialog_sample\", BuildConfig.LIBRARY_PACKAGE_NAME).show()\n                }\n            }\n\n            else -> {\n\n            }\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, btn_dialog)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, btn_dialog)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/fragment/SampleMusicFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.fragment\n\nimport android.animation.Animator\nimport android.animation.ValueAnimator\nimport android.content.Context\nimport android.content.res.Resources\nimport android.graphics.Bitmap\nimport android.os.Bundle\nimport android.support.v4.media.MediaMetadataCompat\nimport android.support.v4.media.session.PlaybackStateCompat\nimport android.view.LayoutInflater\nimport android.view.View\nimport android.view.animation.LinearInterpolator\nimport android.widget.ImageView\nimport android.widget.ProgressBar\nimport android.widget.SeekBar\nimport android.widget.TextView\nimport androidx.palette.graphics.Palette\nimport androidx.viewpager.widget.ViewPager\nimport com.bumptech.glide.Glide\nimport com.bumptech.glide.request.target.SimpleTarget\nimport com.bumptech.glide.request.transition.Transition\nimport com.google.android.material.imageview.ShapeableImageView\nimport com.google.android.material.shape.RoundedCornerTreatment\nimport com.google.android.material.shape.ShapeAppearanceModel\nimport com.wgllss.core.adapter.BasePagerAdapter\nimport com.wgllss.core.ex.dpToPx\nimport com.wgllss.core.ex.finishActivity\nimport com.wgllss.core.ex.getIntToDip\nimport com.wgllss.core.ex.loadUrl\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.sample.feature_system.music.exoplayerimpl.ExoPlayerUtils.timestampToMSS\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.PlayModel\nimport com.wgllss.ssmusic.features_system.extensions.albumArtUri\nimport com.wgllss.ssmusic.features_system.extensions.title\n\nclass SampleMusicFragment : BasePluginFragment<PlayModel>(\"fragment_play\") {\n    private lateinit var layout_play_bg: View\n    private lateinit var img_back: ImageView\n    private lateinit var mater_music_name: TextView\n    private lateinit var tv_current_time: TextView\n    private lateinit var tv_total_time: TextView\n    private lateinit var view_pager: ViewPager\n    private lateinit var sb_progress: SeekBar\n    private lateinit var iv_mode: ImageView\n    private lateinit var iv_prev: ImageView\n    private lateinit var iv_next: ImageView\n    private lateinit var iv_play: ImageView\n    private lateinit var pb_load: ProgressBar\n\n    private val views by lazy { mutableListOf<View>() }\n    private var cdAnimator: ValueAnimator? = null\n    private var pointAnimator: ValueAnimator? = null\n    private val lin by lazy { LinearInterpolator() }\n\n    lateinit var iv_center: ShapeableImageView\n    lateinit var img_circle: ImageView\n    lateinit var iv_point: ImageView\n    lateinit var cd_layout: View\n\n    override fun activitySameViewModel() = true\n\n    override fun findView(context: Context, containerView: View) {\n        img_back = findViewByID(\"img_back\")\n        mater_music_name = findViewByID(\"mater_music_name\")\n        tv_current_time = findViewByID(\"tv_current_time\")\n        tv_total_time = findViewByID(\"tv_total_time\")\n        tv_current_time = findViewByID(\"tv_current_time\")\n        sb_progress = findViewByID(\"sb_progress\")\n        iv_prev = findViewByID(\"iv_prev\")\n        iv_play = findViewByID(\"iv_play\")\n        iv_next = findViewByID(\"iv_next\")\n        layout_play_bg = findViewByID(\"layout_play_bg\")\n        view_pager = findViewByID(\"view_pager\")\n        iv_mode = findViewByID(\"iv_mode\")\n        pb_load = findViewByID(\"pb_load\")\n    }\n\n    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {\n        super.onViewCreated(view, savedInstanceState)\n        initViewPage()\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        sb_progress.setOnSeekBarChangeListener(\n            object : SeekBar.OnSeekBarChangeListener {\n                override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {\n                }\n\n                override fun onStartTrackingTouch(seekBar: SeekBar?) {\n                }\n\n                override fun onStopTrackingTouch(seekBar: SeekBar) {\n                    viewModel.seek(seekBar.progress.toLong())\n                }\n            })\n        initPointAnimat()\n        initCDAnimat()\n\n        viewModel.nowPlaying.observe(viewLifecycleOwner) {\n            mater_music_name.text = it!!.title\n            iv_center.loadUrl(it.albumArtUri)\n            Glide.with(this).asBitmap()\n                .load(it.albumArtUri)\n                .into(object : SimpleTarget<Bitmap>() {\n                    override fun onResourceReady(resource: Bitmap, transition: Transition<in Bitmap>?) {\n                        resource?.let { it ->\n                            Palette.from(it).generate { p ->\n                                p?.lightMutedSwatch?.let { s ->\n                                    layout_play_bg.setBackgroundColor(s.rgb)\n                                    mater_music_name.setTextColor(s.titleTextColor)\n                                    tv_total_time.setTextColor(s.bodyTextColor)\n                                    tv_current_time.setTextColor(s.bodyTextColor)\n                                }\n                            }\n                        }\n                    }\n                })\n        }\n\n        viewModel.playbackState.observe(viewLifecycleOwner) {\n            when (it.state) {\n                PlaybackStateCompat.STATE_BUFFERING -> {\n                    pb_load.visibility = View.VISIBLE\n                    iv_play.visibility = View.GONE\n                }\n                PlaybackStateCompat.STATE_PLAYING -> {\n                    pb_load.visibility = View.GONE\n                    iv_play.visibility = View.VISIBLE\n                    if (iv_point.rotation == -40f) {\n                        iv_play.isSelected = true\n                        viewModel.isPlaying = true\n                        startPointAnimat(-40f, 0f)\n                    }\n                    it.extras?.getLong(MediaMetadataCompat.METADATA_KEY_DURATION)?.let { d ->\n                        tv_total_time.text = timestampToMSS(requireContext(), d)\n                        sb_progress.max = d.toInt()\n                    }\n                }\n                PlaybackStateCompat.STATE_PAUSED -> {\n                    if (pb_load.visibility != View.GONE) {\n                        pb_load.visibility = View.GONE\n                    }\n                    if (iv_play.visibility != View.VISIBLE) {\n                        iv_play.visibility = View.VISIBLE\n                    }\n                    iv_play.isSelected = false\n                    viewModel.isPlaying = false\n                    if (iv_point.rotation == 0f) {\n                        startPointAnimat(0f, -40f)\n                    }\n                }\n            }\n        }\n        viewModel.mediaPosition.observe(viewLifecycleOwner) {\n            sb_progress.progress = it.toInt()\n            tv_current_time.text = timestampToMSS(requireContext(), it)\n        }\n\n        iv_prev.setOnClickListener {\n            viewModel.onPlayPrevious(it)\n        }\n        iv_next.setOnClickListener {\n            viewModel.onPlayNext(it)\n        }\n        iv_play.setOnClickListener {\n            viewModel.onPlay(it)\n        }\n        img_back.setOnClickListener {\n            activity?.let { it.finishActivity() }\n        }\n    }\n\n    override fun onDetach() {\n        super.onDetach()\n        cdAnimator?.removeAllUpdateListeners()\n        cdAnimator?.removeAllListeners()\n        pauseCDanimat()\n        cdAnimator = null\n        pointAnimator?.removeAllUpdateListeners()\n        pointAnimator?.removeAllListeners()\n        pointAnimator?.cancel()\n        pointAnimator = null\n    }\n\n    private fun initViewPage() {\n        val layoutID = resourcesPlugin.getIdentifier(\"music_cd_layout\", \"layout\", packageName)\n        val coverView: View = LayoutInflater.from(context).inflate(resourcesPlugin.getLayout(layoutID), null)\n        iv_point = findViewByID(coverView, \"iv_point\")\n        cd_layout = findViewByID(coverView, \"cd_layout\")\n        iv_center = findViewByID(coverView, \"iv_center2\")\n        img_circle = findViewByID(coverView, \"img_circle\")\n        iv_point.rotation = -40f\n        views.add(coverView)\n        val pagerAdapter = BasePagerAdapter(views)\n        view_pager.adapter = pagerAdapter\n\n        ResourceUtils.setImageDrawable(resources, \"icon_chanpian\", SkinContains.packageNameHost, img_circle)\n        ResourceUtils.setImageDrawable(resources, \"icon_play_point\", SkinContains.packageNameHost, iv_point)\n        ResourceUtils.setImageDrawable(resources, \"icon_cd_default_bg\", SkinContains.packageNameHost, iv_center)\n\n\n        iv_center.apply {\n            shapeAppearanceModel = ShapeAppearanceModel.builder().apply {\n                setAllCorners(RoundedCornerTreatment())\n                setAllCornerSizes(context.getIntToDip(85f))\n            }.build()\n        }\n    }\n\n    /**\n     * 初始化指针动画\n     */\n    private fun initPointAnimat() {\n        iv_point.pivotX = requireContext().dpToPx(17.0f)\n        iv_point.pivotY = requireContext().dpToPx(15.0f)\n        pointAnimator = ValueAnimator.ofFloat(0f, 0f)\n        pointAnimator?.apply {\n            setTarget(iv_point)\n            repeatCount = 0\n            duration = 300\n            interpolator = lin\n            addUpdateListener { animation ->\n                val current = animation.animatedValue as Float\n                iv_point.rotation = current\n            }\n            addListener(object : Animator.AnimatorListener {\n                override fun onAnimationStart(animation: Animator) {\n                    if (!viewModel.isPlaying) {\n                        pauseCDanimat()\n                    }\n                }\n\n                override fun onAnimationEnd(animation: Animator) {\n                    if (viewModel.isPlaying) {\n                        resumeCDanimat()\n                    }\n                }\n\n                override fun onAnimationCancel(animation: Animator) {\n                }\n\n                override fun onAnimationRepeat(animation: Animator) {\n                }\n            })\n        }\n    }\n\n    /**\n     * 开始指针动画\n     *\n     * @param from\n     * @param end\n     */\n    private fun startPointAnimat(from: Float, end: Float) {\n        if (pointAnimator != null) {\n            if (from < end) {\n                if (!viewModel.isPlaying) {\n                    return\n                }\n            } else {\n                if (viewModel.isPlaying) {\n                    return\n                }\n            }\n            pointAnimator!!.setFloatValues(from, end)\n            pointAnimator!!.start()\n        }\n    }\n\n    /**\n     * 初始化CD动画\n     */\n    private fun initCDAnimat() {\n        cdAnimator = ValueAnimator.ofFloat(cd_layout.rotation, 360f + cd_layout.rotation)\n        cdAnimator?.apply {\n            setTarget(cd_layout)\n            repeatCount = ValueAnimator.INFINITE\n            duration = 15000\n            interpolator = lin\n            addUpdateListener { animation ->\n//                setCdRodio(current)  todo\n                cd_layout.rotation = animation.animatedValue as Float\n            }\n        }\n    }\n\n    /**\n     * 开始cd动画\n     */\n    private fun resumeCDanimat() {\n        cdAnimator?.takeIf { !it.isRunning }?.run {\n            setFloatValues(cd_layout.rotation, 360f + cd_layout.rotation)\n            start()\n        }\n    }\n\n    /**\n     * 暂停CD动画\n     */\n    private fun pauseCDanimat() {\n        cdAnimator?.takeIf { it.isRunning }?.run { cancel() }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.run {\n            setImageDrawable(skinRes, \"ic_baseline_arrow_back_24\", SkinContains.packageName, img_back)\n            setImageDrawable(skinRes, \"play_mode_level_list\", SkinContains.packageName, iv_mode)\n            setImageDrawable(skinRes, \"ic_play_btn_prev\", SkinContains.packageName, iv_prev)\n            setImageDrawable(skinRes, \"ic_play_btn_next\", SkinContains.packageName, iv_next)\n            setImageDrawable(skinRes, \"play_btn_play_pause_selector\", SkinContains.packageName, iv_play)\n            sb_progress.progressDrawable = getPluginDrawable(skinRes, \"seek_bar_progress_style\", SkinContains.packageName)\n            sb_progress.thumb = getPluginDrawable(skinRes, \"seekbar_thumb\", SkinContains.packageName)\n            pb_load.indeterminateDrawable = getPluginDrawable(skinRes, \"play_load_drawable\", SkinContains.packageName)\n\n            setBackgroundDrawable(skinRes, \"circle_gray_border\", SkinContains.packageName, img_circle)\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/fragment/SampleNotificationFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.fragment\n\nimport android.app.NotificationChannel\nimport android.app.NotificationManager\nimport android.app.PendingIntent\nimport android.content.Context\nimport android.content.Context.NOTIFICATION_SERVICE\nimport android.content.res.Resources\nimport android.graphics.Bitmap\nimport android.os.Build\nimport android.os.Bundle\nimport android.os.Handler\nimport android.os.Message\nimport android.view.View\nimport android.widget.TextView\nimport androidx.core.app.NotificationCompat\nimport androidx.lifecycle.lifecycleScope\nimport com.bumptech.glide.Glide\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.units.SdkIntUtils\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.sample.feature_system.globle.Constants\nimport com.wgllss.sample.feature_system.globle.Constants.NOTIFICATION_LARGE_ICON_SIZE\nimport com.wgllss.sample.feature_system.globle.Constants.glideOptions\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.SampleActivityViewModel\nimport kotlinx.coroutines.Dispatchers\nimport kotlinx.coroutines.launch\nimport kotlinx.coroutines.withContext\n\nclass SampleNotificationFragment : BasePluginFragment<SampleActivityViewModel>(\"fragment_notification_sample\"), View.OnClickListener {\n    private lateinit var btn_notifacaion1: TextView\n    private lateinit var btn_notifacaion2: TextView\n\n    private val mNormalChannelId = \"渠道id\" // 唯一性\n    private val mNormalChannelName = \"渠道名称\"\n    private lateinit var mManager: NotificationManager\n    private lateinit var mBuilder: NotificationCompat.Builder\n    private val mNormalNotificationId = 9001 // 通知id\n\n    private val handler by lazy { MyHandler() }\n\n    private val imgUrl = \"https://pics0.baidu.com/feed/fcfaaf51f3deb48fa4ea6c867f33d9242cf578a5.jpeg\"\n    private val pendingIntent by lazy {\n        val intent = PluginManager.instance.getStandardActivityIntent(\n            requireActivity(),\n            \"classes_other2_res\",\n            \"com.wgllss.sample.features_ui.page.other2.activity.Other3Activity\",\n            \"com.wgllss.dynamic.sample.other2\"\n        )\n        val pendingFlags = if (SdkIntUtils.isLollipop()) {\n            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE\n        } else {\n            PendingIntent.FLAG_UPDATE_CURRENT\n        }\n        PendingIntent.getActivity(requireActivity(), 0, intent, pendingFlags)\n    }\n\n\n    override fun findView(context: Context, containerView: View) {\n        btn_notifacaion1 = findViewByID(\"btn_notifacaion1\")\n        btn_notifacaion2 = findViewByID(\"btn_notifacaion2\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        btn_notifacaion1.setOnClickListener(this)\n        btn_notifacaion2.setOnClickListener(this)\n\n        activity?.run {\n            mManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager\n        }\n    }\n\n    override fun onClick(v: View) {\n        when (v) {\n            btn_notifacaion1 -> {\n                activity?.run {\n                    // 适配8.0及以上 创建渠道\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n                        val channel = NotificationChannel(mNormalChannelId, mNormalChannelName, NotificationManager.IMPORTANCE_LOW).apply {\n                            description = \"描述2222\"\n                            setShowBadge(false) // 是否在桌面显示角标\n                        }\n                        mManager.createNotificationChannel(channel)\n                    }\n                    val intent = PluginManager.instance.getStandardActivityIntent(\n                        this,\n                        \"classes_other2_res\",\n                        \"com.wgllss.sample.features_ui.page.other2.activity.Other3Activity\",\n                        \"com.wgllss.dynamic.sample.other2\"\n                    )\n                    val pendingFlags = if (SdkIntUtils.isLollipop()) {\n                        PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE\n                    } else {\n                        PendingIntent.FLAG_UPDATE_CURRENT\n                    }\n                    val pendingIntent = PendingIntent.getActivity(this, 0, intent, pendingFlags)\n                    // 构建配置\n                    mBuilder = NotificationCompat.Builder(this, mNormalChannelId)\n                        .setContentTitle(\"普通通知111\") // 标题\n                        .setContentText(\"普通通知内容2222222222222\") // 文本\n                        .setSmallIcon(Constants.defaultImgID) // 小图标\n                        .setPriority(NotificationCompat.PRIORITY_DEFAULT) // 7.0 设置优先级\n                        .setContentIntent(pendingIntent) // 跳转配置\n                        .setAutoCancel(true) // 是否自动消失（点击）or mManager.cancel(mNormalNotificationId)、cancelAll、setTimeoutAfter()\n                    // 发起通知\n                    mManager.notify(mNormalNotificationId, mBuilder.build())\n                }\n            }\n            btn_notifacaion2 -> {\n                activity?.run {\n                    // 适配8.0及以上 创建渠道\n                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {\n                        val channel = NotificationChannel(mNormalChannelId + 1, mNormalChannelName, NotificationManager.IMPORTANCE_LOW).apply {\n                            description = \"描述2222\"\n                            setShowBadge(false) // 是否在桌面显示角标\n                        }\n                        mManager.createNotificationChannel(channel)\n                    }\n                    createBuildWithBitmap()\n                }\n            }\n            else -> {\n\n            }\n        }\n    }\n\n    private inner class MyHandler : Handler() {\n        override fun handleMessage(msg: Message) {\n            when (msg.what) {\n                1 -> {\n                    createBuildWithBitmap(msg.obj as Bitmap)\n                }\n                else -> {\n\n                }\n            }\n        }\n    }\n\n    private fun createBuildWithBitmap(bitmap: Bitmap? = null) {\n        activity?.run {\n            // 构建配置\n            mBuilder = NotificationCompat.Builder(this, mNormalChannelId + 1)\n                .setContentTitle(\"普通通知3333\") // 标题\n                .setContentText(\"普通通知内容55555566666666666aaaaaaaaaaaa\") // 文本\n                .setSmallIcon(Constants.defaultImgID) // 小图标\n            if (bitmap == null) {\n                lifecycleScope.launch {\n                    val bitmap = withContext(Dispatchers.IO) {\n                        Glide.with(this@run).applyDefaultRequestOptions(glideOptions)\n                            .asBitmap()\n                            .load(imgUrl)\n                            .submit(NOTIFICATION_LARGE_ICON_SIZE, NOTIFICATION_LARGE_ICON_SIZE)\n                            .get()\n                    }\n                    bitmap?.let {\n                        handler.sendMessage(handler.obtainMessage(1, it))\n                    }\n                }\n            } else {\n                mBuilder.setLargeIcon(bitmap)\n            }\n            mBuilder.setPriority(NotificationCompat.PRIORITY_DEFAULT) // 7.0 设置优先级\n                .setContentIntent(pendingIntent) // 跳转配置\n                .setAutoCancel(true) // 是否自动消失（点击）or mManager.cancel(mNormalNotificationId)、cancelAll、setTimeoutAfter()\n            // 发起通知\n            mManager.notify(mNormalNotificationId, mBuilder.build())\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, btn_notifacaion1, btn_notifacaion2)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, btn_notifacaion1, btn_notifacaion2)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/fragment/SampleServiceFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.fragment\n\nimport android.content.Context\nimport android.content.Intent\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.TextView\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.widget.CommonToast\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.SampleActivityViewModel\n\nclass SampleServiceFragment : BasePluginFragment<SampleActivityViewModel>(\"fragment_service_sample\"), View.OnClickListener {\n    private lateinit var btn_start_service: TextView\n    private lateinit var btn_start_service2: TextView\n    private lateinit var btn_start_service3: TextView\n\n    private lateinit var btn_bind_service: TextView\n    private lateinit var btn_bind_service2: TextView\n    private lateinit var btn_bind_service3: TextView\n\n    private lateinit var btn_start_service11: TextView\n    private lateinit var btn_bind_service11: TextView\n    private lateinit var btn_bind_service_aidl: TextView\n\n    override fun findView(context: Context, containerView: View) {\n        btn_start_service = findViewByID(\"btn_start_service\")\n        btn_start_service2 = findViewByID(\"btn_start_service2\")\n        btn_start_service3 = findViewByID(\"btn_start_service3\")\n\n        btn_bind_service = findViewByID(\"btn_bind_service\")\n        btn_bind_service2 = findViewByID(\"btn_bind_service2\")\n        btn_bind_service3 = findViewByID(\"btn_bind_service3\")\n\n        btn_start_service11 = findViewByID(\"btn_start_service11\")\n        btn_bind_service11 = findViewByID(\"btn_bind_service11\")\n        btn_bind_service_aidl = findViewByID(\"btn_bind_service_aidl\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        btn_start_service.setOnClickListener(this)\n        btn_start_service2.setOnClickListener(this)\n        btn_start_service3.setOnClickListener(this)\n\n        btn_bind_service.setOnClickListener(this)\n        btn_bind_service2.setOnClickListener(this)\n        btn_bind_service3.setOnClickListener(this)\n\n        btn_start_service11.setOnClickListener(this)\n        btn_bind_service11.setOnClickListener(this)\n\n        btn_bind_service_aidl.setOnClickListener(this)\n    }\n\n    override fun onClick(v: View) {\n        when (v) {\n            btn_start_service -> {\n                activity?.run {\n                    PluginManager.instance.startPluginStartNotStickyService(\n                        this, \"classes_other2_dex\",\n                        \"com.wgllss.sample.features_ui.page.other2.service.MyService\",\n                        \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n                            putExtra(\"service_key\", \"1321531\")\n                        }\n                    )\n                }\n            }\n            btn_start_service2 -> {\n                activity?.run {\n                    PluginManager.instance.startPluginStartNotStickyService(\n                        this, \"classes_other2_dex\",\n                        \"com.wgllss.sample.features_ui.page.other2.service.MyService2\",\n                        \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n                            putExtra(\"service_key\", \"1321531\")\n                        }\n                    )\n                }\n            }\n            btn_start_service3 -> {\n                activity?.run {\n                    PluginManager.instance.startPluginStartStickyService(\n                        this, \"classes_other2_dex\",\n                        \"com.wgllss.sample.features_ui.page.other2.service.MyService3\",\n                        \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n                            putExtra(\"service_key\", \"1321531\")\n                        }\n                    )\n                }\n            }\n            btn_bind_service -> {\n                activity?.run {\n                    PluginManager.instance.bindNotStickyService(this, \"classes_other2_dex\", \"com.wgllss.dynamic.sample.other2\", \"com.wgllss.sample.features_ui.page.other2.service.MyService\")\n                }\n            }\n            btn_bind_service2 -> {\n                activity?.run {\n                    PluginManager.instance.bindNotStickyService(this, \"classes_other2_dex\", \"com.wgllss.dynamic.sample.other2\", \"com.wgllss.sample.features_ui.page.other2.service.MyService2\")\n                }\n            }\n            btn_bind_service3 -> {\n                activity?.run {\n                    PluginManager.instance.bindStickyService(this, \"classes_other2_dex\", \"com.wgllss.dynamic.sample.other2\", \"com.wgllss.sample.features_ui.page.other2.service.MyService3\")\n                }\n            }\n            btn_start_service11 -> {\n                activity?.run {\n                    PluginManager.instance.startPluginProcessStartNotStickyService(\n                        this, \"classes_other2_dex\",\n                        \"com.wgllss.sample.features_ui.page.other2.service.MyProcessService\",\n                        \"com.wgllss.dynamic.sample.other2\", Intent().apply {\n                            putExtra(\"service_key\", \"1321531\")\n                        }\n                    )\n                }\n            }\n            btn_bind_service11 -> {\n                activity?.run {\n                    PluginManager.instance.bindProcessNotStickyService(\n                        this, \"classes_other2_dex\",\n                        \"com.wgllss.dynamic.sample.other2\",\n                        \"com.wgllss.sample.features_ui.page.other2.service.MyProcessService\",\n                    )\n                }\n            }\n            btn_bind_service_aidl -> {\n                activity?.run {\n                    val result = PluginManager.instance.onProcessAidlNotStickyServiceCallBack(\n                        \"com.wgllss.sample.features_ui.page.other2.service.MyProcessService\",\n                        1\n                    )\n                    CommonToast.show(result)\n                }\n            }\n            else -> {\n\n            }\n        }\n    }\n\n    override fun onDestroyView() {\n        super.onDestroyView()\n        activity?.run {\n            PluginManager.instance.unBindNotStickyService(this)\n            PluginManager.instance.unBindNotStickyService(this)\n            PluginManager.instance.unBindStickyService(this)\n            PluginManager.instance.unBindProcessNotStickyService(this)\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, btn_start_service3, btn_start_service2, btn_start_service, btn_bind_service, btn_bind_service2, btn_bind_service3, btn_start_service11, btn_bind_service11, btn_bind_service_aidl)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, btn_start_service3, btn_start_service2, btn_start_service, btn_bind_service, btn_bind_service2, btn_bind_service3, btn_start_service11, btn_bind_service11, btn_bind_service_aidl)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/fragment/SampleSoFragment.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.fragment\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.os.Bundle\nimport android.view.View\nimport android.widget.TextView\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.sample.features_ui.page.base.BasePluginFragment\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport com.wgllss.sample.features_ui.page.other2.viewmodel.SampleActivityViewModel\n\nclass SampleSoFragment : BasePluginFragment<SampleActivityViewModel>(\"fragment_so_sample\"), View.OnClickListener {\n    private lateinit var btn_so: TextView\n\n    override fun findView(context: Context, containerView: View) {\n        btn_so = findViewByID(\"btn_so\")\n    }\n\n    override fun onActivityCreated(savedInstanceState: Bundle?) {\n        super.onActivityCreated(savedInstanceState)\n        btn_so.setOnClickListener(this)\n    }\n\n    override fun onClick(v: View) {\n        when (v) {\n            btn_so -> {\n                activity?.run {\n                    viewModel.downloadSo(this)\n                }\n            }\n\n            else -> {\n\n            }\n        }\n    }\n\n    override fun onChangeSkin(skinRes: Resources) {\n        ResourceUtils.setBackgroundColor(skinRes, \"colorPrimary\", SkinContains.packageName, btn_so)\n        ResourceUtils.setTextColor(skinRes, \"colorOnPrimary\", SkinContains.packageName, btn_so)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/service/MyProcessService.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.service\n\nimport android.app.Service\nimport android.content.Context\nimport android.content.Intent\nimport android.os.IBinder\nimport com.wgllss.dynamic.runtime.library.WXHostServiceDelegate\n\nclass MyProcessService : WXHostServiceDelegate {\n\n    private lateinit var context: Context\n\n    override fun attachBaseContext(newBase: Context) {\n        this.context = newBase\n        android.util.Log.e(\"MyProcessService\", \"START_NOT_STICKY attachBaseContext\")\n    }\n\n    override fun onBind(intent: Intent?): IBinder? {\n        android.util.Log.e(\"MyProcessService\", \"START_NOT_STICKY onBind\")\n        return null\n    }\n\n    override fun onCreate() {\n        android.util.Log.e(\"MyProcessService\", \"START_NOT_STICKY onCreate\")\n    }\n\n    override fun onStart(intent: Intent?, startId: Int) {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyProcessService\", \"START_NOT_STICKY onStart: str :$str\")\n    }\n\n    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyProcessService\", \"START_NOT_STICKY onStartCommand: str :$str\")\n\n\n        return Service.START_NOT_STICKY\n    }\n\n    override fun onUnbind(intent: Intent?): Boolean {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyProcessService\", \"START_NOT_STICKY onUnbind: str :$str\")\n        return false\n    }\n\n    override fun onDestroy() {\n        android.util.Log.e(\"MyProcessService\", \"START_NOT_STICKY onDestroy: \")\n    }\n\n    override fun callMethodByID(methodID: Int): String {\n        return when (methodID) {\n            1 -> {\n                android.util.Log.e(\"MyProcessService\", \" 换种方式实现 模拟 AIDL 方法调用 \")\n                \"AIDL 调用返回值\"\n            }\n            else -> {\n                \"\"\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/service/MyService.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.service\n\nimport android.app.Service\nimport android.content.Context\nimport android.content.Intent\nimport android.os.IBinder\nimport com.wgllss.dynamic.runtime.library.WXHostServiceDelegate\n\nclass MyService : WXHostServiceDelegate {\n\n    private lateinit var context: Context\n\n    override fun attachBaseContext(newBase: Context) {\n        this.context = newBase\n        android.util.Log.e(\"MyService\", \"START_NOT_STICKY attachBaseContext\")\n    }\n\n    override fun onBind(intent: Intent?): IBinder? {\n        android.util.Log.e(\"MyService\", \"START_NOT_STICKY onBind\")\n        return null\n    }\n\n    override fun onCreate() {\n        android.util.Log.e(\"MyService\", \"START_NOT_STICKY onCreate\")\n    }\n\n    override fun onStart(intent: Intent?, startId: Int) {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService\", \"START_NOT_STICKY onStart: str :$str\")\n    }\n\n    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService\", \"START_NOT_STICKY onStartCommand: str :$str\")\n\n\n        return Service.START_NOT_STICKY\n    }\n\n    override fun onUnbind(intent: Intent?): Boolean {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService\", \"START_NOT_STICKY onUnbind: str :$str\")\n        return false\n    }\n\n    override fun onDestroy() {\n        android.util.Log.e(\"MyService\", \"START_NOT_STICKY onDestroy: \")\n    }\n\n    override fun callMethodByID(methodID: Int): String {\n        return when (methodID) {\n            1 -> {\n                \"\"\n            }\n            else -> {\n                \"\"\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/service/MyService2.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.service\n\nimport android.app.Service\nimport android.content.Context\nimport android.content.Intent\nimport android.os.IBinder\nimport com.wgllss.dynamic.runtime.library.WXHostServiceDelegate\n\nclass MyService2 : WXHostServiceDelegate {\n\n    private lateinit var context: Context\n\n    override fun attachBaseContext(newBase: Context) {\n        this.context = newBase\n        android.util.Log.e(\"MyService2\", \"START_NOT_STICKY attachBaseContext\")\n    }\n\n    override fun onBind(intent: Intent?): IBinder? {\n        android.util.Log.e(\"MyService2\", \"START_NOT_STICKY onBind\")\n        return null\n    }\n\n    override fun onCreate() {\n        android.util.Log.e(\"MyService2\", \"START_NOT_STICKY onCreate\")\n    }\n\n    override fun onStart(intent: Intent?, startId: Int) {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService2\", \"START_NOT_STICKY onStart: str :$str\")\n    }\n\n    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService2\", \"START_NOT_STICKY onStartCommand: str :$str\")\n\n\n        return Service.START_NOT_STICKY\n    }\n\n    override fun onUnbind(intent: Intent?): Boolean {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService2\", \"START_NOT_STICKY onUnbind: str :$str\")\n        return false\n    }\n\n    override fun onDestroy() {\n        android.util.Log.e(\"MyService2\", \"START_NOT_STICKY onDestroy: \")\n    }\n\n    override fun callMethodByID(methodID: Int): String {\n        return when (methodID) {\n            1 -> {\n                \"\"\n            }\n            else -> {\n                \"\"\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/service/MyService3.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.service\n\nimport android.app.Service\nimport android.content.Context\nimport android.content.Intent\nimport android.os.IBinder\nimport com.wgllss.dynamic.runtime.library.WXHostServiceDelegate\n\nclass MyService3 : WXHostServiceDelegate {\n\n    private lateinit var context: Context\n\n    override fun attachBaseContext(newBase: Context) {\n        this.context = newBase\n        android.util.Log.e(\"MyService3\", \"START_STICKY attachBaseContext\")\n    }\n\n    override fun onBind(intent: Intent?): IBinder? {\n        android.util.Log.e(\"MyService3\", \"START_STICKY onBind\")\n        return null\n    }\n\n    override fun onCreate() {\n        android.util.Log.e(\"MyService3\", \"START_STICKY onCreate\")\n    }\n\n    override fun onStart(intent: Intent?, startId: Int) {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService3\", \"START_STICKY onStart: str :$str\")\n    }\n\n    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService3\", \"START_STICKY onStartCommand: str :$str\")\n\n\n        return Service.START_STICKY\n    }\n\n    override fun onUnbind(intent: Intent?): Boolean {\n        val str = intent?.getStringExtra(\"service_key\") ?: \"\"\n        android.util.Log.e(\"MyService3\", \"START_STICKY onUnbind: str :$str\")\n        return false\n    }\n\n    override fun onDestroy() {\n        android.util.Log.e(\"MyService3\", \"START_STICKY onDestroy: \")\n    }\n\n    override fun callMethodByID(methodID: Int): String {\n        return when (methodID) {\n            1 -> {\n                \"\"\n            }\n            else -> {\n                \"\"\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/viewmodel/ComposeDemoViewModel.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.viewmodel\n\nimport android.content.Context\nimport android.content.res.Resources\nimport android.graphics.Bitmap\nimport android.os.Build\nimport androidx.lifecycle.LiveData\nimport androidx.lifecycle.MutableLiveData\nimport androidx.lifecycle.viewModelScope\nimport com.wgllss.core.units.ImageUtils\nimport com.wgllss.core.units.ResourceUtils\nimport com.wgllss.core.units.WLog\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.core.widget.CommonToast\nimport com.wgllss.dynamic.host.lib.download.DynamicDownloadPlugin\nimport com.wgllss.dynamic.host.lib.impl.WXDynamicLoader\nimport com.wgllss.nativex.MainActivity\nimport com.wgllss.sample.features_ui.page.base.SkinContains\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.flow.onEach\nimport kotlinx.coroutines.launch\n\nclass ComposeDemoViewModel : BaseViewModel() {\n\n    private val _bitmap by lazy { MutableLiveData<Bitmap>() }\n    val bitmap: LiveData<Bitmap> = _bitmap\n\n    override fun start() {\n    }\n\n    fun loadBitmap(resources: Resources) {\n        viewModelScope.launch {\n            flow {\n                //注释掉的是拿取插件 皮肤下的 player_background_real.webp 图片 drawable 然后转成 bitmap\n//                    val bitmap = ImageUtils.drawableToBitmap(ResourceUtils.getPluginDrawable(getSkinResources(), \"player_background_real\", SkinContains.packageName))\n                val bitmap = ImageUtils.drawableToBitmap(ResourceUtils.getPluginDrawable(resources, \"loading\", SkinContains.packageNameHost))\n                emit(bitmap)\n            }.flowOnIOAndCatch().collect {\n                _bitmap.value = it\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/viewmodel/Other2ViewModel.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.viewmodel\n\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.core.viewmodel.BaseViewModel\n\nclass Other2ViewModel : BaseViewModel() {\n\n    val data222 = MutableLiveData<String>()\n\n    override fun start() {\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/viewmodel/PlayModel.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.viewmodel\n\nimport android.os.Bundle\nimport android.support.v4.media.MediaBrowserCompat\nimport android.support.v4.media.MediaMetadataCompat\nimport android.support.v4.media.session.PlaybackStateCompat\nimport android.view.View\nimport androidx.core.net.toUri\nimport androidx.lifecycle.*\nimport com.wgllss.core.units.AppGlobals\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.sample.feature_system.globle.Constants.MEDIA_ARTNETWORK_URL_KEY\nimport com.wgllss.sample.feature_system.globle.Constants.MEDIA_AUTHOR_KEY\nimport com.wgllss.sample.feature_system.globle.Constants.MEDIA_ID_KEY\nimport com.wgllss.sample.feature_system.globle.Constants.MEDIA_TITLE_KEY\nimport com.wgllss.sample.feature_system.globle.Constants.MEDIA_URL_KEY\nimport com.wgllss.sample.feature_system.music.exoplayerimpl.MusicServiceConnection\nimport com.wgllss.sample.feature_system.music.extensions.currentPlayBackPosition\nimport kotlinx.coroutines.delay\nimport kotlinx.coroutines.flow.collect\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.launch\n\nclass PlayModel : BaseViewModel() {\n\n    private val musicServiceConnectionL by lazy { MusicServiceConnection.getInstance(AppGlobals.sApplication) }\n    var isPlaying: Boolean = false\n    val nowPlaying by lazy { MutableLiveData<MediaMetadataCompat>() }\n    val playbackState by lazy { MutableLiveData<PlaybackStateCompat>() }\n    private var updatePosition = true\n    val mediaPosition by lazy { MutableLiveData(0L) }\n\n    private val transportControls by lazy { musicServiceConnectionL.transportControls }\n\n    //播放列表\n    val liveData: MutableLiveData<MutableList<MediaBrowserCompat.MediaItem>> by lazy { MutableLiveData<MutableList<MediaBrowserCompat.MediaItem>>() }\n    val rootMediaId: LiveData<String> = musicServiceConnectionL.isConnected.map { isConnected ->\n        if (isConnected) {\n            musicServiceConnectionL.rootMediaId\n        } else {\n            \"\"\n        }\n    }\n\n    override fun start() {\n        musicServiceConnectionL.startConnect()\n    }\n\n    private val subscriptionCallback by lazy {\n        object : MediaBrowserCompat.SubscriptionCallback() {\n            override fun onChildrenLoaded(parentId: String, children: MutableList<MediaBrowserCompat.MediaItem>) {\n                liveData.value = children\n            }\n        }\n    }\n\n    fun subscribeByMediaID(mediaId: String) {\n        musicServiceConnectionL.run {\n            subscribe(mediaId, subscriptionCallback)\n            playbackState.observeForever(playbackStateObserver)\n            nowPlaying.observeForever(mediaMetadataObserver)\n            checkPlaybackPosition()\n        }\n    }\n\n    //从指定位置开始播放\n    fun seek(pos: Long) {\n        musicServiceConnectionL.transportControls.seekTo(pos)\n    }\n\n    fun playMp3() {\n        val url = \"https://storage.googleapis.com/automotive-media/Keys_To_The_Kingdom.mp3\"\n        val extras = Bundle().apply {\n            putString(MEDIA_ID_KEY, \"123156\")\n            putString(MEDIA_TITLE_KEY, \"Keys To The Kingdom\")\n            putString(MEDIA_AUTHOR_KEY, \"The 126ers\")\n            putString(MEDIA_ARTNETWORK_URL_KEY, \"https://storage.googleapis.com/automotive-media/album_art_3.jpg\")\n            putString(MEDIA_URL_KEY, url)\n        }\n        transportControls.prepareFromUri(url.toUri(), extras)\n    }\n\n    fun onPlay(it: View) {\n        isPlaying = !it.isSelected\n        musicServiceConnectionL.transportControls.run {\n            if (it.isSelected) pause() else {\n                play()\n            }\n        }\n    }\n\n    fun onPlayNext(it: View) {\n        musicServiceConnectionL.transportControls.skipToNext()\n    }\n\n\n    fun onPlayPrevious(it: View) {\n        musicServiceConnectionL.transportControls.skipToPrevious()\n    }\n\n    private val playbackStateObserver = Observer<PlaybackStateCompat> {\n        playbackState.postValue(it)\n    }\n\n    private val mediaMetadataObserver = Observer<MediaMetadataCompat> {\n        nowPlaying.postValue(it)\n    }\n\n    private fun checkPlaybackPosition() {\n        viewModelScope.launch {\n            flow {\n                while (updatePosition) {\n                    val currPosition = playbackState?.value?.currentPlayBackPosition ?: 0\n                    if (mediaPosition.value != currPosition)\n                        mediaPosition.postValue(currPosition)\n                    delay(998)\n                }\n                emit(0)\n            }.flowOnIOAndCatch()\n                .collect()\n        }\n    }\n\n    override fun onCleared() {\n        super.onCleared()\n        musicServiceConnectionL.playbackState.removeObserver(playbackStateObserver)\n        musicServiceConnectionL.nowPlaying.removeObserver(mediaMetadataObserver)\n        updatePosition = false\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/viewmodel/SampleActivityViewModel.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.viewmodel\n\nimport android.content.Context\nimport android.os.Build\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.core.units.WLog\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.core.widget.CommonToast\nimport com.wgllss.dynamic.host.lib.download.DynamicDownloadPlugin\nimport com.wgllss.dynamic.host.lib.impl.WXDynamicLoader\nimport com.wgllss.nativex.MainActivity\nimport kotlinx.coroutines.flow.flow\nimport kotlinx.coroutines.flow.onEach\n\nclass SampleActivityViewModel : BaseViewModel() {\n\n    val str by lazy { MutableLiveData(\" 我这是示例数据\") }\n    val url by lazy { MutableLiveData(\"https://dingyue.ws.126.net/2024/0408/901a74abj00sbly7z0090d000gh00h6m.jpg\") }\n\n\n    override fun start() {\n    }\n\n    fun downloadSo(context: Context) {\n        flowAsyncWorkOnViewModelScopeLaunch {\n            flow {\n                //todo so 一般比较大了，很难做到只有 40~50k左右，故不放在 版本控制里面去，需要单独业务区控制 下载完成之后 再调用\n                //todo 如果启动就下载 ，需要耗费大量下载时间与资源，影响启动性能\n                val face = WXDynamicLoader.instance.loader.getDownloadFace()\n                DynamicDownloadPlugin(face).initDynamicPlugin(context, StringBuilder().append(face.getHostL()).append(\"/so/lib/\").append(Build.CPU_ABI).append(\"/libnativex.so\").toString(), \"so\", \"libnativex.so\").run {\n                    System.load(fileAbsolutePath)\n                }\n                emit(0)\n            }.onEach {\n                errorMsgLiveData.postValue(MainActivity().stringFromJNI())\n            }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/viewmodel/WebViewModel.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.viewmodel\n\nimport androidx.lifecycle.MutableLiveData\nimport com.wgllss.core.units.AppGlobals\nimport com.wgllss.core.viewmodel.BaseViewModel\nimport com.wgllss.sample.datasource.repository.NewsRepository\nimport kotlinx.coroutines.flow.onEach\n\nclass WebViewModel : BaseViewModel() {\n\n    private val newsRepositoryL by lazy { NewsRepository.getInstance(AppGlobals.sApplication) }\n    val livedataHtml by lazy { MutableLiveData<String>() }\n\n\n    override fun start() {\n    }\n\n    fun getNewsDetailInfo(url: String, fileName: String) {\n        flowAsyncWorkOnViewModelScopeLaunch {\n            newsRepositoryL.getNewsDetailInfo(url, fileName)\n                .onEach {\n                    livedataHtml.postValue(it)\n                }\n        }\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/sample/features_ui/page/other2/web/ImplWebViewClient.kt",
    "content": "package com.wgllss.sample.features_ui.page.other2.web\n\nimport android.os.Build\nimport android.webkit.WebResourceRequest\nimport android.webkit.WebResourceResponse\nimport android.webkit.WebView\nimport android.webkit.WebViewClient\nimport androidx.annotation.RequiresApi\nimport com.wgllss.dynamic.plugin.manager.PluginManager\nimport com.wgllss.sample.feature_system.savestatus.MMKVHelp\n\nclass ImplWebViewClient : WebViewClient() {\n\n\n    private val strOfflineResources by lazy { MMKVHelp.getJsPath() }\n    private val webResAssets by lazy { PluginManager.instance.getWebRes().assets }\n\n    override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?) = true\n\n    override fun onPageFinished(view: WebView, url: String) {\n        super.onPageFinished(view, url)\n        view.loadUrl(\"javascript:loadImage()\")\n    }\n\n    @RequiresApi(Build.VERSION_CODES.N)\n    override fun shouldInterceptRequest(view: WebView, request: WebResourceRequest?): WebResourceResponse? {\n        val url = request?.url.toString()\n        val lastSlash: Int = url.lastIndexOf(\"/\")\n        if (lastSlash != -1) {\n            val suffix: String = url.substring(lastSlash + 1)\n            if (suffix.endsWith(\".css\")) {\n                if (strOfflineResources.contains(suffix)) {\n                    val mimeType = \"text/css\"\n                    val offlineRes = \"css/\"\n                    val inputs = webResAssets.open(\"$offlineRes$suffix\")\n                    return WebResourceResponse(mimeType, \"UTF-8\", inputs)\n                } else {\n                    android.util.Log.e(\"ImplWebViewClient\", \"request css :${url}\")\n                }\n            }\n            if (suffix.endsWith(\".js\")) {\n                if (strOfflineResources.contains(suffix)) {\n                    val mimeType = \"application/x-javascript\"\n                    val offlineRes = \"js/\"\n                    val inputs = webResAssets.open(\"$offlineRes$suffix\")\n                    return WebResourceResponse(mimeType, \"UTF-8\", inputs)\n                } else {\n                    android.util.Log.e(\"ImplWebViewClient\", \"request js :${url}\")\n                }\n            }\n        }\n        return super.shouldInterceptRequest(view, request)\n    }\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/theme/Color.kt",
    "content": "package com.wx.compose.plugin.theme\n\nimport androidx.compose.ui.graphics.Color\n\nval Purple80 = Color(0xFFD0BCFF)\nval PurpleGrey80 = Color(0xFFCCC2DC)\nval Pink80 = Color(0xFFEFB8C8)\n\nval Purple40 = Color(0xFF6650a4)\nval PurpleGrey40 = Color(0xFF625b71)\nval Pink40 = Color(0xFF7D5260)"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/theme/Theme.kt",
    "content": "package com.wx.compose1.ui.ui.theme\n\nimport android.os.Build\nimport androidx.compose.foundation.isSystemInDarkTheme\nimport androidx.compose.material3.MaterialTheme\nimport androidx.compose.material3.darkColorScheme\nimport androidx.compose.material3.dynamicDarkColorScheme\nimport androidx.compose.material3.dynamicLightColorScheme\nimport androidx.compose.material3.lightColorScheme\nimport androidx.compose.runtime.Composable\nimport androidx.compose.ui.platform.LocalContext\nimport com.wx.compose.plugin.theme.Pink40\nimport com.wx.compose.plugin.theme.Pink80\nimport com.wx.compose.plugin.theme.Purple40\nimport com.wx.compose.plugin.theme.Purple80\nimport com.wx.compose.plugin.theme.PurpleGrey40\nimport com.wx.compose.plugin.theme.PurpleGrey80\nimport com.wx.compose.plugin.theme.Typography\n\nprivate val DarkColorScheme = darkColorScheme(\n    primary = Purple80,\n    secondary = PurpleGrey80,\n    tertiary = Pink80\n)\n\nprivate val LightColorScheme = lightColorScheme(\n    primary = Purple40,\n    secondary = PurpleGrey40,\n    tertiary = Pink40\n\n    /* Other default colors to override\n    background = Color(0xFFFFFBFE),\n    surface = Color(0xFFFFFBFE),\n    onPrimary = Color.White,\n    onSecondary = Color.White,\n    onTertiary = Color.White,\n    onBackground = Color(0xFF1C1B1F),\n    onSurface = Color(0xFF1C1B1F),\n    */\n)\n\n@Composable\nfun WXComposeXXXTheme(\n    darkTheme: Boolean = isSystemInDarkTheme(),\n    // Dynamic color is available on Android 12+\n    dynamicColor: Boolean = true,\n    content: @Composable () -> Unit\n) {\n    val colorScheme = when {\n        dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> {\n            val context = LocalContext.current\n            if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context)\n        }\n\n        darkTheme -> DarkColorScheme\n        else -> LightColorScheme\n    }\n\n    MaterialTheme(\n        colorScheme = colorScheme,\n        typography = Typography,\n        content = content\n    )\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2/src/main/java/com/wgllss/theme/Type.kt",
    "content": "package com.wx.compose.plugin.theme\n\nimport androidx.compose.material3.Typography\nimport androidx.compose.ui.text.TextStyle\nimport androidx.compose.ui.text.font.FontFamily\nimport androidx.compose.ui.text.font.FontWeight\nimport androidx.compose.ui.unit.sp\n\n// Set of Material typography styles to start with\nval Typography = Typography(\n    bodyLarge = TextStyle(\n        fontFamily = FontFamily.Default,\n        fontWeight = FontWeight.Normal,\n        fontSize = 16.sp,\n        lineHeight = 24.sp,\n        letterSpacing = 0.5.sp\n    )\n    /* Other default text styles to override\n    titleLarge = TextStyle(\n        fontFamily = FontFamily.Default,\n        fontWeight = FontWeight.Normal,\n        fontSize = 22.sp,\n        lineHeight = 28.sp,\n        letterSpacing = 0.sp\n    ),\n    labelSmall = TextStyle(\n        fontFamily = FontFamily.Default,\n        fontWeight = FontWeight.Medium,\n        fontSize = 11.sp,\n        lineHeight = 16.sp,\n        letterSpacing = 0.5.sp\n    )\n    */\n)"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"blue.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#4A148C</color>\n    <color name=\"colorTrackCheck\">#4527A0</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#4A148C</color>\n    <color name=\"colorTrackCheck\">#4527A0</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#B0B0B0</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"brown.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#827717</color>\n    <color name=\"colorTrackCheck\">#999717</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#827717</color>\n    <color name=\"colorTrackCheck\">#999717</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#B0B0B0</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"dark_blue.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#330066</color>\n    <color name=\"colorTrackCheck\">#003366</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#330066</color>\n    <color name=\"colorTrackCheck\">#003366</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#B0B0B0</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"skin_dark_green.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#158bb8</color>\n    <color name=\"colorTrackCheck\">#1C6bb8</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#158bb8</color>\n    <color name=\"colorTrackCheck\">#1C6bb8</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#B0B0B0</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"dark_red.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#55000A</color>\n    <color name=\"colorTrackCheck\">#93000A</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#55000A</color>\n    <color name=\"colorTrackCheck\">#93000A</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#B0B0B0</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"skin_green.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#007A00</color>\n    <color name=\"colorTrackCheck\">#5dbe8a</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#007A00</color>\n    <color name=\"colorTrackCheck\">#5dbe8a</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#B0B0B0</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"light_green.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#3AAF00</color>\n    <color name=\"colorTrackCheck\">#3deD99</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#3AAF00</color>\n    <color name=\"colorTrackCheck\">#3deD99</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#FAFAFA</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"orange.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#F57F17</color>\n    <color name=\"colorTrackCheck\">#FF9917</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#F57F17</color>\n    <color name=\"colorTrackCheck\">#FF9917</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#FAFAFA</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"pink.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#D0006A</color>\n    <color name=\"colorTrackCheck\">#EC507A</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#D0006A</color>\n    <color name=\"colorTrackCheck\">#EC507A</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#FAFAFA</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/.gitignore",
    "content": "/build"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application)\n}\n\nandroid {\n    namespace 'com.wgllss.sample.skin'\n    compileSdk libs.versions.compileSdk.get().toInteger()\n\n    defaultConfig {\n        applicationId \"com.wgllss.sample.skin\"\n        minSdkVersion libs.versions.minSdk.get().toInteger()\n        targetSdkVersion libs.versions.targetSdkVersion.get().toInteger()\n        versionCode 1\n        versionName \"1.0\"\n    }\n\n    buildTypes {\n        debug {\n            // 假如打包后运行闪退，可以在调试模式下打开混淆查看日志找出混淆问题\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n        release {\n            debuggable false\n            minifyEnabled false // 开启混淆\n            shrinkResources false // 启动资源压缩\n            zipAlignEnabled false // 开启zipalign优化\n            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'\n        }\n\n        applicationVariants.all {\n            variant ->\n                variant.outputs.all {\n                    outputFileName = \"red_green.apk\"\n                }\n        }\n    }\n    compileOptions {\n        sourceCompatibility JavaVersion.VERSION_1_8\n        targetCompatibility JavaVersion.VERSION_1_8\n    }\n}\n\ndependencies {\n}"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/proguard-rules.pro",
    "content": "# Add project specific ProGuard rules here.\n# You can control the set of applied configuration files using the\n# proguardFiles setting in build.gradle.\n#\n# For more details, see\n#   http://developer.android.com/guide/developing/tools/proguard.html\n\n# If your project uses WebView with JS, uncomment the following\n# and specify the fully qualified class name to the JavaScript interface\n# class:\n#-keepclassmembers class fqcn.of.javascript.interface.for.webview {\n#   public *;\n#}\n\n# Uncomment this to preserve the line number information for\n# debugging stack traces.\n#-keepattributes SourceFile,LineNumberTable\n\n# If you keep the line number information, uncomment this to\n# hide the original source file name.\n#-renamesourcefileattribute SourceFile"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.wgllss.sample.skin\" />\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/bottom_navigation_color_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" android:state_checked=\"false\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/circle_gray_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"#6bec4c48\"\n        android:width=\"4dp\"/>\n    <solid android:color= \"@color/color_translucent\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/ic_baseline_arrow_back_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"@color/white\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/ic_baseline_grade_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#000000\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/ic_baseline_pause_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,19h4L10,5L6,5v14zM14,5v14h4L18,5h-4z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/ic_baseline_play_arrow_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M8,5v14l11,-7z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/ic_baseline_search_24.xml",
    "content": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"24dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/ic_baseline_skip_next_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,18l8.5,-6L6,6v12zM16,6v12h2V6h-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/ic_baseline_skip_previous_36.xml",
    "content": "<vector android:height=\"36dp\" android:tint=\"#FFFFFF\"\n    android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n    android:width=\"36dp\" xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <path android:fillColor=\"@android:color/white\" android:pathData=\"M6,6h2v12L6,18zM9.5,12l8.5,6L18,6z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/ic_dashboard_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M3,13h8L11,3L3,3v10zM3,21h8v-6L3,15v6zM13,21h8L21,11h-8v10zM13,3v6h8L21,3h-8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/ic_home_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/ic_notifications_black_24dp.xml",
    "content": "<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n        android:width=\"24dp\"\n        android:height=\"24dp\"\n        android:viewportHeight=\"24.0\"\n        android:viewportWidth=\"24.0\">\n    <path\n        android:fillColor=\"#FF000000\"\n        android:pathData=\"M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z\"/>\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/ic_round_queue_music_24.xml",
    "content": "<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=\"#FF000000\"\n        android:pathData=\"M14,6L4,6c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM14,10L4,10c-0.55,0 -1,0.45 -1,1s0.45,1 1,1h10c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1zM4,16h6c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1L4,14c-0.55,0 -1,0.45 -1,1s0.45,1 1,1zM19,6c-1.1,0 -2,0.9 -2,2v6.18c-0.31,-0.11 -0.65,-0.18 -1,-0.18 -1.84,0 -3.28,1.64 -2.95,3.54 0.21,1.21 1.2,2.2 2.41,2.41 1.9,0.33 3.54,-1.11 3.54,-2.95L19,8h2c0.55,0 1,-0.45 1,-1s-0.45,-1 -1,-1h-2z\" />\n</vector>\n"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/play_btn_play_pause_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@drawable/ic_play_btn_pause\" android:state_selected=\"true\" />\n    <item android:drawable=\"@drawable/ic_play_btn_play\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/play_load_drawable.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<animated-rotate xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    xmlns:tools=\"http://schemas.android.com/tools\"\n    android:drawable=\"@drawable/ic_play_loading\"\n    android:pivotX=\"50%\"\n    android:pivotY=\"50%\"\n    android:indeterminateDuration=\"500\"\n    tools:ignore=\"MissingDefaultResource\" />"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/play_mode_level_list.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<level-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item\n        android:drawable=\"@drawable/ic_play_btn_loop\"\n        android:maxLevel=\"0\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_shuffle\"\n        android:maxLevel=\"1\" />\n    <item\n        android:drawable=\"@drawable/ic_play_btn_one\"\n        android:maxLevel=\"2\" />\n</level-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/seek_bar_progress_style.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:id=\"@android:id/background\">\n        <shape>\n            <corners android:radius=\"1dp\" />\n            <solid android:color=\"@color/white_24p\" />\n        </shape>\n    </item>\n    <item android:id=\"@android:id/progress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red\" />\n            </shape>\n        </clip>\n    </item>\n    <item android:id=\"@android:id/secondaryProgress\">\n        <clip>\n            <shape>\n                <corners android:radius=\"1dp\" />\n                <solid android:color=\"@color/red_30p\" />\n            </shape>\n        </clip>\n    </item>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/seekbar_circle_red_border.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<shape\n    xmlns:android= \"http://schemas.android.com/apk/res/android\"\n    android:shape= \"oval\"\n    android:useLevel= \"false\" >\n    <stroke android:color=\"@color/white\"\n        android:width=\"5dp\"/>\n    <solid android:color= \"@color/red\" />\n</shape>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/seekbar_thumb.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\" >\n    <item>\n        <shape>\n            <size\n                android:height=\"15dp\"\n                android:width=\"15dp\" />\n            <solid android:color=\"@android:color/transparent\" />\n        </shape>\n    </item>\n    <item android:drawable=\"@drawable/seekbar_circle_red_border\" android:state_pressed=\"false\"/>\n</layer-list>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/switch_thumb_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorPrimary\" android:state_checked=\"true\" />\n    <item android:color=\"@color/textColorPrimary\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/drawable/switch_track_selector.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<selector xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:color=\"@color/colorTrackCheck\" android:state_checked=\"true\" />\n    <item android:color=\"@color/colorTrackUnCheck\" />\n</selector>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/values/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#FF0000</color>\n    <color name=\"colorTrackCheck\">#CD4329</color>\n    <color name=\"colorTrackUnCheck\">#DDDEEE</color>\n    <color name=\"colorOnPrimary\">#FFFFFF</color>\n    <color name=\"colorPrimaryDark\">#005e91</color>\n    <color name=\"textColorPrimary\">#333333</color>\n\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n    <color name=\"colorBackground\">#FFFFFF</color>\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/values/dimens.xml",
    "content": "<resources>\n    <dimen name=\"fab_margin\">16dp</dimen>\n    <dimen name=\"navigation_height\">56dp</dimen>\n    <dimen name=\"title_bar_height\">82dp</dimen>\n    <dimen name=\"title_bar_text_height\">45dp</dimen>\n    <dimen name=\"status_bar_height\">36dp</dimen>\n    <dimen name=\"recycler_padding\">20dp</dimen>\n    <!-- Default screen margins, per the Android Design guidelines. -->\n    <dimen name=\"fragment_horizontal_margin\">16dp</dimen>\n    <dimen name=\"fragment_vertical_margin\">16dp</dimen>\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/values/ids.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <item name=\"nav_host_fragment_activity_main\" type=\"id\" />\n    <item name=\"rv_pl_list\" type=\"id\" />\n    <item name=\"home_recycle_view\" type=\"id\" />\n    <item name=\"homeTabLayout\" type=\"id\" />\n    <item name=\"view_title_bg\" type=\"id\" />\n    <item name=\"homeViewPager2\" type=\"id\" />\n    <item name=\"fmt_a\" type=\"id\" />\n    <item name=\"fmt_b\" type=\"id\" />\n    <item name=\"fmt_c\" type=\"id\" />\n    <item name=\"fmt_d\" type=\"id\" />\n    <item name=\"fmt_e\" type=\"id\" />\n    <item name=\"buttom_navigation\" type=\"id\" />\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/values/strings.xml",
    "content": "<resources>\n    <!-- 异常错误提示  by Atar start -->\n\n    <string name=\"title_home\">首页</string>\n    <string name=\"title_collection\">收藏</string>\n    <string name=\"title_sample\">示例</string>\n    <string name=\"title_setting\">设置</string>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/values/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n    <!-- Base application theme. -->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimary</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/design_default_color_background</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/black</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimary</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimaryDark</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/values-night/colors.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <color name=\"black\">#FF000000</color>\n    <color name=\"white\">#FFFFFFFF</color>\n    <color name=\"colorPrimary\">#FF0000</color>\n    <color name=\"colorTrackCheck\">#CD4329</color>\n    <color name=\"colorTrackUnCheck\">#555555</color>\n    <color name=\"colorOnPrimary\">#FAFAFA</color>\n    <color name=\"colorPrimaryDark\">#007A00</color>\n    <color name=\"colorBackground\">#222222</color>\n    <color name=\"textColorPrimary\">#B0B0B0</color>\n\n    <color name=\"color_ff2B9E62\">#2B9E62</color>\n    <color name=\"colorAccent\">#FF0000</color>\n    <color name=\"color_FFCD4339\">#CD4339</color>\n    <color name=\"white_24p\">#3DFFFFFF</color>\n    <color name=\"red\">#F44336</color>\n    <color name=\"red_30p\">#4CF44336</color>\n    <color name=\"color_white\">#ffffff</color>\n    <color name=\"color_translucent\">#00000000</color>\n    <color name=\"color_999999\">#999999</color>\n    <color name=\"color_translucent30\">#30000000</color>\n    <color name=\"color_translucent90\">#F44336</color>\n    <color name=\"purple_500\">#F44336</color>\n    <!--    <color name=\"color_select\">#0066C0</color>-->\n\n\n    <color name=\"color_random_1\">#CD4339</color>\n    <color name=\"color_random_2\">#158bb8</color>\n    <color name=\"color_random_3\">#5dbe8a</color>\n    <color name=\"color_random_4\">#78D1FF</color>\n    <color name=\"color_random_5\">#93000A</color>\n    <color name=\"color_random_6\">#605A7D</color>\n    <color name=\"color_random_7\">#827717</color>\n    <color name=\"color_random_8\">#F57F17</color>\n    <color name=\"color_random_9\">#EC407A</color>\n    <color name=\"color_random_0\">#4A148C</color>\n    <color name=\"color_random_10\">#4527A0</color>\n    <color name=\"color_random_11\">#0097A7</color>\n\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/values-night/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n<!--    &lt;!&ndash; Base application theme. &ndash;&gt;-->\n<!--    <style name=\"Base.Theme.SSMusic\" parent=\"Theme.MaterialComponents.DayNight.NoActionBar\">-->\n<!--        &lt;!&ndash; Customize your light theme here. &ndash;&gt;-->\n<!--        <item name=\"colorPrimary\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"android:textColorHighlight\">@color/colorOnPrimary</item>-->\n<!--        <item name=\"android:colorBackground\">@color/colorBackground</item>-->\n<!--        <item name=\"android:textColorPrimary\">@color/textColorPrimary</item>-->\n<!--        <item name=\"windowActionBar\">false</item>-->\n<!--        <item name=\"windowNoTitle\">true</item>-->\n<!--        <item name=\"android:statusBarColor\">@color/black</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:colorBackground\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:statusBarColor\">?colorSurface</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:windowLightStatusBar\">true</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowAnimationStyle\">@style/dialog_Animation_Translucent</item>&ndash;&gt;-->\n<!--    </style>-->\n\n<!--    <style name=\"Loading\" parent=\"@android:style/Theme.Dialog\">-->\n<!--        <item name=\"android:windowFrame\">@null</item>-->\n<!--        <item name=\"android:windowIsFloating\">true</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash; 设置背景色 透明&ndash;&gt;-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        &lt;!&ndash; 设置是否显示背景 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimEnabled\">true</item>-->\n<!--        &lt;!&ndash; 设置背景透明度 &ndash;&gt;-->\n<!--        <item name=\"android:backgroundDimAmount\">0</item>-->\n<!--        &lt;!&ndash; 设置点击空白不消失 &ndash;&gt;-->\n<!--        <item name=\"android:windowCloseOnTouchOutside\">false</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme\" parent=\"android:Theme.NoTitleBar.Fullscreen\">-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@color/white</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        &lt;!&ndash;        该方式看不到启动页&ndash;&gt;-->\n\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        &lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview_dark</item>-->\n\n<!--    </style>-->\n\n<!--    <style name=\"Transparent\" parent=\"Theme.AppCompat.Light.NoActionBar\">-->\n<!--        <item name=\"android:background\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowIsTranslucent\">true</item>-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--        <item name=\"android:windowBackground\">@android:color/transparent</item>-->\n<!--        <item name=\"android:windowFullscreen\">true</item>-->\n<!--        <item name=\"android:windowAnimationStyle\">@android:style/Animation.Translucent</item>-->\n<!--    </style>-->\n\n\n<!--    <style name=\"CircleStyle\">-->\n<!--        <item name=\"cornerFamily\">rounded</item>-->\n<!--        <item name=\"cornerSize\">50%</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"RippleWhite80\" parent=\"Theme.MaterialComponents.Light.NoActionBar\">-->\n<!--        <item name=\"android:colorControlHighlight\">#FF4081</item>-->\n<!--        &lt;!&ndash;        <item name=\"paddingStart\">20dp</item>&ndash;&gt;-->\n<!--        &lt;!&ndash;        <item name=\"android:paddingTop\">20dp</item>&ndash;&gt;-->\n<!--        <item name=\"android:radius\">20dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"onTextOff\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"android:textColor\">@color/white</item>-->\n<!--        <item name=\"android:textSize\">16dp</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"ssStyle\" parent=\"Theme.SSMusic\">-->\n<!--        <item name=\"colorControlActivated\">@color/colorPrimaryDark</item>-->\n<!--        <item name=\"colorSwitchThumbNormal\">@color/color_999999</item>-->\n<!--        <item name=\"android:colorForeground\">@color/colorPrimary</item>-->\n<!--    </style>-->\n\n<!--    <style name=\"TabLayout.TextAppearance\" parent=\"TextAppearance.AppCompat\">-->\n<!--        &lt;!&ndash;        <item name=\"android:textStyle\">nomal</item>&ndash;&gt;-->\n<!--        <item name=\"android:textSize\">20dp</item>-->\n<!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/values-v27/themes.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n\n<!--    <style name=\"LauncherTheme2\" parent=\"Base.Theme.SSMusic\">-->\n<!--        <item name=\"android:windowNoTitle\">true</item>-->\n<!--&lt;!&ndash;        <item name=\"android:windowFullscreen\">true</item>&ndash;&gt;-->\n<!--&lt;!&ndash;        <item name=\"statusBarBackground\">@color/colorPrimary</item>&ndash;&gt;-->\n<!--        <item name=\"android:statusBarColor\">@color/white</item>-->\n<!--        <item name=\"android:windowBackground\">@drawable/splash_preview</item>-->\n<!--        &lt;!&ndash;指定页面可以延伸到刘海（异性）区域  SDK_INT >= 28，兼容异形屏时用到&ndash;&gt;-->\n<!--        <item name=\"android:windowLayoutInDisplayCutoutMode\">shortEdges</item>-->\n<!--    </style>-->\n\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource/src/main/res/values-v29/themes.xml",
    "content": "<resources xmlns:tools=\"http://schemas.android.com/tools\">\n\n<!--    <style name=\"Theme.SSMusic\" parent=\"Base.Theme.SSMusic\">-->\n    <!--        &lt;!&ndash; Transparent system bars for edge-to-edge. &ndash;&gt;-->\n    <!--        <item name=\"android:navigationBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:statusBarColor\">@android:color/transparent</item>-->\n    <!--        <item name=\"android:windowLightStatusBar\">?attr/isLightTheme</item>-->\n    <!--    </style>-->\n</resources>"
  },
  {
    "path": "WX/WX-Maven/WX-Plugin/README.md",
    "content": "# WXDynamicPlugin 全动态化框架 接入详细指南\n\n#### 特别注意：前期没完全明白前，先按照下面的工程目录设计方式接入，等自己接入成功后，完整接入后再考虑，建议优化都可以，或许会明白为什么这样设计，同时确保已经看完了 [插件内部详细介绍](https://gitee.com/wgllss888/WXDynamicPlugin/blob/master/WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample)    \n\n### 一、接入Host设计（参照示例工程）\n <img src=\"https://gitee.com/wgllss888/WXDynamicPlugin/raw/master/WX-Resource/wx-pic/host.jpeg\" width=\"1014\" height=\"364\"/>    \n  \n1. host总共设计成5个工程，其中1个宿主sample工程 4个宿主工程依赖的sammple-lib工程,\n2. host中主工程sample 依赖内容也先按照我的依赖设计 ，依赖4个我的动态化框架（Constant-Lib，Download-Lib，Lib-Impl,Version-Lib），4个设计的sample-lib 工程，4个ui需要的（appcompat，recyclerview，material，constraintlayout）,主工程sample必须要有4个文件（FaceImpl，VersionImpl，SampleApplication，assets下loading_1000）\n3. sample-lib/common-re 工程中 ，到公共代码带res资源的模块lib，同时必须添加以下依赖    \n    `implementation 'androidx.activity:activity-ktx:1.3.0-rc01'`  \n    `implementation 'androidx.fragment:fragment-ktx:1.4.0-alpha04'`  \n    `implementation \"androidx.core:core-ktx:$rootProject.ext.kotlin_version\"`  \n 因为我全动态化框架是用kotlin +协程写的，上面三个必须要有  \n    `implementation 'com.github.bumptech.glide:glide:4.13.2'` 图片加载    \n    `androidx.startup:startup-runtime:1.1.1` 启动框架 ，我框架里面用到了，我放到了 business-re-lib里面去了 \n4. sample-lib/business-re-lib 工程添加哪些依赖？\n   自己app自己已经已知了的依赖框架： 总要有网络请求框架吧，retrofit,okhttp,或者权限框架吧，比如自己做音乐类app,视频类app,可以把想用的音视频sdk ，或者其他第三方框框架第一次就接入,我建议： 相关网络比如retrofit,okhttp,jetpack全套库，图片加载库，音视频库都可以在此lib工程下添加依赖进去，什么？前面不我是提出了，宿主就一个空壳子吗？因为这些基本万年不修改，没有必要做成插件，浪费下载的体积和时间，加载插件性能，要强行把宿主做成空壳子也行，那就需要自己单独特殊处理这些框架，感觉这部分又是万年不动，不要浪费太多精力特殊处理\n5. sample-lib/maven-wgllss-dynamic-host-library  工程主要统一依赖, 并注册宿主必要的 androidManifest里面activity4中启动模式，service ，和首页HomeActivity\n6. sample-lib/maven-wgllss-dynamic-host-skin-resource-lib 宿主工程必要的 资源，比如桌面icon,注册到androidManifest下需要的主题等，还有第一次展示loading页时下载插件时展示的图片等\n7. sample-lib/下四个是lib工程，理论上宿主就总共5个工程，向外展示的代码就这么多，插件工程是可以依赖宿主下这4个lib工程的，我示例下也有，比如，宿主application 下 设置秤全局 application的context 在 common-re-lib工程中的AppGlobals，插件是可以直接依赖该 common-re-lib 使用的\n### 二、插件接入设计\n1. 前面介绍过，我框架设计的插件基本思路：   \n14个插件工程 （其中maven-wgllss-sample-loader-version 工程打包成 2个工程 ：一个classes_version_dex，一个vc文件）    \n4个用于方便打包的工程（Maven-Wgllss-Dynamic-Plugin-Generate下面）  \n2个用于动态更新宿主里面逻辑的：  \n&emsp;&emsp;1.1：动态实现更换下载插件地址，文件，以及debug 等 (Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl) 宿主默认有一份， 可以不用  \n&emsp;&emsp;1.2：动态实现根据版本下载插件，加载插件 (Maven-Wgllss-Dynamic-Plugin-Loader-Impl) 宿主默认有一份，可以不用）   \n2. 哪些插件工程程是必须？ \n 可对照[插件内部详细介绍](https://gitee.com/wgllss888/WXDynamicPlugin/blob/master/WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample)   内相对应的模块详细说明研究   \n\n| 工程名                                      | 介绍          | 是否必须 |\n|--------------------------------------------|-------------|------|\n| Maven-Wgllss-Dynamic-Plugin-Common-Library | 公共代码库插件模块   | 是    |\n| maven-wgllss-sample-business-library       | 公共业务代码库插件模块 | 是    |\n| maven-wgllss-sample-assets-source-apk       | Assets资源插件模块 | 如果没有可不用    |\n| maven-wgllss-sample-skin-resource-apk       | 皮肤插件模块 | 是    |\n| maven-wgllss-sample-ui-loading       | 启动页插件模块 | 是    |\n| maven-wgllss-sample-ui-home       | 首页插件模块 | 是    |\n| maven-wgllss-sample-ui-other-lib       | 首页之外fragment插件模块 | 如果没有可不用    |\n| maven-wgllss-sample-ui-other       | 首页之外fragment布局资源插件模块 | 如果没有可不用    |\n| maven-wgllss-sample-ui-other2-lib2       | 首页之外的Activity插件模块 | 如果没有可不用    |\n| maven-wgllss-sample-ui-other2       | 首页之外的Activity插件模块布局资源 | 如果没有可不用    |\n| maven-wgllss-sample-loader-version       | 各个插件版本模块 | 是    |\n| Maven-Wgllss-Dynamic-Plugin-SDK下面2个工程       | 真正插件框架SDK代码  | 是    |\n| Maven-Wgllss-Dynamic-Plugin-Generate下4个工程       | 辅助打包 | 是    |\n| Maven-Wgllss-Dynamic-Plugin-Manager       | 管理插件中 activity跳转,service 启动绑定 ，皮肤，资源等 | 是    |\n| Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl       | 动态实现更换下载插件地址，文件，以及debug 等 | 可不用    |\n| Maven-Wgllss-Dynamic-Plugin-Loader-Impl       | 动态实现根据版本下载插件，加载插件 | 可不用    |\n\n\n3. 配置里面哪些能改哪些不能改？  \n&emsp;&emsp;3.1宿主中VersionImpl对应 升级插件时修改maven-wgllss-sample-loader-version工程里 LoaderVersionImpl  ，不动宿主  \n&emsp;&emsp;3.2宿主中FaceImpl对于升级插件时 修改Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl工程里DownLoadFaceImpl ，不动宿主  \n&emsp;&emsp;3.3宿主中SampleApplication内 ` WXDynamicLoader.instance.installPlugin(base, FaceImpl(), VersionImpl())`内部怎么判断下载，  \n&emsp;&emsp;&emsp;&emsp;什么时候下载，什么时候加载如果逻辑需要修改，则修改Maven-Wgllss-Dynamic-Plugin-Loader-Impl内的 LoaderManagerImpl类下方法，  \n&emsp;&emsp;&emsp;&emsp;可以自己在该工程下见文件实现自己修改，父类方法可以重载修改，里面内容代码也可以全部copy过来全部自己实现，不动宿主    \n&emsp;&emsp;3.4、要添加删除的模块还有哪些不能自定义？  \n&emsp;&emsp;&emsp;&emsp;FaceImpl和DownLoadFaceImpl中  getMapDLU的map key不能自定义，如下：\n\n```\n /**\n     * 下面要添加删除 map内内容 map的key 不能自定义\n     * 即:VERSION,COMMON,WEB_ASSETS,COMMON_BUSINESS,HOME,RESOURCE_SKIN,RUNTIME,MANAGER,FIRST,CLMD,CDLFD不能动\n     */\n    override fun getMapDLU() = mutableMapOf(\n        VERSION to realUrl(\"classes_version_dex\"), // 对应 maven-wgllss-sample-loader-version打包后插件\n        COMMON to realUrl(\"classes_common_lib_dex\"), // 对应 Maven-Wgllss-Dynamic-Plugin-Common-Library打包后插件\n        WEB_ASSETS to realUrl(\"classes_business_web_res\"), // 对应 maven-wgllss-sample-assets-source-apk打包后插件\n        COMMON_BUSINESS to realUrl(\"classes_business_lib_dex\"), // 对应 maven-wgllss-sample-business-library打包后插件\n        HOME to realUrl(\"classes_home_dex\"), // 对应 maven-wgllss-sample-ui-home打包后插件\n        RESOURCE_SKIN to realUrl(\"classes_common_skin_res\"), // 对应 maven-wgllss-sample-skin-resource-apk打包后插件\n        RUNTIME to realUrl(\"classes_wgllss_dynamic_plugin_runtime\"),// 对应 Maven-Wgllss-Dynamic-Plugin-RunTime-Apk打包后插件\n        MANAGER to realUrl(\"classes_manager_dex\"), // 对应 Maven-Wgllss-Dynamic-Plugin-Manager打包后插件\n        FIRST to realUrl(\"classes_loading_dex\"), // 对应 maven-wgllss-sample-ui-loading打包后插件\n        CLMD to realUrl(\"class_loader_impl_dex\"), // 对应 Maven-Wgllss-Dynamic-Plugin-Loader-Impl打包后插件\n        CDLFD to realUrl(\"classes_downloadface_impl_dex\") // 对应 Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl打包后插件\n    )\n```\n\n&emsp;&emsp;&emsp;&emsp;VersionImpl和LoaderVersionImpl中  getMapDLU的map key不能自定义，如下：\n\n\n```\n /**\n     * 下面要添加删除 map内内容 map的key 不能自定义\n     * 即:COMMON,WEB_ASSETS,COMMON_BUSINESS,RUNTIME,MANAGER,RESOURCE_SKIN,HOME不能动\n     */\n    override fun getMapDLU() = linkedMapOf(\n        COMMON to Pair(\"classes_common_lib_dex\", 1000), //Maven-Wgllss-Dynamic-Plugin-Common-Library 插件工程 和 版本号\n        WEB_ASSETS to Pair(\"classes_business_web_res\", 1000),  //maven-wgllss-sample-assets-source-apk 插件工程 和版本号\n        COMMON_BUSINESS to Pair(\"classes_business_lib_dex\", 1001), //maven-wgllss-sample-business-library 插件工程 和 版本号\n        RUNTIME to Pair(\"classes_wgllss_dynamic_plugin_runtime\", 1000), //Maven-Wgllss-Dynamic-Plugin-RunTime-Apk 插件工程 和 版本号\n        MANAGER to Pair(\"classes_manager_dex\", 1000), // Maven-Wgllss-Dynamic-Plugin-Manager 插件工程 和 版本号\n        RESOURCE_SKIN to Pair(\"classes_common_skin_res\", 1000), // maven-wgllss-sample-skin-resource-apk 插件工程 和 版本号\n        HOME to Pair(\"classes_home_dex\", 1000)//maven-wgllss-sample-ui-home 插件工程 和 版本号\n    )\n```\n\n### 三、如何动态修改插件化框架SDK？\n1. 插件化代理分发实现,目前只添加了最基本的：如下\n\n```\npublic interface WXHostActivityDelegate {\n\n    void attachContext(FragmentActivity context, Resources resources);\n\n    void onCreate(Bundle savedInstanceState);\n\n    void onRestart();\n\n    void onStart();\n\n    void onResume();\n\n    void onPause();\n\n    void onStop();\n\n    void onDestroy();\n\n    void lazyInitValue();\n\n    void onSaveInstanceState(Bundle outState);\n\n    void onConfigurationChanged(Configuration newConfig);\n}\n\n```\n比如：开发过程中想用 onBackPressed等，那么直接修改 Maven-Wgllss-Dynamic-Plugin-SDK工程下，Maven-Wgllss-Dynamic-Plugin-Library的WXHostActivityDelegate ，在里面添加 onBackPressed等，然后再去 Maven-Wgllss-Dynamic-Plugin-RunTime-Apk下HostPluginActivity内修改代理改方法，其他的或者service 依次类推。   \n2. 为什么不一次性像shadow把所有方法全部处理完？  \n   按需处理，处理越多插件SDK体积越大，下载越耗时，所以自己需要根据自己项目需求，需要什么添加什么，做到全动态化\n\n### 四、插件开发过程中注意事项\n\n1. 首页模块启动后，需要检查之前旧版本本地插件是否需要删除：  \n   需要调用一句代码` PluginManager.instance.deleteOldFile()`  \n   示例工程中是这样的： 在maven-wgllss-sample-ui-home工程下 HomeActivity内\n\n```\n    override fun lazyInitValue() {\n        window.setBackgroundDrawable(null)//去掉主题背景颜色\n        if (viewModel.isFirst) {\n            viewModel.lazyTabView()\n            viewModel.isFirst = false\n        }\n        initNavigation()\n        addContentView(navigationView, navigationView.layoutParams)\n        initNavigation(navigationView)\n        lifecycleScope.launch(Dispatchers.IO) {\n            PluginManager.instance.deleteOldFile()//检查是否有旧版本插件文件需要删除\n        }\n    }\n```\n\n2. 首页单独设计成插件，首页HomeActivity是真实注册在宿主AndroidManifest中的：如下：  \n在宿主 WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-library/AndroidManifest.xml中：\n\n```\n <application>\n\n        <activity\n            android:name=\"com.wgllss.dynamic.ui.HomeActivity\"\n            android:exported=\"true\"\n            android:theme=\"@style/LauncherTheme2\">\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```\n所以maven-wgllss-sample-ui-home工程中所有开发，context上下文和原生一样，唯一注意时：HomeActivity的包名路径com.wgllss.dynamic.ui最好不要动，否则要动宿主host中AndroidManifest中注册路径，我示例框架已经考虑到这个了，不同工程迁移，HomeActivity设计成不随业务动，所以如下：  \n<img src=\"https://gitee.com/wgllss888/WXDynamicPlugin/raw/master/WX-Resource/wx-pic/home.jpeg\" width=\"564\" height=\"584\"/>  \n如上图所示：UI/HomeActivity 已经不在sample包下面，不在业务模块包下面了，把我整个工程目录copy过去，自己业务包名更改，只需修改sample，HomeActivity页不受影响\n\n3. 上面2中所提到的com.wgllss.dynamic.ui.HomeActivity注册到AndroidManifest中注册路径，实际上也是maven-wgllss-sample-ui-loading工程下com.wgllss.dynamic.ui.HomeActivity，两个工程下的HomeActivity包路径必须保持一直\n\n4. maven-wgllss-sample-ui-other-lib工程页面所对应的Activity实际也是com.wgllss.dynamic.ui.HomeActivity\n\n5. 插件占坑位的相关Activity,service注册在宿主下  WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-library/AndroidManifest.xml中：如下：     \n\n```\n   <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginStandardActivity\"\n            android:theme=\"@style/LauncherTheme2\" />\n\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginSingleInstanceActivity\"\n            android:theme=\"@style/LauncherTheme2\" />\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginSingleTaskActivity\"\n            android:theme=\"@style/LauncherTheme2\" />\n        <activity\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginSingleTopActivity\"\n            android:theme=\"@style/LauncherTheme2\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginStartStickyService\"\n            android:enabled=\"true\"\n            android:exported=\"true\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginStartNotStickyService\"\n            android:enabled=\"true\"\n            android:exported=\"true\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginStartRedeliverIntentService\"\n            android:enabled=\"true\"\n            android:exported=\"true\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginStartStickyCompatibilityService\"\n            android:enabled=\"true\"\n            android:exported=\"true\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginProcessStartStickyService\"\n            android:enabled=\"true\"\n            android:exported=\"true\"\n            android:process=\":processSticky\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginProcessStartNotStickyService\"\n            android:enabled=\"true\"\n            android:exported=\"true\"\n            android:process=\":processNotSticky\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginProcessStartRedeliverIntentService\"\n            android:enabled=\"true\"\n            android:exported=\"true\"\n            android:process=\":processRedeliver\" />\n\n        <service\n            android:name=\"com.wgllss.dynamic.plugin.runtime.PluginProcessStartStickyCompatibilityService\"\n            android:enabled=\"true\"\n            android:exported=\"true\"\n            android:process=\":processStickyCompatibility\" />\n```\n\n对应的代码code就是插件化框架SDK:  WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK下面的工程  \n实际插件代理 假的Activity,Service示例工程代码在  WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2 工程里面  \n##### 这里在other2-lib2工程里面特别注意：里面的上下文Activity的this,需要用 maven-wgllss-sample-ui-other2-lib2下BasePluginActivity的activity如下：  \n\n\n```\n override fun <T : View> findViewById(id: Int): T {\n        return activity.findViewById(id)\n    }\n\n    override fun getIntent() = activity.intent\n\n    override fun getWindow() = activity.window\n\n    override fun setRequestedOrientation(requestedOrientation: Int) {\n        activity.requestedOrientation = requestedOrientation\n    }\n```\n这里本来可以 this.intent要用 activity.intent   ，this.window要用 activity.window，或者要用到的，在BasePluginActivity里面都给转成 activity.xxx等\n\n##### 而 HomeActivity里面的this,则不需要\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "WX-Resource/skins/skins.txt",
    "content": "[{\"skinColor\":\"#158bb8\",\"skinUrl\":\"skin_dark_green.apk\",\"dlfn\":\"skin_dark_green\"},{\"skinColor\":\"#007A00\",\"skinUrl\":\"skin_green.apk\",\"dlfn\":\"skin_green\"},{\"skinColor\":\"#FF0000\",\"skinUrl\":\"red_green.apk\",\"dlfn\":\"skin_red\"},{\"skinColor\":\"#4A148C\",\"skinUrl\":\"blue.apk\",\"dlfn\":\"blue\"},{\"skinColor\":\"#D0006A\",\"skinUrl\":\"pink.apk\",\"dlfn\":\"pink\"},{\"skinColor\":\"#827717\",\"skinUrl\":\"brown.apk\",\"dlfn\":\"brown\"},{\"skinColor\":\"#F57F17\",\"skinUrl\":\"orange.apk\",\"dlfn\":\"orange\"},{\"skinColor\":\"#55000A\",\"skinUrl\":\"dark_red.apk\",\"dlfn\":\"dark_red\"},{\"skinColor\":\"#3AAF00\",\"skinUrl\":\"light_green.apk\",\"dlfn\":\"light_green\"},{\"skinColor\":\"#330066\",\"skinUrl\":\"dark_blue.apk\",\"dlfn\":\"dark_blue\"}]"
  },
  {
    "path": "build.gradle",
    "content": "plugins {\n    alias(libs.plugins.android.application) apply false\n    alias(libs.plugins.jetbrains.kotlin.android) apply false\n    alias(libs.plugins.compose.compiler) apply false\n    alias(libs.plugins.android.library) apply false\n    alias(libs.plugins.google.protobuf.plugin) apply false\n}\n\next {\n\n    def inputSteam = project.rootProject.file('local.properties').newDataInputStream()\n    def properties = new Properties()\n    properties.load(inputSteam)\n    workingDirPath = properties.getProperty('workingDirPath')\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}"
  },
  {
    "path": "gradle/libs.versions.toml",
    "content": "[versions]\n\n\ntargetSdkVersion = \"34\"\nminSdk = \"24\"\n\n\n\n\nagp = \"8.6.0\"\n#kotlin = \"1.9.0\"\nkotlin = \"2.0.20\"\n#protobuf_p_ver = \"\"\ncoreKtx = \"1.10.1\"\n#coreKtx = \"1.12.0\"\njunit = \"4.14-SNAPSHOT\"\njunitVersion = \"1.1.5\"\nespressoCore = \"3.5.1\"\nappcompat = \"1.7.0\"\nconstraintlayout = \"2.1.4\"\nlifecycleRuntimeKtx = \"2.6.1\"\nlifecycleLivedataKtx = \"2.6.1\"\nlifecycleViewmodelKtx = \"2.6.1\"\nnavigationFragmentKtx = \"2.6.0\"\nnavigationUiKtx = \"2.6.0\"\nactivityCompose = \"1.9.2\"\ncomposeBom = \"2024.09.00\"\nconstraintlayoutCompose = \"1.1.0-alpha09\"\nandroidxNavigation = \"2.8.0\"\nactivity = \"1.9.2\"\nruntimeLivedata = \"1.7.2\"\ncoilCompose = \"2.7.0\"\nnavigationRuntimeKtx = \"2.7.0-beta02\"\nconstraintlayoutVersion = \"2.2.0-alpha09\"\ncollapsingToolbar = \"2.3.5\"\nprotobufVer = \"3.21.7\"\nprotobufPlugin = \"0.9.3\"\nokioVer = \"3.9.0\"\nroom = \"2.6.1\"\nandroidxAppcompat = \"1.7.0\"\ngoogleMaterial = \"1.10.0\"\nannotations = \"5.0.0-rc01\"\nwgllssDynamicHostConstantLib = \"1.0.0.6\"\nwgllssDynamicHostDownloadLib = \"1.0.0.6\"\nwgllssDynamicHostLibImpl = \"1.0.0.8\"\nwgllssDynamicHostVersionLib = \"1.0.0.5\"\nxxpermissions = \"16.2\"\npalettektx = \"1.0.0\"\nexoplayer = \"2.18.5\"\nrecyclerview = \"1.3.0\"\nactivityKtx = \"1.8.0\"\nfragmentKtx = \"1.8.0\"\nlifecycleLivedata = \"2.0.0\"\n\nandroidxLegacyLegacySupportV42 = \"1.0.0\"\nautoService = \"1.0\"\ncompileSdk = \"34\"\nkotlinpoet = \"1.14.2\"\nsqliteFramework = \"2.4.0\"\nconverterGson = \"2.9.0\"\nglide = \"5.0.0-rc01\"\n#googleExtensionMediasession = \"2.18.5\"\njsoupJsoup = \"1.15.3\"\naviLibrary = \"2.1.3\"\nmmkv = \"1.2.15\"\nsquareupLoggingInterceptorVersion = \"4.12.0\"\nswiperefreshlayoutVersion = \"1.1.0\"\nstartupRuntimeVersion = \"1.1.1\"\n\n[libraries]\nandroidx-core-ktx = { group = \"androidx.core\", name = \"core-ktx\", version.ref = \"coreKtx\" }\nandroidx-legacy-legacy-support-v44 = { module = \"androidx.legacy:legacy-support-v4\", version.ref = \"androidxLegacyLegacySupportV42\" }\nandroidx-sqlite-framework = { module = \"androidx.sqlite:sqlite-framework\", version.ref = \"sqliteFramework\" }\nauto-service = { module = \"com.google.auto.service:auto-service\", version.ref = \"autoService\" }\ncom-squareup-okhttp3-logging-interceptor = { module = \"com.squareup.okhttp3:logging-interceptor\", version.ref = \"squareupLoggingInterceptorVersion\" }\nconverter-gson = { module = \"com.squareup.retrofit2:converter-gson\", version.ref = \"converterGson\" }\nconverter-scalars = { module = \"com.squareup.retrofit2:converter-scalars\", version.ref = \"converterGson\" }\nglide = { module = \"com.github.bumptech.glide:glide\", version.ref = \"glide\" }\n#google-extension-mediasession-v2185 = { module = \"com.google.android.exoplayer:extension-mediasession\", version.ref = \"googleExtensionMediasession\" }\njunit = { group = \"junit\", name = \"junit\", version.ref = \"junit\" }\nandroidx-junit = { group = \"androidx.test.ext\", name = \"junit\", version.ref = \"junitVersion\" }\nandroidx-espresso-core = { group = \"androidx.test.espresso\", name = \"espresso-core\", version.ref = \"espressoCore\" }\nandroidx-appcompat = { group = \"androidx.appcompat\", name = \"appcompat\", version.ref = \"appcompat\" }\n#material = { group = \"com.google.android.material\", name = \"material\", version.ref = \"material\" }\n#androidx-constraintlayout = { group = \"androidx.constraintlayout\", name = \"constraintlayout\", version.ref = \"constraintlayout\" }\nandroidx-lifecycle-livedata-ktx = { group = \"androidx.lifecycle\", name = \"lifecycle-livedata-ktx\", version.ref = \"lifecycleLivedataKtx\" }\nandroidx-lifecycle-viewmodel-ktx = { group = \"androidx.lifecycle\", name = \"lifecycle-viewmodel-ktx\", version.ref = \"lifecycleViewmodelKtx\" }\nandroidx-navigation-fragment-ktx = { group = \"androidx.navigation\", name = \"navigation-fragment-ktx\", version.ref = \"navigationFragmentKtx\" }\nandroidx-navigation-ui-ktx = { group = \"androidx.navigation\", name = \"navigation-ui-ktx\", version.ref = \"navigationUiKtx\" }\n\nandroidx-lifecycle-runtime-ktx = { group = \"androidx.lifecycle\", name = \"lifecycle-runtime-ktx\", version.ref = \"lifecycleRuntimeKtx\" }\nandroidx-activity-compose = { group = \"androidx.activity\", name = \"activity-compose\", version.ref = \"activityCompose\" }\nandroidx-compose-bom = { group = \"androidx.compose\", name = \"compose-bom\", version.ref = \"composeBom\" }\nandroidx-ui = { group = \"androidx.compose.ui\", name = \"ui\" }\nandroidx-material3 = { group = \"androidx.compose.material3\", name = \"material3\" }\nandroidx-compose-material3-navigationSuite = { group = \"androidx.compose.material3\", name = \"material3-adaptive-navigation-suite\" }\nandroidx-compose-material3-adaptive = { group = \"androidx.compose.material3.adaptive\", name = \"adaptive\" }\nandroidx-compose-material3-adaptive-layout = { group = \"androidx.compose.material3.adaptive\", name = \"adaptive-layout\" }\nandroidx-compose-material3-adaptive-navigation = { group = \"androidx.compose.material3.adaptive\", name = \"adaptive-navigation\" }\nandroidx-compose-material3-windowSizeClass = { group = \"androidx.compose.material3\", name = \"material3-window-size-class\" }\nandroidx-constraintlayout = { group = \"androidx.constraintlayout\", name = \"constraintlayout \", version.ref = \"constraintlayout\" }\nandroidx-navigation-compose = { group = \"androidx.navigation\", name = \"navigation-compose\", version.ref = \"androidxNavigation\" }\nandroidx-navigation-testing = { group = \"androidx.navigation\", name = \"navigation-testing\", version.ref = \"androidxNavigation\" }\n\nkotlinpoet = { module = \"com.squareup:kotlinpoet\", version.ref = \"kotlinpoet\" }\nroom-compiler = { group = \"androidx.room\", name = \"room-compiler\", version.ref = \"room\" }\nroom-ktx = { group = \"androidx.room\", name = \"room-ktx\", version.ref = \"room\" }\nroom-runtime = { group = \"androidx.room\", name = \"room-runtime\", version.ref = \"room\" }\nglide-compiler = { group = \"com.github.bumptech.glide\", name = \"compiler\", version.ref = \"glide\" }\n\n\nandroidx-ui-graphics = { group = \"androidx.compose.ui\", name = \"ui-graphics\" }\nandroidx-ui-tooling = { group = \"androidx.compose.ui\", name = \"ui-tooling\" }\nandroidx-ui-tooling-preview = { group = \"androidx.compose.ui\", name = \"ui-tooling-preview\" }\nandroidx-ui-test-manifest = { group = \"androidx.compose.ui\", name = \"ui-test-manifest\" }\nandroidx-ui-test-junit4 = { group = \"androidx.compose.ui\", name = \"ui-test-junit4\" }\nandroidx-constraintlayout-compose = { group = \"androidx.constraintlayout\", name = \"constraintlayout-compose\", version.ref = \"constraintlayoutCompose\" }\n#androidx-appcompat = { group = \"androidx.appcompat\", name = \"appcompat\", version.ref = \"appcompatVersion\" }\n#material = { group = \"com.google.android.material\", name = \"material\", version.ref = \"materialVersion\" }\nandroidx-activity = { group = \"androidx.activity\", name = \"activity\", version.ref = \"activity\" }\nandroidx-runtime-livedata = { group = \"androidx.compose.runtime\", name = \"runtime-livedata\", version.ref = \"runtimeLivedata\" }\ncoil-compose = { group = \"io.coil-kt\", name = \"coil-compose\", version.ref = \"coilCompose\" }\nandroidx-navigation-runtime-ktx = { group = \"androidx.navigation\", name = \"navigation-runtime-ktx\", version.ref = \"androidxNavigation\" }\n\nkotlin-stdlib = { group = \"org.jetbrains.kotlin\", name = \"kotlin-stdlib-jdk8\", version.ref = \"kotlin\" }\n#exoplayer-core = { group = \"com.google.android.exoplayer\", name = \"exoplayer-core\", version.ref = \"exoplayer\" }\n#exoplayer-ui = { group = \"com.google.android.exoplayer\", name = \"exoplayer-ui\", version.ref = \"exoplayer\" }\nexoplayer-core = { module = \"com.google.android.exoplayer:exoplayer-core\", version.ref = \"exoplayer\" }\nexoplayer-ui = { module = \"com.google.android.exoplayer:exoplayer-ui\", version.ref = \"exoplayer\" }\ngoogle-extension-mediasession = { module = \"com.google.android.exoplayer:extension-mediasession\", version.ref = \"exoplayer\" }\n\n#    implementation \"me.onebone:toolbar-compose:2.3.5\"\ncollapsing-toolbar-scaffold = { group = \"me.onebone\", name = \"toolbar-compose\", version.ref = \"collapsingToolbar\" }\nmmkv = { module = \"com.tencent:mmkv\", version.ref = \"mmkv\" }\nokhttp3-okhttp = { module = \"com.squareup.okhttp3:okhttp\", version.ref = \"squareupLoggingInterceptorVersion\" }\norg-jsoup-jsoup = { module = \"org.jsoup:jsoup\", version.ref = \"jsoupJsoup\" }\nprotobuf = { group = \"com.google.protobuf\", name = \"protobuf-java\", version.ref = \"protobufVer\" }\nokio = { group = \"com.squareup.okio\", name = \"okio\", version.ref = \"okioVer\" }\nappcompat = { group = \"androidx.appcompat\", name = \"appcompat\", version.ref = \"androidxAppcompat\" }\ngoogle-material = { group = \"com.google.android.material\", name = \"material\", version.ref = \"googleMaterial\" }\nsquareup-retrofit = { module = \"com.squareup.retrofit2:retrofit\", version.ref = \"converterGson\" }\nstartup-runtime = { module = \"androidx.startup:startup-runtime\", version.ref = \"startupRuntimeVersion\" }\nswiperefreshlayout = { module = \"androidx.swiperefreshlayout:swiperefreshlayout\", version.ref = \"swiperefreshlayoutVersion\" }\nwgllss-dynamic-host-constant-lib = { module = \"io.github.wgllss:Wgllss-Dynamic-Host-Constant-Lib\", version.ref = \"wgllssDynamicHostConstantLib\" }\nwgllss-dynamic-host-download-lib = { module = \"io.github.wgllss:Wgllss-Dynamic-Host-Constant-Lib\", version.ref = \"wgllssDynamicHostDownloadLib\" }\nwgllss-dynamic-host-lib-impl = { module = \"io.github.wgllss:Wgllss-Dynamic-Host-Constant-Lib\", version.ref = \"wgllssDynamicHostLibImpl\" }\nwgllss-dynamic-host-version-lib = { module = \"io.github.wgllss:Wgllss-Dynamic-Host-Constant-Lib\", version.ref = \"wgllssDynamicHostVersionLib\" }\nxxpermissions = { module = \"com.github.getActivity:XXPermissions\", version.ref = \"xxpermissions\" }\nconstraintlayout = { group = \"androidx.constraintlayout\", name = \"constraintlayout\", version.ref = \"constraintlayoutVersion\" }\n#androidx.palette:palette-ktx:1.0.0\npalette-ktx = { group = \"androidx.palette\", name = \"palette-ktx\", version.ref = \"palettektx\" }\nandroidx-recyclerview = { group = \"androidx.recyclerview\", name = \"recyclerview\", version.ref = \"recyclerview\" }\nandroidx-activity-ktx = { group = \"androidx.activity\", name = \"activity-ktx\", version.ref = \"activityKtx\" }\nandroidx-fragment-ktx = { group = \"androidx.fragment\", name = \"fragment-ktx\", version.ref = \"fragmentKtx\" }\n#androidx-lifecycle-livedata = { group = \"androidx.lifecycle\", name = \"lifecycle-livedata\", version.ref = \"lifecycleLivedata\" }\n\n\n[plugins]\nandroid-application = { id = \"com.android.application\", version.ref = \"agp\" }\njetbrains-kotlin-android = { id = \"org.jetbrains.kotlin.android\", version.ref = \"kotlin\" }\ncompose-compiler = { id = \"org.jetbrains.kotlin.plugin.compose\", version.ref = \"kotlin\" }\nandroid-library = { id = \"com.android.library\", version.ref = \"agp\" }\njava-library = { id = \"java-library\" }\njava-kotlin = { id = \"kotlin\" }\njava = { id = \"java\" }\nkotlin-kapt = { id = \"kotlin-kapt\" }\nprotobuf-library = { id = \"com.google.protobuf\" }\ngoogle-protobuf-plugin = { id = \"com.google.protobuf\", version.ref = \"protobufPlugin\" }\n\n"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "content": "#Tue Sep 24 12:49:19 CST 2024\ndistributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-8.10-bin.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "gradle.properties",
    "content": "# Project-wide Gradle settings.\n# IDE (e.g. Android Studio) users:\n# Gradle settings configured through the IDE *will override*\n# any settings specified in this file.\n# For more details on how to configure your build environment visit\n# http://www.gradle.org/docs/current/userguide/build_environment.html\n# Specifies the JVM arguments used for the daemon process.\n# The setting is particularly useful for tweaking memory settings.\norg.gradle.jvmargs=-Xmx8192m -Dfile.encoding=UTF-8\n# When configured, Gradle will run in incubating parallel mode.\n# This option should only be used with decoupled projects. More details, visit\n# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects\n# org.gradle.parallel=true\n# AndroidX package structure to make it clearer which packages are bundled with the\n# Android operating system, and which are packaged with your app\"s APK\n# https://developer.android.com/topic/libraries/support-library/androidx-rn\nandroid.useAndroidX=true\n# Kotlin code style for this project: \"official\" or \"obsolete\":\nkotlin.code.style=official\n# Enables namespacing of each library's R class so that its R class includes only the\n# resources declared in the library itself and none from the library's dependencies,\n# thereby reducing the size of the R class for that library\nandroid.nonTransitiveRClass=true\nandroid.enableJetifier=true\n\nandroid.enableR8.fullMode=true\n\n#android.jetifier.blacklist = moshi-1.14.0.jar\nandroid.injected.testOnly=false\nandroid.caching=false\n\n"
  },
  {
    "path": "gradlew",
    "content": "#!/usr/bin/env sh\n\n#\n# Copyright 2015 the original author or authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#      https://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS='\"-Xmx64m\" \"-Xms64m\"'\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn () {\n    echo \"$*\"\n}\n\ndie () {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\nnonstop=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\n  NONSTOP* )\n    nonstop=true\n    ;;\nesac\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" -a \"$nonstop\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin or MSYS, switch paths to Windows format before running java\nif [ \"$cygwin\" = \"true\" -o \"$msys\" = \"true\" ] ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=`expr $i + 1`\n    done\n    case $i in\n        0) set -- ;;\n        1) set -- \"$args0\" ;;\n        2) set -- \"$args0\" \"$args1\" ;;\n        3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Escape application args\nsave () {\n    for i do printf %s\\\\n \"$i\" | sed \"s/'/'\\\\\\\\''/g;1s/^/'/;\\$s/\\$/' \\\\\\\\/\" ; done\n    echo \" \"\n}\nAPP_ARGS=`save \"$@\"`\n\n# Collect all arguments for the java command, following the shell quoting and substitution rules\neval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS \"\\\"-Dorg.gradle.appname=$APP_BASE_NAME\\\"\" -classpath \"\\\"$CLASSPATH\\\"\" org.gradle.wrapper.GradleWrapperMain \"$APP_ARGS\"\n\nexec \"$JAVACMD\" \"$@\"\n"
  },
  {
    "path": "gradlew.bat",
    "content": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \"License\");\n@rem you may not use this file except in compliance with the License.\n@rem You may obtain a copy of the License at\n@rem\n@rem      https://www.apache.org/licenses/LICENSE-2.0\n@rem\n@rem Unless required by applicable law or agreed to in writing, software\n@rem distributed under the License is distributed on an \"AS IS\" BASIS,\n@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n@rem See the License for the specific language governing permissions and\n@rem limitations under the License.\n@rem\n\n@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Resolve any \".\" and \"..\" in APP_HOME to make it shorter.\nfor %%i in (\"%APP_HOME%\") do set APP_HOME=%%~fi\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\"-Xmx64m\" \"-Xms64m\"\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto execute\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto execute\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %*\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "settings.gradle",
    "content": "pluginManagement {\n    repositories {\n        google {\n            content {\n                includeGroupByRegex(\"com\\\\.android.*\")\n                includeGroupByRegex(\"com\\\\.google.*\")\n                includeGroupByRegex(\"androidx.*\")\n            }\n        }\n        jcenter()\n        maven { url 'https://jitpack.io' }\n        maven { url 'https://repo1.maven.org/maven2/' }\n        maven { url 'https://s01.oss.sonatype.org/content/repositories/releases/' }\n        mavenCentral()\n        gradlePluginPortal()\n    }\n\n}\ndependencyResolutionManagement {\n    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)\n    repositories {\n        google()\n        jcenter()\n        maven { url 'https://jitpack.io' }\n        maven { url 'https://repo1.maven.org/maven2/' }\n        maven { url 'https://s01.oss.sonatype.org/content/repositories/releases/' }\n        mavenCentral()\n//        flatDir { dirs \"${rootProject.projectDir}/WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library/libs/\" }\n    }\n}\n\n\nrootProject.name = \"WXDynamicPlugin\"\n/***********************   以下 源码级接入方式 ***************************************/\n//include ':app'\n//\n//include ':wgllss-business-re-library'\n//include ':wgllss-common-re-library'\n//include ':wgllss-dynamic-host-library'\n//include ':wgllss-dynamic-host-skin-resource-lib'\n//\n//include ':Wgllss-Dynamic-Host-Version-Lib'\n//include ':Wgllss-Dynamic-Host-Lib'\n//\n//include ':Wgllss-Dynamic-Plugin-Common-Library'\n//\n//include ':Wgllss-Dynamic-Plugin-Manager'\n//include ':Wgllss-Dynamic-Plugin-Loader-Impl'\n//include ':Wgllss-Dynamic-Plugin-DownloadFace-Impl'\n//\n//include ':Wgllss-Dynamic-Plugin-RunTime-Apk'\n//include ':Wgllss-Dynamic-Plugin-Library'\n//\n//include ':wgllss-sample-assets-source-apk'\n//include ':wgllss-sample-business-library'\n//include ':wgllss-sample-loader-version'\n//include ':wgllss-sample-skin-resource-apk'\n//include ':wgllss-sample-ui-home'\n//include ':wgllss-sample-ui-loading'\n//include ':wgllss-sample-ui-other'\n//include ':wgllss-sample-ui-other2'\n//include ':wgllss-sample-ui-other2-lib2'\n//include ':wgllss-sample-ui-other-lib'\n//\n//include ':wgllss-sample-create-all-app'\n//include ':wgllss-sample-create-version-config-annotations'\n//include ':wgllss-sample-create-version-config-app'\n//include ':wgllss-sample-create-version-config-compiler'\n//\n////include ':dark-green-resource'\n////include ':green-resource'\n////include ':red-resource'\n////include ':blue-resource'\n////include ':pink-resource'\n////include ':brown-resource'\n////include ':orange-resource'\n////include ':dark-red-resource'\n////include ':light-green-resource'\n////include ':dark-blue-resource'\n//\n//project(':Wgllss-Dynamic-Plugin-RunTime-Apk').projectDir = file('WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk')\n//project(':Wgllss-Dynamic-Plugin-Library').projectDir = file('WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library')\n//\n//\n//project(':app').projectDir = file('WX/WX-Code/WX-Host/app')\n//\n//project(':wgllss-business-re-library').projectDir = file('WX/WX-Code/WX-Host/app-lib/wgllss-business-re-library')\n//project(':wgllss-common-re-library').projectDir = file('WX/WX-Code/WX-Host/app-lib/wgllss-common-re-library')\n//project(':wgllss-dynamic-host-library').projectDir = file('WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-library')\n//project(':wgllss-dynamic-host-skin-resource-lib').projectDir = file('WX/WX-Code/WX-Host/app-lib/wgllss-dynamic-host-skin-resource-lib')\n//\n//project(':Wgllss-Dynamic-Host-Version-Lib').projectDir = file('WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Version-Lib')\n//project(':Wgllss-Dynamic-Host-Lib').projectDir = file('WX/WX-Dynamic-Host-SDK-Lib/Wgllss-Dynamic-Host-Lib')\n//\n//\n//project(':Wgllss-Dynamic-Plugin-Common-Library').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Common-Library')\n//\n//project(':Wgllss-Dynamic-Plugin-Manager').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Manager')\n//project(':Wgllss-Dynamic-Plugin-Loader-Impl').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-Loader-Impl')\n//project(':Wgllss-Dynamic-Plugin-DownloadFace-Impl').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Manager/Wgllss-Dynamic-Plugin-DownloadFace-Impl')\n//\n//project(':Wgllss-Dynamic-Plugin-RunTime-Apk').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk')\n//project(':Wgllss-Dynamic-Plugin-Library').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library')\n//\n//project(':wgllss-sample-assets-source-apk').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-assets-source-apk')\n//project(':wgllss-sample-business-library').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-business-library')\n//project(':wgllss-sample-loader-version').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-loader-version')\n//project(':wgllss-sample-skin-resource-apk').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-skin-resource-apk')\n//project(':wgllss-sample-ui-home').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-home')\n//project(':wgllss-sample-ui-loading').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-loading')\n//project(':wgllss-sample-ui-other').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other')\n//project(':wgllss-sample-ui-other2').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2')\n//project(':wgllss-sample-ui-other2-lib2').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other2-lib2')\n//project(':wgllss-sample-ui-other-lib').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Sample/wgllss-sample-ui-other-lib')\n//\n//project(':wgllss-sample-create-all-app').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-all-app')\n//project(':wgllss-sample-create-version-config-annotations').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-annotations')\n//project(':wgllss-sample-create-version-config-app').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-app')\n//project(':wgllss-sample-create-version-config-compiler').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin-Generate/wgllss-sample-create-version-config-compiler')\n\n\n//project(':dark-green-resource').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-green-resource')\n//project(':green-resource').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/green-resource')\n//project(':red-resource').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/red-resource')\n//project(':blue-resource').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/blue-resource')\n//project(':pink-resource').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/pink-resource')\n//project(':brown-resource').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/brown-resource')\n//project(':orange-resource').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/orange-resource')\n//project(':dark-red-resource').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-red-resource')\n//project(':light-green-resource').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/light-green-resource')\n//project(':dark-blue-resource').projectDir = file('WX/WX-Code/WX-Plugin/Wgllss-Dynamic-Plugin_Skin/dark-blue-resource')\n\n\n///*************************************************** 以下 是 maven 依赖接入方式 配置 ***************************************************************/\n\n\ninclude ':sample'\ninclude ':maven-wgllss-business-re-library'\ninclude ':maven-wgllss-common-re-library'\ninclude ':maven-wgllss-dynamic-host-library'\ninclude ':maven-wgllss-dynamic-host-skin-resource-lib'\n\nproject(':sample').projectDir = file('WX/WX-Maven/WX-Host/sample')\nproject(':maven-wgllss-business-re-library').projectDir = file('WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-business-re-library')\nproject(':maven-wgllss-common-re-library').projectDir = file('WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-common-re-library')\nproject(':maven-wgllss-dynamic-host-library').projectDir = file('WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-library')\nproject(':maven-wgllss-dynamic-host-skin-resource-lib').projectDir = file('WX/WX-Maven/WX-Host/sample-lib/maven-wgllss-dynamic-host-skin-resource-lib')\n\n\n//include ':Maven-Wgllss-Dynamic-Plugin-Common-Library'\n//\n//include ':Maven-Wgllss-Dynamic-Plugin-Manager'\n//include ':Maven-Wgllss-Dynamic-Plugin-Loader-Impl'\n//include ':Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl'\n//\n//include ':Maven-Wgllss-Dynamic-Plugin-RunTime-Apk'\n//include ':Maven-Wgllss-Dynamic-Plugin-Library'\n//\n//include ':maven-wgllss-sample-assets-source-apk'\n//include ':maven-wgllss-sample-business-library'\n//include ':maven-wgllss-sample-loader-version'\n//include ':maven-wgllss-sample-skin-resource-apk'\n//include ':maven-wgllss-sample-ui-home'\n//include ':maven-wgllss-sample-ui-loading'\n//include ':maven-wgllss-sample-ui-other'\n//include ':maven-wgllss-sample-ui-other2'\n//include ':maven-wgllss-sample-ui-other2-lib2'\n//include ':maven-wgllss-sample-ui-other-lib'\n//\n//include ':maven-wgllss-sample-create-all-app'\n//include ':maven-wgllss-sample-create-version-config-annotations'\n//include ':maven-wgllss-sample-create-version-config-app'\n//include ':maven-wgllss-sample-create-version-config-compiler'\n//\n////include ':maven-dark-green-resource'\n////include ':maven-green-resource'\n////include ':maven-red-resource'\n////include ':maven-blue-resource'\n////include ':maven-pink-resource'\n////include ':maven-brown-resource'\n////include ':maven-orange-resource'\n////include ':maven-dark-red-resource'\n////include ':maven-light-green-resource'\n////include ':maven-dark-blue-resource'\n//\n//project(':Maven-Wgllss-Dynamic-Plugin-RunTime-Apk').projectDir = file('WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-RunTime-Apk')\n//project(':Maven-Wgllss-Dynamic-Plugin-Library').projectDir = file('WX-Plugin/Wgllss-Dynamic-Plugin-SDK/Wgllss-Dynamic-Plugin-Library')\n//\n//project(':Maven-Wgllss-Dynamic-Plugin-Common-Library').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Common-Library')\n//\n//project(':Maven-Wgllss-Dynamic-Plugin-Manager').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-Manager')\n//project(':Maven-Wgllss-Dynamic-Plugin-Loader-Impl').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-Loader-Impl')\n//project(':Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Manager/Maven-Wgllss-Dynamic-Plugin-DownloadFace-Impl')\n//\n//project(':Maven-Wgllss-Dynamic-Plugin-RunTime-Apk').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-RunTime-Apk')\n//project(':Maven-Wgllss-Dynamic-Plugin-Library').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-SDK/Maven-Wgllss-Dynamic-Plugin-Library')\n//\n//project(':maven-wgllss-sample-assets-source-apk').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-assets-source-apk')\n//project(':maven-wgllss-sample-business-library').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-business-library')\n//project(':maven-wgllss-sample-loader-version').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-loader-version')\n//project(':maven-wgllss-sample-skin-resource-apk').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-skin-resource-apk')\n//project(':maven-wgllss-sample-ui-home').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-home')\n//project(':maven-wgllss-sample-ui-loading').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-loading')\n//project(':maven-wgllss-sample-ui-other').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other')\n//project(':maven-wgllss-sample-ui-other2').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2')\n//project(':maven-wgllss-sample-ui-other2-lib2').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other2-lib2')\n//project(':maven-wgllss-sample-ui-other-lib').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Sample/maven-wgllss-sample-ui-other-lib')\n//\n//project(':maven-wgllss-sample-create-all-app').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-all-app')\n//project(':maven-wgllss-sample-create-version-config-annotations').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-version-config-annotations')\n//project(':maven-wgllss-sample-create-version-config-app').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-version-config-app')\n//project(':maven-wgllss-sample-create-version-config-compiler').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin-Generate/maven-wgllss-sample-create-version-config-compiler')\n\n\n//project(':maven-dark-green-resource').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-green-resource')\n//project(':maven-green-resource').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-green-resource')\n//project(':maven-red-resource').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-red-resource')\n//project(':maven-blue-resource').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-blue-resource')\n//project(':maven-pink-resource').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-pink-resource')\n//project(':maven-brown-resource').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-brown-resource')\n//project(':maven-orange-resource').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-orange-resource')\n//project(':maven-dark-red-resource').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-red-resource')\n//project(':maven-light-green-resource').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-light-green-resource')\n//project(':maven-dark-blue-resource').projectDir = file('WX/WX-Maven/WX-Plugin/Maven-Wgllss-Dynamic-Plugin_Skin/maven-dark-blue-resource')\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  }
]