Compare commits

...

139 Commits

Author SHA1 Message Date
Sylvia van Os
fc25082a9a Release Catima 2.37.0 2025-08-22 18:18:42 +02:00
Sylvia van Os
7625d783f3 Merge pull request #2630 from CatimaLoyalty/create-pull-request/patch-1755877734
Update feature graphic
2025-08-22 18:15:19 +02:00
TheLastProject
f61c9adf61 Update feature graphic 2025-08-22 15:48:53 +00:00
Sylvia van Os
cba8d637f5 Merge pull request #2628 from il-Luca/main
Fix for minor issues with feature graphic generation
2025-08-22 17:46:35 +02:00
Sylvia van Os
79853e597b Add Aeven-Dev as logo contributor 2025-08-22 17:38:09 +02:00
il-Luca
dd69182347 Update generate_feature_graphic.sh 2025-08-22 13:14:37 +02:00
il-Luca
e5fb836131 Update featureGraphic.svg 2025-08-22 12:45:58 +02:00
Sylvia van Os
2026c4e171 Merge pull request #2626 from CatimaLoyalty/create-pull-request/patch-1755812967
Update Fastlane changelogs
2025-08-21 23:50:31 +02:00
TheLastProject
ac8e89d65f Update Fastlane changelogs 2025-08-21 21:49:26 +00:00
Sylvia van Os
2f97628c52 Update CHANGELOG 2025-08-21 23:49:17 +02:00
Sylvia van Os
59d373aa74 Merge pull request #2625 from CatimaLoyalty/create-pull-request/patch-1755812511
Update feature graphic
2025-08-21 23:47:04 +02:00
TheLastProject
742e8799f1 Update feature graphic 2025-08-21 21:41:50 +00:00
Sylvia van Os
bbbda9bd1d Merge pull request #2624 from CatimaLoyalty/feature/new_icon
New Catima logo and feature graphic
2025-08-21 23:38:54 +02:00
il-Luca
8ad1f044fd New Catima logo and feature graphic
- Updated app icon assets (mipmaps & VectorDrawables)
- Updated feature graphic SVG (updated icon, changed fonts to match the new icon style)
- Updated feature graphic script (to account for the changed fonts)
- Created .design folder containing master design files
- Deleted old logo and fonts
2025-08-21 22:26:15 +02:00
Sylvia van Os
59d6c047ed Delete bors.toml
Stopped using bors years ago
2025-08-20 18:25:38 +02:00
Sylvia van Os
bccba88ad0 Merge pull request #2620 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-20 18:09:18 +02:00
Hosted Weblate
c6486e4f25 Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/
2025-08-20 12:02:19 +00:00
Sylvia van Os
047f9df218 Translated using Weblate (Kannada)
Currently translated at 33.5% (112 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/kn/
2025-08-20 12:02:18 +00:00
Joel A
e8ab75ec77 Translated using Weblate (Swedish)
Currently translated at 96.1% (321 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2025-08-20 12:02:17 +00:00
Sylvia van Os
a1bd671ed4 Merge pull request #2618 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-19 18:10:13 +02:00
Sylvia van Os
a458065e4f Merge pull request #2619 from CatimaLoyalty/dependabot/gradle/com.android.application-8.12.1
Bump com.android.application from 8.12.0 to 8.12.1
2025-08-19 17:19:23 +02:00
dependabot[bot]
1e48191431 Bump com.android.application from 8.12.0 to 8.12.1
Bumps com.android.application from 8.12.0 to 8.12.1.

---
updated-dependencies:
- dependency-name: com.android.application
  dependency-version: 8.12.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-19 12:41:03 +00:00
Shiva
b05432446f Translated using Weblate (Kannada)
Currently translated at 34.1% (114 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/kn/
2025-08-19 13:04:03 +02:00
tomek7667
9449639014 Translated using Weblate (Polish)
Currently translated at 97.9% (145 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2025-08-19 13:04:02 +02:00
tomek7667
fe1d53b2ee Translated using Weblate (Polish)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2025-08-19 13:04:00 +02:00
Sylvia van Os
62f6d17e43 Merge pull request #2616 from CatimaLoyalty/create-pull-request/patch-1755451248
Update feature graphic
2025-08-18 19:30:56 +02:00
Sylvia van Os
a3d96a6dcf Merge pull request #2617 from CatimaLoyalty/dependabot/github_actions/actions/checkout-5.0.0
Bump actions/checkout from 4.2.2 to 5.0.0
2025-08-18 07:05:39 +02:00
dependabot[bot]
c5df55d5ae Bump actions/checkout from 4.2.2 to 5.0.0
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.2 to 5.0.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4.2.2...v5.0.0)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-18 04:18:50 +00:00
TheLastProject
447433f865 Update feature graphic 2025-08-17 17:20:48 +00:00
Sylvia van Os
bb1f5c979e Merge pull request #2615 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-17 19:19:10 +02:00
Kolappan N
d258c9bd47 Translated using Weblate (Tamil)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/ta/
2025-08-17 15:02:26 +02:00
Kolappan N
156ad3d60d Translated using Weblate (Tamil)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2025-08-17 15:02:25 +02:00
Amit Yefet
2a632f47f8 Translated using Weblate (Hebrew (Israel))
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/he_IL/
2025-08-17 15:02:24 +02:00
Amit Yefet
c660267aed Translated using Weblate (Hebrew (Israel))
Currently translated at 2.0% (3 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/he_IL/
2025-08-17 15:02:22 +02:00
mrMonos
22fede920f Translated using Weblate (Polish)
Currently translated at 99.7% (333 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2025-08-17 15:02:21 +02:00
Sylvia van Os
89f730b23a Merge pull request #2614 from CatimaLoyalty/create-pull-request/patch-1755405024
Update contributors
2025-08-17 09:26:54 +02:00
TheLastProject
c67b1b9fe4 Update contributors 2025-08-17 04:30:24 +00:00
Sylvia van Os
2b931f68fe Merge pull request #2613 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-16 19:04:59 +02:00
Joel A
884b84effc Translated using Weblate (Swedish)
Currently translated at 5.4% (8 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sv/
2025-08-16 07:02:39 +00:00
Joel A
54d41285fd Translated using Weblate (Swedish)
Currently translated at 95.5% (319 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2025-08-16 07:02:38 +00:00
novrian
12f8f258b6 Translated using Weblate (Indonesian)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/id/
2025-08-16 07:02:37 +00:00
Sofia
1deb094ca8 Translated using Weblate (Spanish)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2025-08-16 07:02:37 +00:00
Sofia
b6910dc03a Translated using Weblate (Spanish (Argentina))
Currently translated at 71.5% (239 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es_AR/
2025-08-16 07:02:36 +00:00
Sylvia van Os
b50b367058 Merge pull request #2612 from CatimaLoyalty/dependabot/gradle/org.jetbrains.kotlin.android-2.2.10
Bump org.jetbrains.kotlin.android from 2.2.0 to 2.2.10
2025-08-15 08:15:42 +02:00
dependabot[bot]
983026d313 Bump org.jetbrains.kotlin.android from 2.2.0 to 2.2.10
Bumps [org.jetbrains.kotlin.android](https://github.com/JetBrains/kotlin) from 2.2.0 to 2.2.10.
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v2.2.0...v2.2.10)

---
updated-dependencies:
- dependency-name: org.jetbrains.kotlin.android
  dependency-version: 2.2.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-15 02:41:53 +00:00
Sylvia van Os
a471fa36c8 Merge pull request #2609 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-11 17:02:45 +02:00
Thong Nguyen
e0eebb665b Translated using Weblate (Vietnamese)
Currently translated at 99.7% (333 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/vi/
2025-08-11 07:02:49 +00:00
Land
a8ab204036 Translated using Weblate (Malayalam)
Currently translated at 27.2% (91 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ml/
2025-08-11 07:02:49 +00:00
Nishkarsh Yadav
11e821a074 Translated using Weblate (Hindi)
Currently translated at 100.0% (148 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/hi/
2025-08-11 07:02:48 +00:00
Nishkarsh Yadav
19aaa80b7f Translated using Weblate (Hindi)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hi/
2025-08-11 07:02:47 +00:00
Sylvia van Os
241591db0f Merge pull request #2607 from CatimaLoyalty/create-pull-request/patch-1754800744
Update contributors
2025-08-10 11:58:17 +02:00
TheLastProject
058b822a52 Update contributors 2025-08-10 04:39:04 +00:00
Sylvia van Os
d21a53dbf0 Merge pull request #2606 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-09 18:41:50 +02:00
Joel A
511f9e25b8 Translated using Weblate (Swedish)
Currently translated at 93.7% (313 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2025-08-09 16:02:12 +00:00
Sylvia van Os
bed1b11384 Merge pull request #2605 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-08 16:57:05 +02:00
Andrzej Stachera
d16350351f Translated using Weblate (Polish)
Currently translated at 99.7% (333 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2025-08-08 14:01:57 +00:00
Sylvia van Os
a7d47477d1 Merge pull request #2603 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-06 18:33:29 +02:00
Warder
8cd33189fa Translated using Weblate (Slovak)
Currently translated at 98.6% (146 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2025-08-06 18:03:07 +02:00
Sylvia van Os
0af7ced380 Translated using Weblate (Dutch)
Currently translated at 61.4% (91 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2025-08-06 18:03:07 +02:00
Sylvia van Os
a514f285f7 Release Catima 2.36.0 2025-08-05 18:10:57 +02:00
Sylvia van Os
5634df1f5a Merge pull request #2601 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-05 18:09:02 +02:00
delvani
f2b46310de Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2025-08-05 17:49:05 +02:00
Edgars Andersons
a646717277 Translated using Weblate (Latvian)
Currently translated at 9.4% (14 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2025-08-05 17:49:05 +02:00
Edgars Andersons
63e992be5c Translated using Weblate (Latvian)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2025-08-05 17:49:04 +02:00
Sylvia van Os
98a574f223 Translated using Weblate (Dutch)
Currently translated at 59.4% (88 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2025-08-05 17:49:04 +02:00
Sylvia van Os
6dfbcc3577 Translated using Weblate (Dutch)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2025-08-05 17:49:03 +02:00
Sylvia van Os
4c00c8b94d Merge pull request #2599 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-03 20:49:25 +02:00
Ömer
cde3dd8ecf Translated using Weblate (Turkish)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2025-08-03 18:02:29 +00:00
Giovanni Donisi
e22ad2c4a8 Translated using Weblate (Italian)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2025-08-03 18:02:28 +00:00
Sylvia van Os
62aeadae71 Merge pull request #2598 from CatimaLoyalty/create-pull-request/patch-1754196371
Update contributors
2025-08-03 10:24:36 +02:00
TheLastProject
7e89db428b Update contributors 2025-08-03 04:46:11 +00:00
Sylvia van Os
50e13c22c6 Merge pull request #2597 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-02 17:33:07 +02:00
ssantos
7e323dc342 Translated using Weblate (Portuguese)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt/
2025-08-02 17:08:20 +02:00
josé m
c0cd051831 Translated using Weblate (Galician)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/gl/
2025-08-02 17:08:20 +02:00
Priit Jõerüüt
b1b97c8972 Translated using Weblate (Estonian)
Currently translated at 11.4% (17 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/et/
2025-08-02 17:08:19 +02:00
Priit Jõerüüt
256687ecdb Translated using Weblate (Estonian)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2025-08-02 17:08:18 +02:00
ssantos
9829cc3100 Translated using Weblate (Portuguese)
Currently translated at 100.0% (148 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt/
2025-08-02 17:08:18 +02:00
ssantos
2aa8be2642 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2025-08-02 17:08:17 +02:00
ssantos
75a6482c0e Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (148 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_PT/
2025-08-02 17:08:16 +02:00
109247019824
14e953db4c Translated using Weblate (Bulgarian)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2025-08-02 17:08:16 +02:00
Ricky Tigg
60e3c864c8 Translated using Weblate (Finnish)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2025-08-02 17:08:15 +02:00
大王叫我来巡山
87ca4a5dd3 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (148 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-08-02 17:08:14 +02:00
大王叫我来巡山
a70671cf0b Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2025-08-02 17:08:14 +02:00
Warder
67d7ea4ca2 Translated using Weblate (Slovak)
Currently translated at 98.6% (146 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2025-08-02 17:08:13 +02:00
Fjuro
53f58940dd Translated using Weblate (Czech)
Currently translated at 100.0% (148 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2025-08-02 17:08:13 +02:00
Максим Горпиніч
f2639612f0 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (148 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-08-02 17:08:12 +02:00
solokot
d29344af73 Translated using Weblate (Russian)
Currently translated at 100.0% (148 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-08-02 17:08:12 +02:00
Kachelkaiser
32635bdc9a Translated using Weblate (German)
Currently translated at 100.0% (148 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-08-02 17:08:11 +02:00
Sylvain Pichon
8457cc06d2 Translated using Weblate (French)
Currently translated at 100.0% (148 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2025-08-02 17:08:10 +02:00
Максим Горпиніч
a8316769a1 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2025-08-02 17:08:10 +02:00
Warder
2f6bae7333 Translated using Weblate (Slovak)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sk/
2025-08-02 17:08:09 +02:00
solokot
e951402049 Translated using Weblate (Russian)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2025-08-02 17:08:08 +02:00
Sylvain Pichon
4d5e3043ff Translated using Weblate (French)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2025-08-02 17:08:08 +02:00
Vasilis K
d57f528165 Translated using Weblate (Greek)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2025-08-02 17:08:07 +02:00
Kachelkaiser
14e84e5e0f Translated using Weblate (German)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2025-08-02 17:08:07 +02:00
Fjuro
fe79d3e866 Translated using Weblate (Czech)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2025-08-02 17:08:06 +02:00
Sylvia van Os
88369ea070 Merge pull request #2596 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-01 17:18:04 +02:00
Warder
944e83e480 Translated using Weblate (Slovak)
Currently translated at 98.6% (146 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2025-08-01 16:53:47 +02:00
Sylvia van Os
8bb15bcb57 Merge pull request #2593 from CatimaLoyalty/dependabot/gradle/com.android.application-8.12.0
Bump com.android.application from 8.11.1 to 8.12.0
2025-08-01 08:16:33 +02:00
dependabot[bot]
cb6358892b Bump com.android.application from 8.11.1 to 8.12.0
Bumps com.android.application from 8.11.1 to 8.12.0.

---
updated-dependencies:
- dependency-name: com.android.application
  dependency-version: 8.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-01 02:06:11 +00:00
Sylvia van Os
9956f6de34 Merge pull request #2592 from CatimaLoyalty/create-pull-request/patch-1753994193
Update Fastlane changelogs
2025-07-31 22:38:06 +02:00
TheLastProject
893bd551e0 Update Fastlane changelogs 2025-07-31 20:36:32 +00:00
Sylvia van Os
5c67459330 Update CHANGELOG 2025-07-31 22:36:20 +02:00
Sylvia van Os
e2988ec29a Merge pull request #2566 from realwk/widget
Widget with all cards
2025-07-31 22:35:44 +02:00
Sylvia van Os
2c96b11725 Various widget bugfixes
Widget now updates on sorting order change and no cards is correctly
detected
2025-07-31 21:50:59 +02:00
Sylvia van Os
0d52a49e8b Merge pull request #2591 from CatimaLoyalty/dependabot/gradle/androidx.test.ext-junit-1.3.0
Bump androidx.test.ext:junit from 1.2.1 to 1.3.0
2025-07-31 08:46:53 +02:00
dependabot[bot]
504ab7f148 Bump androidx.test.ext:junit from 1.2.1 to 1.3.0
Bumps androidx.test.ext:junit from 1.2.1 to 1.3.0.

---
updated-dependencies:
- dependency-name: androidx.test.ext:junit
  dependency-version: 1.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-31 06:23:18 +00:00
Sylvia van Os
d75f228632 Merge pull request #2590 from CatimaLoyalty/dependabot/gradle/androidx.test.espresso-espresso-core-3.7.0
Bump androidx.test.espresso:espresso-core from 3.6.1 to 3.7.0
2025-07-31 08:22:07 +02:00
Sylvia van Os
410f0f2a6f Merge pull request #2588 from CatimaLoyalty/dependabot/gradle/androidXTestVersion-1.7.0
Bump androidXTestVersion from 1.6.1 to 1.7.0
2025-07-31 08:16:15 +02:00
dependabot[bot]
c4672d282c Bump androidx.test.espresso:espresso-core from 3.6.1 to 3.7.0
Bumps androidx.test.espresso:espresso-core from 3.6.1 to 3.7.0.

---
updated-dependencies:
- dependency-name: androidx.test.espresso:espresso-core
  dependency-version: 3.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-31 02:06:24 +00:00
dependabot[bot]
9297fee839 Bump androidXTestVersion from 1.6.1 to 1.7.0
Bumps `androidXTestVersion` from 1.6.1 to 1.7.0.

Updates `androidx.test:core` from 1.6.1 to 1.7.0

Updates `androidx.test:runner` from 1.6.1 to 1.7.0

---
updated-dependencies:
- dependency-name: androidx.test:core
  dependency-version: 1.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: androidx.test:runner
  dependency-version: 1.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-31 02:06:07 +00:00
Sylvia van Os
acc72c0937 Rename from CatimaWidget to ListWidget
This makes the codebase easier to understand if we get more widget types
in the future
2025-07-30 21:23:14 +02:00
Sylvia van Os
54c27f7038 Refactor widget to be the same size as regular cards
This isn't as automatic as I would've liked, but with some manual
trial-and-error I think this works well enough in keeping the aspect
ratio while somewhat "scaling" based on size (at least the number of
columns are scaled)
2025-07-30 21:23:14 +02:00
Sylvia van Os
7277ff26fc Refactor deprecated widget code
This replaces the deprecated widget method with the new one and ensures
it consistently updates on changes.
2025-07-30 21:23:14 +02:00
realwk
9a0149def8 Initial widget work
Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
2025-07-30 21:23:14 +02:00
Sylvia van Os
e217e99864 Merge pull request #2587 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-07-29 20:17:46 +02:00
Lilith Maria
9674af3bae Translated using Weblate (Lithuanian)
Currently translated at 4.0% (6 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lt/
2025-07-29 19:10:30 +02:00
Sylvia van Os
a2b85dd37a Merge pull request #2585 from StellarSand/mainfork
Migrate 2 actvities to kotlin
2025-07-29 18:15:01 +02:00
Sylvia van Os
220fe96268 Merge pull request #2586 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-07-28 18:45:19 +02:00
ssantos
917b6cfb7d Translated using Weblate (Portuguese)
Currently translated at 100.0% (148 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt/
2025-07-28 18:22:47 +02:00
ssantos
0b687e1788 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (148 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_PT/
2025-07-28 18:22:46 +02:00
Edgars Andersons
b35fa810ef Translated using Weblate (Latvian)
Currently translated at 9.4% (14 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2025-07-28 18:22:45 +02:00
大王叫我来巡山
0d1e10d064 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (148 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-07-28 18:22:45 +02:00
StellarSand
96359e5942 minor changes 2025-07-28 04:03:06 +05:30
StellarSand
bf63390f65 convert BarcodeSelectorActivity to kotlin 2025-07-28 02:47:58 +05:30
StellarSand
6f54981333 Rename .java to .kt 2025-07-28 02:47:58 +05:30
StellarSand
aed145239b convert CardShortcutConfigure to kotlin 2025-07-28 02:47:44 +05:30
StellarSand
99a8c917b9 Rename .java to .kt 2025-07-28 02:47:44 +05:30
Sylvia van Os
ef39f30fd7 Merge pull request #2584 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-07-27 15:37:11 +02:00
Reptalica
24e996e1a9 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/vi/
2025-07-27 12:07:40 +00:00
Fjuro
4178dce4e2 Translated using Weblate (Czech)
Currently translated at 100.0% (148 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2025-07-27 12:07:38 +00:00
Максим Горпиніч
514eaae616 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (148 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-07-27 12:07:23 +00:00
solokot
5692251668 Translated using Weblate (Russian)
Currently translated at 100.0% (148 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-07-27 12:07:07 +00:00
B o d o
6208dd3fd9 Translated using Weblate (German)
Currently translated at 100.0% (148 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-07-27 12:06:52 +00:00
Sylvain Pichon
85288a3658 Translated using Weblate (French)
Currently translated at 100.0% (148 of 148 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2025-07-27 12:06:36 +00:00
Sylvia van Os
bae7e676b4 Merge pull request #2581 from CatimaLoyalty/create-pull-request/patch-1753466727
Update Fastlane changelogs
2025-07-25 20:05:51 +02:00
TheLastProject
6ae7491a18 Update Fastlane changelogs 2025-07-25 18:05:26 +00:00
Sylvia van Os
e5de694711 Update CHANGELOG 2025-07-25 20:05:13 +02:00
StellarSand
996cd2cd2c Proper fix for FAB being hidden by keyboard (#2579) 2025-07-25 20:04:24 +02:00
216 changed files with 1156 additions and 607 deletions

4
.design/README.txt Normal file
View File

@@ -0,0 +1,4 @@
VectorDrawable does not support all SVG features, such as shadows and masks.
Therefore the ic_launcher files are slightly different from the master files: no shadows, minor color tweaks, path optimisation.
Use ic_launcher_*.svg files to generate assets for the app icon
Use master_*.svg files to generate other assets (e.g. feature graphic, playstore icon) or to rework the icon design

View File

@@ -0,0 +1,3 @@
<svg width="108" height="108" viewBox="0 0 108 108" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="108" height="108" fill="#1F4262"/>
</svg>

After

Width:  |  Height:  |  Size: 155 B

View File

@@ -0,0 +1,18 @@
<svg width="108" height="108" viewBox="0 0 108 108" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M45.5 30.5768L68.0526 22.3683C70.1285 21.6127 72.4239 22.6831 73.1795 24.759L75.9156 32.2765L49.6042 41.8531L45.5 30.5768Z" fill="#F5A3A3"/>
<path d="M70.3604 25.785C70.1715 25.2661 69.5977 24.9985 69.0787 25.1874L49.3451 32.3698L51.3973 38.008L72.0705 30.4835L70.3604 25.785ZM75.9156 32.2765L49.6042 41.8531L45.5 30.5768L68.0526 22.3683C70.1285 21.6127 72.4239 22.6831 73.1795 24.759L75.9156 32.2765Z" fill="#CF1717"/>
<path d="M58.4155 30.5767L35.8629 22.3682C33.787 21.6126 31.4916 22.683 30.7361 24.7589L27.9999 32.2764L54.3113 41.853L58.4155 30.5767Z" fill="#F5A3A3"/>
<path d="M33.5551 25.7849C33.744 25.2659 34.3179 24.9984 34.8368 25.1873L54.5704 32.3697L52.5183 38.0078L31.845 30.4834L33.5551 25.7849ZM27.9999 32.2764L54.3113 41.853L58.4155 30.5767L35.8629 22.3682C33.787 21.6126 31.4916 22.683 30.7361 24.7589L27.9999 32.2764Z" fill="#DD1818"/>
<path d="M28.6958 37.5992C29.0794 35.4236 31.1543 33.9709 33.3298 34.3545L80.6006 42.6897C82.7761 43.0734 84.2288 45.148 83.8452 47.3235L81.8157 58.8328C82.2998 59.0988 84.6663 60.1572 87.416 57.2288V57.229C87.9156 56.6942 88.4507 56.2283 89.0068 55.8575C91.764 54.0193 93.9993 55.2156 93.9993 58.5293C93.9992 61.343 92.3876 64.7782 90.2134 66.8763C86.626 70.5423 80.6933 70.5552 79.7524 70.5332L77.5938 82.7766C77.2101 84.9522 75.1355 86.4049 72.96 86.0213L25.6892 77.6861C25.6723 77.6831 25.6555 77.6797 25.6387 77.6765C23.4483 77.3198 22.0001 76.7026 22 76.0003C22 75.7175 22.2348 75.4485 22.6582 75.2046C22.3986 74.5429 22.3121 73.8036 22.4446 73.0523L28.6958 37.5992Z" fill="#B81414"/>
<path d="M90.6707 60.748C90.6707 61.8526 89.9257 63.2447 89.0066 63.8574C88.0876 64.4701 87.3425 64.0714 87.3425 62.9668C87.3425 61.8622 88.0876 60.4701 89.0066 59.8574C89.9257 59.2447 90.6707 59.6434 90.6707 60.748Z" fill="#E82E2E"/>
<path d="M78 30C80.2091 30 82 31.7909 82 34V70C82 72.2091 80.2091 74 78 74H30C25.5817 74 22 74.8954 22 76V32C22 30.8954 25.5817 30 30 30H78Z" fill="#E82E2E"/>
<path d="M51.2008 54.25C51.615 53.5325 52.5324 53.2867 53.2498 53.7009C53.9449 54.1022 54.1973 54.9757 53.8358 55.6822L53.762 55.8178C53.4005 56.5242 53.6529 57.3977 54.3479 57.799C55.043 58.2003 55.9256 57.9821 56.3567 57.3158L56.4372 57.1841C56.8683 56.5178 57.751 56.2997 58.446 56.7009C59.1634 57.1151 59.4092 58.0325 58.995 58.75C57.7524 60.9023 55.0002 61.6397 52.8479 60.3971C50.6956 59.1544 49.9582 56.4023 51.2008 54.25Z" fill="#8A0F0F"/>
<path d="M52.795 54.25C52.3808 53.5325 51.4634 53.2867 50.746 53.7009C50.051 54.1022 49.7986 54.9757 50.1601 55.6822L50.2339 55.8178C50.5954 56.5242 50.343 57.3977 49.6479 57.799C48.9529 58.2003 48.0702 57.9821 47.6392 57.3158L47.5586 57.1841C47.1276 56.5178 46.2449 56.2997 45.5499 56.7009C44.8324 57.1151 44.5866 58.0325 45.0008 58.75C46.2435 60.9023 48.9956 61.6397 51.1479 60.3971C53.3002 59.1544 54.0377 56.4023 52.795 54.25Z" fill="#8A0F0F"/>
<path d="M53.2989 56.75C52.7216 57.75 51.2782 57.75 50.7009 56.75L48.1028 52.25C47.5254 51.25 48.2471 50 49.4018 50L54.598 50C55.7527 50 56.4744 51.25 55.897 52.25L53.2989 56.75Z" fill="#8A0F0F"/>
<path d="M40.4999 40.5C43.7321 40.5 46.4561 42.6167 47.4233 45.5269C47.6845 46.313 47.2592 47.162 46.4731 47.4233C45.687 47.6846 44.8379 47.2592 44.5766 46.4731C43.9982 44.7328 42.3813 43.5 40.4999 43.5C38.6186 43.5 37.0016 44.7328 36.4233 46.4731C36.162 47.2592 35.3129 47.6846 34.5268 47.4233C33.7407 47.162 33.3153 46.313 33.5766 45.5269C34.5438 42.6167 37.2678 40.5 40.4999 40.5Z" fill="#8A0F0F"/>
<path d="M63.4999 40.5C66.7321 40.5 69.4561 42.6167 70.4233 45.5269C70.6845 46.313 70.2592 47.162 69.4731 47.4233C68.687 47.6846 67.8379 47.2592 67.5766 46.4731C66.9982 44.7328 65.3813 43.5 63.4999 43.5C61.6186 43.5 60.0016 44.7328 59.4233 46.4731C59.162 47.2592 58.3129 47.6846 57.5268 47.4233C56.7407 47.162 56.3153 46.313 56.5766 45.5269C57.5438 42.6167 60.2678 40.5 63.4999 40.5Z" fill="#8A0F0F"/>
<path d="M26 55C25.4477 55 25 54.5523 25 54C25 53.4477 25.4477 53 26 53H42C42.5523 53 43 53.4477 43 54C43 54.5523 42.5523 55 42 55H26Z" fill="#8A0F0F"/>
<path d="M26.3511 60.9363C25.834 61.1302 25.2576 60.8682 25.0637 60.3511C24.8698 59.834 25.1318 59.2575 25.6489 59.0636L41.6488 53.0637C42.1659 52.8698 42.7423 53.1318 42.9362 53.6489C43.1302 54.166 42.8681 54.7424 42.351 54.9363L26.3511 60.9363Z" fill="#8A0F0F"/>
<path d="M61.649 54.9364C61.1319 54.7425 60.8699 54.1661 61.0638 53.6489C61.2577 53.1318 61.8341 52.8698 62.3512 53.0637L78.3511 59.0637C78.8682 59.2576 79.1302 59.834 78.9363 60.3511C78.7424 60.8683 78.166 61.1303 77.6489 60.9364L61.649 54.9364Z" fill="#8A0F0F"/>
<path d="M78 55C78.5523 55 79 54.5523 79 54C79 53.4477 78.5523 53 78 53H62C61.4477 53 61 53.4477 61 54C61 54.5523 61.4477 55 62 55H78Z" fill="#8A0F0F"/>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -0,0 +1,10 @@
<svg width="108" height="108" viewBox="0 0 108 108" fill="none" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" d="M75 31.0001C78.3137 31.0001 81 33.6864 81 37.0001V44.4339C81.8278 45.6739 82.1977 47.2224 81.9185 48.8065L81 54.0147V55.8692C81.2385 55.7207 81.5023 55.5135 81.7856 55.2232L81.864 55.1412C82.3815 54.5878 82.9573 54.0824 83.5825 53.6656L83.7239 53.5736C85.1958 52.6378 87.0298 52.1726 88.6753 53.0533C90.3738 53.9624 90.9907 55.8341 90.9907 57.6305L90.9895 57.7735C90.9384 60.7815 89.2885 64.1632 87.1213 66.2555L87.1211 66.2552C85.2162 68.1795 82.7376 69.0841 80.7588 69.5221C80.6417 69.548 80.5255 69.572 80.4106 69.5951C79.8487 70.7645 78.9192 71.7235 77.7715 72.3223L76.709 78.3509C76.1335 81.6141 73.0215 83.7931 69.7583 83.2179L30.3657 76.2718C30.328 76.2652 30.292 76.2576 30.2576 76.2508C29.124 76.0893 28.0601 75.8434 27.2224 75.4942C26.8046 75.32 26.3313 75.075 25.9299 74.7176C25.538 74.3686 25.0098 73.7183 25.0005 72.7752C25.0005 72.7766 25.0007 72.778 25.0007 72.7794C25.0006 72.7696 25 72.7599 25 72.7501V34.5001C25 33.8368 25.3232 33.2494 25.8203 32.8856C26.2266 32.4885 26.6978 32.2406 27.0352 32.0872C27.6048 31.8283 28.2727 31.6301 28.9683 31.4781C29.7466 31.308 30.6353 31.1794 31.5925 31.0987C31.5854 31.0993 31.5784 31.0998 31.5713 31.1004L32.6726 28.0748L32.7275 27.93C33.9136 24.9114 37.2979 23.3732 40.363 24.4888L52.8337 29.0277L65.3047 24.4888C68.4185 23.3555 71.8617 24.9609 72.9951 28.0748L74.0598 31.0001H75ZM34.8474 73.0001L70.4529 79.2784C71.5406 79.4701 72.5777 78.7437 72.7695 77.6561L73.5906 73.0001H34.8474ZM34 35.0001C32.3461 35.0001 30.8829 35.1543 29.8225 35.3861C29.4849 35.4599 29.2118 35.5362 29 35.6082V69.4718C30.4021 69.1686 32.1493 69.0001 34 69.0001H75L75.103 68.9974C76.1256 68.9455 76.9454 68.1256 76.9973 67.1031L77 67.0001V37.0001C77 35.8955 76.1046 35.0001 75 35.0001H34ZM86.782 56.5904C86.6812 56.5851 86.3996 56.6115 85.8818 56.9412L85.8013 56.9937C85.4702 57.2144 85.1253 57.5101 84.7834 57.8761C84.7824 57.8772 84.7811 57.8783 84.78 57.8795L84.6406 58.025C83.4435 59.2483 82.1848 59.8799 81 60.1214V65.3201C82.1999 64.9382 83.3456 64.358 84.219 63.5015L84.343 63.3775C85.8843 61.8895 86.9907 59.4316 86.9907 57.6305L86.9897 57.5343C86.9769 56.9198 86.8422 56.671 86.782 56.5904ZM46.5574 31.0001L38.9949 28.2476C37.9893 27.8817 36.8807 28.3724 36.469 29.347L36.4314 29.4429L35.8645 31.0001H46.5574ZM69.803 31.0001L69.2363 29.4429C68.8586 28.4051 67.7109 27.8698 66.6729 28.2476L59.1104 31.0001H69.803Z" fill="black"/>
<path d="M55.165 51C56.3197 51.0001 57.0412 52.25 56.4639 53.25L54.6943 56.3145C54.5983 56.7617 54.7947 57.2387 55.2122 57.4797C55.7303 57.7788 56.3927 57.6015 56.6919 57.0835C57.1061 56.3661 58.0235 56.1202 58.741 56.5344C59.4584 56.9487 59.7042 57.8661 59.29 58.5835C58.1625 60.5364 55.6651 61.2054 53.7122 60.0779C53.4495 59.9262 53.2103 59.7495 52.9954 59.553C52.7804 59.7495 52.5414 59.9263 52.2788 60.0779C50.3258 61.2055 47.8283 60.5365 46.7007 58.5835C46.2865 57.8661 46.5324 56.9487 47.2498 56.5344C47.9672 56.1202 48.8846 56.3661 49.2988 57.0835C49.598 57.6016 50.2607 57.7789 50.7788 57.4797C51.2042 57.2341 51.3997 56.7436 51.2905 56.2891L49.5359 53.25C48.9586 52.25 49.6801 51.0001 50.8347 51H55.165Z" fill="black"/>
<path d="M43.2499 42.5C46.0011 42.5 48.4844 44.0694 49.4008 46.4639C49.6968 47.2376 49.3097 48.1048 48.536 48.4009C47.7623 48.697 46.8951 48.3098 46.599 47.5361C46.1806 46.4427 44.9148 45.5 43.2499 45.5C41.5849 45.5 40.3192 46.4427 39.9008 47.5361C39.6047 48.3098 38.7374 48.697 37.9637 48.4009C37.1901 48.1048 36.8029 47.2376 37.099 46.4639C38.0153 44.0694 40.4987 42.5 43.2499 42.5Z" fill="black"/>
<path d="M62.7499 42.5C65.5011 42.5 67.9844 44.0694 68.9008 46.4639C69.1968 47.2376 68.8097 48.1048 68.036 48.4009C67.2623 48.697 66.3951 48.3098 66.099 47.5361C65.6806 46.4427 64.4148 45.5 62.7499 45.5C61.0849 45.5 59.8192 46.4427 59.4008 47.5361C59.1047 48.3098 58.2374 48.697 57.4637 48.4009C56.6901 48.1048 56.3029 47.2376 56.599 46.4639C57.5153 44.0694 59.9987 42.5 62.7499 42.5Z" fill="black"/>
<path d="M33 55C32.1716 55 31.5 54.3284 31.5 53.5C31.5 52.6716 32.1716 52 33 52H44.25C45.0784 52 45.75 52.6716 45.75 53.5C45.75 54.3284 45.0784 55 44.25 55H33Z" fill="black"/>
<path d="M33.6106 59.8701C32.8538 60.2073 31.9671 59.8671 31.6299 59.1104C31.2928 58.3537 31.6329 57.467 32.3896 57.1298L43.6118 52.1298C44.3685 51.7926 45.2553 52.1328 45.5924 52.8895C45.9296 53.6462 45.5894 54.533 44.8327 54.8701L33.6106 59.8701Z" fill="black"/>
<path d="M60.8488 54.8768C60.0885 54.5478 59.7389 53.6647 60.0678 52.9044C60.3968 52.1441 61.2798 51.7945 62.0401 52.1234L73.5957 57.1233C74.356 57.4523 74.7056 58.3353 74.3767 59.0956C74.0477 59.8559 73.1647 60.2056 72.4043 59.8766L60.8488 54.8768Z" fill="black"/>
<path d="M73 52C73.8284 52 74.5 52.6716 74.5 53.5C74.5 54.3284 73.8284 55 73 55H61.5C60.6716 55 60 54.3284 60 53.5C60 52.6716 60.6716 52 61.5 52H73Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 4.8 KiB

69
.design/master_color.svg Normal file
View File

@@ -0,0 +1,69 @@
<svg width="432" height="432" viewBox="0 0 432 432" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="432" height="432" fill="#1F4262"/>
<g filter="url(#filter0_d_39_7)">
<path d="M182 122.308L272.21 89.4737C280.514 86.4514 289.696 90.7328 292.718 99.0364L303.663 129.107L198.417 167.413L182 122.308Z" fill="#F5A3A3"/>
<path d="M274.263 95.1118C279.452 93.2229 285.191 95.8988 287.08 101.089L295.972 125.521L202.003 159.723L189.69 125.894L274.263 95.1118Z" stroke="#E82E2E" stroke-width="12"/>
</g>
<g filter="url(#filter1_d_39_7)">
<path d="M233.662 122.307L143.452 89.4727C135.148 86.4504 125.966 90.7318 122.944 99.0355L112 129.106L217.245 167.412L233.662 122.307Z" fill="#F5A3A3"/>
<path d="M141.399 95.1109C136.21 93.2219 130.471 95.8978 128.582 101.088L119.69 125.52L213.659 159.722L225.972 125.893L141.399 95.1109Z" stroke="#E82E2E" stroke-width="12"/>
</g>
<g filter="url(#filter2_d_39_7)">
<path d="M114.783 150.397C116.318 141.695 124.617 135.884 133.319 137.419L322.402 170.759C331.104 172.293 336.915 180.592 335.381 189.294L327.263 235.331C329.199 236.395 338.665 240.629 349.664 228.915V228.916C351.663 226.777 353.803 224.913 356.027 223.43C367.056 216.077 375.997 220.862 375.997 234.117C375.997 245.372 369.551 259.113 360.854 267.505C346.504 282.169 322.773 282.222 319.01 282.134L310.375 331.106C308.841 339.809 300.542 345.619 291.84 344.085L102.757 310.745C102.684 310.732 102.611 310.717 102.538 310.703C93.7855 309.276 88 306.809 88 304.001C88 302.87 88.9396 301.794 90.6338 300.818C89.5953 298.172 89.2485 295.215 89.7783 292.21L114.783 150.397Z" fill="#B81414"/>
</g>
<circle cx="8" cy="8" r="8" transform="matrix(0.83205 -0.5547 0 1 349.37 243.867)" fill="#E82E2E"/>
<g filter="url(#filter3_d_39_7)">
<path d="M312 120C320.837 120 328 127.163 328 136V280C328 288.837 320.837 296 312 296H120C102.327 296 88 299.582 88 304V128C88 123.582 102.327 120 120 120H312Z" fill="#E82E2E"/>
</g>
<path d="M230.785 232C227.471 237.74 220.132 239.706 214.392 236.392C208.653 233.079 206.686 225.74 210 220" stroke="#8A0F0F" stroke-width="12" stroke-linecap="round"/>
<path d="M185.2 232C188.513 237.74 195.853 239.706 201.592 236.392C207.332 233.079 209.298 225.74 205.984 220" stroke="#8A0F0F" stroke-width="12" stroke-linecap="round"/>
<path d="M213.196 227C210.887 231 205.113 231 202.804 227L192.412 209C190.102 205 192.989 200 197.608 200L218.392 200C223.011 200 225.898 205 223.588 209L213.196 227Z" fill="#8A0F0F"/>
<path d="M184 184C180.909 174.699 172.227 168 162 168C151.773 168 143.091 174.699 140 184" stroke="#8A0F0F" stroke-width="12" stroke-linecap="round"/>
<path d="M276 184C272.909 174.699 264.227 168 254 168C243.773 168 235.091 174.699 232 184" stroke="#8A0F0F" stroke-width="12" stroke-linecap="round"/>
<path d="M168 216H104" stroke="#8A0F0F" stroke-width="8" stroke-linecap="round"/>
<path d="M168 216L104 240" stroke="#8A0F0F" stroke-width="8" stroke-linecap="round"/>
<path d="M312 240L248 216" stroke="#8A0F0F" stroke-width="8" stroke-linecap="round"/>
<path d="M248 216H312" stroke="#8A0F0F" stroke-width="8" stroke-linecap="round"/>
<defs>
<filter id="filter0_d_39_7" x="166" y="72.5049" width="153.663" height="110.908" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feGaussianBlur stdDeviation="8"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_39_7"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_39_7" result="shape"/>
</filter>
<filter id="filter1_d_39_7" x="95.9995" y="72.5039" width="153.663" height="110.908" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feGaussianBlur stdDeviation="8"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_39_7"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_39_7" result="shape"/>
</filter>
<filter id="filter2_d_39_7" x="72" y="121.173" width="319.997" height="239.158" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feGaussianBlur stdDeviation="8"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_39_7"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_39_7" result="shape"/>
</filter>
<filter id="filter3_d_39_7" x="72" y="104" width="272" height="216" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feGaussianBlur stdDeviation="8"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_39_7"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_39_7" result="shape"/>
</filter>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.5 KiB

View File

@@ -32,7 +32,7 @@ jobs:
matrix:
flavor: [Foss, Gplay]
steps:
- uses: actions/checkout@v4.2.2
- uses: actions/checkout@v5.0.0
- name: Fail on bad translations
run: if grep -ri "&lt;xliff" app/src/main/res/values*/strings.xml; then echo "Invalidly escaped translations found"; exit 1; fi
- uses: gradle/actions/wrapper-validation@v4

View File

@@ -27,7 +27,7 @@ jobs:
steps:
- name: Checkout repo
id: checkout
uses: actions/checkout@v4.2.2
uses: actions/checkout@v5.0.0
- name: Setup Python
uses: actions/setup-python@v5.6.0
with:

View File

@@ -25,7 +25,7 @@ jobs:
steps:
- name: Checkout repo
id: checkout
uses: actions/checkout@v4.2.2
uses: actions/checkout@v5.0.0
- name: Update contributors
id: update_contributors
uses: TheLastProject/contributors-to-file-action@v3.2.0

View File

@@ -25,7 +25,7 @@ jobs:
generate-feature-graphic:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.2.2
- uses: actions/checkout@v5.0.0
- name: Install requirements
run: |
sudo apt-get update

View File

@@ -25,7 +25,7 @@ jobs:
update-locales:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.2.2
- uses: actions/checkout@v5.0.0
- name: Add new locales
run: .scripts/new-locales.py
- name: Update locales

View File

@@ -1,15 +1,76 @@
<svg width="1024" height="500" viewBox="0 0 1024 500" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="1024" height="500" fill="#223355"/>
<text direction="ltr" fill="white" xml:space="preserve" style="" font-family="Yesteryear" font-size="150" letter-spacing="0em"><tspan x="470.082" y="285.511">Catima
</tspan></text>
<path d="M381.046 147.001L236.3 211.446L276.524 301.79L421.27 237.345L381.046 147.001Z" fill="#F0F0F0" stroke="#C80000" stroke-width="2"/>
<path d="M402.077 219.13L240.07 147L191.984 255.004L353.99 327.135L402.077 219.13Z" fill="#F0F0F0" stroke="#C80000" stroke-width="2"/>
<path d="M437.17 236.241L251.831 183.096L220.071 293.855L405.41 347L437.17 236.241Z" fill="#C80000" stroke="#C80000" stroke-width="6" stroke-linejoin="round"/>
<path d="M412.879 178.633H220.071V293.855H412.879V178.633Z" fill="#FF0000" stroke="#FF0000" stroke-width="6" stroke-linejoin="round"/>
<path d="M221.482 296.217C238.316 296.217 251.963 269.366 251.963 236.244C251.963 203.121 238.316 176.27 221.482 176.27C204.647 176.27 191 203.121 191 236.244C191 269.366 204.647 296.217 221.482 296.217Z" fill="#FF0000" stroke="#FF0000" stroke-width="3.44232" stroke-linejoin="round"/>
<path d="M307.256 250.444C307.256 253.187 306.289 255.842 304.526 257.944C302.763 260.045 300.316 261.458 297.614 261.934C294.913 262.41 292.13 261.92 289.755 260.548C287.379 259.177 285.563 257.012 284.625 254.435" stroke="#F0F0F0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M330.301 254.298C329.363 256.875 327.547 259.04 325.171 260.411C322.796 261.783 320.013 262.273 317.312 261.797C314.61 261.321 312.163 259.908 310.4 257.807C308.637 255.706 307.671 253.05 307.671 250.307" stroke="#F0F0F0" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M248.345 225.937L266.818 207.465L285.29 225.937" stroke="#F0F0F0" stroke-width="2"/>
<path d="M329.625 225.937L348.098 207.465L366.571 225.937" stroke="#F0F0F0" stroke-width="2"/>
<text direction="ltr" fill="white" xml:space="preserve" style="" font-family="Lexend Deca" font-size="35" font-weight="200" letter-spacing="0em"><tspan x="466" y="340">Loyalty Card Wallet</tspan></text>
<g clip-path="url(#clip0_78_203)">
<path d="M1024 0H0V500H1024V0Z" fill="#1F4262"/>
<text fill="white" xml:space="preserve" style="white-space: pre" font-family="Lexend" font-size="35" letter-spacing="0em"><tspan x="481" y="325">Loyalty Card Wallet</tspan></text>
<text fill="white" xml:space="preserve" style="white-space: pre" font-family="Lobster" font-size="150" letter-spacing="0em"><tspan x="469" y="270">Catima</tspan></text>
<g filter="url(#filter0_d_78_203)">
<path d="M218 156.307L308.21 123.473C316.514 120.45 325.696 124.732 328.718 133.035L339.663 163.106L234.417 201.412L218 156.307Z" fill="#F5A3A3"/>
<path d="M310.263 129.111C315.452 127.222 321.191 129.898 323.08 135.088L331.972 159.52L238.003 193.722L225.69 159.893L310.263 129.111Z" stroke="#E82E2E" stroke-width="12"/>
</g>
<g filter="url(#filter1_d_78_203)">
<path d="M269.662 156.307L179.452 123.473C171.148 120.45 161.966 124.732 158.944 133.035L148 163.106L253.245 201.412L269.662 156.307Z" fill="#F5A3A3"/>
<path d="M177.399 129.111C172.21 127.222 166.471 129.898 164.582 135.088L155.69 159.52L249.659 193.722L261.972 159.893L177.399 129.111Z" stroke="#E82E2E" stroke-width="12"/>
</g>
<g filter="url(#filter2_d_78_203)">
<path d="M150.783 184.396C152.318 175.694 160.617 169.884 169.319 171.418L358.402 204.759C367.104 206.293 372.915 214.592 371.381 223.294L363.263 269.331C365.199 270.395 374.665 274.629 385.664 262.915V262.916C387.662 260.777 389.802 258.913 392.027 257.43C403.056 250.077 411.997 254.862 411.997 268.117C411.997 279.372 405.55 293.113 396.853 301.505C382.504 316.169 358.773 316.221 355.01 316.133L346.375 365.106C344.84 373.809 336.542 379.619 327.84 378.085L138.757 344.744C138.689 344.732 138.622 344.719 138.555 344.706C129.793 343.279 124 340.81 124 338.001C124 336.87 124.939 335.794 126.633 334.818C125.594 332.171 125.248 329.214 125.778 326.209L150.783 184.396Z" fill="#B81414"/>
</g>
<circle cx="8" cy="8" r="8" transform="matrix(0.83205 -0.5547 0 1 385.37 277.867)" fill="#E82E2E"/>
<g filter="url(#filter3_d_78_203)">
<path d="M348 154C356.837 154 364 161.163 364 170V314C364 322.837 356.837 330 348 330H156C138.327 330 124 333.582 124 338V162C124 157.582 138.327 154 156 154H348Z" fill="#E82E2E"/>
</g>
<path d="M266.784 266C263.471 271.74 256.132 273.706 250.392 270.392C244.653 267.079 242.686 259.74 246 254" stroke="#8A0F0F" stroke-width="12" stroke-linecap="round"/>
<path d="M221.2 266C224.514 271.74 231.853 273.706 237.592 270.392C243.332 267.079 245.298 259.74 241.984 254" stroke="#8A0F0F" stroke-width="12" stroke-linecap="round"/>
<path d="M249.196 261C246.887 265 241.113 265 238.804 261L228.412 243C226.102 239 228.989 234 233.608 234L254.392 234C259.011 234 261.898 239 259.588 243L249.196 261Z" fill="#8A0F0F"/>
<path d="M220 218C216.909 208.699 208.227 202 198 202C187.773 202 179.091 208.699 176 218" stroke="#8A0F0F" stroke-width="12" stroke-linecap="round"/>
<path d="M312 218C308.909 208.699 300.227 202 290 202C279.773 202 271.091 208.699 268 218" stroke="#8A0F0F" stroke-width="12" stroke-linecap="round"/>
<path d="M204 250H140" stroke="#8A0F0F" stroke-width="8" stroke-linecap="round"/>
<path d="M204 250L140 274" stroke="#8A0F0F" stroke-width="8" stroke-linecap="round"/>
<path d="M348 274L284 250" stroke="#8A0F0F" stroke-width="8" stroke-linecap="round"/>
<path d="M284 250H348" stroke="#8A0F0F" stroke-width="8" stroke-linecap="round"/>
</g>
<defs>
<filter id="filter0_d_78_203" x="202" y="106.504" width="153.663" height="110.908" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feGaussianBlur stdDeviation="8"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_78_203"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_78_203" result="shape"/>
</filter>
<filter id="filter1_d_78_203" x="132" y="106.504" width="153.663" height="110.908" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feGaussianBlur stdDeviation="8"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_78_203"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_78_203" result="shape"/>
</filter>
<filter id="filter2_d_78_203" x="108" y="155.172" width="319.997" height="239.159" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feGaussianBlur stdDeviation="8"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_78_203"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_78_203" result="shape"/>
</filter>
<filter id="filter3_d_78_203" x="108" y="138" width="272" height="216" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset/>
<feGaussianBlur stdDeviation="8"/>
<feComposite in2="hardAlpha" operator="out"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_78_203"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_78_203" result="shape"/>
</filter>
<clipPath id="clip0_78_203">
<rect width="1024" height="500" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

Binary file not shown.

View File

@@ -2,7 +2,7 @@ Copyright 2018 The Lexend Project Authors (https://github.com/googlefonts/lexend
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
https://openfontlicense.org
-----------------------------------------------------------

View File

Binary file not shown.

View File

@@ -1,9 +1,8 @@
Copyright (c) 2011 by Brian J. Bonislawsky DBA Astigmatic (AOETI)
(astigma@astigmatic.com), with Reserved Font Names "Yesteryear"
Copyright 2010 The Lobster Project Authors (https://github.com/impallari/The-Lobster-Font), with Reserved Font Name "Lobster".
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL
https://openfontlicense.org
-----------------------------------------------------------

View File

@@ -33,20 +33,21 @@ for lang in "$script_location/../../fastlane/metadata/android/"*; do
perl -pi -e 's/Catima/$ENV{appname}/' featureGraphic.svg
perl -pi -e 's/Loyalty Card Wallet/$ENV{subtext}/' featureGraphic.svg
# Set correct font or font size for language if needed
# (Lexend Deca has limited support and some characters are big)
# We specifically need the Serif version because of the 200 weight
# (Lobster and Lexend have limited language support)
case "$(basename "$lang")" in
bg|el-GR|ru-RU|uk) sed -i "s/Lexend Deca/Noto Serif/" featureGraphic.svg ;;
fa-IR) sed -i -e 's/svg direction="ltr"/svg direction="rtl"/' -e "s/Yesteryear/Noto Sans Arabic/" -e "s/Lexend Deca/Noto Sans Arabic/" featureGraphic.svg ;;
hi-IN) sed -i -e "s/Yesteryear/Noto Sans Devanagari/" -e "s/Lexend Deca/Noto Serif Devanagari/" featureGraphic.svg ;;
ja-JP) sed -i "s/Lexend Deca/Noto Serif CJK JP/" featureGraphic.svg ;;
kn-IN) sed -i -e 's/font-size="150"/font-size="100"/' -e "s/Yesteryear/Noto Serif Kannada/" featureGraphic.svg ;;
ko) sed -i "s/Lexend Deca/Noto Serif CJK KR/" featureGraphic.svg ;;
zh-CN) sed -i "s/Lexend Deca/Noto Serif CJK SC/" featureGraphic.svg ;;
zh-TW) sed -i -e "s/Yesteryear/Noto Sans CJK TC/" -e "s/Lexend Deca/Noto Serif CJK TC/" featureGraphic.svg ;;
bg|el-GR|ru-RU|uk) sed -i "s/Lexend/Noto Sans/" featureGraphic.svg ;;
ar|fa-IR) sed -i -e 's/svg direction="ltr"/svg direction="rtl"/' -e "s/Lobster/Noto Sans Arabic/" -e "s/Lexend/Noto Sans Arabic/" featureGraphic.svg ;;
he-IL) sed -i -e "s/Lobster/Noto Sans Hebrew/" -e "s/Lexend/Noto Sans Hebrew/" featureGraphic.svg ;;
hi-IN) sed -i -e "s/Lobster/Noto Sans Devanagari/" -e "s/Lexend/Noto Sans Devanagari/" featureGraphic.svg ;;
ja-JP) sed -i "s/Lexend/Noto Sans CJK JP/" featureGraphic.svg ;;
kn-IN) sed -i -e 's/font-size="150"/font-size="125"/' -e 's/\(<tspan x="469" \)y="270"/\1y="240"/' -e "s/Lobster/Noto Sans Kannada/" -e "s/Lexend/Noto Sans Kannada/" featureGraphic.svg ;;
ko) sed -i "s/Lexend/Noto Sans CJK KR/" featureGraphic.svg ;;
zh-CN) sed -i "s/Lexend/Noto Sans CJK SC/" featureGraphic.svg ;;
zh-TW) sed -i -e "s/Lobster/Noto Sans CJK TC/" -e "s/Lexend/Noto Sans CJK TC/" featureGraphic.svg ;;
*) ;;
esac
fi
# Ensure images directory exists
mkdir -p images
# Generate .png (we use Inkscape because ImageMagick ignores RTL)

View File

@@ -1,8 +1,14 @@
# Changelog
## Unreleased - 150
## v2.37.0 - 151 (2025-08-22)
- Made it harder to accidentally close edit view
- New redesign of the Catima logo
- Translation updates
## v2.36.0 - 150 (2025-08-05)
- Add a widget showing all non-archived cards
- Prevent the keyboard from overlapping the save button in edit and group screens
## v2.35.1 - 149 (2025-06-17)

View File

@@ -17,8 +17,8 @@ android {
applicationId = "me.hackerchick.catima"
minSdk = 21
targetSdk = 35
versionCode = 149
versionName = "2.35.1"
versionCode = 151
versionName = "2.37.0"
vectorDrawables.useSupportLibrary = true
multiDexEnabled = true
@@ -112,6 +112,7 @@ dependencies {
implementation("androidx.appcompat:appcompat:1.7.1")
implementation("androidx.constraintlayout:constraintlayout:2.2.1")
implementation("androidx.core:core-ktx:1.16.0")
implementation("androidx.core:core-remoteviews:1.1.0")
implementation("androidx.core:core-splashscreen:1.0.1")
implementation("androidx.exifinterface:exifinterface:1.4.1")
implementation("androidx.palette:palette:1.0.0")
@@ -128,7 +129,7 @@ dependencies {
implementation("net.lingala.zip4j:zip4j:2.11.5")
// Testing
val androidXTestVersion = "1.6.1"
val androidXTestVersion = "1.7.0"
val junitVersion = "4.13.2"
testImplementation("androidx.test:core:$androidXTestVersion")
testImplementation("junit:junit:$junitVersion")
@@ -136,10 +137,10 @@ dependencies {
androidTestImplementation("androidx.test:core:$androidXTestVersion")
androidTestImplementation("junit:junit:$junitVersion")
androidTestImplementation("androidx.test.ext:junit:1.2.1")
androidTestImplementation("androidx.test.ext:junit:1.3.0")
androidTestImplementation("androidx.test:runner:$androidXTestVersion")
androidTestImplementation("androidx.test.uiautomator:uiautomator:2.3.0")
androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1")
androidTestImplementation("androidx.test.espresso:espresso-core:3.7.0")
}
tasks.register("copyRawResFiles", Copy::class) {

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">קטימה ניפוי באגים</string>
</resources>

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">கேட்டிமா Debug</string>
</resources>

View File

@@ -30,6 +30,20 @@
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:localeConfig="@xml/locales_config">
<receiver
android:name=".ListWidget"
android:label="@string/card_list_widget_name"
android:exported="false">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/list_widget_info" />
</receiver>
<activity
android:name=".MainActivity"
android:exported="true"
@@ -75,7 +89,8 @@
<activity
android:name=".ManageGroupActivity"
android:label="@string/group_edit"
android:theme="@style/AppTheme.NoActionBar"/>
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="adjustResize"/>
<activity
android:name=".LoyaltyCardViewActivity"
android:exported="true"

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -1,126 +0,0 @@
package protect.card_locker;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import androidx.appcompat.widget.Toolbar;
import com.google.zxing.BarcodeFormat;
import java.util.ArrayList;
import protect.card_locker.databinding.BarcodeSelectorActivityBinding;
/**
* This activity is callable and will allow a user to enter
* barcode data and generate all barcodes possible for
* the data. The user may then select any barcode, where its
* data and type will be returned to the caller.
*/
public class BarcodeSelectorActivity extends CatimaAppCompatActivity implements BarcodeSelectorAdapter.BarcodeSelectorListener {
private BarcodeSelectorActivityBinding binding;
private static final String TAG = "Catima";
// Result this activity will return
public static final String BARCODE_CONTENTS = "contents";
public static final String BARCODE_FORMAT = "format";
private final Handler typingDelayHandler = new Handler(Looper.getMainLooper());
public static final Integer INPUT_DELAY = 250;
private BarcodeSelectorAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = BarcodeSelectorActivityBinding.inflate(getLayoutInflater());
setTitle(R.string.selectBarcodeTitle);
setContentView(binding.getRoot());
Utils.applyWindowInsets(binding.getRoot());
Toolbar toolbar = binding.toolbar;
setSupportActionBar(toolbar);
enableToolbarBackButton();
EditText cardId = binding.cardId;
ListView mBarcodeList = binding.barcodes;
mAdapter = new BarcodeSelectorAdapter(this, new ArrayList<>(), this);
mBarcodeList.setAdapter(mAdapter);
cardId.addTextChangedListener(new SimpleTextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// Delay the input processing so we avoid overload
typingDelayHandler.removeCallbacksAndMessages(null);
typingDelayHandler.postDelayed(() -> {
Log.d(TAG, "Entered text: " + s);
runOnUiThread(() -> {
generateBarcodes(s.toString());
});
}, INPUT_DELAY);
}
});
final Bundle b = getIntent().getExtras();
final String initialCardId = b != null ? b.getString(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID) : null;
if (initialCardId != null) {
cardId.setText(initialCardId);
} else {
generateBarcodes("");
}
}
private void generateBarcodes(String value) {
// Update barcodes
ArrayList<CatimaBarcodeWithValue> barcodes = new ArrayList<>();
for (BarcodeFormat barcodeFormat : CatimaBarcode.barcodeFormats) {
CatimaBarcode catimaBarcode = CatimaBarcode.fromBarcode(barcodeFormat);
barcodes.add(new CatimaBarcodeWithValue(catimaBarcode, value));
}
mAdapter.setBarcodes(barcodes);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
setResult(Activity.RESULT_CANCELED);
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onRowClicked(int inputPosition, View view) {
CatimaBarcodeWithValue barcodeWithValue = mAdapter.getItem(inputPosition);
CatimaBarcode catimaBarcode = barcodeWithValue.catimaBarcode();
if (!mAdapter.isValid(view)) {
Toast.makeText(this, getString(R.string.wrongValueForBarcodeType), Toast.LENGTH_LONG).show();
return;
}
String barcodeFormat = catimaBarcode.format().name();
String value = barcodeWithValue.value();
Log.d(TAG, "Selected barcode type " + barcodeFormat);
Intent result = new Intent();
result.putExtra(BARCODE_FORMAT, barcodeFormat);
result.putExtra(BARCODE_CONTENTS, value);
BarcodeSelectorActivity.this.setResult(RESULT_OK, result);
finish();
}
}

View File

@@ -0,0 +1,118 @@
package protect.card_locker
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.widget.Toast
import androidx.core.view.MenuProvider
import androidx.core.widget.doOnTextChanged
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import protect.card_locker.BarcodeSelectorAdapter.BarcodeSelectorListener
import protect.card_locker.databinding.BarcodeSelectorActivityBinding
/**
* This activity is callable and will allow a user to enter
* barcode data and generate all barcodes possible for
* the data. The user may then select any barcode, where its
* data and type will be returned to the caller.
*/
class BarcodeSelectorActivity : CatimaAppCompatActivity(), BarcodeSelectorListener, MenuProvider {
private lateinit var binding: BarcodeSelectorActivityBinding
private lateinit var mAdapter: BarcodeSelectorAdapter
companion object {
private const val TAG = "Catima"
// Result this activity will return
const val BARCODE_CONTENTS = "contents"
const val BARCODE_FORMAT = "format"
const val INPUT_DELAY = 250L
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
addMenuProvider(this)
binding = BarcodeSelectorActivityBinding.inflate(layoutInflater)
setTitle(R.string.selectBarcodeTitle)
setContentView(binding.getRoot())
Utils.applyWindowInsets(binding.getRoot())
setSupportActionBar(binding.toolbar)
enableToolbarBackButton()
var typingDelayJob: Job? = null
val cardId = binding.cardId
val mBarcodeList = binding.barcodes
mAdapter = BarcodeSelectorAdapter(this, ArrayList<CatimaBarcodeWithValue?>(), this)
mBarcodeList.adapter = mAdapter
cardId.doOnTextChanged { s, _, _, _ ->
typingDelayJob?.cancel()
typingDelayJob =
lifecycleScope.launch {
delay(INPUT_DELAY) // Delay the input processing so we avoid overload
Log.d(TAG, "Entered text: $s")
generateBarcodes(s.toString())
}
}
val initialCardId = intent.extras?.getString(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID)
initialCardId?.let {
cardId.setText(initialCardId)
} ?: generateBarcodes("")
}
private fun generateBarcodes(value: String?) {
// Update barcodes
val barcodes = ArrayList<CatimaBarcodeWithValue?>()
CatimaBarcode.barcodeFormats.forEach {
val catimaBarcode = CatimaBarcode.fromBarcode(it)
barcodes.add(CatimaBarcodeWithValue(catimaBarcode, value))
}
mAdapter.setBarcodes(barcodes)
}
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
if (menuItem.itemId == android.R.id.home) {
setResult(RESULT_CANCELED)
finish()
}
return true
}
override fun onRowClicked(inputPosition: Int, view: View) {
val barcodeWithValue = mAdapter.getItem(inputPosition)
val catimaBarcode = barcodeWithValue!!.catimaBarcode()
if (!mAdapter.isValid(view)) {
Toast.makeText(this, getString(R.string.wrongValueForBarcodeType), Toast.LENGTH_LONG).show()
return
}
val barcodeFormat = catimaBarcode.format().name
val value = barcodeWithValue.value()
Log.d(TAG, "Selected barcode type $barcodeFormat")
Intent().apply {
putExtra(BARCODE_FORMAT, barcodeFormat)
putExtra(BARCODE_CONTENTS, value)
setResult(RESULT_OK, this)
}
finish()
}
}

View File

@@ -1,111 +0,0 @@
package protect.card_locker;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.pm.ShortcutInfoCompat;
import androidx.core.content.pm.ShortcutManagerCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import protect.card_locker.databinding.CardShortcutConfigureActivityBinding;
import protect.card_locker.preferences.Settings;
/**
* The configuration screen for creating a shortcut.
*/
public class CardShortcutConfigure extends CatimaAppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener {
private CardShortcutConfigureActivityBinding binding;
static final String TAG = "Catima";
private SQLiteDatabase mDatabase;
private LoyaltyCardCursorAdapter mAdapter;
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
binding = CardShortcutConfigureActivityBinding.inflate(getLayoutInflater());
mDatabase = new DBHelper(this).getReadableDatabase();
// Set the result to CANCELED. This will cause nothing to happen if the
// aback button is pressed.
setResult(RESULT_CANCELED);
setContentView(binding.getRoot());
Utils.applyWindowInsets(binding.getRoot());
Toolbar toolbar = binding.toolbar;
toolbar.setTitle(R.string.shortcutSelectCard);
setSupportActionBar(toolbar);
// If there are no cards, bail
int cardCount = DBHelper.getLoyaltyCardCount(mDatabase);
if (cardCount == 0) {
Toast.makeText(this, R.string.noCardsMessage, Toast.LENGTH_LONG).show();
finish();
}
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.All);
mAdapter = new LoyaltyCardCursorAdapter(this, cardCursor, this, null);
binding.list.setAdapter(mAdapter);
}
@Override
protected void onResume() {
super.onResume();
var layoutManager = (GridLayoutManager) binding.list.getLayoutManager();
if (layoutManager != null) {
var settings = new Settings(this);
layoutManager.setSpanCount(settings.getPreferredColumnCount());
}
}
private void onClickAction(int position) {
Cursor selected = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.All);
selected.moveToPosition(position);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(CardShortcutConfigure.this, selected);
Log.d(TAG, "Creating shortcut for card " + loyaltyCard.store + "," + loyaltyCard.id);
ShortcutInfoCompat shortcut = ShortcutHelper.createShortcutBuilder(CardShortcutConfigure.this, loyaltyCard).build();
setResult(RESULT_OK, ShortcutManagerCompat.createShortcutResultIntent(CardShortcutConfigure.this, shortcut));
finish();
}
@Override
public boolean onCreateOptionsMenu(Menu inputMenu) {
getMenuInflater().inflate(R.menu.card_details_menu, inputMenu);
return super.onCreateOptionsMenu(inputMenu);
}
@Override
public boolean onOptionsItemSelected(MenuItem inputItem) {
int id = inputItem.getItemId();
if (id == R.id.action_display_options) {
mAdapter.showDisplayOptionsDialog();
invalidateOptionsMenu();
return true;
}
return super.onOptionsItemSelected(inputItem);
}
@Override
public void onRowClicked(int inputPosition) {
onClickAction(inputPosition);
}
@Override
public void onRowLongClicked(int inputPosition) {
// do nothing
}
}

View File

@@ -0,0 +1,96 @@
package protect.card_locker
import android.database.sqlite.SQLiteDatabase
import android.os.Bundle
import android.util.Log
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.widget.Toast
import androidx.core.content.pm.ShortcutManagerCompat
import androidx.core.view.MenuProvider
import androidx.recyclerview.widget.GridLayoutManager
import protect.card_locker.LoyaltyCardCursorAdapter.CardAdapterListener
import protect.card_locker.databinding.CardShortcutConfigureActivityBinding
import protect.card_locker.preferences.Settings
class CardShortcutConfigure : CatimaAppCompatActivity(), CardAdapterListener, MenuProvider {
private lateinit var binding: CardShortcutConfigureActivityBinding
private lateinit var mDatabase: SQLiteDatabase
private lateinit var mAdapter: LoyaltyCardCursorAdapter
private companion object {
private const val TAG: String = "Catima"
}
public override fun onCreate(savedInstanceBundle: Bundle?) {
super.onCreate(savedInstanceBundle)
addMenuProvider(this)
binding = CardShortcutConfigureActivityBinding.inflate(layoutInflater)
mDatabase = DBHelper(this).readableDatabase
// Set the result to CANCELED.
// This will cause nothing to happen if the back button is pressed.
setResult(RESULT_CANCELED)
setContentView(binding.getRoot())
Utils.applyWindowInsets(binding.getRoot())
binding.toolbar.apply {
setTitle(R.string.shortcutSelectCard)
setSupportActionBar(this)
}
// If there are no cards, bail
if (DBHelper.getLoyaltyCardCount(mDatabase) == 0) {
Toast.makeText(this, R.string.noCardsMessage, Toast.LENGTH_LONG).show()
finish()
}
val cardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.All)
mAdapter = LoyaltyCardCursorAdapter(this, cardCursor, this, null)
binding.list.setAdapter(mAdapter)
}
override fun onResume() {
super.onResume()
val layoutManager = binding.list.layoutManager as GridLayoutManager?
layoutManager?.setSpanCount(Settings(this).getPreferredColumnCount())
}
private fun onClickAction(position: Int) {
val selected = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.All)
selected.moveToPosition(position)
val loyaltyCard = LoyaltyCard.fromCursor(this, selected)
Log.d(TAG, "Creating shortcut for card ${loyaltyCard.store}, ${loyaltyCard.id}")
val shortcut = ShortcutHelper.createShortcutBuilder(this, loyaltyCard).build()
setResult(RESULT_OK,
ShortcutManagerCompat.createShortcutResultIntent(this, shortcut))
finish()
}
override fun onCreateMenu(inputMenu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.card_details_menu, inputMenu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
if (menuItem.itemId == R.id.action_display_options) {
mAdapter.showDisplayOptionsDialog()
}
return true
}
override fun onRowClicked(inputPosition: Int) {
onClickAction(inputPosition)
}
override fun onRowLongClicked(inputPosition: Int) {
// do nothing
}
}

View File

@@ -0,0 +1,130 @@
package protect.card_locker
import android.app.PendingIntent
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProvider
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.graphics.drawable.Icon
import android.os.Build
import android.view.View
import android.widget.RemoteViews
import androidx.core.widget.RemoteViewsCompat
import protect.card_locker.DBHelper.LoyaltyCardArchiveFilter
class ListWidget : AppWidgetProvider() {
fun updateAll(context: Context) {
val appWidgetManager = AppWidgetManager.getInstance(context)
val componentName = ComponentName(context, ListWidget::class.java)
onUpdate(
context,
appWidgetManager,
appWidgetManager.getAppWidgetIds(componentName)
)
}
override fun onUpdate(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetIds: IntArray
) {
for (appWidgetId in appWidgetIds) {
val database = DBHelper(context).readableDatabase
// Get cards
val order = Utils.getLoyaltyCardOrder(context);
val orderDirection = Utils.getLoyaltyCardOrderDirection(context);
val loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(
database,
"",
null,
order,
orderDirection,
LoyaltyCardArchiveFilter.Unarchived
)
// Bind every card to cell in the grid
var hasCards = false
val remoteCollectionItemsBuilder = RemoteViewsCompat.RemoteCollectionItems.Builder()
if (loyaltyCardCursor.moveToFirst()) {
do {
val loyaltyCard = LoyaltyCard.fromCursor(context, loyaltyCardCursor)
remoteCollectionItemsBuilder.addItem(
loyaltyCard.id.toLong(),
createRemoteViews(
context, loyaltyCard
)
)
hasCards = true
} while (loyaltyCardCursor.moveToNext())
}
loyaltyCardCursor.close()
// Create the base empty view
var views = RemoteViews(context.packageName, R.layout.list_widget_empty)
if (hasCards) {
// If we have cards, create the list
views = RemoteViews(context.packageName, R.layout.list_widget)
val templateIntent = Intent(context, LoyaltyCardViewActivity::class.java)
val pendingIntent = PendingIntent.getActivity(
context,
0,
templateIntent,
PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
views.setPendingIntentTemplate(R.id.grid_view, pendingIntent)
RemoteViewsCompat.setRemoteAdapter(
context,
views,
appWidgetId,
R.id.grid_view,
remoteCollectionItemsBuilder.build()
)
}
// Let Android know the widget is ready for display
appWidgetManager.updateAppWidget(appWidgetId, views)
}
}
private fun createRemoteViews(context: Context, loyaltyCard: LoyaltyCard): RemoteViews {
// Create a single cell for the grid view, bind it to open in the LoyaltyCardViewActivity
// Note: Android 5 will not use bitmaps
val remoteViews = RemoteViews(context.packageName, R.layout.list_widget_item).apply {
val headerColor = Utils.getHeaderColor(context, loyaltyCard)
val foreground = if (Utils.needsDarkForeground(headerColor)) Color.BLACK else Color.WHITE
setInt(R.id.item_container_foreground, "setBackgroundColor", headerColor)
val icon = loyaltyCard.getImageThumbnail(context)
// setImageViewIcon is not supported on Android 5, so force Android 5 down the text path
if (icon != null && Build.VERSION.SDK_INT >= 23) {
setInt(R.id.item_container_foreground, "setBackgroundColor", foreground)
setImageViewIcon(R.id.item_image, Icon.createWithBitmap(icon))
setViewVisibility(R.id.item_text, View.INVISIBLE)
setViewVisibility(R.id.item_image, View.VISIBLE)
} else {
setImageViewBitmap(R.id.item_image, null)
setTextViewText(R.id.item_text, loyaltyCard.store)
setViewVisibility(R.id.item_text, View.VISIBLE)
setViewVisibility(R.id.item_image, View.INVISIBLE)
setTextColor(
R.id.item_text,
foreground
)
}
// Add the card ID to the intent template
val fillInIntent = Intent().apply {
putExtra(LoyaltyCardViewActivity.BUNDLE_ID, loyaltyCard.id)
}
setOnClickFillInIntent(R.id.item_container, fillInIntent)
}
return remoteViews
}
}

View File

@@ -24,7 +24,6 @@ import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
@@ -45,6 +44,9 @@ import androidx.appcompat.widget.AppCompatTextView;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.exifinterface.media.ExifInterface;
import androidx.lifecycle.ViewModelProvider;
@@ -298,7 +300,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
super.onCreate(savedInstanceState);
binding = LoyaltyCardEditActivityBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
Utils.applyWindowInsets(binding.getRoot());
Utils.applyWindowInsetsAndFabOffset(binding.getRoot(), binding.fabSave);
viewModel = new ViewModelProvider(this).get(LoyaltyCardEditActivityViewModel.class);
@@ -681,15 +683,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
View view = getCurrentFocus();
if (view != null && imm.isAcceptingText()) {
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
view.clearFocus();
}
else {
askBeforeQuitIfChanged();
}
askBeforeQuitIfChanged();
}
});
}
@@ -1523,7 +1517,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
int id = item.getItemId();
if (id == android.R.id.home) {
getOnBackPressedDispatcher().onBackPressed();
askBeforeQuitIfChanged();
return true;
}

View File

@@ -880,6 +880,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
} else if (id == R.id.action_star_unstar) {
DBHelper.updateLoyaltyCardStarStatus(database, loyaltyCardId, loyaltyCard.starStatus == 0 ? 1 : 0);
new ListWidget().updateAll(LoyaltyCardViewActivity.this);
// Re-init loyaltyCard with new data from DB
onResume();
invalidateOptionsMenu();
@@ -890,6 +892,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
Toast.makeText(LoyaltyCardViewActivity.this, R.string.archived, Toast.LENGTH_LONG).show();
ShortcutHelper.removeShortcut(LoyaltyCardViewActivity.this, loyaltyCardId);
new ListWidget().updateAll(LoyaltyCardViewActivity.this);
// Re-init loyaltyCard with new data from DB
onResume();
@@ -915,6 +918,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
DBHelper.deleteLoyaltyCard(database, LoyaltyCardViewActivity.this, loyaltyCardId);
ShortcutHelper.removeShortcut(LoyaltyCardViewActivity.this, loyaltyCardId);
new ListWidget().updateAll(LoyaltyCardViewActivity.this);
finish();
dialog.dismiss();

View File

@@ -2,6 +2,8 @@ package protect.card_locker;
import android.app.Activity;
import android.app.SearchManager;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -330,22 +332,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
selectedTab = activeTabPref.getInt(getString(R.string.sharedpreference_active_tab), 0);
// Restore sort preferences from Shared Preferences
// If one of the sorting prefererences has never been set or is set to an invalid value,
// stick to the defaults.
SharedPreferences sortPref = getApplicationContext().getSharedPreferences(
getString(R.string.sharedpreference_sort),
Context.MODE_PRIVATE);
String orderString = sortPref.getString(getString(R.string.sharedpreference_sort_order), null);
String orderDirectionString = sortPref.getString(getString(R.string.sharedpreference_sort_direction), null);
if (orderString != null && orderDirectionString != null) {
try {
mOrder = DBHelper.LoyaltyCardOrder.valueOf(orderString);
mOrderDirection = DBHelper.LoyaltyCardOrderDirection.valueOf(orderDirectionString);
} catch (IllegalArgumentException ignored) {
}
}
mOrder = Utils.getLoyaltyCardOrder(this);
mOrderDirection = Utils.getLoyaltyCardOrderDirection(this);
mGroup = null;
@@ -442,6 +430,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
if (mCurrentActionMode != null) {
mCurrentActionMode.finish();
}
new ListWidget().updateAll(mAdapter.mContext);
}
private void processParseResultList(List<ParseResult> parseResultList, String group, boolean closeAppOnNoBarcode) {
@@ -709,6 +699,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
showReversed.isChecked() ? DBHelper.LoyaltyCardOrderDirection.Descending : DBHelper.LoyaltyCardOrderDirection.Ascending
);
new ListWidget().updateAll(this);
dialog.dismiss();
});

View File

@@ -48,7 +48,7 @@ public class ManageGroupActivity extends CatimaAppCompatActivity implements Mana
super.onCreate(inputSavedInstanceState);
binding = ActivityManageGroupBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
Utils.applyWindowInsets(binding.getRoot());
Utils.applyWindowInsetsAndFabOffset(binding.getRoot(), binding.fabSave);
Toolbar toolbar = binding.toolbar;
setSupportActionBar(toolbar);

View File

@@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
@@ -50,6 +51,7 @@ import androidx.palette.graphics.Palette;
import com.google.android.material.color.DynamicColors;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
@@ -1139,6 +1141,27 @@ public class Utils {
return WindowInsetsCompat.CONSUMED;
});
}
public static void applyWindowInsetsAndFabOffset(View root, FloatingActionButton fab) {
/* This function is a copy of applyWindowInsets, with the added behaviour that it ensures the FAB will be displayed vertically above the keyboard at all times */
ViewCompat.setOnApplyWindowInsetsListener(root, (view, windowInsets) -> {
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
layoutParams.leftMargin = insets.left;
layoutParams.bottomMargin = insets.bottom;
layoutParams.rightMargin = insets.right;
layoutParams.topMargin = insets.top;
view.setLayoutParams(layoutParams);
// This is required to move the FAB above the keyboard when keyboard is open
Insets imeInsets = windowInsets.getInsets(WindowInsetsCompat.Type.ime());
boolean isKeyboardVisible = windowInsets.isVisible(WindowInsetsCompat.Type.ime());
fab.setTranslationY(isKeyboardVisible ? (- imeInsets.bottom) : 0);
return WindowInsetsCompat.CONSUMED;
});
}
public static ImageView.ScaleType getRecommendedScaleTypeForThumbnailImage(@Nullable Bitmap image) {
// Return something sensible if no image
@@ -1154,4 +1177,40 @@ public class Utils {
return ImageView.ScaleType.FIT_CENTER;
}
public static DBHelper.LoyaltyCardOrder getLoyaltyCardOrder(Context context) {
SharedPreferences sortPref = context.getSharedPreferences(
"sharedpreference_sort",
Context.MODE_PRIVATE
);
String orderString = sortPref.getString("sharedpreference_sort_order", null);
if (orderString != null) {
try {
return DBHelper.LoyaltyCardOrder.valueOf(orderString);
} catch (IllegalArgumentException ignored) {
}
}
return DBHelper.LoyaltyCardOrder.Alpha;
}
public static DBHelper.LoyaltyCardOrderDirection getLoyaltyCardOrderDirection(Context context) {
SharedPreferences sortPref = context.getSharedPreferences(
"sharedpreference_sort",
Context.MODE_PRIVATE
);
String orderDirectionString = sortPref.getString("sharedpreference_sort_direction", null);
if (orderDirectionString != null) {
try {
return DBHelper.LoyaltyCardOrderDirection.valueOf(orderDirectionString);
} catch (IllegalArgumentException ignored) {
}
}
return DBHelper.LoyaltyCardOrderDirection.Ascending;
}
}

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:pathData="M0,0h108v108h-108z"
android:fillColor="#1F4262"/>
</vector>

View File

@@ -3,69 +3,57 @@
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<group android:scaleX="1.5307087"
android:scaleY="1.5307087"
android:translateX="15.12"
android:translateY="15.12">
<group android:scaleX="0.75"
android:scaleY="0.75"
android:translateX="13.5"
android:translateY="13.5">
<path
android:pathData="M14.3354,20.1954l20.7318,-9.2304l5.7612,12.9398l-20.7318,9.2304z"
android:strokeLineJoin="miter"
android:strokeWidth="0.529167"
android:fillColor="#f0f0f0"
android:strokeColor="#c80000"/>
android:pathData="M45.5,30.58L68.05,22.37C70.13,21.61 72.42,22.68 73.18,24.76L75.92,32.28L49.6,41.85L45.5,30.58Z"
android:fillColor="#F5A3A3"/>
<path
android:pathData="M14.8755,10.9648l23.2041,10.3311l-6.8874,15.4694l-23.2041,-10.3311z"
android:strokeLineJoin="miter"
android:strokeWidth="0.529167"
android:fillColor="#f0f0f0"
android:strokeColor="#c80000"/>
android:pathData="M70.36,25.78C70.17,25.27 69.6,25 69.08,25.19L49.35,32.37L51.4,38.01L72.07,30.48L70.36,25.78ZM75.92,32.28L49.6,41.85L45.5,30.58L68.05,22.37C70.13,21.61 72.42,22.68 73.18,24.76L75.92,32.28Z"
android:fillColor="#CF1717"/>
<path
android:pathData="M16.5599,16.1348l26.5459,7.6119l-4.5489,15.8639l-26.5459,-7.6119z"
android:strokeLineJoin="round"
android:strokeWidth="1.5875"
android:fillColor="#c80000"
android:strokeColor="#c80000"
android:fillType="evenOdd"/>
android:pathData="M58.42,30.58L35.86,22.37C33.79,21.61 31.49,22.68 30.74,24.76L28,32.28L54.31,41.85L58.42,30.58Z"
android:fillColor="#F5A3A3"/>
<path
android:pathData="M12.011,15.4955h27.6157v16.5032h-27.6157z"
android:strokeLineJoin="round"
android:strokeWidth="1.5875"
android:fillColor="#ff0000"
android:strokeColor="#ff0000"
android:fillType="evenOdd"/>
android:pathData="M33.56,25.78C33.74,25.27 34.32,25 34.84,25.19L54.57,32.37L52.52,38.01L31.84,30.48L33.56,25.78ZM28,32.28L54.31,41.85L58.42,30.58L35.86,22.37C33.79,21.61 31.49,22.68 30.74,24.76L28,32.28Z"
android:fillColor="#DD1818"/>
<path
android:pathData="M7.8471,23.7471a4.3659,8.5899 0,1 0,8.7317 0a4.3659,8.5899 0,1 0,-8.7317 0z"
android:strokeLineJoin="round"
android:strokeWidth="0.91078"
android:fillColor="#ff0000"
android:strokeColor="#ff0000"/>
android:pathData="M28.7,37.6C29.08,35.42 31.15,33.97 33.33,34.35L80.6,42.69C82.78,43.07 84.23,45.15 83.85,47.32L81.82,58.83C82.3,59.1 84.67,60.16 87.42,57.23V57.23C87.92,56.69 88.45,56.23 89.01,55.86C91.76,54.02 94,55.22 94,58.53C94,61.34 92.39,64.78 90.21,66.88C86.63,70.54 80.69,70.56 79.75,70.53L77.59,82.78C77.21,84.95 75.14,86.4 72.96,86.02L25.69,77.69C25.67,77.68 25.66,77.68 25.64,77.68C23.45,77.32 22,76.7 22,76C22,75.72 22.23,75.45 22.66,75.2C22.4,74.54 22.31,73.8 22.44,73.05L28.7,37.6Z"
android:fillColor="#B81414"/>
<path
android:pathData="m24.4983,25.781a1.6711,1.6711 0,0 1,-1.3809 1.6457,1.6711 1.6711,0 0,1 -1.8605,-1.0741"
android:strokeLineJoin="round"
android:strokeWidth="0.529167"
android:fillColor="#00000000"
android:strokeColor="#f0f0f0"
android:strokeLineCap="round"/>
android:pathData="M90.67,60.75C90.67,61.85 89.93,63.24 89.01,63.86C88.09,64.47 87.34,64.07 87.34,62.97C87.34,61.86 88.09,60.47 89.01,59.86C89.93,59.24 90.67,59.64 90.67,60.75Z"
android:fillColor="#E82E2E"/>
<path
android:pathData="m27.7991,26.333a1.6711,1.6711 0,0 1,-1.8605 1.0741,1.6711 1.6711,0 0,1 -1.3809,-1.6457"
android:strokeLineJoin="round"
android:strokeWidth="0.529167"
android:fillColor="#00000000"
android:strokeColor="#f0f0f0"
android:strokeLineCap="round"/>
android:pathData="M78,30C80.21,30 82,31.79 82,34V70C82,72.21 80.21,74 78,74H30C25.58,74 22,74.9 22,76V32C22,30.9 25.58,30 30,30H78Z"
android:fillColor="#E82E2E"/>
<path
android:pathData="m16.0606,22.271 l2.6458,-2.6458 2.6458,2.6458"
android:strokeLineJoin="miter"
android:strokeWidth="0.529167"
android:fillColor="#00000000"
android:strokeColor="#f0f0f0"
android:strokeLineCap="butt"/>
android:pathData="M51.2,54.25C51.62,53.53 52.53,53.29 53.25,53.7C53.94,54.1 54.2,54.98 53.84,55.68L53.76,55.82C53.4,56.52 53.65,57.4 54.35,57.8C55.04,58.2 55.93,57.98 56.36,57.32L56.44,57.18C56.87,56.52 57.75,56.3 58.45,56.7C59.16,57.12 59.41,58.03 58.99,58.75C57.75,60.9 55,61.64 52.85,60.4C50.7,59.15 49.96,56.4 51.2,54.25Z"
android:fillColor="#8A0F0F"/>
<path
android:pathData="m27.7023,22.271 l2.6458,-2.6458 2.6458,2.6458"
android:strokeLineJoin="miter"
android:strokeWidth="0.529167"
android:fillColor="#00000000"
android:strokeColor="#f0f0f0"
android:strokeLineCap="butt"/>
android:pathData="M52.79,54.25C52.38,53.53 51.46,53.29 50.75,53.7C50.05,54.1 49.8,54.98 50.16,55.68L50.23,55.82C50.6,56.52 50.34,57.4 49.65,57.8C48.95,58.2 48.07,57.98 47.64,57.32L47.56,57.18C47.13,56.52 46.24,56.3 45.55,56.7C44.83,57.12 44.59,58.03 45,58.75C46.24,60.9 49,61.64 51.15,60.4C53.3,59.15 54.04,56.4 52.79,54.25Z"
android:fillColor="#8A0F0F"/>
<path
android:pathData="M53.3,56.75C52.72,57.75 51.28,57.75 50.7,56.75L48.1,52.25C47.53,51.25 48.25,50 49.4,50L54.6,50C55.75,50 56.47,51.25 55.9,52.25L53.3,56.75Z"
android:fillColor="#8A0F0F"/>
<path
android:pathData="M40.5,40.5C43.73,40.5 46.46,42.62 47.42,45.53C47.68,46.31 47.26,47.16 46.47,47.42C45.69,47.68 44.84,47.26 44.58,46.47C44,44.73 42.38,43.5 40.5,43.5C38.62,43.5 37,44.73 36.42,46.47C36.16,47.26 35.31,47.68 34.53,47.42C33.74,47.16 33.32,46.31 33.58,45.53C34.54,42.62 37.27,40.5 40.5,40.5Z"
android:fillColor="#8A0F0F"/>
<path
android:pathData="M63.5,40.5C66.73,40.5 69.46,42.62 70.42,45.53C70.68,46.31 70.26,47.16 69.47,47.42C68.69,47.68 67.84,47.26 67.58,46.47C67,44.73 65.38,43.5 63.5,43.5C61.62,43.5 60,44.73 59.42,46.47C59.16,47.26 58.31,47.68 57.53,47.42C56.74,47.16 56.32,46.31 56.58,45.53C57.54,42.62 60.27,40.5 63.5,40.5Z"
android:fillColor="#8A0F0F"/>
<path
android:pathData="M26,55C25.45,55 25,54.55 25,54C25,53.45 25.45,53 26,53H42C42.55,53 43,53.45 43,54C43,54.55 42.55,55 42,55H26Z"
android:fillColor="#8A0F0F"/>
<path
android:pathData="M26.35,60.94C25.83,61.13 25.26,60.87 25.06,60.35C24.87,59.83 25.13,59.26 25.65,59.06L41.65,53.06C42.17,52.87 42.74,53.13 42.94,53.65C43.13,54.17 42.87,54.74 42.35,54.94L26.35,60.94Z"
android:fillColor="#8A0F0F"/>
<path
android:pathData="M61.65,54.94C61.13,54.74 60.87,54.17 61.06,53.65C61.26,53.13 61.83,52.87 62.35,53.06L78.35,59.06C78.87,59.26 79.13,59.83 78.94,60.35C78.74,60.87 78.17,61.13 77.65,60.94L61.65,54.94Z"
android:fillColor="#8A0F0F"/>
<path
android:pathData="M78,55C78.55,55 79,54.55 79,54C79,53.45 78.55,53 78,53H62C61.45,53 61,53.45 61,54C61,54.55 61.45,55 62,55H78Z"
android:fillColor="#8A0F0F"/>
</group>
</vector>

View File

@@ -3,25 +3,34 @@
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#FF000000"
android:pathData="M53.26,40.92l14.35,-6.39l2.86,6.42"
android:strokeAlpha="0.4"
android:fillAlpha="0.4"/>
<path
android:fillColor="#FF000000"
android:pathData="M36.14,40.95l2.86,-6.42l14.24,6.34"
android:strokeAlpha="0.4"
android:fillAlpha="0.4"/>
<path
android:fillColor="#FF000000"
android:pathData="M40.01,37.17l7.73,3.44H38.48l1.53,-3.44m26.58,0 l1.53,3.44H58.86l7.73,-3.44M39,34.53l-2.86,6.42v1.66H70.47V40.95L67.61,34.53 53.27,40.92l-0.02,-0.05L39,34.53Z"/>
<path
android:fillColor="#FF000000"
android:pathData="M74.07,51.23l4.93,1.41l-6.44,22.48l-37.61,-10.79l39.13,0l0,-13.11z"
android:strokeAlpha="0.7"
android:fillAlpha="0.7"/>
<path
android:fillColor="#FF000000"
android:pathData="M34.94,40.95C31.66,40.95 29,46.19 29,52.64s2.66,11.69 5.94,11.69L74.07,64.34L74.07,40.95ZM41.21,51.08 L40.15,50.02 44.43,45.74 48.71,50.02 47.65,51.08 44.43,47.86ZM58.02,56.56a3.11,3.11 0,0 1,-2.93 2.05,3.15 3.15,0 0,1 -0.55,-0.05 3.11,3.11 0,0 1,-1.83 -1.04,3.12 3.12,0 0,1 -5.3,-0.96 0.75,0.75 0,0 1,1.41 -0.51,1.62 1.62,0 0,0 3.14,-0.55 0.75,0.75 0,0 1,1.5 0,1.62 1.62,0 0,0 3.14,0.55 0.75,0.75 0,0 1,1.41 0.51ZM64.14,51.08 L60.92,47.86L57.71,51.08l-1.06,-1.06 4.28,-4.28 4.28,4.28Z"/>
<group android:scaleX="0.75"
android:scaleY="0.75"
android:translateX="13.5"
android:translateY="13.5">
<path
android:pathData="M75,31C78.31,31 81,33.69 81,37V44.43C81.83,45.67 82.2,47.22 81.92,48.81L81,54.01V55.87C81.24,55.72 81.5,55.51 81.79,55.22L81.86,55.14C82.38,54.59 82.96,54.08 83.58,53.67L83.72,53.57C85.2,52.64 87.03,52.17 88.68,53.05C90.37,53.96 90.99,55.83 90.99,57.63L90.99,57.77C90.94,60.78 89.29,64.16 87.12,66.26L87.12,66.26C85.22,68.18 82.74,69.08 80.76,69.52C80.64,69.55 80.53,69.57 80.41,69.6C79.85,70.76 78.92,71.72 77.77,72.32L76.71,78.35C76.13,81.61 73.02,83.79 69.76,83.22L30.37,76.27C30.33,76.27 30.29,76.26 30.26,76.25C29.12,76.09 28.06,75.84 27.22,75.49C26.8,75.32 26.33,75.07 25.93,74.72C25.54,74.37 25.01,73.72 25,72.78C25,72.78 25,72.78 25,72.78C25,72.77 25,72.76 25,72.75V34.5C25,33.84 25.32,33.25 25.82,32.89C26.23,32.49 26.7,32.24 27.04,32.09C27.6,31.83 28.27,31.63 28.97,31.48C29.75,31.31 30.64,31.18 31.59,31.1C31.59,31.1 31.58,31.1 31.57,31.1L32.67,28.07L32.73,27.93C33.91,24.91 37.3,23.37 40.36,24.49L52.83,29.03L65.3,24.49C68.42,23.36 71.86,24.96 73,28.07L74.06,31H75ZM34.85,73L70.45,79.28C71.54,79.47 72.58,78.74 72.77,77.66L73.59,73H34.85ZM34,35C32.35,35 30.88,35.15 29.82,35.39C29.48,35.46 29.21,35.54 29,35.61V69.47C30.4,69.17 32.15,69 34,69H75L75.1,69C76.13,68.95 76.95,68.13 77,67.1L77,67V37C77,35.9 76.1,35 75,35H34ZM86.78,56.59C86.68,56.59 86.4,56.61 85.88,56.94L85.8,56.99C85.47,57.21 85.13,57.51 84.78,57.88C84.78,57.88 84.78,57.88 84.78,57.88L84.64,58.03C83.44,59.25 82.18,59.88 81,60.12V65.32C82.2,64.94 83.35,64.36 84.22,63.5L84.34,63.38C85.88,61.89 86.99,59.43 86.99,57.63L86.99,57.53C86.98,56.92 86.84,56.67 86.78,56.59ZM46.56,31L38.99,28.25C37.99,27.88 36.88,28.37 36.47,29.35L36.43,29.44L35.86,31H46.56ZM69.8,31L69.24,29.44C68.86,28.41 67.71,27.87 66.67,28.25L59.11,31H69.8Z"
android:fillColor="#000000"
android:fillType="evenOdd"/>
<path
android:pathData="M55.17,51C56.32,51 57.04,52.25 56.46,53.25L54.69,56.31C54.6,56.76 54.79,57.24 55.21,57.48C55.73,57.78 56.39,57.6 56.69,57.08C57.11,56.37 58.02,56.12 58.74,56.53C59.46,56.95 59.7,57.87 59.29,58.58C58.16,60.54 55.67,61.21 53.71,60.08C53.45,59.93 53.21,59.75 53,59.55C52.78,59.75 52.54,59.93 52.28,60.08C50.33,61.21 47.83,60.54 46.7,58.58C46.29,57.87 46.53,56.95 47.25,56.53C47.97,56.12 48.88,56.37 49.3,57.08C49.6,57.6 50.26,57.78 50.78,57.48C51.2,57.23 51.4,56.74 51.29,56.29L49.54,53.25C48.96,52.25 49.68,51 50.83,51H55.17Z"
android:fillColor="#000000"/>
<path
android:pathData="M43.25,42.5C46,42.5 48.48,44.07 49.4,46.46C49.7,47.24 49.31,48.1 48.54,48.4C47.76,48.7 46.9,48.31 46.6,47.54C46.18,46.44 44.91,45.5 43.25,45.5C41.58,45.5 40.32,46.44 39.9,47.54C39.6,48.31 38.74,48.7 37.96,48.4C37.19,48.1 36.8,47.24 37.1,46.46C38.02,44.07 40.5,42.5 43.25,42.5Z"
android:fillColor="#000000"/>
<path
android:pathData="M62.75,42.5C65.5,42.5 67.98,44.07 68.9,46.46C69.2,47.24 68.81,48.1 68.04,48.4C67.26,48.7 66.4,48.31 66.1,47.54C65.68,46.44 64.41,45.5 62.75,45.5C61.08,45.5 59.82,46.44 59.4,47.54C59.1,48.31 58.24,48.7 57.46,48.4C56.69,48.1 56.3,47.24 56.6,46.46C57.52,44.07 60,42.5 62.75,42.5Z"
android:fillColor="#000000"/>
<path
android:pathData="M33,55C32.17,55 31.5,54.33 31.5,53.5C31.5,52.67 32.17,52 33,52H44.25C45.08,52 45.75,52.67 45.75,53.5C45.75,54.33 45.08,55 44.25,55H33Z"
android:fillColor="#000000"/>
<path
android:pathData="M33.61,59.87C32.85,60.21 31.97,59.87 31.63,59.11C31.29,58.35 31.63,57.47 32.39,57.13L43.61,52.13C44.37,51.79 45.26,52.13 45.59,52.89C45.93,53.65 45.59,54.53 44.83,54.87L33.61,59.87Z"
android:fillColor="#000000"/>
<path
android:pathData="M60.85,54.88C60.09,54.55 59.74,53.66 60.07,52.9C60.4,52.14 61.28,51.79 62.04,52.12L73.6,57.12C74.36,57.45 74.71,58.34 74.38,59.1C74.05,59.86 73.16,60.21 72.4,59.88L60.85,54.88Z"
android:fillColor="#000000"/>
<path
android:pathData="M73,52C73.83,52 74.5,52.67 74.5,53.5C74.5,54.33 73.83,55 73,55H61.5C60.67,55 60,54.33 60,53.5C60,52.67 60.67,52 61.5,52H73Z"
android:fillColor="#000000"/>
</group>
</vector>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_layout"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- android:columnWidth must be kept in sync with list_widget_item.xml -->
<GridView
android:id="@+id/grid_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:numColumns="auto_fit"
android:columnWidth="107dp"
android:verticalSpacing="4dp"
android:horizontalSpacing="4dp"
android:gravity="center"/>
</LinearLayout>

View File

@@ -0,0 +1,17 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/widget_layout"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/no_cards_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/card_list_widget_empty"
app:autoSizeTextType="uniform"
app:autoSizeMinTextSize="12sp"
app:autoSizeMaxTextSize="100sp"
app:autoSizeStepGranularity="2sp" />
</LinearLayout>

View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
85.6dp : 53.98dp
Both multiplied by 1.25 to fit better
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="107dp"
android:layout_height="67.475dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:gravity="center"
android:id="@+id/item_container"
android:background="@drawable/round_outline"
android:clipToOutline="true">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/item_container_foreground">
<ImageView
android:id="@+id/item_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center|center" />
<TextView
android:id="@+id/item_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:autoSizeMinTextSize="6sp"
app:autoSizeTextType="uniform"
android:layout_gravity="center|center"
android:gravity="center" />
</FrameLayout>
</FrameLayout>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
<monochrome android:drawable="@drawable/ic_launcher_monochrome"/>
</adaptive-icon>
</adaptive-icon>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<background android:drawable="@drawable/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
<monochrome android:drawable="@drawable/ic_launcher_monochrome"/>
</adaptive-icon>
</adaptive-icon>

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

View File

@@ -16,15 +16,15 @@ Altonss
B o d o
Michael Moroni
Eric
Joel A
Silvério Santos
Максим Горпиніч
GM
Joel A
Petr Novák
laralem
Priit Jõerüüt
Silvério Santos
Taco
laralem
Petr Novák
Edgars Andersons
Taco
nadiafekihahmed
pfaffenrodt
Aayush Gupta
@@ -32,48 +32,48 @@ Scrambled777
ikanakova
Giovanni Donisi
HudobniVolk
Nyatsuki
Jiri Grönroos
Nyatsuki
josé m
Samantaz Fox
Balázs Meskó
Milo Ivir
josé m
Arno-github
Ankit Tiwari
Fjuro
Cliff Heraldo
Sergio Paredes
Ankit Tiwari
Arno-github
Warder
Kachelkaiser
Jose Delvani
mdvhimself
Milan Šalka
தமிழ் நேரம்
huuhaa
GitSpoon
Skrripy
Kachelkaiser
Fjuro
Projjal Moitra
Quentin PAGÈS
Vasilis
ngocanhtve
huuhaa
தமிழ் நேரம்
waffshappen
Marnick L'Eau
ngocanhtve
StellarSand
Quentin PAGÈS
Projjal Moitra
Robin
JungHee Lee
hajertabbane
Ziad OUALHADJ
Warder
GitSpoon
Robin Liu
Ricky Tigg
Renko
Denis Shilin
しいたけ
Alexander Ivanov
Viet Nguyen Hoang
Miha Frangež
stavpup
ehrt74
Virginie
Tim Trek
Ricky Tigg
Peter Dave Hello
Michael Gangolf
rudy3
@@ -81,6 +81,6 @@ Kim Seohyun
Govind S Nair
Freddo espresso
Augustin LAVILLE
Aliaksandr Trush
arshbeerSingh
MisterCosta96
Aliaksandr Trush

View File

@@ -308,4 +308,6 @@
<string name="sort_by_valid_from">Начало валидност</string>
<string name="width">Ширина</string>
<string name="setBarcodeWidth">Задаване ширина на щрих кода</string>
<string name="card_list_widget_name">Списък с карти</string>
<string name="card_list_widget_empty">Когато добавите карти в Catima те ще се покажат тук. Ако имате карти уверете се, че са извън архива.</string>
</resources>

View File

@@ -314,4 +314,6 @@
<string name="sort_by_valid_from">Platnost od</string>
<string name="setBarcodeWidth">Nastavit šířku čárového kódu</string>
<string name="width">Šířka</string>
<string name="card_list_widget_name">Seznam karet</string>
<string name="card_list_widget_empty">Karty přidané do aplikace Catima se zobrazí zde. Pokud máte karty, ujistěte se, že nejsou všechny archivovány.</string>
</resources>

View File

@@ -304,4 +304,6 @@
<string name="sort_by_valid_from">Gültig ab</string>
<string name="width">Breite</string>
<string name="setBarcodeWidth">Barcodebreite einstellen</string>
<string name="card_list_widget_empty">Nachdem du einige Treuekarten in Catima hinzugefügt hast, werden sie hier angezeigt. Wenn du Karten hast, stelle sicher, dass sie nicht alle archiviert sind.</string>
<string name="card_list_widget_name">Kartenliste</string>
</resources>

View File

@@ -307,4 +307,6 @@
<string name="sort_by_valid_from">Έναρξη ισχύος</string>
<string name="setBarcodeWidth">Ορισμός πλάτους γραμμωτού κώδικα</string>
<string name="width">Πλάτος</string>
<string name="card_list_widget_empty">Αφού προσθέσετε μερικές κάρτες επιβράβευσης στο Catima, θα εμφανιστούν εδώ. Εάν έχετε κάρτες, βεβαιωθείτε ότι δεν είναι όλες αρχειοθετημένες.</string>
<string name="card_list_widget_name">Λίστα καρτών</string>
</resources>

View File

@@ -44,12 +44,12 @@
<plurals name="deleteCardsTitle">
<item quantity="one">Borrar <xliff:g>%d</xliff:g> tajeta</item>
<item quantity="many">Borrar <xliff:g>%d</xliff:g> tarjetas</item>
<item quantity="other"/>
<item quantity="other"></item>
</plurals>
<plurals name="deleteCardsConfirmation">
<item quantity="one">¿Borrar esta<xliff:g>%d</xliff:g> tarjeta de forma permanente\?</item>
<item quantity="many">Borrar estas <xliff:g>%d</xliff:g> tarjetas de forma permanente\?</item>
<item quantity="other"/>
<item quantity="other"></item>
</plurals>
<string name="failedOpeningFileManager">Primero instale un administrador de archivos.</string>
<string name="intent_import_card_from_url_share_multiple_text">Quiero compartirte algunas tarjetas</string>
@@ -158,19 +158,19 @@
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> tarjeta</item>
<item quantity="many"><xliff:g>%d</xliff:g> tarjetas</item>
<item quantity="other"/>
<item quantity="other"></item>
</plurals>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> seleccionado</item>
<item quantity="many"><xliff:g>%d</xliff:g> seleccionados</item>
<item quantity="other"/>
<item quantity="other"></item>
</plurals>
<string name="importCatimaMessage">Seleccione su <i>catima.zip</i> exportado desde Catima para importarlo.
\nPrimero créelo desde el menu para Importar/Exportar de otra aplicación de Catima presionando la opción Exportar.</string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> punto</item>
<item quantity="many"><xliff:g>%s</xliff:g> puntos</item>
<item quantity="other"/>
<item quantity="other"></item>
</plurals>
<string name="importFidmeMessage">Seleccione su <i>fidme-export-request-xxxxxx.zip</i> exportado de FidMe para importarlo, y a continuación seleccione manualmente los tipos de código de barras.
\nPrimero créelo desde su perfil de FidMe al elegir la opción Protección de Datos y presionando Extraer mis datos.</string>

View File

@@ -314,4 +314,6 @@
<string name="sort_by_valid_from">Válido desde</string>
<string name="setBarcodeWidth">Establecer el ancho del código de barras</string>
<string name="width">Ancho</string>
<string name="card_list_widget_name">Lista de tarjetas</string>
<string name="card_list_widget_empty">Después de añadir algunas tarjetas de fidelidad en Catima, aparecerán aquí. Si tienes tarjetas, asegúrate de que no estén archivadas.</string>
</resources>

View File

@@ -303,4 +303,6 @@
<string name="sort_by_valid_from">Kehtib alates</string>
<string name="setBarcodeWidth">Määratle triipkoodi laius</string>
<string name="width">Laius</string>
<string name="card_list_widget_name">Kaartide loend</string>
<string name="card_list_widget_empty">Kui lisad Catimasse kliendikaarte, siis saavad nad olema nähtavad siin. Kui sul on kaardid lisatud, siis palun kontrolli, et nad kõik poleks arhiveeritud.</string>
</resources>

View File

@@ -308,4 +308,6 @@
<string name="sort_by_valid_from">Voimassa alkaen</string>
<string name="width">Leveys</string>
<string name="setBarcodeWidth">Aseta viivakoodin leveys</string>
<string name="card_list_widget_name">Korttiluettelo</string>
<string name="card_list_widget_empty">Kun olet lisännyt kanta-asiakaskortteja Catimaan, ne näkyvät täällä. Jos sinulla on kortteja, varmista, etteivät ne kaikki ole arkistoituja.</string>
</resources>

View File

@@ -314,4 +314,6 @@
<string name="sort_by_valid_from">Valide à partir du</string>
<string name="width">Largeur</string>
<string name="setBarcodeWidth">Définir la largeur du code-barres</string>
<string name="card_list_widget_name">Liste des cartes</string>
<string name="card_list_widget_empty">Après avoir ajouter des cartes de fidélité dans Catima, elles apparaîtront ici. Si vous avez des cartes, assurez-vous qu\'elles ne soient pas archivées.</string>
</resources>

View File

@@ -302,4 +302,6 @@
<string name="sort_by_valid_from">Válido desde</string>
<string name="width">Anchura</string>
<string name="setBarcodeWidth">Establecer anchura do código de barras</string>
<string name="card_list_widget_name">Lista de tarxetas</string>
<string name="card_list_widget_empty">Aquí aparecerán as tarxetas fidelidade cando as engadas a Catima. Se tes tarxetas mira que non estean arquivadas.</string>
</resources>

View File

@@ -302,4 +302,6 @@
<string name="settings_column_count_landscape">क्षैतिज मोड में कॉलम</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_7">7</string>
<string name="card_list_widget_name">कार्ड सूची</string>
<string name="card_list_widget_empty">कैटिमा में कुछ लॉयल्टी कार्ड जोड़ने के बाद, वे यहाँ दिखाई देंगे। अगर आपके पास कार्ड हैं, तो सुनिश्चित करें कि वे सभी संग्रहित न हों।</string>
</resources>

View File

@@ -301,4 +301,7 @@
<string name="generic_error_please_retry">Maaf, terjadi kesalahan, silakan coba lagi...</string>
<string name="sort_by_valid_from">Berlaku dari</string>
<string name="width">Lebar</string>
<string name="card_list_widget_name">Daftar kartu</string>
<string name="setBarcodeWidth">Atur Lebar Barcode</string>
<string name="card_list_widget_empty">Setelah Anda menambahkan beberapa kartu loyalitas di Catima, kartu tersebut akan muncul di sini. Jika Anda memiliki kartu sebelumnya, pastikan tidak semuanya diarsipkan.</string>
</resources>

View File

@@ -314,4 +314,6 @@
<string name="sort_by_valid_from">Valido da</string>
<string name="setBarcodeWidth">Imposta la larghezza del codice a barre</string>
<string name="width">Larghezza</string>
<string name="card_list_widget_name">Lista delle carte</string>
<string name="card_list_widget_empty">Dopo aver aggiunto alcune carte fedeltà in Catima, queste appariranno qui. Se hai delle carte, assicurati che non siano tutte archiviate.</string>
</resources>

View File

@@ -48,4 +48,29 @@
<string name="amountParsingFailed">ಅಮಾನ್ಯ ಮೊತ್ತ</string>
<string name="accept">ಸ್ವೀಕರಿಸಿ</string>
<string name="confirm">ದೃಢೀಕರಿಸಿ</string>
</resources>
<string name="app_name">ಕ್ಯಾಟಿಮಾ</string>
<string name="save">ಉಳಿಸಿ</string>
<string name="edit">ಸಂಪಾದಿಸಿ</string>
<string name="deleteTitle">ಕಾರ್ಡನ್ನು ಅಳಿಸಿ</string>
<plurals name="deleteCardsTitle">
<item quantity="one"><xliff:g>%d</xliff:g> \u0020ಕಾರ್ಡನ್ನು ಅಳಿಸಿ</item>
<item quantity="other"><xliff:g>%d</xliff:g> \u0020ಕಾರ್ಡುಗಳನ್ನು ಅಳಿಸಿ</item>
</plurals>
<string name="deleteConfirmation">ಈ ಕಾರ್ಡ್ ಅನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸುವುದೇ?</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one"><xliff:g>%d</xliff:g> ಈ ಕಾರ್ಡ್ ಅನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸುವುದೇ?</item>
<item quantity="other"><xliff:g>%d</xliff:g> ಈ ಕಾರ್ಡ್ಗಳನ್ನು ಶಾಶ್ವತವಾಗಿ ಅಳಿಸುವುದೇ?</item>
</plurals>
<string name="ok">ಸರಿ</string>
<string name="editCardTitle">ಕಾರ್ಡನ್ನು ಸಂಪಾದಿಸಿ</string>
<string name="scanCardBarcode">ಬಾರ್ ಕೋಡನ್ನು ಸ್ಕಾನ್ ಮಾಡಿ</string>
<string name="noCardsMessage">ಮೊದಲು ಒಂದು ಕಾರ್ಡನ್ನು ಸೇರಿಸಿ</string>
<string name="barcodeImageDescriptionWithType"><xliff:g>%s</xliff:g> ಬಾರ್ಕೋಡ್ ನ ಚಿತ್ರವಾಗಿದೆ</string>
<string name="noCardExistsError">ಆ ಕಾರ್ಡನ್ನು ಹುಡುಕಲಾಗಲಿಲ್ಲ</string>
<string name="failedParsingImportUriError">ಆಮದು ಆದ URI ಅನ್ನು ವಿಶ್ಲೇಷಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</string>
<string name="importExport">ಬೇರೆಡೆಯಿಂದ ತೆಗೆದುಕೊ / ಬೇರೆಡೆಗೆ ವರ್ಗಾಯಿಸು</string>
<string name="exportName">ಬೇರೆಡೆಗೆ ಸಾಗಿಸು</string>
<string name="importExportHelp">ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡುವುದರಿಂದ ಅದನ್ನು ಮತ್ತೊಂದು ಸಾಧನಕ್ಕೆ ಸಾಗಿಸಲು ಅನುಮತಿಸುತ್ತದೆ.</string>
<string name="importSuccessfulTitle">ಬೇರೆಡೆಯಿಂದ ತಂದಿರುವ</string>
<string name="importFailedTitle">ತೆಗೆದುಕೊಂಡು ಬರಲು ವಿಫಲ</string>
</resources>

View File

@@ -309,4 +309,6 @@
<string name="sort_by_valid_from">Derīga no</string>
<string name="setBarcodeWidth">Iestatīt svītrkoda platumu</string>
<string name="width">Platums</string>
<string name="card_list_widget_name">Karšu saraksts</string>
<string name="card_list_widget_empty">Pēc klienta karšu pievienošanas Catima tās parādīsies šeit. Ja Tev ir kartes, jāpārliecinās, ka tās visas nav arhivētas.</string>
</resources>

View File

@@ -42,4 +42,14 @@
</plurals>
<string name="action_add">ചേർക്കുക</string>
<string name="deleteTitle">കാർഡ് ഇല്ലാതാക്കുക</string>
</resources>
<string name="app_name">കേറ്റിമ</string>
<string name="note">നോട്ട്</string>
<string name="cardShortcut">കാർഡ് ഷോർട്ക്കറ്</string>
<string name="barcodeImageDescriptionWithType"><xliff:g>%s</xliff:g> ബാർകോഡ്</string>
<string name="failedParsingImportUriError">നൽകിയ URL വ്യാകരിക്കാൻ കഴിഞ്ഞില്ല</string>
<string name="storageReadPermissionRequired">ഈ പ്രവർത്തനത്തിന് ആവശ്യമായ സ്റ്റോറേജ് വായിക്കാനുള്ള അനുമതി വേണം…</string>
<string name="cameraPermissionRequired">ഈ പ്രവർത്തനത്തിന് ക്യാമറ ആക്സസ് ചെയ്യുന്നതിന് അനുമതി വേണം.…</string>
<string name="permissionReadCardsLabel">കേറ്റിമ കാർഡ് വായിക്കുക</string>
<string name="cameraPermissionDeniedTitle">ക്യാമറയ്ക്കായി അനുമതി നേടാനായില്ല</string>
<string name="exportOptionExplanation">നിങ്ങൾ ഇഷ്ടപ്പെടുന്ന സ്ഥലത്ത് ഡാറ്റ എഴുതപ്പെടും.</string>
</resources>

View File

@@ -308,4 +308,6 @@
<string name="sort_by_valid_from">Op geldig vanaf</string>
<string name="width">Breedte</string>
<string name="setBarcodeWidth">Stel Barcodebreedte in</string>
<string name="card_list_widget_name">Kaartenlijst</string>
<string name="card_list_widget_empty">Zodra er kaarten in Catima toegevoegd zijn worden deze hier getoond. Heb je al kaarten? Controleer dan of deze niet gearchiveerd zijn.</string>
</resources>

View File

@@ -187,7 +187,7 @@
<string name="rate_this_app">Oceń tę aplikację</string>
<string name="license">Licencja</string>
<string name="on_google_play">w Google Play</string>
<string name="noGiftCardsGroup">Stwórz karty i przypisz je do grup w tym miejscu.</string>
<string name="noGiftCardsGroup">Utwórz karty i przypisz je do grup w tym miejscu.</string>
<string name="reverse">...w odwrotnej kolejności</string>
<string name="translate_platform">na Weblate</string>
<string name="sort">Sortuj</string>
@@ -320,4 +320,6 @@
<string name="sort_by_valid_from">Poprawna forma</string>
<string name="setBarcodeWidth">Ustaw szerokość kodu kreskowego</string>
<string name="width">Szerokość</string>
<string name="card_list_widget_empty">Karty lojalnościowe dodane w aplikacji Catima pokażą się tutaj. Jeżeli masz jakieś karty, upewnij się że nie są one zarchiwizowane.</string>
<string name="card_list_widget_name">Lista kart</string>
</resources>

View File

@@ -314,4 +314,6 @@
<string name="sort_by_valid_from">Válido a partir de</string>
<string name="width">Largura</string>
<string name="setBarcodeWidth">Definir largura do código de barras</string>
<string name="card_list_widget_name">Lista de cartões</string>
<string name="card_list_widget_empty">Depois que você adicionar alguns cartões de fidelidade no Catima, eles aparecerão aqui. Se você tiver cartões, verifique se eles não estão todos arquivados.</string>
</resources>

View File

@@ -314,4 +314,6 @@
<string name="sort_by_valid_from">Válido a partir de</string>
<string name="width">Largura</string>
<string name="setBarcodeWidth">Definir a largura do código de barras</string>
<string name="card_list_widget_name">Lista de cartões</string>
<string name="card_list_widget_empty">Após adicionar cartões de fidelidade em Catima, eles aparecerão aqui. Se tem cartões, certifique-se de que não estão todos arquivados.</string>
</resources>

View File

@@ -308,4 +308,6 @@
<string name="generic_error_please_retry">Lamento, ocorreu um erro, tente novamente...</string>
<string name="setBarcodeWidth">Definir Largura do Código de Barra</string>
<string name="width">Largura</string>
<string name="card_list_widget_name">Lista de cartões</string>
<string name="card_list_widget_empty">Após adicionar cartões de fidelidade em Catima, eles aparecerão aqui. Se tem cartões, certifique-se de que não estão todos arquivados.</string>
</resources>

View File

@@ -320,4 +320,6 @@
<string name="sort_by_valid_from">Начало действия</string>
<string name="width">Ширина</string>
<string name="setBarcodeWidth">Указать ширину штрих-кода</string>
<string name="card_list_widget_name">Список карт</string>
<string name="card_list_widget_empty">После добавления карт лояльности в Catima, они появятся здесь. Если у вас есть карты, убедитесь, что они не архивированы.</string>
</resources>

View File

@@ -314,4 +314,6 @@
<string name="addFromPkpass">Vyberte súbor Passbook (.pkpass)</string>
<string name="settings_use_volume_keys_navigation">Zmena kariet pomocou tlačidiel hlasitosti</string>
<string name="settings_use_volume_keys_navigation_summary">Pre posúvanie medzi kartami používať tlačidlá hlasitosti</string>
<string name="card_list_widget_name">Zoznam kariet</string>
<string name="card_list_widget_empty">Po pridaní vernostných kariet do Catima sa zobrazia tu. Ak máte karty, uistite sa, že nie sú všetky archivované.</string>
</resources>

View File

@@ -34,8 +34,8 @@
<string name="moveDown">Flytta nedåt</string>
<string name="leaveWithoutSaveTitle">Avsluta</string>
<string name="leaveWithoutSaveConfirmation">Avsluta utan att spara\?</string>
<string name="addManually">Ange ID manuellt</string>
<string name="addFromImage">Välj bild från galleriet</string>
<string name="addManually">Ange streckkoden manuellt</string>
<string name="addFromImage">Välj en bild från galleriet</string>
<string name="card">Kort</string>
<string name="editBarcode">Redigera streckkod</string>
<string name="never">Aldrig</string>
@@ -247,7 +247,7 @@
<string name="settings_display_barcode_max_brightness_summary">Nödvändigt för att en del skannrar ska fungera</string>
<string name="settings_oled_dark_summary">Reducerar batterianvändning på OLED-skärmar</string>
<string name="icon_header_click_text">Tryck länge för att redigera miniatyr</string>
<string name="settings_category_title_cards">Kort</string>
<string name="settings_category_title_cards">Kortvy</string>
<string name="show_note">Visa anteckning</string>
<string name="switchToBackImage">Byt till bilden på baksidan</string>
<string name="app_copyright_short">Kopieringsskydd © Sylvia van Os och medverkande</string>
@@ -300,4 +300,9 @@
<string name="useFrontImage">Använd bilden på framsidan</string>
<string name="useBackImage">Använd bilden på baksidan</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Vilka av de hittade streckkoderna vill du använda?</string>
<string name="card_list_widget_name">Kortlista</string>
<string name="width">Bredd</string>
<string name="sort_by_valid_from">Giltigt från</string>
<string name="unsupportedFile">Den här filen stöds inte</string>
<string name="addFromPkpass">Välj en Passbook-fil (.pkpass)</string>
</resources>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name">பூனையம்மா</string>
<string name="app_name">கேட்டிமா</string>
<string name="action_search">தேடல்</string>
<string name="action_add">கூட்டு</string>
<plurals name="selectedCardCount">
@@ -91,14 +91,14 @@
<string name="noCardsMessage">முதலில் ஒரு அட்டையைச் சேர்க்கவும்</string>
<string name="importExportHelp">உங்கள் தரவை காப்புப் பிரதி எடுப்பது அதை மற்றொரு சாதனத்திற்கு நகர்த்த அனுமதிக்கிறது.</string>
<string name="importSuccessfulTitle">இறக்குமதி செய்யப்பட்டது</string>
<string name="permissionReadCardsLabel">பூனையம்மா அட்டைகளைப் படி</string>
<string name="permissionReadCardsDescription">உங்கள் பூனையம்மா அட்டைகள் மற்றும் குறிப்புகள் மற்றும் படங்கள் உட்பட அதன் அனைத்து விவரங்களையும் படி</string>
<string name="permissionReadCardsLabel">கேட்டிமா அட்டைகளைப் படி</string>
<string name="permissionReadCardsDescription">உங்கள் கேட்டிமா அட்டைகள் மற்றும் குறிப்புகள் மற்றும் படங்கள் உட்பட அதன் அனைத்து விவரங்களையும் படி</string>
<string name="exportOptionExplanation">தரவு உங்கள் விருப்பப்படி இடத்திற்கு எழுதப்படும்.</string>
<string name="importOptionFilesystemTitle">கோப்பு முறைமையிலிருந்து இறக்குமதி</string>
<string name="importOptionFilesystemExplanation">கோப்பு முறைமையிலிருந்து ஒரு குறிப்பிட்ட கோப்பைத் தேர்வுசெய்க.</string>
<string name="importOptionFilesystemButton">கோப்பு முறைமையிலிருந்து</string>
<string name="cameraPermissionDeniedTitle">கேமராவை அணுக முடியவில்லை</string>
<string name="noCameraPermissionDirectToSystemSetting">பார்கோடுகளை ்கேன் செய்ய, பூனையம்மாவுக்கு உங்கள் கேமராவுக்கு அணுகல் தேவைப்படும். உங்கள் இசைவு அமைப்புகளை மாற்ற இங்கே தட்டவும்.</string>
<string name="noCameraPermissionDirectToSystemSetting">பார்கோடுகளை ்கேன் செய்ய, கேட்டிமாவிற்கு உங்கள் கேமராவுக்கு அணுகல் தேவைப்படும். உங்கள் இசைவு அமைப்புகளை மாற்ற இங்கே தட்டவும்.</string>
<string name="about">பற்றி</string>
<string name="app_copyright_short">பதிப்புரிமை © சில்வியா வான் ஓஎச் மற்றும் பங்களிப்பாளர்கள்</string>
<string name="app_copyright_old">விசுவாச அட்டை கீச்சின் அடிப்படையில்\n பதிப்புரிமை © 20162020 பிராண்டன் ஆர்ச்சர்</string>
@@ -143,8 +143,8 @@
<string name="app_loyalty_card_keychain">விசுவாச அட்டை கீச்சின்</string>
<string name="privacy_policy">தனியுரிமைக் கொள்கை</string>
<string name="accept">ஏற்றுக்கொள்</string>
<string name="importCatima">பூனையம்மாவிலிருந்து இறக்குமதி</string>
<string name="importCatimaMessage">ங்கள் <i> catima.zip </i> இறக்குமதி செய்யப் பூனையம்மாவிலிருந்து ஏற்றுமதி செய்யுங்கள்.\nமுதலில் அங்கு ஏற்றுமதியை அழுத்துவதன் மூலம் மற்றொரு கேடிமா பயன்பாட்டின் இறக்குமதி/ஏற்றுமதி மெனுவிலிருந்து அதை உருவாக்க.</string>
<string name="importCatima">கேட்டிமாவில் இருந்து இறக்குமதி செய்</string>
<string name="importCatimaMessage">நீங்கள் கேட்டிமாவில் இருந்து ஏற்றுமதி செய்த <i> catima.zip </i> தேர்ந்துஎடுத்து இறக்குமதி செய்யுங்கள்.\nமுதலில் மற்றொரு கேட்டிமா செயலியில் இறக்குமதி/ஏற்றுமதி மெனுவிலிருந்து ஏற்றுமதியை தேர்ந்துஎடுத்து இக்கோப்பை உருவாக்கவும்.</string>
<string name="importLoyaltyCardKeychain">விசுவாச அட்டை கீச்சினிலிருந்து இறக்குமதி செய்யுங்கள்</string>
<string name="importFidmeMessage">உங்கள் <i> fidme-export-request-xxxxxx.zip </i> இறக்குமதி செய்ய FIDME இலிருந்து ஏற்றுமதி செய்து, பின்னர் பார்கோடு வகைகளை கைமுறையாகத் தேர்ந்தெடுக்கவும்.\n தரவு பாதுகாப்பைத் தேர்ந்தெடுப்பதன் மூலம் உங்கள் FIDME சுயவிவரத்திலிருந்து அதை உருவாக்கவும், பின்னர் எனது தரவைப் பிரித்தெடுக்கவும் அழுத்தவும்.</string>
<string name="importStocardMessage">உங்கள் <i> ***. சிப் </i> இறக்குமதி செய்ய ஏற்றுமதி.\n உங்கள் தரவை ஏற்றுமதி செய்யக் கேட்கும் support@stocardapp.com என்ற மின்னஞ்சல் மூலம் அதைப் பெறுங்கள்.</string>
@@ -170,7 +170,7 @@
<string name="settings_locale">மொழி</string>
<string name="settings_oled_dark">இருண்ட கருப்பொருளுக்கு தூய கருப்பு பின்னணி</string>
<string name="settings_theme_color">கருப்பொருள் நிறம்</string>
<string name="settings_catima_theme">பூனையம்மா</string>
<string name="settings_catima_theme">கேட்டிமா</string>
<string name="settings_pink_theme">இளஞ்சிவப்பு</string>
<string name="settings_magenta_theme">மெசந்தா</string>
<string name="settings_violet_theme">கத்தரி</string>
@@ -207,7 +207,7 @@
<string name="failedLaunchingPhotoPicker">உதவி கேலரி பயன்பாட்டைக் கண்டுபிடிக்க முடியவில்லை</string>
<string name="previousCard">முந்தைய</string>
<string name="failedToOpenUrl">முதலில் ஒரு வலை உலாவியை நிறுவவும்</string>
<string name="welcome">பூனையம்மாவுக்கு வருக</string>
<string name="welcome">கேட்டிமாவுக்கு வருக</string>
<string name="importCards">அட்டைகளை இறக்குமதி செய்யுங்கள்</string>
<string name="updateBalanceTitle">நீங்கள் எவ்வளவு செலவு செய்தீர்கள் அல்லது பெற்றீர்கள்?</string>
<string name="updateBalanceHint">தொகையை உள்ளிடவும்</string>
@@ -256,7 +256,7 @@
<string name="errorReadingFile">கோப்பைப் படிக்க முடியவில்லை</string>
<string name="failedLaunchingFileManager">உதவி கோப்பு மேலாளரைக் கண்டுபிடிக்க முடியவில்லை</string>
<string name="multipleBarcodesFoundPleaseChooseOne">கண்டுபிடிக்கப்பட்ட பார்கோடுகளில் எது நீங்கள் பயன்படுத்த விரும்புகிறீர்கள்?</string>
<string name="noCameraFoundGuideText">உங்கள் சாதனத்தில் கேமரா இருப்பதாகத் தெரியவில்லை. அவ்வாறு செய்தால், சாதனத்தை மறுதொடக்கம் செய்ய முயற்சிக்கவும். இல்லையெனில், பார்கோட மற்றொரு வழியில் சேர்க்க கீழே உள்ள கூடுதல் விருப்பங்கள் பொத்தானைப் பயன்படுத்தவும்.</string>
<string name="noCameraFoundGuideText">உங்கள் சாதனத்தில் கேமரா இருப்பதாகத் தெரியவில்லை. அவ்வாறு இருந்தால், சாதனத்தை மறுதொடக்கம் செய்ய முயற்சிக்கவும். இல்லையெனில், பார்கோட மற்றொரு வழியில் சேர்க்க கீழே உள்ள கூடுதல் விருப்பங்கள் பொத்தானைப் பயன்படுத்தவும்.</string>
<string name="importCancelled">இறக்குமதி ரத்து செய்யப்பட்டது</string>
<string name="exportCancelled">ஏற்றுமதி ரத்து செய்யப்பட்டது</string>
<string name="useBackImage">பின் படத்தைப் பயன்படுத்தவும்</string>
@@ -302,4 +302,6 @@
<string name="sort_by_valid_from">இருந்து செல்லுபடியாகும்</string>
<string name="setBarcodeWidth">பட்டைகுறி அகலம் அமை</string>
<string name="width">அகலம்</string>
<string name="card_list_widget_name">அட்டை பட்டியல்</string>
<string name="card_list_widget_empty">கேட்டிமாவில் நீங்கள் விசுவாச அட்டைகளை சேர்த்த பிறகு, அவை இங்கு தோன்றும். அட்டைகள் காப்பகப்படுத்த படவில்லை என உறுதி செய்க.</string>
</resources>

View File

@@ -308,4 +308,6 @@
<string name="sort_by_valid_from">İtibaren Geçerli</string>
<string name="width">Genişlik</string>
<string name="setBarcodeWidth">Barkod Genişliğini Ayarla</string>
<string name="card_list_widget_name">Kart listesi</string>
<string name="card_list_widget_empty">Catima\'ya sadakat kartları eklediğinizde, burada gözükecekler. Eğer kartlarınız varsa, arşivlemediğinizden emin olun.</string>
</resources>

View File

@@ -319,4 +319,6 @@
<string name="sort_by_valid_from">Діє з</string>
<string name="width">Ширина</string>
<string name="setBarcodeWidth">Встановити ширину штрих-коду</string>
<string name="card_list_widget_name">Список карток</string>
<string name="card_list_widget_empty">Після того, як ви додасте кілька карток лояльності в Catima, вони з’являться тут. Якщо у вас є картки, переконайтеся, що вони не всі заархівовані.</string>
</resources>

View File

@@ -296,4 +296,11 @@
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="sort_by_valid_from">Có hiệu lực từ</string>
<string name="addFromPkpass">Chọn tệp Passbook (.pkpass)</string>
<string name="unsupportedFile">Tập tin này không được hỗ trợ</string>
<string name="generic_error_please_retry">Xin lỗi, có gì đó không ổn, vui lòng thử lại...</string>
<string name="width">Chiều rộng</string>
<string name="setBarcodeWidth">Đặt chiều rộng mã vạch</string>
<string name="card_list_widget_name">Danh sách thẻ</string>
</resources>

View File

@@ -302,4 +302,6 @@
<string name="sort_by_valid_from">有效期开始日</string>
<string name="width">宽度</string>
<string name="setBarcodeWidth">设置条码宽度</string>
<string name="card_list_widget_name">卡片列表</string>
<string name="card_list_widget_empty">在 Catima 中添加了一些会员卡后,它们会出现在这里。如果你有卡片,确保不是所有都已归档。</string>
</resources>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#223355</color>
</resources>
<color name="ic_launcher_background">#1F4262</color>
</resources>

View File

@@ -362,5 +362,7 @@
<string name="unsupportedFile">This file is not supported</string>
<string name="generic_error_please_retry">Sorry, something went wrong, please try again...</string>
<string name="width">Width</string>
<string name="card_list_widget_name">Card list</string>
<string name="setBarcodeWidth">Set Barcode Width</string>
<string name="card_list_widget_empty">After you add some loyalty cards in Catima, they will appear here. If you have cards, make sure they are not all archived.</string>
</resources>

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:initialKeyguardLayout="@layout/list_widget"
android:initialLayout="@layout/list_widget"
android:minWidth="245dp"
android:minHeight="54dp"
android:previewImage="@drawable/widget_preview"
android:resizeMode="horizontal|vertical"
android:targetCellWidth="4"
android:targetCellHeight="2"
android:updatePeriodMillis="86400000"
android:widgetCategory="home_screen" />

View File

@@ -1,2 +0,0 @@
status = [ 'build' ]
delete_merged_branches = true

View File

@@ -1,8 +1,8 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id("com.android.application") version "8.11.1" apply false
id("org.jetbrains.kotlin.android") version "2.2.0" apply false
id("com.android.application") version "8.12.1" apply false
id("org.jetbrains.kotlin.android") version "2.2.10" apply false
}
allprojects {

View File

@@ -23,8 +23,6 @@ Copylefted libre software (GPLv3+) card management app.
[![Feature graphic](https://github.com/CatimaLoyalty/Android/raw/main/fastlane/metadata/android/en-US/images/featureGraphic.png)](https://catima.app/)
*Logo by [Rose (TangentFoxy)](https://github.com/TangentFoxy), feature graphic by [Ziad OUALHADJ](https://github.com/ziadOUA)*
Stores your store loyalty and membership cards on your device, instead of having to carry them around.
Supported barcodes:
@@ -79,6 +77,8 @@ KEYSTORE=/path/to/keystore KEYSTORE_ALIAS=catima ./build.sh
Help translate the app to your language from [our Hosted Weblate page](https://hosted.weblate.org/projects/catima/).
# Developer Note
# Special thanks
This app is based on the great (but no longer developed) [Loyalty Card Keychain](https://github.com/brarcher/loyalty-card-locker) by [Branden Archer](https://github.com/brarcher).
Logo and feature graphic contributed by [il-Luca](https://github.com/il-Luca) and [Aeven-Dev](https://github.com/aeven-dev), based on the original logo by [Rose (TangentFoxy)](https://github.com/TangentFoxy) and original feature graphic by [Ziad OUALHADJ](https://github.com/ziadOUA).

Some files were not shown because too many files have changed in this diff Show More