├── .github └── workflows │ └── android-ci.yml ├── .gitignore ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── example │ │ └── leannumbersnav │ │ └── ExampleInstrumentedTest.kt │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ ├── el │ │ │ ├── digits │ │ │ │ ├── _0.mp3 │ │ │ │ ├── _1.mp3 │ │ │ │ ├── _2.mp3 │ │ │ │ ├── _3.mp3 │ │ │ │ ├── _4.mp3 │ │ │ │ ├── _5.mp3 │ │ │ │ ├── _6.mp3 │ │ │ │ ├── _7.mp3 │ │ │ │ ├── _8.mp3 │ │ │ │ └── _9.mp3 │ │ │ ├── success │ │ │ │ ├── _0.mp3 │ │ │ │ └── _1.mp3 │ │ │ └── wrong │ │ │ │ └── _0.mp3 │ │ ├── en │ │ │ ├── digits │ │ │ │ ├── _0.mp3 │ │ │ │ ├── _1.mp3 │ │ │ │ ├── _2.mp3 │ │ │ │ ├── _3.mp3 │ │ │ │ ├── _4.mp3 │ │ │ │ ├── _5.mp3 │ │ │ │ ├── _6.mp3 │ │ │ │ ├── _7.mp3 │ │ │ │ ├── _8.mp3 │ │ │ │ └── _9.mp3 │ │ │ ├── success │ │ │ │ ├── _0.mp3 │ │ │ │ └── _1.mp3 │ │ │ └── wrong │ │ │ │ └── _0.mp3 │ │ ├── nl │ │ │ ├── digits │ │ │ │ ├── _0.mp3 │ │ │ │ ├── _1.mp3 │ │ │ │ ├── _2.mp3 │ │ │ │ ├── _3.mp3 │ │ │ │ ├── _4.mp3 │ │ │ │ ├── _5.mp3 │ │ │ │ ├── _6.mp3 │ │ │ │ ├── _7.mp3 │ │ │ │ ├── _8.mp3 │ │ │ │ └── _9.mp3 │ │ │ ├── success │ │ │ │ ├── _0.mp3 │ │ │ │ ├── _1.mp3 │ │ │ │ ├── _2.mp3 │ │ │ │ └── _3.mp3 │ │ │ └── wrong │ │ │ │ ├── _0.mp3 │ │ │ │ └── _1.mp3 │ │ ├── pl │ │ │ ├── digits │ │ │ │ ├── _0.mp3 │ │ │ │ ├── _1.mp3 │ │ │ │ ├── _2.mp3 │ │ │ │ ├── _3.mp3 │ │ │ │ ├── _4.mp3 │ │ │ │ ├── _5.mp3 │ │ │ │ ├── _6.mp3 │ │ │ │ ├── _7.mp3 │ │ │ │ ├── _8.mp3 │ │ │ │ └── _9.mp3 │ │ │ ├── success │ │ │ │ ├── _0.mp3 │ │ │ │ └── _1.mp3 │ │ │ └── wrong │ │ │ │ └── _0.mp3 │ │ └── uk │ │ │ ├── digits │ │ │ ├── _0.mp3 │ │ │ ├── _1.mp3 │ │ │ ├── _2.mp3 │ │ │ ├── _3.mp3 │ │ │ ├── _4.mp3 │ │ │ ├── _5.mp3 │ │ │ ├── _6.mp3 │ │ │ ├── _7.mp3 │ │ │ ├── _8.mp3 │ │ │ └── _9.mp3 │ │ │ ├── success │ │ │ ├── _0.mp3 │ │ │ ├── _1.mp3 │ │ │ └── _2.mp3 │ │ │ └── wrong │ │ │ └── _0.mp3 │ ├── ic_launcher-playstore.png │ ├── java │ │ └── eu │ │ │ └── mokrzycki │ │ │ └── learndigits │ │ │ ├── MainActivity.kt │ │ │ └── ui │ │ │ ├── about │ │ │ └── AboutFragment.kt │ │ │ ├── exit │ │ │ └── ExitFragment.kt │ │ │ ├── game │ │ │ ├── GameFragment.kt │ │ │ ├── GameViewModel.kt │ │ │ ├── GameViewModelFactory.kt │ │ │ ├── SimpleAnimatorListener.kt │ │ │ └── SingleLiveEvent.kt │ │ │ └── home │ │ │ ├── HomeFragment.kt │ │ │ └── HomeViewModel.kt │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ ├── circle_button.xml │ │ ├── ic_baseline_info_24.xml │ │ ├── ic_home_black_24dp.xml │ │ ├── ic_launcher_background.xml │ │ ├── ic_link_external.xml │ │ ├── ic_logo_github.xml │ │ ├── ic_notifications_black_24dp.xml │ │ ├── ic_plant_48dp.xml │ │ ├── ripple.xml │ │ └── rounded_top.xml │ │ ├── layout │ │ ├── activity_main.xml │ │ ├── fragment_about.xml │ │ ├── fragment_exit.xml │ │ ├── fragment_game.xml │ │ └── fragment_home.xml │ │ ├── menu │ │ └── bottom_nav_menu.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ ├── ic_launcher_foreground.png │ │ └── ic_launcher_round.png │ │ ├── navigation │ │ └── mobile_navigation.xml │ │ ├── raw │ │ ├── background_screen.json │ │ ├── fern.json │ │ ├── forest.json │ │ ├── gradient_animated_background.json │ │ ├── plant.json │ │ ├── play.json │ │ └── success.json │ │ ├── values-el │ │ └── strings.xml │ │ ├── values-night │ │ └── themes.xml │ │ ├── values-nl │ │ └── strings.xml │ │ ├── values-pl │ │ └── strings.xml │ │ ├── values-uk │ │ └── strings.xml │ │ ├── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── themes.xml │ │ └── xml │ │ ├── backup_rules.xml │ │ └── data_extraction_rules.xml │ └── test │ └── java │ └── com │ └── example │ └── leannumbersnav │ └── ExampleUnitTest.kt ├── build.gradle ├── fastlane └── metadata │ └── android │ ├── en-US │ ├── changelogs │ │ ├── 3.txt │ │ ├── 4.txt │ │ ├── 5.txt │ │ ├── 6.txt │ │ ├── 7.txt │ │ └── 8.txt │ ├── full_description.txt │ ├── images │ │ ├── icon.png │ │ └── phoneScreenshots │ │ │ ├── 1.png │ │ │ ├── 2.png │ │ │ └── 3.png │ ├── short_description.txt │ └── title.txt │ ├── nl │ ├── changelogs │ │ ├── 3.txt │ │ ├── 4.txt │ │ ├── 5.txt │ │ ├── 6.txt │ │ ├── 7.txt │ │ └── 8.txt │ ├── full_description.txt │ ├── images │ │ ├── icon.png │ │ └── phoneScreenshots │ │ │ ├── 1.png │ │ │ ├── 2.png │ │ │ └── 3.png │ ├── short_description.txt │ └── title.txt │ ├── pl │ ├── changelogs │ │ ├── 3.txt │ │ ├── 4.txt │ │ ├── 5.txt │ │ ├── 6.txt │ │ ├── 7.txt │ │ └── 8.txt │ ├── full_description.txt │ ├── images │ │ ├── icon.png │ │ └── phoneScreenshots │ │ │ ├── 1.png │ │ │ ├── 2.png │ │ │ └── 3.png │ ├── short_description.txt │ └── title.txt │ └── uk │ ├── changelogs │ ├── 3.txt │ ├── 4.txt │ ├── 5.txt │ ├── 6.txt │ ├── 7.txt │ └── 8.txt │ ├── full_description.txt │ ├── images │ ├── icon.png │ └── phoneScreenshots │ │ ├── 1.png │ │ ├── 2.png │ │ └── 3.png │ ├── short_description.txt │ └── title.txt ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── preview ├── en │ └── preview.gif └── pl │ └── preview.gif ├── resources ├── lottie │ ├── forest.json │ ├── links.txt │ ├── plant.json │ └── play.json ├── original_cover.png ├── original_cover_circle.png └── original_cover_circle_profiled.png └── settings.gradle /.github/workflows/android-ci.yml: -------------------------------------------------------------------------------- 1 | name: Build Signed APK 2 | 3 | on: 4 | create: 5 | tags: 6 | - "*" 7 | 8 | jobs: 9 | build: 10 | name: Build 11 | runs-on: ubuntu-latest 12 | permissions: 13 | contents: write 14 | repository-projects: write 15 | 16 | steps: 17 | - name: Checkout code 18 | uses: actions/checkout@v3 19 | 20 | - name: Set Up JDK 21 | uses: actions/setup-java@v3 22 | with: 23 | distribution: 'adopt' 24 | java-version: 17 25 | 26 | - name: Assemble Release 27 | run: ./gradlew clean assembleRelease 28 | 29 | - name: Sign Release 30 | uses: r0adkll/sign-android-release@v1 31 | id: sign_release 32 | with: 33 | releaseDirectory: app/build/outputs/apk/release 34 | signingKeyBase64: ${{ secrets.SIGNING_KEY }} 35 | alias: ${{ secrets.ALIAS }} 36 | keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} 37 | keyPassword: ${{ secrets.KEY_PASSWORD }} 38 | env: 39 | BUILD_TOOLS_VERSION: "34.0.0" 40 | 41 | - name: Verify APK 42 | run: ls -l app/build/outputs/apk/release/ 43 | 44 | - name: Rename APK 45 | run: mv ${{steps.sign_release.outputs.signedReleaseFile}} app/build/outputs/apk/release/${{ github.event.repository.name }}.apk 46 | 47 | - name: Verify APK (2) 48 | run: ls -l app/build/outputs/apk/release/ 49 | 50 | - name: Create Release 51 | id: create_release 52 | uses: actions/create-release@v1.1.1 53 | env: 54 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 55 | with: 56 | tag_name: '${{ github.ref_name}}' 57 | release_name: '${{ github.ref_name}}' 58 | draft: false 59 | 60 | - name: Upload APK Universal Asset 61 | id: upload-release-asset-universal-apk 62 | uses: actions/upload-release-asset@v1.0.2 63 | env: 64 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 65 | with: 66 | upload_url: '${{ steps.create_release.outputs.upload_url }}' 67 | asset_path: app/build/outputs/apk/release/${{ github.event.repository.name }}.apk 68 | asset_name: '${{ github.event.repository.name }}.apk' 69 | asset_content_type: application/zip 70 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Gradle files 2 | .gradle/ 3 | build/ 4 | 5 | # Local configuration file (sdk path, etc) 6 | local.properties 7 | 8 | # Log/OS Files 9 | *.log 10 | 11 | # Android Studio generated files and folders 12 | captures/ 13 | .externalNativeBuild/ 14 | .cxx/ 15 | *.apk 16 | output.json 17 | 18 | # IntelliJ 19 | *.iml 20 | .idea/ 21 | misc.xml 22 | deploymentTargetDropDown.xml 23 | render.experimental.xml 24 | 25 | # Keystore files 26 | *.jks 27 | *.keystore 28 | 29 | # Allow to store debug keystore 30 | !debug.keystore 31 | 32 | # Google Services (e.g. APIs or Firebase) 33 | google-services.json 34 | 35 | # Android Profiling 36 | *.hprof 37 | .DS_Store 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | Logo 3 |

4 | 5 |

6 | App's latest release 7 | GitHub contributors 8 |

9 |

10 | GitHub pull requests 11 | GitHub issues 12 |

13 | 14 | --- 15 | 16 | # Digits 17 | 18 | Here's our new app dedicated to children, allowing them to learn numbers in an interactive and fun way! Children listen to the instruction and choose the corresponding digit from 0 to 9. Upon a correct answer, a beautiful plant grows! 19 | 20 | ## Contributing 21 | 22 | Any contributions will be greatly appreciated. 23 | 24 | ## Languages & voices currently supported 25 | 26 | | Language | Supporter | Voice | 27 | |:---:|:---:|:---:| 28 | | 🇵🇱 | Magdalena M. | female | 29 | | 🇺🇸 | Magdalena M. | female | 30 | | 🇬🇷 | @VasilisKos | male | 31 | | 🇺🇦 | Alina N. | female | 32 | | 🇳🇱 | @Poussinou | male | 33 | 34 | ## Preview 35 | 36 |

37 | preview 38 |

