├── .github ├── ISSUE_TEMPLATE │ └── request_notify_icon_adaption.yml └── workflows │ └── validate.yml ├── .gitignore ├── APP └── NotifyIconsSupportConfig.json ├── LICENSE ├── OS ├── ColorOS │ └── NotifyIconsSupportConfig.json └── MIUI │ └── NotifyIconsSupportConfig.json ├── README.md ├── docs ├── index.html └── resources │ ├── css │ ├── github-markdown-dark.css │ ├── github-markdown-light.css │ ├── github-markdown.css │ └── render.css │ └── js │ ├── markdown-contents.js │ ├── markdown-page-contents.js │ └── render.js └── tool ├── NotifyIconDebugging_1.1.apk └── NotifyTester.apk /.github/ISSUE_TEMPLATE/request_notify_icon_adaption.yml: -------------------------------------------------------------------------------- 1 | name: 通知图标优化适配反馈 2 | description: 提交通知图标优化适配必须使用此模板提交 3 | labels: [To be adapted] 4 | title: "[通知图标优化适配反馈]" 5 | body: 6 | - type: markdown 7 | attributes: 8 | value: | 9 | ### 请在下方填写你需要适配的 APP 通知图标的必要信息。 10 | 11 | **China and Chinese only.** 12 | **仅限中国和中文。** 13 | 14 | 以下类型的 APP 不予适配: 15 | 16 | - VPN、翻墙软件 17 | - 涉嫌色情、赌博类软件 18 | - 申请超限权限、涉嫌泄露国家机密行为的软件 19 | 20 | 以下类型的 APP 通知图标暂不适配: 21 | 22 | - 多态彩色图标,状态不唯一,例如 360 极速浏览器 23 | - 规范的原生图标,但未被通知图标规则适配的 (将稍后加入白名单) 24 | - type: input 25 | attributes: 26 | label: APP 名称 27 | description: 这里填写 APP 的名称,例如:**微信** 28 | validations: 29 | required: true 30 | - type: input 31 | attributes: 32 | label: APP 包名 33 | description: 这里填写 APP 的包名,例如:**com.tencent.mm** 34 | validations: 35 | required: true 36 | - type: input 37 | attributes: 38 | label: 通知图标颜色 (HEX) 39 | description: | 40 | 这里填写通知图标在下拉通知栏中的图标颜色,要求为 16 进制,例如:**#ff232323** 41 | 如果不知道什么是 16 进制颜色,可以参考 [这里](https://www.qtccolor.com/tool/hex.aspx) 的取色。 42 | 留空代表使用系统默认主题色。 43 | validations: 44 | required: false 45 | - type: input 46 | attributes: 47 | label: 下载渠道、来源地址链接 48 | description: 请填写我们应该从何处得到你需要适配的这个 APP 的下载链接。 49 | validations: 50 | required: true 51 | - type: textarea 52 | attributes: 53 | label: 简单描述适配的通知图标使用场景 54 | description: 简单描述一下当前 APP 的通知图标在何时会变成彩色的、不规范的以及可触发推送通知的操作,例如小米推送或 HMS 推送。 55 | validations: 56 | required: true 57 | - type: textarea 58 | attributes: 59 | label: 通知单色图标适配素材 (大小 50x50~72x72) 60 | description: 请在这里填写我们能够获得这个图标的网址或在下方的文本框粘贴你需要上传的图标。 61 | validations: 62 | required: false 63 | - type: checkboxes 64 | attributes: 65 | label: 确认一下你提交的信息 66 | description: | 67 | 为了确保 issues 的质量和避免浪费不必要的时间,未勾选下方选项的 issues 将直接被关闭。 68 | 请一定确保你已经**勾选下方的选项**后再提交。 69 | options: 70 | - label: 我确保上述信息准确无误 71 | required: false 72 | -------------------------------------------------------------------------------- /.github/workflows/validate.yml: -------------------------------------------------------------------------------- 1 | name: Validate NotifyIconsRule Json File 2 | 3 | on: 4 | push: 5 | paths: 6 | - '**.json' 7 | pull_request: 8 | paths: 9 | - '**.json' 10 | 11 | jobs: 12 | validate: 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@v2 16 | - name: json-syntax-check 17 | uses: limitusus/json-syntax-check@v1 18 | with: 19 | pattern: "\\.json$" 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU AFFERO GENERAL PUBLIC LICENSE 2 | Version 3, 19 November 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU Affero General Public License is a free, copyleft license for 11 | software and other kinds of works, specifically designed to ensure 12 | cooperation with the community in the case of network server software. 13 | 14 | The licenses for most software and other practical works are designed 15 | to take away your freedom to share and change the works. By contrast, 16 | our General Public Licenses are intended to guarantee your freedom to 17 | share and change all versions of a program--to make sure it remains free 18 | software for all its users. 19 | 20 | When we speak of free software, we are referring to freedom, not 21 | price. Our General Public Licenses are designed to make sure that you 22 | have the freedom to distribute copies of free software (and charge for 23 | them if you wish), that you receive source code or can get it if you 24 | want it, that you can change the software or use pieces of it in new 25 | free programs, and that you know you can do these things. 26 | 27 | Developers that use our General Public Licenses protect your rights 28 | with two steps: (1) assert copyright on the software, and (2) offer 29 | you this License which gives you legal permission to copy, distribute 30 | and/or modify the software. 31 | 32 | A secondary benefit of defending all users' freedom is that 33 | improvements made in alternate versions of the program, if they 34 | receive widespread use, become available for other developers to 35 | incorporate. Many developers of free software are heartened and 36 | encouraged by the resulting cooperation. However, in the case of 37 | software used on network servers, this result may fail to come about. 38 | The GNU General Public License permits making a modified version and 39 | letting the public access it on a server without ever releasing its 40 | source code to the public. 41 | 42 | The GNU Affero General Public License is designed specifically to 43 | ensure that, in such cases, the modified source code becomes available 44 | to the community. It requires the operator of a network server to 45 | provide the source code of the modified version running there to the 46 | users of that server. Therefore, public use of a modified version, on 47 | a publicly accessible server, gives the public access to the source 48 | code of the modified version. 49 | 50 | An older license, called the Affero General Public License and 51 | published by Affero, was designed to accomplish similar goals. This is 52 | a different license, not a version of the Affero GPL, but Affero has 53 | released a new version of the Affero GPL which permits relicensing under 54 | this license. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | TERMS AND CONDITIONS 60 | 61 | 0. Definitions. 62 | 63 | "This License" refers to version 3 of the GNU Affero General Public License. 64 | 65 | "Copyright" also means copyright-like laws that apply to other kinds of 66 | works, such as semiconductor masks. 67 | 68 | "The Program" refers to any copyrightable work licensed under this 69 | License. Each licensee is addressed as "you". "Licensees" and 70 | "recipients" may be individuals or organizations. 71 | 72 | To "modify" a work means to copy from or adapt all or part of the work 73 | in a fashion requiring copyright permission, other than the making of an 74 | exact copy. The resulting work is called a "modified version" of the 75 | earlier work or a work "based on" the earlier work. 76 | 77 | A "covered work" means either the unmodified Program or a work based 78 | on the Program. 79 | 80 | To "propagate" a work means to do anything with it that, without 81 | permission, would make you directly or secondarily liable for 82 | infringement under applicable copyright law, except executing it on a 83 | computer or modifying a private copy. Propagation includes copying, 84 | distribution (with or without modification), making available to the 85 | public, and in some countries other activities as well. 86 | 87 | To "convey" a work means any kind of propagation that enables other 88 | parties to make or receive copies. Mere interaction with a user through 89 | a computer network, with no transfer of a copy, is not conveying. 90 | 91 | An interactive user interface displays "Appropriate Legal Notices" 92 | to the extent that it includes a convenient and prominently visible 93 | feature that (1) displays an appropriate copyright notice, and (2) 94 | tells the user that there is no warranty for the work (except to the 95 | extent that warranties are provided), that licensees may convey the 96 | work under this License, and how to view a copy of this License. If 97 | the interface presents a list of user commands or options, such as a 98 | menu, a prominent item in the list meets this criterion. 99 | 100 | 1. Source Code. 101 | 102 | The "source code" for a work means the preferred form of the work 103 | for making modifications to it. "Object code" means any non-source 104 | form of a work. 105 | 106 | A "Standard Interface" means an interface that either is an official 107 | standard defined by a recognized standards body, or, in the case of 108 | interfaces specified for a particular programming language, one that 109 | is widely used among developers working in that language. 110 | 111 | The "System Libraries" of an executable work include anything, other 112 | than the work as a whole, that (a) is included in the normal form of 113 | packaging a Major Component, but which is not part of that Major 114 | Component, and (b) serves only to enable use of the work with that 115 | Major Component, or to implement a Standard Interface for which an 116 | implementation is available to the public in source code form. A 117 | "Major Component", in this context, means a major essential component 118 | (kernel, window system, and so on) of the specific operating system 119 | (if any) on which the executable work runs, or a compiler used to 120 | produce the work, or an object code interpreter used to run it. 121 | 122 | The "Corresponding Source" for a work in object code form means all 123 | the source code needed to generate, install, and (for an executable 124 | work) run the object code and to modify the work, including scripts to 125 | control those activities. However, it does not include the work's 126 | System Libraries, or general-purpose tools or generally available free 127 | programs which are used unmodified in performing those activities but 128 | which are not part of the work. For example, Corresponding Source 129 | includes interface definition files associated with source files for 130 | the work, and the source code for shared libraries and dynamically 131 | linked subprograms that the work is specifically designed to require, 132 | such as by intimate data communication or control flow between those 133 | subprograms and other parts of the work. 134 | 135 | The Corresponding Source need not include anything that users 136 | can regenerate automatically from other parts of the Corresponding 137 | Source. 138 | 139 | The Corresponding Source for a work in source code form is that 140 | same work. 141 | 142 | 2. Basic Permissions. 143 | 144 | All rights granted under this License are granted for the term of 145 | copyright on the Program, and are irrevocable provided the stated 146 | conditions are met. This License explicitly affirms your unlimited 147 | permission to run the unmodified Program. The output from running a 148 | covered work is covered by this License only if the output, given its 149 | content, constitutes a covered work. This License acknowledges your 150 | rights of fair use or other equivalent, as provided by copyright law. 151 | 152 | You may make, run and propagate covered works that you do not 153 | convey, without conditions so long as your license otherwise remains 154 | in force. You may convey covered works to others for the sole purpose 155 | of having them make modifications exclusively for you, or provide you 156 | with facilities for running those works, provided that you comply with 157 | the terms of this License in conveying all material for which you do 158 | not control copyright. Those thus making or running the covered works 159 | for you must do so exclusively on your behalf, under your direction 160 | and control, on terms that prohibit them from making any copies of 161 | your copyrighted material outside their relationship with you. 162 | 163 | Conveying under any other circumstances is permitted solely under 164 | the conditions stated below. Sublicensing is not allowed; section 10 165 | makes it unnecessary. 166 | 167 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 168 | 169 | No covered work shall be deemed part of an effective technological 170 | measure under any applicable law fulfilling obligations under article 171 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 172 | similar laws prohibiting or restricting circumvention of such 173 | measures. 174 | 175 | When you convey a covered work, you waive any legal power to forbid 176 | circumvention of technological measures to the extent such circumvention 177 | is effected by exercising rights under this License with respect to 178 | the covered work, and you disclaim any intention to limit operation or 179 | modification of the work as a means of enforcing, against the work's 180 | users, your or third parties' legal rights to forbid circumvention of 181 | technological measures. 182 | 183 | 4. Conveying Verbatim Copies. 184 | 185 | You may convey verbatim copies of the Program's source code as you 186 | receive it, in any medium, provided that you conspicuously and 187 | appropriately publish on each copy an appropriate copyright notice; 188 | keep intact all notices stating that this License and any 189 | non-permissive terms added in accord with section 7 apply to the code; 190 | keep intact all notices of the absence of any warranty; and give all 191 | recipients a copy of this License along with the Program. 192 | 193 | You may charge any price or no price for each copy that you convey, 194 | and you may offer support or warranty protection for a fee. 195 | 196 | 5. Conveying Modified Source Versions. 197 | 198 | You may convey a work based on the Program, or the modifications to 199 | produce it from the Program, in the form of source code under the 200 | terms of section 4, provided that you also meet all of these conditions: 201 | 202 | a) The work must carry prominent notices stating that you modified 203 | it, and giving a relevant date. 204 | 205 | b) The work must carry prominent notices stating that it is 206 | released under this License and any conditions added under section 207 | 7. This requirement modifies the requirement in section 4 to 208 | "keep intact all notices". 209 | 210 | c) You must license the entire work, as a whole, under this 211 | License to anyone who comes into possession of a copy. This 212 | License will therefore apply, along with any applicable section 7 213 | additional terms, to the whole of the work, and all its parts, 214 | regardless of how they are packaged. This License gives no 215 | permission to license the work in any other way, but it does not 216 | invalidate such permission if you have separately received it. 217 | 218 | d) If the work has interactive user interfaces, each must display 219 | Appropriate Legal Notices; however, if the Program has interactive 220 | interfaces that do not display Appropriate Legal Notices, your 221 | work need not make them do so. 222 | 223 | A compilation of a covered work with other separate and independent 224 | works, which are not by their nature extensions of the covered work, 225 | and which are not combined with it such as to form a larger program, 226 | in or on a volume of a storage or distribution medium, is called an 227 | "aggregate" if the compilation and its resulting copyright are not 228 | used to limit the access or legal rights of the compilation's users 229 | beyond what the individual works permit. Inclusion of a covered work 230 | in an aggregate does not cause this License to apply to the other 231 | parts of the aggregate. 232 | 233 | 6. Conveying Non-Source Forms. 234 | 235 | You may convey a covered work in object code form under the terms 236 | of sections 4 and 5, provided that you also convey the 237 | machine-readable Corresponding Source under the terms of this License, 238 | in one of these ways: 239 | 240 | a) Convey the object code in, or embodied in, a physical product 241 | (including a physical distribution medium), accompanied by the 242 | Corresponding Source fixed on a durable physical medium 243 | customarily used for software interchange. 244 | 245 | b) Convey the object code in, or embodied in, a physical product 246 | (including a physical distribution medium), accompanied by a 247 | written offer, valid for at least three years and valid for as 248 | long as you offer spare parts or customer support for that product 249 | model, to give anyone who possesses the object code either (1) a 250 | copy of the Corresponding Source for all the software in the 251 | product that is covered by this License, on a durable physical 252 | medium customarily used for software interchange, for a price no 253 | more than your reasonable cost of physically performing this 254 | conveying of source, or (2) access to copy the 255 | Corresponding Source from a network server at no charge. 256 | 257 | c) Convey individual copies of the object code with a copy of the 258 | written offer to provide the Corresponding Source. This 259 | alternative is allowed only occasionally and noncommercially, and 260 | only if you received the object code with such an offer, in accord 261 | with subsection 6b. 262 | 263 | d) Convey the object code by offering access from a designated 264 | place (gratis or for a charge), and offer equivalent access to the 265 | Corresponding Source in the same way through the same place at no 266 | further charge. You need not require recipients to copy the 267 | Corresponding Source along with the object code. If the place to 268 | copy the object code is a network server, the Corresponding Source 269 | may be on a different server (operated by you or a third party) 270 | that supports equivalent copying facilities, provided you maintain 271 | clear directions next to the object code saying where to find the 272 | Corresponding Source. Regardless of what server hosts the 273 | Corresponding Source, you remain obligated to ensure that it is 274 | available for as long as needed to satisfy these requirements. 275 | 276 | e) Convey the object code using peer-to-peer transmission, provided 277 | you inform other peers where the object code and Corresponding 278 | Source of the work are being offered to the general public at no 279 | charge under subsection 6d. 280 | 281 | A separable portion of the object code, whose source code is excluded 282 | from the Corresponding Source as a System Library, need not be 283 | included in conveying the object code work. 284 | 285 | A "User Product" is either (1) a "consumer product", which means any 286 | tangible personal property which is normally used for personal, family, 287 | or household purposes, or (2) anything designed or sold for incorporation 288 | into a dwelling. In determining whether a product is a consumer product, 289 | doubtful cases shall be resolved in favor of coverage. For a particular 290 | product received by a particular user, "normally used" refers to a 291 | typical or common use of that class of product, regardless of the status 292 | of the particular user or of the way in which the particular user 293 | actually uses, or expects or is expected to use, the product. A product 294 | is a consumer product regardless of whether the product has substantial 295 | commercial, industrial or non-consumer uses, unless such uses represent 296 | the only significant mode of use of the product. 297 | 298 | "Installation Information" for a User Product means any methods, 299 | procedures, authorization keys, or other information required to install 300 | and execute modified versions of a covered work in that User Product from 301 | a modified version of its Corresponding Source. The information must 302 | suffice to ensure that the continued functioning of the modified object 303 | code is in no case prevented or interfered with solely because 304 | modification has been made. 305 | 306 | If you convey an object code work under this section in, or with, or 307 | specifically for use in, a User Product, and the conveying occurs as 308 | part of a transaction in which the right of possession and use of the 309 | User Product is transferred to the recipient in perpetuity or for a 310 | fixed term (regardless of how the transaction is characterized), the 311 | Corresponding Source conveyed under this section must be accompanied 312 | by the Installation Information. But this requirement does not apply 313 | if neither you nor any third party retains the ability to install 314 | modified object code on the User Product (for example, the work has 315 | been installed in ROM). 316 | 317 | The requirement to provide Installation Information does not include a 318 | requirement to continue to provide support service, warranty, or updates 319 | for a work that has been modified or installed by the recipient, or for 320 | the User Product in which it has been modified or installed. Access to a 321 | network may be denied when the modification itself materially and 322 | adversely affects the operation of the network or violates the rules and 323 | protocols for communication across the network. 324 | 325 | Corresponding Source conveyed, and Installation Information provided, 326 | in accord with this section must be in a format that is publicly 327 | documented (and with an implementation available to the public in 328 | source code form), and must require no special password or key for 329 | unpacking, reading or copying. 330 | 331 | 7. Additional Terms. 332 | 333 | "Additional permissions" are terms that supplement the terms of this 334 | License by making exceptions from one or more of its conditions. 335 | Additional permissions that are applicable to the entire Program shall 336 | be treated as though they were included in this License, to the extent 337 | that they are valid under applicable law. If additional permissions 338 | apply only to part of the Program, that part may be used separately 339 | under those permissions, but the entire Program remains governed by 340 | this License without regard to the additional permissions. 341 | 342 | When you convey a copy of a covered work, you may at your option 343 | remove any additional permissions from that copy, or from any part of 344 | it. (Additional permissions may be written to require their own 345 | removal in certain cases when you modify the work.) You may place 346 | additional permissions on material, added by you to a covered work, 347 | for which you have or can give appropriate copyright permission. 348 | 349 | Notwithstanding any other provision of this License, for material you 350 | add to a covered work, you may (if authorized by the copyright holders of 351 | that material) supplement the terms of this License with terms: 352 | 353 | a) Disclaiming warranty or limiting liability differently from the 354 | terms of sections 15 and 16 of this License; or 355 | 356 | b) Requiring preservation of specified reasonable legal notices or 357 | author attributions in that material or in the Appropriate Legal 358 | Notices displayed by works containing it; or 359 | 360 | c) Prohibiting misrepresentation of the origin of that material, or 361 | requiring that modified versions of such material be marked in 362 | reasonable ways as different from the original version; or 363 | 364 | d) Limiting the use for publicity purposes of names of licensors or 365 | authors of the material; or 366 | 367 | e) Declining to grant rights under trademark law for use of some 368 | trade names, trademarks, or service marks; or 369 | 370 | f) Requiring indemnification of licensors and authors of that 371 | material by anyone who conveys the material (or modified versions of 372 | it) with contractual assumptions of liability to the recipient, for 373 | any liability that these contractual assumptions directly impose on 374 | those licensors and authors. 375 | 376 | All other non-permissive additional terms are considered "further 377 | restrictions" within the meaning of section 10. If the Program as you 378 | received it, or any part of it, contains a notice stating that it is 379 | governed by this License along with a term that is a further 380 | restriction, you may remove that term. If a license document contains 381 | a further restriction but permits relicensing or conveying under this 382 | License, you may add to a covered work material governed by the terms 383 | of that license document, provided that the further restriction does 384 | not survive such relicensing or conveying. 385 | 386 | If you add terms to a covered work in accord with this section, you 387 | must place, in the relevant source files, a statement of the 388 | additional terms that apply to those files, or a notice indicating 389 | where to find the applicable terms. 390 | 391 | Additional terms, permissive or non-permissive, may be stated in the 392 | form of a separately written license, or stated as exceptions; 393 | the above requirements apply either way. 394 | 395 | 8. Termination. 396 | 397 | You may not propagate or modify a covered work except as expressly 398 | provided under this License. Any attempt otherwise to propagate or 399 | modify it is void, and will automatically terminate your rights under 400 | this License (including any patent licenses granted under the third 401 | paragraph of section 11). 402 | 403 | However, if you cease all violation of this License, then your 404 | license from a particular copyright holder is reinstated (a) 405 | provisionally, unless and until the copyright holder explicitly and 406 | finally terminates your license, and (b) permanently, if the copyright 407 | holder fails to notify you of the violation by some reasonable means 408 | prior to 60 days after the cessation. 409 | 410 | Moreover, your license from a particular copyright holder is 411 | reinstated permanently if the copyright holder notifies you of the 412 | violation by some reasonable means, this is the first time you have 413 | received notice of violation of this License (for any work) from that 414 | copyright holder, and you cure the violation prior to 30 days after 415 | your receipt of the notice. 416 | 417 | Termination of your rights under this section does not terminate the 418 | licenses of parties who have received copies or rights from you under 419 | this License. If your rights have been terminated and not permanently 420 | reinstated, you do not qualify to receive new licenses for the same 421 | material under section 10. 422 | 423 | 9. Acceptance Not Required for Having Copies. 424 | 425 | You are not required to accept this License in order to receive or 426 | run a copy of the Program. Ancillary propagation of a covered work 427 | occurring solely as a consequence of using peer-to-peer transmission 428 | to receive a copy likewise does not require acceptance. However, 429 | nothing other than this License grants you permission to propagate or 430 | modify any covered work. These actions infringe copyright if you do 431 | not accept this License. Therefore, by modifying or propagating a 432 | covered work, you indicate your acceptance of this License to do so. 433 | 434 | 10. Automatic Licensing of Downstream Recipients. 435 | 436 | Each time you convey a covered work, the recipient automatically 437 | receives a license from the original licensors, to run, modify and 438 | propagate that work, subject to this License. You are not responsible 439 | for enforcing compliance by third parties with this License. 440 | 441 | An "entity transaction" is a transaction transferring control of an 442 | organization, or substantially all assets of one, or subdividing an 443 | organization, or merging organizations. If propagation of a covered 444 | work results from an entity transaction, each party to that 445 | transaction who receives a copy of the work also receives whatever 446 | licenses to the work the party's predecessor in interest had or could 447 | give under the previous paragraph, plus a right to possession of the 448 | Corresponding Source of the work from the predecessor in interest, if 449 | the predecessor has it or can get it with reasonable efforts. 450 | 451 | You may not impose any further restrictions on the exercise of the 452 | rights granted or affirmed under this License. For example, you may 453 | not impose a license fee, royalty, or other charge for exercise of 454 | rights granted under this License, and you may not initiate litigation 455 | (including a cross-claim or counterclaim in a lawsuit) alleging that 456 | any patent claim is infringed by making, using, selling, offering for 457 | sale, or importing the Program or any portion of it. 458 | 459 | 11. Patents. 460 | 461 | A "contributor" is a copyright holder who authorizes use under this 462 | License of the Program or a work on which the Program is based. The 463 | work thus licensed is called the contributor's "contributor version". 464 | 465 | A contributor's "essential patent claims" are all patent claims 466 | owned or controlled by the contributor, whether already acquired or 467 | hereafter acquired, that would be infringed by some manner, permitted 468 | by this License, of making, using, or selling its contributor version, 469 | but do not include claims that would be infringed only as a 470 | consequence of further modification of the contributor version. For 471 | purposes of this definition, "control" includes the right to grant 472 | patent sublicenses in a manner consistent with the requirements of 473 | this License. 474 | 475 | Each contributor grants you a non-exclusive, worldwide, royalty-free 476 | patent license under the contributor's essential patent claims, to 477 | make, use, sell, offer for sale, import and otherwise run, modify and 478 | propagate the contents of its contributor version. 479 | 480 | In the following three paragraphs, a "patent license" is any express 481 | agreement or commitment, however denominated, not to enforce a patent 482 | (such as an express permission to practice a patent or covenant not to 483 | sue for patent infringement). To "grant" such a patent license to a 484 | party means to make such an agreement or commitment not to enforce a 485 | patent against the party. 486 | 487 | If you convey a covered work, knowingly relying on a patent license, 488 | and the Corresponding Source of the work is not available for anyone 489 | to copy, free of charge and under the terms of this License, through a 490 | publicly available network server or other readily accessible means, 491 | then you must either (1) cause the Corresponding Source to be so 492 | available, or (2) arrange to deprive yourself of the benefit of the 493 | patent license for this particular work, or (3) arrange, in a manner 494 | consistent with the requirements of this License, to extend the patent 495 | license to downstream recipients. "Knowingly relying" means you have 496 | actual knowledge that, but for the patent license, your conveying the 497 | covered work in a country, or your recipient's use of the covered work 498 | in a country, would infringe one or more identifiable patents in that 499 | country that you have reason to believe are valid. 500 | 501 | If, pursuant to or in connection with a single transaction or 502 | arrangement, you convey, or propagate by procuring conveyance of, a 503 | covered work, and grant a patent license to some of the parties 504 | receiving the covered work authorizing them to use, propagate, modify 505 | or convey a specific copy of the covered work, then the patent license 506 | you grant is automatically extended to all recipients of the covered 507 | work and works based on it. 508 | 509 | A patent license is "discriminatory" if it does not include within 510 | the scope of its coverage, prohibits the exercise of, or is 511 | conditioned on the non-exercise of one or more of the rights that are 512 | specifically granted under this License. You may not convey a covered 513 | work if you are a party to an arrangement with a third party that is 514 | in the business of distributing software, under which you make payment 515 | to the third party based on the extent of your activity of conveying 516 | the work, and under which the third party grants, to any of the 517 | parties who would receive the covered work from you, a discriminatory 518 | patent license (a) in connection with copies of the covered work 519 | conveyed by you (or copies made from those copies), or (b) primarily 520 | for and in connection with specific products or compilations that 521 | contain the covered work, unless you entered into that arrangement, 522 | or that patent license was granted, prior to 28 March 2007. 523 | 524 | Nothing in this License shall be construed as excluding or limiting 525 | any implied license or other defenses to infringement that may 526 | otherwise be available to you under applicable patent law. 527 | 528 | 12. No Surrender of Others' Freedom. 529 | 530 | If conditions are imposed on you (whether by court order, agreement or 531 | otherwise) that contradict the conditions of this License, they do not 532 | excuse you from the conditions of this License. If you cannot convey a 533 | covered work so as to satisfy simultaneously your obligations under this 534 | License and any other pertinent obligations, then as a consequence you may 535 | not convey it at all. For example, if you agree to terms that obligate you 536 | to collect a royalty for further conveying from those to whom you convey 537 | the Program, the only way you could satisfy both those terms and this 538 | License would be to refrain entirely from conveying the Program. 539 | 540 | 13. Remote Network Interaction; Use with the GNU General Public License. 541 | 542 | Notwithstanding any other provision of this License, if you modify the 543 | Program, your modified version must prominently offer all users 544 | interacting with it remotely through a computer network (if your version 545 | supports such interaction) an opportunity to receive the Corresponding 546 | Source of your version by providing access to the Corresponding Source 547 | from a network server at no charge, through some standard or customary 548 | means of facilitating copying of software. This Corresponding Source 549 | shall include the Corresponding Source for any work covered by version 3 550 | of the GNU General Public License that is incorporated pursuant to the 551 | following paragraph. 552 | 553 | Notwithstanding any other provision of this License, you have 554 | permission to link or combine any covered work with a work licensed 555 | under version 3 of the GNU General Public License into a single 556 | combined work, and to convey the resulting work. The terms of this 557 | License will continue to apply to the part which is the covered work, 558 | but the work with which it is combined will remain governed by version 559 | 3 of the GNU General Public License. 560 | 561 | 14. Revised Versions of this License. 562 | 563 | The Free Software Foundation may publish revised and/or new versions of 564 | the GNU Affero General Public License from time to time. Such new versions 565 | will be similar in spirit to the present version, but may differ in detail to 566 | address new problems or concerns. 567 | 568 | Each version is given a distinguishing version number. If the 569 | Program specifies that a certain numbered version of the GNU Affero General 570 | Public License "or any later version" applies to it, you have the 571 | option of following the terms and conditions either of that numbered 572 | version or of any later version published by the Free Software 573 | Foundation. If the Program does not specify a version number of the 574 | GNU Affero General Public License, you may choose any version ever published 575 | by the Free Software Foundation. 576 | 577 | If the Program specifies that a proxy can decide which future 578 | versions of the GNU Affero General Public License can be used, that proxy's 579 | public statement of acceptance of a version permanently authorizes you 580 | to choose that version for the Program. 581 | 582 | Later license versions may give you additional or different 583 | permissions. However, no additional obligations are imposed on any 584 | author or copyright holder as a result of your choosing to follow a 585 | later version. 586 | 587 | 15. Disclaimer of Warranty. 588 | 589 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 590 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 591 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 592 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 593 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 594 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 595 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 596 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 597 | 598 | 16. Limitation of Liability. 599 | 600 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 601 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 602 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 603 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 604 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 605 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 606 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 607 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 608 | SUCH DAMAGES. 609 | 610 | 17. Interpretation of Sections 15 and 16. 611 | 612 | If the disclaimer of warranty and limitation of liability provided 613 | above cannot be given local legal effect according to their terms, 614 | reviewing courts shall apply local law that most closely approximates 615 | an absolute waiver of all civil liability in connection with the 616 | Program, unless a warranty or assumption of liability accompanies a 617 | copy of the Program in return for a fee. 618 | 619 | END OF TERMS AND CONDITIONS 620 | 621 | How to Apply These Terms to Your New Programs 622 | 623 | If you develop a new program, and you want it to be of the greatest 624 | possible use to the public, the best way to achieve this is to make it 625 | free software which everyone can redistribute and change under these terms. 626 | 627 | To do so, attach the following notices to the program. It is safest 628 | to attach them to the start of each source file to most effectively 629 | state the exclusion of warranty; and each file should have at least 630 | the "copyright" line and a pointer to where the full notice is found. 631 | 632 | 633 | Copyright (C) 634 | 635 | This program is free software: you can redistribute it and/or modify 636 | it under the terms of the GNU Affero General Public License as published 637 | by the Free Software Foundation, either version 3 of the License, or 638 | (at your option) any later version. 639 | 640 | This program is distributed in the hope that it will be useful, 641 | but WITHOUT ANY WARRANTY; without even the implied warranty of 642 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 643 | GNU Affero General Public License for more details. 644 | 645 | You should have received a copy of the GNU Affero General Public License 646 | along with this program. If not, see . 647 | 648 | Also add information on how to contact you by electronic and paper mail. 649 | 650 | If your software can interact with users remotely through a computer 651 | network, you should also make sure that it provides a way for users to 652 | get its source. For example, if your program is a web application, its 653 | interface could display a "Source" link that leads users to an archive 654 | of the code. There are many ways you could offer source, and different 655 | solutions will be better for different programs; see section 13 for the 656 | specific requirements. 657 | 658 | You should also get your employer (if you work as a programmer) or school, 659 | if any, to sign a "copyright disclaimer" for the program, if necessary. 660 | For more information on this, and how to apply and follow the GNU AGPL, see 661 | . 662 | -------------------------------------------------------------------------------- /OS/MIUI/NotifyIconsSupportConfig.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "appName": "Android 系统", 4 | "packageName": "android", 5 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAAD4AAAA+CAQAAADZyGDPAAABvElEQVR42u3RNRcUMRhGYdzd3X4F7tagDd7h7hXe4FbSoBVa4+4N7lDj7jYXyfpm82XPyazmaec9uTOTCl6oPM/zPHqykZW0d3pmB1axkZ7SbBIB/3ygv7N0fz7wT8Ak06wS74j6Qn9H6S9EvaVS5mETlHjeXVppbBo/0OTdpe+Z5135YspTm0EsZidXeMIrvvOdVzzhCjtYxCBqG9Nf6Cq/rTZPSxZygm+YfOM4C2hhOif7/GwO8RNbPzjEbLu0Bj35hAtyWs67T8s//wcu/Mg+XZk1uLKNqtmkG3IMl47SwDbdmJu4dp2GNul6XCUMV6grpatxhrCcFO6erYRpoyk9lIAwBYzMlG7FO3TusJFN3EUm79/SQh/fg85aqvx/WpV1yOT9Tl26m/aXn6BibFGRk0jkfUCX9PgldEYnbcYisNpfSP9uvUFJq8EILPddkuMH0VuatFqOwHK/L3HUll/ofaBTbNWJjwgs9z9pHY/PJLPnjKce9ZnACyT2++nx+HFy7Ug0XZ8f5Np36qn4APKhr4ovIB/mqvhu8mGHil8mHy6q+CPy4b6KvyAfnqn4N/LhWwXP8zzPKyF/ALkcsiqMC92GAAAAAElFTkSuQmCC", 6 | "iconColor": "#ff72c476", 7 | "contributorName": "fankes", 8 | "isEnabled": true, 9 | "isEnabledAll": false 10 | }, 11 | { 12 | "appName": "手机管家", 13 | "packageName": "com.miui.securitycenter", 14 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAACiUlEQVR42u3YA5AjWQCA4WTmOjnbtm3btm3btu0rnW3btn23ts1Mvq3q6nV32Fl/hUHeqz9tZKZWspayr5VkGxfI2cADvvOwLeUbEBJYyW06ALp6wFpyKYbkLO8WrRUgUtTefVZPYYkEZrS8W7XVYnxFHd1vdTMKaln7gRnNYQnHekg7pXXypJMsZ04zCTRlyjGb+SxhS0e706+GK6pUwV8ecLxtLWV+syd//5U9pZ36dfWqDTTHRZbTRnr62DAucove0jPEQ3GRK/SQnoHunrIj0yJ9veUNvRoZ6eMKi1nK01oaFenjMtOHsy82rAGRKDFTdLZ4W7ERkT4uNXM4cxXvKJJ+pKcLzBjOW817UGukqGdCuJvT5MJZq3ufeiL/ONFB3oq5TB0pvOhay0fUExkuPI9axnPG1M6+0Yz1fEp9kYLnon1nCY+JaGO3aPwGvqTayFXjROjperOGny3s4SixRzR6Q19TMnJvXORC3Y1rkOvNEn66gCd0dUg0diPfKm2AW+Iie2of+42ipbGig00X/rax75XTyzFxkaX8SmzmhjATsakfldfeunGRmbxCQuZGs0SjNveTSnxmobhI4AItiWv4Vkub2a5+UJlbzRoXyVpFN0kG+dBj2qrMIFtqzsSR94p0fGre5HvIg6TjdPlMEnN7Vv3et3imFCv5Xn3+sWHZZxab6qJ2/exZyeNDk90V1OpYQaXPV0eozXny1Twlnqx6V5gxUw15R6nOOdUkIgLb+1dlOtpfPlMLTTbxnfJ+t7PwIlBrZkm3aCdZV/dZUXP9rwrW9riOxtfFCzZP6QWIrBms7ybf66GAgl5+dqdNzRQTqCs0v8M85Dud/OQxx1mkjkD6RgDyayem0L3naQAAAABJRU5ErkJggg==", 15 | "iconColor": "#ff4981ec", 16 | "contributorName": "fankes", 17 | "isEnabled": true, 18 | "isEnabledAll": true 19 | }, 20 | { 21 | "appName": "小米SIM卡激活服务", 22 | "packageName": "com.xiaomi.simactivate.service", 23 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAABAElEQVR42uzVAQbDQBSE4Zwn6Bn2AEUhgAIC9BB7iQANUEEv8YCiAshJqgD8hVWJFTIrizaZARmPDxEp4nCk4cGy3IuUcEOLznBGi85wQI3OcIHsDFfIzmCQndERndERndERndERndERndERlcmA2I78MvLmiWHf3SYdL69UZKAMuwOA+BYXnkqGFKQP4wIkLL2OtDLS6oiXEb9lRA9bRjxObNKLF/MnyI7o3fbHOG68WXy1/08yI52MdDoClYJQQQoCnhMOFxBwo9pk8bAUaVgrzTxSs1bqeeQzY6pZYoyvJJ1EFSsmESqw6ym2ooGYesHq/0xg45kccAao0wrTRAB28UpJfH1WqQAAAABJRU5ErkJggg==", 24 | "iconColor": "#fff49026", 25 | "contributorName": "fankes", 26 | "isEnabled": true, 27 | "isEnabledAll": false 28 | }, 29 | { 30 | "appName": "小米相册", 31 | "packageName": "com.miui.gallery", 32 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAACG0lEQVR42uzVA5D2RgCA4dS2bdvtqKPatm27HdW2bdt2+9u2bR7z/MzOJOdvcr5nRx/faHejhtCmjcPK3/Sr33IYv3rDIZUlXhbL10uWSCfOVR/OTUf+VB/+SEcGAJ5xeQ7jOcCQdGQg4LAoB44BDLNEU4jY2Pkut3PhEcNriDjNLFDmgXqK2MpcgePq5XK5BYzVC3xUP5F7wO9eAt/Xz+U6VIC76udMlvSxRE+rRik2tnk+T9dSrov/09mD1ohSXKdc7CNr1NtkdIoywCB75BKxSnq5doA5BHNcWNjlCqzuW7F+9g7vbGGsrDesWHDE6nE7wNxF+8K0NfSWmELQw3aFPV2r+Y8g9sS4lfws8ZVVUjvpNCfWNRISKRMkulo5ms9ZZkmUe9QydYhY1f8SM8TShs/ZKPxqJ30J/rFJLe+JVf0jMcoOTjdLYKbdM0/fewLjHVybMzk5JBi96Iba01BAqSOiDEuUX6WI8I27LFnTmYwXzkJ4ZqztRxRlZkVgX0MEfnBh9WeSTQQle9ggqpK1fCVQVJtISNSeJd2qVFBTZJRto4KUHmiMQPaeGCwxwtZRwazrF4ERqUi44SOLCksElna/MsDUdGQy4JQoB24GTLNkZZHjcomcAZhe/5HsmYR78okHcxifA/GU9D3pqB7EHVInWH6l+nBVdr5+LW9fWSoEQuaS+Ad/+yeH8bfvXWyJVKBNm3mjCQAA2ldSd59n0zEAAAAASUVORK5CYII=", 33 | "iconColor": "#ff888fff", 34 | "contributorName": "parules", 35 | "isEnabled": true, 36 | "isEnabledAll": false 37 | }, 38 | { 39 | "appName": "音质音效", 40 | "packageName": "com.miui.misound", 41 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAACCklEQVR42u3VA9BrVxSG4a+23Q5q2+6PUW3bNke1dW3btm3btm28FzlrRycTnVzm2cNtL+XlHdA4ioso4CjlDlcyFoANNOU05QKnEu0uZehQJdZB0bpzjoLFt8RrqSBxGnMw7XG4WMHhc8x0rqY+5mMFh5GYTyXewrRXULganKslLsAsUFB4FjPAyxmOuVLB4C/MP15OdcwzPk/2A16nWOmhB+YBL+d9zF+KQgXMd0oHCwlZ63KuwfRQBH4j0k2ZfCed5LCJkHFRF2QtkSopVdyFqSmH2YQslcOfRJuqVPEm5k85DMEc5vIaE+vcVD/IK2QiX8UimTNlLlSsa7IbZGHqg6SAEZh7fe+RXeszMT9i6qS6kjOSrMRWeoHMNJnrlRo2Y46Xw9OYql7OyZj3wDlDyXEOZo4icA+mn8urAwASEzBPKzmexjRWBC7GLJfDYzzEORK/4681r1nVMyjYnR6jNDg/KALHg3OOYnA9K/C3gitDX9wG4s2L7YpZmCIv5zxulYfPSOQHcX3CohjUw3woSfwPQBl5+CHhSngePyUVh48j7xc3YZ6Qh+fow2KfM+FkRhDrQxn/+zXYrQPgayVHAeXosTt1oAIfc7F8cTzLcXGGhZi7FCSa+nwkUxUs3k/t9Pz+rtQ10nzFKqug8SLRPlYuUMwkQiZRoFzhZB7jSwo4QYHJy8vbAaME1JZMOIUxAAAAAElFTkSuQmCC", 42 | "iconColor": "#ff82529d", 43 | "contributorName": "fankes", 44 | "isEnabled": true, 45 | "isEnabledAll": false 46 | }, 47 | { 48 | "appName": "智能服务", 49 | "packageName": "com.miui.systemAdSolution", 50 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAACS0lEQVR42r3YAYRUURTG8VMb1ZaZBYJQkRLSJrGtXQPNLlhCwMa+kLI8C7KmYR8k2CRisKpIFIIhACMLLFOp4mEBEyBaWCH+Wb05prnnjtnX2/u7eHNxfMz13j33ynAYo0pEnQZNmjSoE1FlTIrAGHOssoHPBqvMkT+MMjU6DKNDjbLsFiPEpOxGSsyIDI9x2uTRZlyGwxRb5LXF1DARs/yvWRmMFYqQiB8xRYnFxjxFmhcXFbYp0jYV971oU7Q2I/lXI9/KUCZlL6SUNYQae6XWjSjRwbImPbiFkj4cZ4K7pLg6lGQHM9gWpQeXUGJiEsuM7CDBdkV6sI8PnhDFbe/bzzqWlNGs9EL2XHNDqDDOqCg+0m/974rYXmvhjex5xwhpAV85p/NHuEpCFduyFj7Inpc9ITCv8wquqhAN/mBzhmb26wCfPCHLonBFQh1Lh2NZ0TU2JcMzT0gyMKQuNLC806J7oL8Xc4U0hCaW+1r0BroLy0SukKYv5LoWfUcXloN8zhfSwPWT0/8UPdTZi3x/Vx3Xey05RWtn6DzOt/ARrsfiwWSOkMh+GW+KB4f5ZoQs6PwErqr1WfnNRfHipRPyg/M6X8BVsj6QbfZnJYeodIdkWAJRJCxxVRRP6LduN3RPteQsQN8fMg3iwUm+0G/F3rRio2XVpeUoqZg4QgvXjL39Thub0HNRvBIDFd7a26/VSKS00EFXa+DY5Be2WpCWKEBzF6RNDdBwhzk6hD8EKRKKkIQ+mIY/Yge4LAhw7RHgAifAVVSAS7U/ruBAFKjP23QAAAAASUVORK5CYII=", 51 | "contributorName": "fankes", 52 | "isEnabled": true, 53 | "isEnabledAll": true 54 | }, 55 | { 56 | "appName": "小爱同学", 57 | "packageName": "com.miui.voiceassist", 58 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADYAAAAyCAQAAAC93eBAAAAA/ElEQVR42u3YAUQEQRQG4IMgQURCACUIQnIwgCCEwEEgACgADBQgHBACEBEIAAuOoAKACAAcAIAv0RpAO1uz0c0PLOyH3fHeP6Pc2HZj7sFkVD4abVbLYymXQ2JNxSo2FGYiGlvqiomi/X7UGeDZQRfMBeCpDzbT5up7zLqU0x99mw5YkNIsJGZXsFYOE4Svf9qRObi1VQJzDN5dfz48anP++5gVb9ps5r00HwtSDv8cq1jFKlaxiqUREwuPmJ00PF9sFBye3KW1IFguuhaEusqVx8y0mWau39P+xYK9rGKhf2WKxlmVKf7/5lmxit0PeQV4UlZKl5uvfY7vB4I14V69OJDTAAAAAElFTkSuQmCC", 59 | "contributorName": "fankes", 60 | "isEnabled": true, 61 | "isEnabledAll": false 62 | }, 63 | { 64 | "appName": "小爱建议", 65 | "packageName": "com.xiaomi.aireco", 66 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADYAAAAyCAQAAAC93eBAAAAA/ElEQVR42u3YAUQEQRQG4IMgQURCACUIQnIwgCCEwEEgACgADBQgHBACEBEIAAuOoAKACAAcAIAv0RpAO1uz0c0PLOyH3fHeP6Pc2HZj7sFkVD4abVbLYymXQ2JNxSo2FGYiGlvqiomi/X7UGeDZQRfMBeCpDzbT5up7zLqU0x99mw5YkNIsJGZXsFYOE4Svf9qRObi1VQJzDN5dfz48anP++5gVb9ps5r00HwtSDv8cq1jFKlaxiqUREwuPmJ00PF9sFBye3KW1IFguuhaEusqVx8y0mWau39P+xYK9rGKhf2WKxlmVKf7/5lmxit0PeQV4UlZKl5uvfY7vB4I14V69OJDTAAAAAElFTkSuQmCC", 67 | "contributorName": "fankes、HuaJi2333DaDa", 68 | "isEnabled": true, 69 | "isEnabledAll": false 70 | }, 71 | { 72 | "appName": "小米云服务", 73 | "packageName": "com.miui.cloudservice", 74 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAACQAAAAkCAQAAABLCVATAAABqklEQVR42u3UA2xdURzH8f/MqMFs2/aixlOc2UYw27ZtW8Fs1LZtu/0WNxfFK96Mz+PV7/jIL/cfA9jHU3xw5i1raC3moCP3KSyLU9SVimE0KZTEgUYVa1I6pjhQS8qH6niic+YCjwhFt1XKh6moQhmthW8iC0U6FlI2LPHRHugiBqxHNbuskO58RndNCqEWKShultXFcRjNkCJ4ToFsx6iN0R/iU5NJi8g+RC8xoosWo5oqRfCIAhlEEE08yaSTDfCKFqLCCt0dVrKM0eUOglA6ql2sCmKYqMofBG4Fs57LqNQWlxUUGL8qeW763Ww0a0QENxTPRcoTFGkVUVc5lzUBVQRVhGgUO8oXFNVBNNxB1VcIRXGwPEF4igGzUY0TbSI6Syk4i8JfDFiCylI4Ynoa6liDaqR2rgofULUTeqHbRC2Tc1/lT19l2XBcP6d1mSYLK+MrxyrbKt06xTrRJhMDqyLby0IlqD5BmJBDFumkkEgCJjlQXRT0IrSsoNi8T4n8aSE6mnK/rKCovE8WRTzCoqQO3Y0V0aaDwgghlhSylb48zmDJ999/uR8mg7rhoO7IAAAAAElFTkSuQmCC", 75 | "iconColor": "#ff05a5fa", 76 | "contributorName": "fankes、jasongzy", 77 | "isEnabled": true, 78 | "isEnabledAll": false 79 | }, 80 | { 81 | "appName": "主题壁纸", 82 | "packageName": "com.android.thememanager", 83 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAQAAAD/5HvMAAAEwklEQVR42mIYBYB2zClMkrSJwpVVrbFxM7Zt4+fatm3bttXZ1Vyb12trbNueqe+cs25+nVuVWdm1euOZq2m8fSIyIp8KFzlqqM7spjxFI5lHDfeM4eG8BXdpf05ga2VnVIcNeAyeQQHcn/7xaXO1piorU9lksY05Di5c5JdXHA9yQkZSUnbiX7gZT1bolNf9iX/JqWud2J6xfMgi81O5eDIxRdE6TYcj8UC5gE3pcU1UrO5mZzwerZKOTelp/rdOUlKMQ/lQDQGbUj7/xdzwmzUOD9jTsSg9zP8xN9x0xuFx5CddBXiC/1FOeOmMxv3eChalRxOTlRXKKGsq7A+6d7l8jP9Nv05UQ/AQCpDvo1wUaqpiaU1nzwjcm7yOpR77sXHRtKWzZzgeRhz5AcrFY5yUFiXFOIj3pq5jUXqQ46blBN/KU/zOjqXu438UC3ZCR/vXsd84TlEswFbmfZYHPZjSIwn7LAXfyv5LU+WkPjtDPV8wglURB8tJrVnjad/KwesZlGIOXmWvVJo1Eo8iPySdYswjALyi9knpMFdj8UBo6ZSYWTCSZIAH1SwZoaEIr1llZj6gXzFLOP53J4mNeTqeCUmnCLMBlcMdvELem1sNdTyeDml6ijmTCVWCRAkbeenk8Ai4IbWrkLMIVYFCqYeQouyNOxEPqVnTaFQN7MZNyvPaPQfADWvv0KgGWMV/K+oldCDcMNLhLEI1MEARW0QiIQrZ9w5mMaEaEHiPveR4Cx3AtI8y5hCyYD5h7yR2kLkA8bTqfGebHZJfcricZG7YYDwCN103i7Npb9a79mZZUBOehqfSpDPX3ix8uruvXccKW/A0PBP8QTezYaw6a7V/iq+wasqzEA+oMw+QBSZYyMaRVFF9noMC/80ysw1khVvNaRE/sDHPQrHfUYZRLXAzj4v4g7k8z0dKcc4kVCvcwasU86vUnOcgH24K6cT5HY08IPEpO/kUksM2PAsFcJNtFmbTyBtxl7mG9SJ+UTOeDTcpnULYmmUBK3igsvwrteQ5KE7mhCKhpCAxzxwSQIkNeB4KvW+WZ7MscGlinyApNeQ5XqOM72mUIpjNA5jrX6kpT4N9loo4k0YpQ2K5OTnIeNfXqXjK8q48i5AFkiDkCVbyZDX0rcQW5jQ8Xf2E0thktAkf8QW8yyU03kq8jq2CLIGz4FbaO9YTSuJ7nsXubKS23Acvcaen0jbcpab+lZqYc+H+qjMDtnTAD/ZMqDgPbGOu41pPpR18hn38H5TGPAMlKMVcqw7xHvsoWu0ZPZ/bPZUS+Jz/UtT/p7LnmWkGssBv2EuO7TvgqURiFv/lOyU1NIfhO1JVAM3Htb26K8YLsEmecCZHyvH/YfE483HllIzBG+wux+OPuBq7PIUM72XjAJ/u7x6UeBQLuJbruYbTeI86y/GePtzGzR5C5IcaIse/ksPGHMy9eDD/x37JLDi2xv1es4Tl5giLUGpSiv5cTpJf3RElNKoFrjLH+RXyxlvpVRhZ4TecFLaQBfbBDKsOVGA9I+HD/3CpamCW8wDFMiKkLHMI55Mqh8QSnqP6kUzBXHO4vuAOgiS420wzJ9nfjeowJfbgWXyScT7NSzmAuZHMo2w2Zgs1CV0mfP7hBzpKVfh+cGGMAAAAAElFTkSuQmCC", 84 | "iconColor": "#ffd943a5", 85 | "contributorName": "PedroZ、fankes", 86 | "isEnabled": true, 87 | "isEnabledAll": false 88 | }, 89 | { 90 | "appName": "应用商店", 91 | "packageName": "com.xiaomi.market", 92 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAQAAACQ9RH5AAAB8ElEQVR42u3ZAWRVURjA8TvZe2TYuFZLFqwHClTBohBiASwwgPTuomAsoAdbABAwqNwRAFCgFHgPM0CBQN0h5r0Q2N2/z8E+T+/c7uPsu/Hu78Kc8539Pc+De6JJxxxtUvbIOCSEQzL2SGkz54826TDgtAzo0ByVjelx2nrEf3/aLha6NIbDW1jZihQxvzEipVjDCX7Tsv+UcTyRE9P4JRpO8ZuX/TXGsSYn5vFLNdzDb1n2rzCOq3JiGb+uhjP8NmR/iu+U9YMpObGBX6bhPn4f3cQ2ZW27+Q/49TWc45ezJBPnGFDGL87L9FLxf9RwsR03s04Z6252h0Jlw0dcc99zyr+k7vu9zlGYMHxhxv02X1PkjfvNz8g0ocLwnoabfMRPRpDVtttv8A5ChuETsZud5TnDn+krHWbdXixThA7DN26enGjxgMc85D6XT9ZuyAQhwyrnFa1oBFqyk0P4sDrmM5vcYYGz8izIX5uycowIGg6gDtfhOlyHoxG4wEscnkXCIKx4axDmInfds+qee5yRtVsW4YRht2XtUhXhFVlbtAsnrPKiivCi/LVSh+vwfx02U4dzLOUa7mOpr+EMS5mGe1jqajjFUqrhBEtJ9S9RK3ttbPqivFn91YD1ZYj/+meXfQ6CXf8csM+uXv9Mrj+fN38zIElq3gAAAABJRU5ErkJggg==", 93 | "iconColor": "#fff16033", 94 | "contributorName": "fankes、jasongzy", 95 | "isEnabled": true, 96 | "isEnabledAll": false 97 | }, 98 | { 99 | "appName": "下载管理程序", 100 | "packageName": "com.android.providers.downloads", 101 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAAA/klEQVR42u3VIYhCQRSF4ZPVLBjtdsG0mB9mxWoU7BYXu8kkGO0mi8VkVQSj3W7Hf9PCzsN9zs67AxvmO/XCH6/MJYw588qZsWyQUSSTBTYU2cgCB4oc/kMkRVIkRVKEGh/O3kRy1zX54EoZV/mgJPlgThlz+WFBqIX8sSLEyvbpWj1itvzFViGossfXnqrCUOeIjyN1haPJhXcuNFUOLW4UudFSebS585s7bdmgy4NXHnRlhx5P8p70ZIsBeQPZY8RPI8XBhG8TxcMUgKniIiNTQoU+n4brU5GLBiesnWi4kRkxzNzIjhh2bmRJDEs3MiSGoVx0WHMw3JqOkhBfNxru9SEaTA0AAAAASUVORK5CYII=", 102 | "iconColor": "#ff72c476", 103 | "contributorName": "fankes", 104 | "isEnabled": true, 105 | "isEnabledAll": true 106 | }, 107 | { 108 | "appName": "浏览器", 109 | "packageName": "com.android.browser", 110 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAQAAAD/5HvMAAAE20lEQVR42u2aA7QrVx9H8321bdu2bdv2Uu02eWbthdr2RTTXerZtIxgks/99a8o0uGeCqe7+LYY7x+e/4uuii7+K+DbGXkvOiz9rRM2xqUn2pPSk1CRjdLJqRe/Fpxt7rNzCIw35//JNV+yh36W/YM5A8mGLPk7vp9+S3GnRBvI/n4OsLuvL1nI8J/yWE9mDdUrSWbpj/HarJj3RTokCtpkea30Yu2blFrIGB3IqD/AwvTLyFLeyWXEt8z/ZOH5HqsM2QVyAbetmLbcwgN50p7t0ywy9uVs2cq0zbz3jcrPBjkuRMJu36U1AumWH7hzgdKs6KzYzPrKXS0lg0kgglxI9uVxWV++qNfSTrZkgJQOk+ZBASUKLN0w+as+VskGCj3gCf5FCyzaOvYEuZQWLrxlIIEtIpXX052xDyg4wkf487VJozrrxFxydCgDM5nn8LoRkjeRDti4VhC9dCcVOTs+VikKMj3C6jQCHyv87WXfM2VJxMHiLgJNtOlmV9U8QLyBBT3pwg6xfcM8yr7Nj4gnYDOMjTvMVYvkmpgbiESxiFNcWFFp5j617pgMTaaKHbFTgvGMNFs/AogGNILvnPQ3G77BNz3Rs5hBGI8JJeaa9bGLVgGdC06hFQ6OBgbJJ7uVwv/RkD7urnQiak6GcmlNIv9NOeSY0jyAaTmjjelkzu8NWM14Rz2AIIbTf0sSWOe5Z1izPhvNkgmh/SHMOocX7IN7AMmqIZgjVc1X2+fASj3RMOoig/Sn+7C57ySOhOVSjZSWQJaQ3eqIznxCaklBqvAc6KwkRURRKT/JAaBxhNEUhKiwEjKcGTVnIrqgQNhOpIoq6UKqyQgmpc3TUhaxxFT3QtxBEcyWUrKlc69BMjdS5FFrpr9joaSXk6LgTWnZyRXR0WnLNLYWtY+GedmWmelBBp5Gjs8+LWxqTyq6zCE0pLWyZ44ifGFBmnblEiCjo1PNDzlqsfkvaKvMhNYqmkA45Pee9Y8Ue6bJtsCwlqqij0SzH+3KxaAPjY+yyzKwJaEQUdRroJevnKTTErkUvWSdNM0E05YTlsLx16gVbm+ESdeI0U6uuI3VUya6+fMi6cjOzoITOaiaEhnqGcB9r5RXiAAbwPqkit4gkLTh7lnLq+YZD8rfP6pxCb/rQDEUITaKeIJqr7gpxhC8/sj4P0J2AdHMvxITs45dC+/SVdQsJbc1DdHfqoh+ScHV0H5d19VPJV2zoK4QcT69fascBPlJVYn72TUIpEU7xFYYTHCEnPME30KlMipmE3LeNc5w9U/7vRsjPQCYUUsJmGe1UoblOo9RxmVO9Vxdyuq0/cwsITaammK6SOqnjXEfHhZATnuYFvsgeS1jMZ5DiXp6dKFdm6agJOR3n5yOMDB2DNoKE0IpKhLNlDZ+vKKHf2uktYqQBMJmrvI9np56vOMUZymqwB09mCzmjqRdVjGIy9YSJFikTtvvIRs6+rgrrcBu9cwr14F2G0FiMijOMB/MtRzqrsjvYlLvoQc8/xtlKbuQMrqMXQSI0uNJpIEQVD7O/rzjYgAO5PCOHsg3rOc9tyO6cwLMMpVWpk9ppkX4cJLtmF33d/ali9Yz8P/NZ1uM0bqN5VerzL3208CMXcRzr+LxA1mDLVbkKP4Ec8XM0W7KZ81M8p4sufgJqk/hImHZPNQAAAABJRU5ErkJggg==", 111 | "iconColor": "#ff50afff", 112 | "contributorName": "PedroZ、fankes", 113 | "isEnabled": true, 114 | "isEnabledAll": false 115 | }, 116 | { 117 | "appName": "小米社区", 118 | "packageName": "com.xiaomi.vipaccount", 119 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAQAAAAm93DmAAADrklEQVR42u3RA3A1aRoG0CcY27Zt27Zt27Zt27Zt27btP9j0PXurK+qtoLya0/jMN//HjG1Jy5go3cxuZ7ubJhVGN6OpTNnnM4XpG9Nl/pxUfyZOj5Wyf/2ZNFVr5tyc0u9zVro4C8yWbm4E86TC7QaURLNL3eo7DPGAm82SkofwpQnSi0YPgPc97Nk+nleSmFbVDKnT7C08aZj0Yoyy9jfzdi8wfPkMm5KRkpjNk/XnbvfowEspmcTX1G5Phan8gY8MYyijGj3djGhik6Q3K4B9UjKbNoojU2Fe8EJiJb/4tjg7JUv7BG8avvdhPsdHxreWDa3geCgutpx1bWGalKwB7kiM4mWwUmImv+Inc6aHG8DCptaXlVOyEzivc7c1PG8iz6LD4ulhL6jdldhWX2ZOyalg/5TcjHZfgh3TrWeSD8xoNBtaw6qexW92sbINrd51N24B66ZkFt+Awvnp4QA9PuqKnNvwTio0eRodFq5elNfSw4WAQg18Z4bEmN7D46kwos/Q1h2iFX0Pfu51f6BFq5qjitPxjqkSU2vBpakwnVZ8aqTUmUMbauA9Q6UUP3vUmv7A+podavzUWRIclworgodSZyzv4h+WclPvQMUshrUCWD7dbAp2TYWtoLgqMYIXwZ6JubXhD5Oni8vwp0nTzX5g7VQ4COxvmNpj4MqUnAs+6Apo3I+XNKVbcQ4K86TCeWAzIzvPyfY3fEpGdZKr3GKiruKXFNell9p9+MowqfAQWDgDMx8URyRGMYOpTWIGH+MVU5jM1KYzpcbEiGUtGxnXNKbt45nJGEms2xUSJ2kxxJ9aQLs//WWIFrdpSAzvc9DhD0P6eFq0Wz+Jq8GUSe1dfbsmJVsazBJJ7FycXxxhGM2OLE4pjv+X58TiLEulk4WLE4qT67V9Pac5xKjpoSH/if5mFiMnxjSNhjI3rrW6Ymw2yysDZwrzG9YSpkg0G1Vj+uNkr5vW+1aznNcNbQNXerC4xEj29777PWQkG/rao55zv7dMaXbvGyfdGlO1bx7J27k+t2SiTJ2mPF8v/d64aRbJplk3S5stW2WFvJzNMnmWzdO1TTNiJk1T/xM2pS3yR4aKfJ+Z83Lk3iTDlXUjNrRH2vNDikit/gyThjSmId2aU3V8ZsrkuTGf5scMyTd5OIul5saGu+q1V+S3vJWzckO+y7D5Iqnv/bu05Ov0z17WT2xrFZPaNjFlcVVxrRkSYxRnu9XiiXUtbTSbaLCYuY1nWyPm/9k/ASDrXwORCUKbAAAAAElFTkSuQmCC", 120 | "iconColor": "#fff03c51", 121 | "contributorName": "lamprose、fankes", 122 | "isEnabled": true, 123 | "isEnabledAll": false 124 | }, 125 | { 126 | "appName": "小米音乐", 127 | "packageName": "com.miui.player", 128 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAACRElEQVR42u3WA6wdXRSG4e+3bduobdu2bdu2bdu2bUW1EdTG25PLuXOGtZ4dZ1tr6bF4gQS6f/xLXmrTk+lMoxvVyc6PMqCD7gcJacdurOxjCEUUwCtM1b0iFVNxspJSCqAEu3QviMsI7O1mMNkVhoXAL/KLYkR1nt3MZzDNKUU6vpABlQFoJX+oQqTmcsQvHCYE3eQdc8HHIDOINFjeMJmo9vCBbDGAqCbIHc0J1kI2aE2wynJGVqzc5j9ZYC1WTvGnnLAMa8NkQh5OYWe07FERe5lkQD2cFZc1PmMf9lYqDHlZiZtFskYFnJU33D53sWSFiTi7zqcKIDZetFMw3vPekK64O6dg5MGLmArgS07hLq3MaIcXSxWC6gC+bxh98Sa7QrARNw1kxhi8uaQQ5MZNL5kxG69aebzKk2XGIrz7WgEk8P0gmYR3CxSCbn5XMgg/0iuA7zmFvSEyoxPOttKVAiQPLwpBbex19fcDQxvelQVeZSN2msuM77CXR7YoiJ2//ASsPHLEdKyslxUaYGWiXJAMK41lhZhcI1hyuWI2ZteIKWu0JYg8oA9mbSUfAVj3kkbt4zPZo+IDGaSinDHpHs5kLUaT5I7jGHWUC2JhdFxe8BtGO/nRV3r+m7zhV4yW8LpsMQSjX+UdnzOXSNNJJAvEYR2R5vK5/OEN+nONSB2IzmsKwVv8T0WWYTSQN3Qv+IuOnCHSDXaxjGOYjSex7gffUp0l2DnIMDLqweBbKtOX2ezkHOfYyWz6Up3oekq9cBcEQhZs8TdL3wAAAABJRU5ErkJggg==", 129 | "iconColor": "#ff29cbb6", 130 | "contributorName": "naicfeng、fankes", 131 | "isEnabled": true, 132 | "isEnabledAll": false 133 | }, 134 | { 135 | "appName": "huazz145专用推送", 136 | "packageName": "com.huazz145push", 137 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAAA+UlEQVR42u3YIW7DMBSH8XeCgB1mpSG7yljOEKNJk0p7ntDqwak4ucCg+TfgaiRvTaX5b+SfkaVKnwoi+9kijFxwNjLPymw4F0Y7xsCE8x/OxPAokVipYSX9nagpqRNxhhmFOUzI/g0DKyorQ4lMKE0lckXpamacUDsZZ9TOhqPmxobaZmTUshFbHq4vvol/HTJCdoi0/64ZK0YK3sSRgo8qEdJuvdsvXutEFvZudseLLgKfdqeMLIrIEu57pEd6pEcCB8fvk/vb0fGbUcuNrkSOmje5pra5cOtHh4ZDkHqcK0jywVSYmfWTfLJCmEntH3D0T1FNHtV+APZ9vIpwfZ3JAAAAAElFTkSuQmCC", 138 | "iconColor": "#fff16033", 139 | "contributorName": "fankes", 140 | "isEnabled": true, 141 | "isEnabledAll": false 142 | }, 143 | { 144 | "appName": "游戏高能时刻", 145 | "packageName": "com.xiaomi.migameservice", 146 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAACiUlEQVR42sXYAWQbURzH8T8YE7ECVKl2YnRgs9kM5WBQzCA000pNDFnDzKYdSGAEmbKlm+lmQBBGzZoCjhkoUaWjYQwzYYxJOgN8hzvp3f1f0kvzdJ9A3N/L7y7nPe//JA4SpKlQw6VFhw4tXGpUSJOQ0TFNjjqD1MkxLSfFDFXiqjIjw2KSMl2G0aXMpMRHnjYn0SYv8bDBKDbkeDQZVVMGwxLpj01s2RQzVrBpRTSy2JbV86KNbe3IvKGM2W9echeHVbbRtlnFYZEiPzAphxeQLiZbwXthgV2O7LIQqI2zhdYNLDZUMdljQkIYYw3PGmOR2gR7aFXxkMJsTgyYosSUGDCHScorFjApydAoohW8UgOTWRkas2gNESGJyYH4OMs8qyxyWYwoBZ+ZA7SkkMFk3R90g194/lAUAwiFrKNlhAomjj9on5+scYElvgF3jg1x0CpCDe1vbx04eqYnwNvgz/kfKHnf/OuHRNUEF+1L4L4c8QFu33vu1dgBVaGF9rE3j48GPwJexXiSd0S1hA7aC/HhAp9Y4j3Q4WqfdxLAY6I65pCH0sNzPJ+5JZoOmTOFtNBuSwCXeIAjfeCEa0yZ/i4X7ZqMwPTia2jnrYbUzJPxnBgwhkOaPEWWmecmEzFDKkIa7YwaeJ9dtK88ixGSFhJok2oR7M+VEMaJSogIdaKuSwAOgy1LAFcIq3uXc0Q9lR4u0uI4aenhHmE5v9Eh6jAQsQ8QP4YPhE3330h8p84bdjgkrn3qvGaPsKreEtnWZUZv7mwrn+421UMe2/Jx2zj7bR1NbGmedjunsWm/lbPf1q1IPGRPfFiQPb1jj/9/gKOQokCDQRoUSMnoSJIxHqplSEoM/wBUHAqpBPDU5QAAAABJRU5ErkJggg==", 147 | "iconColor": "#ff4389f9", 148 | "contributorName": "fankes", 149 | "isEnabled": true, 150 | "isEnabledAll": false 151 | }, 152 | { 153 | "appName": "讯飞输入法小米版", 154 | "packageName": "com.iflytek.inputmethod.miui", 155 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAADBUlEQVR42mIYaQDQfD0AO5AuYQDth7Vt27aytm3btm3btm3btm0bZ5Hqqpm9cbI4l+lU5hv8NLaNnehWb/nRB553n3NsqWKQ6AXzONDj6vnA0SrRDRW3asWt1ozO2E3ZNx53tTMcYn+XeU7Z1ebo7hqut7rxog9Lu0DRrtE6a0qcaNZowBj282PbMbaTLm7toZrG+dIZ0ZxDO7r4sKt0azTmPGnzaJPtpfOjPmtJlQ77VNovajO8lwDLRuo4pk6Ddph8Fl2wLuDq6MtcgCcMHF1xFKDvKOBCwKrRJWN4B9wbZSYHXBM9YEvAclFkP8D60RNeB9dGkSfB10aJnnA2YKxIxqLciSxm3upA+eevrEUU3h86P2cYFRWDWQOweCQrA1aqvrYxXq0eRNkmOQXkZ+0Nlq6OymDBCEMD9orkaMC4hZnkvr4hbo3oEzKgB8GEjgb7VOveArdGcit4NyIVbgeqN8WY+iuGJIuCV8Fd5WN6PZIPwC3RR4ZEKoUk+0uLZM2JgP9nATiocJj5VfpcyRTGMHjNkH7cDk4u1PYqP4IAHNP3XFWU7VYrJGs2jL7PebpyyFVNQ66JaBiyWKFyDmDILDwPnqgbsqu1VFSM3SRk2kLlWvBxOZXPypNXIWSGukulR52ctxAjRcomfF/fAW3yXOrg5AxxcpP12ITVmiMikinkc04qgENzfjNzvpP/lUKKX+tUa8aPAjsA1igWPwMvRo+4utC2kjMA80cPGNln4F0DFctrAw6LHnAQYN8oMoK3wVPRNdP4CXxr/Hpr+Kl7NmEdG6nPtewaXbEk4G1jRV82ALdGF0znoyarBSd3F2JkTwIuiXoM47GuQm4EvGSIqM8sLo6OmN8d0njNH9y6ljaXSQwVLTK8I5BmieZM6KnWN9CGsoEXpRdbXrkZ1dFID9rH7FGD6R3qHaRLDdbuPb5N0Veuc4KdrKJiFTs50Y2K3rFldMLWXtOKbx1ljOiUAazrVo08becM6IpJHeohbyv6wOPONU/0nhFMZWoj+V/82/wKhvuAGWpD1PwAAAAASUVORK5CYII=", 156 | "iconColor": "#ff4679e9", 157 | "contributorName": "fankes", 158 | "isEnabled": true, 159 | "isEnabledAll": false 160 | }, 161 | { 162 | "appName": "权限管理服务", 163 | "packageName": "com.lbe.security.miui", 164 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAACD0lEQVR42s3WA7DdXBRA4fOjtm3b1qjuqLZt23YHtW0Matu2bdvtqnIeb5MdPHyji+xZcaLCFbrxhVMkNb7FYD8wlv+9C5ThLn9MMn7pyR+vqK7cIzcH8LfG+HU0/s5Q1E0gJgsIbJXxzygC20hyZ4l2BLfS+G8kwQ20GyjPfRBHtNfUlgYysY+/WWEaAbhAAatADJZgZrlpRNtgcoToA+Ayok3wcQ2RlXtYW6bPLqx9oJQKiPxosi0ZjkzFgJHTyMwS7ljtHtF1oglS7YyJGkh115FVyHwjjTERgdvI7NGRK8iMUpqiEzK39MAdJDapQJiPxGP1B3exNk0Fw2CsPZJGDpJd+URaNnoROU1qZYoEHHQbOUJsi8g/bHMT0daRVPlEFBZId9c9rHX2kWiAJovYP78YgsRD6e7SWgRIlEPmkfRi1K4GiOyzG7mLVCVjoiBSD+XHROtiTNS3H7mPVB9jogXY3V0PkOptTDRH6rHzSDP7W3IfqV6CLXF94PuGRmSwIOJ6dw1yHrkZGrtrA1IDbUdO6ki7EIyM0pH4PEemj83IV9IrjSohdMW3UgFRJwQirX29dWz0MLKfdMo3SnDRg8h9Kilz1Oati8hX2ikZRjiMTCeSkiMaK21GNpJK2Udhzggj9ymvnKMhL3zcIFsGOgpdlXsMMXmRmElU5Q2SsRo4TEz9ks1mYCeZlcAPd3XVes8clhoAAAAASUVORK5CYII=", 165 | "iconColor": "#ff3b8fff", 166 | "contributorName": "sddpljx", 167 | "isEnabled": true, 168 | "isEnabledAll": false 169 | }, 170 | { 171 | "appName": "小米智能卡", 172 | "packageName": "com.miui.tsmclient", 173 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAAC0UlEQVR42u3WA8xdSxTF8fVs2wyebdu2bRvBs22/2rZt27bdoPwXN13ZvZ1TfIruL9zrcGb25BwVFJQdLuYftlGR8RvXK8k4gClAVRUR/wCLOV7Z2Iex5NRQEfA/OXM5QmnswmCwztpCNAObwD5KoSFRI20hqhB1lRlvEf2tIuAzop+0Pk4kqqQi4g+iKxXRFKO9ArZmWykb27CNAuphdJCMazDmc7gCvqQ3WysTnfhXAbsxEeNeH6AJxtMKeBWAlspAfQA+VMAtYD2Uw1lZPcGjzltnPwKAlxXQGuzCXPQF2J0yzidqz1ZSRGOiqzKm/89cNMjBYAX0AqKOfoxbJRgeV44uzkfmN++nMh7HrMu6TqIlZq/JeBPsPPFMHHLWOKyr59xsGrv46tPAXhc/uJjLHsn1WEnUjIZk8UuybWjk/+Lm6SzjXbBrKEeWulwL9oWMFk7bxmlpIqOq0zGSRHtS+kgSQ1w3l1He6QgxwEVNGW3yU9qRrzvbSxKVnAyU8ZfTCWKYi4qy8Hb/OWtF1M2d9kNoV+NPpxPFQBe1k3u2noxWsZkTUxtH8nccSQ8XDWRhCiay7QbL2VEBQ3HnyagQxkcdF4MyNtPVChjAaLaScRHYhzLaOm0lvnWxgL2Tm6m5AvZkTwXUArvU6Y7McPqHuD/9znQBe0UZeBCSK3IG8WqOB/tKxn1E1yuBy4iek/EO2BmS6OdyFFslx+IvRsRjRP0V0DuvrfkY7AkZx7McrInyUJPoAhk3gn3v+bNhGR/Shpv403pSAe0wzk/9YbypgKe8g5Ko5MYwHsBo7ZhLiE5WwOveYkk04HMFHMxcjBtlogZGTxUD7TFaKOJYlmI0UBFRJTUnxgtEVYr/k8r7MqMGUVdtIWoTNVUK29IHo5W2EHUxBrGz0tiDkeSUVxHwMznj2FdZ/Ji/VUR8D8zhcFkSp/ER26jI+JBLtUZBwSqUM4ZhZ8XMTgAAAABJRU5ErkJggg==", 174 | "iconColor": "#ff177de7", 175 | "contributorName": "sddpljx", 176 | "isEnabled": true, 177 | "isEnabledAll": true 178 | }, 179 | { 180 | "appName": "小米钱包", 181 | "packageName": "com.mipay.wallet", 182 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAQAAAD/5HvMAAADSUlEQVR42u2WU5wsRxjFO7Zt23jO433MW3xt27Zt27Zt27aNZZ/zpXpZO+nJ1Gy2upPcOf/xzNf1/xXH8Yvcw5f4nlXekgcd0/Bz9uEULLDKHAxxqzixIo/yI3bGRmwLhC0cyELylBMtfIKtsMyn0CbrMZwfyj3+Qs2o+iZwtmIkH/PrnWbYFhrr+arck3futAqjd7ReGsvX9P75SJ874SjxR62P2BnbQmcJ38nW+TbKQt+MFZiN4eiB7gVEX0zF0mjbipTN2pXR33dUV2Agq7AUi7FwgVGEJVienTgLm33anCL3KSG+gMk+OjNZU4qzsBWKsCIH+/TTGv7g9dC7nP+Xr1a6tVjYKmU4GVsj2+XvSojvYUHklo5+LGFZqIjbDKtNhVa4VVnYNlIcE02FZrEkC9sHXbDVTGgwiwYhxAZYbyTEriwcCFWwMh6hkqzEhmxmgTpSNktohZEQlJAqqcum1qjLWixhLMQuLKkKmrCpRRqxnLlQTzZkU8s0YSO3kaEQBrNpEKAdVpkJDQtIqANWmwmNCkioM9b9q4TY2XBjxNDwhyycOdQ+XqEmbOY2kPq5sGHmo/eswwZs6JHzSqvSq+nRxCN+oUZsxq4YiNEYVcCMYC+2lfrxDVkTtMBQjMy+iBWpRkpojZnQcDZgP4yyyjA0Nxfqg962ekdjEGubDlkvDMQo+7im/4cwTi+zitlZxvHhC+3Lw8yAdMZhS552d2YJcSfSqHMNJ2NwChtiNDYVR2Je5RxS9XZxjZ5Q6mc8JXEHwJq/0ZnLZMlHWFUJ8TOclnwElzEmqtBuMl9C1f6BEFOxPMrBMgWXRIIWUuFxTPXRGYvVRDhCLi5hdoTOaGxkqkgoQl54AQsxXmmMwEiMw3QeJETCE1JhOi9yFxZzFc7gtqjYFLKfhFBCKCFkPwmhhFBCKCH0EY7/S3TSWVoJycNc+S8ROsoXHC/sRMi/IJjrZIdLJfTwKr/PFfoZyaELjZL7nOzI89hESojBZX7l6OGXXCehhWn8WfWPHrmHTzKJDElnb66OFr6FzcEr8YLeO5G99I4U5/lAV9YofuGro0l9gpbcJ9fFakCcxTR+r2RMIvexEKu61WgJde3K/FLucf4L+RN0FnOD0nuicwAAAABJRU5ErkJggg==", 183 | "iconColor": "#ff0ca8ff", 184 | "contributorName": "PedroZ、sddpljx", 185 | "isEnabled": true, 186 | "isEnabledAll": false 187 | }, 188 | { 189 | "appName": "小爱通话", 190 | "packageName": "com.xiaomi.aiasst.service", 191 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAAC5UlEQVR42s3VA7AbCxjH0a+aup1n27Zt27ZRD55t27Zt27Ztv/rilJndbLJtbnJ1/mP91hvtng621c9T3ve+c/SzqS7RnMzuVPfLesuOOkRz0MMgf8nzui10i9qYwvMm59qohd5eNnmjnKlnVEdfz6nUg7pFNVylKbaIhI729lrR7rKzjpFhXfWyGr1vByu6X6Os19OJx5XztE5RxGNKnRsTOVOpnWICu8mzcqSY0VBZo0yng0EGmVdnT8j6V48Yx+nyDIoUeyq1e4R1wUURZjJU1qYxjvcrjBwv6wNdTedTMMKGZQ+4X9Mi18vaLsLmCt4xnZ7eV+ycpkV+UuwGHfTxL/jTBQaZPcIS6qW9X0vkD1NEuBncYfaIAh+WiwyoKjIgwnIacIcOOtnMxWO3fYSdpT0d4+hXReQ7U0a4F3fpHuE0wAiL6+4TiX7VRw6PsKQRfrFgjOUoBStFeLs0srry3jFtbmS3CBv40uIR+uqqo31943c36mZhIxWMNEOMo5PnlHqrOJGJPJ78If3lwfRn3YUSp0WBm2W9abqI/IiRdjONzmbzFHjS6mbWw2wOUq/gL3NEgV0Vezc5i5wI/OoFaSO8q9hFkbCcURJvZBKZSMWe1zfSfC1xZ0TtEa+YIoo5XOL52iOe0yeyLCAx1Bw1Req9pG+U0s2bEsdXHRnqcetFHltrUDDc/FHC8X7Onxscb08zxqR5XeIe3aIl2FLartESdPO2xEjLREuwiQaJh3WMluAmaadESzCFl6U92CJnYwWjis8mP6Ojvpn1jsrYyP/SHi7/CJjWXbL+daIOUQkbGiZtpF11K0m8pbydozI2zmS42/xFiTfluTsqZUP/K/abA8weY5nGO/K9HpWzkVGyhrrCEF9SYyRhRS/LUXMkYQo3amixSMIm3m6xSEJ3W3qvxSIJ0zneby0WSZjC5q7zk0m7JGqnj7XtaqjyvjJLNBc99LKffvq5xPsKG2LWaBtjAJuxJcjlur/IAAAAAElFTkSuQmCC", 192 | "iconColor": "#ff0aaafa", 193 | "contributorName": "parules", 194 | "isEnabled": true, 195 | "isEnabledAll": true 196 | }, 197 | { 198 | "appName": "小爱翻译", 199 | "packageName": "com.xiaomi.aiasst.vision", 200 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAACyUlEQVR42u3WA6zlWhSH8XPv2LZnwmfbtm0rTp5t27Zt27Zt2/69nabpVafdPekL5/sf7r1WvrptNMkMDLScFa1i1TSrZFm5XVYIGdSsYl63ieV22zSjmOJ1VfhGtja2cXO7nGTg9CQrqMY/Tk4719GZzxyjT55kRVW5JO1cxg+6cmmeZBVVuTDrXdZh7fI0+NNWXSWryuc2JxRIcjDO9eChWMnvFjHSaxUkAZv7C59bPE7C3IZ4q6Kk1eNg/zLJlY4OOcww3eyU/D7RN1GSgAfAvsU7/rzc1u39Eim5P0YyTQ/nessLxml1gbc8ZJoWb9QpGWkB8K+5jfAS2CNUvVJJcnixZJRFwW/mNczT4IBQ9Wqk5Fn8YoViyRgjvQSm6ekx/GzRCmuylF0sVXbGbx1G+plgXDI3zAQjw/eivo6SpJRJfrej2c1mZj21mGa2kKW9QJ2SjKDp7wU5NCNZWR6/mjVIHpfHOXVJ/nW4lfwqj++85OUkL+XkXoNjJfC35vjdyQZWv2lVZ9X8NamXJTtKhrtf/bzT6IjNvK92Gp0xymkuLMx3uQfGXS50T4kkHs/rysN6hJkBnqpL8nLOemyXzm31/0ne1iOdm+adKIm1LV5RckgyPkJr+DwmQmJ7/GrVAslLOvK98WF0vMMMCt+z+7Jc8iA4sYLk7GR0a79LtoDTyyU3g8OiJf9YLH3kPsJK6XXjl7oldxjYab6XG+qWbJ1TsUOc5NBIycvGJff/8z0Qcp/dDA//x3qxWHIXODxScnEysh4pv1glGTmsWHKaf/CEQVGSm7To43YZrtRTNyeVXSB/BjfbXvdSyY8ud6P2/OQ6V/q27IzfXYonPOiBdGsvnc2/JoYSSS9X+UtnDszm7/WvKmzWyMe2bvWJDL+2W5MhqvCpORrTxzz2zbJ6u/HuThPLF+ZrNIsV7OV3ZWxs1iYFM/gPLvOtkAWVm1wAAAAASUVORK5CYII=", 201 | "contributorName": "NekoMua", 202 | "isEnabled": true, 203 | "isEnabledAll": false 204 | }, 205 | { 206 | "appName": "小米妙享 (原 MIUI+)", 207 | "packageName": "com.xiaomi.mirror", 208 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAACRUlEQVR42uzTU4BrVxQG4DUzSW3bNl9q27Zt27Zt27Zt27aZ5JyvbmPdU9/vf93ea8U/X396jGo5qznCUVYzjxH1RJYMZBGX+UDiNwXvO9WUeiMbpnWbgno+c6Jhot+Z3isaS91t+n6/xataecTQ0T2De1BrqSsNHN2yq1Q7SlaKJuTkf05fVDOCd7XrCQNGXcawi4c893Nus6lho5xNpNpVMlPU0GtLn6v0jqXiD27VvtShUcVQLlVU6wsbxS/kPa8Tj0cFffaUqu/LX29jAgWdeDIqWMT3GnvN0BFhIkWdeC3K6HWRZhJbdrPJU1HGKN7X3AMRYTBv6MTDUcbCUs19btSIcI1O7B9lLK6VookiwpZS7Uos0t0mE/tEu542VJQxl6Lm3v11hq0k2lG0aE0jvqS5M+IXhva4VCupC+Wjip2kGiuVHcs4XtXKc8aOGkbypsYurTiWyTyhscQDxou6zO0r9b1g3KhkLOf6Rj1f2NUg0YAeC/tIredNHLX0msbZPvSHkjecZ7powcRO8p4UkHjVvkaNRvQa2TwOcaxjbWtGQ+iLNugxvKUc41iHmceQ8Y9nGONZzCgGjz+HcRzkTZ9JfOQZGxs2sqXHsj5QLvGkKSNLlvO5Wi+YIrJibO+r73YDRjbsrZGC+SILBvGoxo6LLBjOexq74V+0ydBe19jlkQ1naSS1ZmTD7L5T32tGjGzIO0mi1jfWjewYzGmSmi021RtZMoiNvSABFNxhEb2RPUNb1lYuso55/TAOhiELRgEA8vdJN910IEEAAAAASUVORK5CYII=", 209 | "iconColor": "#ff21a2ee", 210 | "contributorName": "PedroZ、parules", 211 | "isEnabled": true, 212 | "isEnabledAll": true 213 | }, 214 | { 215 | "appName": "短信", 216 | "packageName": "com.android.mms", 217 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAQAAAD/5HvMAAAFOUlEQVR42u3ZO2waSRwG8EjXpE7hKuX1VU5XpLyrUqVOL/dK3yvFtenSRIosSyALJQGDkAV+IO8JEI5wbMmPnAXisQv73lkjG9j7f/tnPVFORJEDu1cwn2ZnZUfw0zcDKOZBnGM1VmM11Medtc5a95nzSmz4m5hfJeWn75mUfBSxIeP/pT/vrF091B7NBWmPOmv6czs1OhtrYwNTZmLdP2Pjm2gU4/aLn1fXtUdXD78DIo4yuQ1iGtNgdKauq4/ngvTn/ocp/bNxTMHwaur6XJD/ZqwFsXE4I9PfmgsaNaCOBzKlZ7q5dl0RiMZc0A1AMXKcrmO4gXWacEPgTInj9Z2W0N3AbCYNitppOW2A7HqiIAxwrCun/T8ATSWnhSQKkhzzH6fFJK/vuraSIAgc40KCnG5ioOmMo58bF9YVc+zLZEBys9poBxy+Eqjtuu5+AiDJAYZjX6Kh2EGyncGpfn5HOTMu7EvrNIGGwBmPwAHIuNDP7bMozonXcgyzHCso4hgn+jlA1iko1ininDhxg5ijHhPoIgI5TVAoTUqsIOa01GP1GBjEoqbMpskkAtmXXt8uxgSS7YBinGAChKAnBKfIK8QCCoLJLbcDCI40umEO7pwjBCCRiwHEnH693wAFMT4Zn8wmx/jEHK8GkJtdNog57X4j4gyPgAEJq1cjSMgRh+JzDCDJUY8laHiEgGTX7bpZNavi0Faco9GZn1kmSHLqgISp8wqEDEDuvmgsF8ScLnEUpiCSYysmha50Jw7EwQy0tRyQ5NQ14gyqgypIUfS/zQpNxd1395mDO69Gpyi1JFBAkziKWkEr/cawDhQoBKlSNxWb2gFDlL0SXdHQodNcEmhKAae326c+AMFVU0IOQbgbRIK8El5n/jJAAXG8fsQhBAX9mBUZu0whil0WZZD8op8XB07T31wsSHLqagVvhYzBlRjlEEOQKGaIAodBoiE2FgyaynaIgyPdVzSFIUbJLA93jRJDwLCJAQw4XgHH2n+3QBA4Qcjp7PQVAhFFragVbQ8UCpEQmyBm0SuAIXJEQuguPEVvFwgKQo6m9HbUCoFCzHB3UEIriEkMO5zONlBoxS6KHMf/QKhFgnB2hB5xgEE33MqgxBTGONvURsHZdrPOtpUnyCxeQRwsDIQBTmdH2wMHmOEuzgwwiFGw8lYeDDcrcrzeYTKULeqp7L9ZCEi2Myhpe9oeXWmCQhsWUig56yNNivfee88QWjM0CYMsDMTt4Cj3dgHhgAIMcYDhAPURIG7FJQrNNGWL5oeFgKYzTjfb28E2RRhtRtGzshk3IwMMx0txiFi8fv2TIHBGphZyolaA0Qp3kI+Y30DS9PSzyD+j+2mR+w5IAPRDnEG1m8V2gcEBJ8x7PQuCnaJwC5ugYMUdGBz/nXiLF77zai7Iq90A9EPtdLMRBAgZMGTwtBEgQhBjdqXWauKt8eLeIP5vsXpM3dA7D4I3QI5ZtPJh6OWNDQtf4hkEBxqbhns/LUO/Kfmb+L7jJ0Bjw65HZ0ceZIQQfG4IgBUMQiBpSooSrh6tXngvNpxX+p/4puMeIGAm1vXr7jP1ifpk8PTruL/L+L/Je/mz/wY/p0d6/OWX+Zr5IO5mdP0aX5PEOuaDJrf+u+GvMXPmgabgbElO4qAg8PPqE/w+eRB/SBwMnsZvmQMKgptG+4+EOBIkObdfus8eJDfsOoMkx3iBd4rEhjgcRyCsmroOTvKg5DkShC1jTu8lPmWSBjUASp4jQZ/5W4ney8Q3i4efHmsTy80s8EN0NVZjNf4FLluMtpGUxXAAAAAASUVORK5CYII=", 218 | "iconColor": "#ffffa744", 219 | "contributorName": "PedroZ", 220 | "isEnabled": true, 221 | "isEnabledAll": true 222 | }, 223 | { 224 | "appName": "三方应用异常分析", 225 | "packageName": "com.miui.thirdappassistant", 226 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAABxUlEQVR42uzXA6yeZxQA4DPbthfMthVnRjQznIN5wWzbNmvbtm1bT91efX9y2u9G7RPr9XsQmzpbxGY12dFZ7vaAe11s5yib7V3vWxOtN8mfnnNplMftinxuzyiHYwxQZJxzohz21keRhWVO01uR+Q4qb5peinSIDWEb19gtqrGnEYrcFHnuQJuowU2KdIs8jcH/towqHKHY6ZFjX4sBTWwT6zhesScjx1XWaxbreEOxfyLHM6pq4UJ7OdLTKukTOZ5T0zzLVDYqcrwob1DkuEVe28hxuLy3Ise2+sq6ILI8KevjyLKn2bK+iyzPU+/T2EY7eT9Ejp10k/dr5NhDR3k/5autAfJ+jBw7e9Z4Wb9Flt3d5nu9zbTEFAP96iEdM08gwZ4OtVusYhfd84eWZnd9VfZLCb2HfQwu4XvaMiqyR8FuJhhoXvHdJNnLANXNdpvdIhzua/BMbDz7G2K9Za6NdfyLxU6KtMqHNjyqcA54rKxKeSCgS1ThKPBalMN+BoAxUYWLwTNRFrvpDe6KdbQGF0UV5by0ZZ53qmNdpSn4JsplH71V18PuUTY7eN9SwBIf2y7qhzM87j3LV/XfnGEIgFEAAH/FxE/1839wAAAAAElFTkSuQmCC", 227 | "iconColor": "#ff68e68c", 228 | "contributorName": "HeMing505", 229 | "isEnabled": true, 230 | "isEnabledAll": false 231 | }, 232 | { 233 | "appName": "小米画报", 234 | "packageName": "com.mfashiongallery.emag", 235 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAAB9klEQVR42uzWAwzcUByA8f9s21Yw27at+MLZtm0EUzDbbjCFs23b/Oatr+nr6d2Nv6j+6lYi6j860znSiUUALIpkYiff7YxUYgZ2M8Q8huI0xHSiI246SvAoTEeaUYbsxFWm5+Eabq6RR2yIS3bK0IyO1NdHpvCTRVcKyxfMRWfu992jKxY/ddVHDuC0nDK0wksryrMKp6n6yGnc7EdHP3e9PnIHU47pI28x5YU+wp8VuRuNyMVoRI5GI3JAH3mKKRv1kb2YMkofmYMprfSR1piSUx9JyHNMOCteWIIJ870j1TChmnhjIuGaKP6QkmOE4xgpxT/aEY52of/+BGpoOH9Z5hNqxnxCzTwgUA8+JUJDPmYTiNnkk3BQgZV4WUkFMYEcNKQ/C9nHPQDusY+F9KchOSQ4TAdecQ6L0bQls+Y6aS8xmWnLaCzO8QqYLk40xEJ1j8kUCjRCISZzD5VFQ/mJyhzF3UwK+ItQgJm4O0RlsSM5xejFVh6jespYsuoiZGUsT1E9Ziu9KEZy0SE2tRjKa+xuMtQtwhBuYveaodQitgSGUqxFtd4ZYT2qtZSSYDESVQl7hBKoRkpoaM8LvjtMIiWSiMN894L2Ejpqch2AjaSTT/AB4JNPSMdGAK5TU8JDCSwmKP9mc2xjE7D4OFMGaoJRAACpzenkcnBzbAAAAABJRU5ErkJggg==", 236 | "iconColor": "#ffe487ae", 237 | "contributorName": "fankes", 238 | "isEnabled": true, 239 | "isEnabledAll": false 240 | }, 241 | { 242 | "appName": "小米互传", 243 | "packageName": "com.miui.mishare.connectivity", 244 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAAC4AAAAuCAQAAAD9sOO8AAABi0lEQVR42u2WA+idYRhHZ9u2tzTmtjAjzLbt3GylWXFxYVZamJdbmm37d/71XuO5fuM94fP59KhUkcJShBa6Qxz6p5ssKIBcWzDQjrzlTMdmeL7ysrqJgV5SN3thXZ3XA3oEtzrrJwY6la26jC4CaF94z0psRmUl1wanFn0jt9N1DPSWBhmrGSoBaH3M3nb6joFOZ6puq48AukCZuCOLsJmYibqy7jv1o1AUUJGuVHRrpXUNA32gSVq5TgLoVzhOqmmzDjI/uNVKXzDQ2TRq5uFgZug3skQHdZC14TNmYzMjlbqPfgPoSHjPMB108m6Rs3QBA32mhaWur6cAukOl4J4uOuDUw2POa8YnDHSF0knlOgug97QKSmprl1MvS4iaKdjMT6Kmh1P/Z2Dk+7tPsp0aSR7kkh01VE+UL4qtE5QLfpJ2ST/hGGwG+Jd7/iz+f2j6UByRRyj6TiL/6e+5cHkouUazuFigZmG0uQ0FanNGg+5X8AbtebTwOhR5Huf8D6L+R2jPw7+jSJESLAgRlPKmvoMAAAAASUVORK5CYII=", 245 | "iconColor": "#ff7f98fc", 246 | "contributorName": "fankes", 247 | "isEnabled": true, 248 | "isEnabledAll": false 249 | }, 250 | { 251 | "appName": "语音唤醒", 252 | "packageName": "com.miui.voicetrigger", 253 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAQAAAAm93DmAAAB6klEQVR42mLACkYBoJx5gJFrAcAw+j/Wtm3btm3btm3bbmPUtm3btv2VN8OL2Y17Yh2S0YaxDKMKfyn4mIrLRUopOAjFSby1UdCxDX/yKWhoin9v+E+B4y9eY2aOAscIrGRWYIiBtYsKDMuw00zOkQZ7nwkrpzgKwFFm0ISCpCEVuanGENbyAJdFcoY2wFhC6zf+J5RkIDUz+QgAZJI9krKOJBLJGMpeHmN4zRkWU5v/JYlevAbOyB7RJNJyGHM7KC5JzAT6yR4TsXee8hKlgLyyxlacekB8EtODMDLHeuydYDrtacAMtlGU/wgtM/TF2g06EkJuCClzZMDKK6pK/E1TtvICADjLPKrIDEcxt0QiFkvx5xg55IuqmOspMRoreeWND8BdVjCGqazjHi7NJA5g7ROx5I5FvCOX3BCL0XwBGktcwt4cuZCegRLxmcIB7nKN3UwhtyRRlBBcxYmHMvAX/0jMxdtjupAApz7Khbg8wL9yzMSZNzIQxrSrKkk0xIl3MjAD/0bpN/Ji77gMvMOfw3JDDr5irYMMvMDXJyLJA7ksy4f8LQNb8FVcPkjPc8yklws58dZcfhGbg/h6QTF5ojJvMNymnCzQk4e4fGEe0eWLOLRmEpNpRljZIBxV6cckhtOYRPrTfQM7C30CMjKFLwAAAABJRU5ErkJggg==", 254 | "contributorName": "HeMing505", 255 | "isEnabled": true, 256 | "isEnabledAll": false 257 | }, 258 | { 259 | "appName": "录音助手", 260 | "packageName": "com.miui.audiomonitor", 261 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAAEAElEQVR42rWYBYwbORSGXWau4JiZy8xiPD7RLR4z8/mYmcp1lzPzv+ymSZlJrJKYVi4zt4Kl+BJr9hRdxmMnUd8fjud94/fewDOzm9/XG4Nymo9ttB+XSZHCZbRiM/1J1Zjg92WlmepJU+gL7KOz1E5pUnnqwHnaja+8MbE+RQFEf0ymOpzRzqOVpmNI0tzUwMJm0MO/C4LOkCpAF2mJd4fq4QxBFR0kVbhwCFVOAH8k5lM6oyIgert/mkdaEI3XoYU6SRUvdFHCvy4SQavtCKs6scaA0YFKOCMsGEo0jAqF4B90uTuyYuaHFC2qCkk2HIrAq/5fQXt30EF3CBTcCvruHERqIJa4OG9Wq9XGjFaruNvOLBf9/4PQXLrosIl8RBCv5E/x7XynSEqHsJ2hKQEi1gdJe4BWy6/KWI5tKluTwcACQr3qqYd7Y+iYLQO+3JaL0Da5rF7COhd/qh6Mr+wp3ypYiM0X1lpL0xf6kkS77fmo5WGQV7m9zrDP78swAeftkKZQyBMaYsGc88YwqqYOe+nGQiFPuUDaUc7oT1LFQj5yCBelaT7DZhfIJ6GQpAtEYRtDqwvkbXvizdrPcDnKeUo163dPhEFWc1LoHmUULjPzn3H5mniRXy1aZFwl5eMz8yEbRVy1qNfkREEiLs2eIiCpLewGlrENIgNUT+UFbPDMTZLUGjU8O8sbYlsiIOZwpeTTeu99Tmq7qs+DVPCUglovh+tRK7dEhWu/6c+kelU7/o5DkVrG89OeUFCbgmz9ZoRQK8M2c9rnacczZmbj3ZiX+idFFp7QY16YWWvMCTYzmm+O5YrA8VKR+SxfK8tFrCzzJVRC3qqD9QYnZdSfDOXUbvo7IR/SLq6dmZKkSLaIBL+flwvasnZLFuHLFQE4LoyIDqrOXk3OkTKJB3P5vGy1vnbEM2oJDkDInwLE7WUwF/B5TGB+X+yLOBzlvcHx8cTMDfqI0YAMKqauE92lXGdGKNqtOxj6IuqitTQn4R/MfJ4neSP/hdfzwXz4DUybJyIQaXytB9GUqCYB8lcxeiYz2ldRoVI4TmP0ML8X1dnuU74Q94WAKmYuF0aEFlI/d7d7sZy5mLPzmZjBh/M7+ev8WX47f4LXa0CkLmJeTutGgpSb4hmRo7C0dlDOxHE3DkWlv8i+6w77DXeJyrvhzhoW2LsT934L81mYNYy60k2QNu86rLmy7VyAoQS6SkQkNCK6xab5JZRAGgt0oOzmVeNQUYCDXnUByx64A0vpYkGIM1iOu3XRulvtIH8eUjjutIBzBvU0RfRnxVisjzcGX9NunKeO0CWOdjqHffSFP9XvxUozvy8mUDX9ic1oDW6gLpGkrTQf5d4Yl0W1fwFg+GXvz/bFbAAAAABJRU5ErkJggg==", 262 | "iconColor": "#ffff3a3a", 263 | "contributorName": "Mars、fankes", 264 | "isEnabled": true, 265 | "isEnabledAll": false 266 | }, 267 | { 268 | "appName": "用户反馈", 269 | "packageName": "com.miui.bugreport", 270 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAABLElEQVR42uzVJ3DDQBCF4eWhqTg9ML333itnZuFUHJgzccPwmWPhQNAwnY/oS697uafJXrr/ZbakT11S63eEBCncByZFUpQ4haVT4aEMa2VGNCNGzWFkGDEaDiPTiNH0/0QcGzsyLTQc2hAnhfqKIyn9imtSvBpiquUzkRwODtsBwIwkqBOSRkqhJ0M1JTSNVOWdUIVuTHgeJEeHeEIHckUMCc+LABkSz2SK6BOS/cIPPryNU6wYEP41RwX3HXwGMvZMBBgTMqkIxViRGUUoxorMKeK50zjI4jPhrc2OrBCiYj+SdU5YkS1OWJEdTliRfU5YkeO7/3sIYUSS5/8ZQcIARzhBQiNHOEHDEUc4QUMWQBpwFYG4Htio+v/LMZrWDVC5YiSxHoYhCkYBAGnPPOU+CESbAAAAAElFTkSuQmCC", 271 | "iconColor": "#ff21a2ee", 272 | "contributorName": "fankes、jasongzy", 273 | "isEnabled": true, 274 | "isEnabledAll": false 275 | }, 276 | { 277 | "appName": "服务与反馈", 278 | "packageName": "com.miui.miservice", 279 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAABLElEQVR42uzVJ3DDQBCF4eWhqTg9ML333itnZuFUHJgzccPwmWPhQNAwnY/oS697uafJXrr/ZbakT11S63eEBCncByZFUpQ4haVT4aEMa2VGNCNGzWFkGDEaDiPTiNH0/0QcGzsyLTQc2hAnhfqKIyn9imtSvBpiquUzkRwODtsBwIwkqBOSRkqhJ0M1JTSNVOWdUIVuTHgeJEeHeEIHckUMCc+LABkSz2SK6BOS/cIPPryNU6wYEP41RwX3HXwGMvZMBBgTMqkIxViRGUUoxorMKeK50zjI4jPhrc2OrBCiYj+SdU5YkS1OWJEdTliRfU5YkeO7/3sIYUSS5/8ZQcIARzhBQiNHOEHDEUc4QUMWQBpwFYG4Htio+v/LMZrWDVC5YiSxHoYhCkYBAGnPPOU+CESbAAAAAElFTkSuQmCC", 280 | "iconColor": "#fff33739", 281 | "contributorName": "fankes、jasongzy", 282 | "isEnabled": true, 283 | "isEnabledAll": false 284 | }, 285 | { 286 | "appName": "内容中心", 287 | "packageName": "com.miui.newhome", 288 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAQAAAD/5HvMAAAB/klEQVR42u3XNZAUWwCF4fMe7u7uRGiCu7trhDukuLt7ChEpLjHxRiRogjus++6P3+qa6qnp7qrba/c7edU/067IHMfhP0awhG0/t4QRKmt0YAW3SOP1z6Vxm+V0UFmhO+dIJ1E6p+mq+LGaPJLJYYnixXZS2an4MJ8gZioVqtMg0ppRUwYtKCWIIlorOf7nFK/IjLQX1JPBRYK6oGRoxHGiuyGDFpQQVCHN5Y/ZfCK6pTJYTxgbaCk/rCOT6IbI4AFh3GWJ/LCSL0SVQwcZPCGMR+ySH1YQPegTjfUX9fhAGO+4XAWC0mlRvg4ZDJbBPcK4w2IbQcu9D1XCWEVTG0FXZdCMYoIq4GeOjaCP/CeDCwR1XrITBBNl0JJgSmltL+iBPFhOEAske0HQWx7sIJVdkt2gh5IXC8klmWzmSLaDYJPkRTfOkeH7kt9FiiMIxigBHVnDXfMZdI81dJSX5aA8+soXTWgij7iCIJ0xCs5ikNeW8hYE9xlYPoK8bjCVGvJBQxrFGeT1nitsYDCNafBzrRjCCq7xlI5lEeSVTebP5ZtnWBOLQRF8oZkLckEuyAW5IBfkglyQC3JBLsgFJXBBK8tb0FrSiUs6zZUKs3lPXN5TQ6nQjMvE5bKCoC5HeMIXPlrcF55whLoKhvas5yD72Gtp+zjIetrLcaqCH+dHY5QFotCeAAAAAElFTkSuQmCC", 289 | "iconColor": "#ffff441a", 290 | "contributorName": "fankes", 291 | "isEnabled": true, 292 | "isEnabledAll": false 293 | }, 294 | { 295 | "appName": "游戏中心", 296 | "packageName": "com.xiaomi.gamecenter", 297 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAACa0lEQVR42u3UA4w0WRSA0bu2bdu2o7Vt23a0tm3btm3btkfdZztdk1TP369qPNGcGxe+4ouhM2yYKWzmYZ/6qdfzjKvsZYYoZ3wn+Vv/tLjE1FHE0r40MH6xblHiDwOn1QapB/WlgfW7maIrJxl4N0cjo/vVYJg9clbXH586yctSDoqcY6W8ajpTe165Z4wbYXR3anZ75NwvZbmosahya0edxTV7M3Ke1qzF2FFjNL8os2nUWVGzzyLnByOq2i062U5FSptf8bXZIkzlXfzhP41ajV0UedPOZo4GZrS9V3X1pEmMbmcdWjzjL1VHGMN4btVo3HTkR5NEggl8I9di4qhzucwDUWcMPyYixvC73AdRwOtyf0Ynx8tcEZ18ILdwZEyuUdV+Ro4RGMnuqnJV20eNqXwq87PZosZyqnJLpiPwvWvMEJ1M40rfGlGHsxzqA1UXWMrxOnzlKCf6W6NlI2MJKa8ZOeo8oczpUedgKTtGxirSZo0a06oos1rUWag8so60o6LGNsodFnU2l7JfZOwtreJ612hXrsPeZrWdX6SckUcGTR452uC5PzIuMngeiYzrDJ43IuM5g+eHIY18YvD8Z4Is8rfuPGhxYzTNtA7ToTtTRISRu43cYfQoYDfdmSkizKTceyaJQkZypXKrdB/5x/xRyhhe7T4ynYoiFdtEt8zmN8WWz3b6QpGLo0esqyKt1UTZLudKe95Y0UNO7G7tmsovmv1kjugxI3tQs9aGN2opv+uqxerRK6bxiq7arBuNzOVWbTId7jFr9Jqp3OQ/mYrHLR7NzGBt+1rf7NFnJrKWfW1ozhg27H8MdAUzo9xycAAAAABJRU5ErkJggg==", 298 | "iconColor": "#ff55c6ce", 299 | "contributorName": "fankes、parules", 300 | "isEnabled": true, 301 | "isEnabledAll": false 302 | }, 303 | { 304 | "appName": "游戏服务", 305 | "packageName": "com.xiaomi.gamecenter.sdk.service", 306 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAACa0lEQVR42u3UA4w0WRSA0bu2bdu2o7Vt23a0tm3btm3btkfdZztdk1TP369qPNGcGxe+4ouhM2yYKWzmYZ/6qdfzjKvsZYYoZ3wn+Vv/tLjE1FHE0r40MH6xblHiDwOn1QapB/WlgfW7maIrJxl4N0cjo/vVYJg9clbXH586yctSDoqcY6W8ajpTe165Z4wbYXR3anZ75NwvZbmosahya0edxTV7M3Ke1qzF2FFjNL8os2nUWVGzzyLnByOq2i062U5FSptf8bXZIkzlXfzhP41ajV0UedPOZo4GZrS9V3X1pEmMbmcdWjzjL1VHGMN4btVo3HTkR5NEggl8I9di4qhzucwDUWcMPyYixvC73AdRwOtyf0Ynx8tcEZ18ILdwZEyuUdV+Ro4RGMnuqnJV20eNqXwq87PZosZyqnJLpiPwvWvMEJ1M40rfGlGHsxzqA1UXWMrxOnzlKCf6W6NlI2MJKa8ZOeo8oczpUedgKTtGxirSZo0a06oos1rUWag8so60o6LGNsodFnU2l7JfZOwtreJ612hXrsPeZrWdX6SckUcGTR452uC5PzIuMngeiYzrDJ43IuM5g+eHIY18YvD8Z4Is8rfuPGhxYzTNtA7ToTtTRISRu43cYfQoYDfdmSkizKTceyaJQkZypXKrdB/5x/xRyhhe7T4ynYoiFdtEt8zmN8WWz3b6QpGLo0esqyKt1UTZLudKe95Y0UNO7G7tmsovmv1kjugxI3tQs9aGN2opv+uqxerRK6bxiq7arBuNzOVWbTId7jFr9Jqp3OQ/mYrHLR7NzGBt+1rf7NFnJrKWfW1ozhg27H8MdAUzo9xycAAAAABJRU5ErkJggg==", 307 | "iconColor": "#ff08bffb", 308 | "contributorName": "parules", 309 | "isEnabled": true, 310 | "isEnabledAll": false 311 | }, 312 | { 313 | "appName": "驾车场景", 314 | "packageName": "com.xiaomi.drivemode", 315 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAQAAAD/5HvMAAACPklEQVR42u3UA8wcTRzH8V/02nFe27Ztq7Zt2whq27Zt225Yuw3qfst7sLOXW8z10X4m1vytECKRSCTC91SiBws5gheHmE17yvGdkoE8zCSomeSRTZRgKWEtpYTsoCO2dFFYPMhobJrAQwqOl1iBbat4SUHRl2Toq2D4gmT5QkEwkmQZKf/4BTfnaMUHPCIPeJh3acU53PwivxiNaRHvyCfeYRmm8fKHNzBN5G4FwD1MxPS5/KAFpq8UEF9h6ifvuJNLOPVXCAzA6TL3yCsqhBtDE39gaiB3PMVXjncAp7UKiQ04HTX+fUoS/fGipkKiEV70Fyfx4imFxLN4cVosIbERsoBxJLZG1CGxP2UBf5NYG/EZiexhvqW3h0S+k8RuMos1uo6faXLjTSGjTLrxf2N+UCpaknHMI8l/ZLTflIp72UtG2819iuFDMoPPFEMxnErxisRfDMS2YRSReJE6OFVQDN1IR2lQlFPYcpDPlQbp9VYM80mrjhzYjg375UAp0pofL6AX5cCL2PCVHHjFU0ByQWPCaiwXXitk4CPCelPyUSFzhizP0SYZvM8QMvAUYT0lAyQIyLhDD/AYr/AxJZhKWNOpzse8wmM8YNwhI6BRZAZjFUMTMoO2iqEgmUExxfAWZ8hoZ3hLqahNRqut9JhLRporJ5qQkZpYDSgKSJbc3oCigKKA8hHPDlnCFuIpIifeJZ7WsoSexPO6TNTAlSzC3f9yx2cs4SipttBTltGaHaQ6wmIKKhKJRCLxXQWFE9/ti3BcsAAAAABJRU5ErkJggg==", 316 | "iconColor": "#ff615ee2", 317 | "contributorName": "fankes", 318 | "isEnabled": true, 319 | "isEnabledAll": false 320 | }, 321 | { 322 | "appName": "电子邮件", 323 | "packageName": "com.android.email", 324 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAQAAAD/5HvMAAACkElEQVR42u3UA6xkZxiA4W/3em0jqG3bZlTbDuqoDmrbCGrbtm27156nxj+r6Vyc4jxfzPdn5HL/LrlczuIu8Z4f1PfD/OADV1gmZsVYJ+jW3wpOMSFmZIxTtcpCm3ONj5QKW/tOVurtrDINGuEGWbrLqDRoks9l6QdT06Bpuvyu3au69bWCN7T603xp0HR/qrehA32hL33tEBv40p8Wml3QAhHmdb9ufaHb4xaMMK/PlR4UYahDvK5Tb+ryliMNjygj6GeWcJqv9JZvnPXnz1xWUIShNvKU3vCczQyLKCdowSjidC0KylXQ6mIDImE+X5QW1OEEC6mMhOXdrkE5Gt1ltUioMJ+jtZQWBC84yOhImGQ37/q7PrCPKZEw0n6egtKDaHKXpSJhoHmcpEWp2pxhXhWRsKibNVBqUOpwww2IhA29qducdHvPZpEwwFD7AeUG8YxNjYiEcU73gYJZKfjYWaZGwjAbekShp0F85WpzK96ndVytzcy0u86GUcRUl/scyg5KvOdodUXbP8oOvlHsW7sZk+arcbh3oPeC4F5LqogiHtLod82eiiIqLOxO6P0gOuxv/qLVV9nS4zp1etJ2aot2cV77aKCvguBJexoSCfPb1xEWjIQaO3oc+jaIRvcYFQkVqiNhhNvU06dBiQOSqISRtgb6M4h7rKcqiqi0mrsUsgjic1eYXvTbXOZ9yCYIPrBP/MZO3oVsgyi43iIWco1uMgxKtGiCjIPKlwflQXlQHpQH5UF5UB40TZdszZcGTfaFLNWblgaNcLMs3Wd0GlRhBz/ISqM9VEbKeOdok4V2l5gUMzLB6Qr63wUmGxAzZ2XX+0JDP81XbrFWzIkqwwzvhxmmOuYkl8vlcj8CuBInIcED6N0AAAAASUVORK5CYII=", 325 | "iconColor": "#ff27a7fc", 326 | "contributorName": "jasongzy", 327 | "isEnabled": true, 328 | "isEnabledAll": true 329 | }, 330 | { 331 | "appName": "MIUI 蓝牙", 332 | "packageName": "com.xiaomi.bluetooth", 333 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAAB0UlEQVR42u3XA4zeQRBA8Qlq2whq2zai2rZt20ZUu0Ft27Zt233FYfb08b/h/WK+aHdmJJJFVKAbWcUmqhCgj9jDUIKsIr3YwTDUDWrajKjRNiNqC7lsRfagntHcVmQCppnEshARoRbPUIcoId4jMSVdRURIygbUV7qKt9jEU1pFHAnAAEyLxRuMIMCEiCMByM8t1AzxFK1Qa0kVXkTRDLVaPEUJnqCuUD7iCJMwNRPPEZetqF90CS9CPLZiyiLeYjymuaEjFOMh6qT4hgaY9pkR2mKaKr4jKxdRz4MizMRUT/zFMkLbg/pEHnECfYjIVid/rUq8I6yp4iySsw8TtBOnkYQ9mKCDOIuSPCWsmeIc2hKRnSQTJzCd0PagHlFK/EN8tqOeBEWYhamt+I4iPEBtM78V2mGaJr6hJaYJYT7I4jxEbSW1eItJqJ80DPerj8821D3Ki+eIxSbUKQq6GFqTUW+82JAZh1pAEi/G7wLxHKsJMNjtIpGJc6jq4jmicpRHNHK7EjXCtFy8Q1qKibiOMA1Td+fX1IwcRF2mhPMLd32+ohYTz+7pAJ1tH0HnKW370ppPQtvnXHfbh+kZyokdVCTAIpKKPQxjGPUlkk1/AF0ifprD3JpJAAAAAElFTkSuQmCC", 334 | "iconColor": "#ff4c80fc", 335 | "contributorName": "fankes", 336 | "isEnabled": true, 337 | "isEnabledAll": true 338 | }, 339 | { 340 | "appName": "设置", 341 | "packageName": "com.android.settings", 342 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAACmElEQVR42u3VA7DlVhgA4L+2bdu2Paht27bbUQe1PahtG6O1bdv86m5u8k5ebnbH+8U4VsxT81nSiZ5zYxTYRlePO8qSMTes4XrdwUwHFRL/HdDd9VaOelxigDmG2SUyPC6rl7WiDh9pNNxplos/Wctz8jaJOlytqIeXvWqUvLaWjjocpLqvLBR1OFR1P1s06nCn6qbYOppnJT0044lolsU9ozlTnR+ts6erXe4IB7rGz+p421n2c7grvenoKLKsgYDZ0gZrp53B0mYD+loi8lylXD/3Odg6FrOYdRzsAcOVOzEaWdBnyjxk+cixvifMlvabpSLLdmZKGeuUSHCuydJ2jCyPSbsoSrhG2iOR5QEpr0QpC/sk2YpHRCPnmaBogg2jFbY3VdEb1ogiBxsl7/lolQW8I+9dC6d+v07emVGBOzQaZYtIsYresqbauuKiMEvWe1HGj7ImWjcqsJ2psm6MMn6TNdlGUYFdTZd1U6TZxEhZ0+0aFThWo0/Leslb8u6KCjym0UQHREss5VlFP7S+dltGV3n97BZ5dvallsx2dLTCGVoy3pUWjyzvSull1ShhfcOk3BZZTpT2nsUiwbI+lnZwZFndcGmfWi9aYCOfSetp+XzPekqZbi60UmRYw11GKPNg5NnRLOX6e9vVTnKSq7xrsHIzbBVFXtJdZx10NUFdg7TXVjfTvBgtsYglLPj3dVtPad4QF1kz/mRRu1kjWudWzRlgx2iebzXjwqjDWaobYdWow36q+8QCUYeDVfeRBaMON8ob5hHXu8PrZmjU3nJRhxc0etXa8S+HGKrRVlGHldynh/88a8HIsLvR/tPD/ZaIuqzkNN+a7huLFL5dgil/fj3NSjH37GGTKLCg0+wR89p8fwDc6Tbq1r7G7AAAAABJRU5ErkJggg==", 343 | "iconColor": "#ff42a5f5", 344 | "contributorName": "NekoMua", 345 | "isEnabled": true, 346 | "isEnabledAll": true 347 | }, 348 | { 349 | "appName": "蜻蜓FM", 350 | "packageName": "com.miui.fm", 351 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAABdUlEQVR42uzVAYTCUBjA8QcgOGQIwAkIBAInCAghBwbBEBgMgOgABAEGIGDmgAgwOCbAAAYCwMAY8D9uidfeVHffItfvAw/899i3qacSIwJGqilYuCQA7JoJDPDJOWGgJPGCQ4SuwJYL9FmToYuZ01YSaDGrPH+Oz5uSQY8VB3R7XNpSgSlbdAUbsVeWLktSdAkuHanAmPDs6WM8LLkF80g4l+FjY+OxuHKc2htjkyOlYGbeAmmDaiRA2q4aiSntCfn8w4R8UUrrI2OBz2cpUedOfVtgBR40Qofez1hNRjaUlveIfFwfmdwc8Sl5x/PwcsShdeOcbnI8Ty9HcrIbp6BUHM/5hYiM/xfJWTFlyJgFaTORnf5nYy0fiVUFa+mIpQw4SEYCZYQrGXFqIn3JyHtN5PXhbrKtiSwkI9A1RjLZSGpIhPIbn9DX/uEByET26AJcJjj45PxOWo1E9/gKz5DmqioCJG2VGXMiEoGJjLd4+t4gAgAx6uia2mNN3QAAAABJRU5ErkJggg==", 352 | "iconColor": "#ffd8271c", 353 | "contributorName": "ghcsd", 354 | "isEnabled": true, 355 | "isEnabledAll": false 356 | }, 357 | { 358 | "appName": "文件管理", 359 | "packageName": "com.android.fileexplorer", 360 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAAEgAAABICAQAAAD/5HvMAAABAklEQVR42u3TgUYGURDF8dlKgPQQgbBnQD3OAgQIPcA+xgJBiECwCxABKBACIVhRgoBwAxBmcjfTrL7zP+Ba+Ln2CmOMMSfd13N91+IPBc/40E88tmfSxIJ6LT8N38/j4W4k6KYaVDDJThrI2LVsJ4FgfbmSrQQQbFDBhTQhIPgcZ7hve60eTg72xA63Dqjid68ZHjzQk387QTsVK321QBo4XIoV3hZwfo8fQ0FasIEg5IOWj6C8VxYwgsAbcoaCPJDByQTBOKfeEAxOKgg2hq+MoIgRRBBBL2sD3a0NNBFEEEEEEUQQQf8cNGSAMIhVe5wCOhI77TD/KWbWThhjjHl9AWtm5L0ivwBXAAAAAElFTkSuQmCC", 361 | "iconColor": "#ffffc550", 362 | "contributorName": "Raipt", 363 | "isEnabled": true, 364 | "isEnabledAll": false 365 | }, 366 | { 367 | "appName": "录音机", 368 | "packageName": "com.android.soundrecorder", 369 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAMAAAAp4XiDAAAAUVBMVEUAAAAODg0NDQ0MDAsMCwsLCwoLCgoKCgoKCgkJCQkJCQgICAgICAcHBwcHBwYGBgYGBgUFBQUFBQQFBAQEBAQEBAMEAwMDAwMCAgIBAQEAAAAhQ4hmAAAAAXRSTlMAQObYZgAAAOtJREFUeNq81QWuxDAMhOFZxjL7/vd8kMpSceSUfsHiV06CUTIIPMhk3oAgoa0nBBAkhkyCGDG2hohHi4l4NUvO8rrPkBlRwzVn2JV5mQm9+oBQEsg4cHI/hORGkgOaGEm06vQNe3l/XiISd8n1xIjeqJuK2nlOEmD4wFQAJQHQdMjXvefkCkQdcnbvc0Z0mwlc0l6KkJMISN2b26WzDUqy9jppDYAPJ+09SfTDQzfQbWYJqt/uYasBWEZlgW41J2oiaIl5iimvyT14P+98HrN2yJx86PpiNoCvWb+I/44OrQvCmihsXJHRhAMAM1e6OVCfgMIAAAAASUVORK5CYII=", 370 | "iconColor": "#ffff3a3a", 371 | "contributorName": "Mars、fankes", 372 | "isEnabled": true, 373 | "isEnabledAll": false 374 | }, 375 | { 376 | "appName": "智能助理", 377 | "packageName": "com.miui.personalassistant", 378 | "iconBitmap": "iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAQAAAC0NkA6AAAAnUlEQVR42u3WBwpEIRCDYe9/6Sx1pMiG4PyCPEMVRj/gFTNuz4sqOIBQ+hsc2IYUhwYqMYBQao0BEEpoirieOflM+LcLgQ5/8QADAwE1x3JucYIHEsic5HwPuR2LZecdv2TyrhIgc0lUD6hT2XP2IFXy0QiACmnTnyubDAC/HbtLau6DlUh6lSgHZigAgOi2kgcHEmr0BAI8NZi8/ADrAUs0qPfSygAAAABJRU5ErkJggg==", 379 | "iconColor": "#ff19a5fa", 380 | "contributorName": "Illustar0", 381 | "isEnabled": true, 382 | "isEnabledAll": false 383 | } 384 | ] -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Android 通知图标规范适配计划 2 | 3 | ![Blank](https://img.shields.io/badge/license-AGPL3.0-blue) 4 | [![Telegram](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/XiaofangInternet) 5 | 6 | 这是一个在线规则平台,为国内 Android 不规范的 APP 和厂商适配原生通知图标与规范图标修复。 7 | 8 | ## For Non-Chinese Users 9 | 10 | This project will not be adapted i18n for now, please stay tuned in the future. 11 | 12 | ## 开始使用 13 | 14 | - [点击这里](https://fankes.github.io/AndroidNotifyIconAdapt) 打开在线规则平台查看项目介绍、通知图标优化名单的全部内容以及调试、生成、贡献通知图标规则。 15 | 16 | ## 许可证 17 | 18 | - [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html) 19 | 20 | ``` 21 | Copyright (C) 2017 Fankes Studio(qzmmcn@163.com) 22 | 23 | This program is free software: you can redistribute it and/or modify 24 | it under the terms of the GNU Affero General Public License as 25 | published by the Free Software Foundation, either version 3 of the 26 | License, or (at your option) any later version. 27 | 28 | This program is distributed in the hope that it will be useful, 29 | but WITHOUT ANY WARRANTY; without even the implied warranty of 30 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 31 | GNU Affero General Public License for more details. 32 | 33 | You should have received a copy of the GNU Affero General Public License 34 | along with this program. If not, see . 35 | ``` 36 | 37 | 版权所有 © 2017 Fankes Studio(qzmmcn@163.com) 38 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | Android 通知图标规范适配计划 23 | 24 | 25 | 26 |
27 |
28 | menu 30 | 31 | 32 |
33 | 36 | 39 | 42 | 43 | 44 |
45 |
46 | 174 |
175 | 183 |
184 |
185 |
186 | 195 | 198 | 201 |
202 | 203 | 223 | 224 | -------------------------------------------------------------------------------- /docs/resources/css/github-markdown-dark.css: -------------------------------------------------------------------------------- 1 | .markdown-body { 2 | color-scheme: dark; 3 | -ms-text-size-adjust: 100%; 4 | -webkit-text-size-adjust: 100%; 5 | margin: 0; 6 | color: #c9d1d9; 7 | background-color: #0d1117; 8 | font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"; 9 | font-size: 16px; 10 | line-height: 1.5; 11 | word-wrap: break-word; 12 | } 13 | 14 | .markdown-body .octicon { 15 | display: inline-block; 16 | fill: currentColor; 17 | vertical-align: text-bottom; 18 | } 19 | 20 | .markdown-body h1:hover .anchor .octicon-link:before, 21 | .markdown-body h2:hover .anchor .octicon-link:before, 22 | .markdown-body h3:hover .anchor .octicon-link:before, 23 | .markdown-body h4:hover .anchor .octicon-link:before, 24 | .markdown-body h5:hover .anchor .octicon-link:before, 25 | .markdown-body h6:hover .anchor .octicon-link:before { 26 | width: 16px; 27 | height: 16px; 28 | content: ' '; 29 | display: inline-block; 30 | background-color: currentColor; 31 | -webkit-mask-image: url("data:image/svg+xml,"); 32 | mask-image: url("data:image/svg+xml,"); 33 | } 34 | 35 | .markdown-body details, 36 | .markdown-body figcaption, 37 | .markdown-body figure { 38 | display: block; 39 | } 40 | 41 | .markdown-body summary { 42 | display: list-item; 43 | } 44 | 45 | .markdown-body [hidden] { 46 | display: none !important; 47 | } 48 | 49 | .markdown-body a { 50 | background-color: transparent; 51 | color: #58a6ff; 52 | text-decoration: none; 53 | } 54 | 55 | .markdown-body a:active, 56 | .markdown-body a:hover { 57 | outline-width: 0; 58 | } 59 | 60 | .markdown-body abbr[title] { 61 | border-bottom: none; 62 | text-decoration: underline dotted; 63 | } 64 | 65 | .markdown-body b, 66 | .markdown-body strong { 67 | font-weight: 600; 68 | } 69 | 70 | .markdown-body dfn { 71 | font-style: italic; 72 | } 73 | 74 | .markdown-body h1 { 75 | margin: .67em 0; 76 | font-weight: 600; 77 | padding-bottom: .3em; 78 | font-size: 2em; 79 | border-bottom: 1px solid #21262d; 80 | } 81 | 82 | .markdown-body mark { 83 | background-color: rgba(187,128,9,0.15); 84 | color: #c9d1d9; 85 | } 86 | 87 | .markdown-body small { 88 | font-size: 90%; 89 | } 90 | 91 | .markdown-body sub, 92 | .markdown-body sup { 93 | font-size: 75%; 94 | line-height: 0; 95 | position: relative; 96 | vertical-align: baseline; 97 | } 98 | 99 | .markdown-body sub { 100 | bottom: -0.25em; 101 | } 102 | 103 | .markdown-body sup { 104 | top: -0.5em; 105 | } 106 | 107 | .markdown-body img { 108 | border-style: none; 109 | max-width: 100%; 110 | box-sizing: content-box; 111 | background-color: #0d1117; 112 | } 113 | 114 | .markdown-body code, 115 | .markdown-body kbd, 116 | .markdown-body pre, 117 | .markdown-body samp { 118 | font-family: monospace,monospace; 119 | font-size: 1em; 120 | } 121 | 122 | .markdown-body figure { 123 | margin: 1em 40px; 124 | } 125 | 126 | .markdown-body hr { 127 | box-sizing: content-box; 128 | overflow: hidden; 129 | background: transparent; 130 | border-bottom: 1px solid #21262d; 131 | height: .25em; 132 | padding: 0; 133 | margin: 24px 0; 134 | background-color: #30363d; 135 | border: 0; 136 | } 137 | 138 | .markdown-body input { 139 | font: inherit; 140 | margin: 0; 141 | overflow: visible; 142 | font-family: inherit; 143 | font-size: inherit; 144 | line-height: inherit; 145 | } 146 | 147 | .markdown-body [type=button], 148 | .markdown-body [type=reset], 149 | .markdown-body [type=submit] { 150 | -webkit-appearance: button; 151 | } 152 | 153 | .markdown-body [type=button]::-moz-focus-inner, 154 | .markdown-body [type=reset]::-moz-focus-inner, 155 | .markdown-body [type=submit]::-moz-focus-inner { 156 | border-style: none; 157 | padding: 0; 158 | } 159 | 160 | .markdown-body [type=button]:-moz-focusring, 161 | .markdown-body [type=reset]:-moz-focusring, 162 | .markdown-body [type=submit]:-moz-focusring { 163 | outline: 1px dotted ButtonText; 164 | } 165 | 166 | .markdown-body [type=checkbox], 167 | .markdown-body [type=radio] { 168 | box-sizing: border-box; 169 | padding: 0; 170 | } 171 | 172 | .markdown-body [type=number]::-webkit-inner-spin-button, 173 | .markdown-body [type=number]::-webkit-outer-spin-button { 174 | height: auto; 175 | } 176 | 177 | .markdown-body [type=search] { 178 | -webkit-appearance: textfield; 179 | outline-offset: -2px; 180 | } 181 | 182 | .markdown-body [type=search]::-webkit-search-cancel-button, 183 | .markdown-body [type=search]::-webkit-search-decoration { 184 | -webkit-appearance: none; 185 | } 186 | 187 | .markdown-body ::-webkit-input-placeholder { 188 | color: inherit; 189 | opacity: .54; 190 | } 191 | 192 | .markdown-body ::-webkit-file-upload-button { 193 | -webkit-appearance: button; 194 | font: inherit; 195 | } 196 | 197 | .markdown-body a:hover { 198 | text-decoration: underline; 199 | } 200 | 201 | .markdown-body hr::before { 202 | display: table; 203 | content: ""; 204 | } 205 | 206 | .markdown-body hr::after { 207 | display: table; 208 | clear: both; 209 | content: ""; 210 | } 211 | 212 | .markdown-body table { 213 | border-spacing: 0; 214 | border-collapse: collapse; 215 | display: block; 216 | width: max-content; 217 | max-width: 100%; 218 | overflow: auto; 219 | } 220 | 221 | .markdown-body td, 222 | .markdown-body th { 223 | padding: 0; 224 | } 225 | 226 | .markdown-body details summary { 227 | cursor: pointer; 228 | } 229 | 230 | .markdown-body details:not([open])>*:not(summary) { 231 | display: none !important; 232 | } 233 | 234 | .markdown-body kbd { 235 | display: inline-block; 236 | padding: 3px 5px; 237 | font: 11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; 238 | line-height: 10px; 239 | color: #c9d1d9; 240 | vertical-align: middle; 241 | background-color: #161b22; 242 | border: solid 1px rgba(110,118,129,0.4); 243 | border-bottom-color: rgba(110,118,129,0.4); 244 | border-radius: 6px; 245 | box-shadow: inset 0 -1px 0 rgba(110,118,129,0.4); 246 | } 247 | 248 | .markdown-body h1, 249 | .markdown-body h2, 250 | .markdown-body h3, 251 | .markdown-body h4, 252 | .markdown-body h5, 253 | .markdown-body h6 { 254 | margin-top: 24px; 255 | margin-bottom: 16px; 256 | font-weight: 600; 257 | line-height: 1.25; 258 | } 259 | 260 | .markdown-body h2 { 261 | font-weight: 600; 262 | padding-bottom: .3em; 263 | font-size: 1.5em; 264 | border-bottom: 1px solid #21262d; 265 | } 266 | 267 | .markdown-body h3 { 268 | font-weight: 600; 269 | font-size: 1.25em; 270 | } 271 | 272 | .markdown-body h4 { 273 | font-weight: 600; 274 | font-size: 1em; 275 | } 276 | 277 | .markdown-body h5 { 278 | font-weight: 600; 279 | font-size: .875em; 280 | } 281 | 282 | .markdown-body h6 { 283 | font-weight: 600; 284 | font-size: .85em; 285 | color: #8b949e; 286 | } 287 | 288 | .markdown-body p { 289 | margin-top: 0; 290 | margin-bottom: 10px; 291 | } 292 | 293 | .markdown-body blockquote { 294 | margin: 0; 295 | padding: 0 1em; 296 | color: #8b949e; 297 | border-left: .25em solid #30363d; 298 | } 299 | 300 | .markdown-body ul, 301 | .markdown-body ol { 302 | margin-top: 0; 303 | margin-bottom: 0; 304 | padding-left: 2em; 305 | } 306 | 307 | .markdown-body ol ol, 308 | .markdown-body ul ol { 309 | list-style-type: lower-roman; 310 | } 311 | 312 | .markdown-body ul ul ol, 313 | .markdown-body ul ol ol, 314 | .markdown-body ol ul ol, 315 | .markdown-body ol ol ol { 316 | list-style-type: lower-alpha; 317 | } 318 | 319 | .markdown-body dd { 320 | margin-left: 0; 321 | } 322 | 323 | .markdown-body tt, 324 | .markdown-body code { 325 | font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; 326 | font-size: 12px; 327 | } 328 | 329 | .markdown-body pre { 330 | margin-top: 0; 331 | margin-bottom: 0; 332 | font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; 333 | font-size: 12px; 334 | word-wrap: normal; 335 | } 336 | 337 | .markdown-body .octicon { 338 | display: inline-block; 339 | overflow: visible !important; 340 | vertical-align: text-bottom; 341 | fill: currentColor; 342 | } 343 | 344 | .markdown-body ::placeholder { 345 | color: #484f58; 346 | opacity: 1; 347 | } 348 | 349 | .markdown-body input::-webkit-outer-spin-button, 350 | .markdown-body input::-webkit-inner-spin-button { 351 | margin: 0; 352 | -webkit-appearance: none; 353 | appearance: none; 354 | } 355 | 356 | .markdown-body .pl-c { 357 | color: #8b949e; 358 | } 359 | 360 | .markdown-body .pl-c1, 361 | .markdown-body .pl-s .pl-v { 362 | color: #79c0ff; 363 | } 364 | 365 | .markdown-body .pl-e, 366 | .markdown-body .pl-en { 367 | color: #d2a8ff; 368 | } 369 | 370 | .markdown-body .pl-smi, 371 | .markdown-body .pl-s .pl-s1 { 372 | color: #c9d1d9; 373 | } 374 | 375 | .markdown-body .pl-ent { 376 | color: #7ee787; 377 | } 378 | 379 | .markdown-body .pl-k { 380 | color: #ff7b72; 381 | } 382 | 383 | .markdown-body .pl-s, 384 | .markdown-body .pl-pds, 385 | .markdown-body .pl-s .pl-pse .pl-s1, 386 | .markdown-body .pl-sr, 387 | .markdown-body .pl-sr .pl-cce, 388 | .markdown-body .pl-sr .pl-sre, 389 | .markdown-body .pl-sr .pl-sra { 390 | color: #a5d6ff; 391 | } 392 | 393 | .markdown-body .pl-v, 394 | .markdown-body .pl-smw { 395 | color: #ffa657; 396 | } 397 | 398 | .markdown-body .pl-bu { 399 | color: #f85149; 400 | } 401 | 402 | .markdown-body .pl-ii { 403 | color: #f0f6fc; 404 | background-color: #8e1519; 405 | } 406 | 407 | .markdown-body .pl-c2 { 408 | color: #f0f6fc; 409 | background-color: #b62324; 410 | } 411 | 412 | .markdown-body .pl-sr .pl-cce { 413 | font-weight: bold; 414 | color: #7ee787; 415 | } 416 | 417 | .markdown-body .pl-ml { 418 | color: #f2cc60; 419 | } 420 | 421 | .markdown-body .pl-mh, 422 | .markdown-body .pl-mh .pl-en, 423 | .markdown-body .pl-ms { 424 | font-weight: bold; 425 | color: #1f6feb; 426 | } 427 | 428 | .markdown-body .pl-mi { 429 | font-style: italic; 430 | color: #c9d1d9; 431 | } 432 | 433 | .markdown-body .pl-mb { 434 | font-weight: bold; 435 | color: #c9d1d9; 436 | } 437 | 438 | .markdown-body .pl-md { 439 | color: #ffdcd7; 440 | background-color: #67060c; 441 | } 442 | 443 | .markdown-body .pl-mi1 { 444 | color: #aff5b4; 445 | background-color: #033a16; 446 | } 447 | 448 | .markdown-body .pl-mc { 449 | color: #ffdfb6; 450 | background-color: #5a1e02; 451 | } 452 | 453 | .markdown-body .pl-mi2 { 454 | color: #c9d1d9; 455 | background-color: #1158c7; 456 | } 457 | 458 | .markdown-body .pl-mdr { 459 | font-weight: bold; 460 | color: #d2a8ff; 461 | } 462 | 463 | .markdown-body .pl-ba { 464 | color: #8b949e; 465 | } 466 | 467 | .markdown-body .pl-sg { 468 | color: #484f58; 469 | } 470 | 471 | .markdown-body .pl-corl { 472 | text-decoration: underline; 473 | color: #a5d6ff; 474 | } 475 | 476 | .markdown-body [data-catalyst] { 477 | display: block; 478 | } 479 | 480 | .markdown-body g-emoji { 481 | font-family: "Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; 482 | font-size: 1em; 483 | font-style: normal !important; 484 | font-weight: 400; 485 | line-height: 1; 486 | vertical-align: -0.075em; 487 | } 488 | 489 | .markdown-body g-emoji img { 490 | width: 1em; 491 | height: 1em; 492 | } 493 | 494 | .markdown-body::before { 495 | display: table; 496 | content: ""; 497 | } 498 | 499 | .markdown-body::after { 500 | display: table; 501 | clear: both; 502 | content: ""; 503 | } 504 | 505 | .markdown-body>*:first-child { 506 | margin-top: 0 !important; 507 | } 508 | 509 | .markdown-body>*:last-child { 510 | margin-bottom: 0 !important; 511 | } 512 | 513 | .markdown-body a:not([href]) { 514 | color: inherit; 515 | text-decoration: none; 516 | } 517 | 518 | .markdown-body .absent { 519 | color: #f85149; 520 | } 521 | 522 | .markdown-body .anchor { 523 | float: left; 524 | padding-right: 4px; 525 | margin-left: -20px; 526 | line-height: 1; 527 | } 528 | 529 | .markdown-body .anchor:focus { 530 | outline: none; 531 | } 532 | 533 | .markdown-body p, 534 | .markdown-body blockquote, 535 | .markdown-body ul, 536 | .markdown-body ol, 537 | .markdown-body dl, 538 | .markdown-body table, 539 | .markdown-body pre, 540 | .markdown-body details { 541 | margin-top: 0; 542 | margin-bottom: 16px; 543 | } 544 | 545 | .markdown-body blockquote>:first-child { 546 | margin-top: 0; 547 | } 548 | 549 | .markdown-body blockquote>:last-child { 550 | margin-bottom: 0; 551 | } 552 | 553 | .markdown-body sup>a::before { 554 | content: "["; 555 | } 556 | 557 | .markdown-body sup>a::after { 558 | content: "]"; 559 | } 560 | 561 | .markdown-body h1 .octicon-link, 562 | .markdown-body h2 .octicon-link, 563 | .markdown-body h3 .octicon-link, 564 | .markdown-body h4 .octicon-link, 565 | .markdown-body h5 .octicon-link, 566 | .markdown-body h6 .octicon-link { 567 | color: #c9d1d9; 568 | vertical-align: middle; 569 | visibility: hidden; 570 | } 571 | 572 | .markdown-body h1:hover .anchor, 573 | .markdown-body h2:hover .anchor, 574 | .markdown-body h3:hover .anchor, 575 | .markdown-body h4:hover .anchor, 576 | .markdown-body h5:hover .anchor, 577 | .markdown-body h6:hover .anchor { 578 | text-decoration: none; 579 | } 580 | 581 | .markdown-body h1:hover .anchor .octicon-link, 582 | .markdown-body h2:hover .anchor .octicon-link, 583 | .markdown-body h3:hover .anchor .octicon-link, 584 | .markdown-body h4:hover .anchor .octicon-link, 585 | .markdown-body h5:hover .anchor .octicon-link, 586 | .markdown-body h6:hover .anchor .octicon-link { 587 | visibility: visible; 588 | } 589 | 590 | .markdown-body h1 tt, 591 | .markdown-body h1 code, 592 | .markdown-body h2 tt, 593 | .markdown-body h2 code, 594 | .markdown-body h3 tt, 595 | .markdown-body h3 code, 596 | .markdown-body h4 tt, 597 | .markdown-body h4 code, 598 | .markdown-body h5 tt, 599 | .markdown-body h5 code, 600 | .markdown-body h6 tt, 601 | .markdown-body h6 code { 602 | padding: 0 .2em; 603 | font-size: inherit; 604 | } 605 | 606 | .markdown-body ul.no-list, 607 | .markdown-body ol.no-list { 608 | padding: 0; 609 | list-style-type: none; 610 | } 611 | 612 | .markdown-body ol[type="1"] { 613 | list-style-type: decimal; 614 | } 615 | 616 | .markdown-body ol[type=a] { 617 | list-style-type: lower-alpha; 618 | } 619 | 620 | .markdown-body ol[type=i] { 621 | list-style-type: lower-roman; 622 | } 623 | 624 | .markdown-body div>ol:not([type]) { 625 | list-style-type: decimal; 626 | } 627 | 628 | .markdown-body ul ul, 629 | .markdown-body ul ol, 630 | .markdown-body ol ol, 631 | .markdown-body ol ul { 632 | margin-top: 0; 633 | margin-bottom: 0; 634 | } 635 | 636 | .markdown-body li>p { 637 | margin-top: 16px; 638 | } 639 | 640 | .markdown-body li+li { 641 | margin-top: .25em; 642 | } 643 | 644 | .markdown-body dl { 645 | padding: 0; 646 | } 647 | 648 | .markdown-body dl dt { 649 | padding: 0; 650 | margin-top: 16px; 651 | font-size: 1em; 652 | font-style: italic; 653 | font-weight: 600; 654 | } 655 | 656 | .markdown-body dl dd { 657 | padding: 0 16px; 658 | margin-bottom: 16px; 659 | } 660 | 661 | .markdown-body table th { 662 | font-weight: 600; 663 | } 664 | 665 | .markdown-body table th, 666 | .markdown-body table td { 667 | padding: 6px 13px; 668 | border: 1px solid #30363d; 669 | } 670 | 671 | .markdown-body table tr { 672 | background-color: #0d1117; 673 | border-top: 1px solid #21262d; 674 | } 675 | 676 | .markdown-body table tr:nth-child(2n) { 677 | background-color: #161b22; 678 | } 679 | 680 | .markdown-body table img { 681 | background-color: transparent; 682 | } 683 | 684 | .markdown-body img[align=right] { 685 | padding-left: 20px; 686 | } 687 | 688 | .markdown-body img[align=left] { 689 | padding-right: 20px; 690 | } 691 | 692 | .markdown-body .emoji { 693 | max-width: none; 694 | vertical-align: text-top; 695 | background-color: transparent; 696 | } 697 | 698 | .markdown-body span.frame { 699 | display: block; 700 | overflow: hidden; 701 | } 702 | 703 | .markdown-body span.frame>span { 704 | display: block; 705 | float: left; 706 | width: auto; 707 | padding: 7px; 708 | margin: 13px 0 0; 709 | overflow: hidden; 710 | border: 1px solid #30363d; 711 | } 712 | 713 | .markdown-body span.frame span img { 714 | display: block; 715 | float: left; 716 | } 717 | 718 | .markdown-body span.frame span span { 719 | display: block; 720 | padding: 5px 0 0; 721 | clear: both; 722 | color: #c9d1d9; 723 | } 724 | 725 | .markdown-body span.align-center { 726 | display: block; 727 | overflow: hidden; 728 | clear: both; 729 | } 730 | 731 | .markdown-body span.align-center>span { 732 | display: block; 733 | margin: 13px auto 0; 734 | overflow: hidden; 735 | text-align: center; 736 | } 737 | 738 | .markdown-body span.align-center span img { 739 | margin: 0 auto; 740 | text-align: center; 741 | } 742 | 743 | .markdown-body span.align-right { 744 | display: block; 745 | overflow: hidden; 746 | clear: both; 747 | } 748 | 749 | .markdown-body span.align-right>span { 750 | display: block; 751 | margin: 13px 0 0; 752 | overflow: hidden; 753 | text-align: right; 754 | } 755 | 756 | .markdown-body span.align-right span img { 757 | margin: 0; 758 | text-align: right; 759 | } 760 | 761 | .markdown-body span.float-left { 762 | display: block; 763 | float: left; 764 | margin-right: 13px; 765 | overflow: hidden; 766 | } 767 | 768 | .markdown-body span.float-left span { 769 | margin: 13px 0 0; 770 | } 771 | 772 | .markdown-body span.float-right { 773 | display: block; 774 | float: right; 775 | margin-left: 13px; 776 | overflow: hidden; 777 | } 778 | 779 | .markdown-body span.float-right>span { 780 | display: block; 781 | margin: 13px auto 0; 782 | overflow: hidden; 783 | text-align: right; 784 | } 785 | 786 | .markdown-body code, 787 | .markdown-body tt { 788 | padding: .2em .4em; 789 | margin: 0; 790 | font-size: 85%; 791 | background-color: rgba(110,118,129,0.4); 792 | border-radius: 6px; 793 | } 794 | 795 | .markdown-body code br, 796 | .markdown-body tt br { 797 | display: none; 798 | } 799 | 800 | .markdown-body del code { 801 | text-decoration: inherit; 802 | } 803 | 804 | .markdown-body pre code { 805 | font-size: 100%; 806 | } 807 | 808 | .markdown-body pre>code { 809 | padding: 0; 810 | margin: 0; 811 | word-break: normal; 812 | white-space: pre; 813 | background: transparent; 814 | border: 0; 815 | } 816 | 817 | .markdown-body .highlight { 818 | margin-bottom: 16px; 819 | } 820 | 821 | .markdown-body .highlight pre { 822 | margin-bottom: 0; 823 | word-break: normal; 824 | } 825 | 826 | .markdown-body .highlight pre, 827 | .markdown-body pre { 828 | padding: 16px; 829 | overflow: auto; 830 | font-size: 85%; 831 | line-height: 1.45; 832 | background-color: #161b22; 833 | border-radius: 6px; 834 | } 835 | 836 | .markdown-body pre code, 837 | .markdown-body pre tt { 838 | display: inline; 839 | max-width: auto; 840 | padding: 0; 841 | margin: 0; 842 | overflow: visible; 843 | line-height: inherit; 844 | word-wrap: normal; 845 | background-color: transparent; 846 | border: 0; 847 | } 848 | 849 | .markdown-body .csv-data td, 850 | .markdown-body .csv-data th { 851 | padding: 5px; 852 | overflow: hidden; 853 | font-size: 12px; 854 | line-height: 1; 855 | text-align: left; 856 | white-space: nowrap; 857 | } 858 | 859 | .markdown-body .csv-data .blob-num { 860 | padding: 10px 8px 9px; 861 | text-align: right; 862 | background: #0d1117; 863 | border: 0; 864 | } 865 | 866 | .markdown-body .csv-data tr { 867 | border-top: 0; 868 | } 869 | 870 | .markdown-body .csv-data th { 871 | font-weight: 600; 872 | background: #161b22; 873 | border-top: 0; 874 | } 875 | 876 | .markdown-body .footnotes { 877 | font-size: 12px; 878 | color: #8b949e; 879 | border-top: 1px solid #30363d; 880 | } 881 | 882 | .markdown-body .footnotes ol { 883 | padding-left: 16px; 884 | } 885 | 886 | .markdown-body .footnotes li { 887 | position: relative; 888 | } 889 | 890 | .markdown-body .footnotes li:target::before { 891 | position: absolute; 892 | top: -8px; 893 | right: -8px; 894 | bottom: -8px; 895 | left: -24px; 896 | pointer-events: none; 897 | content: ""; 898 | border: 2px solid #1f6feb; 899 | border-radius: 6px; 900 | } 901 | 902 | .markdown-body .footnotes li:target { 903 | color: #c9d1d9; 904 | } 905 | 906 | .markdown-body .footnotes .data-footnote-backref g-emoji { 907 | font-family: monospace; 908 | } 909 | 910 | .markdown-body .task-list-item { 911 | list-style-type: none; 912 | } 913 | 914 | .markdown-body .task-list-item label { 915 | font-weight: 400; 916 | } 917 | 918 | .markdown-body .task-list-item.enabled label { 919 | cursor: pointer; 920 | } 921 | 922 | .markdown-body .task-list-item+.task-list-item { 923 | margin-top: 3px; 924 | } 925 | 926 | .markdown-body .task-list-item .handle { 927 | display: none; 928 | } 929 | 930 | .markdown-body .task-list-item-checkbox { 931 | margin: 0 .2em .25em -1.6em; 932 | vertical-align: middle; 933 | } 934 | 935 | .markdown-body .contains-task-list:dir(rtl) .task-list-item-checkbox { 936 | margin: 0 -1.6em .25em .2em; 937 | } 938 | 939 | .markdown-body ::-webkit-calendar-picker-indicator { 940 | filter: invert(50%); 941 | } 942 | -------------------------------------------------------------------------------- /docs/resources/css/github-markdown-light.css: -------------------------------------------------------------------------------- 1 | .markdown-body { 2 | -ms-text-size-adjust: 100%; 3 | -webkit-text-size-adjust: 100%; 4 | margin: 0; 5 | color: #24292f; 6 | background-color: #ffffff; 7 | font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"; 8 | font-size: 16px; 9 | line-height: 1.5; 10 | word-wrap: break-word; 11 | } 12 | 13 | .markdown-body .octicon { 14 | display: inline-block; 15 | fill: currentColor; 16 | vertical-align: text-bottom; 17 | } 18 | 19 | .markdown-body h1:hover .anchor .octicon-link:before, 20 | .markdown-body h2:hover .anchor .octicon-link:before, 21 | .markdown-body h3:hover .anchor .octicon-link:before, 22 | .markdown-body h4:hover .anchor .octicon-link:before, 23 | .markdown-body h5:hover .anchor .octicon-link:before, 24 | .markdown-body h6:hover .anchor .octicon-link:before { 25 | width: 16px; 26 | height: 16px; 27 | content: ' '; 28 | display: inline-block; 29 | background-color: currentColor; 30 | -webkit-mask-image: url("data:image/svg+xml,"); 31 | mask-image: url("data:image/svg+xml,"); 32 | } 33 | 34 | .markdown-body details, 35 | .markdown-body figcaption, 36 | .markdown-body figure { 37 | display: block; 38 | } 39 | 40 | .markdown-body summary { 41 | display: list-item; 42 | } 43 | 44 | .markdown-body [hidden] { 45 | display: none !important; 46 | } 47 | 48 | .markdown-body a { 49 | background-color: transparent; 50 | color: #0969da; 51 | text-decoration: none; 52 | } 53 | 54 | .markdown-body a:active, 55 | .markdown-body a:hover { 56 | outline-width: 0; 57 | } 58 | 59 | .markdown-body abbr[title] { 60 | border-bottom: none; 61 | text-decoration: underline dotted; 62 | } 63 | 64 | .markdown-body b, 65 | .markdown-body strong { 66 | font-weight: 600; 67 | } 68 | 69 | .markdown-body dfn { 70 | font-style: italic; 71 | } 72 | 73 | .markdown-body h1 { 74 | margin: .67em 0; 75 | font-weight: 600; 76 | padding-bottom: .3em; 77 | font-size: 2em; 78 | border-bottom: 1px solid hsla(210,18%,87%,1); 79 | } 80 | 81 | .markdown-body mark { 82 | background-color: #fff8c5; 83 | color: #24292f; 84 | } 85 | 86 | .markdown-body small { 87 | font-size: 90%; 88 | } 89 | 90 | .markdown-body sub, 91 | .markdown-body sup { 92 | font-size: 75%; 93 | line-height: 0; 94 | position: relative; 95 | vertical-align: baseline; 96 | } 97 | 98 | .markdown-body sub { 99 | bottom: -0.25em; 100 | } 101 | 102 | .markdown-body sup { 103 | top: -0.5em; 104 | } 105 | 106 | .markdown-body img { 107 | border-style: none; 108 | max-width: 100%; 109 | box-sizing: content-box; 110 | background-color: #ffffff; 111 | } 112 | 113 | .markdown-body code, 114 | .markdown-body kbd, 115 | .markdown-body pre, 116 | .markdown-body samp { 117 | font-family: monospace,monospace; 118 | font-size: 1em; 119 | } 120 | 121 | .markdown-body figure { 122 | margin: 1em 40px; 123 | } 124 | 125 | .markdown-body hr { 126 | box-sizing: content-box; 127 | overflow: hidden; 128 | background: transparent; 129 | border-bottom: 1px solid hsla(210,18%,87%,1); 130 | height: .25em; 131 | padding: 0; 132 | margin: 24px 0; 133 | background-color: #d0d7de; 134 | border: 0; 135 | } 136 | 137 | .markdown-body input { 138 | font: inherit; 139 | margin: 0; 140 | overflow: visible; 141 | font-family: inherit; 142 | font-size: inherit; 143 | line-height: inherit; 144 | } 145 | 146 | .markdown-body [type=button], 147 | .markdown-body [type=reset], 148 | .markdown-body [type=submit] { 149 | -webkit-appearance: button; 150 | } 151 | 152 | .markdown-body [type=button]::-moz-focus-inner, 153 | .markdown-body [type=reset]::-moz-focus-inner, 154 | .markdown-body [type=submit]::-moz-focus-inner { 155 | border-style: none; 156 | padding: 0; 157 | } 158 | 159 | .markdown-body [type=button]:-moz-focusring, 160 | .markdown-body [type=reset]:-moz-focusring, 161 | .markdown-body [type=submit]:-moz-focusring { 162 | outline: 1px dotted ButtonText; 163 | } 164 | 165 | .markdown-body [type=checkbox], 166 | .markdown-body [type=radio] { 167 | box-sizing: border-box; 168 | padding: 0; 169 | } 170 | 171 | .markdown-body [type=number]::-webkit-inner-spin-button, 172 | .markdown-body [type=number]::-webkit-outer-spin-button { 173 | height: auto; 174 | } 175 | 176 | .markdown-body [type=search] { 177 | -webkit-appearance: textfield; 178 | outline-offset: -2px; 179 | } 180 | 181 | .markdown-body [type=search]::-webkit-search-cancel-button, 182 | .markdown-body [type=search]::-webkit-search-decoration { 183 | -webkit-appearance: none; 184 | } 185 | 186 | .markdown-body ::-webkit-input-placeholder { 187 | color: inherit; 188 | opacity: .54; 189 | } 190 | 191 | .markdown-body ::-webkit-file-upload-button { 192 | -webkit-appearance: button; 193 | font: inherit; 194 | } 195 | 196 | .markdown-body a:hover { 197 | text-decoration: underline; 198 | } 199 | 200 | .markdown-body hr::before { 201 | display: table; 202 | content: ""; 203 | } 204 | 205 | .markdown-body hr::after { 206 | display: table; 207 | clear: both; 208 | content: ""; 209 | } 210 | 211 | .markdown-body table { 212 | border-spacing: 0; 213 | border-collapse: collapse; 214 | display: block; 215 | width: max-content; 216 | max-width: 100%; 217 | overflow: auto; 218 | } 219 | 220 | .markdown-body td, 221 | .markdown-body th { 222 | padding: 0; 223 | } 224 | 225 | .markdown-body details summary { 226 | cursor: pointer; 227 | } 228 | 229 | .markdown-body details:not([open])>*:not(summary) { 230 | display: none !important; 231 | } 232 | 233 | .markdown-body kbd { 234 | display: inline-block; 235 | padding: 3px 5px; 236 | font: 11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; 237 | line-height: 10px; 238 | color: #24292f; 239 | vertical-align: middle; 240 | background-color: #f6f8fa; 241 | border: solid 1px rgba(175,184,193,0.2); 242 | border-bottom-color: rgba(175,184,193,0.2); 243 | border-radius: 6px; 244 | box-shadow: inset 0 -1px 0 rgba(175,184,193,0.2); 245 | } 246 | 247 | .markdown-body h1, 248 | .markdown-body h2, 249 | .markdown-body h3, 250 | .markdown-body h4, 251 | .markdown-body h5, 252 | .markdown-body h6 { 253 | margin-top: 24px; 254 | margin-bottom: 16px; 255 | font-weight: 600; 256 | line-height: 1.25; 257 | } 258 | 259 | .markdown-body h2 { 260 | font-weight: 600; 261 | padding-bottom: .3em; 262 | font-size: 1.5em; 263 | border-bottom: 1px solid hsla(210,18%,87%,1); 264 | } 265 | 266 | .markdown-body h3 { 267 | font-weight: 600; 268 | font-size: 1.25em; 269 | } 270 | 271 | .markdown-body h4 { 272 | font-weight: 600; 273 | font-size: 1em; 274 | } 275 | 276 | .markdown-body h5 { 277 | font-weight: 600; 278 | font-size: .875em; 279 | } 280 | 281 | .markdown-body h6 { 282 | font-weight: 600; 283 | font-size: .85em; 284 | color: #57606a; 285 | } 286 | 287 | .markdown-body p { 288 | margin-top: 0; 289 | margin-bottom: 10px; 290 | } 291 | 292 | .markdown-body blockquote { 293 | margin: 0; 294 | padding: 0 1em; 295 | color: #57606a; 296 | border-left: .25em solid #d0d7de; 297 | } 298 | 299 | .markdown-body ul, 300 | .markdown-body ol { 301 | margin-top: 0; 302 | margin-bottom: 0; 303 | padding-left: 2em; 304 | } 305 | 306 | .markdown-body ol ol, 307 | .markdown-body ul ol { 308 | list-style-type: lower-roman; 309 | } 310 | 311 | .markdown-body ul ul ol, 312 | .markdown-body ul ol ol, 313 | .markdown-body ol ul ol, 314 | .markdown-body ol ol ol { 315 | list-style-type: lower-alpha; 316 | } 317 | 318 | .markdown-body dd { 319 | margin-left: 0; 320 | } 321 | 322 | .markdown-body tt, 323 | .markdown-body code { 324 | font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; 325 | font-size: 12px; 326 | } 327 | 328 | .markdown-body pre { 329 | margin-top: 0; 330 | margin-bottom: 0; 331 | font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; 332 | font-size: 12px; 333 | word-wrap: normal; 334 | } 335 | 336 | .markdown-body .octicon { 337 | display: inline-block; 338 | overflow: visible !important; 339 | vertical-align: text-bottom; 340 | fill: currentColor; 341 | } 342 | 343 | .markdown-body ::placeholder { 344 | color: #6e7781; 345 | opacity: 1; 346 | } 347 | 348 | .markdown-body input::-webkit-outer-spin-button, 349 | .markdown-body input::-webkit-inner-spin-button { 350 | margin: 0; 351 | -webkit-appearance: none; 352 | appearance: none; 353 | } 354 | 355 | .markdown-body .pl-c { 356 | color: #6e7781; 357 | } 358 | 359 | .markdown-body .pl-c1, 360 | .markdown-body .pl-s .pl-v { 361 | color: #0550ae; 362 | } 363 | 364 | .markdown-body .pl-e, 365 | .markdown-body .pl-en { 366 | color: #8250df; 367 | } 368 | 369 | .markdown-body .pl-smi, 370 | .markdown-body .pl-s .pl-s1 { 371 | color: #24292f; 372 | } 373 | 374 | .markdown-body .pl-ent { 375 | color: #116329; 376 | } 377 | 378 | .markdown-body .pl-k { 379 | color: #cf222e; 380 | } 381 | 382 | .markdown-body .pl-s, 383 | .markdown-body .pl-pds, 384 | .markdown-body .pl-s .pl-pse .pl-s1, 385 | .markdown-body .pl-sr, 386 | .markdown-body .pl-sr .pl-cce, 387 | .markdown-body .pl-sr .pl-sre, 388 | .markdown-body .pl-sr .pl-sra { 389 | color: #0a3069; 390 | } 391 | 392 | .markdown-body .pl-v, 393 | .markdown-body .pl-smw { 394 | color: #953800; 395 | } 396 | 397 | .markdown-body .pl-bu { 398 | color: #82071e; 399 | } 400 | 401 | .markdown-body .pl-ii { 402 | color: #f6f8fa; 403 | background-color: #82071e; 404 | } 405 | 406 | .markdown-body .pl-c2 { 407 | color: #f6f8fa; 408 | background-color: #cf222e; 409 | } 410 | 411 | .markdown-body .pl-sr .pl-cce { 412 | font-weight: bold; 413 | color: #116329; 414 | } 415 | 416 | .markdown-body .pl-ml { 417 | color: #3b2300; 418 | } 419 | 420 | .markdown-body .pl-mh, 421 | .markdown-body .pl-mh .pl-en, 422 | .markdown-body .pl-ms { 423 | font-weight: bold; 424 | color: #0550ae; 425 | } 426 | 427 | .markdown-body .pl-mi { 428 | font-style: italic; 429 | color: #24292f; 430 | } 431 | 432 | .markdown-body .pl-mb { 433 | font-weight: bold; 434 | color: #24292f; 435 | } 436 | 437 | .markdown-body .pl-md { 438 | color: #82071e; 439 | background-color: #FFEBE9; 440 | } 441 | 442 | .markdown-body .pl-mi1 { 443 | color: #116329; 444 | background-color: #dafbe1; 445 | } 446 | 447 | .markdown-body .pl-mc { 448 | color: #953800; 449 | background-color: #ffd8b5; 450 | } 451 | 452 | .markdown-body .pl-mi2 { 453 | color: #eaeef2; 454 | background-color: #0550ae; 455 | } 456 | 457 | .markdown-body .pl-mdr { 458 | font-weight: bold; 459 | color: #8250df; 460 | } 461 | 462 | .markdown-body .pl-ba { 463 | color: #57606a; 464 | } 465 | 466 | .markdown-body .pl-sg { 467 | color: #8c959f; 468 | } 469 | 470 | .markdown-body .pl-corl { 471 | text-decoration: underline; 472 | color: #0a3069; 473 | } 474 | 475 | .markdown-body [data-catalyst] { 476 | display: block; 477 | } 478 | 479 | .markdown-body g-emoji { 480 | font-family: "Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; 481 | font-size: 1em; 482 | font-style: normal !important; 483 | font-weight: 400; 484 | line-height: 1; 485 | vertical-align: -0.075em; 486 | } 487 | 488 | .markdown-body g-emoji img { 489 | width: 1em; 490 | height: 1em; 491 | } 492 | 493 | .markdown-body::before { 494 | display: table; 495 | content: ""; 496 | } 497 | 498 | .markdown-body::after { 499 | display: table; 500 | clear: both; 501 | content: ""; 502 | } 503 | 504 | .markdown-body>*:first-child { 505 | margin-top: 0 !important; 506 | } 507 | 508 | .markdown-body>*:last-child { 509 | margin-bottom: 0 !important; 510 | } 511 | 512 | .markdown-body a:not([href]) { 513 | color: inherit; 514 | text-decoration: none; 515 | } 516 | 517 | .markdown-body .absent { 518 | color: #cf222e; 519 | } 520 | 521 | .markdown-body .anchor { 522 | float: left; 523 | padding-right: 4px; 524 | margin-left: -20px; 525 | line-height: 1; 526 | } 527 | 528 | .markdown-body .anchor:focus { 529 | outline: none; 530 | } 531 | 532 | .markdown-body p, 533 | .markdown-body blockquote, 534 | .markdown-body ul, 535 | .markdown-body ol, 536 | .markdown-body dl, 537 | .markdown-body table, 538 | .markdown-body pre, 539 | .markdown-body details { 540 | margin-top: 0; 541 | margin-bottom: 16px; 542 | } 543 | 544 | .markdown-body blockquote>:first-child { 545 | margin-top: 0; 546 | } 547 | 548 | .markdown-body blockquote>:last-child { 549 | margin-bottom: 0; 550 | } 551 | 552 | .markdown-body sup>a::before { 553 | content: "["; 554 | } 555 | 556 | .markdown-body sup>a::after { 557 | content: "]"; 558 | } 559 | 560 | .markdown-body h1 .octicon-link, 561 | .markdown-body h2 .octicon-link, 562 | .markdown-body h3 .octicon-link, 563 | .markdown-body h4 .octicon-link, 564 | .markdown-body h5 .octicon-link, 565 | .markdown-body h6 .octicon-link { 566 | color: #24292f; 567 | vertical-align: middle; 568 | visibility: hidden; 569 | } 570 | 571 | .markdown-body h1:hover .anchor, 572 | .markdown-body h2:hover .anchor, 573 | .markdown-body h3:hover .anchor, 574 | .markdown-body h4:hover .anchor, 575 | .markdown-body h5:hover .anchor, 576 | .markdown-body h6:hover .anchor { 577 | text-decoration: none; 578 | } 579 | 580 | .markdown-body h1:hover .anchor .octicon-link, 581 | .markdown-body h2:hover .anchor .octicon-link, 582 | .markdown-body h3:hover .anchor .octicon-link, 583 | .markdown-body h4:hover .anchor .octicon-link, 584 | .markdown-body h5:hover .anchor .octicon-link, 585 | .markdown-body h6:hover .anchor .octicon-link { 586 | visibility: visible; 587 | } 588 | 589 | .markdown-body h1 tt, 590 | .markdown-body h1 code, 591 | .markdown-body h2 tt, 592 | .markdown-body h2 code, 593 | .markdown-body h3 tt, 594 | .markdown-body h3 code, 595 | .markdown-body h4 tt, 596 | .markdown-body h4 code, 597 | .markdown-body h5 tt, 598 | .markdown-body h5 code, 599 | .markdown-body h6 tt, 600 | .markdown-body h6 code { 601 | padding: 0 .2em; 602 | font-size: inherit; 603 | } 604 | 605 | .markdown-body ul.no-list, 606 | .markdown-body ol.no-list { 607 | padding: 0; 608 | list-style-type: none; 609 | } 610 | 611 | .markdown-body ol[type="1"] { 612 | list-style-type: decimal; 613 | } 614 | 615 | .markdown-body ol[type=a] { 616 | list-style-type: lower-alpha; 617 | } 618 | 619 | .markdown-body ol[type=i] { 620 | list-style-type: lower-roman; 621 | } 622 | 623 | .markdown-body div>ol:not([type]) { 624 | list-style-type: decimal; 625 | } 626 | 627 | .markdown-body ul ul, 628 | .markdown-body ul ol, 629 | .markdown-body ol ol, 630 | .markdown-body ol ul { 631 | margin-top: 0; 632 | margin-bottom: 0; 633 | } 634 | 635 | .markdown-body li>p { 636 | margin-top: 16px; 637 | } 638 | 639 | .markdown-body li+li { 640 | margin-top: .25em; 641 | } 642 | 643 | .markdown-body dl { 644 | padding: 0; 645 | } 646 | 647 | .markdown-body dl dt { 648 | padding: 0; 649 | margin-top: 16px; 650 | font-size: 1em; 651 | font-style: italic; 652 | font-weight: 600; 653 | } 654 | 655 | .markdown-body dl dd { 656 | padding: 0 16px; 657 | margin-bottom: 16px; 658 | } 659 | 660 | .markdown-body table th { 661 | font-weight: 600; 662 | } 663 | 664 | .markdown-body table th, 665 | .markdown-body table td { 666 | padding: 6px 13px; 667 | border: 1px solid #d0d7de; 668 | } 669 | 670 | .markdown-body table tr { 671 | background-color: #ffffff; 672 | border-top: 1px solid hsla(210,18%,87%,1); 673 | } 674 | 675 | .markdown-body table tr:nth-child(2n) { 676 | background-color: #f6f8fa; 677 | } 678 | 679 | .markdown-body table img { 680 | background-color: transparent; 681 | } 682 | 683 | .markdown-body img[align=right] { 684 | padding-left: 20px; 685 | } 686 | 687 | .markdown-body img[align=left] { 688 | padding-right: 20px; 689 | } 690 | 691 | .markdown-body .emoji { 692 | max-width: none; 693 | vertical-align: text-top; 694 | background-color: transparent; 695 | } 696 | 697 | .markdown-body span.frame { 698 | display: block; 699 | overflow: hidden; 700 | } 701 | 702 | .markdown-body span.frame>span { 703 | display: block; 704 | float: left; 705 | width: auto; 706 | padding: 7px; 707 | margin: 13px 0 0; 708 | overflow: hidden; 709 | border: 1px solid #d0d7de; 710 | } 711 | 712 | .markdown-body span.frame span img { 713 | display: block; 714 | float: left; 715 | } 716 | 717 | .markdown-body span.frame span span { 718 | display: block; 719 | padding: 5px 0 0; 720 | clear: both; 721 | color: #24292f; 722 | } 723 | 724 | .markdown-body span.align-center { 725 | display: block; 726 | overflow: hidden; 727 | clear: both; 728 | } 729 | 730 | .markdown-body span.align-center>span { 731 | display: block; 732 | margin: 13px auto 0; 733 | overflow: hidden; 734 | text-align: center; 735 | } 736 | 737 | .markdown-body span.align-center span img { 738 | margin: 0 auto; 739 | text-align: center; 740 | } 741 | 742 | .markdown-body span.align-right { 743 | display: block; 744 | overflow: hidden; 745 | clear: both; 746 | } 747 | 748 | .markdown-body span.align-right>span { 749 | display: block; 750 | margin: 13px 0 0; 751 | overflow: hidden; 752 | text-align: right; 753 | } 754 | 755 | .markdown-body span.align-right span img { 756 | margin: 0; 757 | text-align: right; 758 | } 759 | 760 | .markdown-body span.float-left { 761 | display: block; 762 | float: left; 763 | margin-right: 13px; 764 | overflow: hidden; 765 | } 766 | 767 | .markdown-body span.float-left span { 768 | margin: 13px 0 0; 769 | } 770 | 771 | .markdown-body span.float-right { 772 | display: block; 773 | float: right; 774 | margin-left: 13px; 775 | overflow: hidden; 776 | } 777 | 778 | .markdown-body span.float-right>span { 779 | display: block; 780 | margin: 13px auto 0; 781 | overflow: hidden; 782 | text-align: right; 783 | } 784 | 785 | .markdown-body code, 786 | .markdown-body tt { 787 | padding: .2em .4em; 788 | margin: 0; 789 | font-size: 85%; 790 | background-color: rgba(175,184,193,0.2); 791 | border-radius: 6px; 792 | } 793 | 794 | .markdown-body code br, 795 | .markdown-body tt br { 796 | display: none; 797 | } 798 | 799 | .markdown-body del code { 800 | text-decoration: inherit; 801 | } 802 | 803 | .markdown-body pre code { 804 | font-size: 100%; 805 | } 806 | 807 | .markdown-body pre>code { 808 | padding: 0; 809 | margin: 0; 810 | word-break: normal; 811 | white-space: pre; 812 | background: transparent; 813 | border: 0; 814 | } 815 | 816 | .markdown-body .highlight { 817 | margin-bottom: 16px; 818 | } 819 | 820 | .markdown-body .highlight pre { 821 | margin-bottom: 0; 822 | word-break: normal; 823 | } 824 | 825 | .markdown-body .highlight pre, 826 | .markdown-body pre { 827 | padding: 16px; 828 | overflow: auto; 829 | font-size: 85%; 830 | line-height: 1.45; 831 | background-color: #f6f8fa; 832 | border-radius: 6px; 833 | } 834 | 835 | .markdown-body pre code, 836 | .markdown-body pre tt { 837 | display: inline; 838 | max-width: auto; 839 | padding: 0; 840 | margin: 0; 841 | overflow: visible; 842 | line-height: inherit; 843 | word-wrap: normal; 844 | background-color: transparent; 845 | border: 0; 846 | } 847 | 848 | .markdown-body .csv-data td, 849 | .markdown-body .csv-data th { 850 | padding: 5px; 851 | overflow: hidden; 852 | font-size: 12px; 853 | line-height: 1; 854 | text-align: left; 855 | white-space: nowrap; 856 | } 857 | 858 | .markdown-body .csv-data .blob-num { 859 | padding: 10px 8px 9px; 860 | text-align: right; 861 | background: #ffffff; 862 | border: 0; 863 | } 864 | 865 | .markdown-body .csv-data tr { 866 | border-top: 0; 867 | } 868 | 869 | .markdown-body .csv-data th { 870 | font-weight: 600; 871 | background: #f6f8fa; 872 | border-top: 0; 873 | } 874 | 875 | .markdown-body .footnotes { 876 | font-size: 12px; 877 | color: #57606a; 878 | border-top: 1px solid #d0d7de; 879 | } 880 | 881 | .markdown-body .footnotes ol { 882 | padding-left: 16px; 883 | } 884 | 885 | .markdown-body .footnotes li { 886 | position: relative; 887 | } 888 | 889 | .markdown-body .footnotes li:target::before { 890 | position: absolute; 891 | top: -8px; 892 | right: -8px; 893 | bottom: -8px; 894 | left: -24px; 895 | pointer-events: none; 896 | content: ""; 897 | border: 2px solid #0969da; 898 | border-radius: 6px; 899 | } 900 | 901 | .markdown-body .footnotes li:target { 902 | color: #24292f; 903 | } 904 | 905 | .markdown-body .footnotes .data-footnote-backref g-emoji { 906 | font-family: monospace; 907 | } 908 | 909 | .markdown-body .task-list-item { 910 | list-style-type: none; 911 | } 912 | 913 | .markdown-body .task-list-item label { 914 | font-weight: 400; 915 | } 916 | 917 | .markdown-body .task-list-item.enabled label { 918 | cursor: pointer; 919 | } 920 | 921 | .markdown-body .task-list-item+.task-list-item { 922 | margin-top: 3px; 923 | } 924 | 925 | .markdown-body .task-list-item .handle { 926 | display: none; 927 | } 928 | 929 | .markdown-body .task-list-item-checkbox { 930 | margin: 0 .2em .25em -1.6em; 931 | vertical-align: middle; 932 | } 933 | 934 | .markdown-body .contains-task-list:dir(rtl) .task-list-item-checkbox { 935 | margin: 0 -1.6em .25em .2em; 936 | } 937 | 938 | .markdown-body ::-webkit-calendar-picker-indicator { 939 | filter: invert(50%); 940 | } 941 | -------------------------------------------------------------------------------- /docs/resources/css/github-markdown.css: -------------------------------------------------------------------------------- 1 | @media (prefers-color-scheme: dark) { 2 | .markdown-body { 3 | color-scheme: dark; 4 | --color-prettylights-syntax-comment: #8b949e; 5 | --color-prettylights-syntax-constant: #79c0ff; 6 | --color-prettylights-syntax-entity: #d2a8ff; 7 | --color-prettylights-syntax-storage-modifier-import: #c9d1d9; 8 | --color-prettylights-syntax-entity-tag: #7ee787; 9 | --color-prettylights-syntax-keyword: #ff7b72; 10 | --color-prettylights-syntax-string: #a5d6ff; 11 | --color-prettylights-syntax-variable: #ffa657; 12 | --color-prettylights-syntax-brackethighlighter-unmatched: #f85149; 13 | --color-prettylights-syntax-invalid-illegal-text: #f0f6fc; 14 | --color-prettylights-syntax-invalid-illegal-bg: #8e1519; 15 | --color-prettylights-syntax-carriage-return-text: #f0f6fc; 16 | --color-prettylights-syntax-carriage-return-bg: #b62324; 17 | --color-prettylights-syntax-string-regexp: #7ee787; 18 | --color-prettylights-syntax-markup-list: #f2cc60; 19 | --color-prettylights-syntax-markup-heading: #1f6feb; 20 | --color-prettylights-syntax-markup-italic: #c9d1d9; 21 | --color-prettylights-syntax-markup-bold: #c9d1d9; 22 | --color-prettylights-syntax-markup-deleted-text: #ffdcd7; 23 | --color-prettylights-syntax-markup-deleted-bg: #67060c; 24 | --color-prettylights-syntax-markup-inserted-text: #aff5b4; 25 | --color-prettylights-syntax-markup-inserted-bg: #033a16; 26 | --color-prettylights-syntax-markup-changed-text: #ffdfb6; 27 | --color-prettylights-syntax-markup-changed-bg: #5a1e02; 28 | --color-prettylights-syntax-markup-ignored-text: #c9d1d9; 29 | --color-prettylights-syntax-markup-ignored-bg: #1158c7; 30 | --color-prettylights-syntax-meta-diff-range: #d2a8ff; 31 | --color-prettylights-syntax-brackethighlighter-angle: #8b949e; 32 | --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58; 33 | --color-prettylights-syntax-constant-other-reference-link: #a5d6ff; 34 | --color-fg-default: #c9d1d9; 35 | --color-fg-muted: #8b949e; 36 | --color-fg-subtle: #484f58; 37 | --color-canvas-default: #0d1117; 38 | --color-canvas-subtle: #161b22; 39 | --color-border-default: #30363d; 40 | --color-border-muted: #21262d; 41 | --color-neutral-muted: rgba(110,118,129,0.4); 42 | --color-accent-fg: #58a6ff; 43 | --color-accent-emphasis: #1f6feb; 44 | --color-attention-subtle: rgba(187,128,9,0.15); 45 | --color-danger-fg: #f85149; 46 | } 47 | } 48 | 49 | @media (prefers-color-scheme: light) { 50 | .markdown-body { 51 | color-scheme: light; 52 | --color-prettylights-syntax-comment: #6e7781; 53 | --color-prettylights-syntax-constant: #0550ae; 54 | --color-prettylights-syntax-entity: #8250df; 55 | --color-prettylights-syntax-storage-modifier-import: #24292f; 56 | --color-prettylights-syntax-entity-tag: #116329; 57 | --color-prettylights-syntax-keyword: #cf222e; 58 | --color-prettylights-syntax-string: #0a3069; 59 | --color-prettylights-syntax-variable: #953800; 60 | --color-prettylights-syntax-brackethighlighter-unmatched: #82071e; 61 | --color-prettylights-syntax-invalid-illegal-text: #f6f8fa; 62 | --color-prettylights-syntax-invalid-illegal-bg: #82071e; 63 | --color-prettylights-syntax-carriage-return-text: #f6f8fa; 64 | --color-prettylights-syntax-carriage-return-bg: #cf222e; 65 | --color-prettylights-syntax-string-regexp: #116329; 66 | --color-prettylights-syntax-markup-list: #3b2300; 67 | --color-prettylights-syntax-markup-heading: #0550ae; 68 | --color-prettylights-syntax-markup-italic: #24292f; 69 | --color-prettylights-syntax-markup-bold: #24292f; 70 | --color-prettylights-syntax-markup-deleted-text: #82071e; 71 | --color-prettylights-syntax-markup-deleted-bg: #FFEBE9; 72 | --color-prettylights-syntax-markup-inserted-text: #116329; 73 | --color-prettylights-syntax-markup-inserted-bg: #dafbe1; 74 | --color-prettylights-syntax-markup-changed-text: #953800; 75 | --color-prettylights-syntax-markup-changed-bg: #ffd8b5; 76 | --color-prettylights-syntax-markup-ignored-text: #eaeef2; 77 | --color-prettylights-syntax-markup-ignored-bg: #0550ae; 78 | --color-prettylights-syntax-meta-diff-range: #8250df; 79 | --color-prettylights-syntax-brackethighlighter-angle: #57606a; 80 | --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f; 81 | --color-prettylights-syntax-constant-other-reference-link: #0a3069; 82 | --color-fg-default: #24292f; 83 | --color-fg-muted: #57606a; 84 | --color-fg-subtle: #6e7781; 85 | --color-canvas-default: #ffffff; 86 | --color-canvas-subtle: #f6f8fa; 87 | --color-border-default: #d0d7de; 88 | --color-border-muted: hsla(210,18%,87%,1); 89 | --color-neutral-muted: rgba(175,184,193,0.2); 90 | --color-accent-fg: #0969da; 91 | --color-accent-emphasis: #0969da; 92 | --color-attention-subtle: #fff8c5; 93 | --color-danger-fg: #cf222e; 94 | } 95 | } 96 | 97 | .markdown-body { 98 | -ms-text-size-adjust: 100%; 99 | -webkit-text-size-adjust: 100%; 100 | margin: 0; 101 | color: var(--color-fg-default); 102 | background-color: var(--color-canvas-default); 103 | font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"; 104 | font-size: 16px; 105 | line-height: 1.5; 106 | word-wrap: break-word; 107 | } 108 | 109 | .markdown-body .octicon { 110 | display: inline-block; 111 | fill: currentColor; 112 | vertical-align: text-bottom; 113 | } 114 | 115 | .markdown-body h1:hover .anchor .octicon-link:before, 116 | .markdown-body h2:hover .anchor .octicon-link:before, 117 | .markdown-body h3:hover .anchor .octicon-link:before, 118 | .markdown-body h4:hover .anchor .octicon-link:before, 119 | .markdown-body h5:hover .anchor .octicon-link:before, 120 | .markdown-body h6:hover .anchor .octicon-link:before { 121 | width: 16px; 122 | height: 16px; 123 | content: ' '; 124 | display: inline-block; 125 | background-color: currentColor; 126 | -webkit-mask-image: url("data:image/svg+xml,"); 127 | mask-image: url("data:image/svg+xml,"); 128 | } 129 | 130 | .markdown-body details, 131 | .markdown-body figcaption, 132 | .markdown-body figure { 133 | display: block; 134 | } 135 | 136 | .markdown-body summary { 137 | display: list-item; 138 | } 139 | 140 | .markdown-body [hidden] { 141 | display: none !important; 142 | } 143 | 144 | .markdown-body a { 145 | background-color: transparent; 146 | color: var(--color-accent-fg); 147 | text-decoration: none; 148 | } 149 | 150 | .markdown-body a:active, 151 | .markdown-body a:hover { 152 | outline-width: 0; 153 | } 154 | 155 | .markdown-body abbr[title] { 156 | border-bottom: none; 157 | text-decoration: underline dotted; 158 | } 159 | 160 | .markdown-body b, 161 | .markdown-body strong { 162 | font-weight: 600; 163 | } 164 | 165 | .markdown-body dfn { 166 | font-style: italic; 167 | } 168 | 169 | .markdown-body h1 { 170 | margin: .67em 0; 171 | font-weight: 600; 172 | padding-bottom: .3em; 173 | font-size: 2em; 174 | border-bottom: 1px solid var(--color-border-muted); 175 | } 176 | 177 | .markdown-body mark { 178 | background-color: var(--color-attention-subtle); 179 | color: var(--color-text-primary); 180 | } 181 | 182 | .markdown-body small { 183 | font-size: 90%; 184 | } 185 | 186 | .markdown-body sub, 187 | .markdown-body sup { 188 | font-size: 75%; 189 | line-height: 0; 190 | position: relative; 191 | vertical-align: baseline; 192 | } 193 | 194 | .markdown-body sub { 195 | bottom: -0.25em; 196 | } 197 | 198 | .markdown-body sup { 199 | top: -0.5em; 200 | } 201 | 202 | .markdown-body img { 203 | border-style: none; 204 | max-width: 100%; 205 | box-sizing: content-box; 206 | background-color: var(--color-canvas-default); 207 | } 208 | 209 | .markdown-body code, 210 | .markdown-body kbd, 211 | .markdown-body pre, 212 | .markdown-body samp { 213 | font-family: monospace,monospace; 214 | font-size: 1em; 215 | } 216 | 217 | .markdown-body figure { 218 | margin: 1em 40px; 219 | } 220 | 221 | .markdown-body hr { 222 | box-sizing: content-box; 223 | overflow: hidden; 224 | background: transparent; 225 | border-bottom: 1px solid var(--color-border-muted); 226 | height: .25em; 227 | padding: 0; 228 | margin: 24px 0; 229 | background-color: var(--color-border-default); 230 | border: 0; 231 | } 232 | 233 | .markdown-body input { 234 | font: inherit; 235 | margin: 0; 236 | overflow: visible; 237 | font-family: inherit; 238 | font-size: inherit; 239 | line-height: inherit; 240 | } 241 | 242 | .markdown-body [type=button], 243 | .markdown-body [type=reset], 244 | .markdown-body [type=submit] { 245 | -webkit-appearance: button; 246 | } 247 | 248 | .markdown-body [type=button]::-moz-focus-inner, 249 | .markdown-body [type=reset]::-moz-focus-inner, 250 | .markdown-body [type=submit]::-moz-focus-inner { 251 | border-style: none; 252 | padding: 0; 253 | } 254 | 255 | .markdown-body [type=button]:-moz-focusring, 256 | .markdown-body [type=reset]:-moz-focusring, 257 | .markdown-body [type=submit]:-moz-focusring { 258 | outline: 1px dotted ButtonText; 259 | } 260 | 261 | .markdown-body [type=checkbox], 262 | .markdown-body [type=radio] { 263 | box-sizing: border-box; 264 | padding: 0; 265 | } 266 | 267 | .markdown-body [type=number]::-webkit-inner-spin-button, 268 | .markdown-body [type=number]::-webkit-outer-spin-button { 269 | height: auto; 270 | } 271 | 272 | .markdown-body [type=search] { 273 | -webkit-appearance: textfield; 274 | outline-offset: -2px; 275 | } 276 | 277 | .markdown-body [type=search]::-webkit-search-cancel-button, 278 | .markdown-body [type=search]::-webkit-search-decoration { 279 | -webkit-appearance: none; 280 | } 281 | 282 | .markdown-body ::-webkit-input-placeholder { 283 | color: inherit; 284 | opacity: .54; 285 | } 286 | 287 | .markdown-body ::-webkit-file-upload-button { 288 | -webkit-appearance: button; 289 | font: inherit; 290 | } 291 | 292 | .markdown-body a:hover { 293 | text-decoration: underline; 294 | } 295 | 296 | .markdown-body hr::before { 297 | display: table; 298 | content: ""; 299 | } 300 | 301 | .markdown-body hr::after { 302 | display: table; 303 | clear: both; 304 | content: ""; 305 | } 306 | 307 | .markdown-body table { 308 | border-spacing: 0; 309 | border-collapse: collapse; 310 | display: block; 311 | width: max-content; 312 | max-width: 100%; 313 | overflow: auto; 314 | } 315 | 316 | .markdown-body td, 317 | .markdown-body th { 318 | padding: 0; 319 | } 320 | 321 | .markdown-body details summary { 322 | cursor: pointer; 323 | } 324 | 325 | .markdown-body details:not([open])>*:not(summary) { 326 | display: none !important; 327 | } 328 | 329 | .markdown-body kbd { 330 | display: inline-block; 331 | padding: 3px 5px; 332 | font: 11px ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; 333 | line-height: 10px; 334 | color: var(--color-fg-default); 335 | vertical-align: middle; 336 | background-color: var(--color-canvas-subtle); 337 | border: solid 1px var(--color-neutral-muted); 338 | border-bottom-color: var(--color-neutral-muted); 339 | border-radius: 6px; 340 | box-shadow: inset 0 -1px 0 var(--color-neutral-muted); 341 | } 342 | 343 | .markdown-body h1, 344 | .markdown-body h2, 345 | .markdown-body h3, 346 | .markdown-body h4, 347 | .markdown-body h5, 348 | .markdown-body h6 { 349 | margin-top: 24px; 350 | margin-bottom: 16px; 351 | font-weight: 600; 352 | line-height: 1.25; 353 | } 354 | 355 | .markdown-body h2 { 356 | font-weight: 600; 357 | padding-bottom: .3em; 358 | font-size: 1.5em; 359 | border-bottom: 1px solid var(--color-border-muted); 360 | } 361 | 362 | .markdown-body h3 { 363 | font-weight: 600; 364 | font-size: 1.25em; 365 | } 366 | 367 | .markdown-body h4 { 368 | font-weight: 600; 369 | font-size: 1em; 370 | } 371 | 372 | .markdown-body h5 { 373 | font-weight: 600; 374 | font-size: .875em; 375 | } 376 | 377 | .markdown-body h6 { 378 | font-weight: 600; 379 | font-size: .85em; 380 | color: var(--color-fg-muted); 381 | } 382 | 383 | .markdown-body p { 384 | margin-top: 0; 385 | margin-bottom: 10px; 386 | } 387 | 388 | .markdown-body blockquote { 389 | margin: 0; 390 | padding: 0 1em; 391 | color: var(--color-fg-muted); 392 | border-left: .25em solid var(--color-border-default); 393 | } 394 | 395 | .markdown-body ul, 396 | .markdown-body ol { 397 | margin-top: 0; 398 | margin-bottom: 0; 399 | padding-left: 2em; 400 | } 401 | 402 | .markdown-body ol ol, 403 | .markdown-body ul ol { 404 | list-style-type: lower-roman; 405 | } 406 | 407 | .markdown-body ul ul ol, 408 | .markdown-body ul ol ol, 409 | .markdown-body ol ul ol, 410 | .markdown-body ol ol ol { 411 | list-style-type: lower-alpha; 412 | } 413 | 414 | .markdown-body dd { 415 | margin-left: 0; 416 | } 417 | 418 | .markdown-body tt, 419 | .markdown-body code { 420 | font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; 421 | font-size: 12px; 422 | } 423 | 424 | .markdown-body pre { 425 | margin-top: 0; 426 | margin-bottom: 0; 427 | font-family: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; 428 | font-size: 12px; 429 | word-wrap: normal; 430 | } 431 | 432 | .markdown-body .octicon { 433 | display: inline-block; 434 | overflow: visible !important; 435 | vertical-align: text-bottom; 436 | fill: currentColor; 437 | } 438 | 439 | .markdown-body ::placeholder { 440 | color: var(--color-fg-subtle); 441 | opacity: 1; 442 | } 443 | 444 | .markdown-body input::-webkit-outer-spin-button, 445 | .markdown-body input::-webkit-inner-spin-button { 446 | margin: 0; 447 | -webkit-appearance: none; 448 | appearance: none; 449 | } 450 | 451 | .markdown-body .pl-c { 452 | color: var(--color-prettylights-syntax-comment); 453 | } 454 | 455 | .markdown-body .pl-c1, 456 | .markdown-body .pl-s .pl-v { 457 | color: var(--color-prettylights-syntax-constant); 458 | } 459 | 460 | .markdown-body .pl-e, 461 | .markdown-body .pl-en { 462 | color: var(--color-prettylights-syntax-entity); 463 | } 464 | 465 | .markdown-body .pl-smi, 466 | .markdown-body .pl-s .pl-s1 { 467 | color: var(--color-prettylights-syntax-storage-modifier-import); 468 | } 469 | 470 | .markdown-body .pl-ent { 471 | color: var(--color-prettylights-syntax-entity-tag); 472 | } 473 | 474 | .markdown-body .pl-k { 475 | color: var(--color-prettylights-syntax-keyword); 476 | } 477 | 478 | .markdown-body .pl-s, 479 | .markdown-body .pl-pds, 480 | .markdown-body .pl-s .pl-pse .pl-s1, 481 | .markdown-body .pl-sr, 482 | .markdown-body .pl-sr .pl-cce, 483 | .markdown-body .pl-sr .pl-sre, 484 | .markdown-body .pl-sr .pl-sra { 485 | color: var(--color-prettylights-syntax-string); 486 | } 487 | 488 | .markdown-body .pl-v, 489 | .markdown-body .pl-smw { 490 | color: var(--color-prettylights-syntax-variable); 491 | } 492 | 493 | .markdown-body .pl-bu { 494 | color: var(--color-prettylights-syntax-brackethighlighter-unmatched); 495 | } 496 | 497 | .markdown-body .pl-ii { 498 | color: var(--color-prettylights-syntax-invalid-illegal-text); 499 | background-color: var(--color-prettylights-syntax-invalid-illegal-bg); 500 | } 501 | 502 | .markdown-body .pl-c2 { 503 | color: var(--color-prettylights-syntax-carriage-return-text); 504 | background-color: var(--color-prettylights-syntax-carriage-return-bg); 505 | } 506 | 507 | .markdown-body .pl-sr .pl-cce { 508 | font-weight: bold; 509 | color: var(--color-prettylights-syntax-string-regexp); 510 | } 511 | 512 | .markdown-body .pl-ml { 513 | color: var(--color-prettylights-syntax-markup-list); 514 | } 515 | 516 | .markdown-body .pl-mh, 517 | .markdown-body .pl-mh .pl-en, 518 | .markdown-body .pl-ms { 519 | font-weight: bold; 520 | color: var(--color-prettylights-syntax-markup-heading); 521 | } 522 | 523 | .markdown-body .pl-mi { 524 | font-style: italic; 525 | color: var(--color-prettylights-syntax-markup-italic); 526 | } 527 | 528 | .markdown-body .pl-mb { 529 | font-weight: bold; 530 | color: var(--color-prettylights-syntax-markup-bold); 531 | } 532 | 533 | .markdown-body .pl-md { 534 | color: var(--color-prettylights-syntax-markup-deleted-text); 535 | background-color: var(--color-prettylights-syntax-markup-deleted-bg); 536 | } 537 | 538 | .markdown-body .pl-mi1 { 539 | color: var(--color-prettylights-syntax-markup-inserted-text); 540 | background-color: var(--color-prettylights-syntax-markup-inserted-bg); 541 | } 542 | 543 | .markdown-body .pl-mc { 544 | color: var(--color-prettylights-syntax-markup-changed-text); 545 | background-color: var(--color-prettylights-syntax-markup-changed-bg); 546 | } 547 | 548 | .markdown-body .pl-mi2 { 549 | color: var(--color-prettylights-syntax-markup-ignored-text); 550 | background-color: var(--color-prettylights-syntax-markup-ignored-bg); 551 | } 552 | 553 | .markdown-body .pl-mdr { 554 | font-weight: bold; 555 | color: var(--color-prettylights-syntax-meta-diff-range); 556 | } 557 | 558 | .markdown-body .pl-ba { 559 | color: var(--color-prettylights-syntax-brackethighlighter-angle); 560 | } 561 | 562 | .markdown-body .pl-sg { 563 | color: var(--color-prettylights-syntax-sublimelinter-gutter-mark); 564 | } 565 | 566 | .markdown-body .pl-corl { 567 | text-decoration: underline; 568 | color: var(--color-prettylights-syntax-constant-other-reference-link); 569 | } 570 | 571 | .markdown-body [data-catalyst] { 572 | display: block; 573 | } 574 | 575 | .markdown-body g-emoji { 576 | font-family: "Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol"; 577 | font-size: 1em; 578 | font-style: normal !important; 579 | font-weight: 400; 580 | line-height: 1; 581 | vertical-align: -0.075em; 582 | } 583 | 584 | .markdown-body g-emoji img { 585 | width: 1em; 586 | height: 1em; 587 | } 588 | 589 | .markdown-body::before { 590 | display: table; 591 | content: ""; 592 | } 593 | 594 | .markdown-body::after { 595 | display: table; 596 | clear: both; 597 | content: ""; 598 | } 599 | 600 | .markdown-body>*:first-child { 601 | margin-top: 0 !important; 602 | } 603 | 604 | .markdown-body>*:last-child { 605 | margin-bottom: 0 !important; 606 | } 607 | 608 | .markdown-body a:not([href]) { 609 | color: inherit; 610 | text-decoration: none; 611 | } 612 | 613 | .markdown-body .absent { 614 | color: var(--color-danger-fg); 615 | } 616 | 617 | .markdown-body .anchor { 618 | float: left; 619 | padding-right: 4px; 620 | margin-left: -20px; 621 | line-height: 1; 622 | } 623 | 624 | .markdown-body .anchor:focus { 625 | outline: none; 626 | } 627 | 628 | .markdown-body p, 629 | .markdown-body blockquote, 630 | .markdown-body ul, 631 | .markdown-body ol, 632 | .markdown-body dl, 633 | .markdown-body table, 634 | .markdown-body pre, 635 | .markdown-body details { 636 | margin-top: 0; 637 | margin-bottom: 16px; 638 | } 639 | 640 | .markdown-body blockquote>:first-child { 641 | margin-top: 0; 642 | } 643 | 644 | .markdown-body blockquote>:last-child { 645 | margin-bottom: 0; 646 | } 647 | 648 | .markdown-body sup>a::before { 649 | content: "["; 650 | } 651 | 652 | .markdown-body sup>a::after { 653 | content: "]"; 654 | } 655 | 656 | .markdown-body h1 .octicon-link, 657 | .markdown-body h2 .octicon-link, 658 | .markdown-body h3 .octicon-link, 659 | .markdown-body h4 .octicon-link, 660 | .markdown-body h5 .octicon-link, 661 | .markdown-body h6 .octicon-link { 662 | color: var(--color-fg-default); 663 | vertical-align: middle; 664 | visibility: hidden; 665 | } 666 | 667 | .markdown-body h1:hover .anchor, 668 | .markdown-body h2:hover .anchor, 669 | .markdown-body h3:hover .anchor, 670 | .markdown-body h4:hover .anchor, 671 | .markdown-body h5:hover .anchor, 672 | .markdown-body h6:hover .anchor { 673 | text-decoration: none; 674 | } 675 | 676 | .markdown-body h1:hover .anchor .octicon-link, 677 | .markdown-body h2:hover .anchor .octicon-link, 678 | .markdown-body h3:hover .anchor .octicon-link, 679 | .markdown-body h4:hover .anchor .octicon-link, 680 | .markdown-body h5:hover .anchor .octicon-link, 681 | .markdown-body h6:hover .anchor .octicon-link { 682 | visibility: visible; 683 | } 684 | 685 | .markdown-body h1 tt, 686 | .markdown-body h1 code, 687 | .markdown-body h2 tt, 688 | .markdown-body h2 code, 689 | .markdown-body h3 tt, 690 | .markdown-body h3 code, 691 | .markdown-body h4 tt, 692 | .markdown-body h4 code, 693 | .markdown-body h5 tt, 694 | .markdown-body h5 code, 695 | .markdown-body h6 tt, 696 | .markdown-body h6 code { 697 | padding: 0 .2em; 698 | font-size: inherit; 699 | } 700 | 701 | .markdown-body ul.no-list, 702 | .markdown-body ol.no-list { 703 | padding: 0; 704 | list-style-type: none; 705 | } 706 | 707 | .markdown-body ol[type="1"] { 708 | list-style-type: decimal; 709 | } 710 | 711 | .markdown-body ol[type=a] { 712 | list-style-type: lower-alpha; 713 | } 714 | 715 | .markdown-body ol[type=i] { 716 | list-style-type: lower-roman; 717 | } 718 | 719 | .markdown-body div>ol:not([type]) { 720 | list-style-type: decimal; 721 | } 722 | 723 | .markdown-body ul ul, 724 | .markdown-body ul ol, 725 | .markdown-body ol ol, 726 | .markdown-body ol ul { 727 | margin-top: 0; 728 | margin-bottom: 0; 729 | } 730 | 731 | .markdown-body li>p { 732 | margin-top: 16px; 733 | } 734 | 735 | .markdown-body li+li { 736 | margin-top: .25em; 737 | } 738 | 739 | .markdown-body dl { 740 | padding: 0; 741 | } 742 | 743 | .markdown-body dl dt { 744 | padding: 0; 745 | margin-top: 16px; 746 | font-size: 1em; 747 | font-style: italic; 748 | font-weight: 600; 749 | } 750 | 751 | .markdown-body dl dd { 752 | padding: 0 16px; 753 | margin-bottom: 16px; 754 | } 755 | 756 | .markdown-body table th { 757 | font-weight: 600; 758 | } 759 | 760 | .markdown-body table th, 761 | .markdown-body table td { 762 | padding: 6px 13px; 763 | border: 1px solid var(--color-border-default); 764 | } 765 | 766 | .markdown-body table tr { 767 | background-color: var(--color-canvas-default); 768 | border-top: 1px solid var(--color-border-muted); 769 | } 770 | 771 | .markdown-body table tr:nth-child(2n) { 772 | background-color: var(--color-canvas-subtle); 773 | } 774 | 775 | .markdown-body table img { 776 | background-color: transparent; 777 | } 778 | 779 | .markdown-body img[align=right] { 780 | padding-left: 20px; 781 | } 782 | 783 | .markdown-body img[align=left] { 784 | padding-right: 20px; 785 | } 786 | 787 | .markdown-body .emoji { 788 | max-width: none; 789 | vertical-align: text-top; 790 | background-color: transparent; 791 | } 792 | 793 | .markdown-body span.frame { 794 | display: block; 795 | overflow: hidden; 796 | } 797 | 798 | .markdown-body span.frame>span { 799 | display: block; 800 | float: left; 801 | width: auto; 802 | padding: 7px; 803 | margin: 13px 0 0; 804 | overflow: hidden; 805 | border: 1px solid var(--color-border-default); 806 | } 807 | 808 | .markdown-body span.frame span img { 809 | display: block; 810 | float: left; 811 | } 812 | 813 | .markdown-body span.frame span span { 814 | display: block; 815 | padding: 5px 0 0; 816 | clear: both; 817 | color: var(--color-fg-default); 818 | } 819 | 820 | .markdown-body span.align-center { 821 | display: block; 822 | overflow: hidden; 823 | clear: both; 824 | } 825 | 826 | .markdown-body span.align-center>span { 827 | display: block; 828 | margin: 13px auto 0; 829 | overflow: hidden; 830 | text-align: center; 831 | } 832 | 833 | .markdown-body span.align-center span img { 834 | margin: 0 auto; 835 | text-align: center; 836 | } 837 | 838 | .markdown-body span.align-right { 839 | display: block; 840 | overflow: hidden; 841 | clear: both; 842 | } 843 | 844 | .markdown-body span.align-right>span { 845 | display: block; 846 | margin: 13px 0 0; 847 | overflow: hidden; 848 | text-align: right; 849 | } 850 | 851 | .markdown-body span.align-right span img { 852 | margin: 0; 853 | text-align: right; 854 | } 855 | 856 | .markdown-body span.float-left { 857 | display: block; 858 | float: left; 859 | margin-right: 13px; 860 | overflow: hidden; 861 | } 862 | 863 | .markdown-body span.float-left span { 864 | margin: 13px 0 0; 865 | } 866 | 867 | .markdown-body span.float-right { 868 | display: block; 869 | float: right; 870 | margin-left: 13px; 871 | overflow: hidden; 872 | } 873 | 874 | .markdown-body span.float-right>span { 875 | display: block; 876 | margin: 13px auto 0; 877 | overflow: hidden; 878 | text-align: right; 879 | } 880 | 881 | .markdown-body code, 882 | .markdown-body tt { 883 | padding: .2em .4em; 884 | margin: 0; 885 | font-size: 85%; 886 | background-color: var(--color-neutral-muted); 887 | border-radius: 6px; 888 | } 889 | 890 | .markdown-body code br, 891 | .markdown-body tt br { 892 | display: none; 893 | } 894 | 895 | .markdown-body del code { 896 | text-decoration: inherit; 897 | } 898 | 899 | .markdown-body pre code { 900 | font-size: 100%; 901 | } 902 | 903 | .markdown-body pre>code { 904 | padding: 0; 905 | margin: 0; 906 | word-break: normal; 907 | white-space: pre; 908 | background: transparent; 909 | border: 0; 910 | } 911 | 912 | .markdown-body .highlight { 913 | margin-bottom: 16px; 914 | } 915 | 916 | .markdown-body .highlight pre { 917 | margin-bottom: 0; 918 | word-break: normal; 919 | } 920 | 921 | .markdown-body .highlight pre, 922 | .markdown-body pre { 923 | padding: 16px; 924 | overflow: auto; 925 | font-size: 85%; 926 | line-height: 1.45; 927 | background-color: var(--color-canvas-subtle); 928 | border-radius: 6px; 929 | } 930 | 931 | .markdown-body pre code, 932 | .markdown-body pre tt { 933 | display: inline; 934 | max-width: auto; 935 | padding: 0; 936 | margin: 0; 937 | overflow: visible; 938 | line-height: inherit; 939 | word-wrap: normal; 940 | background-color: transparent; 941 | border: 0; 942 | } 943 | 944 | .markdown-body .csv-data td, 945 | .markdown-body .csv-data th { 946 | padding: 5px; 947 | overflow: hidden; 948 | font-size: 12px; 949 | line-height: 1; 950 | text-align: left; 951 | white-space: nowrap; 952 | } 953 | 954 | .markdown-body .csv-data .blob-num { 955 | padding: 10px 8px 9px; 956 | text-align: right; 957 | background: var(--color-canvas-default); 958 | border: 0; 959 | } 960 | 961 | .markdown-body .csv-data tr { 962 | border-top: 0; 963 | } 964 | 965 | .markdown-body .csv-data th { 966 | font-weight: 600; 967 | background: var(--color-canvas-subtle); 968 | border-top: 0; 969 | } 970 | 971 | .markdown-body .footnotes { 972 | font-size: 12px; 973 | color: var(--color-fg-muted); 974 | border-top: 1px solid var(--color-border-default); 975 | } 976 | 977 | .markdown-body .footnotes ol { 978 | padding-left: 16px; 979 | } 980 | 981 | .markdown-body .footnotes li { 982 | position: relative; 983 | } 984 | 985 | .markdown-body .footnotes li:target::before { 986 | position: absolute; 987 | top: -8px; 988 | right: -8px; 989 | bottom: -8px; 990 | left: -24px; 991 | pointer-events: none; 992 | content: ""; 993 | border: 2px solid var(--color-accent-emphasis); 994 | border-radius: 6px; 995 | } 996 | 997 | .markdown-body .footnotes li:target { 998 | color: var(--color-fg-default); 999 | } 1000 | 1001 | .markdown-body .footnotes .data-footnote-backref g-emoji { 1002 | font-family: monospace; 1003 | } 1004 | 1005 | .markdown-body .task-list-item { 1006 | list-style-type: none; 1007 | } 1008 | 1009 | .markdown-body .task-list-item label { 1010 | font-weight: 400; 1011 | } 1012 | 1013 | .markdown-body .task-list-item.enabled label { 1014 | cursor: pointer; 1015 | } 1016 | 1017 | .markdown-body .task-list-item+.task-list-item { 1018 | margin-top: 3px; 1019 | } 1020 | 1021 | .markdown-body .task-list-item .handle { 1022 | display: none; 1023 | } 1024 | 1025 | .markdown-body .task-list-item-checkbox { 1026 | margin: 0 .2em .25em -1.6em; 1027 | vertical-align: middle; 1028 | } 1029 | 1030 | .markdown-body .contains-task-list:dir(rtl) .task-list-item-checkbox { 1031 | margin: 0 -1.6em .25em .2em; 1032 | } 1033 | 1034 | .markdown-body ::-webkit-calendar-picker-indicator { 1035 | filter: invert(50%); 1036 | } 1037 | -------------------------------------------------------------------------------- /docs/resources/css/render.css: -------------------------------------------------------------------------------- 1 | div { 2 | color: #303d4e; 3 | } 4 | 5 | .markdown-body-box { 6 | box-sizing: border-box; 7 | min-width: 200px; 8 | max-width: 980px; 9 | margin: 0 auto; 10 | padding-left: 45px; 11 | padding-right: 45px; 12 | padding-bottom: 45px; 13 | } 14 | 15 | .markdown-body { 16 | box-sizing: border-box; 17 | } 18 | 19 | @media (max-width: 767px) { 20 | .markdown-body { 21 | padding: 15px; 22 | } 23 | } 24 | 25 | .mdui-snackbar-text { 26 | color: white; 27 | } 28 | 29 | .mdui-dialog { 30 | border-radius: 15px; 31 | } 32 | 33 | .mdui-appbar { 34 | background-color: white; 35 | } 36 | 37 | .round-left-icon-box { 38 | margin-right: 15px; 39 | border-radius: 50%; 40 | padding: 10px; 41 | width: 25px; 42 | height: 25px; 43 | } 44 | 45 | .round-icon { 46 | width: 25px; 47 | height: 25px; 48 | object-fit: contain; 49 | filter: drop-shadow(100px 0 white); 50 | transform: translate(-100px); 51 | } -------------------------------------------------------------------------------- /docs/resources/js/markdown-contents.js: -------------------------------------------------------------------------------- 1 | const markdownContents = { 2 | syncNotice: 3 | '目前通知图标规则仅限使用于我 (@fankes) 正在开发的通知图标相关模块与项目合作者使用。\n\n' + 4 | '如果你想手动获取在线规则平台的所有数据,你可以点击侧边栏的“贡献通知图标规则”前往页面底部的同步列表地址进行查看。', 5 | authorize: 6 | '在线规则平台的全部数据所有权属于 @fankes 与本仓库的所有贡献者所有,' + 7 | '目前仅限于我正在开发的通知图标相关模块与项目合作者使用,' + 8 | '未经许可不允许私自引用本仓库的任何数据到自己的项目直接使用或删掉副本上的信息进行传播 (个人使用除外),' + 9 | '使用本仓库的资源需要经过我的明确同意且需要根据 AGPL-3.0 协议,在显著的地方声明引用和复制来源。\n' + 10 | '如有合作需求,你可以点击侧边栏的“联系我们”。\n\n' + 11 | '目前经过授权合作的项目如下:\n\n' + 12 | '- [MIUI 原生通知图标](https://github.com/fankes/MIUINativeNotifyIcon)\n' + 13 | '- [ColorOS 通知图标增强](https://github.com/fankes/ColorOSNotifyIcon)\n' + 14 | '- [HMS Push](https://github.com/fei-ke/HMSPush)\n' + 15 | '- [NotifyMe](https://github.com/wzn556/NotifyMe-Tutorials)\n\n' + 16 | '注意:除合作方外本仓库所有者有权在不通知的情况下根据自己的项目需求随时动态调整本仓库的所有资源包括但不限于修改格式、移动目录。', 17 | license: 18 | '- [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html)\n\n' + 19 | '```\n' + 20 | 'Copyright (C) 2017 Fankes Studio(qzmmcn@163.com)\n\n' + 21 | 'This program is free software: you can redistribute it and/or modify\n' + 22 | 'it under the terms of the GNU Affero General Public License as\n' + 23 | 'published by the Free Software Foundation, either version 3 of the\n' + 24 | 'License, or (at your option) any later version.\n\n' + 25 | 'This program is distributed in the hope that it will be useful,\n' + 26 | 'but WITHOUT ANY WARRANTY; without even the implied warranty of\n' + 27 | 'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n' + 28 | 'GNU Affero General Public License for more details.\n\n' + 29 | 'You should have received a copy of the GNU Affero General Public License\n' + 30 | 'along with this program. If not, see .\n' + 31 | '```' 32 | }; -------------------------------------------------------------------------------- /docs/resources/js/markdown-page-contents.js: -------------------------------------------------------------------------------- 1 | const markdownPageContents = { 2 | home: 3 | '# Android 通知图标规范适配计划\n\n' + 4 | '![Blank](https://img.shields.io/badge/license-AGPL3.0-blue)\n' + 5 | '[![Telegram](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/XiaofangInternet)\n\n' + 6 | '这是一个在线规则平台,为国内 Android 不规范的 APP 和厂商适配原生通知图标与规范图标修复。\n\n' + 7 | '## Developers\n\n' + 8 | '- 发起人 [酷安 @星夜不荟](http://www.coolapk.com/u/876977)\n\n' + 9 | '- 合作方 [酷安 @PedroZ](http://www.coolapk.com/u/1157881)\n\n' + 10 | '## 已支持的 OS 模块\n\n' + 11 | '- MIUI 系统 请参阅 [MIUI 原生通知图标](https://github.com/fankes/MIUINativeNotifyIcon)\n\n' + 12 | '- ColorOS、RealmeUI、OxygenOS(≥12) 系统 请参阅 [ColorOS 通知图标增强](https://github.com/fankes/ColorOSNotifyIcon)\n\n' + 13 | '- Flyme 或许可能,敬请期待。有需求可提交 `issues`\n\n' + 14 | '- 类原生、Pixel 的国内用户 [可在这里留言请求适配](https://github.com/fankes/AndroidNotifyIconAdapt/issues/102)\n\n' + 15 | '## 需求适配\n\n' + 16 | '国内 OS 的适配按需求人数决定,小众、无法 Root 的设备不会适配,如有需求可提交至 `issues` 共同讨论。\n\n' + 17 | '## 项目起源\n\n' + 18 | '构建这个项目的初衷就是想规范国内乱七八糟的 APP 生态,让国内用户也能体验到原生 Android 通知图标的规范美。\n\n' + 19 | '这一切的原因归根结底都是 MIUI 的不规范推送图标导致我忍无可忍而起之,其它厂商也不能解决彩色 APP 作为图标的欺骗意义的“解决方案”。\n\n' + 20 | '相信与我有同样想法的人存在,那么这个项目就可以帮助你完善这个愿望,顺便,你也可以帮助这个项目贡献图标资源。\n\n' + 21 | '有人说,用类原生系统不就好了,但是在国内的环境,类原生系统真的已经不合适了,毛坯房终究还是要自己去补全,在这个吃快餐的时代,显得有些狼狈了。\n\n' + 22 | '## 不规范收录\n\n' + 23 | '(不规范)允许 API 19 以上 APP 使用彩色图标但保留原生单色图标\n\n' + 24 | '甚至自己的系统 APP 都在用彩色通知图标\n\n' + 25 | '- EMUI(≤3 ≥5)、HarmonyOS(2.0-3.0 Android 9、10)、MagicUI\n' + 26 | '- ColorOS、RealmeUI\n' + 27 | '- OxygenOS(≤12)\n' + 28 | '- MyOS\n' + 29 | '- RogUI\n\n' + 30 | '(破坏)完全破坏原生单色图标全部强制使用 APP 彩色图标\n\n' + 31 | '方法 `setSmallIcon` 失效\n\n' + 32 | '- HarmonyOS 4.0 (根据酷安板块反馈,通知栏完全模仿 iOS 设计,完全破坏通知图标)\n' + 33 | '- EMUI(4.0 、4.0.1、4.1)\n' + 34 | '- MIUI(≤9 ≥12.5)、JoyUI\n' + 35 | '- ColorOS(≥15.0.1)\n' + 36 | '- ZUI\n' + 37 | '- NubiaUI、RedMagicOS\n' + 38 | '- 360OS\n' + 39 | '- CoolOS\n' + 40 | '- WaterOS\n\n' + 41 | '(破坏)只能强制通过系统预制的 APP 白名单设置通知图标\n\n' + 42 | '方法 `setSmallIcon` 失效\n\n' + 43 | '- Flyme\n\n' + 44 | '(勉强合格)通过系统预制的 APP 设置图标但保留原生单色图标\n\n' + 45 | '- MIUI(10、11、12)\n' + 46 | '- OriginOS、FuntouchOS\n' + 47 | '- SmartisanOS\n\n' + 48 | '## 通知测试\n\n' + 49 | '你可以 [点击这里](https://github.com/fankes/AndroidNotifyIconAdapt/raw/main/tool/NotifyTester.apk) 下载工具测试通知图标是否符合原生规范。', 50 | feedback: 51 | '# 提交适配请求\n\n' + 52 | '欢迎为通知图标优化名单贡献宝贵资源!\n\n' + 53 | '## 如何提交\n\n' + 54 | '目前的提交适配请求方式为在 **GitHub** 创建一个 `issues`。\n\n' + 55 | '你需要前往 **GitHub** 使用指定的模版创建一个 `issues`。\n\n' + 56 | '管理员看到你创建的 `issues` 后会进行处理,最快 1-3 个工作日内完成。\n\n' + 57 | '适配完成后 `issues` 会被关闭并标记为完成,同步云端规则即可获取最新的适配数据。\n\n' + 58 | '如果你没有 **GitHub** 帐号,请先注册,[点击这里](https://github.com/fankes/AndroidNotifyIconAdapt/issues/new?assignees=&labels=To+be+adapted&template=request_notify_icon_adaption.yml) 立即创建一个 `issues`。\n\n' + 59 | '## 适配说明\n\n' + 60 | '以下类型的 APP 不予适配:\n\n' + 61 | '- VPN、翻墙软件\n' + 62 | '- 涉嫌色情、赌博类软件\n' + 63 | '- 申请超限权限、涉嫌泄露国家机密行为的软件\n\n' + 64 | '以下类型的 APP 通知图标暂不适配:\n\n' + 65 | '- 多态彩色图标,状态不唯一,例如 360 极速浏览器\n' + 66 | '- 规范的原生图标,但未被通知图标规则适配的 (将稍后加入白名单)', 67 | contributing: 68 | '# 开始贡献\n\n' + 69 | '欢迎为通知图标优化名单贡献宝贵资源!\n\n' + 70 | '## 分支规定\n\n' + 71 | '不管是直接 Push 代码还是提交 Pull Request,都必须使 `commit` 指向 `main` 分支。\n\n' + 72 | '## 代码格式规范\n\n' + 73 | '- 全部提交代码必须进行格式化,未经格式化的代码将二次审查进行修改,格式混乱的将拒绝合并提交请求\n' + 74 | '- 提交请求请在 `commit` 中标明修改、增加的 APP 名称以及图标用途,否则不予合并代码\n' + 75 | '- 贡献者昵称如有多个请使用**顿号**分隔\n\n' + 76 | '## 贡献方法\n\n' + 77 | '- 在下方的 JSON 文件中添加新的 APP 通知图标适配条目\n' + 78 | '- APP 对应了每个定制系统共同使用的图标,OS 中的图标只会分发到指定的定制系统生效 \n' + 79 | '- [进入 APP 适配文件](https://github.com/fankes/AndroidNotifyIconAdapt/blob/main/APP/NotifyIconsSupportConfig.json)\n' + 80 | '- [进入 OS 适配目录](https://github.com/fankes/AndroidNotifyIconAdapt/blob/main/OS)\n' + 81 | '- 使用灰度位图转 Base64 来得到 Base64 的位图数据字符串\n' + 82 | '- [BitmapToBase64](https://github.com/fankes/BitmapToBase64)\n' + 83 | '- 你也可以使用在线工具来完成,注意删除后方生成的 `data:image/png;base64,`\n' + 84 | '- [Base64 图片在线转换](https://tool.chinaz.com/tools/imgtobase)\n' + 85 | '- 新增条目的模板如下所示\n\n' + 86 | '```json\n' + 87 | '{\n' + 88 | ' "appName": "", // APP 名称\n' + 89 | ' "packageName": "", // APP 包名\n' + 90 | ' "iconBitmap": "", // 位图数据 Base64 字符串\n' + 91 | ' "iconColor": "#ff232323", // 通知栏中显示的图标颜色 - 不设置使用系统默认颜色 (不设置颜色可删除此项)\n' + 92 | ' "contributorName": "", // 贡献者昵称\n' + 93 | ' "isEnabled": true, // 是否默认启用替换彩色图标 - 关闭后将全部停止替换\n' + 94 | ' "isEnabledAll": false // 是否默认启用替换全部图标\n' + 95 | '}\n' + 96 | '```\n\n' + 97 | '> 特别注意\n\n' + 98 | '- 如果开启了默认启用替换全部图标,APP 的所有通知图标都将被强制替换为当前设置的图标,这是很危险的行为,我们默认只应该替换彩色的通知图标,如果一定有此需求(例如不启用此选项通知图标是黑白块情况)请**务必在 PR 中注明**,否则将不与合并代码或会被管理员重新设置为 **false**\n\n' + 99 | '> 其它要求\n\n' + 100 | '- `iconColor` 中的颜色代码一律使用小写字母且格式必须为 #ff······ (· 为数值) **不要对颜色设置透明度**\n' + 101 | '- 图标大小建议保持在 50x50,最高不得超过 72x72\n' + 102 | '- 提交前建议优化图标文件体积,Windows 平台可以使用 [pinga](https://css-ig.net/pinga)\n' + 103 | '- 图标必须可被调试工具识别为灰度图标并检查通过,否则不予合并代码,详情请见下方\n' + 104 | '- 提交时请将后方的注释删除,否则不予合并代码\n\n' + 105 | '> 审查要求\n\n' + 106 | '- PR 时请注明 PR 标题,标题为 Update XXX 的会被当做 `spam` 处理直接 close\n' + 107 | '- PR 内容不能只有文字描述,请一并附上 **通知图标调试工具** 的检查结果截图,详见下方的测试图标说明\n\n' + 108 | '## 测试图标\n\n' + 109 | '- [点击这里下载](https://github.com/fankes/AndroidNotifyIconAdapt/raw/main/tool/NotifyIconDebugging_1.1.apk) 通知图标调试工具 v1.1 并安装在 Android 设备上进行调试,建议使用 AVD 模拟器,Android 版本 11 及以上\n' + 110 | '- 请确保通知图标能够正常展示,不会出现黑白块的情况,否则不予合并代码,示例如下

\n' + 111 | ' image
\n' + 112 | '- 友情赞助:可尝试在 [完美图标补全计划](https://github.com/pzcn/Perfect-Icons-Completion-Project/tree/main/icons) 内找到已制作好的 APP 分层图标,在此基础上进行修改适配\n\n' + 113 | '## 同步列表地址\n\n' + 114 | '- 第三方 APP [点击查看 Raw](https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main/APP/NotifyIconsSupportConfig.json)\n' + 115 | '- 系统 APP · MIUI [点击查看 Raw](https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main/OS/MIUI/NotifyIconsSupportConfig.json)\n' + 116 | '- 系统 APP · ColorOS [点击查看 Raw](https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main/OS/ColorOS/NotifyIconsSupportConfig.json)' 117 | }; 118 | -------------------------------------------------------------------------------- /docs/resources/js/render.js: -------------------------------------------------------------------------------- 1 | const constValues = { 2 | tooSmallScreenMinWidth: 600, 3 | defaultNotifyIconColor: '#555555', 4 | telegramContactLink: 'https://t.me/XiaofangInternet', 5 | repoSourceDirectUrl: 'https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/main/', 6 | /** Thanks for https://www.7ed.net/#/raw-cdn */ 7 | repoSourceProxyUrl: 'https://raw.githubusercontentS.com/fankes/AndroidNotifyIconAdapt/main/' 8 | }; 9 | 10 | function onPageLoad() { 11 | switch (renderController.getUrlParams()) { 12 | case '': 13 | case 'main': 14 | pageFunctions.entryArea0.switchToMainPage(); 15 | break; 16 | case 'notify-rules-app': 17 | pageFunctions.entryArea1.requestDataForApp(); 18 | break; 19 | case 'notify-rules-system': 20 | pageFunctions.entryArea1.requestDataForSystem(); 21 | break; 22 | case 'notify-rules-miui': 23 | pageFunctions.entryArea1.requestDataForMiui(); 24 | break; 25 | case 'notify-rules-coloros': 26 | pageFunctions.entryArea1.requestDataForColorOs(); 27 | break; 28 | case 'feedback': 29 | pageFunctions.entryArea2.feedbackNewNotifyRules(); 30 | break; 31 | case 'contribute': 32 | pageFunctions.entryArea2.contributeNotifyRules(); 33 | break; 34 | default: 35 | pageFunctions.specialCase.switchToNotFoundPage(); 36 | break; 37 | } 38 | pageFunctions.entryArea3.showAuthorize(true); 39 | } 40 | 41 | const renderController = { 42 | getUrlParams: () => window.location.search.replace('?', ''), 43 | generateMarkdownContent: (content) => marked.parse(content), 44 | setMarkdownContent: (id, content) => { 45 | $('#' + id).html(renderController.generateMarkdownContent(content)); 46 | $('.markdown-body').find('a').attr({ rel: 'noopener', target: '_blank' }); 47 | }, 48 | setMarkdownStyleDialog: () => { 49 | $('.mdui-dialog-content').addClass('markdown-body'); 50 | }, 51 | copyToClipboard: (content) => { 52 | if (typeof navigator == 'undefined' || typeof navigator.clipboard == 'undefined' || navigator.permissions == 'undefined') { 53 | let placeholder = document.createElement('input'); 54 | placeholder.setAttribute('value', content); 55 | document.body.appendChild(placeholder); 56 | placeholder.select(); 57 | document.execCommand('copy'); 58 | document.body.removeChild(placeholder); 59 | } else navigator.clipboard.writeText(content); 60 | mdui.snackbar({ message: '已复制' }); 61 | }, 62 | setCookie: (cname, cvalue, exdays) => { 63 | let d = new Date(); 64 | d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); 65 | let expires = 'expires=' + d.toGMTString(); 66 | document.cookie = cname + '=' + cvalue + '; ' + expires; 67 | }, 68 | getCookie: (cname) => { 69 | let name = cname + '='; 70 | let ca = document.cookie.split(';'); 71 | for (let i = 0; i < ca.length; i++) { 72 | let c = ca[i].trim(); 73 | if (c.indexOf(name) == 0) return c.substring(name.length, c.length); 74 | } 75 | return ''; 76 | } 77 | }; 78 | 79 | const pageController = { 80 | pageTitles: ['页面不存在', '首页', '通知图标优化名单', '请求适配新 APP', '贡献通知图标规则'], 81 | isPageBlocked: false, 82 | switchToPage: (title, pageId, itemId = undefined) => { 83 | $('#item-main-main').removeClass('mdui-list-item-active'); 84 | $('#item-nfrules-app').removeClass('mdui-list-item-active'); 85 | $('#item-nfrules-miui').removeClass('mdui-list-item-active'); 86 | $('#item-nfrules-coloros').removeClass('mdui-list-item-active'); 87 | $('#item-nfdebug-debug').removeClass('mdui-list-item-active'); 88 | $('#item-feedback-feedback').removeClass('mdui-list-item-active'); 89 | $('#item-contribute-contribute').removeClass('mdui-list-item-active'); 90 | $('#page-not-found').hide(); 91 | $('#page-main').hide(); 92 | $('#page-notify-rules').hide(); 93 | $('#page-feedback').hide(); 94 | $('#page-contribute').hide(); 95 | $('#' + pageId).show(); 96 | if (itemId !== undefined) $('#' + itemId).addClass('mdui-list-item-active'); 97 | pageController.changePageTitle(title); 98 | pageController.scrollToTop(); 99 | }, 100 | scrollToTop: () => { 101 | $('body, html, #body-container').scrollTop(0); 102 | }, 103 | changePageTitle: (title) => { 104 | $('#page-title-text').html(title); 105 | }, 106 | showOrHideSyncNoticeIcon: (isShow) => { 107 | if (isShow) $('#sync-notice-icon').show(); 108 | else $('#sync-notice-icon').hide(); 109 | }, 110 | showOrHideProjectAddressIcon: (isShow) => { 111 | if (isShow) $('#project-address-icon').show(); 112 | else $('#project-address-icon').hide(); 113 | } 114 | }; 115 | 116 | const pageFunctions = { 117 | specialCase: { 118 | switchToNotFoundPage: () => { 119 | if (pageController.isPageBlocked) return; 120 | pageController.switchToPage(pageController.pageTitles[0], 'page-not-found'); 121 | pageController.showOrHideSyncNoticeIcon(false); 122 | pageController.showOrHideProjectAddressIcon(true); 123 | } 124 | }, 125 | headerArea0: { 126 | showSyncNotice: () => { 127 | mdui.dialog({ 128 | title: '获取通知图标规则', 129 | content: renderController.generateMarkdownContent(markdownContents.syncNotice), 130 | buttons: [{ text: '我知道了' }] 131 | }); 132 | renderController.setMarkdownStyleDialog(); 133 | } 134 | }, 135 | entryArea0: { 136 | switchToMainPage: () => { 137 | if (pageController.isPageBlocked) return; 138 | pageController.switchToPage(pageController.pageTitles[1], 'page-main', 'item-main-main'); 139 | pageController.showOrHideSyncNoticeIcon(false); 140 | pageController.showOrHideProjectAddressIcon(true); 141 | renderController.setMarkdownContent('page-main-markdown-content', markdownPageContents.home); 142 | } 143 | }, 144 | entryArea1: { 145 | requestDataForApp: () => { 146 | if (pageController.isPageBlocked) return; 147 | pageController.switchToPage(pageController.pageTitles[2], 'page-notify-rules', 'item-nfrules-app'); 148 | pageController.showOrHideSyncNoticeIcon(true); 149 | pageController.showOrHideProjectAddressIcon(window.innerWidth > constValues.tooSmallScreenMinWidth); 150 | nfDataRequestController.requestData('APP'); 151 | }, 152 | requestDataForSystem: () => { 153 | if (pageController.isPageBlocked) return; 154 | mdui.snackbar({ message: '暂未开放,敬请期待' }); 155 | }, 156 | requestDataForMiui: () => { 157 | if (pageController.isPageBlocked) return; 158 | pageController.switchToPage(pageController.pageTitles[2], 'page-notify-rules', 'item-nfrules-miui'); 159 | pageController.showOrHideSyncNoticeIcon(true); 160 | pageController.showOrHideProjectAddressIcon(window.innerWidth > constValues.tooSmallScreenMinWidth); 161 | nfDataRequestController.requestData('OS/MIUI'); 162 | }, 163 | requestDataForColorOs: () => { 164 | if (pageController.isPageBlocked) return; 165 | pageController.switchToPage(pageController.pageTitles[2], 'page-notify-rules', 'item-nfrules-coloros'); 166 | pageController.showOrHideSyncNoticeIcon(true); 167 | pageController.showOrHideProjectAddressIcon(window.innerWidth > constValues.tooSmallScreenMinWidth); 168 | nfDataRequestController.requestData('OS/ColorOS'); 169 | } 170 | }, 171 | entryArea2: { 172 | feedbackNewNotifyRules: () => { 173 | if (pageController.isPageBlocked) return; 174 | pageController.switchToPage(pageController.pageTitles[3], 'page-feedback', 'item-feedback-feedback'); 175 | pageController.showOrHideSyncNoticeIcon(false); 176 | pageController.showOrHideProjectAddressIcon(true); 177 | renderController.setMarkdownContent('page-feedback-markdown-content', markdownPageContents.feedback); 178 | }, 179 | contributeNotifyRules: () => { 180 | if (pageController.isPageBlocked) return; 181 | pageController.switchToPage(pageController.pageTitles[4], 'page-contribute', 'item-contribute-contribute'); 182 | pageController.showOrHideSyncNoticeIcon(false); 183 | pageController.showOrHideProjectAddressIcon(true); 184 | renderController.setMarkdownContent('page-contribute-markdown-content', markdownPageContents.contributing); 185 | }, 186 | debugNotifyRules: () => { 187 | if (pageController.isPageBlocked) return; 188 | mdui.snackbar({ message: '暂未开放,敬请期待' }); 189 | } 190 | }, 191 | entryArea3: { 192 | contactUs: () => { 193 | window.open(constValues.telegramContactLink, '_blank'); 194 | }, 195 | showAuthorize: (isShowNolonger) => { 196 | if (isShowNolonger && renderController.getCookie('auth-show-nolonger')) return; 197 | mdui.dialog({ 198 | title: '授权说明', 199 | content: renderController.generateMarkdownContent(markdownContents.authorize), 200 | buttons: isShowNolonger ? [{ 201 | text: '今日内不再提示', onClick: () => { 202 | renderController.setCookie('auth-show-nolonger', true, 1); 203 | } 204 | }, { text: '我知道了' }] : [{ text: '我知道了' }] 205 | }); 206 | renderController.setMarkdownStyleDialog(); 207 | }, 208 | showLicense: () => { 209 | mdui.dialog({ 210 | title: '开放源代码许可', 211 | content: renderController.generateMarkdownContent(markdownContents.license), 212 | buttons: [{ text: '我知道了' }] 213 | }); 214 | renderController.setMarkdownStyleDialog(); 215 | } 216 | } 217 | }; 218 | 219 | const repoSourceUrlController = { 220 | isUseProxy: false, 221 | getCurrentUrl: () => repoSourceUrlController.isUseProxy ? constValues.repoSourceProxyUrl : constValues.repoSourceDirectUrl 222 | }; 223 | 224 | const nfDataRequestController = { 225 | requestData: (name) => { 226 | pageController.isPageBlocked = true; 227 | $('#loading-icon').show(); 228 | $('#load-fail-text-box').hide(); 229 | $('#data-list').html(''); 230 | $.ajax({ 231 | url: repoSourceUrlController.getCurrentUrl() + name + '/NotifyIconsSupportConfig.json', 232 | method: 'GET', 233 | dataType: 'json', 234 | success: (result) => { 235 | $('#loading-icon').hide(); 236 | pageController.changePageTitle(pageController.pageTitles[2] + ' (' + result.length + ')'); 237 | result.forEach((element, index) => { 238 | let jsonString = encodeURI(JSON.stringify(element, null, 2)); 239 | $('#data-list').append('
  • ' + 241 | '
    ' + 243 | '' + 244 | '
    ' + 245 | '
    ' + 246 | '
    ' + element.appName + '
    ' + 247 | '
    ' + 248 | '' + element.packageName + '' + 249 | '
    ' + 250 | '贡献者:' + element.contributorName + '' + 251 | '
    ' + 252 | '
    ' + 253 | '' + (element.isEnabled ? (element.isEnabledAll ? 'done_all' : 'done') : 'close') + '' + 254 | (window.innerWidth > constValues.tooSmallScreenMinWidth ? 255 | ('' + (element.isEnabled ? (element.isEnabledAll ? '全部替换' : '启用替换') : '禁用替换') + '') : '') + 256 | '
  • '); 257 | if (index < result.length - 1) $('#data-list').append('
  • '); 258 | }); 259 | pageController.isPageBlocked = false; 260 | }, 261 | error: () => { 262 | if (!repoSourceUrlController.isUseProxy) { 263 | repoSourceUrlController.isUseProxy = true; 264 | nfDataRequestController.requestData(name); 265 | return; 266 | } 267 | $('#loading-icon').hide(); 268 | $('#load-fail-text-box').show(); 269 | } 270 | }); 271 | }, 272 | showJsonData: (title, jsonUrlS) => { 273 | let jsonString = decodeURI(jsonUrlS); 274 | mdui.dialog({ 275 | title: title, 276 | content: renderController.generateMarkdownContent('```json\n' + jsonString + '\n```'), 277 | buttons: [{ 278 | text: '复制规则', onClick: () => { renderController.copyToClipboard(jsonString); } 279 | }, { text: '关闭' }] 280 | }); 281 | renderController.setMarkdownStyleDialog(); 282 | } 283 | }; -------------------------------------------------------------------------------- /tool/NotifyIconDebugging_1.1.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/432962a813548019dc3aca096402feb6d8ca9797/tool/NotifyIconDebugging_1.1.apk -------------------------------------------------------------------------------- /tool/NotifyTester.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fankes/AndroidNotifyIconAdapt/432962a813548019dc3aca096402feb6d8ca9797/tool/NotifyTester.apk --------------------------------------------------------------------------------