From 0be33dae37ec22addaef850e2eb098d75cc7d2aa Mon Sep 17 00:00:00 2001 From: fankesyooni Date: Sat, 4 Nov 2023 06:00:14 +0800 Subject: [PATCH] Initial commit --- .gitignore | 15 ++ .idea/.gitignore | 5 + .idea/icon.png | Bin 0 -> 4528 bytes LICENSE | 201 ++++++++++++++++++ README-zh-CN.md | 91 ++++++++ README.md | 97 +++++++++ app/.gitignore | 1 + app/build.gradle.kts | 53 +++++ app/proguard-rules.pro | 32 +++ .../java/ExampleInstrumentedTest.kt | 24 +++ app/src/main/AndroidManifest.xml | 23 ++ app/src/main/java/MainActivity.kt | 13 ++ .../res/drawable/ic_launcher_foreground.xml | 31 +++ app/src/main/res/layout/activity_main.xml | 30 +++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 6 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 6 + app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 838 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2544 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 642 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1626 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1164 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 3596 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 1836 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 5612 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 2416 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 7900 bytes app/src/main/res/values-night/themes.xml | 8 + app/src/main/res/values/colors.xml | 8 + .../res/values/ic_launcher_background.xml | 4 + app/src/main/res/values/strings.xml | 3 + app/src/main/res/values/themes.xml | 12 ++ app/src/test/java/ExampleUnitTest.kt | 17 ++ build.gradle.kts | 5 + gradle.properties | 18 ++ .../sweet-dependency-config.yaml | 52 +++++ gradle/wrapper/gradle-wrapper.jar | 0 gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 185 ++++++++++++++++ gradlew.bat | 89 ++++++++ img-src/icon.png | Bin 0 -> 7190 bytes initializer.json | 9 + initializer.py | 68 ++++++ settings.gradle.kts | 16 ++ 43 files changed, 1127 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/icon.png create mode 100644 LICENSE create mode 100644 README-zh-CN.md create mode 100644 README.md create mode 100644 app/.gitignore create mode 100644 app/build.gradle.kts create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/ExampleInstrumentedTest.kt create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/MainActivity.kt create mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/values-night/themes.xml create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/ic_launcher_background.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/themes.xml create mode 100644 app/src/test/java/ExampleUnitTest.kt create mode 100644 build.gradle.kts 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 100644 gradlew create mode 100644 gradlew.bat create mode 100644 img-src/icon.png create mode 100644 initializer.json create mode 100644 initializer.py create mode 100644 settings.gradle.kts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f7415cf --- /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 \ No newline at end of file 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/icon.png b/.idea/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..deda69c1a1d711011670c6f57b59c576df589c7e GIT binary patch literal 4528 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 Qx!C|Z8v4+3wWqKD4}C(JmH+?% literal 0 HcmV?d00001 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/README-zh-CN.md b/README-zh-CN.md new file mode 100644 index 0000000..abb9d3f --- /dev/null +++ b/README-zh-CN.md @@ -0,0 +1,91 @@ +# android-app-template + +[![GitHub license](https://img.shields.io/github/license/BetterAndroid/android-app-template?color=blue)](https://github.com/BetterAndroid/android-app-template/blob/main/LICENSE) +[![Telegram](https://img.shields.io/badge/discussion-Telegram-blue.svg?logo=telegram)](https://t.me/BetterAndroid) +[![Telegram](https://img.shields.io/badge/discussion%20dev-Telegram-blue.svg?logo=telegram)](https://t.me/HighCapable_Dev) + +LOGO + +一个快速创建基础 Android 项目的模版。 + +[English](https://github.com/BetterAndroid/android-app-template/blob/master/README.md) | 简体中文 + +| LOGO | [BetterAndroid](https://github.com/BetterAndroid) | +| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | + +这个项目属于上述组织,**点击上方链接关注这个组织**,发现更多好项目。 + +## 这是什么 + +这是一个快速创建基础 Android 项目的模版,通过此模版,你可以快速创建一个干净、简洁的标准 Android 项目。 + +模版中自动为你集成了 [BetterAndroid](https://github.com/BetterAndroid/BetterAndroid) 依赖,它能助你的开发变得更轻松。 + +## 开始使用 + +在 GitHub 上点击“Use this template”按钮来使用此模版,成功创建新的存储库后,使用 `git clone` 命令将你的项目克隆到本地,此时不要立即打开项目。 + +在项目的根目录,你可以找到 `initializer.json` 和 `initializer.py` 两个文件,请打开 `initializer.json` 文件,内容如下。 + +```json +{ + // 你的项目名称,这将作为整个 Gradle 项目的名称,只允许英文 + "__PROJECT_NAME__": "android-app-demo", + // 你的 App 名称 + "__APP_NAME__": "Android App Demo", + // 你的项目描述 + "__PROJECT_DESCRIPTION__": "This is a simple Android app demo.", + // 你的项目存储库 URL (非开源项目可不填并稍后在 gradle.properties 中删除) + "__PROJECT_URL__": "https://github.com/BetterAndroid/android-app-template", + // 你的 App 包名 + "__PACKAGE_NAME__": "com.highcapable.androidappdemo", + // 你的项目许可证名称 (非开源项目可不填并稍后在 gradle.properties 中删除) + "__LICENCE_NAME__": "Apache License 2.0", + // 你的项目许可证 URL (非开源项目可不填并稍后在 gradle.properties 中删除) + "__LICENCE_URL__": "https://github.com/BetterAndroid/android-app-template/blob/main/LICENSE" +} +``` + +编辑完成配置文件后,运行 `initializer.py` 脚本对项目进行初始化,初始化成功后这两个文件会被自动删除。 + +如果你的系统中没有 Python,请前往 [官网](https://www.python.org/) 下载一个,然后在命令行执行 `python3 initializer.py`。 + +如果你正在使用 macOS 或 Linux,你可以直接执行 `./initializer.py`。 + +项目初始化成功后,你可以使用 Android Studio 或 IntelliJ IDEA 打开这个项目。 + +## 项目推广 + +如果你正在寻找一个可以自动管理 Gradle 项目依赖的 Gradle 插件,你可以了解一下 [SweetDependency](https://github.com/HighCapable/SweetDependency) 项目。 + +如果你正在寻找一个可以自动生成属性键值的 Gradle 插件,你可以了解一下 [SweetProperty](https://github.com/HighCapable/SweetProperty) 项目。 + +本项目同样使用了 **SweetDependency** 和 **SweetProperty**。 + +## Star History + +![Star History Chart](https://api.star-history.com/svg?repos=BetterAndroid/android-app-template&type=Date) + +## 许可证 + +- [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) + +``` +Apache License Version 2.0 + +Copyright (C) 2019-2023 HighCapable + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +``` + +版权所有 © 2019-2023 HighCapable \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..979c81e --- /dev/null +++ b/README.md @@ -0,0 +1,97 @@ +# android-app-template + +[![GitHub license](https://img.shields.io/github/license/BetterAndroid/android-app-template?color=blue)](https://github.com/BetterAndroid/android-app-template/blob/main/LICENSE) +[![Telegram](https://img.shields.io/badge/discussion-Telegram-blue.svg?logo=telegram)](https://t.me/BetterAndroid) +[![Telegram](https://img.shields.io/badge/discussion%20dev-Telegram-blue.svg?logo=telegram)](https://t.me/HighCapable_Dev) + +LOGO + +A template for quickly creating basic Android project. + +English | [简体中文](https://github.com/BetterAndroid/android-app-template/blob/main/README-zh-CN.md) + +| LOGO | [BetterAndroid](https://github.com/BetterAndroid) | +| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | + +This project belongs to the above-mentioned organization, **click the link above to follow this organization** and discover more good projects. + +## What's this + +This is a template for quickly creating a basic Android project. + +Through this template, you can quickly create a clean and concise standard Android project. + +The template automatically integrates the [BetterAndroid](https://github.com/BetterAndroid/BetterAndroid) dependency for you, which can help make your development easier. + +## Get Started + +Click the "Use this template" button on GitHub to use this template. + +After successfully creating a new repository, use the `git clone` command to clone your project locally, do not open the project immediately at this time. + +In the root directory of the project, you can find two files, `initializer.json` and `initializer.py`, please open the `initializer.json` file, the contents are as follows. + +```json +{ + // Your project name, this will be used as the name of the entire Gradle project, only English is allowed + "__PROJECT_NAME__": "android-app-demo", + // Your app name + "__APP_NAME__": "Android App Demo", + // Your project description + "__PROJECT_DESCRIPTION__": "This is a simple Android app demo.", + // Your project repository URL (can be left blank for non-open source projects and deleted in gradle.properties later) + "__PROJECT_URL__": "https://github.com/BetterAndroid/android-app-template", + // Your app package name + "__PACKAGE_NAME__": "com.highcapable.androidappdemo", + // Your project license name (for non-open source projects, you can leave it blank and delete it in gradleproperties later) + "__LICENCE_NAME__": "Apache License 2.0", + // Your project license URL (for non-open source projects, you can leave it blank and delete it later in gradle.properties) + "__LICENCE_URL__": "https://github.com/BetterAndroid/android-app-template/blob/main/LICENSE" +} +``` + +After editing the configuration file, run the `initializer.py` script to initialize the project, after successful initialization, these two files will be automatically deleted. + +If there is no Python in your system, please go to [official website](https://www.python.org/) to download one, and then execute `python3 initializer.py` on the command line. + +If you are using macOS or Linux, you can execute `./initializer.py` directly. + +After the project is initialized successfully, you can use Android Studio or IntelliJ IDEA to open the project. + +## Promotion + +If you are looking for a Gradle plugin that can automatically manage Gradle project dependencies, +you can check out the [SweetDependency](https://github.com/HighCapable/SweetDependency) project. + +If you are looking for a Gradle plugin that can automatically generate properties key-values, +you can check out the [SweetProperty](https://github.com/HighCapable/SweetProperty) project. + +This project also uses **SweetDependency** and **SweetProperty**. + +## Star History + +![Star History Chart](https://api.star-history.com/svg?repos=BetterAndroid/android-app-template&type=Date) + +## License + +- [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) + +``` +Apache License Version 2.0 + +Copyright (C) 2019-2023 HighCapable + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +``` + +Copyright © 2019-2023 HighCapable \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..d13afb5 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,53 @@ +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 + viewBinding = true + } +} + +dependencies { + implementation(com.highcapable.betterandroid.ui.component) + implementation(com.highcapable.betterandroid.ui.extension) + implementation(com.highcapable.betterandroid.system.extension) + 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/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..e819dd1 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,32 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle.kts. +# +# 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 + +-assumenosideeffects class kotlin.jvm.internal.Intrinsics { + public static *** throwUninitializedProperty(...); + public static *** throwUninitializedPropertyAccessException(...); +} + +-keep class * extends android.app.Activity +-keep class * implements androidx.viewbinding.ViewBinding { + (); + *** inflate(android.view.LayoutInflater); +} \ No newline at end of file diff --git a/app/src/androidTest/java/ExampleInstrumentedTest.kt b/app/src/androidTest/java/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..d79adb3 --- /dev/null +++ b/app/src/androidTest/java/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package __PACKAGE_NAME__ + +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("__PACKAGE_NAME__", appContext.packageName) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..3dc303d --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/MainActivity.kt b/app/src/main/java/MainActivity.kt new file mode 100644 index 0000000..792ad8e --- /dev/null +++ b/app/src/main/java/MainActivity.kt @@ -0,0 +1,13 @@ +package __PACKAGE_NAME__ + +import android.os.Bundle +import com.highcapable.betterandroid.ui.component.activity.AppBindingActivity +import __PACKAGE_NAME__.databinding.ActivityMainBinding + +class MainActivity : AppBindingActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + // TODO Start your coding here. + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..e42c27e --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,31 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..1bed29f --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,30 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..0648fb4 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..0648fb4 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..78e77cb5b4238da16ae691f4985594281a4304bc GIT binary patch literal 838 zcmV-M1G)TCNk&FK0{{S5MM6+kP&iC60{{RoN5ByfU*$HEBt@#@SDF3S->El%ak|`a z+(?ol<-!@jWc|5!U&g9*97&R+)F}fF4ff+4Z!KoJ;MTUSs+#-a4&8VQG(|>9q#p63 zUkYvk00IOE5aH9n0B8UK0t6^P3#bDDs+Imjh)@a;N~N#?QXy0*D^=1!2oVC621=DQ zmFoBUP+5Txzt7j}dRM<fnTWha|6iNgPel4ly$-uZ_`1R8W#?>p|c2Y|V z^#`MFpnQ`1{rBG8KcCTM;d;H@|K`iJ98Q-X@I9Zei?3E5L!W{B|6fTHpk3(#TuztU zQz32JwzH8k_RKrBmosbIwl!8#u5H^MbNxSq=UsoweK(^26JY#(Pa4q@E{sA`-;od8 zxpDpKHPKfYyJNt2;N#v+lVSPht^3BPtt11t&7hV%6K^Eh8NppM7}nA{@x~aj6?a9K zK=fgpz4)_XO%Qn$Z!htpE`i9iLE5-X#g*388#;vTsZg`K+?b!I z)(YFASh&uGy@iU4g&m!)Sl#KUd#+-|eqmgz$i-%u>^it<17m(ynB1JJxX6^&Hb=4a z@SY_zYRZd?Vt#o|%~iZByB8H9+qwpbf8LkTD4EkEamY`F>4CE%3md=QF-1VWM`gt z{&o@OLM3p4DWSbyLMD*5B{efETYM}t<$IhH;K#(* QZ{jiG8?MG_X#7nD00XL%IRF3v literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..0376402dd0d3562083ff64aae4a327897f715a9c GIT binary patch literal 2544 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..708443078115e3d41024aede01414ac9634c1613 GIT binary patch literal 1626 zcmV-g2BrB@Nk&Fe1^@t8MM6+kP&iCR1^@srFTe{B6;YP||E&J}*5xhOOSgA`m2KPR z-?oo_c~Dy`w_Dq`ZR_Nhq*w5%jnq5)tZL=d4>Fmoij~_NaKCkT-DOqVPVLOp$ozLT zcAc*5lc&rSVk1e4q>)Fna;%EE4y?37gC|>LBM{T4;OCu6`S~_I)JUxKM z#Q^nUfF{;kyWk9Ssb`n--*!9YrutZ~Z);)u0J53hT(w$aE^?JS2~~yk&$pcA^ZUCW zect_NegnX_Rm%hFOU!bKc$r0m?_31VM0Bq+cF6e<10YYGKt~{vG)YXELByF-LPQkw zi0Gcj0{DRnI>3qHocY8c&J^QD|A!4&m!V9SOjz-8{on{BXmf0C#0ClJ_FRC3j{zyxL`OTX&5?G&*;+Y z2;_W7Jm@sSkTeash?rnf$7&CJnLNY|!=53BG=JhwzKj+>$x#( zz(-wY%Z-qd59=IL57x{y*^#Y+l1b_lW}EIACz~Tf@5EFnA1Af&5dcxuOR{7ps*PFg z)vyM@q@4v^h}c+}j1{hL%-LoKVB2qsWm&Mmo7{2rbCdQPvFh_5 zQ{jT!E7>9lQ8gDHF+dY2_UjB|N`=sf-t)s6uLdQT&$~J?V$vgG)UsC9S#D$ol**(I zF{5upMotA5Sf4RfTwrr$lvF^ZwzF@0Dc7#R5c$l5^Wc+!yXfJLsp`S5Kt%YtkLu7D z7_d}&3FI1Oj`i9XN$fQ5A?M2B&M`&ALY^Tw>|*a zV1QjU=U$Mdoke9+@f8Cc(IKF*9{8zF8;kCnKqovD~8F7~q*o zLp+^gfNLL>dbXB#f9Mx0qby_nLN&en(`$7+cV8+ErFM%2r+rA<{Z(<9D0y*@@r&hn zBA#RYV%$?EBrn?PFG~;EXEP`dIs~*CV8#HyUTWj9iXq60$aNE{VnRfeJ=Jxo=>48+ z<8cP~Gr;V)0IK!`Xr&ln+W-*QU1Qo;Je}RGW%SEECz9d1u4~YVQ5CK)87Fry%zHJZ zL+wCkfF1*E7~s?De4pA=WjHu!t~@Lg;*%=QD{46Rx~B6V{{N?n_lh!6eDXz4mEqtG z4DkK;VZGScpx9|S&bH_zOPb(cjF;J!{#{d8T literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..2538bc914ebfb480c2b682aabe1e1964441b4296 GIT binary patch literal 1164 zcmV;71atdRNk&G51ONb6MM6+kP&iC?1ONapU%(d-hX*;5ZPm>@5Nwr{GEn+nGqa!W z8AB3o+(vRF_3n8WUUb?0|9O6UqfY%vk37U1r#?+Qo~JWw|PK>Py|5I_kCAb?UU3&gAa0@)#`(V=PK z2qgd^1i~Nqh5R(gKnExR2?(JOP!t`q2!WJ=5Ol~uQCbp@B2~?p0M&4A>8_}SZ$YHvR{4tLbIb^t{^b)uYwQPpTCuWH)k-3j z)o-lZJpZ~%#@c4f2 ze2!lItSPt8w`h=~35dDOzrCjX0(rtD5E=da_ez%j&?(8fg`ac0CKUo*b30SBIxk!m9ioAWH^vTob zpE1`8K&gr+k-qr!?)A%8fHeiR(x5jHc~Q}4Z!=|CB$PfZr79jo`uL4BHFp{TK_@NT zLFIgW%$zly5%K@b`RjQoqz~WA@)#i{w(gXP$VE=KO<~!j5Hpt_pmI*8+b5A^*+Elo zW;=;eaLA0C`7Wa5A2$3pXk_|=&1pl_Iccz?_)S^-o~#bdBLIvx@h$u$9CEyba~GfD=g3JsSQ$nr=b$u?a!JmNwhl-w|9#ym32 z78dOhjg(vQ3v1^J6SH%$7jp%=<$Q_z+)PiGI<|31Rwe;ui?<%vol$e67Pm^D+q-$q z%2f<&EnBVGceeCRCFRky$Q5JxI~Px!#N42}t2Z)@nh$DL^xC~LWy@jD1dU$OQhwEz e#cp4{egku*)?l<$oA9nSx3I)sX;7Q|TnYd#Pa7Tp literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..421392787c05cd21b06c585073389b8c93082c26 GIT binary patch literal 3596 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 SvMp=q&~!jUhgz1cUJe2GTP&mi literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..9ddd2b5f032e895e8af4973565bb7c8491e0dd27 GIT binary patch literal 1836 zcmV+{2h;dcNk&E_2LJ$9MM6+kP&iB&2LJ#skH8}kHHX@^Z5a9g$6K;T#02oK%ou*; zN;&fXDYEiUaCdhycemW#-6e8&w=JUQZ+jjtmn5UMx2B1#PcU47Xt~Eb1G*=8v1S(G zgfGTYy?|zq3y?lepwY7!%eVl<4!0oV1a!1ja{^o%IRRBq3GEC-dyENj*R7XR<&GoU zHm&vZ59K9+bIyI{x9vYNMs6cXQlxtSO*tn{e%#(YW_V_10g|?D$Cl&&e%rQfTh$Wm zMvbf$xKZt;qv1b~L)*>WhkF8~R@=5rPXARfGcz+YGcz-)eV4xP`Stp3Vr}&JNGgET zx@qE66L05RV4*rLC}q(!D4z*#|wxFX1;B|(%@ zA!r3i0_*T_=oA7uM1J`i4@zl}R_JJuAQ~6c>x9{sq;a$p1Wc{Q3DHs?!1; zMdIp$m@`2I#*kT%kg;tx7B;93n~ti@4KZdXhD0V3sc58P2>5IMe1=poi^5T=!xTin zF@{Y4`-q8D|I8|K7?dVGGzg1{HU=(Ioim?(1bwh?XcAr(03kKu2m)YPJ2%N@?IY?e zvp7JnBAMnhajXDft4;fCK4EN}MZY5M0B|Y+8-t10AMd3|b;o{@<(J#QJb5Z|ylc5h zb1NLX)Rh;RzTB>n|$fQhN zR{+M*f{fv12+aiY!#J9kuRq&SnuLQ%{)8cS~qdoLG7+VI@jh z2tS0!x0lNIDrnA$?ICz{xx7IjLP=0Fx%9etNkh}=db09)f^*$cfO9w1Tuus`H-z2Y zM$O+Qh@yMuY^i1@=WY|lON~v(iF)xi1lOd!+JW*%XiO5~g`El$mn4TPucIpBR--fP zvYv81pnL#~5md4o75G(aHUIiGIGv-*y?yPchzP$&=VCGP@M zBl!MjZ3a>_Nr@bN!?F5%-sz|Bj<+^5%gWb&Kv>r_K3(Y77l_r*CCgznFB*$sVtshG zZ#U)RBPM(M-4`Jv2qf{yaudAr+E2XqR)VCp5$GdI$hK;B8iOxH9&us?sf|Gu`L#F; zkG-ahAOK^>p*VclQcgecg)_{v@dFmRuiwL2jxI%sCia&_pWNOQHO7{rMl2wwzn;*T+uOe!rJ0ySoiw zTfHPIp%(~XXsyqj@}HS{Hzk6-|A!XCBIQM(ii@s_qd0Js`jbWcHhBi+@pp;!wxr|& zuI4Iv9$U$Adzx%bk8Z!n^2@DvnY?DWe>_TY-{)u!fJg~K0JVjw3CkG9HwZ?ogH6)86J(EZwd9j{#hBB+o+zv+>2LJ~^ z694nE0QeeC`_=wM0;|ZuVEBc^Fa-Q%FxZ$yk2**7<#KyQ{Ljm31mIwxz6yXk&iCyG z2$$P#=Q_2;%b+}gW#r(-NNDXW2In!_b&J>1o9*)bdy?WyF>=`mV2Jhm1OTG3pjczM z+-cn_PrEePN1rPF8Biot{~{qpepBBv{ps4|A1(X!X|?5YHx`s!A6_!b90&E)11JE@ zApns`kcb4SB;S84&+Xb<=yDj$d%F&be1Y3(FwgbU7ZeH7fdG+^w@>xH6e|Z{D^CGT zQGOp!Oo&8=7(gr%BnTMc^#8QOQ^k?vq1;gckO61`EC9|ZzmGpM1Y`cc5z#*q<@fPz zzPNv*;>am(?g+pG5N(tIbe8~(yBtJ)*RD&R5`f%$rz5BMId_!x077p7vAt2$?d`oU a=w(OFsaA6C>+48BUti9t7IOm9$&~`h$$cRJ literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..0fad2960a69a6c239a27ebc49b627ba26765706c GIT binary patch literal 5612 zcmVeK@wbk(8k@}?UdRxb|bj2e5|ROnj5YwM=FE6odO4U4>renSW}IhY^AY2G@7cQ zeZWrym#Lb;33{BtNfmB`Ln;+cY*}N}Y+GC2Ha9cRd^~{ujrBgyOCP--=p#WT`4cmv zC2F>{x2dy}nP)zkME-sCF7&EdlH~@*gx)(BC_s{I+P2~yTl?6y?!8anwr$(CZQHhu zXWO=}?ZbUag4;-rBq^$pS?Ts{b+37Wu-UgZ{^!R8Hy|<1>Fbx2CX*?V=kxS#K<3mZ zYW&5he=Vj&KIWWy`Y%DrQSWK2!%GzbQrV=EU4am~`GFq~KL6p4NS~*7@+y_6r{)MT zvXyA5$%K>(NtQ=Rl21s|(@B!mB*|`)bU#U|Y!x)o7HGBeX zGH2NWeM^ZLKmM=h7lcGTs-Cw{2aqJ6lO&@Ui#{$Hnq0o3h%0RIawt0LIRu#_Ns|9D z#y){EWCi+)7{88Wb(A3Jk#Z89f>7dnv>!?8FSTcrwIG|?`4yqm{(|64LVgU0QGQ!4LJ6a*iOFv^j$${VYQip`aJr=Kz?XwGmEXPG4R@ko=5El18+Qm;y_Q zBT4;B!T(C7;MCH5FZGw@D2!!DRe7;moICikYGu4rC}v`i6lxPDNvblEB1o#(i)3@o zAV&nJ7WPOi8Iq)3y-{7BY}#{$F)uiwX9+P%dkfWr36`oXqr1FFdb3BV06FOtywoT_ zlC-He%F9EV_DorhKy~#(Q8H$d^ak}tdWpr9-IU5@8^jN465QHOL9i@Rbs(-Q%SE(Z z+JDolp^? z;{!HaTpF@P;XEkA^+GWtL6W2oTV!4+P%Nxnf2y*M3wjtuB&j*n7%xIztjTZeLI9-P zYn*m3Hjk+{Z&q<-$QH)u?M}`UJhYy|P{fa#!rJ2I!l8Dzf4^lMV`hS6G1c-Xl-K$d z0LZz8oOUIvTh*IatC%um4gLL`LMD3wa(b4H!E3xsJ1*a z9?Fn4N?)1v9D0f=ne2yce8Ywd8YiaA@}cZoOlBqPU(}X&=Hc1G_>a-V+7>bHF#HFZ zhx$VS<46^kC$cprvy$~6m~4&eeB`GO&*q0|MiWb0Q2WUk+xUnL=eLfTwcEqk8NJy{ z%KKccHw*K0B@4`I4m|fL0Ud&cxdwp)A9&tz3CS9nqbwfMkkQ4jSPe1RGsnrp_0GG_ z5{G|S&-2Ab0n)ne4;Iz!!H`){-mtdo9Z6c>>zgGFXOxf{&UarP&kqjPETi`Rft1A~ z!R#UB4z8~^3-3(W@aKc1(uO~P56AZIT`}4*}$w zpO|(4WL{D)$AO$EsSGPy?T{#1{o%}PwFM@#(Uw(i4oDPMyFYUau16&a*}||E0F^ya zbH0Ff2V#+1_3Vse4aW;qHvImu$j$_qEI4o2K9w~dFI4ATT);SHnpek~H5TvM=pprs zT+bzxVI_+#RHO}kK0q|Hv!1oz9!OMHvp-Qn8f1G*K4*b_CK3mA787GW;Km^UYDI*yT0T$!iwPdPLHv|=j~Rjc2h@RkNR z+;JtVJrb1-zTYgg?2x%*DU&*>-vmH5hK4f$3NI=1aUf?Zu3)i+#s=PR7FLbXj9Bq$ zPpc?uVgXqN-L7hL0K?$pnWMN205$W`WX|M@7%9|{2;mtu2kUv5MAe$kS4v6)1Ekc< z(J%P>;s-O9`ZH&#KMR)LELiSr#fq0Z#*KN-{l^jhKJi}Z*Y;={JgahB zKQg_#Et5Zp_6mkV{I`$dOXeH|=4d@@IbV^eJnRKB6j|P! zCN4j)G9?oG|N12bK)khso~ zN=qm0#S;?8oWE4Hs~w!hrz3hw0be7WzzbiZ&K4>Amsw?$G& zg)`DST3==0Qid5- zeV!CD&XM>v9L`8c=m0O^NFM7;y$u)p8QKMMI@9lt(*(&dx3=rVTow(a<;^y5dP9xC z7wKuXp2S4Iy*{R7-NTLfrWOB?5Md*q5A#bi+y>8#0Ab3jIC`NE#QN11sA#wQxIYP`Bh3x>i3}vYR zAZcpQssOMQS9TE>e*FNHxG;y$kd@MiK^a`R3IN;3%v9`60Tlq|!p8o}!G8URfBt$&*XFZ+#zl-77W!`diWV|nw;+VxklyRp;g z7^nd-X7|JWnEhdaS%rj{7TB&~|DJsQp{w?V-7*1yA!SmZhi$A`>2e2ZtaP=9{pS(+ ztY@(9aNW5X=($rWBd6c%_9sY6BHK0hD6-Dm9n@Io{mDF{1nb8_PQNJk+RToL>}t@e z=zJOgZPT|~U?gdFv2I*sXTrFsAuXyqh4n0VSGG3tcqI1OZtx|iApjt4a6Z=p;3%T) zG?8uLne*}z0C);pKZjl6b(S|Sm?}5*qiHS zB>*M>fJ@6=*UctMd?5 z_fd_;fF(f%V*&vCpuPS$CFu&AYM;oh7q%&_Ty1_d;#MZ zu`$0}*W(F_tmpn@PJTc$(GQmg@=Sx78N1b|#w_yszMyCp$Ay#~mC@rk3n^Pf z7GLzv>v^Wr@1L#FC=jf6fmz1-fi9r=%cWRUnGQBrF`jQ+vf{;-o4*1rt#GkrUM_)I zT*7j?ICnR7y-o?J59n2AO~;0S4S+z#Fn$#DQ+8iE{U%cKmKt`?%tG2SR5kvtT7$q& zJu^4&0|0j~&GOjd(p0cb=7HE$XNqFAi^b;j(scu)x?9sRs)6&_0YErw7=H`;DG$+E zDhywA)AqWpD9Tw=abt&r1psefKf|d-wX2CdG&Y<$iuG=%iwi0>dN>GHI}40q^<6G5 z0HPVA_;c`2d1wo3%dlnl?*qOOW@Le220&2zBh13^1BKRfTR@rDJQpUVQ*0-J>-3 z(MoA*eA)!-T7?nIW+?!vlf=^VtcKKoxj6UQ+3I*=UhBtoJo?E#mz+K>OC2uvXY7?a zg{`pyV5kcO0Z0r}PoCL-G=FS#_8>4=e|Yr+lb_qFvg{22s?eH12!M2&Bu_6c4L{}0 z#QhIjb@Mj2-OzZNW!+K>a8+sadfhK;7+N3xQ=aURq$XvW+Z(=K53W)Ra5MC2LZGg$53P~my7$10OV36)vQ9s zVL^UZ9kyua15h|)&DX0Zk`m);%!b&SK;Q!a6w}1ziXz%Vu&(LQzJT{XV&1F;pydPi zh&7n0mUB&Lo%efqq6S{C{nEK|Yf)u5u@2>3SUYBxH#_Qoy$+nn8Ol(^xh5>;Hpgjk ze>yB}T<+YYi}IdXyWZ2x`F7-S>HskStYPXRILo@vTij-I-%Oq4EyyUu_Vao1@{RLTcsFjIX!pID}lV22|X>)s?I5J$lA+ITRa2y3FOs_k6=^w?F!GhR+ zw3|!yfqTR2j^pfL3hIWv;%-sX?G~!-@yGy>@3C23nL5dP%ln~IrE~d}pGCWA?Pj{Y z&T;RWZny9);=&m^pf>C?W|Z1M27p}suh)UY=k1L92cH<3>qVC}2n?79pYd2 z^O+qbW}mbU=&m&k0097BZ6FOmRso8G_J`-)qBOeyKPaUU5eVwe`iJ;5aULCDG<&%m z0NG<+0RSP4-G+1_M*(04z?~e#YkfX*j`mi&Q%20|`ImmQMcYj}mnGO|*s@*N&U$yc zp#qvi=ItG{9hZBvqRC?LNq2)1srZS;V~7lOn6z`udqa z?hioj|Bs*I+?4lFEw1o500aQM$w49+$T{l2y$+gDXZ%I_I1lHy4*A3`Ejc>ZiE;UK zaUPytxBsfX+v^a=&60s+B>;rDaOSO@5mB)dtAYwpY-@cyb;zpwJ!2TkrRm8^jt z(CN-;8%x{1u?N z@%#Pgo+itir_&$aAGT~~rO4{-ZY~XN;mP|iv(q3M(P1f6gIH0K7uI`$}4f!{0B0RV(4N{@2M&-o4%IJVX8bcu25s*TZG0&hA~I@5HKcK4FIV38F%j3P+iO|0;ZT)r6~e# z5u*!@J$KwbqYTyrBU6MwDOG8LHQW#%6%|HNR8+hn+?t@OWzO-eR3)=oMwQHJ+3nh{ G6#xJNYUUvT literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..4927263c1847ca8d3be0c780cd1399b7d362935d GIT binary patch literal 2416 zcmV-$36J(tNk&F!2><|BMM6+kP&iCn2><{uzrZgL^@ifMZ5(O;v9G1wKO!c82@MOlFqiR%C5&VcLF3$+jdya|Nj%V zZQHhOvuh4kbG||M`*v*G**S0QRjTU^RyMz+GOO6yxypegNv8Ggf3CmY=WqZ2Y#YNs zk|aa>|KIU!-}>yE{!aj9Z1eNlf$(YLmgEESN9B>?_*;9JbYr&mAW7`8)uacrm59i0 zCGs@M!*1Ej@iXH@L|Y9y9}x41gm-+J(}3-~YnxtdNn@J~wn^{s|82Wy=M>BsOO%&~ ztOrq=J4f55b=!n*6f&G%e|_3aq8_Mv5LpVHT5H>6vfafbOeP5wCUYcGuC@L+#9c%^ z5akig&^m0pi$$0qjlyKHo%FiwgAj%Q2$YA$$3 z4a1#_iUvS^vR#G!uPxauBlGo3WoEp3J|-7kv+3yk<8csx{&=Sj7m^_)DKD0(@rvb| z>Rou47$^W34|khLdAV%4rmsd3pZH*}jgps3R`(eb&pa(m1S$@|y1(B>%ge><`^^61 z)X$)CGIP=TKCAypmyLyh$MwH=(8Wj$0DCxNIFRAL`Rg1p^-+VwXA^g;JcK8;;(*AO zq*wFHgL@7LBj+RihJ3avh{ysc#}QYx;mUYrWQfQLP!uQ^LQ%6vq@`TRX8Nbws|80) z>rzKH3q6Ti{G+ib$kzD&d&xixarbJyt+DkB&_m2}oson!iFHIoeQun0wFe2q>=d(H zSBT8}A92dmm;E2D0J5Wp|XAfMueFwVJAeC@@iEkuaLMZ zwofqQxO-&+5cQ3>m+;jUW~a*biAI*!R}C072TU9DSw#7s+^Z%BM4F3*#5wdfuTl!&E5`8Y>Z`Gi_6$1}^um0g8 zal)f!^bQS64n7fySr0l0Z9Aw%)VNf_UXFY zU0Gh5(LMi{`{`jtXh>Y0Sg8j%`cjB!czz;JS$*n8=GO{9GtQ&)b5NvgzdQHr4p*{1lR!KlsE26zXkkxx5|BOJu>~nN$~u~zz})r> zr6;ZRMu4_f>l1{GB3}`xg}yTIc}c(~(DBoPyU;A#gp4y`jm1LXKL3PE%B!&`2%hz; zQQ0y$Jp}OJbo)pj5u-dZ1af((4LpL3XmtHx8eQHXBSJ$~$CiMuO02{p#Eg~ogGyQ7 zU@O7m1%X`|8zi>eh3oDq9I}4{0iN|AQLsaJV7wq37%mhd&$(#_$acTOpwN>9`WFP` z$o#-IJiih?e=S@E+p2%?Wqx}CKI1olCo3WY-8u=KBO)dM=uG>60XjFv2>i{^h1n^5 zVRi!DQ}}Wn0bNm`;JXBzQ4tyV*4ZNrn*+ktiG{B^aaUpE0#CyCkb(1({wnCqJ9xYtOXz{_`;mbFfY@#r zQ~Lu*KJwvIN-P;dHh&lb9_crC0IL3N7Zpt*03f%0y>Mr~72;7LqfkoT$P(N+Y8PgD z21RS&&Ae+m6n^3jE!@Q-AHrk_rM3%Pu)D9G*%J5|*tEFbvjD^Zwy)&b$tN-_FGHqm zWKMfKjdAy+y9IDaHoHHv4I=;`0WeyC6u|1L8BcU8oV&ZPnbI6& zt6dZT^akH|K`pQXaJpyIj=WN&@Jp8YnKF?nWb+nZr^I!Oakk*kY!3qg5CNzF+}fZ7 zum|wGci1kzP-ghp8`HLAX39Zk=9X#Ezzy?pX?ovUpc-AIPykT+Cma0!?Ezc>ylSg#i~KjS;xnwo2SFly~FnT;X(cH>lXUdc412C z1}Y>lFnw=r@XKF3W#(wlFkw-~8=VADt}Fm>tsZx;I&t@{4gL-O*MJ89YoNm)`n68n zeYVX7a9TMsIodM{4Y4vq0oVWn0O>yfHUM^u3jmxQzhLpW!~cZm9~f#B6JAy>0Cn}! z`N=SVV&p%LKe9BOoWFE+k*kjA%#;q9l~S$*Dy5hy{jvnoFI@!WudB-d literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..44dfd4d6ec2222358c2c989e71b374ac12dd64b3 GIT binary patch literal 7900 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 Gk~uLpt4 + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..473518b --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,8 @@ + + + #FF000000 + #FFFFFFFF + #FF639F70 + #FFF5F5F5 + #FF2D2D2D + \ No newline at end of file diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml new file mode 100644 index 0000000..1949563 --- /dev/null +++ b/app/src/main/res/values/ic_launcher_background.xml @@ -0,0 +1,4 @@ + + + #FF639F70 + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..c3f801c --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + __APP_NAME__ + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..d4a63ca --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,12 @@ + + + + +