39 | 40 | ## Download 41 | 42 | [Get it on F-Droid](https://f-droid.org/packages/eu.mokrzycki.learndigits/) 45 | 46 | Or download the latest APK from the [Releases Section](https://github.com/foxtrotdev/learn-digits/releases/latest). 47 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | id 'org.jetbrains.kotlin.android' 4 | } 5 | 6 | android { 7 | namespace 'eu.mokrzycki.learndigits' 8 | compileSdk 34 9 | 10 | defaultConfig { 11 | applicationId "eu.mokrzycki.learndigits" 12 | minSdk 24 13 | targetSdk 34 14 | versionCode 8 15 | versionName "1.0.7" 16 | 17 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 18 | } 19 | 20 | buildTypes { 21 | release { 22 | minifyEnabled false 23 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 24 | } 25 | } 26 | 27 | compileOptions { 28 | sourceCompatibility JavaVersion.VERSION_11 29 | targetCompatibility JavaVersion.VERSION_11 30 | } 31 | 32 | kotlinOptions { 33 | jvmTarget = '11' 34 | } 35 | 36 | buildFeatures { 37 | viewBinding true 38 | buildConfig true 39 | } 40 | } 41 | 42 | dependencies { 43 | implementation 'androidx.appcompat:appcompat:1.6.1' 44 | implementation 'androidx.constraintlayout:constraintlayout:2.1.4' 45 | implementation 'androidx.core:core-ktx:1.10.1' 46 | implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1' 47 | implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1' 48 | implementation 'androidx.navigation:navigation-fragment-ktx:2.6.0' 49 | implementation 'androidx.navigation:navigation-ui-ktx:2.6.0' 50 | 51 | implementation 'com.airbnb.android:lottie:6.0.0' 52 | implementation "com.backbase.oss.deferredresources:deferred-resources:1.6.1" 53 | implementation 'com.google.android.material:material:1.9.0' 54 | 55 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' 56 | androidTestImplementation 'androidx.test.ext:junit:1.1.5' 57 | 58 | testImplementation 'junit:junit:4.13.2' 59 | } -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /app/src/androidTest/java/com/example/leannumbersnav/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package eu.mokrzycki.learndigits 2 | 3 | import androidx.test.platform.app.InstrumentationRegistry 4 | import androidx.test.ext.junit.runners.AndroidJUnit4 5 | 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | import org.junit.Assert.* 10 | 11 | /** 12 | * Instrumented test, which will execute on an Android device. 13 | * 14 | * See [testing documentation](http://d.android.com/tools/testing). 15 | */ 16 | @RunWith(AndroidJUnit4::class) 17 | class ExampleInstrumentedTest { 18 | @Test 19 | fun useAppContext() { 20 | // Context of the app under test. 21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 22 | assertEquals("eu.mokrzycki.learndigits", appContext.packageName) 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 16 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /app/src/main/assets/el/digits/_0.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/el/digits/_0.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/el/digits/_1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/el/digits/_1.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/el/digits/_2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/el/digits/_2.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/el/digits/_3.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/el/digits/_3.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/el/digits/_4.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/el/digits/_4.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/el/digits/_5.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/el/digits/_5.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/el/digits/_6.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/el/digits/_6.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/el/digits/_7.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/el/digits/_7.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/el/digits/_8.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/el/digits/_8.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/el/digits/_9.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/el/digits/_9.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/el/success/_0.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/el/success/_0.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/el/success/_1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/el/success/_1.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/el/wrong/_0.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/el/wrong/_0.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/en/digits/_0.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/en/digits/_0.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/en/digits/_1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/en/digits/_1.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/en/digits/_2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/en/digits/_2.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/en/digits/_3.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/en/digits/_3.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/en/digits/_4.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/en/digits/_4.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/en/digits/_5.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/en/digits/_5.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/en/digits/_6.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/en/digits/_6.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/en/digits/_7.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/en/digits/_7.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/en/digits/_8.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/en/digits/_8.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/en/digits/_9.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/en/digits/_9.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/en/success/_0.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/en/success/_0.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/en/success/_1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/en/success/_1.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/en/wrong/_0.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/en/wrong/_0.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/nl/digits/_0.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/nl/digits/_0.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/nl/digits/_1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/nl/digits/_1.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/nl/digits/_2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/nl/digits/_2.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/nl/digits/_3.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/nl/digits/_3.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/nl/digits/_4.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/nl/digits/_4.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/nl/digits/_5.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/nl/digits/_5.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/nl/digits/_6.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/nl/digits/_6.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/nl/digits/_7.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/nl/digits/_7.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/nl/digits/_8.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/nl/digits/_8.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/nl/digits/_9.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/nl/digits/_9.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/nl/success/_0.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/nl/success/_0.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/nl/success/_1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/nl/success/_1.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/nl/success/_2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/nl/success/_2.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/nl/success/_3.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/nl/success/_3.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/nl/wrong/_0.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/nl/wrong/_0.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/nl/wrong/_1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/nl/wrong/_1.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/pl/digits/_0.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/pl/digits/_0.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/pl/digits/_1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/pl/digits/_1.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/pl/digits/_2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/pl/digits/_2.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/pl/digits/_3.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/pl/digits/_3.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/pl/digits/_4.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/pl/digits/_4.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/pl/digits/_5.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/pl/digits/_5.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/pl/digits/_6.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/pl/digits/_6.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/pl/digits/_7.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/pl/digits/_7.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/pl/digits/_8.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/pl/digits/_8.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/pl/digits/_9.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/pl/digits/_9.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/pl/success/_0.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/pl/success/_0.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/pl/success/_1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/pl/success/_1.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/pl/wrong/_0.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/pl/wrong/_0.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/uk/digits/_0.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/uk/digits/_0.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/uk/digits/_1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/uk/digits/_1.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/uk/digits/_2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/uk/digits/_2.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/uk/digits/_3.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/uk/digits/_3.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/uk/digits/_4.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/uk/digits/_4.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/uk/digits/_5.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/uk/digits/_5.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/uk/digits/_6.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/uk/digits/_6.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/uk/digits/_7.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/uk/digits/_7.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/uk/digits/_8.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/uk/digits/_8.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/uk/digits/_9.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/uk/digits/_9.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/uk/success/_0.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/uk/success/_0.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/uk/success/_1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/uk/success/_1.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/uk/success/_2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/uk/success/_2.mp3 -------------------------------------------------------------------------------- /app/src/main/assets/uk/wrong/_0.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/assets/uk/wrong/_0.mp3 -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/java/eu/mokrzycki/learndigits/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package eu.mokrzycki.learndigits 2 | 3 | import android.os.Bundle 4 | import androidx.appcompat.app.AppCompatActivity 5 | import androidx.navigation.findNavController 6 | import androidx.navigation.ui.AppBarConfiguration 7 | import androidx.navigation.ui.setupActionBarWithNavController 8 | import androidx.navigation.ui.setupWithNavController 9 | import com.google.android.material.bottomnavigation.BottomNavigationView 10 | import eu.mokrzycki.learndigits.databinding.ActivityMainBinding 11 | 12 | class MainActivity : AppCompatActivity() { 13 | 14 | private lateinit var binding: ActivityMainBinding 15 | 16 | override fun onCreate(savedInstanceState: Bundle?) { 17 | super.onCreate(savedInstanceState) 18 | 19 | binding = ActivityMainBinding.inflate(layoutInflater) 20 | setContentView(binding.root) 21 | 22 | val navView: BottomNavigationView = binding.navView 23 | 24 | val navController = findNavController(R.id.nav_host_fragment_activity_main) 25 | val appBarConfiguration = AppBarConfiguration( 26 | setOf( 27 | R.id.navigation_home, 28 | R.id.navigation_plant, 29 | R.id.navigation_about 30 | ) 31 | ) 32 | 33 | supportActionBar?.let { 34 | setupActionBarWithNavController(navController, appBarConfiguration) 35 | } 36 | 37 | navView.setupWithNavController(navController) 38 | } 39 | } -------------------------------------------------------------------------------- /app/src/main/java/eu/mokrzycki/learndigits/ui/about/AboutFragment.kt: -------------------------------------------------------------------------------- 1 | package eu.mokrzycki.learndigits.ui.about 2 | 3 | import android.content.Intent 4 | import android.net.Uri 5 | import android.os.Bundle 6 | import android.view.LayoutInflater 7 | import android.view.View 8 | import android.view.ViewGroup 9 | import androidx.fragment.app.Fragment 10 | import eu.mokrzycki.learndigits.BuildConfig 11 | import eu.mokrzycki.learndigits.databinding.FragmentAboutBinding 12 | import java.util.Locale 13 | 14 | 15 | class AboutFragment : Fragment() { 16 | 17 | private var _binding: FragmentAboutBinding? = null 18 | 19 | private val binding get() = _binding!! 20 | 21 | override fun onCreateView( 22 | inflater: LayoutInflater, 23 | container: ViewGroup?, 24 | savedInstanceState: Bundle?, 25 | ): View { 26 | _binding = FragmentAboutBinding.inflate(inflater, container, false) 27 | return binding.root 28 | } 29 | 30 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 31 | binding.aboutVersion.text = String.format( 32 | Locale.getDefault(), 33 | getString(eu.mokrzycki.learndigits.R.string.about_version), 34 | BuildConfig.VERSION_NAME 35 | ) 36 | 37 | binding.aboutSource.setOnClickListener { 38 | val intent = Intent() 39 | .setAction(Intent.ACTION_VIEW) 40 | .setData(Uri.parse("https://github.com/foxtrotdev/learn-digits")) 41 | 42 | startActivity(intent) 43 | } 44 | } 45 | 46 | override fun onDestroyView() { 47 | super.onDestroyView() 48 | _binding = null 49 | } 50 | } -------------------------------------------------------------------------------- /app/src/main/java/eu/mokrzycki/learndigits/ui/exit/ExitFragment.kt: -------------------------------------------------------------------------------- 1 | package eu.mokrzycki.learndigits.ui.exit 2 | 3 | import android.os.Bundle 4 | import android.view.LayoutInflater 5 | import android.view.View 6 | import android.view.ViewGroup 7 | import androidx.fragment.app.Fragment 8 | import eu.mokrzycki.learndigits.databinding.FragmentExitBinding 9 | import kotlin.system.exitProcess 10 | 11 | class ExitFragment : Fragment() { 12 | 13 | private var _binding: FragmentExitBinding? = null 14 | 15 | private val binding get() = _binding!! 16 | 17 | override fun onCreateView( 18 | inflater: LayoutInflater, 19 | container: ViewGroup?, 20 | savedInstanceState: Bundle?, 21 | ): View { 22 | _binding = FragmentExitBinding.inflate(inflater, container, false) 23 | return binding.root 24 | } 25 | 26 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 27 | exitProcess(0) 28 | } 29 | 30 | override fun onDestroyView() { 31 | super.onDestroyView() 32 | _binding = null 33 | } 34 | } -------------------------------------------------------------------------------- /app/src/main/java/eu/mokrzycki/learndigits/ui/game/GameFragment.kt: -------------------------------------------------------------------------------- 1 | package eu.mokrzycki.learndigits.ui.game 2 | 3 | import android.content.Context 4 | import android.content.res.AssetManager 5 | import android.os.Bundle 6 | import android.os.Vibrator 7 | import android.view.LayoutInflater 8 | import android.view.View 9 | import android.view.ViewGroup 10 | import androidx.fragment.app.Fragment 11 | import androidx.lifecycle.ViewModelProvider 12 | import eu.mokrzycki.learndigits.R 13 | import eu.mokrzycki.learndigits.databinding.FragmentGameBinding 14 | 15 | 16 | class GameFragment : Fragment() { 17 | 18 | private var _binding: FragmentGameBinding? = null 19 | 20 | private val binding get() = _binding!! 21 | 22 | private val assetManager: AssetManager by lazy { 23 | requireContext().assets 24 | } 25 | 26 | private val vibrator: Vibrator by lazy { 27 | requireActivity().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator 28 | } 29 | 30 | private val lang by lazy { 31 | requireContext().resources.getString(R.string.assets_folder_lang) 32 | } 33 | 34 | private val gameViewModel by lazy { 35 | ViewModelProvider( 36 | this, 37 | GameViewModelFactory(assetManager, vibrator) 38 | )[GameViewModel::class.java] 39 | } 40 | 41 | override fun onCreateView( 42 | inflater: LayoutInflater, 43 | container: ViewGroup?, 44 | savedInstanceState: Bundle?, 45 | ): View { 46 | _binding = FragmentGameBinding.inflate(inflater, container, false) 47 | return binding.root 48 | } 49 | 50 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 51 | gameViewModel.plantPlayAnimation(binding) 52 | gameViewModel.setUpPlayClickListener(binding, lang) 53 | } 54 | 55 | override fun onDestroyView() { 56 | super.onDestroyView() 57 | _binding = null 58 | } 59 | 60 | companion object { 61 | private const val TAG = "GameFragment" 62 | } 63 | } -------------------------------------------------------------------------------- /app/src/main/java/eu/mokrzycki/learndigits/ui/game/GameViewModel.kt: -------------------------------------------------------------------------------- 1 | package eu.mokrzycki.learndigits.ui.game 2 | 3 | import android.animation.Animator 4 | import android.animation.ValueAnimator 5 | import android.content.res.AssetFileDescriptor 6 | import android.content.res.AssetManager 7 | import android.graphics.Color 8 | import android.media.MediaPlayer 9 | import android.os.Handler 10 | import android.os.Vibrator 11 | import android.util.Log 12 | import androidx.core.view.forEach 13 | import androidx.core.view.isVisible 14 | import androidx.lifecycle.ViewModel 15 | import com.google.android.material.button.MaterialButton 16 | import eu.mokrzycki.learndigits.R 17 | import eu.mokrzycki.learndigits.databinding.FragmentGameBinding 18 | import java.io.IOException 19 | import kotlin.random.Random 20 | 21 | class GameViewModel( 22 | private val assetManager: AssetManager, 23 | private val vibrator: Vibrator, 24 | ) : ViewModel() { 25 | 26 | private val growDuration = 400L 27 | private var selectedSoundDigit = 0 28 | private var selectedSoundWrong = 0 29 | private var selectedSoundSuccess = 0 30 | 31 | private fun setNullToButtonsOnClickListeners(fragmentGameBinding: FragmentGameBinding) { 32 | fragmentGameBinding.buttonsContainer.forEach { view -> 33 | if (view is MaterialButton) { 34 | view.setOnClickListener(null) 35 | } 36 | } 37 | } 38 | 39 | private fun hideLottiePlay(fragmentGameBinding: FragmentGameBinding) { 40 | fragmentGameBinding.lottiePlay.translationX = fragmentGameBinding.root.width.toFloat() 41 | } 42 | 43 | private fun setPlayContainerVisibility( 44 | fragmentGameBinding: FragmentGameBinding, 45 | startValue: Int, 46 | endValue: Int, 47 | onAnimationFinished: (() -> Unit)? = null, 48 | ) { 49 | val view = fragmentGameBinding.playContainer 50 | val context = view.context 51 | 52 | val alphaAnimator = ValueAnimator.ofInt(startValue, endValue) 53 | alphaAnimator.duration = 1000 54 | 55 | alphaAnimator.addUpdateListener { animator -> 56 | val alpha = animator.animatedValue as Int 57 | val initialColor2 = context.getColor(R.color.forest_green) 58 | 59 | view.setBackgroundColor( 60 | Color.argb( 61 | alpha, 62 | Color.red(initialColor2), 63 | Color.green(initialColor2), 64 | Color.blue(initialColor2) 65 | ) 66 | ) 67 | 68 | if (animator.animatedValue == endValue) { 69 | onAnimationFinished?.invoke() 70 | } 71 | } 72 | 73 | alphaAnimator.start() 74 | } 75 | 76 | private fun resetLottiePlantProperties(fragmentGameBinding: FragmentGameBinding) { 77 | fragmentGameBinding.lottiePlant.progress = 0f 78 | fragmentGameBinding.lottiePlant.speed = 1f 79 | } 80 | 81 | private fun setButtonsOnClickListeners( 82 | fragmentGameBinding: FragmentGameBinding, 83 | action: (Int) -> Unit, 84 | ) { 85 | fragmentGameBinding.buttonsContainer.forEach { 86 | if (it is MaterialButton) { 87 | it.setOnClickListener { view -> 88 | action.invoke((view.tag as String).toInt()) 89 | } 90 | } 91 | } 92 | } 93 | 94 | private fun setButtonsClickable(fragmentGameBinding: FragmentGameBinding, clickable: Boolean) { 95 | fragmentGameBinding.buttonsContainer.forEach { 96 | if (it is MaterialButton) { 97 | it.isClickable = clickable 98 | } 99 | } 100 | } 101 | 102 | private fun vibrate() { 103 | if (vibrator.hasVibrator()) { 104 | vibrator.vibrate(50) 105 | } 106 | } 107 | 108 | private fun playPlantAnimation( 109 | fragmentGameBinding: FragmentGameBinding, 110 | speed: Float, 111 | onAnimationComplete: (Float) -> Unit, 112 | ) { 113 | // Prevent plant to shrink if the plant hasn't grown yet 114 | if (fragmentGameBinding.lottiePlant.progress == 0f && speed == -1f) { 115 | onAnimationComplete.invoke(fragmentGameBinding.lottiePlant.progress) 116 | return 117 | } 118 | 119 | when (fragmentGameBinding.lottiePlant.progress) { 120 | 0f -> { 121 | fragmentGameBinding.lottiePlant.speed = speed 122 | fragmentGameBinding.lottiePlant.playAnimation() 123 | pauseGrowDelayed(fragmentGameBinding, onAnimationComplete, growDuration) 124 | } 125 | 126 | else -> { 127 | fragmentGameBinding.lottiePlant.speed = speed 128 | fragmentGameBinding.lottiePlant.resumeAnimation() 129 | pauseGrowDelayed(fragmentGameBinding, onAnimationComplete, growDuration) 130 | } 131 | } 132 | } 133 | 134 | private fun pauseGrowDelayed( 135 | fragmentGameBinding: FragmentGameBinding, 136 | onAnimationComplete: (Float) -> Unit, 137 | delayed: Long, 138 | ) { 139 | Handler().postDelayed({ 140 | fragmentGameBinding.lottiePlant.pauseAnimation() 141 | onAnimationComplete.invoke(fragmentGameBinding.lottiePlant.progress) 142 | }, delayed) 143 | } 144 | 145 | private fun revertPlayPlantAnimation( 146 | fragmentGameBinding: FragmentGameBinding, onAnimationEnd: () -> Unit, 147 | ) { 148 | fragmentGameBinding.lottiePlant.speed = -2f 149 | fragmentGameBinding.lottiePlant.resumeAnimation() 150 | 151 | fragmentGameBinding.lottiePlant.addAnimatorListener(object : SimpleAnimatorListener() { 152 | override fun onAnimationEnd(animation: Animator) { 153 | onAnimationEnd.invoke() 154 | 155 | fragmentGameBinding.lottiePlant.removeAllAnimatorListeners() 156 | } 157 | }) 158 | } 159 | 160 | private fun selectRandomDigit(lang: String) { 161 | val path = "$lang/digits" 162 | Log.d(TAG, "selectRandomDigit: path:$path") 163 | val list = assetManager.list(path) 164 | val files = list.orEmpty() 165 | Log.d(TAG, "selectRandomDigit: list:${files.map { it.toString() }}") 166 | selectedSoundDigit = Random.Default.nextInt(files.size) 167 | } 168 | 169 | private fun selectRandomSoundWrong(lang: String) { 170 | val path = "$lang/wrong" 171 | Log.d(TAG, "selectRandomSoundWrong: path:$path") 172 | val list = assetManager.list(path) 173 | val files = list.orEmpty() 174 | Log.d(TAG, "selectRandomSoundWrong: list:${files.map { it.toString() }}") 175 | selectedSoundWrong = Random.Default.nextInt(files.size) 176 | } 177 | 178 | private fun selectRandomSoundSuccess(lang: String) { 179 | val path = "$lang/success" 180 | Log.d(TAG, "selectRandomSoundSuccess: path:$path") 181 | val list = assetManager.list(path) 182 | val files = list.orEmpty() 183 | Log.d(TAG, "selectRandomSoundSuccess: list:${files.map { it.toString() }}") 184 | selectedSoundSuccess = Random.Default.nextInt(files.size) 185 | } 186 | 187 | private fun askForDigit( 188 | digit: Int, 189 | lang: String, 190 | onCompletionListener: (() -> Unit)? = null, 191 | ) { 192 | try { 193 | val afd = assetManager.openFd("$lang/digits/_$digit.mp3") 194 | playSound(afd, onCompletionListener) 195 | } catch (e: IOException) { 196 | e.printStackTrace() 197 | } 198 | } 199 | 200 | private fun playSoundWrong( 201 | digit: Int, 202 | lang: String, 203 | onPlayComplete: (() -> Unit)? = null, 204 | ) { 205 | try { 206 | val afd = assetManager.openFd("$lang/wrong/_$digit.mp3") 207 | playSound(afd, onPlayComplete) 208 | } catch (e: IOException) { 209 | e.printStackTrace() 210 | } 211 | } 212 | 213 | private fun playSound( 214 | afd: AssetFileDescriptor, 215 | onCompletionListener: (() -> Unit)?, 216 | ) { 217 | MediaPlayer().apply { 218 | setDataSource(afd.fileDescriptor, afd.startOffset, afd.length) 219 | prepare() 220 | start() 221 | setOnCompletionListener { 222 | onCompletionListener?.invoke() 223 | 224 | it.stop() 225 | it.release() 226 | } 227 | } 228 | } 229 | 230 | private fun playSoundSuccess( 231 | digit: Int, 232 | lang: String, 233 | onCompletionListener: (() -> Unit)? = null, 234 | ) { 235 | try { 236 | val afd = assetManager.openFd("$lang/success/_$digit.mp3") 237 | playSound(afd, onCompletionListener) 238 | } catch (e: IOException) { 239 | e.printStackTrace() 240 | } 241 | } 242 | 243 | private fun onContinueGame(fragmentGameBinding: FragmentGameBinding, language: String) { 244 | setButtonsClickable(fragmentGameBinding, false) 245 | selectRandomDigit(language) 246 | askForDigit(selectedSoundDigit, language) { 247 | setButtonsClickable(fragmentGameBinding, true) 248 | } 249 | } 250 | 251 | private fun onStartGame(fragmentGameBinding: FragmentGameBinding, language: String) { 252 | setNullToButtonsOnClickListeners(fragmentGameBinding) 253 | hideLottiePlay(fragmentGameBinding) 254 | setPlayContainerVisibility(fragmentGameBinding, 255, 0) { 255 | fragmentGameBinding.playContainer.isVisible = false 256 | } 257 | 258 | revertPlayPlantAnimation(fragmentGameBinding) { 259 | resetLottiePlantProperties(fragmentGameBinding) 260 | 261 | val action: (Int) -> Unit = { idTag -> 262 | setButtonsClickable(fragmentGameBinding, false) 263 | vibrate() 264 | 265 | if (idTag != selectedSoundDigit) { 266 | selectRandomSoundWrong(language) 267 | playSoundWrong(selectedSoundWrong, 268 | language, onPlayComplete = { 269 | playPlantAnimation(fragmentGameBinding, -1f) { 270 | onContinueGame(fragmentGameBinding, language) 271 | } 272 | }) 273 | } else { 274 | playPlantAnimation(fragmentGameBinding, 1f) { progress -> 275 | if (progress == 1f) { 276 | onFinishGame(fragmentGameBinding, language) 277 | } else { 278 | onContinueGame(fragmentGameBinding, language) 279 | } 280 | } 281 | } 282 | } 283 | 284 | setButtonsOnClickListeners(fragmentGameBinding, action) 285 | 286 | onContinueGame(fragmentGameBinding, language) 287 | } 288 | } 289 | 290 | private fun onFinishGame(fragmentGameBinding: FragmentGameBinding, language: String) { 291 | // #1 292 | selectRandomSoundSuccess(language) 293 | playSoundSuccess(selectedSoundSuccess, language) 294 | 295 | // #2 296 | fragmentGameBinding.playContainer.isVisible = true 297 | setPlayContainerVisibility(fragmentGameBinding, 0, 255) 298 | 299 | // #3 300 | fragmentGameBinding.lottieAnimationSuccess.translationX = 0f 301 | fragmentGameBinding.lottieAnimationSuccess.addAnimatorListener(object : 302 | SimpleAnimatorListener() { 303 | override fun onAnimationEnd(animation: Animator) { 304 | // #5 305 | hideLottieAnimationSuccess(fragmentGameBinding) 306 | 307 | // #6 308 | fragmentGameBinding.lottiePlay.translationX = 0f 309 | fragmentGameBinding.lottiePlay.loop(true) 310 | fragmentGameBinding.lottiePlay.playAnimation() 311 | 312 | fragmentGameBinding.lottieAnimationSuccess.removeAllAnimatorListeners() 313 | } 314 | }) 315 | 316 | // #4 317 | fragmentGameBinding.lottieAnimationSuccess.playAnimation() 318 | } 319 | 320 | private fun hideLottieAnimationSuccess(fragmentGameBinding: FragmentGameBinding) { 321 | fragmentGameBinding.lottieAnimationSuccess.translationX = 322 | fragmentGameBinding.root.width.toFloat() 323 | } 324 | 325 | fun setUpPlayClickListener(fragmentGameBinding: FragmentGameBinding, language: String) { 326 | fragmentGameBinding.lottiePlay.setOnClickListener { 327 | onStartGame(fragmentGameBinding, language) 328 | } 329 | } 330 | 331 | fun plantPlayAnimation(fragmentGameBinding: FragmentGameBinding) { 332 | fragmentGameBinding.lottiePlant.playAnimation() 333 | } 334 | 335 | companion object { 336 | private const val TAG = "GameViewModel" 337 | } 338 | 339 | } -------------------------------------------------------------------------------- /app/src/main/java/eu/mokrzycki/learndigits/ui/game/GameViewModelFactory.kt: -------------------------------------------------------------------------------- 1 | package eu.mokrzycki.learndigits.ui.game 2 | 3 | import android.content.res.AssetManager 4 | import android.os.Vibrator 5 | import androidx.lifecycle.ViewModel 6 | import androidx.lifecycle.ViewModelProvider 7 | 8 | class GameViewModelFactory(private val assetManager: AssetManager, private val vibrator : Vibrator) : ViewModelProvider.Factory { 9 | 10 | @Suppress("UNCHECKED_CAST") 11 | override fun create(modelClass: Class): T { 12 | if (modelClass.isAssignableFrom(GameViewModel::class.java)) { 13 | return GameViewModel(assetManager, vibrator) as T 14 | } 15 | throw IllegalArgumentException("Unknown ViewModel class") 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/main/java/eu/mokrzycki/learndigits/ui/game/SimpleAnimatorListener.kt: -------------------------------------------------------------------------------- 1 | package eu.mokrzycki.learndigits.ui.game 2 | 3 | import android.animation.Animator 4 | 5 | open class SimpleAnimatorListener : Animator.AnimatorListener { 6 | override fun onAnimationStart(animation: Animator) {} 7 | 8 | override fun onAnimationEnd(animation: Animator) {} 9 | 10 | override fun onAnimationCancel(animation: Animator) {} 11 | 12 | override fun onAnimationRepeat(animation: Animator) {} 13 | } -------------------------------------------------------------------------------- /app/src/main/java/eu/mokrzycki/learndigits/ui/game/SingleLiveEvent.kt: -------------------------------------------------------------------------------- 1 | package eu.mokrzycki.learndigits.ui.game 2 | 3 | import androidx.lifecycle.LifecycleOwner 4 | import androidx.lifecycle.MutableLiveData 5 | import androidx.lifecycle.Observer 6 | import java.util.concurrent.atomic.AtomicBoolean 7 | 8 | /** 9 | * A custom implementation of LiveData that emits events only once. 10 | */ 11 | class SingleLiveEvent : MutableLiveData() { 12 | private val pending = AtomicBoolean(false) 13 | 14 | override fun observe(owner: LifecycleOwner, observer: Observer) { 15 | super.observe(owner) { t -> 16 | if (pending.compareAndSet(true, false)) { 17 | observer.onChanged(t) 18 | } 19 | } 20 | } 21 | 22 | override fun setValue(value: T) { 23 | pending.set(true) 24 | super.setValue(value) 25 | } 26 | } -------------------------------------------------------------------------------- /app/src/main/java/eu/mokrzycki/learndigits/ui/home/HomeFragment.kt: -------------------------------------------------------------------------------- 1 | package eu.mokrzycki.learndigits.ui.home 2 | 3 | import android.os.Bundle 4 | import android.view.LayoutInflater 5 | import android.view.View 6 | import android.view.ViewGroup 7 | import android.widget.TextView 8 | import androidx.fragment.app.Fragment 9 | import androidx.lifecycle.ViewModelProvider 10 | import eu.mokrzycki.learndigits.databinding.FragmentHomeBinding 11 | 12 | class HomeFragment : Fragment() { 13 | 14 | private var _binding: FragmentHomeBinding? = null 15 | 16 | private val binding get() = _binding!! 17 | 18 | override fun onCreateView( 19 | inflater: LayoutInflater, 20 | container: ViewGroup?, 21 | savedInstanceState: Bundle?, 22 | ): View { 23 | _binding = FragmentHomeBinding.inflate(inflater, container, false) 24 | return binding.root 25 | } 26 | 27 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 28 | val homeViewModel = 29 | ViewModelProvider(this)[HomeViewModel::class.java] 30 | 31 | val textView: TextView = binding.textHome1 32 | homeViewModel.text.observe(viewLifecycleOwner) { 33 | textView.text = it.resolve(requireContext()) 34 | } 35 | } 36 | 37 | override fun onDestroyView() { 38 | super.onDestroyView() 39 | _binding = null 40 | } 41 | } -------------------------------------------------------------------------------- /app/src/main/java/eu/mokrzycki/learndigits/ui/home/HomeViewModel.kt: -------------------------------------------------------------------------------- 1 | package eu.mokrzycki.learndigits.ui.home 2 | 3 | import androidx.lifecycle.LiveData 4 | import androidx.lifecycle.MutableLiveData 5 | import androidx.lifecycle.ViewModel 6 | import com.backbase.deferredresources.DeferredText 7 | import eu.mokrzycki.learndigits.R 8 | 9 | class HomeViewModel : ViewModel() { 10 | 11 | private val _text = MutableLiveData().apply { 12 | value = DeferredText.Resource(R.string.home_labels_introduction) 13 | } 14 | val text: LiveData = _text 15 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 15 | 18 | 21 | 22 | 23 | 24 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/circle_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_info_24.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 10 | 12 | 14 | 16 | 18 | 20 | 22 | 24 | 26 | 28 | 30 | 32 | 34 | 36 | 38 | 40 | 42 | 44 | 46 | 48 | 50 | 52 | 54 | 56 | 58 | 60 | 62 | 64 | 66 | 68 | 70 | 72 | 74 | 75 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_link_external.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_logo_github.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_notifications_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_plant_48dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ripple.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rounded_top.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 19 | 20 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_about.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 16 | 17 | 29 | 30 | 47 | 48 | 66 | 67 | 83 | 84 | 102 | 103 | 110 | 111 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_game.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | 31 | 32 | 44 | 45 | 50 | 51 | 52 | 53 | 59 | 60 | 68 | 69 | 88 | 89 | 108 | 109 | 128 | 129 | 148 | 149 | 168 | 169 | 188 | 189 | 208 | 209 | 228 | 229 | 249 | 250 | 270 | 271 | 272 | 273 | 283 | 284 | 296 | 297 | 312 | 313 | 314 | 315 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 23 | 24 | 31 | 32 | 41 | 42 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /app/src/main/res/menu/bottom_nav_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 13 | 14 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/navigation/mobile_navigation.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | 19 | 20 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/raw/gradient_animated_background.json: -------------------------------------------------------------------------------- 1 | { 2 | "v": "4.6.10", 3 | "fr": 15, 4 | "ip": 0, 5 | "op": 155, 6 | "w": 1080, 7 | "h": 1920, 8 | "nm": "background", 9 | "ddd": 0, 10 | "assets": [], 11 | "layers": [ 12 | { 13 | "ddd": 0, 14 | "ind": 1, 15 | "ty": 4, 16 | "nm": "Shape Layer 1", 17 | "ks": { 18 | "o": { 19 | "a": 0, 20 | "k": 100 21 | }, 22 | "r": { 23 | "a": 0, 24 | "k": 0 25 | }, 26 | "p": { 27 | "a": 0, 28 | "k": [ 29 | 540, 30 | 960, 31 | 0 32 | ] 33 | }, 34 | "a": { 35 | "a": 0, 36 | "k": [ 37 | 0, 38 | 0, 39 | 0 40 | ] 41 | }, 42 | "s": { 43 | "a": 0, 44 | "k": [ 45 | 100, 46 | 100, 47 | 100 48 | ] 49 | } 50 | }, 51 | "ao": 0, 52 | "shapes": [ 53 | { 54 | "ty": "gr", 55 | "it": [ 56 | { 57 | "ty": "rc", 58 | "d": 1, 59 | "s": { 60 | "a": 0, 61 | "k": [ 62 | 1160, 63 | 880 64 | ] 65 | }, 66 | "p": { 67 | "a": 0, 68 | "k": [ 69 | 0, 70 | 0 71 | ] 72 | }, 73 | "r": { 74 | "a": 0, 75 | "k": 0 76 | }, 77 | "nm": "Rectangle Path 1", 78 | "mn": "ADBE Vector Shape - Rect" 79 | }, 80 | { 81 | "ty": "st", 82 | "c": { 83 | "a": 0, 84 | "k": [ 85 | 0.9960784, 86 | 0.7843137, 87 | 0.145098, 88 | 1 89 | ] 90 | }, 91 | "o": { 92 | "a": 0, 93 | "k": 100 94 | }, 95 | "w": { 96 | "a": 0, 97 | "k": 6 98 | }, 99 | "lc": 1, 100 | "lj": 1, 101 | "ml": 4, 102 | "nm": "Stroke 1", 103 | "mn": "ADBE Vector Graphic - Stroke" 104 | }, 105 | { 106 | "ty": "gf", 107 | "o": { 108 | "a": 0, 109 | "k": 100 110 | }, 111 | "r": 1, 112 | "g": { 113 | "p": 3, 114 | "k": { 115 | "a": 1, 116 | "k": [ 117 | { 118 | "i": { 119 | "x": 0.833, 120 | "y": 0.833 121 | }, 122 | "o": { 123 | "x": 0.167, 124 | "y": 0.167 125 | }, 126 | "n": "0p833_0p833_0p167_0p167", 127 | "t": 0, 128 | "s": [ 129 | 0, 130 | 0.511, 131 | 0.89, 132 | 0.283, 133 | 0.5, 134 | 0.334, 135 | 0.873, 136 | 0.583, 137 | 1, 138 | 0.156, 139 | 0.857, 140 | 0.882 141 | ], 142 | "e": [ 143 | 0, 144 | 0.726, 145 | 0.283, 146 | 0.89, 147 | 0.5, 148 | 0.441, 149 | 0.356, 150 | 0.886, 151 | 1, 152 | 0.156, 153 | 0.429, 154 | 0.882 155 | ] 156 | }, 157 | { 158 | "i": { 159 | "x": 0.833, 160 | "y": 0.833 161 | }, 162 | "o": { 163 | "x": 0.167, 164 | "y": 0.167 165 | }, 166 | "n": "0p833_0p833_0p167_0p167", 167 | "t": 31, 168 | "s": [ 169 | 0, 170 | 0.726, 171 | 0.283, 172 | 0.89, 173 | 0.5, 174 | 0.441, 175 | 0.356, 176 | 0.886, 177 | 1, 178 | 0.156, 179 | 0.429, 180 | 0.882 181 | ], 182 | "e": [ 183 | 0, 184 | 0.89, 185 | 0.283, 186 | 0.283, 187 | 0.5, 188 | 0.886, 189 | 0.553, 190 | 0.219, 191 | 1, 192 | 0.882, 193 | 0.823, 194 | 0.156 195 | ] 196 | }, 197 | { 198 | "i": { 199 | "x": 0.833, 200 | "y": 0.833 201 | }, 202 | "o": { 203 | "x": 0.167, 204 | "y": 0.167 205 | }, 206 | "n": "0p833_0p833_0p167_0p167", 207 | "t": 61, 208 | "s": [ 209 | 0, 210 | 0.89, 211 | 0.283, 212 | 0.283, 213 | 0.5, 214 | 0.886, 215 | 0.553, 216 | 0.219, 217 | 1, 218 | 0.882, 219 | 0.823, 220 | 0.156 221 | ], 222 | "e": [ 223 | 0, 224 | 0, 225 | 0.312, 226 | 0.737, 227 | 0.5, 228 | 0.078, 229 | 0.597, 230 | 0.754, 231 | 1, 232 | 0.156, 233 | 0.882, 234 | 0.771 235 | ] 236 | }, 237 | { 238 | "i": { 239 | "x": 0.833, 240 | "y": 0.833 241 | }, 242 | "o": { 243 | "x": 0.167, 244 | "y": 0.167 245 | }, 246 | "n": "0p833_0p833_0p167_0p167", 247 | "t": 91, 248 | "s": [ 249 | 0, 250 | 0, 251 | 0.312, 252 | 0.737, 253 | 0.5, 254 | 0.078, 255 | 0.597, 256 | 0.754, 257 | 1, 258 | 0.156, 259 | 0.882, 260 | 0.771 261 | ], 262 | "e": [ 263 | 0, 264 | 0.51, 265 | 0.89, 266 | 0.282, 267 | 0.5, 268 | 0.333, 269 | 0.873, 270 | 0.582, 271 | 1, 272 | 0.157, 273 | 0.855, 274 | 0.882 275 | ] 276 | }, 277 | { 278 | "t": 120 279 | } 280 | ] 281 | } 282 | }, 283 | "s": { 284 | "a": 1, 285 | "k": [ 286 | { 287 | "i": { 288 | "x": 0.833, 289 | "y": 0.833 290 | }, 291 | "o": { 292 | "x": 0.167, 293 | "y": 0.167 294 | }, 295 | "n": "0p833_0p833_0p167_0p167", 296 | "t": 0, 297 | "s": [ 298 | -430.769, 299 | -404.573 300 | ], 301 | "e": [ 302 | 23.726, 303 | -364.48 304 | ], 305 | "to": [ 306 | 75.7491683959961, 307 | 6.68213844299316 308 | ], 309 | "ti": [ 310 | -123.915840148926, 311 | -8.51547145843506 312 | ] 313 | }, 314 | { 315 | "i": { 316 | "x": 0.833, 317 | "y": 0.833 318 | }, 319 | "o": { 320 | "x": 0.167, 321 | "y": 0.167 322 | }, 323 | "n": "0p833_0p833_0p167_0p167", 324 | "t": 31, 325 | "s": [ 326 | 23.726, 327 | -364.48 328 | ], 329 | "e": [ 330 | 312.726, 331 | -353.48 332 | ], 333 | "to": [ 334 | 123.915840148926, 335 | 8.51547145843506 336 | ], 337 | "ti": [ 338 | -1.00208830833435, 339 | -1.83333337306976 340 | ] 341 | }, 342 | { 343 | "i": { 344 | "x": 0.833, 345 | "y": 0.833 346 | }, 347 | "o": { 348 | "x": 0.167, 349 | "y": 0.167 350 | }, 351 | "n": "0p833_0p833_0p167_0p167", 352 | "t": 61, 353 | "s": [ 354 | 312.726, 355 | -353.48 356 | ], 357 | "e": [ 358 | 29.739, 359 | -353.48 360 | ], 361 | "to": [ 362 | 1.00208830833435, 363 | 1.83333337306976 364 | ], 365 | "ti": [ 366 | 120.055290222168, 367 | 0.60746711492538 368 | ] 369 | }, 370 | { 371 | "i": { 372 | "x": 0.833, 373 | "y": 0.833 374 | }, 375 | "o": { 376 | "x": 0.167, 377 | "y": 0.167 378 | }, 379 | "n": "0p833_0p833_0p167_0p167", 380 | "t": 91, 381 | "s": [ 382 | 29.739, 383 | -353.48 384 | ], 385 | "e": [ 386 | -407.606, 387 | -357.125 388 | ], 389 | "to": [ 390 | -120.055290222168, 391 | -0.60746711492538 392 | ], 393 | "ti": [ 394 | 72.8907089233398, 395 | 0.60746711492538 396 | ] 397 | }, 398 | { 399 | "t": 120 400 | } 401 | ] 402 | }, 403 | "e": { 404 | "a": 1, 405 | "k": [ 406 | { 407 | "i": { 408 | "x": 0.833, 409 | "y": 0.833 410 | }, 411 | "o": { 412 | "x": 0.167, 413 | "y": 0.167 414 | }, 415 | "n": "0p833_0p833_0p167_0p167", 416 | "t": 0, 417 | "s": [ 418 | 374.412, 419 | 342.611 420 | ], 421 | "e": [ 422 | 22.822, 423 | 357.191 424 | ], 425 | "to": [ 426 | -58.5984153747559, 427 | 2.42986845970154 428 | ], 429 | "ti": [ 430 | 132.520950317383, 431 | -7.89707231521606 432 | ] 433 | }, 434 | { 435 | "i": { 436 | "x": 0.833, 437 | "y": 0.833 438 | }, 439 | "o": { 440 | "x": 0.167, 441 | "y": 0.167 442 | }, 443 | "n": "0p833_0p833_0p167_0p167", 444 | "t": 31, 445 | "s": [ 446 | 22.822, 447 | 357.191 448 | ], 449 | "e": [ 450 | -420.714, 451 | 389.994 452 | ], 453 | "to": [ 454 | -132.520950317383, 455 | 7.89707231521606 456 | ], 457 | "ti": [ 458 | -4.68509674072266, 459 | -7.89707231521606 460 | ] 461 | }, 462 | { 463 | "i": { 464 | "x": 0.833, 465 | "y": 0.833 466 | }, 467 | "o": { 468 | "x": 0.167, 469 | "y": 0.167 470 | }, 471 | "n": "0p833_0p833_0p167_0p167", 472 | "t": 61, 473 | "s": [ 474 | -420.714, 475 | 389.994 476 | ], 477 | "e": [ 478 | 50.932, 479 | 404.573 480 | ], 481 | "to": [ 482 | 4.68509674072266, 483 | 7.89707231521606 484 | ], 485 | "ti": [ 486 | -132.918350219727, 487 | 4.25226974487305 488 | ] 489 | }, 490 | { 491 | "i": { 492 | "x": 0.833, 493 | "y": 0.833 494 | }, 495 | "o": { 496 | "x": 0.167, 497 | "y": 0.167 498 | }, 499 | "n": "0p833_0p833_0p167_0p167", 500 | "t": 91, 501 | "s": [ 502 | 50.932, 503 | 404.573 504 | ], 505 | "e": [ 506 | 376.797, 507 | 364.48 508 | ], 509 | "to": [ 510 | 132.918350219727, 511 | -4.25226974487305 512 | ], 513 | "ti": [ 514 | -54.3107261657715, 515 | 6.68213844299316 516 | ] 517 | }, 518 | { 519 | "t": 120 520 | } 521 | ] 522 | }, 523 | "t": 1, 524 | "nm": "Gradient Fill 1", 525 | "mn": "ADBE Vector Graphic - G-Fill" 526 | }, 527 | { 528 | "ty": "tr", 529 | "p": { 530 | "a": 0, 531 | "k": [ 532 | 0, 533 | 0 534 | ], 535 | "ix": 2 536 | }, 537 | "a": { 538 | "a": 0, 539 | "k": [ 540 | 0, 541 | 0 542 | ], 543 | "ix": 1 544 | }, 545 | "s": { 546 | "a": 0, 547 | "k": [ 548 | 93.29, 549 | 219.491 550 | ], 551 | "ix": 3 552 | }, 553 | "r": { 554 | "a": 0, 555 | "k": 0, 556 | "ix": 6 557 | }, 558 | "o": { 559 | "a": 0, 560 | "k": 100, 561 | "ix": 7 562 | }, 563 | "sk": { 564 | "a": 0, 565 | "k": 0, 566 | "ix": 4 567 | }, 568 | "sa": { 569 | "a": 0, 570 | "k": 0, 571 | "ix": 5 572 | }, 573 | "nm": "Transform" 574 | } 575 | ], 576 | "nm": "Rectangle 1", 577 | "np": 3, 578 | "cix": 2, 579 | "ix": 1, 580 | "mn": "ADBE Vector Group" 581 | } 582 | ], 583 | "ip": 0, 584 | "op": 155, 585 | "st": 0, 586 | "bm": 0, 587 | "sr": 1 588 | }, 589 | { 590 | "ddd": 0, 591 | "ind": 2, 592 | "ty": 1, 593 | "nm": "Deep Red Solid 1", 594 | "ks": { 595 | "o": { 596 | "a": 0, 597 | "k": 100 598 | }, 599 | "r": { 600 | "a": 0, 601 | "k": 0 602 | }, 603 | "p": { 604 | "a": 0, 605 | "k": [ 606 | 540, 607 | 960, 608 | 0 609 | ] 610 | }, 611 | "a": { 612 | "a": 0, 613 | "k": [ 614 | 540, 615 | 960, 616 | 0 617 | ] 618 | }, 619 | "s": { 620 | "a": 0, 621 | "k": [ 622 | 100, 623 | 100, 624 | 100 625 | ] 626 | } 627 | }, 628 | "ao": 0, 629 | "sw": 1080, 630 | "sh": 1920, 631 | "sc": "#be2a2a", 632 | "ip": 0, 633 | "op": 155, 634 | "st": 0, 635 | "bm": 0, 636 | "sr": 1 637 | } 638 | ] 639 | } -------------------------------------------------------------------------------- /app/src/main/res/raw/success.json: -------------------------------------------------------------------------------- 1 | {"v":"5.5.7","meta":{"g":"LottieFiles AE 0.1.20","a":"","k":"","d":"","tc":""},"fr":60,"ip":0,"op":180,"w":1920,"h":1920,"nm":"Gpay Tick","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Tick","parent":4,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[100]},{"t":32,"s":[100]}],"ix":11},"r":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"t":30,"s":[-99]},{"t":60,"s":[0]}],"ix":10},"p":{"a":0,"k":[346.916,346.917,0],"ix":2},"a":{"a":0,"k":[278.033,227.218,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":30,"s":[20,20,100]},{"t":60,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-153.033,0.588],[-51.404,102.218],[153.032,-102.218]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":50,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[278.033,227.218],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.33],"y":[1]},"o":{"x":[0.67],"y":[0]},"t":31,"s":[0]},{"t":60,"s":[100]}],"ix":2},"o":{"a":0,"k":0,"ix":3},"m":1,"ix":2,"nm":"Trim Paths 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":0,"op":1800,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Glow Mask","td":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[100]},{"t":32,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.783,"y":0.496},"o":{"x":0.506,"y":0},"t":0,"s":[1099.01,1187.835,0],"to":[-51.058,-20.951,0],"ti":[23.519,29.424,0]},{"i":{"x":0.576,"y":1},"o":{"x":0.337,"y":0.495},"t":30,"s":[989.155,1114.015,0],"to":[-26.997,-33.775,0],"ti":[3.563,56.649,0]},{"t":50,"s":[947.01,981.835,0]}],"ix":2},"a":{"a":0,"k":[346.917,346.917,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":30,"s":[20,20,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":60,"s":[110,110,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":80,"s":[95,95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":92,"s":[102,102,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":100,"s":[98,98,100]},{"t":110,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-191.459],[191.459,0],[0,191.458],[-191.458,0]],"o":[[0,191.458],[-191.458,0],[0,-191.459],[191.459,0]],"v":[[346.667,0],[0,346.667],[-346.667,0],[0,-346.666]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.8549019607843137,0.7254901960784313,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[346.916,346.917],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1800,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Glow","tt":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[100]},{"i":{"x":[0.833],"y":[0.643]},"o":{"x":[0.72],"y":[0]},"t":110,"s":[100]},{"t":140,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.788},"o":{"x":0.72,"y":0},"t":94,"s":[56,440,0],"to":[226.667,131.333,0],"ti":[-226.667,-131.333,0]},{"t":140,"s":[1416,1228,0]}],"ix":2},"a":{"a":0,"k":[0,0,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[348.655,1.947],[0,0],[35.647,880.072]],"o":[[0,0],[-8.868,-0.049],[0,0],[-3.819,-94.283]],"v":[[211.999,-440],[-480,280],[-136,648],[483.999,-312]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.76862745098,0.823067997951,1,1],"ix":4},"o":{"a":0,"k":30,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1800,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Background Circle (Blue)","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[100]},{"t":32,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.783,"y":0.496},"o":{"x":0.506,"y":0},"t":0,"s":[1099.01,1187.835,0],"to":[-51.058,-20.951,0],"ti":[23.519,29.424,0]},{"i":{"x":0.576,"y":1},"o":{"x":0.337,"y":0.495},"t":30,"s":[989.155,1114.015,0],"to":[-26.997,-33.775,0],"ti":[3.563,56.649,0]},{"t":50,"s":[947.01,981.835,0]}],"ix":2},"a":{"a":0,"k":[346.917,346.917,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":30,"s":[20,20,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"t":60,"s":[110,110,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":80,"s":[95,95,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":92,"s":[102,102,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":100,"s":[98,98,100]},{"t":110,"s":[100,100,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-191.459],[191.459,0],[0,191.458],[-191.458,0]],"o":[[0,191.458],[-191.458,0],[0,-191.459],[191.459,0]],"v":[[346.667,0],[0,346.667],[-346.667,0],[0,-346.666]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.8549019607843137,0.7254901960784313,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[346.916,346.917],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1800,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Background(Blue)","parent":4,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[20]},{"t":32,"s":[20]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":30,"s":[346.917,346.917,0],"to":[0,0,0],"ti":[0,0,0]},{"t":49,"s":[346.917,346.917,0]}],"ix":2},"a":{"a":0,"k":[346.917,346.917,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.33,0.33,0.33],"y":[1,1,1]},"o":{"x":[0.67,0.67,0.67],"y":[0,0,0]},"t":0,"s":[100,100,100]},{"i":{"x":[0.33,0.33,0.33],"y":[1,1,1]},"o":{"x":[0.67,0.67,0.67],"y":[0,0,0]},"t":60,"s":[148,148,100]},{"t":110,"s":[88,88,100]}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-191.459],[191.459,0],[0,191.458],[-191.458,0]],"o":[[0,191.458],[-191.458,0],[0,-191.459],[191.459,0]],"v":[[346.667,0],[0,346.667],[-346.667,0],[0,-346.666]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.8549019607843137,0.7254901960784313,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[346.916,346.917],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1800,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Element 11","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[100]},{"i":{"x":[0.833],"y":[0.601]},"o":{"x":[0.72],"y":[0]},"t":32,"s":[100]},{"t":87,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.33,"y":1},"o":{"x":0.174,"y":0},"t":10,"s":[1088.545,1185.048,0],"to":[-154.333,61,0],"ti":[34.333,-69,0]},{"t":42,"s":[774.545,1455.048,0]}],"ix":2},"a":{"a":0,"k":[88.379,84.132,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-17.539,13.457],[-12.743,-16.607],[0,0]],"o":[[-12.743,-16.608],[17.539,-13.458],[0,0],[0,0]],"v":[[-25.635,34.132],[-16.894,-20.673],[38.306,-14.931],[38.379,-14.837]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.23921568627450981,0.3254901960784314,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[88.378,84.131],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1800,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Element 10","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[100]},{"i":{"x":[0.833],"y":[0.601]},"o":{"x":[0.72],"y":[0]},"t":32,"s":[100]},{"t":87,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.33,"y":1},"o":{"x":0.229,"y":0},"t":10,"s":[1088.113,1187.051,0],"to":[37.667,40,0],"ti":[-71.667,-48,0]},{"t":46,"s":[1314.113,1427.051,0]}],"ix":2},"a":{"a":0,"k":[33.514,41.664,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.281,-1.895],[0,0],[1.894,3.281],[0,0],[-3.281,1.894],[0,0],[-1.894,-3.282],[0,0]],"o":[[0,0],[-3.281,1.894],[0,0],[-1.894,-3.283],[0,0],[3.281,-1.895],[0,0],[1.894,3.281]],"v":[[28.859,29.055],[10.732,39.52],[1.361,37.009],[-31.37,-19.681],[-28.859,-29.053],[-10.732,-39.519],[-1.361,-37.008],[31.37,19.683]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.8549019607843137,0.7254901960784313,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[33.514,41.664],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1800,"st":0,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":"Element 9","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[100]},{"i":{"x":[0.833],"y":[0.601]},"o":{"x":[0.72],"y":[0]},"t":32,"s":[100]},{"t":87,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.33,"y":1},"o":{"x":0.189,"y":0},"t":10,"s":[1106.768,1189.936,0],"to":[70.333,-5.667,0],"ti":[-62.333,-30.333,0]},{"t":43,"s":[1420.768,1239.936,0]}],"ix":2},"a":{"a":0,"k":[60.548,78.82,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[2.886,-21.917],[20.753,2.734],[0.039,0.005]],"o":[[20.754,2.733],[-2.886,21.918],[-0.04,-0.005],[0,0]],"v":[[-12.409,-41.32],[20.162,3.615],[-22.93,38.586],[-23.048,38.571]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.870999983245,0.246999987434,0.246999987434,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":15,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[60.548,78.82],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1800,"st":0,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":"Element 8","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[100]},{"i":{"x":[0.833],"y":[0.601]},"o":{"x":[0.72],"y":[0]},"t":32,"s":[100]},{"t":87,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.33,"y":1},"o":{"x":0.263,"y":0},"t":10,"s":[1095.413,1171.271,0],"to":[46.333,-81.667,0],"ti":[-98.333,51.667,0]},{"t":68,"s":[1397.413,873.271,0]}],"ix":2},"a":{"a":0,"k":[47.326,47.325,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-11.644,-3.948],[0,0],[-3.912,2.92],[0,0],[0.157,-12.294],[0,0],[-3.985,-2.819],[0,0],[11.74,-3.65],[0,0],[1.449,-4.662],[0,0],[7.098,10.038],[0,0],[4.882,-0.063],[0,0],[-7.354,9.853],[0,0],[1.569,4.624],[0,0]],"o":[[0,0],[4.623,1.568],[0,0],[9.854,-7.353],[0,0],[-0.062,4.882],[0,0],[10.038,7.099],[0,0],[-4.662,1.449],[0,0],[-3.649,11.74],[0,0],[-2.82,-3.986],[0,0],[-12.293,0.156],[0,0],[2.92,-3.913],[0,0],[-3.948,-11.644]],"v":[[-17.558,-36.37],[-13.481,-34.987],[0.154,-37.147],[3.606,-39.722],[27.31,-27.644],[27.255,-23.339],[33.522,-11.038],[37.038,-8.552],[32.877,17.724],[28.763,19.002],[19.003,28.764],[17.724,32.876],[-8.551,37.037],[-11.037,33.522],[-23.338,27.255],[-27.644,27.31],[-39.721,3.606],[-37.146,0.155],[-34.987,-13.481],[-36.37,-17.558]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[1,0.736999990426,0.195999998205,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.325,47.325],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1800,"st":0,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":"Element 7","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[100]},{"i":{"x":[0.833],"y":[0.601]},"o":{"x":[0.72],"y":[0]},"t":32,"s":[100]},{"t":87,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.33,"y":1},"o":{"x":0.229,"y":0},"t":10,"s":[1086.148,1173.839,0],"to":[18.333,-110,0],"ti":[-64.333,76,0]},{"t":46,"s":[1316.148,645.839,0]}],"ix":2},"a":{"a":0,"k":[77.856,74.774,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[-12.731,9.768],[-9.249,-12.055],[-0.018,-0.022]],"o":[[-9.249,-12.055],[12.73,-9.768],[0.018,0.023],[0,0]],"v":[[-18.607,24.774],[-12.262,-15.006],[27.805,-10.838],[27.857,-10.77]],"c":false},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[0.9137254901960784,0.9372549019607843,0.9568627450980393,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":20,"ix":5},"lc":2,"lj":2,"bm":0,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[77.856,74.774],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1800,"st":0,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":"Element 6","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[100]},{"i":{"x":[0.833],"y":[0.601]},"o":{"x":[0.72],"y":[0]},"t":32,"s":[100]},{"t":87,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.33,"y":1},"o":{"x":0.189,"y":0},"t":10,"s":[1081.471,1169.811,0],"to":[-138,24.333,0],"ti":[110,-64.333,0]},{"t":43,"s":[529.471,1363.811,0]}],"ix":2},"a":{"a":0,"k":[47.326,47.325,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-11.644,-3.948],[0,0],[-3.913,2.92],[0,0],[0.157,-12.294],[0,0],[-3.986,-2.819],[0,0],[11.74,-3.65],[0,0],[1.449,-4.662],[0,0],[7.099,10.038],[0,0],[4.881,-0.062],[0,0],[-7.353,9.853],[0,0],[1.568,4.624],[0,0]],"o":[[0,0],[4.623,1.567],[0,0],[9.853,-7.352],[0,0],[-0.063,4.882],[0,0],[10.038,7.1],[0,0],[-4.662,1.449],[0,0],[-3.649,11.741],[0,0],[-2.819,-3.987],[0,0],[-12.293,0.157],[0,0],[2.92,-3.913],[0,0],[-3.948,-11.644]],"v":[[-17.558,-36.37],[-13.481,-34.987],[0.154,-37.147],[3.605,-39.723],[27.31,-27.644],[27.255,-23.339],[33.521,-11.038],[37.037,-8.553],[32.875,17.724],[28.763,19.002],[19.003,28.764],[17.724,32.875],[-8.552,37.037],[-11.039,33.522],[-23.339,27.254],[-27.645,27.31],[-39.722,3.606],[-37.146,0.154],[-34.987,-13.481],[-36.37,-17.558]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.9137254901960784,0.9372549019607843,0.9568627450980393,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.325,47.325],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1800,"st":0,"bm":0},{"ddd":0,"ind":12,"ty":4,"nm":"Element 5","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[100]},{"i":{"x":[0.833],"y":[0.601]},"o":{"x":[0.72],"y":[0]},"t":32,"s":[100]},{"t":87,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.33,"y":1},"o":{"x":0.283,"y":0},"t":10,"s":[1071.297,1171.159,0],"to":[-118.333,-25,0],"ti":[132.333,-35,0]},{"t":70,"s":[517.297,1177.159,0]}],"ix":2},"a":{"a":0,"k":[30.771,30.771,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-16.856],[16.856,0],[0,16.856],[-16.857,0]],"o":[[0,16.856],[-16.857,0],[0,-16.856],[16.856,0]],"v":[[30.521,0],[0,30.521],[-30.521,0],[0,-30.521]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.980000035903,0.752999997606,0.2,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.771,30.771],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1800,"st":0,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":"Element 4","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[100]},{"i":{"x":[0.833],"y":[0.601]},"o":{"x":[0.72],"y":[0]},"t":32,"s":[100]},{"t":87,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.33,"y":1},"o":{"x":0.273,"y":0},"t":10,"s":[1074.624,1178.727,0],"to":[-94.667,-86.667,0],"ti":[140.667,20.667,0]},{"t":69,"s":[446.624,934.727,0]}],"ix":2},"a":{"a":0,"k":[42,25.144,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-0.829,-3.697],[0,0],[3.698,-0.828],[0,0],[0.83,3.697],[0,0],[-3.697,0.828],[0,0]],"o":[[0,0],[0.829,3.697],[0,0],[-3.697,0.828],[0,0],[-0.828,-3.697],[0,0],[3.697,-0.828]],"v":[[36.343,-18.872],[40.921,1.552],[35.727,9.747],[-28.148,24.066],[-36.344,18.872],[-40.922,-1.553],[-35.728,-9.747],[28.148,-24.066]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.8549019607843137,0.7254901960784313,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[42,25.144],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1800,"st":0,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":"Element 3","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[100]},{"i":{"x":[0.833],"y":[0.601]},"o":{"x":[0.72],"y":[0]},"t":32,"s":[100]},{"t":87,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.33,"y":1},"o":{"x":0.174,"y":0},"t":10,"s":[1067.471,1180.071,0],"to":[-115.667,-176,0],"ti":[149.667,68,0]},{"t":61,"s":[529.471,736.071,0]}],"ix":2},"a":{"a":0,"k":[47.326,47.325,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-11.644,-3.948],[0,0],[-3.913,2.92],[0,0],[0.157,-12.294],[0,0],[-3.986,-2.819],[0,0],[11.74,-3.65],[0,0],[1.449,-4.662],[0,0],[7.099,10.038],[0,0],[4.881,-0.063],[0,0],[-7.353,9.854],[0,0],[1.568,4.624],[0,0]],"o":[[0,0],[4.623,1.568],[0,0],[9.853,-7.353],[0,0],[-0.063,4.882],[0,0],[10.038,7.099],[0,0],[-4.662,1.449],[0,0],[-3.649,11.74],[0,0],[-2.819,-3.986],[0,0],[-12.293,0.157],[0,0],[2.92,-3.912],[0,0],[-3.948,-11.644]],"v":[[-17.558,-36.37],[-13.481,-34.987],[0.154,-37.147],[3.605,-39.722],[27.31,-27.644],[27.255,-23.339],[33.521,-11.038],[37.037,-8.552],[32.875,17.724],[28.763,19.002],[19.003,28.764],[17.724,32.876],[-8.552,37.037],[-11.039,33.522],[-23.339,27.255],[-27.645,27.309],[-39.722,3.605],[-37.146,0.154],[-34.987,-13.481],[-36.37,-17.558]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.277999997606,0.677999997606,0.490000017952,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[47.325,47.325],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1800,"st":0,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":"Element 2","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":4,"s":[100]},{"i":{"x":[0.833],"y":[0.601]},"o":{"x":[0.72],"y":[0]},"t":32,"s":[100]},{"t":87,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.33,"y":1},"o":{"x":0.292,"y":0},"t":10,"s":[1098.638,1189.457,0],"to":[-95.667,-127,0],"ti":[3.667,95,0]},{"t":71,"s":[788.638,547.457,0]}],"ix":2},"a":{"a":0,"k":[33.515,41.664,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.281,-1.895],[0,0],[1.895,3.281],[0,0],[-3.281,1.894],[0,0],[-1.895,-3.281],[0,0]],"o":[[0,0],[-3.282,1.895],[0,0],[-1.895,-3.281],[0,0],[3.281,-1.894],[0,0],[1.895,3.282]],"v":[[28.859,29.054],[10.733,39.519],[1.36,37.008],[-31.37,-19.683],[-28.859,-29.054],[-10.732,-39.52],[-1.36,-37.009],[31.37,19.682]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.877999997606,0.26699999641,0.243000000598,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[33.515,41.664],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1800,"st":0,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":"Element 1","sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":0,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":4,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":32,"s":[100]},{"t":87,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.33,"y":1},"o":{"x":0.252,"y":0},"t":10,"s":[1087.199,1174.507,0],"to":[22,-151.667,0],"ti":[40,75.667,0]},{"t":67,"s":[1027.199,504.507,0]}],"ix":2},"a":{"a":0,"k":[30.771,30.771,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-16.856],[16.856,0],[0,16.857],[-16.857,0]],"o":[[0,16.857],[-16.857,0],[0,-16.856],[16.856,0]],"v":[[30.522,-0.001],[0,30.522],[-30.522,-0.001],[0,-30.522]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.23921568627450981,0.3254901960784314,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[30.771,30.772],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":1800,"st":0,"bm":0}],"markers":[]} -------------------------------------------------------------------------------- /app/src/main/res/values-el/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Αριθμοί 4 | Αρχική 5 | Παιχνίδι 6 | Έξοδος 7 | Σχετικά 8 | Η νέα μας εφαρμογή αφιερωμένη στα παιδιά, που τους επιτρέπει να μαθαίνουν αριθμούς με διαδραστικό και διασκεδαστικό τρόπο!\n\nΤα παιδιά ακούν τις οδηγίες και επιλέγουν το αντίστοιχο ψηφίο από το 0 έως το 9 και μετά τη σωστή απάντηση, αναπτύσσεται ένα όμορφο φυτό! 9 | el 10 | Έκδοση %s 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | 17 | 21 | 22 | 25 | 26 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/values-nl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Nummers 4 | Home 5 | Spel 6 | Exit 7 | Over 8 | Hier is onze nieuwe app speciaal voor kinderen. Ze leren nummers op een interactieve en leuke manier!\n\nZe luisteren naar de instructies en kiezen het getal tussen 0 en 9. Als het antwoord goed is groeit er een prachtige plant! 9 | nl 10 | © 2023 | Michał Mokrzycki\nmokrzycki.eu 11 | Version %s 12 | -------------------------------------------------------------------------------- /app/src/main/res/values-pl/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Cyferki 4 | Główna 5 | Gra 6 | Wyjście 7 | O aplikacji 8 | Oto nasza nowa aplikacja dedykowana dzieciom, umożliwiająca naukę liczb w sposób interaktywny i zabawny!\n\nDzieci słyszą polecenie i wybierają odpowiednią cyfrę z zakresu od 0 do 9. Po poprawnej odpowiedzi, piękna roślina rośnie! 9 | pl 10 | Wersja %s 11 | -------------------------------------------------------------------------------- /app/src/main/res/values-uk/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Циферки 4 | Головна 5 | Гра 6 | Вихід 7 | Про додаток 8 | Ось наша нова програма, спеціально для дітей, яка дозволяє вивчати числа в інтерактивний та веселий спосіб!\n\nДіти почують завдання і виберуть відповідну цифру від 0 до 9. Після правильної відповіді гарна рослина зросте! 9 | uk 10 | Версія %s 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFBB86FC 4 | #FF6200EE 5 | #FF3700B3 6 | #FF03DAC5 7 | #FF018786 8 | #FF000000 9 | #FFFFFFFF 10 | 11 | @android:color/holo_blue_light 12 | @android:color/white 13 | @android:color/holo_blue_light 14 | #001C4138 15 | #FF1C4138 16 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 48dp 6 | 32dp 7 | 32dp 8 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Digits 4 | Home 5 | Game 6 | Exit 7 | About 8 | Here\'s our new app dedicated to children, allowing them to learn numbers in an interactive and fun way!\n\nChildren listen to the instruction and choose the corresponding digit from 0 to 9, and upon correct answer, a beautiful plant grows! 9 | en 10 | © 2023 | Michał Mokrzycki\nmokrzycki.eu 11 | Version %s 12 | -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | 17 | 21 | 22 | 25 | 26 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/xml/backup_rules.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/xml/data_extraction_rules.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 12 | 13 | 19 | -------------------------------------------------------------------------------- /app/src/test/java/com/example/leannumbersnav/ExampleUnitTest.kt: -------------------------------------------------------------------------------- 1 | package eu.mokrzycki.learndigits 2 | 3 | import org.junit.Test 4 | 5 | import org.junit.Assert.* 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * See [testing documentation](http://d.android.com/tools/testing). 11 | */ 12 | class ExampleUnitTest { 13 | @Test 14 | fun addition_isCorrect() { 15 | assertEquals(4, 2 + 2) 16 | } 17 | } -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | plugins { 3 | id 'com.android.application' version '8.0.1' apply false 4 | id 'com.android.library' version '8.0.1' apply false 5 | id 'org.jetbrains.kotlin.android' version '1.8.20' apply false 6 | } -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/3.txt: -------------------------------------------------------------------------------- 1 | Version 1.0.2 2 | 3 | - Initial release. -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/4.txt: -------------------------------------------------------------------------------- 1 | Version 1.0.3 2 | 3 | - Added support for voice in Greek. -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/5.txt: -------------------------------------------------------------------------------- 1 | Version 1.0.4 2 | 3 | - Adapt app to dark mode. -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/6.txt: -------------------------------------------------------------------------------- 1 | Version 1.0.5 2 | 3 | - Added support for voice in Ukrainian. -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/7.txt: -------------------------------------------------------------------------------- 1 | Version 1.0.6 2 | 3 | - Added preview images to fastlane. -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/changelogs/8.txt: -------------------------------------------------------------------------------- 1 | Version 1.0.7 2 | 3 | - Added support for Dutch language voice. -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/full_description.txt: -------------------------------------------------------------------------------- 1 | App dedicated to children, allowing them to learn numbers in an interactive and fun way! Children listen to the instruction and choose the corresponding digit from 0 to 9. Upon a correct answer, a beautiful plant grows! -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/fastlane/metadata/android/en-US/images/icon.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/images/phoneScreenshots/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/short_description.txt: -------------------------------------------------------------------------------- 1 | App dedicated to children to learn numbers in an interactive and fun way! -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/title.txt: -------------------------------------------------------------------------------- 1 | Digits -------------------------------------------------------------------------------- /fastlane/metadata/android/nl/changelogs/3.txt: -------------------------------------------------------------------------------- 1 | Versie 1.0.2 2 | 3 | - Eerste uitgave. -------------------------------------------------------------------------------- /fastlane/metadata/android/nl/changelogs/4.txt: -------------------------------------------------------------------------------- 1 | Versie 1.0.3 2 | 3 | - Ondersteuning voor spraak in de Griekse taal toegevoegd. -------------------------------------------------------------------------------- /fastlane/metadata/android/nl/changelogs/5.txt: -------------------------------------------------------------------------------- 1 | Versie 1.0.4 2 | 3 | - App aangepast aan de donkere modus. -------------------------------------------------------------------------------- /fastlane/metadata/android/nl/changelogs/6.txt: -------------------------------------------------------------------------------- 1 | Versie 1.0.5 2 | 3 | - Ondersteuning voor spraak in de Oekraïense taal toegevoegd. -------------------------------------------------------------------------------- /fastlane/metadata/android/nl/changelogs/7.txt: -------------------------------------------------------------------------------- 1 | Versie 1.0.6 2 | 3 | - Voorbeeldweergave van afbeeldingen toegevoegd aan Fastlane. -------------------------------------------------------------------------------- /fastlane/metadata/android/nl/changelogs/8.txt: -------------------------------------------------------------------------------- 1 | Versie 1.0.7 2 | 3 | - Ondersteuning voor spraak in de Nederlandse taal toegevoegd. -------------------------------------------------------------------------------- /fastlane/metadata/android/nl/full_description.txt: -------------------------------------------------------------------------------- 1 | Een app speciaal ontworpen voor kinderen, waarmee ze op een interactieve en leuke manier cijfers kunnen leren! Kinderen horen een opdracht en kiezen het juiste cijfer tussen 0 en 9. Bij een correct antwoord groeit er een prachtige plant! -------------------------------------------------------------------------------- /fastlane/metadata/android/nl/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/fastlane/metadata/android/nl/images/icon.png -------------------------------------------------------------------------------- /fastlane/metadata/android/nl/images/phoneScreenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/fastlane/metadata/android/nl/images/phoneScreenshots/1.png -------------------------------------------------------------------------------- /fastlane/metadata/android/nl/images/phoneScreenshots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/fastlane/metadata/android/nl/images/phoneScreenshots/2.png -------------------------------------------------------------------------------- /fastlane/metadata/android/nl/images/phoneScreenshots/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/fastlane/metadata/android/nl/images/phoneScreenshots/3.png -------------------------------------------------------------------------------- /fastlane/metadata/android/nl/short_description.txt: -------------------------------------------------------------------------------- 1 | Een app speciaal voor kinderen om op een interactieve en leuke manier cijfers te leren! -------------------------------------------------------------------------------- /fastlane/metadata/android/nl/title.txt: -------------------------------------------------------------------------------- 1 | Nummers -------------------------------------------------------------------------------- /fastlane/metadata/android/pl/changelogs/3.txt: -------------------------------------------------------------------------------- 1 | Wersja 1.0.2 2 | 3 | - Pierwsze wydanie. -------------------------------------------------------------------------------- /fastlane/metadata/android/pl/changelogs/4.txt: -------------------------------------------------------------------------------- 1 | Wersja 1.0.3 2 | 3 | - Dodano wsparcie dla głosu w języku greckim. -------------------------------------------------------------------------------- /fastlane/metadata/android/pl/changelogs/5.txt: -------------------------------------------------------------------------------- 1 | Wersja 1.0.4 2 | 3 | - Dostosowano aplikację do trybu ciemnego. -------------------------------------------------------------------------------- /fastlane/metadata/android/pl/changelogs/6.txt: -------------------------------------------------------------------------------- 1 | Wersja 1.0.5 2 | 3 | - Dodano wsparcie dla głosu w języku ukraińskim. -------------------------------------------------------------------------------- /fastlane/metadata/android/pl/changelogs/7.txt: -------------------------------------------------------------------------------- 1 | Wersja 1.0.6 2 | 3 | - Dodano poglądowe obrazki do fastlane. -------------------------------------------------------------------------------- /fastlane/metadata/android/pl/changelogs/8.txt: -------------------------------------------------------------------------------- 1 | Wersja 1.0.7 2 | 3 | - Dodano wsparcie dla głosu w języku niderlandzkim. -------------------------------------------------------------------------------- /fastlane/metadata/android/pl/full_description.txt: -------------------------------------------------------------------------------- 1 | Aplikacja dedykowana dzieciom, umożliwiająca naukę liczb w sposób interaktywny i zabawny! Dzieci słyszą polecenie i wybierają odpowiadającą mu cyfrę z zakresu od 0 do 9. Po poprawnej odpowiedzi rośnie piękna roślina! -------------------------------------------------------------------------------- /fastlane/metadata/android/pl/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/fastlane/metadata/android/pl/images/icon.png -------------------------------------------------------------------------------- /fastlane/metadata/android/pl/images/phoneScreenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/fastlane/metadata/android/pl/images/phoneScreenshots/1.png -------------------------------------------------------------------------------- /fastlane/metadata/android/pl/images/phoneScreenshots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/fastlane/metadata/android/pl/images/phoneScreenshots/2.png -------------------------------------------------------------------------------- /fastlane/metadata/android/pl/images/phoneScreenshots/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/fastlane/metadata/android/pl/images/phoneScreenshots/3.png -------------------------------------------------------------------------------- /fastlane/metadata/android/pl/short_description.txt: -------------------------------------------------------------------------------- 1 | Aplikacja dedykowana dla dzieci do nauki liczb w sposób interaktywny i zabawny! -------------------------------------------------------------------------------- /fastlane/metadata/android/pl/title.txt: -------------------------------------------------------------------------------- 1 | Cyferki -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/changelogs/3.txt: -------------------------------------------------------------------------------- 1 | Версія 1.0.2 2 | 3 | - Перше видання. -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/changelogs/4.txt: -------------------------------------------------------------------------------- 1 | Версія 1.0.3 2 | 3 | - Додано підтримку голосу у грецькій мові. -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/changelogs/5.txt: -------------------------------------------------------------------------------- 1 | Версія 1.0.4 2 | 3 | - Пристосовано додаток до темного режиму. -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/changelogs/6.txt: -------------------------------------------------------------------------------- 1 | Версія 1.0.5 2 | 3 | - Додано підтримку голосу на українській мові. -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/changelogs/7.txt: -------------------------------------------------------------------------------- 1 | Версія 1.0.6 2 | 3 | - Додано попередній перегляд зображень до fastlane. -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/changelogs/8.txt: -------------------------------------------------------------------------------- 1 | Версія 1.0.7 2 | 3 | - Додано підтримку голосу нідерландською мовою. -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/full_description.txt: -------------------------------------------------------------------------------- 1 | Додаток, призначений для дітей, дозволяє вивчати числа у взаємодійний та веселий спосіб! Діти почують завдання і обирають відповідну цифру з діапазону від 0 до 9. Після правильної відповіді гарна рослина росте! -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/fastlane/metadata/android/uk/images/icon.png -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/images/phoneScreenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/fastlane/metadata/android/uk/images/phoneScreenshots/1.png -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/images/phoneScreenshots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/fastlane/metadata/android/uk/images/phoneScreenshots/2.png -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/images/phoneScreenshots/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/fastlane/metadata/android/uk/images/phoneScreenshots/3.png -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/short_description.txt: -------------------------------------------------------------------------------- 1 | Додаток призначений для дітей для вивчення чисел у взаємодійний та веселий спосіб! -------------------------------------------------------------------------------- /fastlane/metadata/android/uk/title.txt: -------------------------------------------------------------------------------- 1 | Циферки -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app's APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Kotlin code style for this project: "official" or "obsolete": 19 | kotlin.code.style=official 20 | # Enables namespacing of each library's R class so that its R class includes only the 21 | # resources declared in the library itself and none from the library's dependencies, 22 | # thereby reducing the size of the R class for that library 23 | android.nonTransitiveRClass=true -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Thu May 11 11:10:28 CEST 2023 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # 4 | # Copyright 2015 the original author or authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | ## 21 | ## Gradle start up script for UN*X 22 | ## 23 | ############################################################################## 24 | 25 | # Attempt to set APP_HOME 26 | # Resolve links: $0 may be a link 27 | PRG="$0" 28 | # Need this for relative symlinks. 29 | while [ -h "$PRG" ] ; do 30 | ls=`ls -ld "$PRG"` 31 | link=`expr "$ls" : '.*-> \(.*\)$'` 32 | if expr "$link" : '/.*' > /dev/null; then 33 | PRG="$link" 34 | else 35 | PRG=`dirname "$PRG"`"/$link" 36 | fi 37 | done 38 | SAVED="`pwd`" 39 | cd "`dirname \"$PRG\"`/" >/dev/null 40 | APP_HOME="`pwd -P`" 41 | cd "$SAVED" >/dev/null 42 | 43 | APP_NAME="Gradle" 44 | APP_BASE_NAME=`basename "$0"` 45 | 46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 48 | 49 | # Use the maximum available, or set MAX_FD != -1 to use that value. 50 | MAX_FD="maximum" 51 | 52 | warn () { 53 | echo "$*" 54 | } 55 | 56 | die () { 57 | echo 58 | echo "$*" 59 | echo 60 | exit 1 61 | } 62 | 63 | # OS specific support (must be 'true' or 'false'). 64 | cygwin=false 65 | msys=false 66 | darwin=false 67 | nonstop=false 68 | case "`uname`" in 69 | CYGWIN* ) 70 | cygwin=true 71 | ;; 72 | Darwin* ) 73 | darwin=true 74 | ;; 75 | MINGW* ) 76 | msys=true 77 | ;; 78 | NONSTOP* ) 79 | nonstop=true 80 | ;; 81 | esac 82 | 83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 84 | 85 | 86 | # Determine the Java command to use to start the JVM. 87 | if [ -n "$JAVA_HOME" ] ; then 88 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 89 | # IBM's JDK on AIX uses strange locations for the executables 90 | JAVACMD="$JAVA_HOME/jre/sh/java" 91 | else 92 | JAVACMD="$JAVA_HOME/bin/java" 93 | fi 94 | if [ ! -x "$JAVACMD" ] ; then 95 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 96 | 97 | Please set the JAVA_HOME variable in your environment to match the 98 | location of your Java installation." 99 | fi 100 | else 101 | JAVACMD="java" 102 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 103 | 104 | Please set the JAVA_HOME variable in your environment to match the 105 | location of your Java installation." 106 | fi 107 | 108 | # Increase the maximum file descriptors if we can. 109 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 110 | MAX_FD_LIMIT=`ulimit -H -n` 111 | if [ $? -eq 0 ] ; then 112 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 113 | MAX_FD="$MAX_FD_LIMIT" 114 | fi 115 | ulimit -n $MAX_FD 116 | if [ $? -ne 0 ] ; then 117 | warn "Could not set maximum file descriptor limit: $MAX_FD" 118 | fi 119 | else 120 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 121 | fi 122 | fi 123 | 124 | # For Darwin, add options to specify how the application appears in the dock 125 | if $darwin; then 126 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 127 | fi 128 | 129 | # For Cygwin or MSYS, switch paths to Windows format before running java 130 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then 131 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 132 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 133 | 134 | JAVACMD=`cygpath --unix "$JAVACMD"` 135 | 136 | # We build the pattern for arguments to be converted via cygpath 137 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 138 | SEP="" 139 | for dir in $ROOTDIRSRAW ; do 140 | ROOTDIRS="$ROOTDIRS$SEP$dir" 141 | SEP="|" 142 | done 143 | OURCYGPATTERN="(^($ROOTDIRS))" 144 | # Add a user-defined pattern to the cygpath arguments 145 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 146 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 147 | fi 148 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 149 | i=0 150 | for arg in "$@" ; do 151 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 152 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 153 | 154 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 155 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 156 | else 157 | eval `echo args$i`="\"$arg\"" 158 | fi 159 | i=`expr $i + 1` 160 | done 161 | case $i in 162 | 0) set -- ;; 163 | 1) set -- "$args0" ;; 164 | 2) set -- "$args0" "$args1" ;; 165 | 3) set -- "$args0" "$args1" "$args2" ;; 166 | 4) set -- "$args0" "$args1" "$args2" "$args3" ;; 167 | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 168 | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 169 | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 170 | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 171 | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 172 | esac 173 | fi 174 | 175 | # Escape application args 176 | save () { 177 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 178 | echo " " 179 | } 180 | APP_ARGS=`save "$@"` 181 | 182 | # Collect all arguments for the java command, following the shell quoting and substitution rules 183 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 184 | 185 | exec "$JAVACMD" "$@" 186 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 | 35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 | 38 | @rem Find java.exe 39 | if defined JAVA_HOME goto findJavaFromJavaHome 40 | 41 | set JAVA_EXE=java.exe 42 | %JAVA_EXE% -version >NUL 2>&1 43 | if "%ERRORLEVEL%" == "0" goto execute 44 | 45 | echo. 46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 | echo. 48 | echo Please set the JAVA_HOME variable in your environment to match the 49 | echo location of your Java installation. 50 | 51 | goto fail 52 | 53 | :findJavaFromJavaHome 54 | set JAVA_HOME=%JAVA_HOME:"=% 55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 | 57 | if exist "%JAVA_EXE%" goto execute 58 | 59 | echo. 60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 | echo. 62 | echo Please set the JAVA_HOME variable in your environment to match the 63 | echo location of your Java installation. 64 | 65 | goto fail 66 | 67 | :execute 68 | @rem Setup the command line 69 | 70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 71 | 72 | 73 | @rem Execute Gradle 74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 75 | 76 | :end 77 | @rem End local scope for the variables with windows NT shell 78 | if "%ERRORLEVEL%"=="0" goto mainEnd 79 | 80 | :fail 81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 82 | rem the _cmd.exe /c_ return code! 83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 84 | exit /b 1 85 | 86 | :mainEnd 87 | if "%OS%"=="Windows_NT" endlocal 88 | 89 | :omega 90 | -------------------------------------------------------------------------------- /preview/en/preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/preview/en/preview.gif -------------------------------------------------------------------------------- /preview/pl/preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/preview/pl/preview.gif -------------------------------------------------------------------------------- /resources/lottie/links.txt: -------------------------------------------------------------------------------- 1 | https://lottiefiles.com/16401-forest-morning 2 | 3 | https://lottiefiles.com/107998-energyshares-plant4 4 | 5 | https://lottiefiles.com/83774-play-by-zonun -------------------------------------------------------------------------------- /resources/lottie/play.json: -------------------------------------------------------------------------------- 1 | {"v":"4.5.6","fr":30,"ip":0,"op":60,"w":400,"h":400,"ddd":0,"assets":[],"layers":[{"ddd":0,"ind":0,"ty":3,"nm":"Null 1","ks":{"o":{"a":0,"k":0},"r":{"a":0,"k":0},"p":{"a":0,"k":[212.949,197.563,0]},"a":{"a":0,"k":[50.687,51.173,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,0.667]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0.333]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_0p667_0p333_0p333"],"t":0,"s":[100,100,100],"e":[132,132,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,0.667]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0.333]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_0p667_0p333_0p333"],"t":30,"s":[132,132,100],"e":[100,100,100]},{"t":60.0000024438501}]}},"ao":0,"ip":0,"op":900.000036657751,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 1","parent":0,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[50.687,49.508,0]},"a":{"a":0,"k":[9.781,0,0]},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,0.667]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0.333]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_0p667_0p333_0p333"],"t":0,"s":[84.211,84.211,100],"e":[106.211,106.211,100]},{"i":{"x":[0.667,0.667,0.667],"y":[1,1,0.667]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0.333]},"n":["0p667_1_0p333_0","0p667_1_0p333_0","0p667_0p667_0p333_0p333"],"t":31,"s":[106.211,106.211,100],"e":[84.211,84.211,100]},{"t":61.0000024845809}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ks":{"a":0,"k":{"i":[[0,0],[0,-1],[0,0]],"o":[[0,0],[0,1],[0,0]],"v":[[-130.031,-96.688],[-131,3],[-44.188,-47.25]],"c":true}},"nm":"Path 1","mn":"ADBE Vector Shape - Group"},{"ty":"st","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":0},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[8.313,3.688],"ix":2},"a":{"a":0,"k":[-89.062,-45.125],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Shape 1","np":3,"mn":"ADBE Vector Group"}],"ip":0,"op":900.000036657751,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":2,"ty":4,"nm":"base","parent":0,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[33.738,51.61,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[77.945,77.945,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[331.855,331.855]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":0},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"fl","c":{"a":0,"k":[0.09411764705882353,0.8392156862745098,0.6392156862745098,1]},"o":{"a":0,"k":100},"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[11.178,-2.697],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[75.704,75.704],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"mn":"ADBE Vector Group"}],"ip":0,"op":900.000036657751,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":3,"ty":4,"nm":"base 2","parent":0,"ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[31.738,51.61,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[94.312,94.312,100]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[331.855,331.855]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":0},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"fl","c":{"a":0,"k":[1,1,1,1]},"o":{"a":0,"k":100},"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[11.178,-2.697],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[75.704,75.704],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"mn":"ADBE Vector Group"}],"ip":900.000036657751,"op":900.000036657751,"st":0,"bm":0,"sr":1,"hidden":0},{"ddd":0,"ind":4,"ty":4,"nm":"Base Layer 4","parent":0,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":20,"s":[49],"e":[0]},{"t":45.0000018328876}]},"r":{"a":0,"k":0},"p":{"a":0,"k":[33.738,51.61,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":0,"s":[31.532,31.532,100],"e":[69.368,69.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":20,"s":[69.368,69.368,100],"e":[84.882,84.882,100]},{"t":45.0000018328876}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[331.855,331.855]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":0},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"fl","c":{"a":0,"k":[0.09411764705882353,0.8392156862745098,0.6392156862745098,1]},"o":{"a":0,"k":100},"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[11.178,-2.697],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[97.195,97.195],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"mn":"ADBE Vector Group"}],"ip":0,"op":900.000036657751,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":5,"ty":4,"nm":"Base Layer 3","parent":0,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"n":["0p833_0p833_0p167_0p167"],"t":34,"s":[27],"e":[0]},{"t":59.0000024031193}]},"r":{"a":0,"k":0},"p":{"a":0,"k":[33.738,51.61,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":1,"k":[{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":14,"s":[31.532,31.532,100],"e":[69.368,69.368,100]},{"i":{"x":[0.833,0.833,0.833],"y":[0.833,0.833,0.833]},"o":{"x":[0.167,0.167,0.167],"y":[0.167,0.167,0.167]},"n":["0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167","0p833_0p833_0p167_0p167"],"t":34,"s":[69.368,69.368,100],"e":[84.882,84.882,100]},{"t":59.0000024031193}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[331.855,331.855]},"p":{"a":0,"k":[0,0]},"nm":"Ellipse Path 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"st","c":{"a":0,"k":[0,0,0,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":0},"lc":1,"lj":1,"ml":4,"nm":"Stroke 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"fl","c":{"a":0,"k":[0.09411764705882353,0.8392156862745098,0.6392156862745098,1]},"o":{"a":0,"k":100},"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"tr","p":{"a":0,"k":[11.178,-2.697],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[97.195,97.195],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Ellipse 1","np":3,"mn":"ADBE Vector Group"}],"ip":0,"op":900.000036657751,"st":0,"bm":0,"sr":1}]} -------------------------------------------------------------------------------- /resources/original_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/resources/original_cover.png -------------------------------------------------------------------------------- /resources/original_cover_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/resources/original_cover_circle.png -------------------------------------------------------------------------------- /resources/original_cover_circle_profiled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/foxtrotdev/learn-digits/200935993e2740b6ddcdc176b7dbac27f1b2c357/resources/original_cover_circle_profiled.png -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | pluginManagement { 2 | repositories { 3 | google() 4 | mavenCentral() 5 | gradlePluginPortal() 6 | } 7 | } 8 | dependencyResolutionManagement { 9 | repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) 10 | repositories { 11 | google() 12 | mavenCentral() 13 | } 14 | } 15 | rootProject.name = "LearnDigits" 16 | include ':app' 17 | --------------------------------------------------------------------------------