From b59dae4df1729ee0d1c253d2bec195aa4ef2e890 Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Thu, 14 Sep 2023 05:00:37 +0800 Subject: [PATCH] Initial commit --- .editorconfig | 17 + .gitignore | 15 + .idea/.gitignore | 5 + .idea/compiler.xml | 6 + .idea/deploymentTargetDropDown.xml | 13 + .idea/icon.png | Bin 0 -> 11994 bytes .idea/inspectionProfiles/Project_Default.xml | 11 + .idea/kotlinc.xml | 6 + .idea/ktlint.xml | 11 + .idea/migrations.xml | 10 + .idea/vcs.xml | 6 + LICENSE | 660 ++++++++++++++++++ README.md | 39 ++ build.gradle.kts | 5 + demo-app/.gitignore | 1 + demo-app/build.gradle.kts | 49 ++ demo-app/proguard-rules.pro | 21 + .../ExampleInstrumentedTest.kt | 25 + demo-app/src/main/AndroidManifest.xml | 26 + demo-app/src/main/ic_launcher-playstore.png | Bin 0 -> 11994 bytes .../projectpromote_demo/MainActivity.kt | 35 + .../res/drawable/ic_launcher_background.xml | 170 +++++ .../res/drawable/ic_launcher_foreground.xml | 21 + .../src/main/res/layout/activity_main.xml | 17 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 6 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 6 + .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1000 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2864 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 752 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1782 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1518 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 3998 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2266 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 6152 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3052 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 8712 bytes demo-app/src/main/res/values-night/themes.xml | 7 + .../src/main/res/values-zh-rCN/strings.xml | 4 + demo-app/src/main/res/values/colors.xml | 5 + .../res/values/ic_launcher_background.xml | 4 + demo-app/src/main/res/values/strings.xml | 3 + demo-app/src/main/res/values/themes.xml | 9 + .../projectpromote_demo/ExampleUnitTest.kt | 18 + gradle.properties | 24 + .../sweet-dependency-config.yaml | 60 ++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 185 +++++ gradlew.bat | 89 +++ img-src/icon.png | Bin 0 -> 11994 bytes projectpromote/.gitignore | 1 + projectpromote/build.gradle.kts | 87 +++ projectpromote/consumer-rules.pro | 0 projectpromote/proguard-rules.pro | 21 + .../projectpromote/ExampleInstrumentedTest.kt | 25 + projectpromote/src/main/AndroidManifest.xml | 5 + .../fankes/projectpromote/ProjectPromote.kt | 185 +++++ .../src/main/res/layout/adapter_node.xml | 18 + .../res/layout/adapter_node_code_block.xml | 25 + .../main/res/layout/view_table_entry_cell.xml | 9 + .../src/main/res/values-zh/strings.xml | 8 + .../src/main/res/values/strings.xml | 8 + .../fankes/projectpromote/ExampleUnitTest.kt | 18 + settings.gradle.kts | 20 + 64 files changed, 2024 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/deploymentTargetDropDown.xml create mode 100644 .idea/icon.png create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/kotlinc.xml create mode 100644 .idea/ktlint.xml create mode 100644 .idea/migrations.xml create mode 100644 .idea/vcs.xml create mode 100644 LICENSE create mode 100644 README.md create mode 100644 build.gradle.kts create mode 100644 demo-app/.gitignore create mode 100644 demo-app/build.gradle.kts create mode 100644 demo-app/proguard-rules.pro create mode 100644 demo-app/src/androidTest/java/com/fankes/projectpromote_demo/ExampleInstrumentedTest.kt create mode 100644 demo-app/src/main/AndroidManifest.xml create mode 100644 demo-app/src/main/ic_launcher-playstore.png create mode 100644 demo-app/src/main/java/com/fankes/projectpromote_demo/MainActivity.kt create mode 100644 demo-app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 demo-app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 demo-app/src/main/res/layout/activity_main.xml create mode 100644 demo-app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 demo-app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 demo-app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 demo-app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 demo-app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 demo-app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 demo-app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 demo-app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 demo-app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 demo-app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 demo-app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 demo-app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 demo-app/src/main/res/values-night/themes.xml create mode 100644 demo-app/src/main/res/values-zh-rCN/strings.xml create mode 100644 demo-app/src/main/res/values/colors.xml create mode 100644 demo-app/src/main/res/values/ic_launcher_background.xml create mode 100644 demo-app/src/main/res/values/strings.xml create mode 100644 demo-app/src/main/res/values/themes.xml create mode 100644 demo-app/src/test/java/com/fankes/projectpromote_demo/ExampleUnitTest.kt create mode 100644 gradle.properties create mode 100644 gradle/sweet-dependency/sweet-dependency-config.yaml create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100755 gradlew create mode 100644 gradlew.bat create mode 100644 img-src/icon.png create mode 100644 projectpromote/.gitignore create mode 100644 projectpromote/build.gradle.kts create mode 100644 projectpromote/consumer-rules.pro create mode 100644 projectpromote/proguard-rules.pro create mode 100644 projectpromote/src/androidTest/java/com/fankes/projectpromote/ExampleInstrumentedTest.kt create mode 100644 projectpromote/src/main/AndroidManifest.xml create mode 100644 projectpromote/src/main/java/com/fankes/projectpromote/ProjectPromote.kt create mode 100644 projectpromote/src/main/res/layout/adapter_node.xml create mode 100644 projectpromote/src/main/res/layout/adapter_node_code_block.xml create mode 100644 projectpromote/src/main/res/layout/view_table_entry_cell.xml create mode 100644 projectpromote/src/main/res/values-zh/strings.xml create mode 100644 projectpromote/src/main/res/values/strings.xml create mode 100644 projectpromote/src/test/java/com/fankes/projectpromote/ExampleUnitTest.kt create mode 100644 settings.gradle.kts diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..7101007 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,17 @@ +# noinspection EditorConfigKeyCorrectness +[{*.kt,*.kts}] +ktlint_standard_annotation = disabled +ktlint_standard_filename = disabled +ktlint_standard_wrapping = disabled +ktlint_standard_import-ordering = enabled +ktlint_standard_max-line-length = disabled +ktlint_standard_multiline-if-else = disabled +ktlint_standard_argument-list-wrapping = disabled +ktlint_standard_parameter-list-wrapping = disabled +ktlint_standard_trailing-comma-on-declaration-site = disabled +ktlint_function_signature_body_expression_wrapping = multiline +ij_continuation_indent_size = 2 +indent_size = 4 +indent_style = space +insert_final_newline = false +max_line_length = 150 \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..3ad4a12 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,5 @@ +# Default ignored files +/shelf/ +/gradle.xml +/misc.xml +/workspace.xml \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml new file mode 100644 index 0000000..020a8c2 --- /dev/null +++ b/.idea/deploymentTargetDropDown.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/icon.png b/.idea/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c4ec678c201e1a8b4b2f0150e78f97018fa46933 GIT binary patch literal 11994 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

