├── .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 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
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 |
38 |
39 |
40 | ## Download
41 |
42 | [
](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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------