T~C`lqak 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 literal 0 HcmV?d00001 diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..807a7e6 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 0000000..f8467b4 --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/ktlint.xml b/.idea/ktlint.xml new file mode 100644 index 0000000..3ef5c7e --- /dev/null +++ b/.idea/ktlint.xml @@ -0,0 +1,11 @@ + + + + false + + + + + + \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml new file mode 100644 index 0000000..f8051a6 --- /dev/null +++ b/.idea/migrations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3df9cf4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,660 @@ +# GNU AFFERO GENERAL PUBLIC LICENSE + +Version 3, 19 November 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + +### Preamble + +The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains +free software for all its users. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + +A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + +The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + +An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing +under this license. + +The precise terms and conditions for copying, distribution and +modification follow. + +### TERMS AND CONDITIONS + +#### 0. Definitions. + +"This License" refers to version 3 of the GNU Affero General Public +License. + +"Copyright" also means copyright-like laws that apply to other kinds +of works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of +an exact copy. The resulting work is called a "modified version" of +the earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based +on the Program. + +To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user +through a computer network, with no transfer of a copy, is not +conveying. + +An interactive user interface displays "Appropriate Legal Notices" to +the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +#### 1. Source Code. + +The "source code" for a work means the preferred form of the work for +making modifications to it. "Object code" means any non-source form of +a work. + +A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can +regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same +work. + +#### 2. Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, +without conditions so long as your license otherwise remains in force. +You may convey covered works to others for the sole purpose of having +them make modifications exclusively for you, or provide you with +facilities for running those works, provided that you comply with the +terms of this License in conveying all material for which you do not +control copyright. Those thus making or running the covered works for +you must do so exclusively on your behalf, under your direction and +control, on terms that prohibit them from making any copies of your +copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the +conditions stated below. Sublicensing is not allowed; section 10 makes +it unnecessary. + +#### 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such +circumvention is effected by exercising rights under this License with +respect to the covered work, and you disclaim any intention to limit +operation or modification of the work as a means of enforcing, against +the work's users, your or third parties' legal rights to forbid +circumvention of technological measures. + +#### 4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +#### 5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these +conditions: + +- a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. +- b) The work must carry prominent notices stating that it is + released under this License and any conditions added under + section 7. This requirement modifies the requirement in section 4 + to "keep intact all notices". +- c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. +- d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +#### 6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of +sections 4 and 5, provided that you also convey the machine-readable +Corresponding Source under the terms of this License, in one of these +ways: + +- a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. +- b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the Corresponding + Source from a network server at no charge. +- c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. +- d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. +- e) Convey the object code using peer-to-peer transmission, + provided you inform other peers where the object code and + Corresponding Source of the work are being offered to the general + public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, +family, or household purposes, or (2) anything designed or sold for +incorporation into a dwelling. In determining whether a product is a +consumer product, doubtful cases shall be resolved in favor of +coverage. For a particular product received by a particular user, +"normally used" refers to a typical or common use of that class of +product, regardless of the status of the particular user or of the way +in which the particular user actually uses, or expects or is expected +to use, the product. A product is a consumer product regardless of +whether the product has substantial commercial, industrial or +non-consumer uses, unless such uses represent the only significant +mode of use of the product. + +"Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to +install and execute modified versions of a covered work in that User +Product from a modified version of its Corresponding Source. The +information must suffice to ensure that the continued functioning of +the modified object code is in no case prevented or interfered with +solely because modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or +updates for a work that has been modified or installed by the +recipient, or for the User Product in which it has been modified or +installed. Access to a network may be denied when the modification +itself materially and adversely affects the operation of the network +or violates the rules and protocols for communication across the +network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +#### 7. Additional Terms. + +"Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders +of that material) supplement the terms of this License with terms: + +- a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or +- b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or +- c) Prohibiting misrepresentation of the origin of that material, + or requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or +- d) Limiting the use for publicity purposes of names of licensors + or authors of the material; or +- e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or +- f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions + of it) with contractual assumptions of liability to the recipient, + for any liability that these contractual assumptions directly + impose on those licensors and authors. + +All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; the +above requirements apply either way. + +#### 8. Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your license +from a particular copyright holder is reinstated (a) provisionally, +unless and until the copyright holder explicitly and finally +terminates your license, and (b) permanently, if the copyright holder +fails to notify you of the violation by some reasonable means prior to +60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +#### 9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run +a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +#### 10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +#### 11. Patents. + +A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims owned +or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is "discriminatory" if it does not include within the +scope of its coverage, prohibits the exercise of, or is conditioned on +the non-exercise of one or more of the rights that are specifically +granted under this License. You may not convey a covered work if you +are a party to an arrangement with a third party that is in the +business of distributing software, under which you make payment to the +third party based on the extent of your activity of conveying the +work, and under which the third party grants, to any of the parties +who would receive the covered work from you, a discriminatory patent +license (a) in connection with copies of the covered work conveyed by +you (or copies made from those copies), or (b) primarily for and in +connection with specific products or compilations that contain the +covered work, unless you entered into that arrangement, or that patent +license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +#### 12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under +this License and any other pertinent obligations, then as a +consequence you may not convey it at all. For example, if you agree to +terms that obligate you to collect a royalty for further conveying +from those to whom you convey the Program, the only way you could +satisfy both those terms and this License would be to refrain entirely +from conveying the Program. + +#### 13. Remote Network Interaction; Use with the GNU General Public License. + +Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your +version supports such interaction) an opportunity to receive the +Corresponding Source of your version by providing access to the +Corresponding Source from a network server at no charge, through some +standard or customary means of facilitating copying of software. This +Corresponding Source shall include the Corresponding Source for any +work covered by version 3 of the GNU General Public License that is +incorporated pursuant to the following paragraph. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + +#### 14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions +of the GNU Affero General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever +published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions +of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +#### 15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT +WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE +DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. + +#### 16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR +CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT +NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR +LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM +TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +#### 17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS + +### How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + +To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively state +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper +mail. + +If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for +the specific requirements. + +You should also get your employer (if you work as a programmer) or +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. For more information on this, and how to apply and follow +the GNU AGPL, see . diff --git a/README.md b/README.md new file mode 100644 index 0000000..08c340a --- /dev/null +++ b/README.md @@ -0,0 +1,39 @@ +# Project Promote + +[![GitHub license](https://img.shields.io/github/license/fankes/ProjectPromote?color=blue)](https://github.com/fankes/ProjectPromote/blob/master/LICENSE) +[![GitHub release](https://img.shields.io/github/v/release/fankes/ProjectPromote?display_name=release&logo=github&color=green)](https://github.com/fankes/ProjectPromote/releases) + +LOGO + +This is just an integrated dependency on my projects promotion for my own use. + +The promotion content can be found [here](https://github.com/fankes/fankes/blob/main/project-promote), open and transparent. + +Project dependencies are published to my [maven-repository](https://github.com/fankes/maven-repository). + +这仅仅是关于我的项目推广的一个集成化依赖,方便我自己使用,推广的内容在 [这里](https://github.com/fankes/fankes/blob/main/project-promote) 可以找到,公开透明。 + +项目依赖已发布到我的 [maven-repository](https://github.com/fankes/maven-repository)。 + +## License + +- [AGPL-3.0](https://www.gnu.org/licenses/agpl-3.0.html) + +``` +Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . +``` + +Copyright © 2017-2023 Fankes Studio(qzmmcn@163.com) \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..008ba31 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,5 @@ +plugins { + autowire(libs.plugins.android.application) apply false + autowire(libs.plugins.android.library) apply false + autowire(libs.plugins.kotlin.android) apply false +} \ No newline at end of file diff --git a/demo-app/.gitignore b/demo-app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/demo-app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/demo-app/build.gradle.kts b/demo-app/build.gradle.kts new file mode 100644 index 0000000..31b8f77 --- /dev/null +++ b/demo-app/build.gradle.kts @@ -0,0 +1,49 @@ +plugins { + autowire(libs.plugins.android.application) + autowire(libs.plugins.kotlin.android) +} + +android { + namespace = property.project.app.packageName + compileSdk = property.project.android.compileSdk + + defaultConfig { + applicationId = property.project.app.packageName + minSdk = property.project.android.minSdk + targetSdk = property.project.android.targetSdk + versionName = property.project.app.versionName + versionCode = property.project.app.versionCode + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + buildTypes { + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = "17" + freeCompilerArgs = listOf( + "-Xno-param-assertions", + "-Xno-call-assertions", + "-Xno-receiver-assertions" + ) + } + buildFeatures { buildConfig = true } + lint { checkReleaseBuilds = false } +} + +dependencies { + implementation(project(":projectpromote")) + implementation(androidx.core.core.ktx) + implementation(androidx.appcompat.appcompat) + implementation(com.google.android.material.material) + implementation(androidx.constraintlayout.constraintlayout) + testImplementation(junit.junit) + androidTestImplementation(androidx.test.ext.junit) + androidTestImplementation(androidx.test.espresso.espresso.core) +} \ No newline at end of file diff --git a/demo-app/proguard-rules.pro b/demo-app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/demo-app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/demo-app/src/androidTest/java/com/fankes/projectpromote_demo/ExampleInstrumentedTest.kt b/demo-app/src/androidTest/java/com/fankes/projectpromote_demo/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..f1c0cae --- /dev/null +++ b/demo-app/src/androidTest/java/com/fankes/projectpromote_demo/ExampleInstrumentedTest.kt @@ -0,0 +1,25 @@ +package com.fankes.projectpromote_demo + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.fankes.projectpromote", appContext.packageName) + } +} \ No newline at end of file diff --git a/demo-app/src/main/AndroidManifest.xml b/demo-app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..9598088 --- /dev/null +++ b/demo-app/src/main/AndroidManifest.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/demo-app/src/main/ic_launcher-playstore.png b/demo-app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000000000000000000000000000000000000..c4ec678c201e1a8b4b2f0150e78f97018fa46933 GIT binary patch literal 11994 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

T~C`lqak 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 literal 0 HcmV?d00001 diff --git a/demo-app/src/main/java/com/fankes/projectpromote_demo/MainActivity.kt b/demo-app/src/main/java/com/fankes/projectpromote_demo/MainActivity.kt new file mode 100644 index 0000000..e6aeea3 --- /dev/null +++ b/demo-app/src/main/java/com/fankes/projectpromote_demo/MainActivity.kt @@ -0,0 +1,35 @@ +/* + * ProjectPromote - An integrated dependency on my projects promotion for my own use. + * Copyright (C) 2017-2023 Fankes Studio(qzmmcn@163.com) + * https://github.com/fankes/TSBattery + * + * This software is non-free but opensource software: you can redistribute it + * and/or modify it under the terms of the GNU Affero General Public License + * as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * and eula along with this software. If not, see + * + * + * This file is created by fankes on 2023/9/13. + */ +package com.fankes.projectpromote_demo + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import com.fankes.projectpromote.ProjectPromote + +class MainActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + ProjectPromote.show(activity = this, BuildConfig.VERSION_NAME) + } +} \ No newline at end of file diff --git a/demo-app/src/main/res/drawable/ic_launcher_background.xml b/demo-app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/demo-app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/demo-app/src/main/res/drawable/ic_launcher_foreground.xml b/demo-app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..a697130 --- /dev/null +++ b/demo-app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/demo-app/src/main/res/layout/activity_main.xml b/demo-app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..0c068ae --- /dev/null +++ b/demo-app/src/main/res/layout/activity_main.xml @@ -0,0 +1,17 @@ + + + + + \ No newline at end of file diff --git a/demo-app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/demo-app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..0648fb4 --- /dev/null +++ b/demo-app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/demo-app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/demo-app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..0648fb4 --- /dev/null +++ b/demo-app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/demo-app/src/main/res/mipmap-hdpi/ic_launcher.webp b/demo-app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..53b0568f396415436f20dfcffbb45cea0b9eac3b GIT binary patch literal 1000 zcmVKNk&HC0{{S5MM6+kP&iD~0{{RoN5Byfcjh*>ZB^O0WaRYU6(tb4yn8ls z>A^v4+p4m@f2;)kBT#`3G;o)D+(we@D)UtU6dw5pg^8;IkT(N4wry3>x*vCWiefHBelL3}L8cZ61vVR#6iISF)Ay8g4>+F05o68eOx5M=`Ufzh;{Opr5ftHvwCM?7H$}0G`OR*Xs zr=)B^Q>HN9{#=irRfh9ow>=fx`87T4?t|0mm>>7I$@5p~@mwz8YrOxFj{%zXodUe? zhx-qtUE5|zPOZK3tZmyH+gvNQZ9D0_>)3WCcB*3gPfc(2rfR}Z5&fS4_V?X(T}xXx z*qNqwOLoT2p1W}IywVphoIA^y-GZH6z0}@L>bGCH#_Uoy#xA$FXxV<)mDyyjvoq~2 zq-ERwH|)BU%V}L&J8!wjxgH@+S~_mJ%DErcrM2U}yM<%=+_7>}pL_qjW*JUmZTTW6 zF+O;RQ`k8x4G9yr>etXC1VC^}g`wV(rE;qWMgs`zvyjxAFjS6=&1J}4XOMcvpt4BZ!Sm$6~5extW6`D24WOpF|6w8b;>95e1ttQKp9U!qN8vr6FE7ax8 zIFor@EK3J~tO`_&TeXMOn~?yd&mkgXS}Kr`p9;iQ8>HUUBp`JznNG`qV?ym-Qf=49$*Dlf z9O`nU$uR21pVic}Gy#a8PhF2S8LiyZ2mpv%K$43S0YptxZZH4@jU(x%ETmSFaswQK zE97YRwq2xNT^NA$RTjGaC+!)Tf}%!p0z@n3tS9H7@P8;L^to&0s4guXx2>FN*QB-c zv6Uy(+N?u!+kuzvuVrj*-ZwhhS~YCzc0`k&IRW}a4xvuTnNqu=bQ`9h2UIp!MPBe3of2LeepKX=QFeD^2N)~KR|hZKhN(j WRv7#7@#{C`zkd9|y46KP_BR#7H{_-O literal 0 HcmV?d00001 diff --git a/demo-app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/demo-app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..9062d233f550c8a5a2cfe58cc04669e2e5290eb5 GIT binary patch literal 2864 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 O>Cs1jy=VWV-lr6?G=RMT literal 0 HcmV?d00001 diff --git a/demo-app/src/main/res/mipmap-mdpi/ic_launcher.webp b/demo-app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..0515ca760da42fb1ad5071e38baa61fae2c4419d GIT binary patch literal 752 zcmVKmZXWP}i@P5+pzokR%C^bohu8MS!FR zks=^PDN-qrR5rIpI(#W436dl!N)(~|DauB;d7XF7N_X4TX)t@ z!rs3+Ax3mI!bI1Y@^v-eQ+KW11UucgR%n zUYcJL&w5P9vYF#(=*c@R=}F*upJ{_#hMs=V5`J%c6&VlFr^v*APqk{7wlu5NzHe?; zvjSI*fSMh1DB4!ZcepA59R>6AI>2@1^wynculeEP_BP4(Q literal 0 HcmV?d00001 diff --git a/demo-app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/demo-app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..32bced415400be02d31c58d3c3984d8ed5a35293 GIT binary patch literal 1782 zcmVHfjZLCJL3YzN*Q@EX8VJ&MdoAnc1Et zm?LJp&Gy{LnDs4HNA?mX`wi)Bx2mRY6(rlXO*^|2Q5(z#qz87=jf`JRN*O7sZriqP z+txGwzxUh&N0KDfPTSv7$dU^-Gcz+iet&7YS8xc$KYBP`x1CNj>2|OYGw&8~7qHO;?T6R^0Kw+k+O}=m?hm$Y+nl|m{|wwVQsiYk zzDK~+l?>b>E(miulS1eW3!wv>#(9K~^N5JG#`&F@;VhfOG`jcnIjl9x*=`Azc?mOJ zW%UZB9YLm1Nw=!v^Zpa3gwoD0$FlYs1>jr>D_K!mRg~TpB~XZ9UaAgLs?Ld1k5YM{%^#VrmZ#{wZBI6Es!Cz2H+Dy05BHd1>ULh9sCAheQ8m}ROW z!k!`xVGCwGejtctKxm!?v0L(EE?d%lj5!msUbB<~1aV4w0b4fkI2}yW1mFyl17sw7 zWZ^ne4lX&^JfgiLws-B8f4 zB!r#tV{F^UIIjCM0`SOb$3)0-rRQ40fG%>J`|7ZxvEIU5X_d$cDDjenE} z5s@U={u{mph8R5aqdOvi2n=5+m>Dl=jNU01le?9O$U;=}gx0^17(2b<0w90EzFV=M zp{_;6Hg7fK4huylWH&~rAOu$&lLs)xkea>#ys+YizwO$vZwQRqy*CkpPv-Az-W)*N zpBhR)pI)#8uG4$EWLClq&wYDOErB6R*Jh?DL1RmwaQz8I8xu}Xz3Ps-m!6k}qg&&F z4bXe!SYP<@)&ymEM5^_-`6s?&F7&Y1zae*O#G((S2T1+_1rS$4cXw@TH%)+sff-)f zO&SxTGKYxH$w&_9q`$^%P^4rJse5;>Szo=bUdgl=Ab^t4{DC1m%hxSGKi`RnT#R+E z0HnDKKA!sAoDe`?{pOa>_~=IT$OE`mgwVhRYffAC+I(YQTfN3_poczu5BiiUfI)- zH3U#~lMzFomeR_bCsZ}CBBdYG+*`BCMHj>u_K6M%V9xj+Zt1?G%mIKmMF_FsxK{xz z`X`uhRqhhNfrF@g$ns6`X>Iqv#qYicBn86pQDB7i!0{;Em{162`o*|zTbOT7n9>;I0l zaf|@jjQ8$h-NdnpSJf2(N_6Tj2->hp0HsycYFN?^zcOnVMHu48{@riW@}=lKgLg9t z&?W-7{l_m_E7sc#tik$}6QM`nN#|dYL7eZD0|Ei^5gT_?4^(MwpR4c{VThfj6~oqV7YH!UKW#iu?IFNq=*rD>%8lSZ_MycG{+M4nc>a2p z0Mk7$!`PSi5MbD=@1!%P`5#_yrSaio>v{IC`{~hn-1V_(26DBdK|b6hFdIMqqPVyw z*FP4xh7UVsP;VV97E9Cbx93 YE6CsEzaW4?0PCGyU*x|jylj3D0K;-`VE_OC literal 0 HcmV?d00001 diff --git a/demo-app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/demo-app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..146dd59a7b49a13cc37a207561c2cdeb591df806 GIT binary patch literal 1518 zcmVZ2nK*TBAvZdc_diwmi<8Q0Ta~x6cPo20Zr7go z>^V?vYg-mQcY(V_uD~HXR2JDHokrJ@Jjvag#aT2KY24lQd%wqxZQDw7OSFo+yStSx zl>u>k?~!RRbU3!P9j{{Bwr!VLnSe2xtd!|fr%Fa+tFn#j`%ZvlYugM-y8JGVZQHhO z+qR8W{ZWdzg66XR!r1ndRvly8o;W=#o8K7ihbT#sY3pmx?6qy%w)Je=wr%s;5&fS4 z9AI5f57kEtt-$O3Atee?N^bS^Fo?Z$v2A1t)dEx)MEIjsyQBJdvY?uS#QIlaQ7z*i zRQQW1`JuwU0=)Y6N8|fWC|*Vq6+C$6mRLaDiXK7HD=z`ntL7EE;& z^ff)I>%TVUT&u0La$#|CxuQ{Ny36FsHU@5Lb=mQy6i*DWtUhG7w9-ycf)#1DGU{Rb zORFH4H%1;^QbA>N9x7W|O|SU{`4uf-#KEs2#{UFeDj(w?0PNEsU|A0#|@!a2q#WE^4Y`6`wSka|M@lnUuSGJZn=Kb|s zZ4i0sneMYRY)=bH%7*UF|6fp;c$=!F(D@j31N~OUUtL*R8+G!bs%@_zH|3vzOGs0h zE-sn*4gibG_oZT_#vqUVjq+ zW`CBD65?FsO;o6uNSdbUiU!e`Gmrx}JjhL*d`~TJ786TT$()-ixSK<5b5B=yE-X?} zCrKJNb5j=Gj}@4i_1h?b z_@^n43km=tEpnS!0ajQY2VnMCfaxZw*APaV=Qgndtgt!`z|;?G7VkJNXwmVMrL&@c zch9^AU>e2P-A!}8sTHkFEM0L)|J9wdK0*LqH;l5|7v}y@&*e)sAWaT?xRttW1=*aW z(WfBIYVAoG)q;XcG?is5CcZ*VxY^GhhX!p$B7?Wf>sY$t;^)+aYX{LYzEFsJ`U1;$ zckBh#Z?Xw7lxlP~S9@PR=(XS|$eiV(Yv3bxZ-WM`$p;<6> zqK5^5UOcqQ^g7xBe+aNezsfw z`A_lNS1&)w8yuIm$yfjYYDlw&V*>zbU#w985PLLQ>B6D4tbcjK!lnSJ7HD{VL(bu0 z(|5&F=)KxYF0AuPmIRI#^qRD9V{GysWIL^vWuGgxI+pFT@{(PzECojuSuea^U znR(43oQOR(_8MFX0D|Kx0C@d?U-TFNn~vEGJLR)+=W;RQQYxkue)zPG*^H*qD(y9xjn0J4U~WE(hjfxbf%>f1Dt!b9i( U&%aqk?yLLc8^z0gt2nR}0B-#9)c^nh literal 0 HcmV?d00001 diff --git a/demo-app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/demo-app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..b3d92c77188d9bc4b27e0fc89b74b49eb54df929 GIT binary patch literal 3998 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 E1BLX@%>V!Z literal 0 HcmV?d00001 diff --git a/demo-app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/demo-app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..c378ba75d24319ed37a3392e3d9a7e3a642f48f5 GIT binary patch literal 2266 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 apeDlXq+`K8bql4-DW#*uxC2(Js$(T`vF&;Q literal 0 HcmV?d00001 diff --git a/demo-app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/demo-app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..a867f820e52dae6cc3b21722e98d3a1816fac336 GIT binary patch literal 3052 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 literal 0 HcmV?d00001 diff --git a/demo-app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/demo-app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..4c2c453ea19f6894f461b5d838ed62220f509753 GIT binary patch literal 8712 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 literal 0 HcmV?d00001 diff --git a/demo-app/src/main/res/values-night/themes.xml b/demo-app/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..94b73d2 --- /dev/null +++ b/demo-app/src/main/res/values-night/themes.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/demo-app/src/main/res/values-zh-rCN/strings.xml b/demo-app/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000..d71185b --- /dev/null +++ b/demo-app/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,4 @@ + + + 项目推广 + \ No newline at end of file diff --git a/demo-app/src/main/res/values/colors.xml b/demo-app/src/main/res/values/colors.xml new file mode 100644 index 0000000..c8524cd --- /dev/null +++ b/demo-app/src/main/res/values/colors.xml @@ -0,0 +1,5 @@ + + + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/demo-app/src/main/res/values/ic_launcher_background.xml b/demo-app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..9265036 --- /dev/null +++ b/demo-app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #FF8865 + \ No newline at end of file diff --git a/demo-app/src/main/res/values/strings.xml b/demo-app/src/main/res/values/strings.xml new file mode 100644 index 0000000..b07f7d6 --- /dev/null +++ b/demo-app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Project Promote + \ No newline at end of file diff --git a/demo-app/src/main/res/values/themes.xml b/demo-app/src/main/res/values/themes.xml new file mode 100644 index 0000000..ebbf2fa --- /dev/null +++ b/demo-app/src/main/res/values/themes.xml @@ -0,0 +1,9 @@ + + + + +