Compare commits

...

1297 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
Sylvia van Os
8f6bd8c266 Merge pull request #2578 from CatimaLoyalty/create-pull-request/patch-1753131181
Update Fastlane changelogs
2025-07-21 23:20:23 +02:00
TheLastProject
599d58e3c7 Update Fastlane changelogs 2025-07-21 20:53:01 +00:00
Sylvia van Os
1dd58bf2d0 Update CHANGELOG 2025-07-21 22:52:49 +02:00
Sylvia van Os
90cf3adc25 Merge pull request #2573 from StellarSand/main
Fix for save button being covered by keyboard
2025-07-21 22:45:55 +02:00
Sylvia van Os
26797addb8 Merge pull request #2577 from CatimaLoyalty/create-pull-request/patch-1752986452
Update contributors
2025-07-20 09:59:27 +02:00
TheLastProject
b320e6f253 Update contributors 2025-07-20 04:40:52 +00:00
Sylvia van Os
48d9ac4eed Merge pull request #2575 from CatimaLoyalty/create-pull-request/patch-1752820497
Update feature graphic
2025-07-18 17:42:17 +02:00
TheLastProject
388eb273e4 Update feature graphic 2025-07-18 06:34:57 +00:00
Sylvia van Os
0eee713712 Merge pull request #2574 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-07-18 08:32:14 +02:00
Hosted Weblate
3ff1262149 Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/
2025-07-18 05:04:31 +02:00
Mujtaba-Alsaleh
f4a420b699 Translated using Weblate (Arabic)
Currently translated at 44.8% (66 of 147 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ar/
2025-07-18 05:04:31 +02:00
Mujtaba-Alsaleh
b35b0cf1f9 Translated using Weblate (Arabic)
Currently translated at 44.8% (66 of 147 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ar/
2025-07-18 05:04:30 +02:00
Mujtaba-Alsaleh
2f4ee75c85 Translated using Weblate (Arabic)
Currently translated at 44.8% (66 of 147 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ar/
2025-07-18 05:04:30 +02:00
StellarSand
b3356b6575 close keypad if open on back pressed 2025-07-18 02:24:26 +05:30
Sylvia van Os
359a37c8a6 Remove gradle updater
Has been broken for several months, mailing me daily about failed runs. Needs replacing. See https://github.com/CatimaLoyalty/Android/issues/2525
2025-07-11 08:55:04 +02:00
Sylvia van Os
a5a57fe8c8 Merge pull request #2571 from CatimaLoyalty/dependabot/gradle/com.android.application-8.11.1
Bump com.android.application from 8.11.0 to 8.11.1
2025-07-11 07:57:50 +02:00
dependabot[bot]
c1f088c191 Bump com.android.application from 8.11.0 to 8.11.1
Bumps com.android.application from 8.11.0 to 8.11.1.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-11 02:39:37 +00:00
Sylvia van Os
fec8d05927 Merge pull request #2570 from CatimaLoyalty/create-pull-request/patch-1751776272
Update contributors
2025-07-06 07:13:23 +02:00
TheLastProject
466f068e36 Update contributors 2025-07-06 04:31:11 +00:00
Sylvia van Os
b5880223a5 Merge pull request #2569 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-07-05 08:46:07 +02:00
toposets
0a8a621fad Translated using Weblate (Indonesian)
Currently translated at 99.6% (331 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/id/
2025-07-05 07:01:56 +02:00
Cristian Carpo
5267607b79 Translated using Weblate (Romanian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2025-07-05 07:01:56 +02:00
Sylvia van Os
5474a516f4 Merge pull request #2567 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-07-01 23:38:33 +02:00
ssantos
221b8cd7d1 Translated using Weblate (Portuguese)
Currently translated at 100.0% (147 of 147 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt/
2025-07-01 21:37:30 +02:00
ssantos
2b544a74bd Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (147 of 147 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_PT/
2025-07-01 21:37:30 +02:00
Yash R. Dhake
bcb7df24ec Optimize resizeBitmap(): Skip resizing for already-small images (#2565)
Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
2025-06-29 21:24:12 +02:00
Sylvia van Os
59fb95a4a7 Merge pull request #2563 from CatimaLoyalty/create-pull-request/patch-1751171603
Update contributors
2025-06-29 08:11:57 +02:00
TheLastProject
157617fe4a Update contributors 2025-06-29 04:33:23 +00:00
Sylvia van Os
ecdfeee3e6 Merge pull request #2562 from CatimaLoyalty/dependabot/gradle/com.android.application-8.11.0
Bump com.android.application from 8.10.1 to 8.11.0
2025-06-25 07:03:13 +02:00
dependabot[bot]
3cd3a53268 Bump com.android.application from 8.10.1 to 8.11.0
Bumps com.android.application from 8.10.1 to 8.11.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-25 02:14:37 +00:00
Sylvia van Os
9edf3c3028 Merge pull request #2561 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-24 08:17:13 +02:00
Sylvia van Os
82d8addafa Merge pull request #2560 from CatimaLoyalty/dependabot/gradle/org.jetbrains.kotlin.android-2.2.0
Bump org.jetbrains.kotlin.android from 2.1.21 to 2.2.0
2025-06-24 08:13:11 +02:00
Warder
3b446145b8 Translated using Weblate (Slovak)
Currently translated at 98.6% (145 of 147 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2025-06-24 07:02:19 +02:00
dependabot[bot]
92fec8558e Bump org.jetbrains.kotlin.android from 2.1.21 to 2.2.0
Bumps [org.jetbrains.kotlin.android](https://github.com/JetBrains/kotlin) from 2.1.21 to 2.2.0.
- [Release notes](https://github.com/JetBrains/kotlin/releases)
- [Changelog](https://github.com/JetBrains/kotlin/blob/v2.2.0/ChangeLog.md)
- [Commits](https://github.com/JetBrains/kotlin/compare/v2.1.21...v2.2.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-24 03:07:37 +00:00
Sylvia van Os
df858a7d65 Merge pull request #2559 from CatimaLoyalty/dependabot/gradle/org.robolectric-robolectric-4.15.1
Bump org.robolectric:robolectric from 4.15 to 4.15.1
2025-06-23 07:05:58 +02:00
dependabot[bot]
a4c0c51a45 Bump org.robolectric:robolectric from 4.15 to 4.15.1
Bumps [org.robolectric:robolectric](https://github.com/robolectric/robolectric) from 4.15 to 4.15.1.
- [Release notes](https://github.com/robolectric/robolectric/releases)
- [Commits](https://github.com/robolectric/robolectric/compare/robolectric-4.15...robolectric-4.15.1)

---
updated-dependencies:
- dependency-name: org.robolectric:robolectric
  dependency-version: 4.15.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-23 03:13:01 +00:00
Sylvia van Os
33d4b3ab7c Merge pull request #2558 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-22 23:20:41 +02:00
solokot
06dc720108 Translated using Weblate (Russian)
Currently translated at 100.0% (147 of 147 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-06-22 21:02:23 +02:00
Sylvia van Os
a24805232c Merge pull request #2557 from CatimaLoyalty/create-pull-request/patch-1750566607
Update contributors
2025-06-22 10:03:50 +02:00
TheLastProject
5ec1bcb721 Update contributors 2025-06-22 04:30:07 +00:00
Sylvia van Os
cddc273333 Merge pull request #2556 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-21 16:23:36 +02:00
大王叫我来巡山
0bd46b96cb Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (147 of 147 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-06-21 15:03:44 +02:00
Fjuro
2b6926c800 Translated using Weblate (Czech)
Currently translated at 100.0% (147 of 147 strings)

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

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-06-21 15:03:42 +02:00
Michael Moroni
8fd88e29ec Translated using Weblate (Italian)
Currently translated at 85.0% (125 of 147 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/it/
2025-06-21 15:03:42 +02:00
B o d o
d97b1cc1d0 Translated using Weblate (German)
Currently translated at 100.0% (147 of 147 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-06-21 15:03:41 +02:00
Sylvain Pichon
baf2848ce0 Translated using Weblate (French)
Currently translated at 100.0% (147 of 147 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2025-06-21 15:03:40 +02:00
Sylvia van Os
b16ea272ae Merge pull request #2554 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-20 17:10:52 +02:00
ssantos
59fa7d143d Translated using Weblate (Portuguese)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt/
2025-06-20 14:04:03 +02:00
ssantos
658cfd2d4a Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_PT/
2025-06-20 14:04:02 +02:00
Sylvia van Os
a428db36c4 Merge pull request #2553 from CatimaLoyalty/dependabot/gradle/org.robolectric-robolectric-4.15
Bump org.robolectric:robolectric from 4.14.1 to 4.15
2025-06-20 08:18:21 +02:00
dependabot[bot]
469eaefcb6 Bump org.robolectric:robolectric from 4.14.1 to 4.15
Bumps [org.robolectric:robolectric](https://github.com/robolectric/robolectric) from 4.14.1 to 4.15.
- [Release notes](https://github.com/robolectric/robolectric/releases)
- [Commits](https://github.com/robolectric/robolectric/compare/robolectric-4.14.1...robolectric-4.15)

---
updated-dependencies:
- dependency-name: org.robolectric:robolectric
  dependency-version: '4.15'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-20 02:37:20 +00:00
Sylvia van Os
e991c9fdc1 Update fastlane 2025-06-18 22:05:28 +02:00
Sylvia van Os
43c9e7f7ac Merge branch 'main' of github.com:CatimaLoyalty/Android 2025-06-17 18:54:46 +02:00
Sylvia van Os
b410f100e8 Release Catima 2.35.1 2025-06-17 18:47:43 +02:00
Sylvia van Os
e2413f8538 Merge pull request #2551 from CatimaLoyalty/create-pull-request/patch-1750178776
Update Fastlane changelogs
2025-06-17 18:46:41 +02:00
TheLastProject
745f1ba8cc Update Fastlane changelogs 2025-06-17 16:46:16 +00:00
Sylvia van Os
482b16e772 Update CHANGELOG 2025-06-17 18:46:04 +02:00
Sylvia van Os
f284c4807f Merge pull request #2549 from CatimaLoyalty/create-pull-request/patch-1749961719
Update contributors
2025-06-15 11:46:00 +02:00
TheLastProject
9927d6a544 Update contributors 2025-06-15 04:28:39 +00:00
Sylvia van Os
0b4c474ece Merge pull request #2548 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-14 12:25:26 +02:00
KING APPS
344e853839 Translated using Weblate (Persian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2025-06-14 09:02:06 +00:00
Sylvia van Os
865f5f67d7 Merge pull request #2546 from SamantazFox/patch-1
Fix: Use ANDROID_SDK_ROOT everywhere in build.sh
2025-06-12 19:09:47 +02:00
Sylvia van Os
5f8e7ab702 Replace deprecated ANDROID_SDK_ROOT with ANDROID_HOME var 2025-06-12 18:51:43 +02:00
Sylvia van Os
6ac864e3aa Merge pull request #2547 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-11 15:43:54 +02:00
smcx
e0a012f3a4 Translated using Weblate (Persian)
Currently translated at 96.0% (319 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2025-06-11 13:02:35 +02:00
Toni Liski
5f1ae9db8e Translated using Weblate (Finnish)
Currently translated at 5.4% (8 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fi/
2025-06-11 13:02:34 +02:00
Toni Liski
dcb5cd882e Translated using Weblate (Finnish)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2025-06-11 13:02:33 +02:00
Samantaz Fox
9d27df7e10 Fix: Use ANDROID_SDK_ROOT everywhere in build.sh
The signing section was using $HOME/Android/Sdk instead of $ANDROID_SDK_ROOT, preventing from signing the APK if the Android SDK is not installed at the default location.
2025-06-11 05:53:36 +00:00
Sylvia van Os
a11682181c Merge pull request #2545 from CatimaLoyalty/docs/repro_status
Add reproducibility status

Powered by https://shields.rbtlog.dev/
2025-06-10 23:44:07 +02:00
Sylvia van Os
a9b7f47053 Merge pull request #2544 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-10 23:43:14 +02:00
Sylvia van Os
809a91b16a Add reproducibility status
Powered by https://shields.rbtlog.dev/
2025-06-10 23:36:39 +02:00
Sylvia van Os
2c6e56342c Translated using Weblate (Arabic)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2025-06-10 09:06:37 +00:00
Sylvia van Os
df2b7ffc1b Translated using Weblate (Korean)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ko/
2025-06-10 09:06:19 +00:00
jonnysemon
3c5f28b496 Translated using Weblate (Arabic)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2025-06-09 10:02:48 +02:00
Aerin Park
7942bfc3f7 Translated using Weblate (Korean)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ko/
2025-06-09 10:02:47 +02:00
Taiki Ohno
9e8e7fd8c2 Translated using Weblate (Japanese)
Currently translated at 82.8% (275 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ja/
2025-06-09 10:02:46 +02:00
Aerin Park
e8c5caa2f3 Translated using Weblate (Korean)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ko/
2025-06-09 10:02:45 +02:00
Sylvia van Os
b697aa389a Merge pull request #2542 from CatimaLoyalty/create-pull-request/patch-1749356924
Update contributors
2025-06-08 11:02:56 +02:00
TheLastProject
a19f5b91a8 Update contributors 2025-06-08 04:28:44 +00:00
Sylvia van Os
e1ebeec623 Merge pull request #2539 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-05 18:59:16 +02:00
Hosted Weblate
7734727e16 Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/
2025-06-05 17:59:17 +02:00
Sylvia van Os
d4d1e9e649 Translated using Weblate (Persian)
Currently translated at 95.7% (318 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2025-06-05 17:59:16 +02:00
Sylvia van Os
b3b45fcc50 Merge pull request #2537 from CatimaLoyalty/create-pull-request/patch-1749113981
Update locales
2025-06-05 11:20:37 +02:00
TheLastProject
3bf63b855f Update locales 2025-06-05 08:59:40 +00:00
Sylvia van Os
c24ac94307 Merge pull request #2535 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-05 10:59:27 +02:00
Sylvia van Os
94c8f1f82d Merge pull request #2536 from CatimaLoyalty/dependabot/gradle/androidx.appcompat-appcompat-1.7.1
Bump androidx.appcompat:appcompat from 1.7.0 to 1.7.1
2025-06-05 10:23:49 +02:00
Majid G
5d455a31b3 Translated using Weblate (Persian)
Currently translated at 96.0% (319 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2025-06-05 06:10:24 +02:00
dependabot[bot]
b43fe087d6 Bump androidx.appcompat:appcompat from 1.7.0 to 1.7.1
Bumps androidx.appcompat:appcompat from 1.7.0 to 1.7.1.

---
updated-dependencies:
- dependency-name: androidx.appcompat:appcompat
  dependency-version: 1.7.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-05 02:33:53 +00:00
ofab22
c7c414c218 Translated using Weblate (Slovak)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sk/
2025-06-04 19:35:42 +00:00
Sylvia van Os
775b55fd23 Merge pull request #2508 from CatimaLoyalty/dependabot/gradle/org.jetbrains.kotlin.android-2.1.21
Bump org.jetbrains.kotlin.android from 2.1.10 to 2.1.21
2025-06-02 23:23:40 +02:00
Sylvia van Os
4cb601e0ce Rewrite loop that stopped working in Kotlin 2.1.21 2025-06-02 23:11:43 +02:00
Sylvia van Os
c42533aba5 Merge pull request #2534 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-02 15:06:07 +02:00
dicaeffe
df919417cb Translated using Weblate (Italian)
Currently translated at 84.9% (124 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/it/
2025-06-02 13:26:04 +02:00
Sylvia van Os
90afc5594f Merge pull request #2533 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-02 11:15:26 +02:00
ssantos
7b62e1871d Translated using Weblate (Portuguese (Portugal))
Currently translated at 98.6% (144 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_PT/
2025-06-02 11:03:47 +02:00
ofab22
fc483b449b Translated using Weblate (Slovak)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sk/
2025-06-02 11:03:47 +02:00
Sylvia van Os
62dbc9c97f Merge pull request #2531 from CatimaLoyalty/create-pull-request/patch-1748752381
Update contributors
2025-06-01 09:23:25 +02:00
TheLastProject
ed9beb0752 Update contributors 2025-06-01 04:33:01 +00:00
Sylvia van Os
6b750ff84b Merge pull request #2530 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-01 00:09:33 +02:00
Hosted Weblate
17be2599f0 Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/
2025-05-31 18:52:53 +02:00
Sylvia van Os
20820c27f8 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 98.7% (328 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2025-05-31 18:52:52 +02:00
林依若
b83f629c09 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 99.0% (329 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2025-05-31 17:26:41 +02:00
Warder
bfc79f6d97 Translated using Weblate (Slovak)
Currently translated at 98.6% (144 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2025-05-31 17:26:41 +02:00
Sylvia van Os
e297620ea2 Merge pull request #2528 from CatimaLoyalty/create-pull-request/patch-1748542198
Update feature graphic
2025-05-29 20:10:50 +02:00
TheLastProject
83e5240871 Update feature graphic 2025-05-29 18:09:58 +00:00
Sylvia van Os
2e68290d0c Merge pull request #2527 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-29 20:07:22 +02:00
ofab22
690d405f87 Translated using Weblate (Slovak)
Currently translated at 98.6% (144 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2025-05-29 19:12:13 +02:00
ofab22
4c711a991a Translated using Weblate (Slovak)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sk/
2025-05-29 19:12:12 +02:00
dependabot[bot]
79795ff328 Bump org.jetbrains.kotlin.android from 2.1.10 to 2.1.21
Bumps [org.jetbrains.kotlin.android](https://github.com/JetBrains/kotlin) from 2.1.10 to 2.1.21.
- [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.1.10...v2.1.21)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-29 06:56:40 +00:00
Sylvia van Os
c178fb230e Merge pull request #2526 from CatimaLoyalty/dependabot/gradle/com.android.application-8.10.1
Bump com.android.application from 8.10.0 to 8.10.1
2025-05-29 08:55:46 +02:00
dependabot[bot]
0acaf0598a Bump com.android.application from 8.10.0 to 8.10.1
Bumps com.android.application from 8.10.0 to 8.10.1.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-29 02:55:42 +00:00
Sylvia van Os
7b99bf86fa Merge pull request #2524 from CatimaLoyalty/TheLastProject-patch-1
Update OpenJDK version in README
2025-05-28 10:12:31 +02:00
Sylvia van Os
6cf68abfc7 Update OpenJDK version in README 2025-05-28 10:11:53 +02:00
Sylvia van Os
0e95dadb6c Merge pull request #2523 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-27 17:12:01 +02:00
summoner001
77b525809d Translated using Weblate (Hungarian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hu/
2025-05-27 15:02:27 +00:00
Warder
d624316207 Translated using Weblate (Slovak)
Currently translated at 98.6% (144 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2025-05-27 15:02:26 +00:00
Sylvia van Os
353c8090a9 Merge pull request #2522 from CatimaLoyalty/create-pull-request/patch-1748147066
Update contributors
2025-05-25 08:48:35 +02:00
Sylvia van Os
7928cf8332 Merge pull request #2521 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-25 08:44:59 +02:00
TheLastProject
75bcade01c Update contributors 2025-05-25 04:24:26 +00:00
Sylvia van Os
2d33774b56 Translated using Weblate (Slovak)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sk/
2025-05-25 01:56:41 +02:00
Sylvia van Os
26e5a1fbab Merge pull request #2520 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-23 18:06:31 +02:00
B o d o
b516736b6c Translated using Weblate (German)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2025-05-23 15:01:07 +00:00
Sylvia van Os
881b3fefef Merge pull request #2519 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-23 10:50:40 +02:00
Priit Jõerüüt
a4c14e3c88 Translated using Weblate (Estonian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2025-05-23 10:35:06 +02:00
Sylvia van Os
2943b64634 Merge pull request #2517 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-20 20:53:10 +02:00
Takahiro Namatame
0af74ef8de Translated using Weblate (Japanese)
Currently translated at 82.5% (274 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ja/
2025-05-20 19:34:07 +02:00
Sylvia van Os
8556507c6a Update and fix fastlane
Apply the workaround in
https://github.com/fastlane/fastlane/issues/29183 (needed on Fedora 42)
2025-05-20 17:28:24 +02:00
Sylvia van Os
ff8c662423 Merge pull request #2515 from CatimaLoyalty/create-pull-request/patch-1747561264
Update locales
2025-05-18 11:52:42 +02:00
Sylvia van Os
9314637094 Merge pull request #2514 from CatimaLoyalty/fix/he
Fix hebrew support
2025-05-18 11:52:14 +02:00
TheLastProject
8def5cbe5b Update locales 2025-05-18 09:41:04 +00:00
Sylvia van Os
6c7f21d6fd Fix hebrew support 2025-05-18 11:40:01 +02:00
Sylvia van Os
edc3c38d14 Merge pull request #2513 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-18 11:21:35 +02:00
Sylvia van Os
4045566514 Merge pull request #2512 from CatimaLoyalty/create-pull-request/patch-1747542126
Update contributors
2025-05-18 11:12:52 +02:00
elid
9b5af3b221 Translated using Weblate (Hebrew)
Currently translated at 15.6% (52 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/he/
2025-05-18 08:50:52 +02:00
elid
b5fc0af979 Added translation using Weblate (Hebrew) 2025-05-18 05:41:35 +00:00
TheLastProject
4c643b3c61 Update contributors 2025-05-18 04:22:06 +00:00
Sylvia van Os
01e198c94b Release Catima 2.35.0 2025-05-17 13:40:13 +02:00
Sylvia van Os
6b09656164 Merge pull request #2510 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-15 21:50:25 +02:00
Sylvia van Os
21b051c422 Merge pull request #2507 from CatimaLoyalty/target/java21
Use Java 21
2025-05-15 21:48:22 +02:00
Prachi Joshi
9a8fa4ad1a Translated using Weblate (Marathi)
Currently translated at 39.7% (132 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/mr/
2025-05-15 20:02:28 +02:00
Sylvain Pichon
2ac2f07c80 Translated using Weblate (French)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2025-05-15 20:02:27 +02:00
Sylvia van Os
e893923164 Remove spotBugs
We've been running an old version for very long because there hasn't
been any time to update it. A newer version doesn't support Java 21.
Given Java 21 ihas more priority, let's just get rid of spotBugs.
2025-05-14 20:53:14 +02:00
Sylvia van Os
ebacb6fe4c Fix CI status badge 2025-05-14 20:49:04 +02:00
Sylvia van Os
fb329f410a Merge pull request #2509 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-14 17:12:12 +02:00
Edgars Andersons
f95d7d62dd Translated using Weblate (Latvian)
Currently translated at 8.9% (13 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2025-05-14 14:03:16 +00:00
大王叫我来巡山
482303b775 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-05-14 14:03:15 +00:00
Fjuro
d02a359cc3 Translated using Weblate (Czech)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2025-05-14 14:03:15 +00:00
Максим Горпиніч
9b24158acc Translated using Weblate (Ukrainian)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-05-14 14:03:14 +00:00
solokot
cf65476f16 Translated using Weblate (Russian)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-05-14 14:03:14 +00:00
B o d o
02d04614e0 Translated using Weblate (German)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-05-14 14:03:13 +00:00
Sylvia van Os
a543d4d4bf Use Java 21 2025-05-13 20:28:57 +02:00
Sylvia van Os
f4de708e42 Merge pull request #2506 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-13 17:23:41 +02:00
hajer tabbane
f1079f4e5d Translated using Weblate (Arabic)
Currently translated at 42.4% (62 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ar/
2025-05-13 13:02:26 +00:00
icosahedr.online
4d09077b2f Translated using Weblate (Dutch)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2025-05-13 13:02:24 +00:00
Sylvia van Os
f62fc879c5 Merge pull request #2505 from CatimaLoyalty/create-pull-request/patch-1747073386
Update Fastlane changelogs
2025-05-12 20:15:28 +02:00
TheLastProject
0b24a76b19 Update Fastlane changelogs 2025-05-12 18:09:45 +00:00
Sylvia van Os
921773ee59 Update CHANGELOG 2025-05-12 20:09:32 +02:00
Sylvia van Os
6d012413bc Merge pull request #2504 from CatimaLoyalty/fix/2503
Fix crash on pkpass with no barcodes
2025-05-12 20:06:26 +02:00
Sylvia van Os
caeba57a42 Fix crash on pkpass with no barcodes 2025-05-12 19:34:51 +02:00
Sylvia van Os
e12204771f Merge pull request #2502 from CatimaLoyalty/create-pull-request/patch-1746937166
Update contributors
2025-05-11 11:08:42 +02:00
TheLastProject
cf9612052a Update contributors 2025-05-11 04:19:26 +00:00
Sylvia van Os
b0081919c9 Merge pull request #2499 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-10 18:06:10 +02:00
e zabihi
7c2959b501 Translated using Weblate (Persian)
Currently translated at 65.9% (219 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2025-05-10 14:02:32 +02:00
大王叫我来巡山
6f9ab1ad1d Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-05-10 14:02:31 +02:00
Sylvain Pichon
42f9a43393 Translated using Weblate (French)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2025-05-10 14:02:30 +02:00
Damjan Gerl
955cd8a0d4 Translated using Weblate (Slovenian)
Currently translated at 77.1% (256 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sl/
2025-05-10 14:02:30 +02:00
Sylvia van Os
b1c806a189 Merge pull request #2498 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-09 18:17:36 +02:00
Edgars Andersons
bea5f5eb82 Translated using Weblate (Latvian)
Currently translated at 8.9% (13 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2025-05-09 10:03:04 +00:00
Serhat
958e0951bc Translated using Weblate (Turkish)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2025-05-09 10:03:03 +00:00
Fjuro
26dbf6d53d Translated using Weblate (Czech)
Currently translated at 100.0% (146 of 146 strings)

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

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-05-09 10:03:02 +00:00
solokot
083b3d0666 Translated using Weblate (Russian)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-05-09 10:03:01 +00:00
B o d o
b4ab8a0220 Translated using Weblate (German)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-05-09 10:03:00 +00:00
B o d o
658205bc49 Translated using Weblate (German)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2025-05-09 10:03:00 +00:00
Sylvia van Os
d9ee1950d8 Merge pull request #2496 from CatimaLoyalty/create-pull-request/patch-1746719450
Update feature graphic
2025-05-08 17:58:20 +02:00
TheLastProject
601600a036 Update feature graphic 2025-05-08 15:50:50 +00:00
Sylvia van Os
7805e9f323 Merge pull request #2495 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-08 17:47:33 +02:00
Warder
61dd342f17 Translated using Weblate (Slovak)
Currently translated at 99.3% (145 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2025-05-08 11:03:47 +02:00
Sylvia van Os
1c91842ad4 Merge pull request #2493 from CatimaLoyalty/create-pull-request/patch-1746652483
Update Fastlane changelogs
2025-05-07 23:30:55 +02:00
TheLastProject
2f9ef2859b Update Fastlane changelogs 2025-05-07 21:14:43 +00:00
Sylvia van Os
9ce27f4fa0 Update changelog 2025-05-07 23:14:26 +02:00
Sylvia van Os
3f654d2170 Merge pull request #2492 from herodotos/2366-Bug
Fix for coloured QR code fails to scan #2366
2025-05-07 23:14:05 +02:00
Sylvia van Os
88019dcae3 Also apply inverted scanning to camera 2025-05-07 22:56:48 +02:00
Sylvia van Os
b94ea44f42 Merge pull request #2490 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-07 08:54:01 +02:00
Sylvia van Os
f52b101735 Translated using Weblate (Slovak)
Currently translated at 99.3% (145 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2025-05-07 08:36:27 +02:00
Warder
02e139f5d2 Translated using Weblate (Slovak)
Currently translated at 99.3% (145 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2025-05-07 08:36:27 +02:00
GiannosOB
67a3b13209 Translated using Weblate (Greek)
Currently translated at 5.4% (8 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/el/
2025-05-07 08:36:27 +02:00
Warder
4cd85f3a05 Translated using Weblate (Slovak)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sk/
2025-05-07 08:36:27 +02:00
herodotos
35f88ca386 Fix for coloured QR code fails to scan #2366 2025-05-07 08:19:13 +02:00
Sylvia van Os
0157e76725 Merge pull request #2491 from CatimaLoyalty/dependabot/gradle/com.android.application-8.10.0
Bump com.android.application from 8.9.2 to 8.10.0
2025-05-07 08:17:35 +02:00
dependabot[bot]
fceda14f89 Bump com.android.application from 8.9.2 to 8.10.0
Bumps com.android.application from 8.9.2 to 8.10.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-07 02:27:38 +00:00
Sylvia van Os
18a2c3d907 Merge pull request #2471 from CatimaLoyalty/fix/iconWhiteLine
Fix icons having white/black lines
2025-05-04 12:06:01 +02:00
Sylvia van Os
8f944329c2 Merge pull request #2486 from CatimaLoyalty/create-pull-request/patch-1746332429
Update contributors
2025-05-04 10:56:28 +02:00
Sylvia van Os
24cde962b4 Merge pull request #2485 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-04 10:55:49 +02:00
TheLastProject
cdd78cbfb5 Update contributors 2025-05-04 04:20:29 +00:00
Aliaksandr Truš
a0782f115c Translated using Weblate (Belarusian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/be/
2025-05-04 04:07:31 +02:00
Sylvia van Os
1d2e7bb8d2 Merge pull request #2484 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-03 22:15:40 +02:00
Provek
272102ed61 Translated using Weblate (Polish)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2025-05-03 20:04:15 +02:00
Michael Moroni
1baea9ee4b Translated using Weblate (Italian)
Currently translated at 99.6% (331 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2025-05-03 20:04:15 +02:00
LordTenebrous
3022c8fd75 Translated using Weblate (Spanish)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2025-05-03 20:04:15 +02:00
Sylvia van Os
e1cfb15a8b Merge pull request #2482 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-30 08:43:19 +02:00
Noctade
ecfa677542 Translated using Weblate (Serbian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sr/
2025-04-30 06:04:55 +02:00
abdelbasset jabrane
810eb97dfc Translated using Weblate (Arabic)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2025-04-30 06:04:55 +02:00
RTTTC
40bd33f6af Translated using Weblate (Lithuanian)
Currently translated at 93.3% (310 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lt/
2025-04-30 06:04:55 +02:00
Sylvia van Os
19cc6c7573 Merge pull request #2480 from CatimaLoyalty/dependabot/github_actions/actions/setup-python-5.6.0
Bump actions/setup-python from 5.5.0 to 5.6.0
2025-04-28 07:04:05 +02:00
Sylvia van Os
89144ff83e Merge pull request #2479 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-28 07:00:55 +02:00
dependabot[bot]
5c77bab972 Bump actions/setup-python from 5.5.0 to 5.6.0
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5.5.0 to 5.6.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5.5.0...v5.6.0)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: 5.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-28 02:24:03 +00:00
Aliaksandr Truš
e406e69c54 Translated using Weblate (Belarusian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/be/
2025-04-27 22:36:43 +00:00
ssantos
52b36b5946 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2025-04-27 22:36:41 +00:00
ssantos
06cf71a96a Translated using Weblate (Portuguese (Portugal))
Currently translated at 97.9% (143 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_PT/
2025-04-27 22:36:40 +00:00
Sylvia van Os
00052f68b8 Merge pull request #2478 from CatimaLoyalty/create-pull-request/patch-1745784188
Update locales
2025-04-27 22:04:23 +02:00
TheLastProject
70f90bbf8f Update locales 2025-04-27 20:03:08 +00:00
Sylvia van Os
167ce12b57 Merge pull request #2475 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-27 22:02:56 +02:00
Sylvia van Os
a056841aec Merge pull request #2476 from CatimaLoyalty/create-pull-request/patch-1745727537
Update contributors
2025-04-27 12:39:16 +02:00
TheLastProject
bb81e22dae Update contributors 2025-04-27 04:18:57 +00:00
Aliaksandr Truš
068a80617d Translated using Weblate (Belarusian)
Currently translated at 97.5% (324 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/be/
2025-04-27 06:15:29 +02:00
Sylvia van Os
22c3e10274 Merge pull request #2474 from CatimaLoyalty/create-pull-request/patch-1745648687
Update Gradle to 8.14
2025-04-26 22:19:09 +02:00
Sylvia van Os
4696862745 Merge pull request #2473 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-26 20:39:09 +02:00
TheLastProject
a8930c43ce Update Gradle to 8.14 2025-04-26 06:24:47 +00:00
Govind Gopal Yadav
3fac57d023 Translated using Weblate (Hindi)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/hi/
2025-04-25 18:33:10 +02:00
Govind Gopal Yadav
1c9dba92b1 Translated using Weblate (Hindi)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hi/
2025-04-25 18:33:10 +02:00
Sylvia van Os
833a4b8743 Merge pull request #2472 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-24 18:58:20 +02:00
Aliaksandr Truš
aedeb91b1a Translated using Weblate (Belarusian)
Currently translated at 32.2% (107 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/be/
2025-04-24 16:38:24 +00:00
Govind Gopal Yadav
0c191eda05 Translated using Weblate (Hindi)
Currently translated at 93.6% (311 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hi/
2025-04-24 16:38:23 +00:00
Sylvia van Os
e3e1e0c85b Fix icons having white/black lines
It's extremely hard to perfectly reach the 85.6:53.98 ratio, so if the
image is cropped close enough to it, we enable center cropping. This
allows a bit of the edges to be cut off to fully fill the image area.
2025-04-24 18:16:49 +02:00
Sylvia van Os
32a6fa9e8f Merge pull request #2470 from CatimaLoyalty/create-pull-request/patch-1745506852
Update locales
2025-04-24 17:35:08 +02:00
TheLastProject
4f4ffa46e7 Update locales 2025-04-24 15:00:51 +00:00
Sylvia van Os
8f7ab2b4bf Merge pull request #2469 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-24 17:00:40 +02:00
Sylvia van Os
71c1afc10e Merge pull request #2466 from CatimaLoyalty/dependabot/gradle/androidx.exifinterface-exifinterface-1.4.1
Bump androidx.exifinterface:exifinterface from 1.4.0 to 1.4.1
2025-04-24 16:58:28 +02:00
Aliaksandr Truš
bdb1f70754 Added translation using Weblate (Belarusian) 2025-04-24 15:32:19 +02:00
Sylvia van Os
e08d95f0f5 Translated using Weblate (Tamil)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2025-04-24 15:32:19 +02:00
Sylvia van Os
d487668ad9 Translated using Weblate (Galician)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/gl/
2025-04-24 15:32:18 +02:00
Priit Jõerüüt
2660550df1 Translated using Weblate (Estonian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2025-04-24 15:32:18 +02:00
dedakir923
cfed16d2e5 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2025-04-24 15:32:17 +02:00
Sylvia van Os
9af3ef90a2 Translated using Weblate (Latvian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2025-04-24 15:32:16 +02:00
大王叫我来巡山
d7db959dd7 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-04-24 15:32:16 +02:00
大王叫我来巡山
b5eff7f9c7 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2025-04-24 15:32:15 +02:00
Sylvia van Os
8891f5d75d Translated using Weblate (Greek)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2025-04-24 15:32:15 +02:00
Sylvia van Os
f0aab7017e Translated using Weblate (German)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2025-04-24 15:32:14 +02:00
Sylvia van Os
b4985bba76 Translated using Weblate (Czech)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2025-04-24 15:32:14 +02:00
dependabot[bot]
0911ec8c9d Bump androidx.exifinterface:exifinterface from 1.4.0 to 1.4.1
Bumps androidx.exifinterface:exifinterface from 1.4.0 to 1.4.1.

---
updated-dependencies:
- dependency-name: androidx.exifinterface:exifinterface
  dependency-version: 1.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-24 02:48:25 +00:00
Sylvia van Os
5e171c17be Merge pull request #2465 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-23 21:43:25 +02:00
Elcio Augusto Dalosto
7896600863 Translated using Weblate (Portuguese)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt/
2025-04-23 20:04:48 +02:00
தமிழ்நேரம்
d20a0e8598 Translated using Weblate (Tamil)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2025-04-23 20:04:47 +02:00
josé m
b871279502 Translated using Weblate (Galician)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/gl/
2025-04-23 20:04:47 +02:00
Priit Jõerüüt
fa08f4f797 Translated using Weblate (Estonian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2025-04-23 20:04:46 +02:00
Edgars Andersons
794932812c Translated using Weblate (Latvian)
Currently translated at 8.9% (13 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2025-04-23 20:04:45 +02:00
Edgars Andersons
e316fc7309 Translated using Weblate (Latvian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2025-04-23 20:04:45 +02:00
109247019824
971e861e18 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2025-04-23 20:04:43 +02:00
Fjuro
3e7cf68425 Translated using Weblate (Czech)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2025-04-23 20:04:42 +02:00
B o d o
d2137c5f80 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-04-23 20:04:42 +02:00
solokot
0f17841fe4 Translated using Weblate (Russian)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-04-23 20:04:41 +02:00
Sylvain Pichon
663ad8b4b2 Translated using Weblate (French)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2025-04-23 20:04:40 +02:00
solokot
0609c05864 Translated using Weblate (Russian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2025-04-23 20:04:40 +02:00
Sylvain Pichon
07da8cb492 Translated using Weblate (French)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2025-04-23 20:04:39 +02:00
GiannosOB
c16da87be8 Translated using Weblate (Greek)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2025-04-23 20:04:38 +02:00
B o d o
450d359c16 Translated using Weblate (German)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2025-04-23 20:04:37 +02:00
Fjuro
c1a1098501 Translated using Weblate (Czech)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2025-04-23 20:04:36 +02:00
Sylvia van Os
4c7aac2f67 More fixes for height string 2025-04-22 21:44:39 +02:00
Sylvia van Os
2bcd6f856a Merge pull request #2463 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-22 21:41:35 +02:00
Максим Горпиніч
d98fb2fe12 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-04-22 19:34:07 +02:00
B o d o
c549c713a3 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-04-22 19:34:05 +02:00
B o d o
9388a05eac Translated using Weblate (German)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-04-22 19:34:02 +02:00
Vasilis K
6809153412 Translated using Weblate (Greek)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2025-04-22 19:34:00 +02:00
B o d o
39556705ab Translated using Weblate (German)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2025-04-22 19:34:00 +02:00
Максим Горпиніч
d1939b943d Translated using Weblate (Ukrainian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2025-04-22 16:52:07 +02:00
தமிழ்நேரம்
f2c32202c8 Added translation using Weblate (Tamil) 2025-04-22 16:48:40 +02:00
nadia fekih ahmed
7ece032bb3 Translated using Weblate (Arabic)
Currently translated at 30.1% (44 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ar/
2025-04-22 16:48:32 +02:00
Sylvia van Os
9393c2b8d8 Merge pull request #2462 from CatimaLoyalty/dependabot/gradle/com.android.application-8.9.2
Bump com.android.application from 8.9.1 to 8.9.2
2025-04-22 08:23:35 +02:00
dependabot[bot]
f2dd15aaf5 Bump com.android.application from 8.9.1 to 8.9.2
Bumps com.android.application from 8.9.1 to 8.9.2.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-22 03:00:53 +00:00
Sylvia van Os
f4927d9c8b Merge pull request #2458 from CatimaLoyalty/create-pull-request/patch-1745248381
Update Fastlane changelogs
2025-04-21 17:13:42 +02:00
TheLastProject
1dddd2cee3 Update Fastlane changelogs 2025-04-21 15:13:00 +00:00
Sylvia van Os
1e75da4eaf Update CHANGELOG 2025-04-21 17:12:48 +02:00
Sylvia van Os
1add77f4fe Remove colon for height for consistency with width field 2025-04-21 17:12:10 +02:00
perepujal
4b77700b97 Merge pull request #2254 from perepujal/main
Adding the ability to resize the width in the fullscreen view.
2025-04-21 17:06:49 +02:00
Sylvia van Os
cb547b0a71 Merge pull request #2457 from CatimaLoyalty/create-pull-request/patch-1745122739
Update contributors
2025-04-20 08:03:26 +02:00
TheLastProject
01ee3568ca Update contributors 2025-04-20 04:18:59 +00:00
Sylvia van Os
fcd7c00cc7 Merge pull request #2456 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-18 20:20:10 +02:00
Brian Sciretti
90a41ccf0f Translated using Weblate (Lombard)
Currently translated at 15.4% (51 of 330 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lmo/
2025-04-18 20:01:46 +02:00
Sylvia van Os
6c9748aca4 Merge pull request #2455 from CatimaLoyalty/create-pull-request/patch-1744925476
Update locales
2025-04-18 17:06:43 +02:00
TheLastProject
02e3ae4dd6 Update locales 2025-04-17 21:31:15 +00:00
Sylvia van Os
d39fdf400c Merge pull request #2447 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-17 23:31:02 +02:00
Sylvia van Os
073c6dfed8 Merge pull request #2432 from CatimaLoyalty/fix/persian_feature_graphic
Fix Persian feature graphic generation
2025-04-17 23:28:47 +02:00
Sylvia van Os
0fa4a6a4c8 Merge pull request #2454 from CatimaLoyalty/create-pull-request/patch-1744921489
Update feature graphic
2025-04-17 22:55:18 +02:00
TheLastProject
07b59f090e Update feature graphic 2025-04-17 20:24:48 +00:00
Sylvia van Os
df807d5548 Fix Persian feature graphic generation 2025-04-17 22:21:24 +02:00
Brian Sciretti
f21264c762 Added translation using Weblate (Lombard) 2025-04-17 19:52:33 +02:00
hajer tabbane
8aace7f765 Translated using Weblate (French)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/fr/
2025-04-17 19:52:32 +02:00
hadeelljn
531c25add7 Translated using Weblate (Arabic)
Currently translated at 19.8% (29 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ar/
2025-04-17 19:52:32 +02:00
Sylvia van Os
43add95012 Merge pull request #2444 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-14 20:30:27 +02:00
Sylvain Pichon
6ef892fa41 Translated using Weblate (French)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2025-04-14 09:03:21 +02:00
Sylvia van Os
1c832eb899 Merge pull request #2443 from CatimaLoyalty/create-pull-request/patch-1744519581
Update contributors
2025-04-13 11:14:29 +02:00
TheLastProject
f187fd10a5 Update contributors 2025-04-13 04:46:21 +00:00
Sylvia van Os
4cac1b103a Merge pull request #2441 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-12 00:21:38 +02:00
Edgars Andersons
2c7a759711 Translated using Weblate (Latvian)
Currently translated at 8.9% (13 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2025-04-11 22:51:32 +02:00
Sylvia van Os
c490ce6248 Merge pull request #2440 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-11 08:39:23 +02:00
Sylvia van Os
7e3e1544d2 Translated using Weblate (Occitan)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/oc/
2025-04-11 00:03:48 +02:00
B o d o
edf18591ca Translated using Weblate (German)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-04-11 00:03:47 +02:00
Sylvia van Os
8cb08dc980 Merge pull request #2438 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-10 17:13:58 +02:00
hajer tabbane
5e925f41fb Translated using Weblate (Tamazight (Central Atlas))
Currently translated at 0.0% (0 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/tzm/
2025-04-10 09:00:49 +00:00
hajer tabbane
a3a28b38e7 Translated using Weblate (Czech)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/cs/
2025-04-10 09:00:48 +00:00
109247019824
87fb81de91 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/bg/
2025-04-10 09:00:48 +00:00
hajer tabbane
76adf47107 Translated using Weblate (Turkish)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/tr/
2025-04-10 09:00:47 +00:00
大王叫我来巡山
ecbca16246 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-04-10 09:00:46 +00:00
Fjuro
4bd9b25633 Translated using Weblate (Czech)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2025-04-10 09:00:46 +00:00
Максим Горпиніч
dd46a45b21 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-04-10 09:00:45 +00:00
solokot
e0875d8e45 Translated using Weblate (Russian)
Currently translated at 100.0% (146 of 146 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-04-10 09:00:45 +00:00
nadia fekih ahmed
329ff33dc4 Translated using Weblate (Spanish (Argentina))
Currently translated at 72.1% (238 of 330 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es_AR/
2025-04-10 09:00:44 +00:00
hajer tabbane
4610058c54 Added translation using Weblate (Tamazight (Central Atlas)) 2025-04-10 09:00:43 +00:00
nadia fekih ahmed
8ce338c525 Translated using Weblate (Filipino)
Currently translated at 18.0% (60 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fil/
2025-04-10 09:00:43 +00:00
nadia fekih ahmed
22e119336b Translated using Weblate (Marathi)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/mr/
2025-04-10 09:00:42 +00:00
nadia fekih ahmed
981e031697 Translated using Weblate (Spanish (Argentina))
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/es_AR/
2025-04-10 09:00:41 +00:00
nadia fekih ahmed
4f934b35ca Translated using Weblate (Slovenian)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/sl/
2025-04-10 09:00:41 +00:00
nadia fekih ahmed
441ce040ff Translated using Weblate (Bengali (India))
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/bn_IN/
2025-04-10 09:00:40 +00:00
nadia fekih ahmed
39e3a5afa8 Translated using Weblate (Malayalam)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/ml/
2025-04-10 09:00:40 +00:00
nadia fekih ahmed
b281a8b8e4 Translated using Weblate (Icelandic)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/is/
2025-04-10 09:00:39 +00:00
nadia fekih ahmed
5877508fb7 Translated using Weblate (Welsh)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/cy/
2025-04-10 09:00:38 +00:00
nadia fekih ahmed
7ff98a9b6d Translated using Weblate (Occitan)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/oc/
2025-04-10 09:00:38 +00:00
nadia fekih ahmed
e658555c2b Translated using Weblate (Bosnian)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/bs/
2025-04-10 09:00:37 +00:00
nadia fekih ahmed
80a52afd8e Translated using Weblate (Asturian)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/ast/
2025-04-10 09:00:36 +00:00
nadia fekih ahmed
5963582abf Translated using Weblate (Bulgarian)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/bg/
2025-04-10 09:00:35 +00:00
nadia fekih ahmed
b918d51744 Translated using Weblate (Bengali)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/bn/
2025-04-10 09:00:35 +00:00
nadia fekih ahmed
1a475bc9c5 Translated using Weblate (Danish)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/da/
2025-04-10 09:00:34 +00:00
nadia fekih ahmed
1b86795c20 Translated using Weblate (Lithuanian)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/lt/
2025-04-10 09:00:33 +00:00
nadia fekih ahmed
42d1bc452f Translated using Weblate (Luxembourgish)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/lb/
2025-04-10 09:00:33 +00:00
hadeelljn
7e0e788689 Translated using Weblate (Arabic)
Currently translated at 9.6% (14 of 145 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ar/
2025-04-10 09:00:32 +00:00
hadeelljn
14434e1c55 Translated using Weblate (Arabic)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2025-04-10 09:00:32 +00:00
hadeelljn
a733b681d8 Translated using Weblate (Japanese)
Currently translated at 4.8% (7 of 145 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ja/
2025-04-10 09:00:31 +00:00
Sylvia van Os
af39b9de25 Merge pull request #2439 from CatimaLoyalty/dependabot/gradle/androidx.core-core-ktx-1.16.0
Bump androidx.core:core-ktx from 1.15.0 to 1.16.0
2025-04-10 08:34:17 +02:00
dependabot[bot]
74c988aa67 Bump androidx.core:core-ktx from 1.15.0 to 1.16.0
Bumps androidx.core:core-ktx from 1.15.0 to 1.16.0.

---
updated-dependencies:
- dependency-name: androidx.core:core-ktx
  dependency-version: 1.16.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-10 02:43:07 +00:00
Sylvia van Os
8ff1120a0d Merge pull request #2437 from CatimaLoyalty/create-pull-request/patch-1744140504
Update Fastlane changelogs
2025-04-08 21:28:45 +02:00
TheLastProject
543787a559 Update Fastlane changelogs 2025-04-08 19:28:24 +00:00
Sylvia van Os
3eb7b01a98 Update CHANGELOG 2025-04-08 21:28:09 +02:00
Sylvia van Os
c66e800a22 Merge pull request #2427 from CatimaLoyalty/fix/removeConfusingImportFromApp
Remove confusing import from app function
2025-04-08 21:27:23 +02:00
Sylvia van Os
10ed6be747 Merge pull request #2435 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-08 08:32:56 +02:00
Shubham Sharma (Kaku)
b99c7f576d Translated using Weblate (Hindi)
Currently translated at 94.5% (315 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hi/
2025-04-08 06:44:22 +02:00
Sylvia van Os
ac5d15578f Remove confusing import from app function 2025-04-06 20:54:22 +02:00
Sylvia van Os
d5c03f9d36 Merge pull request #2428 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-06 17:24:15 +02:00
Sylvia van Os
6ed2ff849a Translated using Weblate (Persian)
Currently translated at 63.3% (211 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2025-04-06 17:03:08 +02:00
ssantos
2945450186 Translated using Weblate (Portuguese)
Currently translated at 99.3% (144 of 145 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt/
2025-04-06 17:03:08 +02:00
KING APPS
8944c6d5dc Translated using Weblate (Persian)
Currently translated at 22.7% (33 of 145 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fa/
2025-04-06 04:37:03 +02:00
KING APPS
97db8ee025 Translated using Weblate (Persian)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/fa/
2025-04-06 04:37:03 +02:00
KING APPS
777a3cce28 Translated using Weblate (Persian)
Currently translated at 63.3% (211 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2025-04-06 04:37:03 +02:00
Sylvia van Os
91386df0f7 Merge pull request #2426 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-04 17:57:07 +02:00
XblateX
9f95812d32 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2025-04-04 16:24:48 +02:00
Sylvia van Os
361b011205 Merge pull request #2425 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-04 10:43:46 +02:00
Tachibana Saza
ac45a5cdfe Translated using Weblate (Japanese)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/ja/
2025-04-04 01:21:09 +02:00
Tachibana Saza
e892f5d57c Translated using Weblate (Japanese)
Currently translated at 81.6% (272 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ja/
2025-04-04 01:21:08 +02:00
Sylvia van Os
a3d24ebe3b Merge pull request #2424 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-02 20:19:30 +02:00
Sylvia van Os
29ce8e63b3 Translated using Weblate (Persian)
Currently translated at 46.2% (154 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2025-04-01 21:03:20 +02:00
alpha chart
223d6d1d35 Translated using Weblate (Persian)
Currently translated at 46.2% (154 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2025-04-01 19:46:49 +02:00
alpha chart
e712765f0b Translated using Weblate (Persian)
Currently translated at 46.2% (154 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2025-04-01 19:24:21 +02:00
alpha chart
ad68c43857 Added translation using Weblate (Persian) 2025-04-01 19:11:23 +02:00
alpha chart
626c25b781 Translated using Weblate (Persian)
Currently translated at 45.9% (153 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2025-04-01 19:11:23 +02:00
Sylvia van Os
0e9366e0ce Merge pull request #2423 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-01 07:31:25 +02:00
Branislav Veljkovic
cccffe9543 Translated using Weblate (Serbian)
Currently translated at 94.2% (314 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sr/
2025-04-01 03:27:29 +02:00
Sylvia van Os
821e81303c Merge pull request #2421 from CatimaLoyalty/dependabot/github_actions/actions/setup-python-5.5.0
Bump actions/setup-python from 5.4.0 to 5.5.0
2025-03-31 07:03:14 +02:00
dependabot[bot]
d3ba0ff93f Bump actions/setup-python from 5.4.0 to 5.5.0
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5.4.0 to 5.5.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5.4.0...v5.5.0)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-31 02:44:55 +00:00
Sylvia van Os
2bf9f58054 Merge pull request #2420 from CatimaLoyalty/create-pull-request/patch-1743308358
Update contributors
2025-03-30 12:16:15 +02:00
TheLastProject
07ba380c21 Update contributors 2025-03-30 04:19:17 +00:00
Sylvia van Os
6e523dff7e Merge pull request #2419 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-30 00:33:20 +01:00
abdelbasset jabrane
702cc17bd5 Translated using Weblate (Arabic)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2025-03-30 00:02:03 +01:00
Sylvia van Os
6b9c452de7 Merge pull request #2418 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-26 10:32:27 +01:00
mohamad jamshidi
5d9a670225 Translated using Weblate (Persian)
Currently translated at 45.6% (152 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2025-03-26 01:10:20 +01:00
Sylvia van Os
4cb939ab6b Merge pull request #2416 from CatimaLoyalty/dependabot/gradle/com.android.application-8.9.1
Bump com.android.application from 8.9.0 to 8.9.1
2025-03-25 07:14:36 +01:00
dependabot[bot]
f14b2dffcd Bump com.android.application from 8.9.0 to 8.9.1
Bumps com.android.application from 8.9.0 to 8.9.1.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-25 03:03:46 +00:00
Sylvia van Os
55b0ee7a63 Merge pull request #2415 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-24 22:01:08 +01:00
ar djeb
4adfb0d292 Translated using Weblate (Arabic)
Currently translated at 99.3% (331 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2025-03-24 20:18:52 +00:00
Sylvia van Os
948ee26852 Bump fastlane 2025-03-24 18:44:34 +01:00
Sylvia van Os
a652d3fd9a Merge pull request #2413 from CatimaLoyalty/dependabot/github_actions/actions/upload-artifact-4.6.2
Bump actions/upload-artifact from 4.6.1 to 4.6.2
2025-03-24 13:21:21 +01:00
Sylvia van Os
18e530f3a0 Merge pull request #2414 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-24 13:13:47 +01:00
Edgars Andersons
a55dcd760c Translated using Weblate (Latvian)
Currently translated at 8.2% (12 of 145 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2025-03-24 13:04:38 +01:00
Максим Горпиніч
2bbcad03ef Translated using Weblate (Ukrainian)
Currently translated at 100.0% (145 of 145 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-03-24 13:04:38 +01:00
solokot
cc9c50032c Translated using Weblate (Russian)
Currently translated at 100.0% (145 of 145 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-03-24 13:04:38 +01:00
dependabot[bot]
06cf3e9288 Bump actions/upload-artifact from 4.6.1 to 4.6.2
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.6.1 to 4.6.2.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4.6.1...v4.6.2)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-24 03:02:10 +00:00
Sylvia van Os
a25e91dede Merge pull request #2412 from CatimaLoyalty/create-pull-request/patch-1742767250
Update feature graphic
2025-03-23 23:04:21 +01:00
TheLastProject
57086649f4 Update feature graphic 2025-03-23 22:00:50 +00:00
Sylvia van Os
7d2fc03248 Merge pull request #2410 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-23 22:59:38 +01:00
ssantos
b2ad30d1ae Translated using Weblate (Portuguese)
Currently translated at 97.9% (142 of 145 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt/
2025-03-23 19:40:12 +00:00
ssantos
8970a0a031 Translated using Weblate (Portuguese (Portugal))
Currently translated at 97.9% (142 of 145 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_PT/
2025-03-23 19:40:06 +00:00
Sylvia van Os
c9e713cf7f Merge pull request #2409 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-23 17:58:01 +01:00
Fjuro
64e315f0b0 Translated using Weblate (Czech)
Currently translated at 100.0% (145 of 145 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2025-03-23 16:18:27 +00:00
Sylvia van Os
f60cf0e674 Merge pull request #2408 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-23 15:50:42 +01:00
大王叫我来巡山
5d2a1b0263 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (145 of 145 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-03-23 15:36:48 +01:00
Sylvia van Os
77860441ad Merge pull request #2406 from CatimaLoyalty/create-pull-request/patch-1742703483
Update contributors
2025-03-23 10:33:48 +01:00
Sylvia van Os
f46ec1ec51 Merge pull request #2405 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-23 10:32:38 +01:00
TheLastProject
e644c347ec Update contributors 2025-03-23 04:18:03 +00:00
B o d o
0b28df9999 Translated using Weblate (German)
Currently translated at 100.0% (145 of 145 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-03-23 00:34:29 +01:00
Sylvia van Os
dddb3e3a11 Merge pull request #2404 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-22 20:56:27 +01:00
Edgars Andersons
0518821341 Translated using Weblate (Latvian)
Currently translated at 7.5% (11 of 145 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2025-03-22 19:42:43 +00:00
B o d o
2eefcf1270 Translated using Weblate (German)
Currently translated at 100.0% (145 of 145 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-03-22 19:42:42 +00:00
Sylvia van Os
93c3705207 Merge pull request #2403 from CatimaLoyalty/create-pull-request/patch-1742664270
Update Fastlane changelogs
2025-03-22 19:16:44 +01:00
TheLastProject
9fcf9e4dd9 Update Fastlane changelogs 2025-03-22 17:24:29 +00:00
Sylvia van Os
392ce9bc79 Fix typo 2025-03-22 18:24:16 +01:00
Sylvia van Os
da3eaf36f1 Release Catima 2.34.5 2025-03-22 18:18:24 +01:00
Sylvia van Os
0458c501c8 Merge pull request #2394 from CatimaLoyalty/create-pull-request/patch-1742235107
Update Fastlane changelogs
2025-03-17 19:12:06 +01:00
TheLastProject
632ef8b3a8 Update Fastlane changelogs 2025-03-17 18:11:47 +00:00
Sylvia van Os
40e5014cc6 Update changelog 2025-03-17 19:11:31 +01:00
Sylvia van Os
ba09eb4ca3 Merge pull request #2393 from CatimaLoyalty/fix/2317
Support pkpass files without any extra data
2025-03-17 19:10:57 +01:00
Sylvia van Os
2c77dcadb5 Support pkpass files without any extra data
Previously, the code assumed one of "boardingPass", "coupon", "eventTicket", "generic" existed and refused to pass a pkpass file without any of them
2025-03-17 18:37:28 +01:00
Sylvia van Os
99eaaebf1c Merge pull request #2392 from CatimaLoyalty/bump/tests_35
Run tests on API 35
2025-03-16 18:41:22 +01:00
Sylvia van Os
f2e77cdf09 Run tests on API 35 2025-03-16 18:31:53 +01:00
Sylvia van Os
8f00b17315 Merge pull request #2391 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-16 00:50:42 +01:00
Fajar Shiddiq
3a17756532 Translated using Weblate (Indonesian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/id/
2025-03-16 00:41:45 +01:00
Sylvia van Os
cff3fff971 Merge pull request #2390 from CatimaLoyalty/create-pull-request/patch-1741987875
Update Fastlane changelogs
2025-03-14 22:32:17 +01:00
TheLastProject
2763635f17 Update Fastlane changelogs 2025-03-14 21:31:14 +00:00
Sylvia van Os
1dd1a1273f Update CHANGELOG 2025-03-14 22:31:01 +01:00
Sylvia van Os
3f5b953c16 Merge pull request #2388 from CatimaLoyalty/create-pull-request/patch-1741984134
Update Fastlane changelogs
2025-03-14 22:30:47 +01:00
Sylvia van Os
1539d88d78 Merge pull request #2389 from CatimaLoyalty/fix/pkpassCrash
Fix pkpass reading crashing Catima
2025-03-14 22:30:11 +01:00
Sylvia van Os
91ee846054 Fix pkpass reading crashing Catima 2025-03-14 22:09:04 +01:00
TheLastProject
c5cecee7b1 Update Fastlane changelogs 2025-03-14 20:28:54 +00:00
Sylvia van Os
1e0a52d780 Update CHANGELOG 2025-03-14 21:28:40 +01:00
Sylvia van Os
0792bb1407 Merge pull request #2378 from CatimaLoyalty/feature/android15
Target Android 15
2025-03-14 21:26:58 +01:00
Sylvia van Os
6e9a05389a Merge pull request #2384 from CatimaLoyalty/dependabot/github_actions/peter-evans/create-pull-request-7.0.8
Bump peter-evans/create-pull-request from 7.0.7 to 7.0.8
2025-03-10 12:11:59 +01:00
dependabot[bot]
68833a7ff1 Bump peter-evans/create-pull-request from 7.0.7 to 7.0.8
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7.0.7 to 7.0.8.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v7.0.7...v7.0.8)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 02:58:22 +00:00
Sylvia van Os
cc7553850a Target Android 15
We apply window insets to basically not draw behind the top and bottom
bar. While this is a slight visual downgrade (we used to draw behind the
top bar before), it at least allows us to target Android 15.
2025-03-09 16:51:06 +01:00
Sylvia van Os
e66277d665 Merge pull request #2382 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-09 12:06:50 +01:00
Sylvia van Os
caea63ea32 Merge pull request #2383 from CatimaLoyalty/create-pull-request/patch-1741493688
Update contributors
2025-03-09 09:55:44 +01:00
TheLastProject
1761465532 Update contributors 2025-03-09 04:14:48 +00:00
Pixiii
8218cc63c7 Translated using Weblate (Lithuanian)
Currently translated at 93.3% (311 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lt/
2025-03-08 18:30:12 +01:00
Sylvia van Os
c2ff763311 Merge pull request #2375 from CatimaLoyalty/create-pull-request/patch-1741191680
Update locales
2025-03-07 20:07:08 +01:00
Sylvia van Os
813287a657 Merge pull request #2376 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-07 20:06:47 +01:00
Fjuro
66c3046c4d Translated using Weblate (Czech)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2025-03-07 04:06:57 +01:00
ssantos
acbdf79d79 Translated using Weblate (Portuguese)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt/
2025-03-07 04:06:57 +01:00
Sylvia van Os
ade3db0902 Merge pull request #2372 from CatimaLoyalty/dependabot/gradle/com.android.application-8.9.0
Bump com.android.application from 8.8.2 to 8.9.0
2025-03-05 18:31:24 +01:00
TheLastProject
d66066c195 Update locales 2025-03-05 16:21:19 +00:00
Sylvia van Os
0a222ca16a Merge pull request #2374 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-05 17:21:02 +01:00
ssantos
48fa369dc3 Added translation using Weblate (Portuguese) 2025-03-05 14:36:53 +00:00
ssantos
9e861b1b10 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2025-03-05 14:36:52 +00:00
dependabot[bot]
6b7926ecde Bump com.android.application from 8.8.2 to 8.9.0
Bumps com.android.application from 8.8.2 to 8.9.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-05 02:09:02 +00:00
Sylvia van Os
ccd6e12547 Merge pull request #2371 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-04 18:37:02 +01:00
Balázs Meskó
c869104e82 Translated using Weblate (Hungarian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hu/
2025-03-04 17:09:09 +01:00
Sylvia van Os
f430d3071b Merge pull request #2369 from CatimaLoyalty/dependabot/github_actions/peter-evans/create-pull-request-7.0.7
Bump peter-evans/create-pull-request from 7.0.6 to 7.0.7
2025-03-03 07:09:21 +01:00
dependabot[bot]
26460753a6 Bump peter-evans/create-pull-request from 7.0.6 to 7.0.7
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7.0.6 to 7.0.7.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v7.0.6...v7.0.7)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 02:30:19 +00:00
Sylvia van Os
2653c7aea3 Merge pull request #2367 from CatimaLoyalty/create-pull-request/patch-1740889044
Update contributors
2025-03-02 13:31:55 +01:00
juuce79
1a892b2de3 Kotlin conversion of AboutActivity with tests also in Kotlin (#2360) 2025-03-02 13:30:10 +01:00
TheLastProject
a9e9ee511d Update contributors 2025-03-02 04:17:23 +00:00
Sylvia van Os
7719a2d3fd Merge pull request #2365 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-28 18:50:07 +01:00
Ricky Tigg
84a6202db1 Translated using Weblate (Finnish)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2025-02-28 12:51:42 +00:00
Sylvia van Os
4d8a4fbd6a Merge pull request #2364 from CatimaLoyalty/dependabot/gradle/com.android.application-8.8.2
Bump com.android.application from 8.8.1 to 8.8.2
2025-02-28 07:56:59 +01:00
dependabot[bot]
d556e7e0a2 Bump com.android.application from 8.8.1 to 8.8.2
Bumps com.android.application from 8.8.1 to 8.8.2.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-28 02:32:30 +00:00
Sylvia van Os
5f039c5c3f Merge pull request #2362 from CatimaLoyalty/dependabot/gradle/androidx.constraintlayout-constraintlayout-2.2.1
Bump androidx.constraintlayout:constraintlayout from 2.2.0 to 2.2.1
2025-02-27 08:14:49 +01:00
dependabot[bot]
5bf69db296 Bump androidx.constraintlayout:constraintlayout from 2.2.0 to 2.2.1
Bumps androidx.constraintlayout:constraintlayout from 2.2.0 to 2.2.1.

---
updated-dependencies:
- dependency-name: androidx.constraintlayout:constraintlayout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-27 07:03:05 +00:00
Sylvia van Os
f20cac5d85 Merge pull request #2361 from CatimaLoyalty/dependabot/gradle/androidx.exifinterface-exifinterface-1.4.0
Bump androidx.exifinterface:exifinterface from 1.3.7 to 1.4.0
2025-02-27 08:02:08 +01:00
dependabot[bot]
69976289ca Bump androidx.exifinterface:exifinterface from 1.3.7 to 1.4.0
Bumps androidx.exifinterface:exifinterface from 1.3.7 to 1.4.0.

---
updated-dependencies:
- dependency-name: androidx.exifinterface:exifinterface
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-27 02:13:51 +00:00
Sylvia van Os
8b30f92dfd Merge pull request #2359 from CatimaLoyalty/create-pull-request/patch-1740551110
Update Gradle to 8.13
2025-02-26 19:03:36 +01:00
Sylvia van Os
477c70a8e5 Merge pull request #2358 from CatimaLoyalty/dependabot/gradle/com.android.tools-desugar_jdk_libs-2.1.5
Bump com.android.tools:desugar_jdk_libs from 2.1.4 to 2.1.5
2025-02-26 08:34:30 +01:00
TheLastProject
2e9d1a41f6 Update Gradle to 8.13 2025-02-26 06:25:09 +00:00
dependabot[bot]
ff617036c7 Bump com.android.tools:desugar_jdk_libs from 2.1.4 to 2.1.5
Bumps [com.android.tools:desugar_jdk_libs](https://github.com/google/desugar_jdk_libs) from 2.1.4 to 2.1.5.
- [Changelog](https://github.com/google/desugar_jdk_libs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/desugar_jdk_libs/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-26 02:16:31 +00:00
Sylvia van Os
2b4e8b1f8b Merge pull request #2357 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-25 16:56:33 +01:00
Priit Jõerüüt
7bcbdd8358 Translated using Weblate (Estonian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2025-02-25 16:29:26 +01:00
Sylvia van Os
45c212c5cc Merge pull request #2356 from CatimaLoyalty/dependabot/github_actions/actions/upload-artifact-4.6.1
Bump actions/upload-artifact from 4.6.0 to 4.6.1
2025-02-24 08:14:07 +01:00
dependabot[bot]
00d7b5e231 Bump actions/upload-artifact from 4.6.0 to 4.6.1
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.6.0 to 4.6.1.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4.6.0...v4.6.1)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 02:57:08 +00:00
Sylvia van Os
0314d49b77 Merge pull request #2355 from CatimaLoyalty/create-pull-request/patch-1740284254
Update contributors
2025-02-23 09:09:05 +01:00
TheLastProject
6335b731df Update contributors 2025-02-23 04:17:34 +00:00
Sylvia van Os
c248d1e84c Merge pull request #2354 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-22 09:06:29 +01:00
தமிழ்நேரம்
94de9829b9 Translated using Weblate (Tamil)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2025-02-22 00:40:54 +00:00
Edgars Andersons
0448efd04c Translated using Weblate (Latvian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2025-02-22 00:40:54 +00:00
Sylvia van Os
21f4b9b5cf Merge pull request #2352 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-17 17:11:47 +01:00
Trond Kjetil Bremnes
01a30db52e Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nb_NO/
2025-02-17 15:18:34 +00:00
Sylvia van Os
01ed9bd30f Merge pull request #2347 from CatimaLoyalty/dependabot/gradle/com.android.application-8.8.1
Bump com.android.application from 8.8.0 to 8.8.1
2025-02-14 08:32:51 +01:00
dependabot[bot]
583edb53d9 Bump com.android.application from 8.8.0 to 8.8.1
Bumps com.android.application from 8.8.0 to 8.8.1.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-14 02:50:40 +00:00
Sylvia van Os
f51cc70d8e Merge pull request #2346 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-13 19:09:14 +01:00
zedsansor
539d05a603 Translated using Weblate (Persian)
Currently translated at 45.0% (150 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2025-02-12 21:01:59 +01:00
Sylvia van Os
906162ebb4 Merge pull request #2343 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-11 20:02:28 +01:00
Lari Tanase
b06203dc8a Translated using Weblate (Romanian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2025-02-11 17:02:20 +00:00
Sylvia van Os
6aec4b93ff Merge pull request #2341 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-10 19:49:28 +01:00
Mahan Khalili
3ea6f64021 Translated using Weblate (Persian)
Currently translated at 37.5% (125 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2025-02-10 16:02:02 +00:00
Lari Tanase
51fb01b190 Translated using Weblate (Romanian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2025-02-10 16:02:01 +00:00
dicaeffe
01b23109ae Translated using Weblate (Italian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2025-02-10 16:02:00 +00:00
Sylvia van Os
4e291b58d3 Merge pull request #2339 from CatimaLoyalty/create-pull-request/patch-1739074637
Update contributors
2025-02-09 11:45:49 +01:00
TheLastProject
1689cf1026 Update contributors 2025-02-09 04:17:17 +00:00
Sylvia van Os
a55ce2c952 Merge pull request #2338 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-06 18:58:05 +01:00
이정희
d2ff17a90e Translated using Weblate (Italian)
Currently translated at 81.9% (118 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/it/
2025-02-06 16:02:42 +00:00
Odoamar
70c446e88d Translated using Weblate (Polish)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2025-02-06 16:02:41 +00:00
Sylvia van Os
0d6dc40da5 Merge pull request #2334 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-03 20:43:41 +01:00
Hosted Weblate
a4f3a81d58 Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/
2025-02-03 20:02:48 +01:00
Priit Jõerüüt
c64f75ffe4 Translated using Weblate (Estonian)
Currently translated at 10.4% (15 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/et/
2025-02-03 20:02:48 +01:00
Ricky Tigg
0fdb6ee567 Translated using Weblate (Finnish)
Currently translated at 99.6% (332 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2025-02-03 20:02:47 +01:00
이정희
9aa40fc88c Translated using Weblate (Korean)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ko/
2025-02-03 20:02:46 +01:00
Sylvia van Os
4f4c0171c0 Translated using Weblate (Hebrew (Israel))
Currently translated at 29.4% (98 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/he_IL/
2025-02-03 20:02:45 +01:00
Anonymous
e4644b3eb7 Translated using Weblate (Hebrew (Israel))
Currently translated at 29.4% (98 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/he_IL/
2025-02-03 20:02:44 +01:00
Sylvia van Os
999cf241f8 Merge pull request #2331 from CatimaLoyalty/dependabot/github_actions/actions/setup-python-5.4.0
Bump actions/setup-python from 5.3.0 to 5.4.0
2025-02-03 19:30:38 +01:00
dependabot[bot]
42b964a324 Bump actions/setup-python from 5.3.0 to 5.4.0
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5.3.0 to 5.4.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5.3.0...v5.4.0)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 02:47:52 +00:00
Sylvia van Os
1262bfd502 Merge pull request #2329 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-31 20:29:52 +01:00
Bruno Fragoso
81fe561678 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2025-01-31 18:07:38 +01:00
polarwood
9cb989155d Translated using Weblate (Turkish)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2025-01-31 18:07:38 +01:00
Fermín Etcheverry
59587f4a40 Translated using Weblate (Spanish)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2025-01-31 18:07:38 +01:00
Sylvia van Os
4dc0d4cd24 Merge pull request #2326 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-29 18:00:50 +01:00
Ricky Tigg
89598be72e Translated using Weblate (Finnish)
Currently translated at 4.1% (6 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fi/
2025-01-29 16:03:18 +01:00
Sylvia van Os
1d2359f295 Merge pull request #2324 from CatimaLoyalty/dependabot/gradle/org.jetbrains.kotlin.android-2.1.10
Bump org.jetbrains.kotlin.android from 2.1.0 to 2.1.10
2025-01-28 10:21:53 +01:00
dependabot[bot]
026984920b Bump org.jetbrains.kotlin.android from 2.1.0 to 2.1.10
Bumps [org.jetbrains.kotlin.android](https://github.com/JetBrains/kotlin) from 2.1.0 to 2.1.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.1.0...v2.1.10)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-28 02:50:47 +00:00
Sylvia van Os
03ed289ef9 Merge pull request #2319 from CatimaLoyalty/create-pull-request/patch-1737865002
Update contributors
2025-01-26 10:10:23 +01:00
TheLastProject
0ccbeb42dd Update contributors 2025-01-26 04:16:42 +00:00
Sylvia van Os
3f9b772a11 Merge pull request #2316 from CatimaLoyalty/create-pull-request/patch-1737786088
Update Gradle to 8.12.1
2025-01-25 13:33:46 +01:00
TheLastProject
e97c9de471 Update Gradle to 8.12.1 2025-01-25 06:21:27 +00:00
Sylvia van Os
872db6b966 Merge pull request #2315 from CatimaLoyalty/create-pull-request/patch-1737497854
Update feature graphic
2025-01-22 21:46:40 +01:00
Sylvia van Os
724d036df9 Merge pull request #2314 from CatimaLoyalty/fix/imagemagick
Fix feature graphic generation
2025-01-21 23:27:02 +01:00
TheLastProject
fc98e6651a Update feature graphic 2025-01-21 22:17:33 +00:00
Sylvia van Os
a70e4aa7a7 Fix feature graphic generation 2025-01-21 23:14:30 +01:00
Sylvia van Os
d542be322c Merge pull request #2312 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-21 23:05:55 +01:00
Sylvia van Os
d5a977c5b0 Translated using Weblate (Catalan)
Currently translated at 4.1% (6 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ca/
2025-01-21 22:54:35 +01:00
mrestivill
bac9199974 Translated using Weblate (Catalan)
Currently translated at 3.4% (5 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ca/
2025-01-21 22:19:26 +01:00
mrestivill
bb92ec2291 Translated using Weblate (Catalan)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/ca/
2025-01-21 22:19:25 +01:00
mrestivill
b155f45b01 Translated using Weblate (Catalan)
Currently translated at 81.9% (273 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ca/
2025-01-21 22:19:24 +01:00
Milo Ivir
b2f79f836b Translated using Weblate (Croatian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hr/
2025-01-21 22:19:24 +01:00
ikanakova
9ba7e4a92b Translated using Weblate (Czech)
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2025-01-21 22:19:23 +01:00
Sylvia van Os
28088beb72 Merge pull request #2311 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-20 22:21:27 +01:00
reimu105
25351f4138 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2025-01-20 02:51:26 +00:00
B o d o
1ac4db8641 Translated using Weblate (German)
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-01-20 02:51:26 +00:00
J. Lavoie
5cee4ef497 Translated using Weblate (French)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2025-01-20 02:51:25 +00:00
Sylvia van Os
b323c2e5cd Merge pull request #2310 from CatimaLoyalty/create-pull-request/patch-1737260228
Update contributors
2025-01-19 09:52:14 +01:00
TheLastProject
66be4a8c18 Update contributors 2025-01-19 04:17:08 +00:00
Sylvia van Os
dd2bd294ba Merge pull request #2308 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-18 13:02:13 +01:00
Edgars Andersons
e4db1e931a Translated using Weblate (Latvian)
Currently translated at 6.9% (10 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2025-01-18 11:45:31 +00:00
Edgars Andersons
f8b3e9c65b Translated using Weblate (Latvian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2025-01-18 11:45:31 +00:00
reimu105
880a596621 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 87.5% (126 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hant/
2025-01-18 11:45:30 +00:00
reimu105
9903b4d955 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2025-01-18 11:45:29 +00:00
大王叫我来巡山
40bc87c772 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-01-18 11:45:28 +00:00
Максим Горпиніч
586642c6f6 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-01-18 11:45:28 +00:00
solokot
f3847a4a2b Translated using Weblate (Russian)
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-01-18 11:45:27 +00:00
B o d o
63352c310e Translated using Weblate (German)
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-01-18 11:45:27 +00:00
Sylvia van Os
e7aac163c2 Release Catima 2.34.4 2025-01-17 19:23:43 +01:00
Sylvia van Os
5a3d61d8f0 Merge pull request #2306 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-17 19:20:18 +01:00
Sylvia van Os
33ba81d3b0 Translated using Weblate (Dutch)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2025-01-17 19:08:14 +01:00
josé m
6a0956181d Translated using Weblate (Galician)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/gl/
2025-01-17 19:03:59 +01:00
Priit Jõerüüt
aca7d3bd9c Translated using Weblate (Estonian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2025-01-17 19:03:59 +01:00
109247019824
e3e8378f8e Translated using Weblate (Bulgarian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2025-01-17 19:03:59 +01:00
大王叫我来巡山
61d235b497 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (144 of 144 strings)

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

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2025-01-17 19:03:59 +01:00
ikanakova
3d8806e38c Translated using Weblate (Czech)
Currently translated at 100.0% (144 of 144 strings)

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

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-01-17 19:03:59 +01:00
solokot
26b7cece35 Translated using Weblate (Russian)
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-01-17 19:03:59 +01:00
B o d o
1d3da4d1d1 Translated using Weblate (German)
Currently translated at 100.0% (144 of 144 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-01-17 19:03:59 +01:00
Максим Горпиніч
bc3aeed090 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2025-01-17 19:03:59 +01:00
solokot
6606eeb9a7 Translated using Weblate (Russian)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2025-01-17 19:03:59 +01:00
Vasilis K
2401a3f8bf Translated using Weblate (Greek)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2025-01-17 19:03:59 +01:00
B o d o
b3685c0c7e Translated using Weblate (German)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2025-01-17 19:03:59 +01:00
ikanakova
868315948e Translated using Weblate (Czech)
Currently translated at 100.0% (333 of 333 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2025-01-17 19:03:59 +01:00
Sylvia van Os
19a68719fe Merge pull request #2305 from CatimaLoyalty/create-pull-request/patch-1737136973
Update Fastlane changelogs
2025-01-17 19:03:12 +01:00
TheLastProject
92570ec75c Update Fastlane changelogs 2025-01-17 18:02:53 +00:00
Sylvia van Os
573817f81d Update CHANGELOG 2025-01-17 19:02:39 +01:00
Sylvia van Os
21da1fed85 Merge pull request #2304 from CatimaLoyalty/fix/15_no_e2e
Revert to targeting Android 14
2025-01-17 19:02:05 +01:00
Sylvia van Os
c23527eb82 Revert to targeting Android 14
This reverts commit ff08dbe5d5.

I tried keeping the target at Android 15 and opting out of edge-to-edge
enforcement, but this is not a true compatibility mode and broke the
multi-selection UI in the main activity.
2025-01-17 18:38:57 +01:00
Sylvia van Os
926b9e0822 Merge pull request #2302 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-17 17:34:14 +01:00
Sebastian
d32a0b698d Translated using Weblate (Danish)
Currently translated at 56.0% (186 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/da/
2025-01-17 00:11:07 +00:00
Sylvia van Os
47bf18f219 Merge pull request #2298 from CatimaLoyalty/create-pull-request/patch-1736974941
Update Fastlane changelogs
2025-01-15 22:02:57 +01:00
TheLastProject
91096c5839 Update Fastlane changelogs 2025-01-15 21:02:20 +00:00
Sylvia van Os
477c16360e Update CHANGELOG 2025-01-15 22:02:06 +01:00
Christos Tsingiropoylos
9a1d7d2e44 Sort by valid from date (#2297) 2025-01-15 22:01:25 +01:00
Sylvia van Os
be54c50786 Release Catima 2.34.3 2025-01-15 17:50:02 +01:00
Sylvia van Os
2624924f53 Merge pull request #2295 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-15 17:47:42 +01:00
Priit Jõerüüt
724552eaa3 Translated using Weblate (Estonian)
Currently translated at 7.6% (11 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/et/
2025-01-15 08:51:45 +01:00
Edgars Andersons
bef0d70d09 Translated using Weblate (Latvian)
Currently translated at 6.2% (9 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2025-01-15 08:51:45 +01:00
大王叫我来巡山
d7201f62ab Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-01-15 08:51:45 +01:00
Максим Горпиніч
1f229980b7 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-01-15 08:51:44 +01:00
solokot
8f08b1989b Translated using Weblate (Russian)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-01-15 08:51:44 +01:00
Kachelkaiser
e3c83c0cb0 Translated using Weblate (German)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-01-15 08:51:44 +01:00
Sylvia van Os
431e380f5e Merge pull request #2294 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-14 17:15:43 +01:00
josé m
5c7b102e08 Translated using Weblate (Galician)
Currently translated at 10.4% (15 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/gl/
2025-01-14 07:11:44 +01:00
B o d o
6dc1a1b196 Translated using Weblate (German)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-01-14 07:11:44 +01:00
Sylvia van Os
6c01d2ffa9 Merge pull request #2291 from CatimaLoyalty/dependabot/github_actions/actions/upload-artifact-4.6.0
Bump actions/upload-artifact from 4.5.0 to 4.6.0
2025-01-13 18:58:47 +01:00
dependabot[bot]
3156fd6daf Bump actions/upload-artifact from 4.5.0 to 4.6.0
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.5.0 to 4.6.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4.5.0...v4.6.0)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-13 02:20:56 +00:00
Sylvia van Os
6fa4ab3e3b Add Contributor Covenant Code of Conduct 2025-01-12 11:54:15 +01:00
Sylvia van Os
9fa67b59c7 Merge pull request #2290 from CatimaLoyalty/create-pull-request/patch-1736655501
Update contributors
2025-01-12 10:34:20 +01:00
TheLastProject
0935a17fec Update contributors 2025-01-12 04:18:21 +00:00
Sylvia van Os
5fdc575485 Merge pull request #2289 from CatimaLoyalty/hack/espass_as_pkpass
Add unofficial support for espass
2025-01-11 12:50:06 +01:00
Sylvia van Os
d6bbd16945 Add unofficial support for espass
While espass files aren't pkpass files, they are so similar we can
generally parse them fine with the pkpass parser. While this feature
shouldn't be advertised as it is kinda hacky, it does make it easier for
PassAndroid users to share cards with Catima users.
2025-01-11 12:38:03 +01:00
Sylvia van Os
1110f7ee99 Merge pull request #2288 from CatimaLoyalty/create-pull-request/patch-1736595116
Update Fastlane changelogs
2025-01-11 12:32:10 +01:00
TheLastProject
d64860a34e Update Fastlane changelogs 2025-01-11 11:31:56 +00:00
Sylvia van Os
9fb0da6954 Update CHANGELOG 2025-01-11 12:31:43 +01:00
Sylvia van Os
12b0f8806b Merge pull request #2286 from CatimaLoyalty/fix/add_secondary_pkpass_mimetype
Also parse application/vnd-com.apple.pkpass as pkpass files
2025-01-11 12:30:52 +01:00
Sylvia van Os
5c5a1df39d Also parse application/vnd-com.apple.pkpass as pkpass files 2025-01-11 12:19:48 +01:00
Sylvia van Os
5b0ac65fbe Merge pull request #2217 from CatimaLoyalty/dependabot/gradle/androidx.core-core-ktx-1.15.0
Bump androidx.core:core-ktx from 1.13.1 to 1.15.0
2025-01-11 11:40:24 +01:00
dependabot[bot]
e9b542ee6e Bump androidx.core:core-ktx from 1.13.1 to 1.15.0
Bumps androidx.core:core-ktx from 1.13.1 to 1.15.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-11 10:07:38 +00:00
Sylvia van Os
ae6bf5e8f6 Merge pull request #2285 from CatimaLoyalty/fix/bumpCompileSdk
Bump compile SDK
2025-01-11 11:06:40 +01:00
Sylvia van Os
4dc564ffcf Bump AGP 2025-01-11 10:55:56 +01:00
Sylvia van Os
49a9ef2f80 Bump compile SDK 2025-01-11 10:44:23 +01:00
Sylvia van Os
1907f482eb Merge pull request #2277 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-10 20:02:52 +01:00
Sylvia van Os
08aad7ce20 Merge pull request #2275 from CatimaLoyalty/dependabot/gradle/com.android.application-8.8.0
Bump com.android.application from 8.7.3 to 8.8.0
2025-01-10 19:28:48 +01:00
josé m
f555a160d5 Translated using Weblate (Galician)
Currently translated at 9.7% (14 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/gl/
2025-01-10 07:31:36 +01:00
Максим Горпиніч
2d9b7f358e Translated using Weblate (Ukrainian)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-01-10 07:31:36 +01:00
solokot
db396b5f21 Translated using Weblate (Russian)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-01-10 07:31:34 +01:00
B o d o
018d36c3fd Translated using Weblate (German)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-01-10 07:31:31 +01:00
dependabot[bot]
e6621244b8 Bump com.android.application from 8.7.3 to 8.8.0
Bumps com.android.application from 8.7.3 to 8.8.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-10 02:58:19 +00:00
Sylvia van Os
29aef64d97 Merge pull request #2273 from CatimaLoyalty/fix/weblate_conflict_20250109
Fix/weblate conflict 20250109
2025-01-09 18:21:14 +01:00
Edgars Andersons
cbe243feb3 Translated using Weblate (Latvian)
Currently translated at 6.2% (9 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2025-01-09 17:29:39 +01:00
Joel A
ff02c59f85 Translated using Weblate (Swedish)
Currently translated at 94.8% (315 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2025-01-09 17:29:39 +01:00
大王叫我来巡山
3895bc1f73 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-01-09 17:29:39 +01:00
ikanakova
cd0cce532a Translated using Weblate (Czech)
Currently translated at 100.0% (143 of 143 strings)

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

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-01-09 17:29:39 +01:00
solokot
d2be344700 Translated using Weblate (Russian)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-01-09 17:29:39 +01:00
B o d o
9bd2898678 Translated using Weblate (German)
Currently translated at 100.0% (143 of 143 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-01-09 17:29:39 +01:00
Sylvia van Os
07f2348a6d Merge pull request #2270 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-08 17:29:55 +01:00
Sylvia van Os
ddd1c1a516 Merge pull request #2269 from CatimaLoyalty/create-pull-request/patch-1736289127
Update Fastlane changelogs
2025-01-07 23:32:20 +01:00
TheLastProject
8de76e3c52 Update Fastlane changelogs 2025-01-07 22:32:07 +00:00
Sylvia van Os
6ea2645e9d Update CHANGELOG 2025-01-07 23:31:40 +01:00
Sylvia van Os
ed166b1b33 Merge pull request #2268 from CatimaLoyalty/fix/incorrectSoftInputModes
Ensure save button stays pressable while keyboard is visible in edit screen
2025-01-07 23:29:59 +01:00
Sylvia van Os
2dd53a5300 Ensure save button stays pressable while keyboard is visible in edit screen
Also cleans up some other unnecessary windowSoftInputMode configurations
left over from years ago
2025-01-07 23:12:11 +01:00
ikanakova
97f9120acf Translated using Weblate (Czech)
Currently translated at 100.0% (142 of 142 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2025-01-07 19:54:10 +01:00
Sylvia van Os
dd29be75f2 Merge pull request #2266 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-01-07 19:11:39 +01:00
Sylvia van Os
fa87df2ed8 Merge pull request #2267 from CatimaLoyalty/create-pull-request/patch-1736269587
Update Fastlane changelogs
2025-01-07 18:06:56 +01:00
TheLastProject
1fb94de809 Update Fastlane changelogs 2025-01-07 17:06:26 +00:00
Sylvia van Os
0e18e84c8f Update CHANGELOG 2025-01-07 18:06:11 +01:00
Sylvia van Os
0ba2261033 Merge pull request #2263 from CatimaLoyalty/fix/sdk35
Android 15 (SDK 35) support
2025-01-07 18:05:35 +01:00
ikanakova
703ebf9418 Translated using Weblate (Czech)
Currently translated at 100.0% (142 of 142 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2025-01-07 18:03:24 +01:00
Sylvia van Os
ff08dbe5d5 Android 15 (SDK 35) support 2025-01-04 15:20:07 +01:00
Sylvia van Os
3003a10550 Merge pull request #2261 from CatimaLoyalty/dependabot/github_actions/peter-evans/create-pull-request-7.0.6
Bump peter-evans/create-pull-request from 7.0.5 to 7.0.6
2024-12-30 11:47:11 +01:00
dependabot[bot]
f95be6cc71 Bump peter-evans/create-pull-request from 7.0.5 to 7.0.6
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7.0.5 to 7.0.6.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v7.0.5...v7.0.6)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-30 02:49:57 +00:00
Sylvia van Os
23bc40e630 Merge pull request #2260 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-29 12:26:53 +01:00
Jiri Grönroos
45c47674fb Translated using Weblate (Finnish)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2024-12-29 11:01:14 +00:00
David
cf1d1a8122 Translated using Weblate (French)
Currently translated at 100.0% (142 of 142 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2024-12-29 11:01:13 +00:00
Sylvia van Os
45d2629863 Merge pull request #2259 from CatimaLoyalty/create-pull-request/patch-1735445907
Update contributors
2024-12-29 09:19:29 +01:00
TheLastProject
f6b0736bbf Update contributors 2024-12-29 04:18:27 +00:00
Sylvia van Os
83f9a2bcc9 Release Catima 2.34.2 2024-12-26 19:59:09 +01:00
Sylvia van Os
1b817222f0 Merge pull request #2256 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-26 19:57:45 +01:00
Edgars Andersons
50db796a47 Translated using Weblate (Latvian)
Currently translated at 5.6% (8 of 142 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2024-12-26 19:48:28 +01:00
Doctorredits_here
f2f7fe3151 Translated using Weblate (Indonesian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/id/
2024-12-26 19:48:28 +01:00
大王叫我来巡山
90293b90fb Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (142 of 142 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-12-26 19:48:27 +01:00
Максим Горпиніч
f1751eaebf Translated using Weblate (Ukrainian)
Currently translated at 100.0% (142 of 142 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-12-26 19:48:25 +01:00
solokot
19a3aa0b86 Translated using Weblate (Russian)
Currently translated at 100.0% (142 of 142 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-12-26 19:48:22 +01:00
B o d o
a3b901e357 Translated using Weblate (German)
Currently translated at 100.0% (142 of 142 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-12-26 19:48:19 +01:00
solokot
fbe12cfadc Translated using Weblate (Russian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2024-12-26 19:48:17 +01:00
Sylvia van Os
3ffbf11902 Merge pull request #2255 from CatimaLoyalty/create-pull-request/patch-1735164841
Update Fastlane changelogs
2024-12-25 23:14:22 +01:00
TheLastProject
5c3b32a6ee Update Fastlane changelogs 2024-12-25 22:14:00 +00:00
Sylvia van Os
36267b8255 Update CHANGELOG 2024-12-25 23:13:47 +01:00
Sylvia van Os
668c9b0d76 Merge pull request #2253 from CatimaLoyalty/fix/2249
Improve star and archive display
2024-12-25 23:13:08 +01:00
Sylvia van Os
eebbe6dec8 Improve star and archive display
By improving the icons to all have a small border, they will be visible
on every background and we can severely simplify the code
2024-12-25 21:06:15 +01:00
Sylvia van Os
a84ae51a4f Merge pull request #2251 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-24 15:46:49 +01:00
Peter Dave Hello
bdbb977233 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2024-12-24 15:00:28 +01:00
Sylvia van Os
ac27cc6a1e Merge pull request #2238 from CatimaLoyalty/feature/flavours
Start using flavours
2024-12-24 14:47:29 +01:00
Sylvia van Os
91551bf4e8 Start using flavours
Currently, this just allows us to remove the donation button on Google
Play without using the deprecated installer APIs.

In the future, this should allow us to also release multiple versions of
Catima (for example: WearOS is a commonly requested feature, but this
needs non-free dependencies, which may not be okay to all users).
2024-12-24 14:33:35 +01:00
Sylvia van Os
e8c11debfd Merge pull request #2247 from CatimaLoyalty/dependabot/gradle/com.android.tools-desugar_jdk_libs-2.1.4
Bump com.android.tools:desugar_jdk_libs from 2.1.3 to 2.1.4
2024-12-23 11:46:40 +01:00
Sylvia van Os
e29a1c659f Merge pull request #2246 from CatimaLoyalty/dependabot/github_actions/actions/upload-artifact-4.5.0
Bump actions/upload-artifact from 4.4.3 to 4.5.0
2024-12-23 11:45:31 +01:00
dependabot[bot]
d66bf0e3fd Bump com.android.tools:desugar_jdk_libs from 2.1.3 to 2.1.4
Bumps [com.android.tools:desugar_jdk_libs](https://github.com/google/desugar_jdk_libs) from 2.1.3 to 2.1.4.
- [Changelog](https://github.com/google/desugar_jdk_libs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/desugar_jdk_libs/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 02:16:11 +00:00
dependabot[bot]
172b71dd00 Bump actions/upload-artifact from 4.4.3 to 4.5.0
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.4.3 to 4.5.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4.4.3...v4.5.0)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 02:11:36 +00:00
Sylvia van Os
10ce432c97 Merge pull request #2244 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-22 12:55:42 +01:00
Sylvia van Os
3299a8dca3 Merge pull request #2245 from CatimaLoyalty/create-pull-request/patch-1734841042
Update contributors
2024-12-22 11:44:56 +01:00
TheLastProject
5dca8bc5d2 Update contributors 2024-12-22 04:17:21 +00:00
grgergo
1b8f8704f5 Translated using Weblate (Hungarian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hu/
2024-12-22 02:38:39 +01:00
Deleted User
64e801311b Translated using Weblate (German)
Currently translated at 100.0% (141 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-12-22 02:38:39 +01:00
Sylvia van Os
da8202b4e1 Merge pull request #2242 from CatimaLoyalty/create-pull-request/patch-1734762145
Update Gradle to 8.12
2024-12-21 21:26:13 +01:00
Sylvia van Os
72d70f1265 Merge pull request #2243 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-21 20:42:01 +01:00
Edgars Andersons
660597e89a Translated using Weblate (Latvian)
Currently translated at 4.9% (7 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2024-12-21 09:00:52 +01:00
Edgars Andersons
4a48ac8797 Translated using Weblate (Latvian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2024-12-21 09:00:51 +01:00
TheLastProject
4c61c19e4f Update Gradle to 8.12 2024-12-21 06:22:24 +00:00
Sylvia van Os
bb3b13364c Merge pull request #2237 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-18 19:18:07 +01:00
Sylvia van Os
b34bb65f79 Translated using Weblate (Tamil)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2024-12-18 19:00:02 +01:00
தமிழ்நேரம்
a7cfb4b68f Translated using Weblate (Tamil)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2024-12-18 16:00:34 +01:00
Trond Kjetil Bremnes
8d58a6192d Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nb_NO/
2024-12-18 16:00:33 +01:00
Sylvia van Os
1da34ceda4 Merge pull request #2236 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-17 18:59:58 +01:00
தமிழ்நேரம்
dc31b7e839 Translated using Weblate (Tamil)
Currently translated at 93.9% (312 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2024-12-17 00:00:38 +01:00
Priit Jõerüüt
5c6ee7b787 Translated using Weblate (Estonian)
Currently translated at 4.2% (6 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/et/
2024-12-17 00:00:36 +01:00
Nguyen Duc Tri Thuc
5620a62cad Translated using Weblate (Vietnamese)
Currently translated at 11.3% (16 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/vi/
2024-12-17 00:00:34 +01:00
Sylvia van Os
429abb4914 Merge pull request #2234 from CatimaLoyalty/create-pull-request/patch-1734236299
Update contributors
2024-12-15 09:54:00 +01:00
Sylvia van Os
f90d33daf7 Merge pull request #2235 from CatimaLoyalty/weblate
Weblate
2024-12-15 09:52:55 +01:00
தமிழ்நேரம்
baa67cf9f4 Translated using Weblate (Tamil)
Currently translated at 99.6% (331 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2024-12-15 09:44:55 +01:00
Isard Sabut
4054269db3 Translated using Weblate (Catalan)
Currently translated at 18.9% (63 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ca/
2024-12-15 09:44:35 +01:00
Augustin LAVILLE
559b8d00dd Translated using Weblate (French)
Currently translated at 99.2% (140 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2024-12-15 09:44:35 +01:00
Максим Горпиніч
9b9c19586f Translated using Weblate (Ukrainian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2024-12-15 09:44:35 +01:00
Augustin LAVILLE
a3407734a7 Translated using Weblate (French)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2024-12-15 09:44:35 +01:00
TheLastProject
99c579ee51 Update contributors 2024-12-15 04:18:18 +00:00
Sylvia van Os
81bc7db43e Merge pull request #2232 from CatimaLoyalty/create-pull-request/patch-1734181312
Update feature graphic
2024-12-14 14:08:58 +01:00
Sylvia van Os
117e08d957 Merge pull request #2231 from CatimaLoyalty/feature/sans_feature_graphics
Use Sans fonts for app name
2024-12-14 14:08:43 +01:00
TheLastProject
89356dac50 Update feature graphic 2024-12-14 13:01:51 +00:00
Sylvia van Os
c7bf1f5f30 Use Sans fonts for app name
Sans could be "friendlier". This also fixes the new zh-TW picture not
showing up
2024-12-14 13:59:29 +01:00
Sylvia van Os
1a7a2d31f4 Merge pull request #2229 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-14 12:47:04 +01:00
Sylvia van Os
8fd4335a98 Delete invalid translations
Incorrectly formatted XML will crash the app.
2024-12-14 12:07:59 +01:00
தமிழ்நேரம்
6b4b0e846b Translated using Weblate (Tamil)
Currently translated at 99.6% (331 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2024-12-13 23:02:26 +01:00
josé m
451fa87990 Translated using Weblate (Galician)
Currently translated at 4.2% (6 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/gl/
2024-12-13 23:02:26 +01:00
josé m
2c50c2b48c Translated using Weblate (Galician)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/gl/
2024-12-13 23:02:26 +01:00
Robin Syl
8b9c26ad5a Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 85.1% (120 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hant/
2024-12-13 23:02:26 +01:00
Robin Syl
ef7db55d8c Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 99.0% (329 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2024-12-13 23:02:26 +01:00
大王叫我来巡山
8f2d39d0ec Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (141 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-12-13 23:02:26 +01:00
Maxine Clementine Caulfield
3597e3098f Translated using Weblate (Czech)
Currently translated at 100.0% (141 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2024-12-13 23:02:26 +01:00
solokot
0702fc579c Translated using Weblate (Russian)
Currently translated at 100.0% (141 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-12-13 23:02:26 +01:00
B o d o
017cf19d27 Translated using Weblate (German)
Currently translated at 100.0% (141 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-12-13 23:02:26 +01:00
Dawid
83a3a5b9e2 Translated using Weblate (Polish)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2024-12-13 23:02:26 +01:00
Maxine Clementine Caulfield
54828c3c93 Translated using Weblate (Czech)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2024-12-13 23:02:25 +01:00
Sylvia van Os
31e517d7ee Merge pull request #2227 from CatimaLoyalty/create-pull-request/patch-1734118019
Update locales
2024-12-13 21:43:23 +01:00
TheLastProject
00957ac576 Update locales 2024-12-13 19:26:59 +00:00
Sylvia van Os
852c38d88d Merge pull request #2226 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-13 20:26:44 +01:00
Максим Горпиніч
67314b09a9 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (141 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-12-12 21:39:09 +01:00
B o d o
944e2ca0c0 Translated using Weblate (German)
Currently translated at 100.0% (141 of 141 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-12-12 21:39:09 +01:00
Dawid
68564864d5 Translated using Weblate (Polish)
Currently translated at 99.6% (331 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2024-12-12 21:39:09 +01:00
Sylvia van Os
19bccc0c82 Release Catima 2.34.1 2024-12-12 17:27:24 +01:00
Sylvia van Os
04905edab4 Merge pull request #2224 from CatimaLoyalty/create-pull-request/patch-1734020723
Update Fastlane changelogs
2024-12-12 17:25:36 +01:00
Sylvia van Os
179a9adbe5 Merge pull request #2222 from CatimaLoyalty/create-pull-request/patch-1734019804
Update locales
2024-12-12 17:25:23 +01:00
TheLastProject
3925a79158 Update Fastlane changelogs 2024-12-12 16:25:22 +00:00
Sylvia van Os
71de6f8c99 Update CHANGELOG 2024-12-12 17:25:07 +01:00
Sylvia van Os
9d81ca5c9b Merge pull request #2223 from CatimaLoyalty/fix/crashOnInvalidPkpassFile
Fix crash when trying to load invalid pkpass file
2024-12-12 17:24:08 +01:00
Sylvia van Os
75c393af92 Fix crash when trying to load invalid pkpass file 2024-12-12 17:13:49 +01:00
TheLastProject
3e16515b6c Update locales 2024-12-12 16:10:04 +00:00
Sylvia van Os
3e9857f14f Merge pull request #2221 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-12 17:09:38 +01:00
தமிழ்நேரம்
20ee7c9324 Added translation using Weblate (Tamil) 2024-12-12 16:29:00 +01:00
Hamza Mohamed
fa6ee155ac Translated using Weblate (Arabic)
Currently translated at 99.6% (331 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2024-12-12 01:01:11 +01:00
goknarbahceli
c186e53eab Translated using Weblate (Turkish)
Currently translated at 70.7% (99 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2024-12-12 01:01:09 +01:00
goknarbahceli
75abd6f80c Translated using Weblate (Turkish)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2024-12-12 01:01:08 +01:00
Sylvia van Os
0a98e6154c Update Fastlane 2024-12-11 17:11:13 +01:00
Sylvia van Os
c2b31fad43 Release Catima 2.34.0 2024-12-10 18:53:36 +01:00
Sylvia van Os
2043dffc10 Merge pull request #2218 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-10 18:52:41 +01:00
Sylvia van Os
244aabcc1a Translated using Weblate (Hindi)
Currently translated at 94.5% (314 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hi/
2024-12-10 18:44:54 +01:00
Miguel Mota
a1faed8717 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2024-12-10 18:36:55 +01:00
Arun Arya
fcf9176523 Translated using Weblate (Hindi)
Currently translated at 94.5% (314 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hi/
2024-12-10 18:36:55 +01:00
Sylvia van Os
30db9e3cd6 Translated using Weblate (Dutch)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2024-12-10 18:36:55 +01:00
Kamborio
fb3df0ff4d Translated using Weblate (Spanish)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2024-12-10 18:36:54 +01:00
Priit Jõerüüt
9b4b48e6e3 Translated using Weblate (Estonian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2024-12-09 22:01:11 +01:00
Edgars Andersons
9a9cdaff09 Translated using Weblate (Latvian)
Currently translated at 3.5% (5 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2024-12-09 22:01:10 +01:00
Edgars Andersons
3a82efcf6f Translated using Weblate (Latvian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2024-12-09 22:01:10 +01:00
이정희
7c2d08b06f Translated using Weblate (Korean)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ko/
2024-12-09 22:01:09 +01:00
이정희
aebe84c2cd Translated using Weblate (Korean)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ko/
2024-12-09 22:01:08 +01:00
solokot
3768f0ebcf Translated using Weblate (Russian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2024-12-09 22:01:07 +01:00
Sylvia van Os
8f7d527c21 Translated using Weblate (Dutch)
Currently translated at 99.3% (330 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2024-12-09 22:01:07 +01:00
Giovanni Donisi
54ec5ee0d0 Translated using Weblate (Italian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2024-12-09 22:01:06 +01:00
Sylvia van Os
dccb244c8f Merge pull request #2216 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-08 21:55:56 +01:00
Asmodeus
a37084af1a Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2024-12-08 21:01:46 +01:00
109247019824
af0a7ae89b Translated using Weblate (Bulgarian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2024-12-08 21:01:45 +01:00
大王叫我来巡山
315cbab4be Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-12-08 21:01:44 +01:00
大王叫我来巡山
bc3830d685 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2024-12-08 21:01:43 +01:00
Максим Горпиніч
4893d28bb0 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-12-08 21:01:42 +01:00
solokot
2a7670e19d Translated using Weblate (Russian)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-12-08 21:01:41 +01:00
Vasilis K
86e6a1bb2d Translated using Weblate (Greek)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2024-12-08 21:01:40 +01:00
Sylvia van Os
d1d3f95dfe Merge pull request #2215 from CatimaLoyalty/create-pull-request/patch-1733631542
Update contributors
2024-12-08 14:51:30 +01:00
TheLastProject
ebfc90e998 Update contributors 2024-12-08 04:19:02 +00:00
Sylvia van Os
704db9eb46 Merge pull request #2214 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-07 20:23:11 +01:00
B o d o
3557870d34 Translated using Weblate (German)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-12-07 18:41:43 +01:00
Sylvia van Os
59354c7251 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2024-12-07 18:41:41 +01:00
B o d o
cae25599f8 Translated using Weblate (German)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2024-12-07 18:41:41 +01:00
109247019824
e89eb46f79 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2024-12-07 18:25:36 +01:00
Максим Горпиніч
039b433d0a Translated using Weblate (Ukrainian)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2024-12-07 18:25:29 +01:00
Vasilis K
0319d16f2b Translated using Weblate (Greek)
Currently translated at 100.0% (332 of 332 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2024-12-07 18:25:29 +01:00
Sylvia van Os
f11c45d169 Merge pull request #2213 from CatimaLoyalty/create-pull-request/patch-1733591941
Update Fastlane changelogs
2024-12-07 18:19:24 +01:00
TheLastProject
572c0fea4a Update Fastlane changelogs 2024-12-07 17:19:01 +00:00
Sylvia van Os
5e9d364e5e Update CHANGELOG 2024-12-07 18:18:47 +01:00
Sylvia van Os
57d62fdb29 Merge pull request #2212 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-07 17:44:35 +01:00
summoner001
0c7332396b Translated using Weblate (Hungarian)
Currently translated at 97.8% (322 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hu/
2024-12-07 17:36:35 +01:00
Renko
7bdca36f53 Translated using Weblate (Romanian)
Currently translated at 99.0% (326 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2024-12-07 17:36:35 +01:00
Sylvia van Os
f8a8a84f1e Merge pull request #2038 from CatimaLoyalty/feature/pkpass2024
Add Pkpass parser
2024-12-07 17:33:50 +01:00
Sylvia van Os
8009baca26 Remove unnecessary image load from storage calls
The LoyaltyCard object itself loads the images itself
2024-12-07 15:23:07 +01:00
Sylvia van Os
e0786594bc Load images on request
This prevents loading the front and back images when scrolling through
the loyalty card list and should allow scaling to more images/files more
easily
2024-12-07 15:23:07 +01:00
Sylvia van Os
7fe67960bf Move TaskHandler to ViewModel
This should make it possible to properly cancel the running barcode
generation threads on rotation and prevent CPU rising on many rotations.
2024-12-07 15:23:07 +01:00
Sylvia van Os
83fca93649 Use ViewModel to prevent hammering storage
When you turn a LoyaltyCard into a bundle, it writes the files to
storage as it can't otherwise fit in the limited storage size. This
means that, on rotation, you write all images to storage and load them
again. Using a ViewModel prevents that storage hit due to holding it in
memory (as a ViewModel has a longer lifecycle).
2024-12-07 15:23:07 +01:00
Sylvia van Os
96a9850d9c Delete old cache files on startup 2024-12-07 15:23:07 +01:00
Sylvia van Os
1cb9ddecac Support for returning images from PkpassParser 2024-12-07 15:23:07 +01:00
Sylvia van Os
f7697ce8bf Support opening supported barcode files directly 2024-12-07 15:23:07 +01:00
Sylvia van Os
9358348795 Add option to share pkpass file to Catima 2024-12-07 15:23:07 +01:00
Sylvia van Os
711ca1e761 Add option to load pkpass from ScanActivity 2024-12-07 15:23:07 +01:00
Sylvia van Os
8eeff0058b Refactor ScanActivity result code (use ParseResult) 2024-12-07 15:23:07 +01:00
Sylvia van Os
ea456c6d80 Add Pkpass parser 2024-12-07 15:23:05 +01:00
Sylvia van Os
3bdc06b5b4 Merge pull request #2211 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-07 11:53:00 +01:00
inesre
2c9fbfcae8 Translated using Weblate (Spanish)
Currently translated at 47.8% (67 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/es/
2024-12-06 23:01:06 +00:00
solokot
e4a28f9fc9 Translated using Weblate (Russian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2024-12-06 23:01:05 +00:00
Sylvia van Os
630bf14387 Merge pull request #2210 from CatimaLoyalty/fix/transparentThumbnails3
Fix background colour for shortcuts
2024-12-05 19:01:09 +01:00
Sylvia van Os
4dd85f845e Fix background colour for shortcuts 2024-12-05 18:52:27 +01:00
Sylvia van Os
8382d1975b Merge pull request #2209 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-04 17:50:58 +01:00
大王叫我来巡山
4d4cac6a9e Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-12-04 17:15:30 +01:00
solokot
5bd276a32d Translated using Weblate (Russian)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-12-04 17:15:29 +01:00
Sylvia van Os
e31ad60d32 Merge pull request #2207 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-12-03 21:02:12 +01:00
Nguyen Duc Tri Thuc
f511b29fcb Translated using Weblate (Vietnamese)
Currently translated at 10.7% (15 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/vi/
2024-12-03 19:09:57 +00:00
Nguyen Duc Tri Thuc
158abdb96c Translated using Weblate (Vietnamese)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/vi/
2024-12-03 19:09:57 +00:00
Sylvia van Os
959f6770dd Translated using Weblate (Latvian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2024-12-03 19:09:56 +00:00
Максим Горпиніч
c429fef56d Translated using Weblate (Ukrainian)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-12-03 19:09:55 +00:00
Kachelkaiser
4ce8d293f4 Translated using Weblate (German)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-12-03 19:09:55 +00:00
Edgars Andersons
ef9b28671b Translated using Weblate (Latvian)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/lv/
2024-12-03 19:09:54 +00:00
Edgars Andersons
e3afaa1d49 Translated using Weblate (Latvian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2024-12-03 19:09:54 +00:00
Lassi Määttä
094e6951d0 Translated using Weblate (Finnish)
Currently translated at 3.5% (5 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fi/
2024-12-03 19:09:53 +00:00
Sylvia van Os
73f33e238c Merge pull request #2206 from CatimaLoyalty/dependabot/gradle/com.android.application-8.7.3
Bump com.android.application from 8.7.2 to 8.7.3
2024-12-03 19:59:38 +01:00
Sylvia van Os
d1b8051771 Merge pull request #2205 from CatimaLoyalty/fix/transparentThumbnails2
Make thumbnails in edit view consistent with card view
2024-12-03 16:38:51 +00:00
dependabot[bot]
17fd6db65f Bump com.android.application from 8.7.2 to 8.7.3
Bumps com.android.application from 8.7.2 to 8.7.3.

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-03 02:50:05 +00:00
Sylvia van Os
e6345bc2fe Make thumbnails in edit view consistent with card view
Commit 88c1dd1bc6 changed the behaviour of
the background colour of the thumbnails, but the edit view still used
the old behaviour. This creates more consistency.
2024-12-03 00:33:21 +01:00
Sylvia van Os
208b1a2eba Merge pull request #2204 from CatimaLoyalty/dependabot/gradle/com.github.yalantis-ucrop-2.2.10
Bump com.github.yalantis:ucrop from 2.2.9 to 2.2.10
2024-12-02 21:18:36 +00:00
dependabot[bot]
b796425551 Bump com.github.yalantis:ucrop from 2.2.9 to 2.2.10
Bumps [com.github.yalantis:ucrop](https://github.com/Yalantis/uCrop) from 2.2.9 to 2.2.10.
- [Release notes](https://github.com/Yalantis/uCrop/releases)
- [Commits](https://github.com/Yalantis/uCrop/compare/2.2.9...2.2.10)

---
updated-dependencies:
- dependency-name: com.github.yalantis:ucrop
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-02 02:05:16 +00:00
Sylvia van Os
425a9f9a57 Merge pull request #2203 from CatimaLoyalty/create-pull-request/patch-1733026828
Update contributors
2024-12-01 09:51:18 +00:00
TheLastProject
3701c1f2cb Update contributors 2024-12-01 04:20:28 +00:00
Sylvia van Os
7a5233ed1a Merge pull request #2202 from CatimaLoyalty/create-pull-request/patch-1732976710
Update Fastlane changelogs
2024-11-30 15:23:09 +00:00
TheLastProject
5df349c118 Update Fastlane changelogs 2024-11-30 14:25:09 +00:00
Sylvia van Os
f97da3afcb Update CHANGELOG 2024-11-30 15:24:55 +01:00
Sylvia van Os
d997759ccf Merge pull request #2201 from CatimaLoyalty/fix/transparentThumbnails
Use black/white background colour instead of dominant colour for images
2024-11-30 10:34:20 +00:00
Sylvia van Os
5e710ba424 Merge pull request #2200 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-29 16:44:03 +00:00
Sylvia van Os
88c1dd1bc6 Use black/white background colour instead of dominant colour for images
This severely reduces the risk of a transparent PNG being put on a
background which is the same colour as the logo
2024-11-29 17:37:03 +01:00
Ricky Tigg
b63fbfa4c6 Translated using Weblate (Finnish)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/fi/
2024-11-29 10:00:45 +01:00
mingyee2
565b441444 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2024-11-29 10:00:44 +01:00
Greg
6900cf3475 Translated using Weblate (Polish)
Currently translated at 99.6% (328 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2024-11-29 10:00:43 +01:00
Sylvia van Os
2c0c63aad4 Merge pull request #2196 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-27 16:44:21 +00:00
Doctorredits_here
b48e6f2437 Translated using Weblate (Indonesian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/id/
2024-11-27 11:00:32 +01:00
Trond Kjetil Bremnes
37b4096713 Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nb_NO/
2024-11-27 11:00:31 +01:00
Sylvia van Os
7a0894e4d2 Merge pull request #2194 from CatimaLoyalty/create-pull-request/patch-1732641808
Update feature graphic
2024-11-26 17:30:21 +00:00
TheLastProject
e6f8c29078 Update feature graphic 2024-11-26 17:23:27 +00:00
Sylvia van Os
b1672408c3 Merge pull request #2193 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-26 17:22:14 +00:00
josé m
b79f2ae51d Translated using Weblate (Galician)
Currently translated at 2.1% (3 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/gl/
2024-11-26 07:00:57 +01:00
Augustin LAVILLE
2a758d2e57 Translated using Weblate (French)
Currently translated at 98.5% (138 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2024-11-26 07:00:56 +01:00
Sylvia van Os
07def17334 Merge pull request #2189 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-24 20:11:40 +00:00
Sylvia van Os
1c3fb47c89 Merge pull request #2190 from CatimaLoyalty/feature/readd-fdroid
Re-add F-Droid
2024-11-24 20:02:41 +00:00
Sylvia van Os
d1e4deb7eb Re-add F-Droid 2024-11-24 20:36:24 +01:00
大王叫我来巡山
ad97571ab0 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-11-24 20:01:25 +01:00
Максим Горпиніч
4bbf0983c5 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-11-24 20:01:25 +01:00
solokot
13e86e5e53 Translated using Weblate (Russian)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-11-24 20:01:24 +01:00
B o d o
454070c346 Translated using Weblate (German)
Currently translated at 100.0% (140 of 140 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-11-24 20:01:24 +01:00
Sylvia van Os
10458d9975 Merge pull request #2188 from CatimaLoyalty/create-pull-request/patch-1732421879
Update contributors
2024-11-24 12:18:59 +00:00
TheLastProject
823c38c50c Update contributors 2024-11-24 04:17:58 +00:00
Sylvia van Os
a593e68ffb Merge pull request #2187 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-23 20:38:21 +00:00
Priit Jõerüüt
5ef8cf5381 Translated using Weblate (Estonian)
Currently translated at 2.8% (4 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/et/
2024-11-23 19:00:38 +01:00
Sebastian
db94d5bc5d Translated using Weblate (Danish)
Currently translated at 39.5% (130 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/da/
2024-11-23 19:00:37 +01:00
Sylvia van Os
b6fe1bc2a7 Merge pull request #2186 from CatimaLoyalty/create-pull-request/patch-1732292688
Update Fastlane changelogs
2024-11-22 16:25:12 +00:00
TheLastProject
78754ca313 Update Fastlane changelogs 2024-11-22 16:24:48 +00:00
Sylvia van Os
8e8667b721 Update CHANGELOG 2024-11-22 17:24:31 +01:00
Sylvia van Os
40731104cb Merge pull request #2185 from CatimaLoyalty/dependabot/gradle/org.robolectric-robolectric-4.14.1
Bump org.robolectric:robolectric from 4.14 to 4.14.1
2024-11-22 15:56:32 +00:00
dependabot[bot]
879872202a Bump org.robolectric:robolectric from 4.14 to 4.14.1
Bumps [org.robolectric:robolectric](https://github.com/robolectric/robolectric) from 4.14 to 4.14.1.
- [Release notes](https://github.com/robolectric/robolectric/releases)
- [Commits](https://github.com/robolectric/robolectric/compare/robolectric-4.14...robolectric-4.14.1)

---
updated-dependencies:
- dependency-name: org.robolectric:robolectric
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-22 02:20:08 +00:00
Sylvia van Os
0fcf16d9d2 Merge pull request #2182 from CatimaLoyalty/fix/transparentPdf
Fix parsing PDF with transparent background
2024-11-21 20:27:58 +00:00
Sylvia van Os
23d27ab838 Merge pull request #2184 from CatimaLoyalty/create-pull-request/patch-1732170302
Update Gradle to 8.11.1
2024-11-21 17:56:04 +00:00
TheLastProject
0b4df647d1 Update Gradle to 8.11.1 2024-11-21 06:25:02 +00:00
Sylvia van Os
a74c4f822e Release Catima 2.33.0 2024-11-19 17:48:48 +01:00
Sylvia van Os
389372e8f3 Fix parsing PDF with transparent background 2024-11-18 22:03:41 +01:00
Sylvia van Os
c228d274b5 Merge pull request #2181 from CatimaLoyalty/create-pull-request/patch-1731953537
Update locales
2024-11-18 18:35:52 +00:00
TheLastProject
d8e0e03aa5 Update locales 2024-11-18 18:12:17 +00:00
Sylvia van Os
171dd7af59 Merge pull request #2179 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-18 18:12:02 +00:00
Sylvia van Os
10bf27a246 Merge pull request #2180 from CatimaLoyalty/dependabot/gradle/org.robolectric-robolectric-4.14
Bump org.robolectric:robolectric from 4.13 to 4.14
2024-11-18 06:09:35 +00:00
dependabot[bot]
199c243eb0 Bump org.robolectric:robolectric from 4.13 to 4.14
Bumps [org.robolectric:robolectric](https://github.com/robolectric/robolectric) from 4.13 to 4.14.
- [Release notes](https://github.com/robolectric/robolectric/releases)
- [Commits](https://github.com/robolectric/robolectric/compare/robolectric-4.13...robolectric-4.14)

---
updated-dependencies:
- dependency-name: org.robolectric:robolectric
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-18 02:42:36 +00:00
josé m
11b0143b1c Translated using Weblate (Galician)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/gl/
2024-11-17 16:01:42 +01:00
josé m
f2e20eaea3 Added translation using Weblate (Galician) 2024-11-17 16:00:17 +01:00
josé m
c8725a4588 Translated using Weblate (Galician)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/gl/
2024-11-17 16:00:15 +01:00
josé m
f881965485 Added translation using Weblate (Galician) 2024-11-17 16:00:14 +01:00
ritchierope
3e16d0daf6 Translated using Weblate (Hungarian)
Currently translated at 97.8% (322 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hu/
2024-11-17 16:00:12 +01:00
Sylvia van Os
7068f57443 Merge pull request #2178 from CatimaLoyalty/create-pull-request/patch-1731817092
Update contributors
2024-11-17 11:42:06 +00:00
TheLastProject
8b611511f5 Update contributors 2024-11-17 04:18:12 +00:00
Sylvia van Os
1c9f0ee724 Merge pull request #2175 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-16 12:30:41 +00:00
Giovanni Donisi
2d816b39f6 Translated using Weblate (Italian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2024-11-15 22:01:04 +01:00
Sylvia van Os
c0b13bf040 Merge pull request #2174 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-14 17:31:23 +00:00
B o d o
e40d98f386 Translated using Weblate (German)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-11-14 18:01:34 +01:00
Sylvia van Os
8af295a72b Translated using Weblate (Dutch)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2024-11-14 18:01:33 +01:00
Sylvia van Os
ac4dde1f8b Merge pull request #2173 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-13 16:48:00 +00:00
大王叫我来巡山
2dc87fd37c Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-11-13 16:18:15 +01:00
Максим Горпиніч
aebceec1f6 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-11-13 16:18:15 +01:00
solokot
95b59a9cc3 Translated using Weblate (Russian)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-11-13 16:18:15 +01:00
B o d o
4ff72b66a8 Translated using Weblate (German)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-11-13 16:18:15 +01:00
Sylvia van Os
d1162d0272 Merge pull request #2172 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-12 17:37:25 +00:00
Sylvia van Os
794ac2bab2 Merge pull request #2171 from CatimaLoyalty/create-pull-request/patch-1731392619
Update Gradle to 8.11
2024-11-12 17:36:13 +00:00
Lassi Määttä
7b76fe86b2 Translated using Weblate (Finnish)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2024-11-12 14:00:36 +01:00
TheLastProject
4387c7ed1e Update Gradle to 8.11 2024-11-12 06:23:38 +00:00
Sylvia van Os
f819fc7db9 Merge pull request #2170 from CatimaLoyalty/create-pull-request/patch-1731347745
Update Fastlane changelogs
2024-11-11 17:57:33 +00:00
TheLastProject
fb5a882fdb Update Fastlane changelogs 2024-11-11 17:55:44 +00:00
Sylvia van Os
be8c0a6787 Update CHANGELOG 2024-11-11 18:55:31 +01:00
Sylvia van Os
5dc84fbd77 Merge pull request #2169 from CatimaLoyalty/fix/note_line_limit
Limit max line count to 5 on main view
2024-11-11 17:54:33 +00:00
Sylvia van Os
0c37827fb0 Limit max line count to 5 on main view
This prevents cards with very long notes to take up the entire screen or
more. This effect is worse with more columns.
2024-11-11 18:43:30 +01:00
Sylvia van Os
cee5d39b27 Merge pull request #2168 from CatimaLoyalty/fix/shorter_date_on_main_screen
Use MEDIUM instead of FULL date format on main screen
2024-11-11 17:21:07 +00:00
Sylvia van Os
9c5603eae6 Use MEDIUM instead of FULL date format on main screen
This improves the display of high column counts
2024-11-11 17:50:14 +01:00
Sylvia van Os
dd42c99ca7 Merge pull request #2167 from CatimaLoyalty/create-pull-request/patch-1731212204
Update contributors
2024-11-10 10:42:11 +00:00
TheLastProject
403c60ec6c Update contributors 2024-11-10 04:16:44 +00:00
Sylvia van Os
7c7e6d3b45 Merge pull request #2166 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-09 21:20:07 +00:00
大王叫我来巡山
316e51efb2 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-11-09 20:01:50 +01:00
Максим Горпиніч
9e838e266b Translated using Weblate (Ukrainian)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-11-09 20:01:49 +01:00
solokot
a56b984c53 Translated using Weblate (Russian)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-11-09 20:01:48 +01:00
B o d o
4040b270a8 Translated using Weblate (German)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-11-09 20:01:47 +01:00
Sylvia van Os
eab8614bcc Merge pull request #2165 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-08 18:36:27 +00:00
kowih83264
ef8befe0cd Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2024-11-08 19:00:56 +01:00
gallegonovato
860b79fc9b Translated using Weblate (Spanish)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2024-11-08 19:00:55 +01:00
Sylvia van Os
93341fc4ec Merge pull request #2164 from CatimaLoyalty/dependabot/gradle/com.android.tools-desugar_jdk_libs-2.1.3
Bump com.android.tools:desugar_jdk_libs from 2.1.2 to 2.1.3
2024-11-08 16:59:02 +00:00
dependabot[bot]
51f123bc41 Bump com.android.tools:desugar_jdk_libs from 2.1.2 to 2.1.3
Bumps [com.android.tools:desugar_jdk_libs](https://github.com/google/desugar_jdk_libs) from 2.1.2 to 2.1.3.
- [Changelog](https://github.com/google/desugar_jdk_libs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/desugar_jdk_libs/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-08 02:24:08 +00:00
Sylvia van Os
f0512fbeca Merge pull request #2162 from CatimaLoyalty/create-pull-request/patch-1730917344
Update Fastlane changelogs
2024-11-06 18:22:51 +00:00
TheLastProject
71f6fcd2e6 Update Fastlane changelogs 2024-11-06 18:22:24 +00:00
Sylvia van Os
d1a244efa0 Update CHANGELOG 2024-11-06 19:22:10 +01:00
Sylvia van Os
075478db17 Merge pull request #2092 from vp193dt/main
#1962: Refactoring of Search Behavior: Restoring of Previous Search Query After Coming Back from Card Interaction or Screen Rotation on Search
2024-11-06 18:21:08 +00:00
vp193dt
6f4582eec9 Refactoring of Search Behavior: Restoring of Previous Search Query After Coming Back from Card Interaction or Screen Rotation on Search 2024-11-06 19:12:01 +01:00
Sylvia van Os
91f5f9a8b4 Merge pull request #2161 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-06 17:03:05 +00:00
Marnick L'Eau
f04adc0901 Translated using Weblate (Dutch)
Currently translated at 51.7% (72 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2024-11-06 13:01:02 +01:00
Augustin LAVILLE
f184ee7e58 Translated using Weblate (French)
Currently translated at 99.2% (138 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2024-11-06 13:01:01 +01:00
min7-i
9abeec578e Translated using Weblate (German)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2024-11-06 13:01:00 +01:00
Sylvia van Os
8deab5f94f Merge pull request #2160 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-05 18:53:00 +00:00
Priit Jõerüüt
50fca74267 Translated using Weblate (Estonian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2024-11-05 12:36:58 +01:00
Davi Souza
9e7bf97cc9 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2024-11-05 12:36:58 +01:00
Hasan Cesur
96be72b4c6 Translated using Weblate (Turkish)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2024-11-05 12:36:58 +01:00
Kristoffer Grundström
5c31ac6d00 Translated using Weblate (Swedish)
Currently translated at 5.0% (7 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sv/
2024-11-05 12:36:57 +01:00
Kristoffer Grundström
1675d591dd Translated using Weblate (Swedish)
Currently translated at 95.4% (314 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2024-11-05 12:36:57 +01:00
109247019824
361495dfed Translated using Weblate (Bulgarian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2024-11-05 12:36:57 +01:00
大王叫我来巡山
2b81e861f6 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-11-05 12:36:57 +01:00
大王叫我来巡山
657a761c3a Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2024-11-05 12:36:55 +01:00
Максим Горпиніч
6d401c4234 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-11-05 12:36:55 +01:00
solokot
8a33d2e5ed Translated using Weblate (Russian)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-11-05 12:36:53 +01:00
B o d o
66e994be60 Translated using Weblate (German)
Currently translated at 100.0% (139 of 139 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-11-05 12:36:52 +01:00
Максим Горпиніч
4e50ca9340 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2024-11-05 12:36:50 +01:00
solokot
af064d1cda Translated using Weblate (Russian)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2024-11-05 12:36:50 +01:00
Marnick L'Eau
585c444f2d Translated using Weblate (Dutch)
Currently translated at 97.8% (322 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2024-11-05 12:36:49 +01:00
Augustin LAVILLE
85683a0b3f Translated using Weblate (French)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2024-11-05 12:36:49 +01:00
Vasilis K
4c7aa2b26b Translated using Weblate (Greek)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2024-11-05 12:36:49 +01:00
B o d o
af236e1099 Translated using Weblate (German)
Currently translated at 100.0% (329 of 329 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2024-11-05 12:36:49 +01:00
Sylvia van Os
79f6014e26 Merge pull request #2157 from CatimaLoyalty/create-pull-request/patch-1730607506
Update contributors
2024-11-03 08:28:03 +00:00
TheLastProject
0fa3de40ba Update contributors 2024-11-03 04:18:25 +00:00
Sylvia van Os
d77f938107 Merge pull request #2155 from CatimaLoyalty/create-pull-request/patch-1730584271
Update Fastlane changelogs
2024-11-02 21:54:41 +00:00
TheLastProject
e44aaa6618 Update Fastlane changelogs 2024-11-02 21:51:10 +00:00
Sylvia van Os
96d88bb08c Update CHANGELOG 2024-11-02 22:50:53 +01:00
Sylvia van Os
b502f89da6 Merge pull request #2147 from leaumar/feat/1952-columns
resolve #1952 custom column count
2024-11-02 21:47:48 +00:00
Sylvia van Os
d7b8cd7e03 More consistant naming and column edge case bugfix for shortcut picker 2024-11-02 13:45:25 +01:00
Sylvia van Os
61681bdc2b Set default card columns to 4 on big screens 2024-11-01 22:36:12 +01:00
Sylvia van Os
dc65030a63 Padding fixes to ensure the cards scale well without changing text size in LoyaltyCardViewActivity 2024-11-01 22:35:33 +01:00
Sylvia van Os
328c110a97 General cleanups 2024-11-01 22:32:05 +01:00
Sylvia van Os
0b7cd32209 Merge pull request #2152 from CatimaLoyalty/dependabot/gradle/com.android.application-8.7.2
Bump com.android.application from 8.7.1 to 8.7.2
2024-11-01 19:25:10 +00:00
Sylvia van Os
b1c0ab74d7 Merge pull request #2151 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-11-01 19:25:00 +00:00
Marnes
faee01cde2 implement #1952: better values between portrait and landscape 2024-11-01 18:51:26 +01:00
Marnes
6f456437f7 implement #1952: custom column count 2024-11-01 18:27:41 +01:00
Marnes
1b0fd94a8c misc. linting 2024-11-01 18:27:33 +01:00
dependabot[bot]
268d04841f Bump com.android.application from 8.7.1 to 8.7.2
Bumps com.android.application from 8.7.1 to 8.7.2.

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-01 03:00:22 +00:00
大王叫我来巡山
9408ac5d9f Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (138 of 138 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-11-01 02:02:45 +01:00
Sylvia van Os
45d2b6206e Merge pull request #2149 from CatimaLoyalty/dependabot/gradle/androidx.constraintlayout-constraintlayout-2.2.0
Bump androidx.constraintlayout:constraintlayout from 2.1.4 to 2.2.0
2024-10-31 16:49:45 +00:00
dependabot[bot]
a943fdcc5a Bump androidx.constraintlayout:constraintlayout from 2.1.4 to 2.2.0
Bumps androidx.constraintlayout:constraintlayout from 2.1.4 to 2.2.0.

---
updated-dependencies:
- dependency-name: androidx.constraintlayout:constraintlayout
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-31 02:18:56 +00:00
Sylvia van Os
06e02f0b0f Update fastlane 2024-10-30 19:42:10 +01:00
Sylvia van Os
5b29dc66a9 Merge pull request #2148 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-10-30 18:38:23 +00:00
大王叫我来巡山
5187916fd3 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (138 of 138 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-10-30 18:10:54 +00:00
Максим Горпиніч
d6e444c6e9 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (138 of 138 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-10-30 18:10:54 +00:00
solokot
59f4ef1091 Translated using Weblate (Russian)
Currently translated at 100.0% (138 of 138 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-10-30 18:10:53 +00:00
B o d o
bab1b3e9df Translated using Weblate (German)
Currently translated at 100.0% (138 of 138 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-10-30 18:10:53 +00:00
Kachelkaiser
4e8cbdc93b Translated using Weblate (German)
Currently translated at 100.0% (138 of 138 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-10-30 18:10:52 +00:00
Vasilis K
d3e5c5b335 Translated using Weblate (Greek)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2024-10-30 18:10:51 +00:00
Sylvia van Os
2b4b38ddc6 Merge pull request #2145 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-10-29 17:25:47 +00:00
B o d o
d3e6d775e8 Translated using Weblate (German)
Currently translated at 100.0% (138 of 138 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-10-29 17:18:28 +00:00
Sylvia van Os
ecf3b57679 Release Catima 2.32.1 2024-10-29 18:18:09 +01:00
Sylvia van Os
115981ecc6 Merge pull request #2144 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-10-29 16:44:32 +00:00
大王叫我来巡山
009f297f59 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (137 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-10-29 16:36:14 +00:00
Максим Горпиніч
f539fb1acf Translated using Weblate (Ukrainian)
Currently translated at 100.0% (137 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-10-29 16:36:14 +00:00
solokot
297e1e79c2 Translated using Weblate (Russian)
Currently translated at 100.0% (137 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-10-29 16:36:13 +00:00
B o d o
d8a95d9d48 Translated using Weblate (German)
Currently translated at 100.0% (137 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-10-29 16:36:13 +00:00
Vasilis K
1d8e87981b Translated using Weblate (Greek)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2024-10-29 16:36:12 +00:00
Sylvia van Os
5c97f9c89a Merge pull request #2143 from CatimaLoyalty/create-pull-request/patch-1730153137
Update Fastlane changelogs
2024-10-28 23:03:04 +00:00
TheLastProject
a3b02d775c Update Fastlane changelogs 2024-10-28 22:05:37 +00:00
Sylvia van Os
a83b01b0f4 Update CHANGELOG 2024-10-28 23:05:24 +01:00
Sylvia van Os
4be1d76869 Merge pull request #2142 from CatimaLoyalty/fix/2141
Fix text wrapping on add dialog
2024-10-28 22:04:19 +00:00
Sylvia van Os
15a6924894 Fix text wrapping on add dialog 2024-10-28 22:50:55 +01:00
Sylvia van Os
fdeef6504c Release Catima 2.32.0 2024-10-28 18:38:52 +01:00
Sylvia van Os
00ce3466fd Merge pull request #2138 from CatimaLoyalty/dependabot/github_actions/actions/setup-python-5.3.0
Bump actions/setup-python from 5.2.0 to 5.3.0
2024-10-28 06:41:27 +00:00
dependabot[bot]
ee3013499d Bump actions/setup-python from 5.2.0 to 5.3.0
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5.2.0...v5.3.0)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-28 06:32:46 +00:00
Sylvia van Os
0f966d036b Merge pull request #2137 from CatimaLoyalty/dependabot/github_actions/actions/checkout-4.2.2
Bump actions/checkout from 4.2.1 to 4.2.2
2024-10-28 06:31:52 +00:00
dependabot[bot]
2c09e625fb Bump actions/checkout from 4.2.1 to 4.2.2
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.1 to 4.2.2.
- [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.1...v4.2.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-28 02:33:10 +00:00
Sylvia van Os
8908796b44 Merge pull request #2136 from CatimaLoyalty/create-pull-request/patch-1730069540
Update Fastlane changelogs
2024-10-27 22:52:40 +00:00
TheLastProject
a01fd67565 Update Fastlane changelogs 2024-10-27 22:52:20 +00:00
Sylvia van Os
07fe173487 Update CHANGELOG 2024-10-27 22:52:08 +00:00
Sylvia van Os
e9e63e66a5 Merge pull request #2135 from CatimaLoyalty/fix/2104
Don't show import cancelled text on import completion
2024-10-27 22:04:28 +00:00
Sylvia van Os
6cbfb6dd48 Don't show import cancelled text on import completion 2024-10-27 22:51:45 +01:00
Sylvia van Os
e1f4c0a1ca Merge pull request #2132 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-10-27 20:29:23 +01:00
Sylvia van Os
5a6b912037 Merge pull request #2134 from CatimaLoyalty/create-pull-request/patch-1730002644
Update contributors
2024-10-27 20:28:04 +01:00
Sylvia van Os
996324829d Merge pull request #2133 from obfusk/update-stocard
update stocard_stores.csv
2024-10-27 20:25:08 +01:00
TheLastProject
e6e556f9af Update contributors 2024-10-27 04:17:24 +00:00
大王叫我来巡山
0318b99aa7 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (137 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-10-26 13:16:39 +02:00
Максим Горпиніч
bb79ba3ca5 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (137 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-10-26 13:16:27 +02:00
solokot
57679fdc40 Translated using Weblate (Russian)
Currently translated at 100.0% (137 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-10-26 13:16:15 +02:00
Kachelkaiser
01c80d1f8b Translated using Weblate (German)
Currently translated at 100.0% (137 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-10-26 13:16:03 +02:00
FC (Fay) Stegerman
76d69219f8 update stocard_stores.csv 2024-10-25 19:05:01 +02:00
Kamborio
1b0761a36d Translated using Weblate (Spanish)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2024-10-25 12:16:52 +02:00
Sylvia van Os
b519507600 Merge pull request #2131 from CatimaLoyalty/create-pull-request/patch-1729799074
Update Fastlane changelogs
2024-10-24 21:47:15 +02:00
TheLastProject
cdb7077b91 Update Fastlane changelogs 2024-10-24 19:44:33 +00:00
Sylvia van Os
55639e3cf2 Update CHANGELOG 2024-10-24 21:44:20 +02:00
Sylvia van Os
088ee5dc34 Merge pull request #2125 from obfusk/stocard-spanned-fix
StocardImporter: use ZipFile (fixes spanned archive marker breaking import)
2024-10-24 21:43:53 +02:00
Sylvia van Os
20d8374edc Merge pull request #2130 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-10-24 19:18:17 +02:00
ikanakova
265b90251d Translated using Weblate (Czech)
Currently translated at 100.0% (137 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2024-10-24 09:16:08 +02:00
ikanakova
49d833eee7 Translated using Weblate (Czech)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2024-10-24 09:16:08 +02:00
FC (Fay) Stegerman
98f4e0dd7f StocardImporter: use ZipFile (fixes spanned archive marker breaking import) 2024-10-22 21:36:29 +02:00
FC (Fay) Stegerman
4ec1a947bc modify stocard ZIP files to include spanned archive marker 2024-10-22 21:36:28 +02:00
Sylvia van Os
dfe825ebec Merge pull request #2127 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-10-22 19:26:11 +02:00
Balázs Meskó
4f24e0a2dc Translated using Weblate (Hungarian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hu/
2024-10-22 19:16:14 +02:00
Eji-san
ed57ab52c8 Translated using Weblate (Indonesian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/id/
2024-10-22 19:16:13 +02:00
B o d o
0d3c3c5e35 Translated using Weblate (German)
Currently translated at 100.0% (137 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-10-22 19:16:12 +02:00
Kachelkaiser
333acb7911 Translated using Weblate (German)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2024-10-22 19:16:12 +02:00
Sylvia van Os
056b363b7b Merge pull request #2126 from CatimaLoyalty/dep/agp871
Bump com.android.application to 8.7.1 and suppress incorrect new lint warning
2024-10-22 19:01:27 +02:00
Sylvia van Os
693e89c635 Bump com.android.application to 8.7.1 and suppress incorrect new lint warning 2024-10-22 18:39:34 +02:00
Vincent Caron
d95a7f7982 Add icons to the "More options" dialog (#2121) 2024-10-21 18:39:30 +02:00
Sylvia van Os
2f72fee1aa Merge pull request #2122 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-10-21 17:49:06 +02:00
Jiri Grönroos
59ffa6c357 Translated using Weblate (Finnish)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2024-10-21 03:32:21 +02:00
Sylvia van Os
1eea1b4402 Merge pull request #2119 from CatimaLoyalty/create-pull-request/patch-1729397925
Update contributors
2024-10-20 11:14:44 +02:00
TheLastProject
c936d0df49 Update contributors 2024-10-20 04:18:45 +00:00
Sylvia van Os
41dd6b2b69 Merge pull request #2112 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-10-17 19:45:14 +02:00
Sylvia van Os
524ef19991 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2024-10-17 18:16:30 +02:00
João Palmeiro
3312f7db8c Translated using Weblate (Portuguese (Portugal))
Currently translated at 99.2% (136 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_PT/
2024-10-15 12:16:04 +02:00
befag74614
49ea6e39cf Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2024-10-15 12:16:03 +02:00
Renko
4c15ddc35c Translated using Weblate (Romanian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2024-10-15 12:16:02 +02:00
Wiktor Perskawiec
1a7c8f088d Translated using Weblate (Polish)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2024-10-15 12:16:02 +02:00
João Palmeiro
1d6af0c540 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2024-10-15 12:16:01 +02:00
Максим Горпиніч
261130aa6f Translated using Weblate (Ukrainian)
Currently translated at 100.0% (137 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-10-15 12:16:00 +02:00
Максим Горпиніч
98526fcd0b Translated using Weblate (Ukrainian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2024-10-15 12:16:00 +02:00
Dklfajsjfi49wefklsf32
64d1e70d33 Translated using Weblate (Dutch)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2024-10-15 12:15:59 +02:00
Sylvia van Os
71473f3804 Merge pull request #2114 from CatimaLoyalty/dependabot/github_actions/actions/upload-artifact-4.4.3
Bump actions/upload-artifact from 4.4.0 to 4.4.3
2024-10-14 09:41:27 +02:00
Sylvia van Os
f360ee172f Merge pull request #2113 from CatimaLoyalty/dependabot/github_actions/actions/checkout-4.2.1
Bump actions/checkout from 4.2.0 to 4.2.1
2024-10-14 09:39:49 +02:00
dependabot[bot]
4940f32fbf Bump actions/upload-artifact from 4.4.0 to 4.4.3
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.4.0 to 4.4.3.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4.4.0...v4.4.3)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-14 02:53:36 +00:00
dependabot[bot]
b025af8d07 Bump actions/checkout from 4.2.0 to 4.2.1
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.0 to 4.2.1.
- [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.0...v4.2.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-14 02:53:35 +00:00
Sylvia van Os
6418ab7cbe Merge pull request #2111 from CatimaLoyalty/create-pull-request/patch-1728793081
Update contributors
2024-10-13 08:32:07 +02:00
TheLastProject
30edf0efcf Update contributors 2024-10-13 04:18:00 +00:00
Sylvia van Os
37b02b13fa Merge pull request #2110 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-10-12 14:50:37 +02:00
Roger S
05453e92ea Translated using Weblate (German)
Currently translated at 99.2% (136 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-10-12 13:47:44 +02:00
J. Lavoie
4c3b830788 Translated using Weblate (Italian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2024-10-12 13:47:43 +02:00
J. Lavoie
0c706f2e5b Translated using Weblate (French)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2024-10-12 13:47:43 +02:00
Sylvia van Os
5ebe02fb89 Merge pull request #2109 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-10-12 09:04:12 +02:00
Roger S
3b8bf99e79 Translated using Weblate (German)
Currently translated at 99.2% (136 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-10-11 21:59:29 +00:00
Priit Jõerüüt
916c3d4db8 Translated using Weblate (Estonian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2024-10-11 21:59:29 +00:00
Peter Dave Hello
b1e89424dc Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 88.3% (121 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hant/
2024-10-11 21:59:28 +00:00
Peter Dave Hello
9d2af821d1 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2024-10-11 21:59:27 +00:00
大王叫我来巡山
e9eee27932 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (137 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-10-11 21:59:26 +00:00
大王叫我来巡山
4d23dce932 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2024-10-11 21:59:26 +00:00
Tim Trek
7277097d59 Translated using Weblate (German)
Currently translated at 99.2% (136 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-10-11 21:59:26 +00:00
Sylvia van Os
d6bc1f407b Merge pull request #2108 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-10-10 21:56:45 +02:00
Oğuz Ersen
f002c83cbd Translated using Weblate (Turkish)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2024-10-10 21:00:06 +02:00
109247019824
afcd63805b Translated using Weblate (Bulgarian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2024-10-10 21:00:06 +02:00
solokot
f5cca4f3fb Translated using Weblate (Russian)
Currently translated at 100.0% (137 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-10-10 21:00:06 +02:00
Roger S
ad2048a72c Translated using Weblate (German)
Currently translated at 98.5% (135 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-10-10 21:00:06 +02:00
solokot
e1ceb8b6af Translated using Weblate (Russian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2024-10-10 21:00:06 +02:00
Roger S
a3ce7ba3ad Translated using Weblate (German)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2024-10-10 21:00:06 +02:00
Sylvia van Os
41f3845f63 Merge pull request #2105 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-10-10 17:53:45 +02:00
Anonymous
86434d3919 Translated using Weblate (Bengali)
Currently translated at 35.8% (113 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bn/
2024-10-10 12:51:24 +02:00
Anonymous
75efd9a733 Translated using Weblate (Icelandic)
Currently translated at 36.8% (116 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/is/
2024-10-10 12:51:24 +02:00
gallegonovato
f5b691d68b Translated using Weblate (Spanish)
Currently translated at 48.9% (67 of 137 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/es/
2024-10-10 12:51:23 +02:00
Anonymous
e9bf7bb547 Translated using Weblate (Slovak)
Currently translated at 98.4% (310 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sk/
2024-10-10 12:51:22 +02:00
Tim Trek
c6b726eb63 Translated using Weblate (German)
Currently translated at 98.5% (134 of 136 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2024-10-10 10:37:29 +02:00
Sylvia van Os
42638e3df6 Merge pull request #2103 from CatimaLoyalty/create-pull-request/patch-1728420476
Update Fastlane changelogs
2024-10-08 23:15:47 +02:00
Sylvia van Os
33a3c7645e Change card with volume buttons at most once per second 2024-10-08 23:15:26 +02:00
TheLastProject
86a0a8d19a Update Fastlane changelogs 2024-10-08 20:47:56 +00:00
Sylvia van Os
a1da4a7ef3 Update CHANGELOG 2024-10-08 22:47:42 +02:00
Sylvia van Os
ecfb7bb188 Merge pull request #2102 from CatimaLoyalty/feature/volumeKeyNavigation
Volume key navigation
2024-10-08 22:44:41 +02:00
Sylvia van Os
bf2047e1d6 Rephrase some settings 2024-10-08 22:23:15 +02:00
Filip Rzuhovský
09dc0e4c15 Implemented card swiping with volume buttons mechanism 2024-10-08 19:48:17 +02:00
Sylvia van Os
eed5bcda30 Merge pull request #2098 from CatimaLoyalty/create-pull-request/patch-1728188277
Update contributors
2024-10-06 12:53:49 +02:00
TheLastProject
d35c9887f6 Update contributors 2024-10-06 04:17:56 +00:00
Sylvia van Os
7eb98c9d4b Merge pull request #2097 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-10-03 17:29:01 +02:00
Hosted Weblate
bc0d89573e Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/
2024-10-03 07:15:44 +02:00
Jen
67c8fc7dbd Translated using Weblate (Kannada)
Currently translated at 28.5% (89 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/kn/
2024-10-03 07:15:43 +02:00
Sylvia van Os
d472948201 Merge pull request #2091 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-09-30 17:14:28 +02:00
Priit Jõerüüt
3d44f6000d Translated using Weblate (Estonian)
Currently translated at 100.0% (312 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2024-09-30 14:34:04 +02:00
Legendbird580
9b2d001c3c Translated using Weblate (Swedish)
Currently translated at 92.3% (288 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2024-09-30 14:34:04 +02:00
Sylvia van Os
74ae9ee040 Merge pull request #2090 from CatimaLoyalty/dependabot/github_actions/actions/checkout-4.2.0
Bump actions/checkout from 4.1.7 to 4.2.0
2024-09-30 08:22:39 +02:00
dependabot[bot]
d1e455f038 Bump actions/checkout from 4.1.7 to 4.2.0
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.7 to 4.2.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.1.7...v4.2.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-30 03:00:18 +00:00
Sylvia van Os
7d49fa98e7 Merge pull request #2089 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-09-29 18:18:21 +02:00
Eji-san
db59441d11 Translated using Weblate (Indonesian)
Currently translated at 100.0% (312 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/id/
2024-09-29 14:07:28 +00:00
Sylvia van Os
5da8afeb7d Merge pull request #2088 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-09-25 17:22:22 +02:00
Ricky Tigg
7575d7f271 Translated using Weblate (Finnish)
Currently translated at 100.0% (312 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2024-09-25 15:16:36 +02:00
Sylvia van Os
7830502987 Merge pull request #2085 from CatimaLoyalty/create-pull-request/patch-1727159056
Update Gradle to 8.10.2
2024-09-24 17:40:47 +02:00
TheLastProject
a3decdf9ad Update Gradle to 8.10.2 2024-09-24 06:24:15 +00:00
Sylvia van Os
051ece8358 Merge pull request #2084 from CatimaLoyalty/dependabot/github_actions/peter-evans/create-pull-request-7.0.5
Bump peter-evans/create-pull-request from 7.0.2 to 7.0.5
2024-09-23 19:24:07 +02:00
dependabot[bot]
92da7fc877 Bump peter-evans/create-pull-request from 7.0.2 to 7.0.5
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7.0.2 to 7.0.5.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v7.0.2...v7.0.5)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-23 02:16:13 +00:00
Sylvia van Os
727d9ce781 Refactor to allow updating a loyalty card from a bundle (#2051)
This allows us to send any (partial) loyalty card into the edit
activity, granting us greater flexibility in what kind of scan result we
can parse
2024-09-22 10:20:58 +02:00
Sylvia van Os
94cee771bd Merge pull request #2083 from CatimaLoyalty/dependabot/gradle/com.android.application-8.6.1
Bump com.android.application from 8.6.0 to 8.6.1
2024-09-18 08:21:43 +02:00
dependabot[bot]
73db115f02 Bump com.android.application from 8.6.0 to 8.6.1
Bumps com.android.application from 8.6.0 to 8.6.1.

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-18 02:19:53 +00:00
Sylvia van Os
c8aab06d77 Merge pull request #2082 from CatimaLoyalty/dependabot/github_actions/peter-evans/create-pull-request-7.0.2
Bump peter-evans/create-pull-request from 7.0.1 to 7.0.2
2024-09-16 08:38:05 +02:00
dependabot[bot]
be80003860 Bump peter-evans/create-pull-request from 7.0.1 to 7.0.2
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 7.0.1 to 7.0.2.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v7.0.1...v7.0.2)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-16 02:18:55 +00:00
Sylvia van Os
639c024e7e Merge pull request #2081 from CatimaLoyalty/create-pull-request/patch-1726373855
Update contributors
2024-09-15 10:40:10 +02:00
TheLastProject
8dc1e9f6b5 Update contributors 2024-09-15 04:17:35 +00:00
Sylvia van Os
a2a4d9ac16 Merge pull request #2080 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-09-14 21:19:59 +02:00
Nazar
60de179f74 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (136 of 136 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2024-09-14 17:09:34 +02:00
Sylvia van Os
518f384b99 Merge pull request #2078 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-09-11 17:34:09 +02:00
solokot
a83598676b Translated using Weblate (Russian)
Currently translated at 100.0% (136 of 136 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2024-09-11 11:45:21 +00:00
Sylvia van Os
59ddfe1d05 Merge pull request #2076 from CatimaLoyalty/create-pull-request/patch-1725949366
Update Gradle to 8.10.1
2024-09-10 20:59:49 +02:00
TheLastProject
d6def93b4e Update Gradle to 8.10.1 2024-09-10 06:22:45 +00:00
Sylvia van Os
65d95f4616 Merge pull request #2075 from CatimaLoyalty/dependabot/github_actions/peter-evans/create-pull-request-7.0.1
Bump peter-evans/create-pull-request from 6.1.0 to 7.0.1
2024-09-09 17:54:15 +02:00
dependabot[bot]
b858f5dc01 Bump peter-evans/create-pull-request from 6.1.0 to 7.0.1
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 6.1.0 to 7.0.1.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v6.1.0...v7.0.1)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-09 02:29:28 +00:00
Sylvia van Os
648dbe7031 Merge pull request #2074 from CatimaLoyalty/create-pull-request/patch-1725769023
Update contributors
2024-09-08 11:05:41 +02:00
TheLastProject
7b57c73d2a Update contributors 2024-09-08 04:17:03 +00:00
Sylvia van Os
9c2ec91100 Merge pull request #2073 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-09-07 11:19:14 +02:00
Priit Jõerüüt
c5769d5a81 Translated using Weblate (Estonian)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/et/
2024-09-06 23:09:22 +02:00
Sylvia van Os
d3d5f62801 Merge pull request #2070 from CatimaLoyalty/dependabot/gradle/com.android.tools-desugar_jdk_libs-2.1.2
Bump com.android.tools:desugar_jdk_libs from 2.1.1 to 2.1.2
2024-09-05 17:48:17 +02:00
Sylvia van Os
bf8146d509 Merge pull request #2072 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-09-05 17:38:44 +02:00
大王叫我来巡山
fad5e7e238 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (136 of 136 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2024-09-05 12:47:56 +02:00
dependabot[bot]
af79b22f71 Bump com.android.tools:desugar_jdk_libs from 2.1.1 to 2.1.2
Bumps [com.android.tools:desugar_jdk_libs](https://github.com/google/desugar_jdk_libs) from 2.1.1 to 2.1.2.
- [Changelog](https://github.com/google/desugar_jdk_libs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/desugar_jdk_libs/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-05 02:25:30 +00:00
Sylvia van Os
a31afef298 Merge pull request #2069 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-09-04 18:03:32 +02:00
N. Hao
6096876894 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (312 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/vi/
2024-09-04 12:09:38 +02:00
Charlie Ringström
0fe3d79103 Translated using Weblate (Swedish)
Currently translated at 91.9% (287 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2024-09-04 12:09:37 +02:00
Lilith Maria
8b0ae9d61a Translated using Weblate (Lithuanian)
Currently translated at 2.2% (3 of 136 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lt/
2024-09-04 12:09:37 +02:00
Lilith Maria
4489b46200 Translated using Weblate (Lithuanian)
Currently translated at 97.1% (303 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lt/
2024-09-04 12:09:36 +02:00
Sylvia van Os
1240e8e353 Merge pull request #2067 from CatimaLoyalty/create-pull-request/patch-1725376723
Update feature graphic
2024-09-03 17:19:35 +02:00
TheLastProject
74fa400237 Update feature graphic 2024-09-03 15:18:43 +00:00
Sylvia van Os
cc7fe900d2 Merge pull request #2066 from CatimaLoyalty/fix/generateFeatureGraphicsNoTxt
Fix feature graphic generation failing for languages without title.txt
2024-09-03 17:17:31 +02:00
Sylvia van Os
aab416e62b Fix feature graphic generation failing for languages without title.txt 2024-09-02 23:50:36 +02:00
Sylvia van Os
d924c292bc Merge pull request #2065 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-09-02 23:41:33 +02:00
Priit Jõerüüt
a251fbfcc6 Translated using Weblate (Estonian)
Currently translated at 1.4% (2 of 136 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/et/
2024-09-02 21:09:37 +00:00
Asaf Cohen
5bea05ee15 Translated using Weblate (Hebrew (Israel))
Currently translated at 31.0% (97 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/he_IL/
2024-09-02 21:09:36 +00:00
Sylvia van Os
21c7eee893 Merge pull request #2064 from CatimaLoyalty/dependabot/github_actions/actions/setup-python-5.2.0
Bump actions/setup-python from 5.1.1 to 5.2.0
2024-09-02 19:26:13 +02:00
Sylvia van Os
c9a5e12352 Merge pull request #2063 from CatimaLoyalty/dependabot/github_actions/actions/upload-artifact-4.4.0
Bump actions/upload-artifact from 4.3.6 to 4.4.0
2024-09-02 19:25:56 +02:00
dependabot[bot]
956140c6db Bump actions/setup-python from 5.1.1 to 5.2.0
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5.1.1 to 5.2.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5.1.1...v5.2.0)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-02 02:55:56 +00:00
dependabot[bot]
fde0b3e412 Bump actions/upload-artifact from 4.3.6 to 4.4.0
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.3.6 to 4.4.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4.3.6...v4.4.0)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-02 02:55:54 +00:00
Sylvia van Os
2e8ba7a185 Merge pull request #2062 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-09-01 22:23:01 +02:00
Xpto
cc27988681 Translated using Weblate (Portuguese)
Currently translated at 3.7% (5 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt/
2024-09-01 20:10:05 +00:00
Sylvia van Os
590af0c276 Merge pull request #2061 from CatimaLoyalty/dependabot/gradle/com.android.application-8.6.0
Bump com.android.application from 8.5.2 to 8.6.0
2024-08-30 17:07:55 +02:00
dependabot[bot]
32fe6b2f77 Bump com.android.application from 8.5.2 to 8.6.0
Bumps com.android.application from 8.5.2 to 8.6.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-30 02:51:52 +00:00
Sylvia van Os
9f5607016d Merge pull request #2059 from CatimaLoyalty/dependabot/gradle/com.android.tools-desugar_jdk_libs-2.1.1
Bump com.android.tools:desugar_jdk_libs from 2.1.0 to 2.1.1
2024-08-29 10:47:03 +02:00
dependabot[bot]
2e6ecdf02d Bump com.android.tools:desugar_jdk_libs from 2.1.0 to 2.1.1
Bumps [com.android.tools:desugar_jdk_libs](https://github.com/google/desugar_jdk_libs) from 2.1.0 to 2.1.1.
- [Changelog](https://github.com/google/desugar_jdk_libs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/desugar_jdk_libs/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-29 02:32:59 +00:00
Sylvia van Os
ef6cb69fb0 Merge pull request #2057 from CatimaLoyalty/dependabot/gradle/com.android.tools-desugar_jdk_libs-2.1.0
Bump com.android.tools:desugar_jdk_libs from 2.0.4 to 2.1.0
2024-08-27 08:57:51 +02:00
dependabot[bot]
71504af6b2 Bump com.android.tools:desugar_jdk_libs from 2.0.4 to 2.1.0
Bumps [com.android.tools:desugar_jdk_libs](https://github.com/google/desugar_jdk_libs) from 2.0.4 to 2.1.0.
- [Changelog](https://github.com/google/desugar_jdk_libs/blob/master/CHANGELOG.md)
- [Commits](https://github.com/google/desugar_jdk_libs/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-27 02:30:23 +00:00
Sylvia van Os
a3ca084444 Merge pull request #2056 from CatimaLoyalty/create-pull-request/patch-1724559358
Update contributors
2024-08-25 10:52:03 +02:00
TheLastProject
35082be6cd Update contributors 2024-08-25 04:15:57 +00:00
Sylvia van Os
934ddb1bfe Merge pull request #2055 from CatimaLoyalty/fix/1842
Fix about screen text overlaying into arrows
2024-08-24 18:57:57 +02:00
Sylvia van Os
5d0a1d8fb2 Fix about screen text overlaying into arrows 2024-08-24 18:35:36 +02:00
Sylvia van Os
1c8c492400 Release Catima 2.31.1 2024-08-24 14:07:16 +02:00
Sylvia van Os
186db1d419 Merge pull request #2053 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-08-23 00:06:02 +02:00
Uporabnik Alen
b596628f81 Translated using Weblate (Slovenian)
Currently translated at 82.3% (257 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sl/
2024-08-22 23:09:22 +02:00
Sylvia van Os
74aad20d6b Merge pull request #2050 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-08-19 17:40:23 +02:00
Priit Jõerüüt
e7a50901ea Translated using Weblate (Estonian)
Currently translated at 100.0% (312 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2024-08-19 15:09:17 +00:00
Sylvia van Os
b7fa0dc70c Merge pull request #2048 from CatimaLoyalty/create-pull-request/patch-1723962057
Update Gradle to 8.10
2024-08-18 11:07:45 +02:00
Sylvia van Os
c19dc78f3e Merge pull request #2047 from CatimaLoyalty/create-pull-request/patch-1723954751
Update contributors
2024-08-18 09:57:18 +02:00
TheLastProject
c7639f0a02 Update Gradle to 8.10 2024-08-18 06:20:57 +00:00
TheLastProject
ad984b2ec4 Update contributors 2024-08-18 04:19:10 +00:00
Sylvia van Os
baa0378fa2 Merge pull request #2046 from CatimaLoyalty/create-pull-request/patch-1723902322
Update Fastlane changelogs
2024-08-17 17:08:52 +02:00
TheLastProject
9f422dc5ac Update Fastlane changelogs 2024-08-17 13:45:21 +00:00
Sylvia van Os
3ab28d8270 Update CHANGELOG 2024-08-17 15:45:08 +02:00
Sylvia van Os
f63950ff3c Merge pull request #2045 from obfusk/patch-9
update obfusk/gradle-update-action to v3.0.0
2024-08-17 12:46:28 +02:00
FC (Fay) Stegerman
b4dd713dab update obfusk/gradle-update-action to v3.0.0 2024-08-15 13:44:42 +00:00
unbiaseduser-github
80e4701d41 Make Back button/gesture not instantly collapse the MainActivity's search view (#2030) 2024-08-14 20:09:46 +02:00
Sylvia van Os
7c7a05f1f8 Merge pull request #2044 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-08-13 19:19:08 +02:00
Sylvia van Os
6e57d4711a Merge pull request #2043 from CatimaLoyalty/create-pull-request/patch-1723568443
Update locales
2024-08-13 19:18:41 +02:00
Priit Jõerüüt
626c4c956e Translated using Weblate (Estonian)
Currently translated at 100.0% (312 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2024-08-13 19:02:09 +02:00
ΣΤΑΥΡΟΣ ΔΑΛΙΑΚΟΠΟΥΛΟΣ
522ae07942 Translated using Weblate (Greek)
Currently translated at 100.0% (312 of 312 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2024-08-13 19:02:08 +02:00
TheLastProject
e5b7f723d2 Update locales 2024-08-13 17:00:43 +00:00
Sylvia van Os
1c8830f59c Merge pull request #2041 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-08-13 19:00:27 +02:00
Sylvia van Os
ad25cf9c9e Remove translated strings no longer in Catima 2024-08-13 18:04:50 +02:00
Priit Jõerüüt
c4c63e5ddc Added translation using Weblate (Estonian) 2024-08-12 23:30:58 +02:00
Priit Jõerüüt
443c858700 Translated using Weblate (Estonian)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2024-08-12 23:30:57 +02:00
Sylvia van Os
c19b80f991 Merge pull request #2033 from AndreVero/AndreVero-remove-unused-strings-issue-2027
Remove unused strings from string.xml
2024-08-12 23:06:38 +02:00
Sylvia van Os
f3ee88b43c More cleanups 2024-08-12 23:01:27 +02:00
Sylvia van Os
1ac6ee6c59 Merge pull request #2040 from CatimaLoyalty/dependabot/github_actions/actions/upload-artifact-4.3.6
Bump actions/upload-artifact from 4.3.5 to 4.3.6
2024-08-12 18:16:38 +02:00
dependabot[bot]
3f4da811ca Bump actions/upload-artifact from 4.3.5 to 4.3.6
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.3.5 to 4.3.6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4.3.5...v4.3.6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-12 02:25:26 +00:00
Sylvia van Os
598a9dd2da Merge pull request #2037 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-08-11 13:09:33 +02:00
Priit Jõerüüt
7a7a81d5c4 Translated using Weblate (Estonian)
Currently translated at 41.0% (130 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2024-08-11 09:09:56 +00:00
Peter Dave Hello
2730d157d8 Translated using Weblate (Chinese (Traditional))
Currently translated at 86.6% (117 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hant/
2024-08-11 09:09:56 +00:00
Peter Dave Hello
55519e487d Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2024-08-11 09:09:53 +00:00
Sylvia van Os
55fb14b6df Merge pull request #2036 from CatimaLoyalty/create-pull-request/patch-1723349900
Update contributors
2024-08-11 10:45:26 +02:00
TheLastProject
6b8fdd9c5c Update contributors 2024-08-11 04:18:20 +00:00
Sylvia van Os
94b15220ea Merge pull request #2034 from CatimaLoyalty/dependabot/gradle/com.android.application-8.5.2
Bump com.android.application from 8.5.1 to 8.5.2
2024-08-09 08:21:29 +02:00
dependabot[bot]
bbb3be736e Bump com.android.application from 8.5.1 to 8.5.2
Bumps com.android.application from 8.5.1 to 8.5.2.

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-09 02:29:54 +00:00
Sylvia van Os
0355dc6cf3 Merge pull request #2032 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-08-08 18:51:13 +02:00
Andrii
287918372a Remove unused strings from string.xml 2024-08-08 14:54:49 +01:00
Priit Jõerüüt
6597ec1b6e Translated using Weblate (Estonian)
Currently translated at 23.6% (75 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2024-08-08 02:09:16 +02:00
Sylvia van Os
3184db27d1 Merge pull request #2031 from CatimaLoyalty/create-pull-request/patch-1723047037
Update locales
2024-08-07 18:12:42 +02:00
TheLastProject
99434e69a7 Update locales 2024-08-07 16:10:36 +00:00
Sylvia van Os
cb0997a0b1 Merge pull request #2029 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-08-07 18:10:21 +02:00
Priit Jõerüüt
6fa2c71bd3 Added translation using Weblate (Estonian) 2024-08-07 01:57:36 +02:00
Sylvia van Os
2f66317190 Merge pull request #2025 from CatimaLoyalty/dependabot/github_actions/gradle/actions-4
Bump gradle/actions from 3 to 4
2024-08-05 18:11:05 +02:00
Sylvia van Os
c718d27a4c Merge pull request #2024 from CatimaLoyalty/dependabot/github_actions/actions/upload-artifact-4.3.5
Bump actions/upload-artifact from 4.3.4 to 4.3.5
2024-08-05 18:04:04 +02:00
Sylvia van Os
cadb92c4ef Merge pull request #2026 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-08-05 17:07:33 +02:00
tygyh
16d66f6c90 Translated using Weblate (Swedish)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/sv/
2024-08-05 15:09:31 +02:00
Milo Ivir
5c157888af Translated using Weblate (Croatian)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hr/
2024-08-05 15:09:30 +02:00
Sylvia van Os
a556899881 Translated using Weblate (Esperanto)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/eo/
2024-08-05 15:09:30 +02:00
하루
3ed6ad8b11 Translated using Weblate (Korean)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ko/
2024-08-05 15:09:29 +02:00
Allan Nordhøy
a06887e663 Translated using Weblate (Norwegian Bokmål)
Currently translated at 96.2% (305 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nb_NO/
2024-08-05 15:09:28 +02:00
dependabot[bot]
ef9757df75 Bump gradle/actions from 3 to 4
Bumps [gradle/actions](https://github.com/gradle/actions) from 3 to 4.
- [Release notes](https://github.com/gradle/actions/releases)
- [Commits](https://github.com/gradle/actions/compare/v3...v4)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 02:32:59 +00:00
dependabot[bot]
03811f1f39 Bump actions/upload-artifact from 4.3.4 to 4.3.5
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.3.4 to 4.3.5.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4.3.4...v4.3.5)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-05 02:32:57 +00:00
Sylvia van Os
c1801ae450 Merge pull request #2023 from CatimaLoyalty/create-pull-request/patch-1722776436
Update feature graphic
2024-08-04 15:01:16 +02:00
TheLastProject
24ee045dcf Update feature graphic 2024-08-04 13:00:35 +00:00
Sylvia van Os
06c0ddf6ae Merge pull request #2022 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-08-04 14:59:31 +02:00
Hosted Weblate
e22a7c3063 Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/
2024-08-04 08:09:35 +02:00
Amir
b91dcc8e27 Translated using Weblate (Persian)
Currently translated at 35.3% (112 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2024-08-04 08:09:34 +02:00
ed tavinor
496ba82835 Translated using Weblate (Esperanto)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/eo/
2024-08-04 08:09:34 +02:00
ed tavinor
410518e677 Translated using Weblate (Esperanto)
Currently translated at 1.4% (2 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/eo/
2024-08-04 08:09:33 +02:00
ed tavinor
7cafebab7d Translated using Weblate (Esperanto)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/eo/
2024-08-04 08:09:32 +02:00
Sylvia van Os
429e22cc5e Merge pull request #2021 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-08-02 23:47:05 +02:00
ed tavinor
1edc17fb7e Translated using Weblate (Esperanto)
Currently translated at 75.3% (239 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/eo/
2024-08-02 22:09:36 +02:00
Alexander Kulumbeg
dd3cf771bd Translated using Weblate (Slovak)
Currently translated at 99.2% (134 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2024-08-02 22:09:36 +02:00
Alexander Kulumbeg
eebb5e5cd4 Translated using Weblate (Slovak)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sk/
2024-08-02 22:09:35 +02:00
Sylvia van Os
46fc2aab55 Merge pull request #2019 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-08-01 21:42:05 +02:00
ed tavinor
b765560fff Translated using Weblate (Esperanto)
Currently translated at 40.0% (127 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/eo/
2024-08-01 21:09:16 +02:00
Sylvia van Os
6a3dd841b0 Merge pull request #2018 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-31 18:58:39 +02:00
Scrambled777
1b899a40a5 Translated using Weblate (Hindi)
Currently translated at 100.0% (135 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/hi/
2024-07-31 16:38:12 +02:00
Sylvia van Os
a05769c42d Update fastlane 2024-07-28 13:12:41 +02:00
Sylvia van Os
2c2ff2d1d2 Merge pull request #2016 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-07-28 13:08:24 +02:00
kompowiec2
045363f138 Translated using Weblate (Polish)
Currently translated at 97.0% (131 of 135 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2024-07-28 11:10:32 +02:00
kompowiec2
6860e1deb0 Translated using Weblate (Polish)
Currently translated at 100.0% (317 of 317 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2024-07-28 11:10:31 +02:00
1003 changed files with 10920 additions and 3420 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

@@ -24,31 +24,49 @@ permissions:
security-events: none
statuses: none
env:
JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
JAVA_HOME: /usr/lib/jvm/java-21-openjdk-amd64
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
flavor: [Foss, Gplay]
steps:
- uses: actions/checkout@v4.1.7
- 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@v3
- name: set up OpenJDK 17
run: |
sudo apt-get update
sudo apt-get install -y openjdk-17-jdk-headless
sudo update-alternatives --auto java
- name: Build
run: ./gradlew assembleRelease
- name: Check lint
run: ./gradlew lintRelease
- name: Run unit tests
run: timeout 5m ./gradlew testReleaseUnitTest || { ./gradlew --stop && timeout 5m ./gradlew testReleaseUnitTest; }
- name: SpotBugs
run: ./gradlew spotbugsRelease
- name: Archive test results
if: always()
uses: actions/upload-artifact@v4.3.4
with:
name: test-results
path: app/build/reports
- 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
- name: set up OpenJDK 21
run: |
sudo apt-get update
sudo apt-get install -y openjdk-21-jdk-headless
sudo update-alternatives --auto java
- name: Build
run: ./gradlew assemble${{ matrix.flavor }}Release
- name: Check lint
run: ./gradlew lint${{ matrix.flavor }}Release
- name: Run unit tests
run: timeout 5m ./gradlew test${{ matrix.flavor }}ReleaseUnitTest || { ./gradlew --stop && timeout 5m ./gradlew test${{ matrix.flavor }}ReleaseUnitTest; }
- name: Enable KVM
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: Run instrumented tests (API 21)
uses: ReactiveCircus/android-emulator-runner@v2
with:
api-level: 21
arch: x86_64
script: ./gradlew connected${{ matrix.flavor }}DebugAndroidTest
- name: Run instrumented tests (API 35)
uses: ReactiveCircus/android-emulator-runner@v2
with:
api-level: 35
arch: x86_64
script: ./gradlew connected${{ matrix.flavor }}DebugAndroidTest
- name: Archive test results
if: always()
uses: actions/upload-artifact@v4.6.2
with:
name: test-results-flavor${{ matrix.flavor }}
path: app/build/reports

View File

@@ -27,15 +27,15 @@ jobs:
steps:
- name: Checkout repo
id: checkout
uses: actions/checkout@v4.1.7
uses: actions/checkout@v5.0.0
- name: Setup Python
uses: actions/setup-python@v5.1.1
uses: actions/setup-python@v5.6.0
with:
python-version: '3.x'
- name: Run converter script
run: python .scripts/changelog_to_fastlane.py
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6.1.0
uses: peter-evans/create-pull-request@v7.0.8
with:
title: "Update Fastlane changelogs"
commit-message: "Update Fastlane changelogs"

View File

@@ -25,7 +25,7 @@ jobs:
steps:
- name: Checkout repo
id: checkout
uses: actions/checkout@v4.1.7
uses: actions/checkout@v5.0.0
- name: Update contributors
id: update_contributors
uses: TheLastProject/contributors-to-file-action@v3.2.0
@@ -33,7 +33,7 @@ jobs:
file_in_repo: app/src/main/res/raw/contributors.txt
min_commit_count: 5
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6.1.0
uses: peter-evans/create-pull-request@v7.0.8
with:
title: "Update contributors"
commit-message: "Update contributors"

View File

@@ -25,11 +25,11 @@ jobs:
generate-feature-graphic:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.7
- uses: actions/checkout@v5.0.0
- name: Install requirements
run: |
sudo apt-get update
sudo apt-get install optipng mat2
sudo apt-get install inkscape mat2 optipng xvfb
# Install 200 weight versions of relevant Noto (to use for languages not supported by Lexend Deca)
sudo apt-get install fonts-noto-extra fonts-noto-cjk-extra
# Custom fonts
@@ -39,7 +39,7 @@ jobs:
- name: Generate featureGraphic.png for each language
run: .scripts/generate_feature_graphic/generate_feature_graphic.sh
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6.1.0
uses: peter-evans/create-pull-request@v7.0.8
with:
title: "Update feature graphic"
commit-message: "Update feature graphic"

View File

@@ -1,33 +0,0 @@
name: Gradle update
on:
workflow_dispatch:
schedule:
- cron: '3 6 * * *'
permissions:
actions: none
checks: none
contents: write
deployments: none
discussions: none
id-token: none
issues: none
packages: none
pages: none
pull-requests: write
repository-projects: none
security-events: none
statuses: none
jobs:
gradle-update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.7
- uses: obfusk/gradle-update-action@v2.0.0
id: gradle-update
- uses: gradle/actions/wrapper-validation@v3
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6.1.0
with:
title: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"
commit-message: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"
branch-suffix: timestamp

View File

@@ -25,13 +25,13 @@ jobs:
update-locales:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.7
- uses: actions/checkout@v5.0.0
- name: Add new locales
run: .scripts/new-locales.py
- name: Update locales
run: .scripts/locales.py
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6.1.0
uses: peter-evans/create-pull-request@v7.0.8
with:
title: "Update locales"
commit-message: "Update locales"

3
.gitignore vendored
View File

@@ -25,3 +25,6 @@
/.bundle/
/vendor/bundle
/lib/bundler/man/
# Catima-specific
SHA256SUMS

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 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 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

@@ -4,6 +4,11 @@ set -euo pipefail
script_location="$(dirname "$(readlink -f "$0")")"
for lang in "$script_location/../../fastlane/metadata/android/"*; do
# Skip languages without title.txt
if [ ! -f "$lang/title.txt" ]; then
continue
fi
pushd "$lang"
# Place temporary copy for editing if needed
cp "$script_location/featureGraphic.svg" featureGraphic.svg
@@ -28,23 +33,25 @@ 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 ;;
hi-IN) sed -i -e "s/Yesteryear/Noto Serif 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 "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
convert featureGraphic.svg images/featureGraphic.png
# Generate .png (we use Inkscape because ImageMagick ignores RTL)
xvfb-run inkscape --export-filename=images/featureGraphic.png featureGraphic.svg
# Optimize .png
optipng images/featureGraphic.png
# Remove metadata (timestamps) from .png

View File

@@ -11,6 +11,7 @@ MIN_PERCENT = 90
NOT_LANGS = ("night", "w600dp")
REPLACE_CODES = {
"el": "el-rGR",
"he": "iw",
"id": "in-rID",
"ro": "ro-rRO",
"zh_Hans": "zh-rCN",

View File

@@ -1,5 +1,78 @@
# Changelog
## v2.37.0 - 151 (2025-08-22)
- 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)
- Dependency and translation updates
## v2.35.0 - 148 (2025-05-17)
- Add ability to choose barcode width in fullscreen view
- Remove confusing import from app function
- Various scanning fixes
- Fix crash when loading a pkpass file without barcode
## v2.34.5 - 147 (2025-03-22)
- Target Android 15
- Fix crash reading unsupported pkpass files
- Improve pkpass support
## v2.34.4 - 146 (2025-01-17)
- Ability to sort cards by start of validity
- Temporarily revert to targeting Android 14 to fix some UI issues
## v2.34.3 - 145 (2025-01-15)
- Target Android 15
- Fix keyboard covering save button in edit screen
- Fix some pkpass files not being detected as pkpass (application/vnd-com.apple.pkpass mime type support)
## v2.34.2 - 144 (2024-12-26)
- Improve archive/starred icon display
## v2.34.1 - 143 (2024-12-12)
- Fix crash when opening invalid pkpass files
## v2.34.0 - 142 (2024-12-10)
- Add Passbook (.pkpass) support
- Fix import of transparent PDF files
- Improve display of transparent thumbnails
## v2.33.0 - 141 (2024-11-19)
- Change default column on wide screens to 4
- Allow overriding column counts for portrait and landscape in settings
- Keep main screen search filter when rotating screen or opening a card
- Limit max length of note display on main screen
## v2.32.1 - 140 (2024-10-29)
- Fix text wrapping on add dialog
## v2.32.0 - 139 (2024-10-28)
- Option to navigate cards using the volume buttons
- Fix Stocard import
- Fix "Import cancelled" message appearing after successful import
## v2.31.1 - 138 (2024-08-24)
- Fix back gesture on main screen dismissing keyboard and search on Android 13+
## v2.31.0 - 137 (2024-07-26)
- Allow long store names in preview to split over multiple lines

128
CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,128 @@
# Contributor Covenant Code of Conduct
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
catima.g9ex3@hackerchick.me.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

View File

@@ -36,10 +36,6 @@ These are the Android lint checker, run using:
# ./gradlew lintRelease
and SpotBugs, run using:
# ./gradlew spotbugsRelease
The final check is by testing the application on a live device and verifying
the basic functionality works as expected.

View File

@@ -1,3 +1,8 @@
source "https://rubygems.org"
gem "fastlane"
# https://github.com/fastlane/fastlane/issues/29183
gem "abbrev"
gem "mutex_m"
gem "ostruct"

View File

@@ -5,41 +5,44 @@ GEM
base64
nkf
rexml
addressable (2.8.6)
public_suffix (>= 2.0.2, < 6.0)
abbrev (0.1.2)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
artifactory (3.0.17)
atomos (0.1.3)
aws-eventstream (1.3.0)
aws-partitions (1.945.0)
aws-sdk-core (3.197.1)
aws-eventstream (1.4.0)
aws-partitions (1.1117.0)
aws-sdk-core (3.226.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.651.0)
aws-sigv4 (~> 1.8)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
base64
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.85.0)
aws-sdk-core (~> 3, >= 3.197.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.152.3)
aws-sdk-core (~> 3, >= 3.197.0)
logger
aws-sdk-kms (1.105.0)
aws-sdk-core (~> 3, >= 3.225.0)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.189.1)
aws-sdk-core (~> 3, >= 3.225.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.8)
aws-sigv4 (1.8.0)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.12.1)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
base64 (0.2.0)
base64 (0.3.0)
claide (1.1.0)
colored (1.2)
colored2 (3.1.2)
commander (4.6.0)
highline (~> 2.0.0)
declarative (0.0.20)
digest-crc (0.6.5)
digest-crc (0.7.0)
rake (>= 12.0.0, < 14.0.0)
domain_name (0.6.20240107)
dotenv (2.8.1)
emoji_regex (3.2.3)
excon (0.110.0)
faraday (1.10.3)
excon (0.112.0)
faraday (1.10.4)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
@@ -55,20 +58,20 @@ GEM
faraday (>= 0.8.0)
http-cookie (~> 1.0.0)
faraday-em_http (1.0.0)
faraday-em_synchrony (1.0.0)
faraday-em_synchrony (1.0.1)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-multipart (1.0.4)
multipart-post (~> 2)
faraday-net_http (1.0.1)
faraday-multipart (1.1.1)
multipart-post (~> 2.0)
faraday-net_http (1.0.2)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
faraday-retry (1.0.3)
faraday_middleware (1.2.0)
faraday_middleware (1.2.1)
faraday (~> 1.0)
fastimage (2.3.1)
fastlane (2.221.1)
fastimage (2.4.0)
fastlane (2.228.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
@@ -84,6 +87,7 @@ GEM
faraday-cookie_jar (~> 0.0.6)
faraday_middleware (~> 1.0)
fastimage (>= 2.1.0, < 3.0.0)
fastlane-sirp (>= 1.0.0)
gh_inspector (>= 1.1.2, < 2.0.0)
google-apis-androidpublisher_v3 (~> 0.3)
google-apis-playcustomapp_v1 (~> 0.1)
@@ -107,8 +111,10 @@ GEM
tty-spinner (>= 0.8.0, < 1.0.0)
word_wrap (~> 1.0.0)
xcodeproj (>= 1.13.0, < 2.0.0)
xcpretty (~> 0.3.0)
xcpretty (~> 0.4.1)
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
fastlane-sirp (1.0.0)
sysrandom (~> 1.0)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.54.0)
google-apis-core (>= 0.11.0, < 2.a)
@@ -126,12 +132,12 @@ GEM
google-apis-core (>= 0.11.0, < 2.a)
google-apis-storage_v1 (0.31.0)
google-apis-core (>= 0.11.0, < 2.a)
google-cloud-core (1.7.0)
google-cloud-core (1.8.0)
google-cloud-env (>= 1.0, < 3.a)
google-cloud-errors (~> 1.0)
google-cloud-env (1.6.0)
faraday (>= 0.17.3, < 3.0)
google-cloud-errors (1.4.0)
google-cloud-errors (1.5.0)
google-cloud-storage (1.47.0)
addressable (~> 2.8)
digest-crc (~> 0.4)
@@ -147,37 +153,40 @@ GEM
os (>= 0.9, < 2.0)
signet (>= 0.16, < 2.a)
highline (2.0.3)
http-cookie (1.0.6)
http-cookie (1.0.8)
domain_name (~> 0.5)
httpclient (2.8.3)
httpclient (2.9.0)
mutex_m
jmespath (1.6.2)
json (2.7.2)
jwt (2.8.2)
json (2.12.2)
jwt (2.10.1)
base64
mini_magick (4.13.1)
logger (1.7.0)
mini_magick (4.13.2)
mini_mime (1.1.5)
multi_json (1.15.0)
multipart-post (2.4.1)
nanaimo (0.3.0)
naturally (2.2.1)
mutex_m (0.3.0)
nanaimo (0.4.0)
naturally (2.3.0)
nkf (0.2.0)
optparse (0.5.0)
optparse (0.6.0)
os (1.1.4)
plist (3.7.1)
public_suffix (5.1.1)
rake (13.2.1)
ostruct (0.6.1)
plist (3.7.2)
public_suffix (6.0.2)
rake (13.3.0)
representable (3.2.0)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
retriable (3.1.2)
rexml (3.2.9)
strscan
rouge (2.0.7)
rexml (3.4.1)
rouge (3.28.0)
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
rubyzip (2.4.1)
security (0.1.5)
signet (0.19.0)
signet (0.20.0)
addressable (~> 2.8)
faraday (>= 0.17.5, < 3.a)
jwt (>= 1.5, < 3.0)
@@ -185,7 +194,7 @@ GEM
simctl (1.6.10)
CFPropertyList
naturally
strscan (3.1.0)
sysrandom (1.0.5)
terminal-notifier (2.0.0)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
@@ -195,17 +204,17 @@ GEM
tty-spinner (0.9.3)
tty-cursor (~> 0.7)
uber (0.1.0)
unicode-display_width (2.5.0)
unicode-display_width (2.6.0)
word_wrap (1.0.0)
xcodeproj (1.24.0)
xcodeproj (1.27.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
nanaimo (~> 0.3.0)
rexml (~> 3.2.4)
xcpretty (0.3.0)
rouge (~> 2.0.7)
nanaimo (~> 0.4.0)
rexml (>= 3.3.6, < 4.0)
xcpretty (0.4.1)
rouge (~> 3.28.0)
xcpretty-travis-formatter (1.0.1)
xcpretty (~> 0.2, >= 0.0.7)
@@ -213,7 +222,10 @@ PLATFORMS
ruby
DEPENDENCIES
abbrev
fastlane
mutex_m
ostruct
BUNDLED WITH
2.5.9
2.5.22

View File

@@ -1,33 +1,34 @@
import com.android.build.gradle.internal.tasks.factory.dependsOn
import com.github.spotbugs.snom.SpotBugsTask
plugins {
id("com.android.application")
id("com.github.spotbugs")
id("org.jetbrains.kotlin.android")
}
spotbugs {
ignoreFailures.set(false)
setEffort("max")
excludeFilter.set(file("./config/spotbugs/exclude.xml"))
reportsDir.set(layout.buildDirectory.file("reports/spotbugs/").get().asFile)
kotlin {
jvmToolchain(21)
}
android {
namespace = "protect.card_locker"
compileSdk = 34
compileSdk = 35
defaultConfig {
applicationId = "me.hackerchick.catima"
minSdk = 21
targetSdk = 34
versionCode = 137
versionName = "2.31.0"
targetSdk = 35
versionCode = 151
versionName = "2.37.0"
vectorDrawables.useSupportLibrary = true
multiDexEnabled = true
resourceConfigurations += listOf("ar", "bg", "bn", "bn-rIN", "bs", "cs", "da", "de", "el-rGR", "en", "eo", "es", "es-rAR", "fi", "fr", "he-rIL", "hi", "hr", "hu", "in-rID", "is", "it", "ja", "ko", "lt", "lv", "nb-rNO", "nl", "oc", "pl", "pt-rBR", "pt-rPT", "ro-rRO", "ru", "sk", "sl", "sr", "sv", "tr", "uk", "vi", "zh-rCN", "zh-rTW")
resourceConfigurations += listOf("ar", "be", "bg", "bn", "bn-rIN", "bs", "cs", "da", "de", "el-rGR", "en", "eo", "es", "es-rAR", "et", "fa", "fi", "fr", "gl", "he-rIL", "hi", "hr", "hu", "in-rID", "is", "it", "ja", "ko", "lt", "lv", "nb-rNO", "nl", "oc", "pl", "pt", "pt-rBR", "pt-rPT", "ro-rRO", "ru", "sk", "sl", "sr", "sv", "ta", "tr", "uk", "vi", "zh-rCN", "zh-rTW")
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
buildConfigField("boolean", "showDonate", "true")
buildConfigField("boolean", "showRateOnGooglePlay", "false")
}
buildTypes {
@@ -48,6 +49,21 @@ android {
viewBinding = true
}
flavorDimensions.add("type")
productFlavors {
create("foss") {
dimension = "type"
isDefault = true
}
create("gplay") {
dimension = "type"
// Google doesn't allow donation links
buildConfigField("boolean", "showDonate", "false")
buildConfigField("boolean", "showRateOnGooglePlay", "true")
}
}
bundle {
language {
enableSplit = false
@@ -60,8 +76,8 @@ android {
// Flag to enable support for the new language APIs
isCoreLibraryDesugaringEnabled = true
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
sourceSets {
@@ -82,49 +98,49 @@ android {
lint {
lintConfig = file("lint.xml")
}
kotlinOptions {
jvmTarget = "21"
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
}
dependencies {
// AndroidX
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
implementation("androidx.exifinterface:exifinterface:1.3.7")
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")
implementation("androidx.preference:preference:1.2.1")
implementation("com.google.android.material:material:1.12.0")
implementation("com.github.yalantis:ucrop:2.2.9")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
// Splash Screen
implementation("androidx.core:core-splashscreen:1.0.1")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5")
// Third-party
implementation("com.journeyapps:zxing-android-embedded:4.3.0@aar")
implementation("com.github.yalantis:ucrop:2.2.10")
implementation("com.google.zxing:core:3.5.3")
implementation("org.apache.commons:commons-csv:1.9.0")
implementation("com.jaredrummler:colorpicker:1.1.0")
implementation("net.lingala.zip4j:zip4j:2.11.5")
// SpotBugs
implementation("io.wcm.tooling.spotbugs:io.wcm.tooling.spotbugs.annotations:1.0.0")
// Testing
testImplementation("androidx.test:core:1.6.1")
testImplementation("junit:junit:4.13.2")
testImplementation("org.robolectric:robolectric:4.13")
}
val androidXTestVersion = "1.7.0"
val junitVersion = "4.13.2"
testImplementation("androidx.test:core:$androidXTestVersion")
testImplementation("junit:junit:$junitVersion")
testImplementation("org.robolectric:robolectric:4.15.1")
tasks.withType<SpotBugsTask>().configureEach {
description = "Run spotbugs"
group = "verification"
//classes = fileTree("build/intermediates/javac/debug/compileDebugJavaWithJavac/classes")
//source = fileTree("src/main/java")
//classpath = files()
reports.maybeCreate("xml").required.set(false)
reports.maybeCreate("html").required.set(true)
androidTestImplementation("androidx.test:core:$androidXTestVersion")
androidTestImplementation("junit:junit:$junitVersion")
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.7.0")
}
tasks.register("copyRawResFiles", Copy::class) {

View File

@@ -0,0 +1,67 @@
package protect.card_locker;
import static androidx.test.espresso.Espresso.onView;
import static androidx.test.espresso.action.ViewActions.click;
import static androidx.test.espresso.action.ViewActions.typeText;
import static androidx.test.espresso.assertion.ViewAssertions.matches;
import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed;
import static androidx.test.espresso.matcher.ViewMatchers.withChild;
import static androidx.test.espresso.matcher.ViewMatchers.withId;
import static androidx.test.espresso.matcher.ViewMatchers.withText;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.junit.Assert.assertEquals;
import androidx.appcompat.widget.Toolbar;
import androidx.test.core.app.ActivityScenario;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.uiautomator.UiDevice;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(AndroidJUnit4.class)
public class MainActivitySearchViewTest {
@Test
public void whenSearchViewIsExpandedAndBackIsPressedThenMenuItemShouldNotBeCollapsed() {
String query = "random arbitrary text";
try (ActivityScenario<MainActivity> mainActivityScenario = ActivityScenario.launch(MainActivity.class)) {
mainActivityScenario.onActivity(this::makeSearchMenuItemVisible);
onView(withId(R.id.action_search)).perform(click());
onView(withId(androidx.appcompat.R.id.search_src_text)).perform(typeText(query));
pressBack();
onView(withId(androidx.appcompat.R.id.search_src_text)).check(matches(withText(query)));
mainActivityScenario.onActivity(activity -> assertEquals(query, activity.mFilter));
}
}
@Test
public void whenSearchViewIsExpandedThenItShouldOnlyBeCollapsedWhenBackIsPressedTwice() {
try (ActivityScenario<MainActivity> mainActivityScenario = ActivityScenario.launch(MainActivity.class)) {
mainActivityScenario.onActivity(this::makeSearchMenuItemVisible);
onView(withId(R.id.action_search)).perform(click());
pressBack();
onView(withId(androidx.appcompat.R.id.search_src_text)).check(matches(isDisplayed()));
pressBack();
onView(withId(android.R.id.content)).check(matches(is(not(withChild(withId(androidx.appcompat.R.id.search_src_text))))));
}
}
private void makeSearchMenuItemVisible(MainActivity activity) {
Toolbar toolbar = activity.findViewById(R.id.toolbar);
toolbar.getMenu().findItem(R.id.action_search).setVisible(true);
}
private void pressBack() {
UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()).pressBack();
}
}

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima Fehlersuche</string>
</resources>

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Отстраняване на грешки в Catima</string>
</resources>

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">ক্যাটিমা ডিবাগ</string>
</resources>

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima Otklanjanje Grešaka</string>
</resources>

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Debugar Catima</string>
</resources>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Catima Debug</string>
</resources>
<string name="app_name">Catima Ladění</string>
</resources>

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima Datfygio</string>
</resources>

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima Fejlfinding</string>
</resources>

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima Debug</string>
</resources>

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima Depuración</string>
</resources>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Catima Debug</string>
</resources>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<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">Catima-vianmääritys</string>
</resources>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Débogage de Catima</string>
</resources>
</resources>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Depuración de Catima</string>
</resources>

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">Catima Villuleit</string>
</resources>

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catimaデバーグ</string>
</resources>

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima Feelerkorrektur</string>
</resources>

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima Klaidų Taisymas</string>
</resources>

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima atkļūdošana</string>
</resources>

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">कॅटिमा डीबग</string>
</resources>

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima Correcion d\'Errors</string>
</resources>

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima Odpravljanje Napak</string>
</resources>

View File

@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima Debug</string>
</resources>

View File

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

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Catima Hata Ayaklama</string>
</resources>
<string name="app_name">Catima Hata Ayıklama</string>
</resources>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">ⴽⴰⵜⵉⵎⴰ ⴰⵙⵔⴰⵡ</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"
@@ -40,12 +54,28 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="content"/>
<data android:host="*"/>
<data android:mimeType="image/*" />
<data android:mimeType="application/pdf" />
<data android:mimeType="application/vnd.apple.pkpass" />
<data android:mimeType="application/vnd-com.apple.pkpass" />
<data android:mimeType="application/vnd.espass-espass" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
<data android:mimeType="image/*" />
<data android:mimeType="application/pdf" />
<data android:mimeType="application/vnd.apple.pkpass" />
<data android:mimeType="application/vnd-com.apple.pkpass" />
<data android:mimeType="application/vnd.espass-espass" />
</intent-filter>
</activity>
<activity
@@ -59,17 +89,17 @@
<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"
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="stateHidden" />
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".LoyaltyCardEditActivity"
android:exported="true"
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="stateHidden">
android:windowSoftInputMode="adjustResize">
<intent-filter
android:autoVerify="true"
android:label="@string/app_name">
@@ -107,8 +137,7 @@
<activity
android:name=".BarcodeSelectorActivity"
android:label="@string/selectBarcodeTitle"
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="stateHidden" />
android:theme="@style/AppTheme.NoActionBar" />
<activity
android:name=".preferences.SettingsActivity"
android:label="@string/settings"
@@ -183,7 +212,8 @@
android:resource="@xml/file_provider_paths" />
</provider>
<service android:name=".CardsOnPowerScreenService" android:label="@string/app_name"
android:permission="android.permission.BIND_CONTROLS" android:exported="true">
android:permission="android.permission.BIND_CONTROLS" android:exported="true"
tools:targetApi="r">
<intent-filter>
<action android:name="android.service.controls.ControlsProviderService" />
</intent-filter>

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -1,147 +0,0 @@
package protect.card_locker;
import android.os.Bundle;
import android.text.Spanned;
import android.view.MenuItem;
import android.view.View;
import android.widget.ScrollView;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import protect.card_locker.databinding.AboutActivityBinding;
public class AboutActivity extends CatimaAppCompatActivity {
private static final String TAG = "Catima";
private AboutActivityBinding binding;
private AboutContent content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = AboutActivityBinding.inflate(getLayoutInflater());
content = new AboutContent(this);
setTitle(content.getPageTitle());
setContentView(binding.getRoot());
setSupportActionBar(binding.toolbar);
enableToolbarBackButton();
TextView copyright = binding.creditsSub;
copyright.setText(content.getCopyrightShort());
TextView versionHistory = binding.versionHistorySub;
versionHistory.setText(content.getVersionHistory());
binding.versionHistory.setTag("https://catima.app/changelog/");
binding.translate.setTag("https://hosted.weblate.org/engage/catima/");
binding.license.setTag("https://github.com/CatimaLoyalty/Android/blob/main/LICENSE");
binding.repo.setTag("https://github.com/CatimaLoyalty/Android/");
binding.privacy.setTag("https://catima.app/privacy-policy/");
binding.reportError.setTag("https://github.com/CatimaLoyalty/Android/issues");
binding.rate.setTag("https://play.google.com/store/apps/details?id=me.hackerchick.catima");
binding.donate.setTag("https://catima.app/donate");
boolean installedFromGooglePlay = Utils.installedFromGooglePlay(this);
// Hide Google Play rate button if not on Google Play
binding.rate.setVisibility(installedFromGooglePlay ? View.VISIBLE : View.GONE);
// Hide donate button on Google Play (Google Play doesn't allow donation links)
binding.donate.setVisibility(installedFromGooglePlay ? View.GONE : View.VISIBLE);
bindClickListeners();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onDestroy() {
super.onDestroy();
content.destroy();
clearClickListeners();
binding = null;
}
private void bindClickListeners() {
binding.versionHistory.setOnClickListener(this::showHistory);
binding.translate.setOnClickListener(this::openExternalBrowser);
binding.license.setOnClickListener(this::showLicense);
binding.repo.setOnClickListener(this::openExternalBrowser);
binding.privacy.setOnClickListener(this::showPrivacy);
binding.reportError.setOnClickListener(this::openExternalBrowser);
binding.rate.setOnClickListener(this::openExternalBrowser);
binding.donate.setOnClickListener(this::openExternalBrowser);
binding.credits.setOnClickListener(view -> showCredits());
}
private void clearClickListeners() {
binding.versionHistory.setOnClickListener(null);
binding.translate.setOnClickListener(null);
binding.license.setOnClickListener(null);
binding.repo.setOnClickListener(null);
binding.privacy.setOnClickListener(null);
binding.reportError.setOnClickListener(null);
binding.rate.setOnClickListener(null);
binding.donate.setOnClickListener(null);
binding.credits.setOnClickListener(null);
}
private void showCredits() {
showHTML(R.string.credits, content.getContributorInfo(), null);
}
private void showHistory(View view) {
showHTML(R.string.version_history, content.getHistoryInfo(), view);
}
private void showLicense(View view) {
showHTML(R.string.license, content.getLicenseInfo(), view);
}
private void showPrivacy(View view) {
showHTML(R.string.privacy_policy, content.getPrivacyInfo(), view);
}
private void showHTML(@StringRes int title, final Spanned text, @Nullable View view) {
int dialogContentPadding = getResources().getDimensionPixelSize(R.dimen.alert_dialog_content_padding);
TextView textView = new TextView(this);
textView.setText(text);
Utils.makeTextViewLinksClickable(textView, text);
ScrollView scrollView = new ScrollView(this);
scrollView.addView(textView);
scrollView.setPadding(dialogContentPadding, dialogContentPadding / 2, dialogContentPadding, 0);
// Create dialog
MaterialAlertDialogBuilder materialAlertDialogBuilder = new MaterialAlertDialogBuilder(this);
materialAlertDialogBuilder
.setTitle(title)
.setView(scrollView)
.setPositiveButton(R.string.ok, null);
// Add View online button if an URL is linked to this view
if (view != null && view.getTag() != null) {
materialAlertDialogBuilder.setNeutralButton(R.string.view_online, (dialog, which) -> openExternalBrowser(view));
}
// Show dialog
materialAlertDialogBuilder.show();
}
private void openExternalBrowser(View view) {
Object tag = view.getTag();
if (tag instanceof String && ((String) tag).startsWith("https://")) {
(new OpenWebLinkHandler()).openBrowser(this, (String) tag);
}
}
}

View File

@@ -0,0 +1,149 @@
package protect.card_locker
import android.os.Bundle
import android.text.Spanned
import android.view.MenuItem
import android.view.View
import android.widget.ScrollView
import android.widget.TextView
import androidx.annotation.StringRes
import androidx.core.view.isVisible
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import protect.card_locker.databinding.AboutActivityBinding
class AboutActivity : CatimaAppCompatActivity() {
private companion object {
private const val TAG = "Catima"
}
private lateinit var binding: AboutActivityBinding
private lateinit var content: AboutContent
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = AboutActivityBinding.inflate(layoutInflater)
content = AboutContent(this)
title = content.pageTitle
setContentView(binding.root)
setSupportActionBar(binding.toolbar)
enableToolbarBackButton()
binding.apply {
creditsSub.text = content.copyrightShort
versionHistorySub.text = content.versionHistory
versionHistory.tag = "https://catima.app/changelog/"
translate.tag = "https://hosted.weblate.org/engage/catima/"
license.tag = "https://github.com/CatimaLoyalty/Android/blob/main/LICENSE"
repo.tag = "https://github.com/CatimaLoyalty/Android/"
privacy.tag = "https://catima.app/privacy-policy/"
reportError.tag = "https://github.com/CatimaLoyalty/Android/issues"
rate.tag = "https://play.google.com/store/apps/details?id=me.hackerchick.catima"
donate.tag = "https://catima.app/donate"
// Hide Google Play rate button if not on Google Play
rate.isVisible = BuildConfig.showRateOnGooglePlay
// Hide donate button on Google Play (Google Play doesn't allow donation links)
donate.isVisible = BuildConfig.showDonate
}
bindClickListeners()
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when (item.itemId) {
android.R.id.home -> {
finish()
true
}
else -> super.onOptionsItemSelected(item)
}
}
override fun onDestroy() {
super.onDestroy()
content.destroy()
clearClickListeners()
}
private fun bindClickListeners() {
binding.apply {
versionHistory.setOnClickListener { showHistory(it) }
translate.setOnClickListener { openExternalBrowser(it) }
license.setOnClickListener { showLicense(it) }
repo.setOnClickListener { openExternalBrowser(it) }
privacy.setOnClickListener { showPrivacy(it) }
reportError.setOnClickListener { openExternalBrowser(it) }
rate.setOnClickListener { openExternalBrowser(it) }
donate.setOnClickListener { openExternalBrowser(it) }
credits.setOnClickListener { showCredits() }
}
}
private fun clearClickListeners() {
binding.apply {
versionHistory.setOnClickListener(null)
translate.setOnClickListener(null)
license.setOnClickListener(null)
repo.setOnClickListener(null)
privacy.setOnClickListener(null)
reportError.setOnClickListener(null)
rate.setOnClickListener(null)
donate.setOnClickListener(null)
credits.setOnClickListener(null)
}
}
private fun showCredits() {
showHTML(R.string.credits, content.contributorInfo, null)
}
private fun showHistory(view: View) {
showHTML(R.string.version_history, content.historyInfo, view)
}
private fun showLicense(view: View) {
showHTML(R.string.license, content.licenseInfo, view)
}
private fun showPrivacy(view: View) {
showHTML(R.string.privacy_policy, content.privacyInfo, view)
}
private fun showHTML(@StringRes title: Int, text: Spanned, view: View?) {
val dialogContentPadding = resources.getDimensionPixelSize(R.dimen.alert_dialog_content_padding)
val textView = TextView(this).apply {
setText(text)
Utils.makeTextViewLinksClickable(this, text)
}
val scrollView = ScrollView(this).apply {
addView(textView)
setPadding(dialogContentPadding, dialogContentPadding / 2, dialogContentPadding, 0)
}
MaterialAlertDialogBuilder(this).apply {
setTitle(title)
setView(scrollView)
setPositiveButton(R.string.ok, null)
// Add View online button if an URL is linked to this view
view?.tag?.let {
setNeutralButton(R.string.view_online) { _, _ -> openExternalBrowser(view) }
}
show()
}
}
private fun openExternalBrowser(view: View) {
val tag = view.tag
if (tag is String && tag.startsWith("https://")) {
OpenWebLinkHandler().openBrowser(this, tag)
}
}
}

View File

@@ -49,7 +49,7 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
BarcodeImageWriterTask(
Context context, ImageView imageView, String cardIdString,
CatimaBarcode barcodeFormat, TextView textView,
boolean showFallback, BarcodeImageWriterResultCallback callback, boolean roundCornerPadding
boolean showFallback, BarcodeImageWriterResultCallback callback, boolean roundCornerPadding, boolean isFullscreen
) {
mContext = context;
@@ -86,13 +86,13 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
if (format.isSquare()) {
imageHeight = imageWidth = Math.min(imageViewHeight, Math.min(MAX_WIDTH, imageViewWidth));
} else if (imageView.getWidth() < MAX_WIDTH) {
} else if (imageView.getWidth() < MAX_WIDTH && !isFullscreen) {
imageHeight = imageViewHeight;
imageWidth = imageViewWidth;
} else {
// Scale down the image to reduce the memory needed to produce it
imageWidth = MAX_WIDTH;
double ratio = (double) MAX_WIDTH / (double) imageViewWidth;
imageWidth = Math.min(MAX_WIDTH, this.mContext.getResources().getDisplayMetrics().widthPixels);
double ratio = (double) imageWidth / (double) imageViewWidth;
imageHeight = (int) (imageViewHeight * ratio);
}

View File

@@ -1,125 +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());
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("initialCardId") : 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

@@ -92,13 +92,13 @@ public class BarcodeSelectorAdapter extends ArrayAdapter<CatimaBarcodeWithValue>
Log.d(TAG, "Generating barcode for type " + formatType);
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null, true);
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null, true, false);
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
}
});
} else {
Log.d(TAG, "Generating barcode for type " + formatType);
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null, true);
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null, true, false);
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
}
}

View File

@@ -1,26 +0,0 @@
package protect.card_locker;
public class BarcodeValues {
private final String mFormat;
private final String mContent;
private String mNote;
public BarcodeValues(String format, String content) {
mFormat = format;
mContent = content;
}
public void setNote(String note) {
mNote = note;
}
public String format() {
return mFormat;
}
public String content() {
return mContent;
}
public String note() { return mNote; }
}

View File

@@ -1,6 +0,0 @@
package protect.card_locker;
public interface BarcodeValuesListDisambiguatorCallback {
void onUserChoseBarcode(BarcodeValues barcodeValues);
void onUserDismissedSelector();
}

View File

@@ -1,105 +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 androidx.recyclerview.widget.RecyclerView;
import protect.card_locker.databinding.SimpleToolbarListActivityBinding;
/**
* The configuration screen for creating a shortcut.
*/
public class CardShortcutConfigure extends CatimaAppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener {
private SimpleToolbarListActivityBinding binding;
static final String TAG = "Catima";
private SQLiteDatabase mDatabase;
private LoyaltyCardCursorAdapter mAdapter;
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
binding = SimpleToolbarListActivityBinding.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());
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();
}
final RecyclerView cardList = binding.list;
GridLayoutManager layoutManager = (GridLayoutManager) cardList.getLayoutManager();
if (layoutManager != null) {
layoutManager.setSpanCount(getResources().getInteger(R.integer.main_view_card_columns));
}
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.All);
mAdapter = new LoyaltyCardCursorAdapter(this, cardCursor, this, null);
cardList.setAdapter(mAdapter);
}
private void onClickAction(int position) {
Cursor selected = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.All);
selected.moveToPosition(position);
LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(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

@@ -42,10 +42,10 @@ public class CardsOnPowerScreenService extends ControlsProviderService {
Cursor loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.Unarchived);
return subscriber -> {
while (loyaltyCardCursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(loyaltyCardCursor);
LoyaltyCard card = LoyaltyCard.fromCursor(this, loyaltyCardCursor);
Intent openIntent = new Intent(this, LoyaltyCardViewActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra("id", card.id);
.putExtra(LoyaltyCardViewActivity.BUNDLE_ID, card.id);
PendingIntent pendingIntent = PendingIntent.getActivity(getBaseContext(), card.id, openIntent, PendingIntent.FLAG_IMMUTABLE);
subscriber.onNext(
new Control.StatelessBuilder(PREFIX + card.id, pendingIntent)
@@ -69,11 +69,11 @@ public class CardsOnPowerScreenService extends ControlsProviderService {
for (String controlId : controlIds) {
Control control;
Integer cardId = this.controlIdToCardId(controlId);
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, cardId);
LoyaltyCard card = DBHelper.getLoyaltyCard(this, mDatabase, cardId);
if (card != null) {
Intent openIntent = new Intent(this, LoyaltyCardViewActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra("id", card.id);
.putExtra(LoyaltyCardViewActivity.BUNDLE_ID, card.id);
PendingIntent pendingIntent = PendingIntent.getActivity(getBaseContext(), card.id, openIntent, PendingIntent.FLAG_IMMUTABLE);
control = new Control.StatefulBuilder(controlId, pendingIntent)
.setTitle(card.store)
@@ -99,7 +99,7 @@ public class CardsOnPowerScreenService extends ControlsProviderService {
}
private Bitmap getIcon(Context context, LoyaltyCard loyaltyCard) {
Bitmap cardIcon = Utils.retrieveCardImage(context, loyaltyCard.id, ImageLocationType.icon);
Bitmap cardIcon = loyaltyCard.getImageThumbnail(context);
if (cardIcon != null) {
return cardIcon;
@@ -129,7 +129,7 @@ public class CardsOnPowerScreenService extends ControlsProviderService {
consumer.accept(ControlAction.RESPONSE_OK);
Intent openIntent = new Intent(this, LoyaltyCardViewActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra("id", controlIdToCardId(controlId));
.putExtra(LoyaltyCardViewActivity.BUNDLE_ID, controlIdToCardId(controlId));
startActivity(openIntent);
closePowerScreenOnAndroid11();

View File

@@ -7,6 +7,7 @@ import android.os.Bundle;
import android.view.View;
import android.view.Window;
import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar;
@@ -24,6 +25,7 @@ public class CatimaAppCompatActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
EdgeToEdge.enable(this);
super.onCreate(savedInstanceState);
Utils.patchColors(this);
}

View File

@@ -1,5 +1,7 @@
package protect.card_locker;
import androidx.annotation.NonNull;
import com.google.zxing.BarcodeFormat;
import java.util.Arrays;
@@ -45,15 +47,15 @@ public class CatimaBarcode {
mBarcodeFormat = barcodeFormat;
}
public static CatimaBarcode fromBarcode(BarcodeFormat barcodeFormat) {
public static CatimaBarcode fromBarcode(@NonNull BarcodeFormat barcodeFormat) {
return new CatimaBarcode(barcodeFormat);
}
public static CatimaBarcode fromName(String name) {
public static CatimaBarcode fromName(@NonNull String name) {
return new CatimaBarcode(BarcodeFormat.valueOf(name));
}
public static CatimaBarcode fromPrettyName(String prettyName) {
public static CatimaBarcode fromPrettyName(@NonNull String prettyName) {
try {
return new CatimaBarcode(barcodeFormats.get(barcodePrettyNames.indexOf(prettyName)));
} catch (IndexOutOfBoundsException e) {

View File

@@ -23,10 +23,11 @@ import java.util.Set;
public class DBHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "Catima.db";
public static final int ORIGINAL_DATABASE_VERSION = 1;
public static final int DATABASE_VERSION = 16;
public static final int DATABASE_VERSION = 17;
// NB: changing this value requires a migration
// NB: changing these values requires a migration
public static final int DEFAULT_ZOOM_LEVEL = 100;
public static final int DEFAULT_ZOOM_LEVEL_WIDTH = 100;
public static class LoyaltyCardDbGroups {
public static final String TABLE = "groups";
@@ -51,6 +52,7 @@ public class DBHelper extends SQLiteOpenHelper {
public static final String STAR_STATUS = "starstatus";
public static final String LAST_USED = "lastused";
public static final String ZOOM_LEVEL = "zoomlevel";
public static final String ZOOM_LEVEL_WIDTH = "zoomlevelwidth";
public static final String ARCHIVE_STATUS = "archive";
}
@@ -70,6 +72,7 @@ public class DBHelper extends SQLiteOpenHelper {
public enum LoyaltyCardOrder {
Alpha,
LastUsed,
ValidFrom,
Expiry
}
@@ -112,6 +115,7 @@ public class DBHelper extends SQLiteOpenHelper {
LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0'," +
LoyaltyCardDbIds.LAST_USED + " INTEGER DEFAULT '0', " +
LoyaltyCardDbIds.ZOOM_LEVEL + " INTEGER DEFAULT '" + DEFAULT_ZOOM_LEVEL + "', " +
LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH + " INTEGER DEFAULT '" + DEFAULT_ZOOM_LEVEL_WIDTH + "', " +
LoyaltyCardDbIds.ARCHIVE_STATUS + " INTEGER DEFAULT '0' )");
// create associative table for cards in groups
@@ -326,16 +330,21 @@ public class DBHelper extends SQLiteOpenHelper {
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
+ " ADD COLUMN " + LoyaltyCardDbIds.VALID_FROM + " INTEGER");
}
if (oldVersion < 17 && newVersion >= 17) {
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
+ " ADD COLUMN " + LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH + " INTEGER DEFAULT '100' ");
}
}
public static Set<String> imageFiles(Context context, final SQLiteDatabase database) {
Set<String> files = new HashSet<>();
Cursor cardCursor = getLoyaltyCardCursor(database);
while (cardCursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cardCursor);
LoyaltyCard card = LoyaltyCard.fromCursor(context, cardCursor);
for (ImageLocationType imageLocationType : ImageLocationType.values()) {
String name = Utils.getCardImageFileName(card.id, imageLocationType);
if (Utils.retrieveCardImageAsFile(context, name).exists()) {
if (card.getImageForImageLocationType(context, imageLocationType) != null) {
files.add(name);
}
}
@@ -515,15 +524,17 @@ public class DBHelper extends SQLiteOpenHelper {
return (rowsUpdated == 1);
}
public static boolean updateLoyaltyCardZoomLevel(SQLiteDatabase database, int loyaltyCardId, int zoomLevel) {
public static boolean updateLoyaltyCardZoomLevel(SQLiteDatabase database, int loyaltyCardId, int zoomLevel, int zoomLevelWidth) {
ContentValues contentValues = new ContentValues();
contentValues.put(LoyaltyCardDbIds.ZOOM_LEVEL, zoomLevel);
contentValues.put(LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH, zoomLevelWidth);
Log.d("updateLoyaltyCardZLevel", "Card Id = " + loyaltyCardId + " Zoom level= " + zoomLevel);
Log.d("updateLoyaltyCardZoomLW", "Card Id = " + loyaltyCardId + " Zoom level width= " + zoomLevelWidth);
int rowsUpdated = database.update(LoyaltyCardDbIds.TABLE, contentValues,
whereAttrs(LoyaltyCardDbIds.ID),
withArgs(loyaltyCardId));
Log.d("updateLoyaltyCardZLevel", "Rows changed = " + rowsUpdated);
return (rowsUpdated == 1);
Log.d("updateLoyaltyCardZLevel", "Card Id = " + loyaltyCardId + " Zoom level = " + zoomLevel + " Zoom level width = " + zoomLevelWidth);
return (rowsUpdated >= 1);
}
public static boolean updateLoyaltyCardBalance(SQLiteDatabase database, final int id, final BigDecimal newBalance) {
@@ -535,14 +546,14 @@ public class DBHelper extends SQLiteOpenHelper {
return (rowsUpdated == 1);
}
public static LoyaltyCard getLoyaltyCard(SQLiteDatabase database, final int id) {
public static LoyaltyCard getLoyaltyCard(Context context, SQLiteDatabase database, final int id) {
Cursor data = database.query(LoyaltyCardDbIds.TABLE, null, whereAttrs(LoyaltyCardDbIds.ID), withArgs(id), null, null, null);
LoyaltyCard card = null;
if (data.getCount() == 1) {
data.moveToFirst();
card = LoyaltyCard.toLoyaltyCard(data);
card = LoyaltyCard.fromCursor(context, data);
}
data.close();
@@ -916,6 +927,10 @@ public class DBHelper extends SQLiteOpenHelper {
return LoyaltyCardDbIds.LAST_USED;
}
if (order == LoyaltyCardOrder.ValidFrom) {
return LoyaltyCardDbIds.VALID_FROM;
}
if (order == LoyaltyCardOrder.Expiry) {
return LoyaltyCardDbIds.EXPIRY;
}

View File

@@ -50,7 +50,6 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
private ActivityResultLauncher<Intent> fileCreateLauncher;
private ActivityResultLauncher<String> fileOpenLauncher;
private ActivityResultLauncher<Intent> filePickerLauncher;
final private TaskHandler mTasks = new TaskHandler();
@@ -60,13 +59,14 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
binding = ImportExportActivityBinding.inflate(getLayoutInflater());
setTitle(R.string.importExport);
setContentView(binding.getRoot());
Utils.applyWindowInsets(binding.getRoot());
Toolbar toolbar = binding.toolbar;
setSupportActionBar(toolbar);
enableToolbarBackButton();
Intent fileIntent = getIntent();
if (fileIntent != null && fileIntent.getType() != null) {
chooseImportType(false, fileIntent.getData());
chooseImportType(fileIntent.getData());
}
// would use ActivityResultContracts.CreateDocument() but mime type cannot be set
@@ -104,19 +104,6 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
}
openFileForImport(result, null);
});
filePickerLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
Intent intent = result.getData();
if (intent == null) {
Log.e(TAG, "Activity returned NULL data");
return;
}
Uri uri = intent.getData();
if (uri == null) {
Log.e(TAG, "Activity returned NULL uri");
return;
}
openFileForImport(intent.getData(), null);
});
// Check that there is a file manager available
final Intent intentCreateDocumentAction = new Intent(Intent.ACTION_CREATE_DOCUMENT);
@@ -159,11 +146,7 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
// Check that there is a file manager available
Button importFilesystem = binding.importOptionFilesystemButton;
importFilesystem.setOnClickListener(v -> chooseImportType(false, null));
// Check that there is an app that data can be imported from
Button importApplication = binding.importOptionApplicationButton;
importApplication.setOnClickListener(v -> chooseImportType(true, null));
importFilesystem.setOnClickListener(v -> chooseImportType(null));
// FIXME: The importer/exporter is currently quite broken
// To prevent the screen from turning off during import/export and some devices killing Catima as it's no longer foregrounded, force the screen to stay on here
@@ -188,8 +171,7 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
}.start();
}
private void chooseImportType(boolean choosePicker,
@Nullable Uri fileData) {
private void chooseImportType(@Nullable Uri fileData) {
List<CharSequence> betaImportOptions = new ArrayList<>();
betaImportOptions.add("Fidme");
@@ -250,20 +232,12 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
new MaterialAlertDialogBuilder(this)
.setTitle(importAlertTitle)
.setMessage(importAlertMessage)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
try {
if (choosePicker) {
final Intent intentPickAction = new Intent(Intent.ACTION_PICK);
filePickerLauncher.launch(intentPickAction);
} else {
fileOpenLauncher.launch("*/*");
}
} catch (ActivityNotFoundException e) {
Toast.makeText(getApplicationContext(), R.string.failedOpeningFileManager, Toast.LENGTH_LONG).show();
Log.e(TAG, "No activity found to handle intent", e);
}
.setPositiveButton(R.string.ok, (dialog1, which1) -> {
try {
fileOpenLauncher.launch("*/*");
} catch (ActivityNotFoundException e) {
Toast.makeText(getApplicationContext(), R.string.failedOpeningFileManager, Toast.LENGTH_LONG).show();
Log.e(TAG, "No activity found to handle intent", e);
}
})
.setNegativeButton(R.string.cancel, null)

View File

@@ -91,18 +91,14 @@ public class ImportExportTask implements CompatCallable<ImportExportResult> {
progress = new ProgressDialog(activity);
progress.setTitle(doImport ? R.string.importing : R.string.exporting);
progress.setOnCancelListener(dialog -> cancel(doImport, true));
progress.setOnDismissListener(dialog -> cancel(doImport, true));
progress.setOnCancelListener(dialog -> cancel());
progress.setOnDismissListener(dialog -> cancel());
progress.show();
}
private void cancel(boolean isImport, boolean showToast) {
private void cancel() {
ImportExportTask.this.stop();
if (showToast) {
Toast.makeText(activity, isImport ? R.string.importCancelled : R.string.exportCancelled, Toast.LENGTH_LONG).show();
}
}
protected ImportExportResult doInBackground(Void... nothing) {

View File

@@ -125,7 +125,30 @@ public class ImportURIHelper {
headerColor = Integer.parseInt(unparsedHeaderColor);
}
return new LoyaltyCard(-1, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, 0, Utils.getUnixTime(), 100, 0);
return new LoyaltyCard(
-1,
store,
note,
validFrom,
expiry,
balance,
balanceType,
cardId,
barcodeId,
barcodeType,
headerColor,
0,
Utils.getUnixTime(),
100,
100,
0,
null,
null,
null,
null,
null,
null
);
} catch (NumberFormatException | UnsupportedEncodingException | ArrayIndexOutOfBoundsException ex) {
throw new InvalidObjectException("Not a valid import URI");
}

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

@@ -1,8 +1,9 @@
package protect.card_locker;
import android.content.Context;
import android.database.Cursor;
import android.os.Parcel;
import android.os.Parcelable;
import android.graphics.Bitmap;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -10,142 +11,577 @@ import androidx.annotation.Nullable;
import java.math.BigDecimal;
import java.util.Currency;
import java.util.Date;
import java.util.List;
import java.util.Objects;
public class LoyaltyCard implements Parcelable {
public final int id;
public final String store;
public final String note;
public class LoyaltyCard {
public int id;
public String store;
public String note;
@Nullable
public final Date validFrom;
public Date validFrom;
@Nullable
public final Date expiry;
public final BigDecimal balance;
public Date expiry;
public BigDecimal balance;
@Nullable
public final Currency balanceType;
public final String cardId;
public Currency balanceType;
public String cardId;
@Nullable
public final String barcodeId;
public String barcodeId;
@Nullable
public final CatimaBarcode barcodeType;
public CatimaBarcode barcodeType;
@Nullable
public final Integer headerColor;
public final int starStatus;
public final int archiveStatus;
public final long lastUsed;
public Integer headerColor;
public int starStatus;
public long lastUsed;
public int zoomLevel;
public int zoomLevelWidth;
public int archiveStatus;
@Nullable
private Bitmap imageThumbnail;
@Nullable
private String imageThumbnailPath;
@Nullable
private Bitmap imageFront;
@Nullable
private String imageFrontPath;
@Nullable
private Bitmap imageBack;
@Nullable
private String imageBackPath;
public static final String BUNDLE_LOYALTY_CARD_ID = "loyaltyCardId";
public static final String BUNDLE_LOYALTY_CARD_STORE = "loyaltyCardStore";
public static final String BUNDLE_LOYALTY_CARD_NOTE = "loyaltyCardNote";
public static final String BUNDLE_LOYALTY_CARD_VALID_FROM = "loyaltyCardValidFrom";
public static final String BUNDLE_LOYALTY_CARD_EXPIRY = "loyaltyCardExpiry";
public static final String BUNDLE_LOYALTY_CARD_BALANCE = "loyaltyCardBalance";
public static final String BUNDLE_LOYALTY_CARD_BALANCE_TYPE = "loyaltyCardBalanceType";
public static final String BUNDLE_LOYALTY_CARD_CARD_ID = "loyaltyCardCardId";
public static final String BUNDLE_LOYALTY_CARD_BARCODE_ID = "loyaltyCardBarcodeId";
public static final String BUNDLE_LOYALTY_CARD_BARCODE_TYPE = "loyaltyCardBarcodeType";
public static final String BUNDLE_LOYALTY_CARD_HEADER_COLOR = "loyaltyCardHeaderColor";
public static final String BUNDLE_LOYALTY_CARD_STAR_STATUS = "loyaltyCardStarStatus";
public static final String BUNDLE_LOYALTY_CARD_LAST_USED = "loyaltyCardLastUsed";
public static final String BUNDLE_LOYALTY_CARD_ZOOM_LEVEL = "loyaltyCardZoomLevel";
public static final String BUNDLE_LOYALTY_CARD_ZOOM_LEVEL_WIDTH = "loyaltyCardZoomLevelWidth";
public static final String BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS = "loyaltyCardArchiveStatus";
public static final String BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL = "loyaltyCardImageThumbnail";
public static final String BUNDLE_LOYALTY_CARD_IMAGE_FRONT = "loyaltyCardImageFront";
public static final String BUNDLE_LOYALTY_CARD_IMAGE_BACK = "loyaltyCardImageBack";
private static final String TEMP_IMAGE_THUMBNAIL_FILE_NAME = "loyaltyCardTempImageThumbnailFileName";
private static final String TEMP_IMAGE_FRONT_FILE_NAME = "loyaltyCardTempImageFrontFileName";
private static final String TEMP_IMAGE_BACK_FILE_NAME = "loyaltyCardTempImageBackFileName";
/**
* Create a loyalty card object with default values
*/
public LoyaltyCard() {
setId(-1);
setStore("");
setNote("");
setValidFrom(null);
setExpiry(null);
setBalance(new BigDecimal("0"));
setBalanceType(null);
setCardId("");
setBarcodeId(null);
setBarcodeType(null);
setHeaderColor(null);
setStarStatus(0);
setLastUsed(Utils.getUnixTime());
setZoomLevel(100);
setZoomLevelWidth(100);
setArchiveStatus(0);
setImageThumbnail(null, null);
setImageFront(null, null);
setImageBack(null, null);
}
/**
* Create a new loyalty card
*
* @param id
* @param store
* @param note
* @param validFrom
* @param expiry
* @param balance
* @param balanceType
* @param cardId
* @param barcodeId
* @param barcodeType
* @param headerColor
* @param starStatus
* @param lastUsed
* @param zoomLevel
* @param zoomLevelWidth
* @param archiveStatus
*/
public LoyaltyCard(final int id, final String store, final String note, @Nullable final Date validFrom,
@Nullable final Date expiry, final BigDecimal balance, @Nullable final Currency balanceType,
final String cardId, @Nullable final String barcodeId, @Nullable final CatimaBarcode barcodeType,
@Nullable final Integer headerColor, final int starStatus,
final long lastUsed, final int zoomLevel, final int archiveStatus) {
final long lastUsed, final int zoomLevel, final int zoomLevelWidth, final int archiveStatus,
@Nullable Bitmap imageThumbnail, @Nullable String imageThumbnailPath,
@Nullable Bitmap imageFront, @Nullable String imageFrontPath,
@Nullable Bitmap imageBack, @Nullable String imageBackPath) {
setId(id);
setStore(store);
setNote(note);
setValidFrom(validFrom);
setExpiry(expiry);
setBalance(balance);
setBalanceType(balanceType);
setCardId(cardId);
setBarcodeId(barcodeId);
setBarcodeType(barcodeType);
setHeaderColor(headerColor);
setStarStatus(starStatus);
setLastUsed(lastUsed);
setZoomLevel(zoomLevel);
setZoomLevelWidth(zoomLevelWidth);
setArchiveStatus(archiveStatus);
setImageThumbnail(imageThumbnail, imageThumbnailPath);
setImageFront(imageFront, imageFrontPath);
setImageBack(imageBack, imageBackPath);
}
@Nullable
public Bitmap getImageThumbnail(Context context) {
if (imageThumbnailPath != null) {
if (imageThumbnailPath.equals(TEMP_IMAGE_THUMBNAIL_FILE_NAME)) {
imageThumbnail = Utils.loadTempImage(context, imageThumbnailPath);
} else {
imageThumbnail = Utils.retrieveCardImage(context, imageThumbnailPath);
}
imageThumbnailPath = null;
}
if (imageThumbnail == null) {
return null;
}
return imageThumbnail.copy(imageThumbnail.getConfig(), imageThumbnail.isMutable());
}
@Nullable
public Bitmap getImageFront(Context context) {
if (imageFrontPath != null) {
if (imageFrontPath.equals(TEMP_IMAGE_FRONT_FILE_NAME)) {
imageFront = Utils.loadTempImage(context, imageFrontPath);
} else {
imageFront = Utils.retrieveCardImage(context, imageFrontPath);
}
imageFrontPath = null;
}
if (imageFront == null) {
return null;
}
return imageFront.copy(imageFront.getConfig(), imageFront.isMutable());
}
@Nullable
public Bitmap getImageBack(Context context) {
if (imageBackPath != null) {
if (imageBackPath.equals(TEMP_IMAGE_BACK_FILE_NAME)) {
imageBack = Utils.loadTempImage(context, imageBackPath);
} else {
imageBack = Utils.retrieveCardImage(context, imageBackPath);
}
imageBackPath = null;
}
if (imageBack == null) {
return null;
}
return imageBack.copy(imageBack.getConfig(), imageBack.isMutable());
}
public void setId(int id) {
this.id = id;
}
public void setStore(@NonNull String store) {
this.store = store;
}
public void setNote(@NonNull String note) {
this.note = note;
}
public void setValidFrom(@Nullable Date validFrom) {
this.validFrom = validFrom;
}
public void setExpiry(@Nullable Date expiry) {
this.expiry = expiry;
}
public void setBalance(@NonNull BigDecimal balance) {
this.balance = balance;
}
public void setBalanceType(@Nullable Currency balanceType) {
this.balanceType = balanceType;
}
public void setCardId(@NonNull String cardId) {
this.cardId = cardId;
}
public void setBarcodeId(@Nullable String barcodeId) {
this.barcodeId = barcodeId;
}
public void setBarcodeType(@Nullable CatimaBarcode barcodeType) {
this.barcodeType = barcodeType;
}
public void setHeaderColor(@Nullable Integer headerColor) {
this.headerColor = headerColor;
}
public void setStarStatus(int starStatus) {
if (starStatus != 0 && starStatus != 1) {
throw new IllegalArgumentException("starStatus must be 0 or 1");
}
this.starStatus = starStatus;
}
public void setLastUsed(long lastUsed) {
this.lastUsed = lastUsed;
}
public void setZoomLevel(int zoomLevel) {
if (zoomLevel < 0 || zoomLevel > 100) {
throw new IllegalArgumentException("zoomLevel must be in range 0-100");
}
this.zoomLevel = zoomLevel;
}
public void setZoomLevelWidth(int zoomLevelWidth) {
if (zoomLevelWidth < 0 || zoomLevelWidth > 100) {
throw new IllegalArgumentException("zoomLevelWidth must be in range 0-100");
}
this.zoomLevelWidth = zoomLevelWidth;
}
public void setArchiveStatus(int archiveStatus) {
if (archiveStatus != 0 && archiveStatus != 1) {
throw new IllegalArgumentException("archiveStatus must be 0 or 1");
}
this.archiveStatus = archiveStatus;
}
protected LoyaltyCard(Parcel in) {
id = in.readInt();
store = in.readString();
note = in.readString();
long tmpValidFrom = in.readLong();
validFrom = tmpValidFrom != -1 ? new Date(tmpValidFrom) : null;
long tmpExpiry = in.readLong();
expiry = tmpExpiry != -1 ? new Date(tmpExpiry) : null;
balance = (BigDecimal) in.readValue(BigDecimal.class.getClassLoader());
balanceType = (Currency) in.readValue(Currency.class.getClassLoader());
cardId = in.readString();
barcodeId = in.readString();
String tmpBarcodeType = in.readString();
barcodeType = !tmpBarcodeType.isEmpty() ? CatimaBarcode.fromName(tmpBarcodeType) : null;
int tmpHeaderColor = in.readInt();
headerColor = tmpHeaderColor != -1 ? tmpHeaderColor : null;
starStatus = in.readInt();
lastUsed = in.readLong();
zoomLevel = in.readInt();
archiveStatus = in.readInt();
public void setImageThumbnail(@Nullable Bitmap imageThumbnail, @Nullable String imageThumbnailPath) {
if (imageThumbnail != null && imageThumbnailPath != null) {
throw new IllegalArgumentException("Cannot set both thumbnail and path");
}
this.imageThumbnailPath = imageThumbnailPath;
this.imageThumbnail = imageThumbnail != null ? imageThumbnail.copy(imageThumbnail.getConfig(), imageThumbnail.isMutable()) : null;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeInt(id);
parcel.writeString(store);
parcel.writeString(note);
parcel.writeLong(validFrom != null ? validFrom.getTime() : -1);
parcel.writeLong(expiry != null ? expiry.getTime() : -1);
parcel.writeValue(balance);
parcel.writeValue(balanceType);
parcel.writeString(cardId);
parcel.writeString(barcodeId);
parcel.writeString(barcodeType != null ? barcodeType.name() : "");
parcel.writeInt(headerColor != null ? headerColor : -1);
parcel.writeInt(starStatus);
parcel.writeLong(lastUsed);
parcel.writeInt(zoomLevel);
parcel.writeInt(archiveStatus);
public void setImageFront(@Nullable Bitmap imageFront, @Nullable String imageFrontPath) {
if (imageFront != null && imageFrontPath != null) {
throw new IllegalArgumentException("Cannot set both thumbnail and path");
}
this.imageFrontPath = imageFrontPath;
this.imageFront = imageFront != null ? imageFront.copy(imageFront.getConfig(), imageFront.isMutable()) : null;
}
public static LoyaltyCard toLoyaltyCard(Cursor cursor) {
public void setImageBack(@Nullable Bitmap imageBack, @Nullable String imageBackPath) {
if (imageBack != null && imageBackPath != null) {
throw new IllegalArgumentException("Cannot set both thumbnail and path");
}
this.imageBackPath = imageBackPath;
this.imageBack = imageBack != null ? imageBack.copy(imageBack.getConfig(), imageBack.isMutable()) : null;
}
@Nullable
public Bitmap getImageForImageLocationType(Context context, ImageLocationType imageLocationType) {
if (imageLocationType == ImageLocationType.icon) {
return getImageThumbnail(context);
} else if (imageLocationType == ImageLocationType.front) {
return getImageFront(context);
} else if (imageLocationType == ImageLocationType.back) {
return getImageBack(context);
}
throw new IllegalArgumentException("Unknown image location type");
}
public void updateFromBundle(@NonNull Bundle bundle, boolean requireFull) {
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_ID)) {
setId(bundle.getInt(BUNDLE_LOYALTY_CARD_ID));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_ID);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_STORE)) {
setStore(Objects.requireNonNull(bundle.getString(BUNDLE_LOYALTY_CARD_STORE)));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_STORE);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_NOTE)) {
setNote(Objects.requireNonNull(bundle.getString(BUNDLE_LOYALTY_CARD_NOTE)));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_NOTE);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_VALID_FROM)) {
long tmpValidFrom = bundle.getLong(BUNDLE_LOYALTY_CARD_VALID_FROM);
setValidFrom(tmpValidFrom > 0 ? new Date(tmpValidFrom) : null);
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_VALID_FROM);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_EXPIRY)) {
long tmpExpiry = bundle.getLong(BUNDLE_LOYALTY_CARD_EXPIRY);
setExpiry(tmpExpiry > 0 ? new Date(tmpExpiry) : null);
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_EXPIRY);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_BALANCE)) {
setBalance(new BigDecimal(bundle.getString(BUNDLE_LOYALTY_CARD_BALANCE)));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_BALANCE);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_BALANCE_TYPE)) {
String tmpBalanceType = bundle.getString(BUNDLE_LOYALTY_CARD_BALANCE_TYPE);
setBalanceType(tmpBalanceType != null ? Currency.getInstance(tmpBalanceType) : null);
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_BALANCE_TYPE);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_CARD_ID)) {
setCardId(Objects.requireNonNull(bundle.getString(BUNDLE_LOYALTY_CARD_CARD_ID)));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_CARD_ID);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_BARCODE_ID)) {
setBarcodeId(bundle.getString(BUNDLE_LOYALTY_CARD_BARCODE_ID));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_BARCODE_ID);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_BARCODE_TYPE)) {
String tmpBarcodeType = bundle.getString(BUNDLE_LOYALTY_CARD_BARCODE_TYPE);
setBarcodeType(tmpBarcodeType != null ? CatimaBarcode.fromName(tmpBarcodeType) : null);
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_BARCODE_TYPE);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_HEADER_COLOR)) {
int tmpHeaderColor = bundle.getInt(BUNDLE_LOYALTY_CARD_HEADER_COLOR);
setHeaderColor(tmpHeaderColor != -1 ? tmpHeaderColor : null);
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_HEADER_COLOR);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_STAR_STATUS)) {
setStarStatus(bundle.getInt(BUNDLE_LOYALTY_CARD_STAR_STATUS));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_STAR_STATUS);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_LAST_USED)) {
setLastUsed(bundle.getLong(BUNDLE_LOYALTY_CARD_LAST_USED));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_LAST_USED);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL)) {
setZoomLevel(bundle.getInt(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_ZOOM_LEVEL);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL_WIDTH)) {
setZoomLevelWidth(bundle.getInt(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL_WIDTH));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_ZOOM_LEVEL_WIDTH);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS)) {
setArchiveStatus(bundle.getInt(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL)) {
setImageThumbnail(null, bundle.getString(BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_IMAGE_FRONT)) {
setImageFront(null, bundle.getString(BUNDLE_LOYALTY_CARD_IMAGE_FRONT));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_IMAGE_FRONT);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_IMAGE_BACK)) {
setImageBack(null, bundle.getString(BUNDLE_LOYALTY_CARD_IMAGE_BACK));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_IMAGE_BACK);
}
}
public Bundle toBundle(Context context, List<String> exportLimit) {
boolean exportIsLimited = !exportLimit.isEmpty();
Bundle bundle = new Bundle();
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_ID)) {
bundle.putInt(BUNDLE_LOYALTY_CARD_ID, id);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_STORE)) {
bundle.putString(BUNDLE_LOYALTY_CARD_STORE, store);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_NOTE)) {
bundle.putString(BUNDLE_LOYALTY_CARD_NOTE, note);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_VALID_FROM)) {
bundle.putLong(BUNDLE_LOYALTY_CARD_VALID_FROM, validFrom != null ? validFrom.getTime() : -1);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_EXPIRY)) {
bundle.putLong(BUNDLE_LOYALTY_CARD_EXPIRY, expiry != null ? expiry.getTime() : -1);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_BALANCE)) {
bundle.putString(BUNDLE_LOYALTY_CARD_BALANCE, balance.toString());
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_BALANCE_TYPE)) {
bundle.putString(BUNDLE_LOYALTY_CARD_BALANCE_TYPE, balanceType != null ? balanceType.toString() : null);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_CARD_ID)) {
bundle.putString(BUNDLE_LOYALTY_CARD_CARD_ID, cardId);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_BARCODE_ID)) {
bundle.putString(BUNDLE_LOYALTY_CARD_BARCODE_ID, barcodeId);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_BARCODE_TYPE)) {
bundle.putString(BUNDLE_LOYALTY_CARD_BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_HEADER_COLOR)) {
bundle.putInt(BUNDLE_LOYALTY_CARD_HEADER_COLOR, headerColor != null ? headerColor : -1);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_STAR_STATUS)) {
bundle.putInt(BUNDLE_LOYALTY_CARD_STAR_STATUS, starStatus);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_LAST_USED)) {
bundle.putLong(BUNDLE_LOYALTY_CARD_LAST_USED, lastUsed);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL)) {
bundle.putInt(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL, zoomLevel);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL_WIDTH)) {
bundle.putInt(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL_WIDTH, zoomLevelWidth);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS)) {
bundle.putInt(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS, archiveStatus);
}
// There is an (undocumented) size limit to bundles of around 2MB(?), when going over it you will experience a random crash
// So, instead of storing the bitmaps directly, we write the bitmap to a temp file and store the path
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL)) {
Bitmap thumbnail = getImageThumbnail(context);
if (thumbnail != null) {
Utils.saveTempImage(context, thumbnail, TEMP_IMAGE_THUMBNAIL_FILE_NAME, Bitmap.CompressFormat.PNG);
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL, TEMP_IMAGE_THUMBNAIL_FILE_NAME);
} else {
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_THUMBNAIL, null);
}
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_IMAGE_FRONT)) {
Bitmap front = getImageFront(context);
if (front != null) {
Utils.saveTempImage(context, front, TEMP_IMAGE_FRONT_FILE_NAME, Bitmap.CompressFormat.PNG);
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_FRONT, TEMP_IMAGE_FRONT_FILE_NAME);
} else {
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_FRONT, null);
}
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_IMAGE_BACK)) {
Bitmap back = getImageBack(context);
if (back != null) {
Utils.saveTempImage(context, back, TEMP_IMAGE_BACK_FILE_NAME, Bitmap.CompressFormat.PNG);
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_BACK, TEMP_IMAGE_BACK_FILE_NAME);
} else {
bundle.putString(BUNDLE_LOYALTY_CARD_IMAGE_BACK, null);
}
}
return bundle;
}
public static LoyaltyCard fromCursor(Context context, Cursor cursor) {
// id
int id = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ID));
// store
String store = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STORE));
// note
String note = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.NOTE));
// validFrom
long validFromLong = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.VALID_FROM));
Date validFrom = validFromLong > 0 ? new Date(validFromLong) : null;
// expiry
long expiryLong = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.EXPIRY));
Date expiry = expiryLong > 0 ? new Date(expiryLong) : null;
// balance
BigDecimal balance = new BigDecimal(cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE)));
String cardId = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID));
String barcodeId = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ID));
int starred = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STAR_STATUS));
long lastUsed = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.LAST_USED));
int zoomLevel = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ZOOM_LEVEL));
int archived = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ARCHIVE_STATUS));
int barcodeTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE);
// balanceType
int balanceTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE);
Currency balanceType = !cursor.isNull(balanceTypeColumn) ? Currency.getInstance(cursor.getString(balanceTypeColumn)) : null;
// cardId
String cardId = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID));
// barcodeId
int barcodeIdColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ID);
String barcodeId = !cursor.isNull(barcodeIdColumn) ? cursor.getString(barcodeIdColumn) : null;
// barcodeType
int barcodeTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE);
CatimaBarcode barcodeType = !cursor.isNull(barcodeTypeColumn) ? CatimaBarcode.fromName(cursor.getString(barcodeTypeColumn)) : null;
// headerColor
int headerColorColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_COLOR);
Integer headerColor = !cursor.isNull(headerColorColumn) ? cursor.getInt(headerColorColumn) : null;
// starStatus
int starStatus = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STAR_STATUS));
// lastUsed
long lastUsed = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.LAST_USED));
// zoomLevel
int zoomLevel = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ZOOM_LEVEL));
// zoomLevelWidth
int zoomLevelWidth = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH));
// archiveStatus
int archiveStatus = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ARCHIVE_STATUS));
CatimaBarcode barcodeType = null;
Currency balanceType = null;
Date validFrom = null;
Date expiry = null;
Integer headerColor = null;
if (cursor.isNull(barcodeTypeColumn) == false) {
barcodeType = CatimaBarcode.fromName(cursor.getString(barcodeTypeColumn));
}
if (cursor.isNull(balanceTypeColumn) == false) {
balanceType = Currency.getInstance(cursor.getString(balanceTypeColumn));
}
if (validFromLong > 0) {
validFrom = new Date(validFromLong);
}
if (expiryLong > 0) {
expiry = new Date(expiryLong);
}
if (cursor.isNull(headerColorColumn) == false) {
headerColor = cursor.getInt(headerColorColumn);
}
return new LoyaltyCard(id, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starred, lastUsed, zoomLevel, archived);
return new LoyaltyCard(
id,
store,
note,
validFrom,
expiry,
balance,
balanceType,
cardId,
barcodeId,
barcodeType,
headerColor,
starStatus,
lastUsed,
zoomLevel,
zoomLevelWidth,
archiveStatus,
null,
Utils.getCardImageFileName(id, ImageLocationType.icon),
null,
Utils.getCardImageFileName(id, ImageLocationType.front),
null,
Utils.getCardImageFileName(id, ImageLocationType.back)
);
}
public static boolean isDuplicate(final LoyaltyCard a, final LoyaltyCard b) {
// Skip lastUsed & zoomLevel
public static boolean isDuplicate(Context context, final LoyaltyCard a, final LoyaltyCard b) {
// Note: Bitmap comparing is slow, be careful when calling this method
// Skip lastUsed & zoomLevel*
return a.id == b.id && // non-nullable int
a.store.equals(b.store) && // non-nullable String
a.note.equals(b.note) && // non-nullable String
@@ -159,12 +595,23 @@ public class LoyaltyCard implements Parcelable {
b.barcodeType == null ? null : b.barcodeType.format()) && // nullable CatimaBarcode with no overridden .equals(), so we need to check .format()
Utils.equals(a.headerColor, b.headerColor) && // nullable Integer
a.starStatus == b.starStatus && // non-nullable int
a.archiveStatus == b.archiveStatus; // non-nullable int
a.archiveStatus == b.archiveStatus && // non-nullable int
nullableBitmapsEqual(a.getImageThumbnail(context), b.getImageThumbnail(context)) && // nullable Bitmap
nullableBitmapsEqual(a.getImageFront(context), b.getImageFront(context)) && // nullable Bitmap
nullableBitmapsEqual(a.getImageBack(context), b.getImageBack(context)); // nullable Bitmap
}
@Override
public int describeContents() {
return 0;
public static boolean nullableBitmapsEqual(@Nullable Bitmap a, @Nullable Bitmap b) {
if (a == null && b == null) {
return true;
}
if (a != null && b != null) {
return a.sameAs(b);
}
// One is null and the other isn't, so it's not equal
return false;
}
@NonNull
@@ -173,7 +620,8 @@ public class LoyaltyCard implements Parcelable {
return String.format(
"LoyaltyCard{%n id=%s,%n store=%s,%n note=%s,%n validFrom=%s,%n expiry=%s,%n"
+ " balance=%s,%n balanceType=%s,%n cardId=%s,%n barcodeId=%s,%n barcodeType=%s,%n"
+ " headerColor=%s,%n starStatus=%s,%n lastUsed=%s,%n zoomLevel=%s,%n archiveStatus=%s%n}",
+ " headerColor=%s,%n starStatus=%s,%n lastUsed=%s,%n zoomLevel=%s,%n zoomLevelWidth=%s,%n archiveStatus=%s%n"
+ " imageThumbnail=%s,%n imageThumbnailPath=%s,%n imageFront=%s,%n imageFrontPath=%s,%n imageBack=%s,%n imageBackPath=%s,%n}",
this.id,
this.store,
this.note,
@@ -188,19 +636,14 @@ public class LoyaltyCard implements Parcelable {
this.starStatus,
this.lastUsed,
this.zoomLevel,
this.archiveStatus
this.zoomLevelWidth,
this.archiveStatus,
this.imageThumbnail,
this.imageThumbnailPath,
this.imageFront,
this.imageFrontPath,
this.imageBack,
this.imageBackPath
);
}
public static final Creator<LoyaltyCard> CREATOR = new Creator<LoyaltyCard>() {
@Override
public LoyaltyCard createFromParcel(Parcel in) {
return new LoyaltyCard(in);
}
@Override
public LoyaltyCard[] newArray(int size) {
return new LoyaltyCard[size];
}
};
}

View File

@@ -30,6 +30,7 @@ import java.text.DateFormat;
import java.util.ArrayList;
import protect.card_locker.databinding.LoyaltyCardLayoutBinding;
import protect.card_locker.preferences.Settings;
public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCursorAdapter.LoyaltyCardListItemViewHolder> {
private int mCurrentSelectedIndex = -1;
@@ -79,7 +80,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
public LoyaltyCard getCard(int position) {
mCursor.moveToPosition(position);
return LoyaltyCard.toLoyaltyCard(mCursor);
return LoyaltyCard.fromCursor(mContext, mCursor);
}
public void onBindViewHolder(LoyaltyCardListItemViewHolder inputHolder, Cursor inputCursor) {
@@ -87,8 +88,8 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
boolean showDivider = false;
inputHolder.mDivider.setVisibility(View.GONE);
LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(inputCursor);
Bitmap icon = Utils.retrieveCardImage(mContext, loyaltyCard.id, ImageLocationType.icon);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(mContext, inputCursor);
Bitmap icon = loyaltyCard.getImageThumbnail(mContext);
if (mLoyaltyCardListDisplayOptions.showingNameBelowThumbnail() && icon != null) {
showDivider = true;
@@ -111,21 +112,21 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
}
if (mLoyaltyCardListDisplayOptions.showingValidity() && loyaltyCard.validFrom != null) {
inputHolder.setExtraField(inputHolder.mValidFromField, DateFormat.getDateInstance(DateFormat.LONG).format(loyaltyCard.validFrom), Utils.isNotYetValid(loyaltyCard.validFrom) ? Color.RED : null, showDivider);
inputHolder.setExtraField(inputHolder.mValidFromField, DateFormat.getDateInstance(DateFormat.MEDIUM).format(loyaltyCard.validFrom), Utils.isNotYetValid(loyaltyCard.validFrom) ? Color.RED : null, showDivider);
} else {
inputHolder.setExtraField(inputHolder.mValidFromField, null, null, false);
}
if (mLoyaltyCardListDisplayOptions.showingValidity() && loyaltyCard.expiry != null) {
inputHolder.setExtraField(inputHolder.mExpiryField, DateFormat.getDateInstance(DateFormat.LONG).format(loyaltyCard.expiry), Utils.hasExpired(loyaltyCard.expiry) ? Color.RED : null, showDivider);
inputHolder.setExtraField(inputHolder.mExpiryField, DateFormat.getDateInstance(DateFormat.MEDIUM).format(loyaltyCard.expiry), Utils.hasExpired(loyaltyCard.expiry) ? Color.RED : null, showDivider);
} else {
inputHolder.setExtraField(inputHolder.mExpiryField, null, null, false);
}
inputHolder.mCardIcon.setContentDescription(loyaltyCard.store);
inputHolder.mIconBackgroundColor = Utils.setIconOrTextWithBackground(mContext, loyaltyCard, icon, inputHolder.mCardIcon, inputHolder.mCardText);
Utils.setIconOrTextWithBackground(mContext, loyaltyCard, icon, inputHolder.mCardIcon, inputHolder.mCardText, new Settings(mContext).getPreferredColumnCount());
inputHolder.toggleCardStateIcon(loyaltyCard.starStatus != 0, loyaltyCard.archiveStatus != 0, itemSelected(inputCursor.getPosition()));
inputHolder.toggleCardStateIcon(loyaltyCard.starStatus != 0, loyaltyCard.archiveStatus != 0);
inputHolder.itemView.setActivated(mSelectedItems.get(inputCursor.getPosition(), false));
applyIconAnimation(inputHolder, inputCursor.getPosition());
@@ -192,7 +193,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
int i;
for (i = 0; i < mSelectedItems.size(); i++) {
mCursor.moveToPosition(mSelectedItems.keyAt(i));
result.add(LoyaltyCard.toLoyaltyCard(mCursor));
result.add(LoyaltyCard.fromCursor(mContext, mCursor));
}
return result;
@@ -211,13 +212,11 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
public class LoyaltyCardListItemViewHolder extends RecyclerView.ViewHolder {
public TextView mCardText, mStoreField, mNoteField, mBalanceField, mValidFromField, mExpiryField;
public ImageView mCardIcon, mStarBackground, mStarBorder, mTickIcon, mArchivedBackground;
public ImageView mCardIcon, mTickIcon;
public MaterialCardView mRow;
public ConstraintLayout mStar, mArchived;
public View mDivider;
private int mIconBackgroundColor;
protected LoyaltyCardListItemViewHolder(LoyaltyCardLayoutBinding loyaltyCardLayoutBinding, CardAdapterListener inputListener) {
super(loyaltyCardLayoutBinding.getRoot());
View inputView = loyaltyCardLayoutBinding.getRoot();
@@ -231,10 +230,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
mCardIcon = loyaltyCardLayoutBinding.thumbnail;
mCardText = loyaltyCardLayoutBinding.thumbnailText;
mStar = loyaltyCardLayoutBinding.star;
mStarBackground = loyaltyCardLayoutBinding.starBackground;
mStarBorder = loyaltyCardLayoutBinding.starBorder;
mArchived = loyaltyCardLayoutBinding.archivedIcon;
mArchivedBackground = loyaltyCardLayoutBinding.archiveBackground;
mTickIcon = loyaltyCardLayoutBinding.selectedThumbnail;
inputView.setOnLongClickListener(view -> {
inputListener.onRowClicked(getAdapterPosition());
@@ -296,31 +292,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
mNoteField.requestLayout();
}
public void toggleCardStateIcon(boolean enableStar, boolean enableArchive, boolean colorByTheme) {
/* the below code does not work in android 5! hence the change of drawable instead
boolean needDarkForeground = Utils.needsDarkForeground(mIconBackgroundColor);
Drawable borderDrawable = mStarBorder.getDrawable().mutate();
Drawable backgroundDrawable = mStarBackground.getDrawable().mutate();
DrawableCompat.setTint(borderDrawable, needsDarkForeground ? Color.BLACK : Color.WHITE);
DrawableCompat.setTint(backgroundDrawable, needsDarkForeground ? Color.BLACK : Color.WHITE);
mStarBorder.setImageDrawable(borderDrawable);
mStarBackground.setImageDrawable(backgroundDrawable);
*/
boolean dark = Utils.needsDarkForeground(mIconBackgroundColor);
if (colorByTheme) {
dark = !mDarkModeEnabled;
}
if (dark) {
mStarBorder.setImageResource(R.drawable.ic_unstarred_white);
mStarBackground.setImageResource(R.drawable.ic_starred_black);
mArchivedBackground.setImageResource(R.drawable.ic_baseline_archive_24_black);
} else {
mStarBorder.setImageResource(R.drawable.ic_unstarred_black);
mStarBackground.setImageResource(R.drawable.ic_starred_white);
mArchivedBackground.setImageResource(R.drawable.ic_baseline_archive_24);
}
public void toggleCardStateIcon(boolean enableStar, boolean enableArchive) {
if (enableStar) {
mStar.setVisibility(View.VISIBLE);
} else{
@@ -332,17 +304,6 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
} else{
mArchived.setVisibility(View.GONE);
}
mStarBorder.invalidate();
mStarBackground.invalidate();
mArchivedBackground.invalidate();
}
}
public int dpToPx(int dp, Context mContext) {
Resources r = mContext.getResources();
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, r.getDisplayMetrics());
return px;
}
}

View File

File diff suppressed because it is too large Load Diff

View File

@@ -19,6 +19,7 @@ import android.text.method.DigitsKeyListener;
import android.text.style.ForegroundColorSpan;
import android.text.util.Linkify;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -51,6 +52,7 @@ import androidx.core.view.accessibility.AccessibilityNodeInfoCompat;
import com.google.android.material.color.MaterialColors;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.textfield.TextInputEditText;
import com.google.zxing.BarcodeFormat;
import java.io.File;
import java.io.UnsupportedEncodingException;
@@ -97,9 +99,35 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
static final String STATE_IMAGEINDEX = "imageIndex";
static final String STATE_FULLSCREEN = "isFullscreen";
static final String BUNDLE_ID = "id";
static final String BUNDLE_CARDLIST = "cardList";
static final String BUNDLE_TRANSITION_RIGHT = "transition_right";
final private TaskHandler mTasks = new TaskHandler();
Runnable barcodeImageGenerationFinishedCallback;
private long initTime = System.currentTimeMillis();
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (settings.useVolumeKeysForNavigation()) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
// Navigate to the previous card
if (initTime < (System.currentTimeMillis() - 1000)) {
prevNextCard(false);
}
return true;
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
// Navigate to the next card
if (initTime < (System.currentTimeMillis() - 1000)) {
prevNextCard(true);
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
public void onMainImageTap() {
// If we're in fullscreen, leave fullscreen
if (isFullscreen) {
@@ -112,6 +140,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
// If the barcode is shown, switch to fullscreen layout
if (imageType == ImageType.BARCODE) {
setFullscreen(true);
return;
}
@@ -181,8 +210,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
private void extractIntentFields(Intent intent) {
final Bundle b = intent.getExtras();
loyaltyCardId = b != null ? b.getInt("id") : 0;
cardList = b != null ? b.getIntegerArrayList("cardList") : null;
loyaltyCardId = b != null ? b.getInt(BUNDLE_ID) : 0;
cardList = b != null ? b.getIntegerArrayList(BUNDLE_CARDLIST) : null;
Log.d(TAG, "View activity: id=" + loyaltyCardId);
}
@@ -194,7 +223,13 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
} else {
binding.scalerGuideline.setGuidelinePercent(0.5f * scale);
}
}
private void setScalerWidthGuideline(int zoomLevelWidth) {
float halfscale = zoomLevelWidth / 200f;
binding.scalerEndwidthguideline.setGuidelinePercent(0.5f + halfscale);
binding.scalerStartwidthguideline.setGuidelinePercent(0.5f - halfscale);
}
@Override
@@ -208,7 +243,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
return;
}
int transitionRight = incomingIntentExtras.getInt("transition_right", -1);
int transitionRight = incomingIntentExtras.getInt(BUNDLE_TRANSITION_RIGHT, -1);
if (transitionRight == 1) {
// right side transition
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
@@ -221,6 +256,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
super.onCreate(savedInstanceState);
binding = LoyaltyCardViewLayoutBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
Utils.applyWindowInsets(binding.getRoot());
Toolbar toolbar = binding.toolbar;
setSupportActionBar(toolbar);
@@ -251,36 +287,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
database = new DBHelper(this).getWritableDatabase();
importURIHelper = new ImportURIHelper(this);
binding.barcodeScaler.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (!fromUser) {
Log.d(TAG, "non user triggered onProgressChanged, ignoring, progress is " + progress);
return;
}
Log.d(TAG, "Progress is " + progress);
Log.d(TAG, "Max is " + binding.barcodeScaler.getMax());
float scale = (float) progress / (float) binding.barcodeScaler.getMax();
Log.d(TAG, "Scaling to " + scale);
loyaltyCard.zoomLevel = progress;
DBHelper.updateLoyaltyCardZoomLevel(database, loyaltyCardId, loyaltyCard.zoomLevel);
setScalerGuideline(loyaltyCard.zoomLevel);
drawMainImage(mainImageIndex, true, isFullscreen);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
binding.barcodeScaler.setOnSeekBarChangeListener(setOnSeekBarChangeListenerUnifiedFunction());
binding.barcodeWidthscaler.setOnSeekBarChangeListener(setOnSeekBarChangeListenerUnifiedFunction());
rotationEnabled = true;
@@ -302,7 +310,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
binding.bottomAppBarUpdateBalanceButton.setOnClickListener(view -> showBalanceUpdateDialog());
binding.iconContainer.setOnClickListener(view -> {
if (Utils.retrieveCardImage(this, loyaltyCard.id, ImageLocationType.icon) != null) {
if (loyaltyCard.getImageThumbnail(this) != null) {
openImageInGallery(ImageType.ICON);
} else {
Toast.makeText(LoyaltyCardViewActivity.this, R.string.icon_header_click_text, Toast.LENGTH_LONG).show();
@@ -342,6 +350,46 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
});
}
private SeekBar.OnSeekBarChangeListener setOnSeekBarChangeListenerUnifiedFunction() {
return new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (!fromUser) {
Log.d(TAG, "non user triggered onProgressChanged, ignoring, progress is " + progress);
return;
}
Log.d(TAG, "Progress is " + progress);
if (seekBar.getId() == binding.barcodeScaler.getId()) {
Log.d(TAG, "Max is " + binding.barcodeScaler.getMax());
float scale = (float) progress / (float) binding.barcodeScaler.getMax();
Log.d(TAG, "Scaling to " + scale);
}
else {
Log.d(TAG, "Max is " + binding.barcodeWidthscaler.getMax());
float scale = (float) progress / (float) binding.barcodeWidthscaler.getMax();
Log.d(TAG, "Scaling to " + scale);
}
if (seekBar.getId() == binding.barcodeScaler.getId()) {
loyaltyCard.zoomLevel = progress;
setScalerGuideline(loyaltyCard.zoomLevel);
}
else {
loyaltyCard.zoomLevelWidth = progress;
setScalerWidthGuideline(loyaltyCard.zoomLevelWidth);
}
DBHelper.updateLoyaltyCardZoomLevel(database, loyaltyCardId, loyaltyCard.zoomLevel, loyaltyCard.zoomLevelWidth);
drawMainImage(mainImageIndex, true, isFullscreen);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
};
}
private SpannableStringBuilder padSpannableString(SpannableStringBuilder spannableStringBuilder) {
if (spannableStringBuilder.length() > 0) {
spannableStringBuilder.append("\n\n");
@@ -572,8 +620,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
// Restart activity with new card id and index
Intent intent = getIntent();
Bundle b = intent.getExtras();
b.putInt("id", loyaltyCardId);
b.putInt("transition_right", transitionRight ? 1 : 0);
b.putInt(BUNDLE_ID, loyaltyCardId);
b.putInt(BUNDLE_TRANSITION_RIGHT, transitionRight ? 1 : 0);
intent.putExtras(b);
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
@@ -633,7 +681,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
window.setAttributes(attributes);
}
loyaltyCard = DBHelper.getLoyaltyCard(database, loyaltyCardId);
loyaltyCard = DBHelper.getLoyaltyCard(this, database, loyaltyCardId);
if (loyaltyCard == null) {
Log.w(TAG, "Could not lookup loyalty card " + loyaltyCardId);
Toast.makeText(this, R.string.noCardExistsError, Toast.LENGTH_LONG).show();
@@ -680,6 +728,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
int darkenedColor = ColorUtils.blendARGB(backgroundHeaderColor, Color.BLACK, 0.1f);
binding.barcodeScaler.setProgressTintList(ColorStateList.valueOf(darkenedColor));
binding.barcodeScaler.setThumbTintList(ColorStateList.valueOf(darkenedColor));
binding.barcodeWidthscaler.setProgressTintList(ColorStateList.valueOf(darkenedColor));
binding.barcodeWidthscaler.setThumbTintList(ColorStateList.valueOf(darkenedColor));
// Set bottomAppBar and system navigation bar color
binding.bottomAppBar.setBackgroundColor(darkenedColor);
@@ -692,8 +742,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
editButtonIcon.setTint(Utils.needsDarkForeground(complementaryColor) ? Color.BLACK : Color.WHITE);
binding.fabEdit.setImageDrawable(editButtonIcon);
Bitmap icon = Utils.retrieveCardImage(this, loyaltyCard.id, ImageLocationType.icon);
Utils.setIconOrTextWithBackground(this, loyaltyCard, icon, binding.iconImage, binding.iconText);
Bitmap icon = loyaltyCard.getImageThumbnail(this);
Utils.setIconOrTextWithBackground(this, loyaltyCard, icon, binding.iconImage, binding.iconText, 1);
// If the background is very bright, we should use dark icons
backgroundNeedsDarkIcons = Utils.needsDarkForeground(backgroundHeaderColor);
@@ -721,12 +771,12 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
imageTypes.add(ImageType.BARCODE);
}
frontImageBitmap = Utils.retrieveCardImage(this, loyaltyCard.id, ImageLocationType.front);
frontImageBitmap = loyaltyCard.getImageFront(this);
if (frontImageBitmap != null) {
imageTypes.add(ImageType.IMAGE_FRONT);
}
backImageBitmap = Utils.retrieveCardImage(this, loyaltyCard.id, ImageLocationType.back);
backImageBitmap = loyaltyCard.getImageBack(this);
if (backImageBitmap != null) {
imageTypes.add(ImageType.IMAGE_BACK);
}
@@ -830,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();
@@ -840,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();
@@ -865,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();
@@ -908,7 +962,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
null,
false,
this,
addPadding);
addPadding,
isFullscreen);
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
}
}
@@ -1102,11 +1157,18 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
binding.container.setVisibility(View.GONE);
binding.fullscreenLayout.setVisibility(View.VISIBLE);
// Only show width slider if the barcode isn't square (square barcodes will resize height and width together)
// or if the internals of the barcode are squares, like DATA_MATRIX
binding.setWidthLayout.setVisibility((format.isSquare() || format.format() == BarcodeFormat.DATA_MATRIX) ? View.GONE : View.VISIBLE);
drawMainImage(mainImageIndex, true, isFullscreen);
binding.barcodeScaler.setProgress(loyaltyCard.zoomLevel);
setScalerGuideline(loyaltyCard.zoomLevel);
binding.barcodeWidthscaler.setProgress(loyaltyCard.zoomLevelWidth);
setScalerWidthGuideline(loyaltyCard.zoomLevelWidth);
// Hide actionbar
if (actionBar != null) {
actionBar.hide();

View File

@@ -2,11 +2,15 @@ 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;
import android.database.CursorIndexOutOfBoundsException;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
@@ -21,16 +25,19 @@ import android.widget.Toast;
import androidx.activity.OnBackPressedCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.view.ActionMode;
import androidx.appcompat.widget.SearchView;
import androidx.core.splashscreen.SplashScreen;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.tabs.TabLayout;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -41,6 +48,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import protect.card_locker.databinding.ContentMainBinding;
import protect.card_locker.databinding.MainActivityBinding;
import protect.card_locker.databinding.SortingOptionBinding;
import protect.card_locker.preferences.Settings;
import protect.card_locker.preferences.SettingsActivity;
public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener {
@@ -50,6 +58,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
public static final String RESTART_ACTIVITY_INTENT = "restart_activity_intent";
private static final int MEDIUM_SCALE_FACTOR_DIP = 460;
static final String STATE_SEARCH_QUERY = "SEARCH_QUERY";
private SQLiteDatabase mDatabase;
private LoyaltyCardCursorAdapter mAdapter;
@@ -57,6 +66,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
private SearchView mSearchView;
private int mLoyaltyCardCount = 0;
protected String mFilter = "";
private String currentQuery = "";
private String finalQuery = "";
protected Object mGroup = null;
protected DBHelper.LoyaltyCardOrder mOrder = DBHelper.LoyaltyCardOrder.Alpha;
protected DBHelper.LoyaltyCardOrderDirection mOrderDirection = DBHelper.LoyaltyCardOrderDirection.Ascending;
@@ -66,9 +77,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
private View mNoMatchingCardsText;
private View mNoGroupCardsText;
private TabLayout groupsTabLayout;
private Runnable mUpdateLoyaltyCardListRunnable;
private ActivityResultLauncher<Intent> mBarcodeScannerLauncher;
private ActivityResultLauncher<Intent> mSettingsLauncher;
@@ -196,11 +205,33 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
SplashScreen.installSplashScreen(this);
super.onCreate(inputSavedInstanceState);
// Delete old cache files
// These could be temporary images for the cropper, temporary images in LoyaltyCard toBundle/writeParcel/ etc.
new Thread(() -> {
long twentyFourHoursAgo = System.currentTimeMillis() - (1000 * 60 * 60 * 24);
File[] tempFiles = getCacheDir().listFiles();
if (tempFiles == null) {
Log.e(TAG, "getCacheDir().listFiles() somehow returned null, this should never happen... Skipping cache cleanup...");
return;
}
for (File file : tempFiles) {
if (file.lastModified() < twentyFourHoursAgo) {
if (!file.delete()) {
Log.w(TAG, "Failed to delete cache file " + file.getPath());
}
};
}
}).start();
// We should extract the share intent after we called the super.onCreate as it may need to spawn a dialog window and the app needs to be initialized to not crash
extractIntentFields(getIntent());
binding = MainActivityBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
Utils.applyWindowInsets(binding.getRoot());
setSupportActionBar(binding.toolbar);
groupsTabLayout = binding.groups;
contentMainBinding = ContentMainBinding.bind(binding.include.getRoot());
@@ -247,52 +278,15 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
mCardList.setAdapter(mAdapter);
registerForContextMenu(mCardList);
mGroup = null;
updateLoyaltyCardList(true);
/*
* This was added for Huawei, but Huawei is just too much of a fucking pain.
* Just leaving this commented out if needed for the future idk
* https://twitter.com/SylvieLorxu/status/1379437902741012483
*
// Show privacy policy on first run
SharedPreferences privacyPolicyShownPref = getApplicationContext().getSharedPreferences(
getString(R.string.sharedpreference_privacy_policy_shown),
Context.MODE_PRIVATE);
if (privacyPolicyShownPref.getInt(getString(R.string.sharedpreference_privacy_policy_shown), 0) == 0) {
SharedPreferences.Editor privacyPolicyShownPrefEditor = privacyPolicyShownPref.edit();
privacyPolicyShownPrefEditor.putInt(getString(R.string.sharedpreference_privacy_policy_shown), 1);
privacyPolicyShownPrefEditor.apply();
new AlertDialog.Builder(this)
.setTitle(R.string.privacy_policy)
.setMessage(R.string.privacy_policy_popup_text)
.setPositiveButton(R.string.accept, null)
.setNegativeButton(R.string.privacy_policy, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
openPrivacyPolicy();
}
})
.setIcon(android.R.drawable.ic_dialog_info)
.show();
}
*/
mBarcodeScannerLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
// Exit early if the user cancelled the scan (pressed back/home)
if (result.getResultCode() != RESULT_OK) {
return;
}
Intent intent = result.getData();
List<BarcodeValues> barcodeValuesList = Utils.parseSetBarcodeActivityResult(Utils.BARCODE_SCAN, result.getResultCode(), intent, this);
Bundle inputBundle = intent.getExtras();
String group = inputBundle != null ? inputBundle.getString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP) : null;
processBarcodeValuesList(barcodeValuesList, group, false);
Intent editIntent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
editIntent.putExtras(result.getData().getExtras());
startActivity(editIntent);
});
mSettingsLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> {
@@ -328,7 +322,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
if (mSearchView != null && !mSearchView.isIconified()) {
mFilter = mSearchView.getQuery().toString();
}
// Start of active tab logic
updateTabGroups(groupsTabLayout);
@@ -339,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;
@@ -386,6 +365,12 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
mBarcodeScannerLauncher.launch(intent);
});
addButton.bringToFront();
var layoutManager = (GridLayoutManager) mCardList.getLayoutManager();
if (layoutManager != null) {
var settings = new Settings(this);
layoutManager.setSpanCount(settings.getPreferredColumnCount());
}
}
private void displayCardSetupOptions(Menu menu, boolean shouldShow) {
@@ -445,25 +430,25 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
if (mCurrentActionMode != null) {
mCurrentActionMode.finish();
}
new ListWidget().updateAll(mAdapter.mContext);
}
private void processBarcodeValuesList(List<BarcodeValues> barcodeValuesList, String group, boolean closeAppOnNoBarcode) {
if (barcodeValuesList.isEmpty()) {
throw new IllegalArgumentException("barcodesValues may not be empty");
private void processParseResultList(List<ParseResult> parseResultList, String group, boolean closeAppOnNoBarcode) {
if (parseResultList.isEmpty()) {
throw new IllegalArgumentException("parseResultList may not be empty");
}
Utils.makeUserChooseBarcodeFromList(MainActivity.this, barcodeValuesList, new BarcodeValuesListDisambiguatorCallback() {
Utils.makeUserChooseParseResultFromList(MainActivity.this, parseResultList, new ParseResultListDisambiguatorCallback() {
@Override
public void onUserChoseBarcode(BarcodeValues barcodeValues) {
Intent newIntent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
Bundle newBundle = new Bundle();
newBundle.putString(LoyaltyCardEditActivity.BUNDLE_BARCODETYPE, barcodeValues.format());
newBundle.putString(LoyaltyCardEditActivity.BUNDLE_CARDID, barcodeValues.content());
public void onUserChoseParseResult(ParseResult parseResult) {
Intent intent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
Bundle bundle = parseResult.toLoyaltyCardBundle(MainActivity.this);
if (group != null) {
newBundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, group);
bundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, group);
}
newIntent.putExtras(newBundle);
startActivity(newIntent);
intent.putExtras(bundle);
startActivity(intent);
}
@Override
@@ -479,28 +464,53 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
String receivedAction = intent.getAction();
String receivedType = intent.getType();
// Check if an image or file was shared to us
if (Intent.ACTION_SEND.equals(receivedAction)) {
List<BarcodeValues> barcodeValuesList;
if (receivedAction == null || receivedType == null) {
return;
}
if (receivedType.equals("text/plain")) {
barcodeValuesList = Collections.singletonList(new BarcodeValues(null, intent.getStringExtra(Intent.EXTRA_TEXT)));
} else if (receivedType.startsWith("image/")) {
barcodeValuesList = Utils.retrieveBarcodesFromImage(this, intent.getParcelableExtra(Intent.EXTRA_STREAM));
List<ParseResult> parseResultList;
// Check for shared text
if (receivedAction.equals(Intent.ACTION_SEND) && receivedType.equals("text/plain")) {
LoyaltyCard loyaltyCard = new LoyaltyCard();
loyaltyCard.setCardId(intent.getStringExtra(Intent.EXTRA_TEXT));
parseResultList = Collections.singletonList(new ParseResult(ParseResultType.BARCODE_ONLY, loyaltyCard));
} else {
// Parse whatever file was sent, regardless of opening or sharing
Uri data;
if (receivedAction.equals(Intent.ACTION_VIEW)) {
data = intent.getData();
} else if (receivedAction.equals(Intent.ACTION_SEND)) {
data = intent.getParcelableExtra(Intent.EXTRA_STREAM);
} else {
Log.e(TAG, "Wrong action type to parse intent");
return;
}
if (receivedType.startsWith("image/")) {
parseResultList = Utils.retrieveBarcodesFromImage(this, data);
} else if (receivedType.equals("application/pdf")) {
barcodeValuesList = Utils.retrieveBarcodesFromPdf(this, intent.getParcelableExtra(Intent.EXTRA_STREAM));
parseResultList = Utils.retrieveBarcodesFromPdf(this, data);
} else if (Arrays.asList("application/vnd.apple.pkpass", "application/vnd-com.apple.pkpass").contains(receivedType)) {
parseResultList = Utils.retrieveBarcodesFromPkPass(this, data);
} else if (receivedType.equals("application/vnd.espass-espass")) {
// FIXME: espass is not pkpass
// However, several users stated in https://github.com/CatimaLoyalty/Android/issues/2197 that the formats are extremely similar to the point they could rename an .espass file to .pkpass and have it imported
// So it makes sense to "unofficially" treat it as a PKPASS for now, even though not completely correct
parseResultList = Utils.retrieveBarcodesFromPkPass(this, data);
} else {
Log.e(TAG, "Wrong mime-type");
return;
}
if (barcodeValuesList.isEmpty()) {
finish();
return;
}
processBarcodeValuesList(barcodeValuesList, null, true);
}
// Give up if we should parse but there is nothing to parse
if (parseResultList == null || parseResultList.isEmpty()) {
finish();
return;
}
processParseResultList(parseResultList, null, true);
}
private void extractIntentFields(Intent intent) {
@@ -534,6 +544,24 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
}
@Override
// Saving currentQuery to finalQuery for user, this will be used to restore search history, happens when user clicks a card from list
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
finalQuery = currentQuery;
// Putting the query also into outState for later use in onRestoreInstanceState when rotating screen
if (mSearchView != null) {
outState.putString(STATE_SEARCH_QUERY, finalQuery);
}
}
@Override
// Restoring instance state when rotation of screen happens with the goal to restore search query for user
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
finalQuery = savedInstanceState.getString(STATE_SEARCH_QUERY, "");
}
@Override
public boolean onCreateOptionsMenu(Menu inputMenu) {
getMenuInflater().inflate(R.menu.main_menu, inputMenu);
@@ -542,15 +570,42 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
if (searchManager != null) {
mSearchView = (SearchView) inputMenu.findItem(R.id.action_search).getActionView();
MenuItem searchMenuItem = inputMenu.findItem(R.id.action_search);
mSearchView = (SearchView) searchMenuItem.getActionView();
mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
mSearchView.setSubmitButtonEnabled(false);
mSearchView.setOnCloseListener(() -> {
invalidateOptionsMenu();
return false;
});
/*
* On Android 13 and later, pressing Back while the search view is open hides the keyboard
* and collapses the search view at the same time.
* This brings back the old behavior on Android 12 and lower: pressing Back once
* hides the keyboard, press again while keyboard is hidden to collapse the search view.
*/
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
searchMenuItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
@Override
public boolean onMenuItemActionExpand(@NonNull MenuItem item) {
return true;
}
@Override
public boolean onMenuItemActionCollapse(@NonNull MenuItem item) {
if (mSearchView.hasFocus()) {
mSearchView.clearFocus();
return false;
}
currentQuery = "";
mFilter = "";
updateLoyaltyCardList(false);
return true;
}
});
}
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
@@ -560,7 +615,21 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
@Override
public boolean onQueryTextChange(String newText) {
mFilter = newText;
// New logic to ensure search history after coming back from picked card - user will see the last search query
if (newText.isEmpty()) {
if(!finalQuery.isEmpty()){
// Setting the query text for user after coming back from picked card from finalQuery
mSearchView.setQuery(finalQuery, false);
}
else if(!currentQuery.isEmpty()){
// Else if is needed in case user deletes search - expected behaviour is to show all cards
currentQuery = "";
mSearchView.setQuery(currentQuery, false);
}
} else {
// Setting search query each time user changes the text in search to temporary variable to be used later in finalQuery String which will be used to restore search history
currentQuery = newText;
}
TabLayout.Tab currentTab = groupsTabLayout.getTabAt(groupsTabLayout.getSelectedTabPosition());
mGroup = currentTab != null ? currentTab.getTag() : null;
@@ -569,6 +638,14 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
return true;
}
});
// Check if we came from a picked card back to search, in that case we want to show the search view with previous search query
if(!finalQuery.isEmpty()){
// Expand the search view to show the query
searchMenuItem.expandActionView();
// Setting the query text to empty String due to behaviour of onQueryTextChange after coming back from picked card - onQueryTextChange is called automatically without users interaction
finalQuery = "";
mSearchView.setQuery(currentQuery, false);
}
}
return super.onCreateOptionsMenu(inputMenu);
@@ -622,6 +699,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
showReversed.isChecked() ? DBHelper.LoyaltyCardOrderDirection.Descending : DBHelper.LoyaltyCardOrderDirection.Ascending
);
new ListWidget().updateAll(this);
dialog.dismiss();
});
@@ -785,14 +864,14 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
Intent intent = new Intent(this, LoyaltyCardViewActivity.class);
intent.setAction("");
final Bundle b = new Bundle();
b.putInt("id", loyaltyCard.id);
b.putInt(LoyaltyCardViewActivity.BUNDLE_ID, loyaltyCard.id);
ArrayList<Integer> cardList = new ArrayList<>();
for (int i = 0; i < mAdapter.getItemCount(); i++) {
cardList.add(mAdapter.getCard(i).id);
}
b.putIntegerArrayList("cardList", cardList);
b.putIntegerArrayList(LoyaltyCardViewActivity.BUNDLE_CARDLIST, cardList);
intent.putExtras(b);
startActivity(intent);

View File

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

View File

@@ -33,7 +33,7 @@ public class ManageGroupCursorAdapter extends LoyaltyCardCursorAdapter {
@Override
public void onBindViewHolder(LoyaltyCardListItemViewHolder inputHolder, Cursor inputCursor) {
LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(inputCursor);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(mContext, inputCursor);
Boolean overlayValue = mInGroupOverlay.get(loyaltyCard.id);
if ((overlayValue != null ? overlayValue : isLoyaltyCardInGroup(loyaltyCard.id))) {
mAnimationItemsIndex.put(inputCursor.getPosition(), true);

View File

@@ -42,6 +42,7 @@ public class ManageGroupsActivity extends CatimaAppCompatActivity implements Gro
binding = ManageGroupsActivityBinding.inflate(getLayoutInflater());
setTitle(R.string.groups);
setContentView(binding.getRoot());
Utils.applyWindowInsets(binding.getRoot());
Toolbar toolbar = binding.toolbar;
setSupportActionBar(toolbar);
enableToolbarBackButton();

View File

@@ -0,0 +1,31 @@
package protect.card_locker
import android.content.Context
import android.os.Bundle
class ParseResult(
val parseResultType: ParseResultType,
val loyaltyCard: LoyaltyCard) {
var note: String? = null
fun toLoyaltyCardBundle(context: Context): Bundle {
when (parseResultType) {
ParseResultType.FULL -> return loyaltyCard.toBundle(context, listOf())
ParseResultType.BARCODE_ONLY -> {
val defaultLoyaltyCard = LoyaltyCard()
defaultLoyaltyCard.setBarcodeId(null)
defaultLoyaltyCard.setBarcodeType(loyaltyCard.barcodeType)
defaultLoyaltyCard.setCardId(loyaltyCard.cardId)
return defaultLoyaltyCard.toBundle(
context,
listOf(
LoyaltyCard.BUNDLE_LOYALTY_CARD_BARCODE_ID,
LoyaltyCard.BUNDLE_LOYALTY_CARD_BARCODE_TYPE,
LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID
)
)
}
}
}
}

View File

@@ -0,0 +1,6 @@
package protect.card_locker;
public interface ParseResultListDisambiguatorCallback {
void onUserChoseParseResult(ParseResult parseResult);
void onUserDismissedSelector();
}

View File

@@ -0,0 +1,6 @@
package protect.card_locker
enum class ParseResultType {
FULL,
BARCODE_ONLY
}

View File

@@ -0,0 +1,443 @@
package protect.card_locker
import android.content.Context
import android.graphics.Bitmap
import android.graphics.Color
import android.net.Uri
import android.util.ArrayMap
import android.util.Log
import com.google.zxing.BarcodeFormat
import net.lingala.zip4j.io.inputstream.ZipInputStream
import net.lingala.zip4j.model.LocalFileHeader
import org.json.JSONException
import org.json.JSONObject
import java.io.FileNotFoundException
import java.io.IOException
import java.math.BigDecimal
import java.text.DateFormat
import java.text.ParseException
import java.time.ZonedDateTime
import java.time.format.DateTimeParseException
import java.util.Currency
import java.util.Date
class PkpassParser(context: Context, uri: Uri?) {
private var mContext = context
private var translations: ArrayMap<String, Map<String, String>> = ArrayMap()
private var passContent: JSONObject? = null
private var store: String? = null
private var note: String? = null
private var validFrom: Date? = null
private var expiry: Date? = null
private val balance: BigDecimal = BigDecimal(0)
private val balanceType: Currency? = null
// FIXME: Some cards may not have any barcodes, but Catima doesn't accept null card ID
// An empty string card ID would prevent a crash, but would be blocked in the edit activity
// Setting the default to the "No barcode" text at least prevents a crash, but it is definitely a hack
private var cardId: String = context.getString(R.string.noBarcode)
private var barcodeId: String? = null
private var barcodeType: CatimaBarcode? = null
private var headerColor: Int? = null
private val starStatus = 0
private val lastUsed: Long = 0
private val zoomLevel = DBHelper.DEFAULT_ZOOM_LEVEL
private val zoomLevelWidth = DBHelper.DEFAULT_ZOOM_LEVEL_WIDTH
private var archiveStatus = 0
var image: Bitmap? = null
private set
private var logoSize = 0
init {
if (passContent != null) {
throw IllegalStateException("Pkpass instance already initialized!")
}
mContext = context
Log.i(TAG, "Received Pkpass file")
if (uri == null) {
Log.e(TAG, "Uri did not contain any data")
throw IOException(context.getString(R.string.errorReadingFile))
}
try {
mContext.contentResolver.openInputStream(uri).use { inputStream ->
ZipInputStream(inputStream).use { zipInputStream ->
var localFileHeader: LocalFileHeader?
while (true) {
// Retrieve the next file
localFileHeader = zipInputStream.nextEntry
// If no next file, exit loop
if (localFileHeader == null) {
break
}
// Ignore directories
if (localFileHeader.isDirectory) continue
// We assume there are three options, as per spec:
// language.lproj/pass.strings
// file.extension
// More directories are ignored
val filenameParts = localFileHeader.fileName.split('/')
if (filenameParts.size > 2) {
continue
} else if (filenameParts.size == 2) {
// Doesn't seem like a language directory, ignore
if (!filenameParts[0].endsWith(".lproj")) continue
val locale = filenameParts[0].removeSuffix(".lproj")
translations[locale] = parseLanguageStrings(ZipUtils.read(zipInputStream))
}
// Not a language, parse as normal files
when (localFileHeader.fileName) {
"logo.png" -> loadImageIfBiggerSize(1, zipInputStream)
"logo@2x.png" -> loadImageIfBiggerSize(2, zipInputStream)
"logo@3x.png" -> loadImageIfBiggerSize(3, zipInputStream)
"pass.json" -> passContent = ZipUtils.readJSON(zipInputStream) // Parse this last, so we're sure we have all language info
}
}
checkNotNull(passContent) { "File lacks pass.json" }
}
}
} catch (e: FileNotFoundException) {
throw IOException(mContext.getString(R.string.errorReadingFile))
} catch (e: Exception) {
throw e
}
}
fun listLocales(): List<String> {
return translations.keys.toList()
}
fun toLoyaltyCard(locale: String?): LoyaltyCard {
parsePassJSON(checkNotNull(passContent) { "Pkpass instance not yet initialized!" }, locale)
return LoyaltyCard(
-1,
store,
note,
validFrom,
expiry,
balance,
balanceType,
cardId,
barcodeId,
barcodeType,
headerColor,
starStatus,
lastUsed,
zoomLevel,
zoomLevelWidth,
archiveStatus,
image,
null,
null,
null,
null,
null
)
}
private fun getTranslation(string: String, locale: String?): String {
if (locale == null) {
return string
}
val localeStrings = translations[locale]
return localeStrings?.get(string) ?: string
}
private fun loadImageIfBiggerSize(fileLogoSize: Int, zipInputStream: ZipInputStream) {
if (logoSize < fileLogoSize) {
image = ZipUtils.readImage(zipInputStream)
logoSize = fileLogoSize
}
}
private fun parseColor(color: String): Int? {
// First, try formats supported by Android natively
try {
return Color.parseColor(color)
} catch (ignored: IllegalArgumentException) {}
// If that didn't work, try parsing it as a rbg(0,0,255) value
val red: Int;
val green: Int;
val blue: Int;
// Parse rgb(0,0,0) string
val rgbInfo = Regex("""^rgb\(\s*(?<red>\d+)\s*,\s*(?<green>\d+)\s*,\s*(?<blue>\d+)\s*\)$""").find(color)
if (rgbInfo == null) {
return null
}
// Convert to integers
try {
red = rgbInfo.groups[1]!!.value.toInt()
green = rgbInfo.groups[2]!!.value.toInt()
blue = rgbInfo.groups[3]!!.value.toInt()
} catch (e: NumberFormatException) {
return null
}
// Ensure everything is in a valid range as Color.rgb does not do range checks
if (red < 0 || red > 255) return null
if (green < 0 || green > 255) return null
if (blue < 0 || blue > 255) return null
return Color.rgb(red, green, blue)
}
private fun parseDateTime(dateTime: String): Date {
return Date.from(ZonedDateTime.parse(dateTime).toInstant())
}
private fun parseLanguageStrings(data: String): Map<String, String> {
val output = ArrayMap<String, String>()
// Translations look like this:
// "key_name" = "Translated value";
//
// However, "Translated value" may be multiple lines and may contain " (however, it'll be escaped)
var translationLine = StringBuilder()
for (line in data.lines()) {
translationLine.append(line)
// Make sure we don't have a false ending (this is the escaped double quote: \";)
if (!line.endsWith("\\\";") and line.endsWith("\";")) {
// We reached a translation ending, time to parse it
// 1. Split into key and value
// 2. Remove cruft of each
// 3. Clean up escape sequences
val keyValue = translationLine.toString().split("=", ignoreCase = false, limit = 2)
val key = keyValue[0].trim().removePrefix("\"").removeSuffix("\"")
val value = keyValue[1].trim().removePrefix("\"").removeSuffix("\";").replace("\\", "")
output[key] = value
translationLine = StringBuilder()
} else {
translationLine.append("\n")
}
}
return output
}
private fun parsePassJSON(jsonObject: JSONObject, locale: String?) {
if (jsonObject.getInt("formatVersion") != 1) {
throw IllegalArgumentException(mContext.getString(R.string.unsupportedFile))
}
// Prefer logoText for store, it's generally shorter
try {
store = jsonObject.getString("logoText")
} catch (ignored: JSONException) {}
if (store.isNullOrEmpty()) {
store = jsonObject.getString("organizationName")
}
val noteText = StringBuilder()
noteText.append(getTranslation(jsonObject.getString("description"), locale))
try {
validFrom = parseDateTime(jsonObject.getString("relevantDate"))
} catch (ignored: JSONException) {}
try {
expiry = parseDateTime(jsonObject.getString("expirationDate"))
} catch (ignored: JSONException) {}
try {
headerColor = parseColor(jsonObject.getString("backgroundColor"))
} catch (ignored: JSONException) {}
var pkPassHasBarcodes = false
var validBarcodeFound = false
// Create a list of possible barcodes
val barcodes = ArrayList<JSONObject>()
// Append the non-deprecated entries
try {
val foundInBarcodesField = jsonObject.getJSONArray("barcodes")
for (i in 0 until foundInBarcodesField.length()) {
barcodes.add(foundInBarcodesField.getJSONObject(i))
}
} catch (ignored: JSONException) {}
// Append the deprecated entry if it exists
try {
barcodes.add(jsonObject.getJSONObject("barcode"))
} catch (ignored: JSONException) {}
for (barcode in barcodes) {
pkPassHasBarcodes = true
try {
parsePassJSONBarcodeField(barcode)
validBarcodeFound = true
break
} catch (ignored: IllegalArgumentException) {}
}
if (pkPassHasBarcodes && !validBarcodeFound) {
throw FormatException(mContext.getString(R.string.errorReadingFile))
}
// An used card being "archived" probably is the most sensible way to map "voided"
archiveStatus = try {
if (jsonObject.getBoolean("voided")) 1 else 0
} catch (ignored: JSONException) {
0
}
// Append type-specific info to the pass
// Find the relevant pass type and parse it
for (passType in listOf("boardingPass", "coupon", "eventTicket", "generic")) {
try {
var extraText = parsePassJSONPassFields(
jsonObject.getJSONObject(passType),
locale
)
noteText.append("\n\n")
noteText.append(extraText)
break
} catch (ignored: JSONException) {}
}
note = noteText.toString()
}
/* Return success or failure */
private fun parsePassJSONBarcodeField(barcodeInfo: JSONObject) {
val format = barcodeInfo.getString("format")
// We only need to check these 4 formats as no other options are valid in the PkPass spec
barcodeType = when(format) {
"PKBarcodeFormatQR" -> CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE)
"PKBarcodeFormatPDF417" -> CatimaBarcode.fromBarcode(BarcodeFormat.PDF_417)
"PKBarcodeFormatAztec" -> CatimaBarcode.fromBarcode(BarcodeFormat.AZTEC)
"PKBarcodeFormatCode128" -> CatimaBarcode.fromBarcode(BarcodeFormat.CODE_128)
else -> throw IllegalArgumentException("No valid barcode type")
}
// FIXME: We probably need to do something with the messageEncoding field
try {
cardId = barcodeInfo.getString("altText")
barcodeId = barcodeInfo.getString("message")
} catch (ignored: JSONException) {
cardId = barcodeInfo.getString("message")
barcodeId = null
}
// Don't set barcodeId if it's the same as cardId
if (cardId == barcodeId) {
barcodeId = null
}
}
private fun parsePassJSONPassFields(fieldsParent: JSONObject, locale: String?): String {
// These fields contain a lot of info on where we're supposed to display them, but Catima doesn't really have anything for that
// So for now, throw them all into the description field in a logical order
val noteContents: MutableList<String> = ArrayList()
// Collect all the groups of fields that exist
for (fieldType in listOf("headerFields", "primaryFields", "secondaryFields", "auxiliaryFields", "backFields")) {
val content = StringBuilder()
try {
val fieldArray = fieldsParent.getJSONArray(fieldType)
for (i in 0 until fieldArray.length()) {
val entry = fieldArray.getJSONObject(i)
content.append(parsePassJSONPassField(entry, locale))
// If this is not the last part, add spacing on the end
if (i < (fieldArray.length() - 1)) {
content.append("\n")
}
}
} catch (ignore: JSONException) {
} catch (ignore: ParseException) {
}
if (content.isNotEmpty()) {
noteContents.add(content.toString())
}
}
// Merge all field groups together, one paragraph for field group
val output = StringBuilder()
for (i in 0 until noteContents.size) {
output.append(noteContents[i])
// If this is not the last part, add newlines to separate
if (i < (noteContents.size - 1)) {
output.append("\n\n")
}
}
return output.toString()
}
private fun parsePassJSONPassField(field: JSONObject, locale: String?): String {
// Value may be a localizable string, a date or a number. So let's try to parse it as a date first
var value = getTranslation(field.getString("value"), locale)
try {
value = DateFormat.getDateTimeInstance().format(parseDateTime(value))
} catch (ignored: DateTimeParseException) {
// It's fine if it's not a date
}
// FIXME: Use the Android thing for formatted strings here
if (field.has("currencyCode")) {
val valueCurrency = Currency.getInstance(field.getString("currencyCode"))
value = Utils.formatBalance(
mContext,
Utils.parseBalance(value, valueCurrency),
valueCurrency
)
} else if (field.has("numberStyle")) {
if (field.getString("numberStyle") == "PKNumberStylePercent") {
// FIXME: Android formatting string
value = "${value}%"
}
}
val label = getTranslation(field.getString("label"), locale)
if (label.isNotEmpty()) {
return "$label: $value"
}
return value
}
companion object {
private const val TAG = "Catima"
}
}

View File

@@ -24,6 +24,8 @@ import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
@@ -35,6 +37,7 @@ import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.zxing.DecodeHintType;
import com.google.zxing.ResultPoint;
import com.google.zxing.client.android.Intents;
import com.journeyapps.barcodescanner.BarcodeCallback;
@@ -42,6 +45,8 @@ import com.journeyapps.barcodescanner.BarcodeResult;
import com.journeyapps.barcodescanner.CaptureManager;
import com.journeyapps.barcodescanner.DecoratedBarcodeView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import protect.card_locker.databinding.CustomBarcodeScannerBinding;
@@ -63,6 +68,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
private static final int PERMISSION_SCAN_ADD_FROM_IMAGE = 100;
private static final int PERMISSION_SCAN_ADD_FROM_PDF = 101;
private static final int PERMISSION_SCAN_ADD_FROM_PKPASS = 102;
private CaptureManager capture;
private DecoratedBarcodeView barcodeScannerView;
@@ -75,6 +81,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
// can't use the pre-made contract because that launches the file manager for image type instead of gallery
private ActivityResultLauncher<Intent> photoPickerLauncher;
private ActivityResultLauncher<Intent> pdfPickerLauncher;
private ActivityResultLauncher<Intent> pkpassPickerLauncher;
static final String STATE_SCANNER_ACTIVE = "scannerActive";
private boolean mScannerActive = true;
@@ -82,7 +89,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
private void extractIntentFields(Intent intent) {
final Bundle b = intent.getExtras();
cardId = b != null ? b.getString(LoyaltyCardEditActivity.BUNDLE_CARDID) : null;
cardId = b != null ? b.getString(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID) : null;
addGroup = b != null ? b.getString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP) : null;
Log.d(TAG, "Scan activity: id=" + cardId);
}
@@ -94,6 +101,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
customBarcodeScannerBinding = CustomBarcodeScannerBinding.bind(binding.zxingBarcodeScanner);
setTitle(R.string.scanCardBarcode);
setContentView(binding.getRoot());
Utils.applyWindowInsets(binding.getRoot());
Toolbar toolbar = binding.toolbar;
setSupportActionBar(toolbar);
enableToolbarBackButton();
@@ -103,18 +111,46 @@ public class ScanActivity extends CatimaAppCompatActivity {
manualAddLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> handleActivityResult(Utils.SELECT_BARCODE_REQUEST, result.getResultCode(), result.getData()));
photoPickerLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> handleActivityResult(Utils.BARCODE_IMPORT_FROM_IMAGE_FILE, result.getResultCode(), result.getData()));
pdfPickerLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> handleActivityResult(Utils.BARCODE_IMPORT_FROM_PDF_FILE, result.getResultCode(), result.getData()));
pkpassPickerLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), result -> handleActivityResult(Utils.BARCODE_IMPORT_FROM_PKPASS_FILE, result.getResultCode(), result.getData()));
customBarcodeScannerBinding.fabOtherOptions.setOnClickListener(view -> {
setScannerActive(false);
ArrayList<HashMap<String, Object>> list = new ArrayList<>();
String[] texts = new String[]{
getString(R.string.addWithoutBarcode),
getString(R.string.addManually),
getString(R.string.addFromImage),
getString(R.string.addFromPdfFile),
getString(R.string.addFromPkpass)
};
Object[] icons = new Object[]{
R.drawable.baseline_block_24,
R.drawable.ic_edit,
R.drawable.baseline_image_24,
R.drawable.baseline_picture_as_pdf_24,
R.drawable.local_activity_24px
};
String[] columns = new String[]{"text", "icon"};
for (int i = 0; i < texts.length; i++) {
HashMap<String, Object> map = new HashMap<>();
map.put(columns[0], texts[i]);
map.put(columns[1], icons[i]);
list.add(map);
}
ListAdapter adapter = new SimpleAdapter(
ScanActivity.this,
list,
R.layout.alertdialog_row_with_icon,
columns,
new int[]{R.id.textView, R.id.imageView}
);
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(ScanActivity.this);
builder.setTitle(getString(R.string.add_a_card_in_a_different_way));
builder.setItems(
new CharSequence[]{
getString(R.string.addWithoutBarcode),
getString(R.string.addManually),
getString(R.string.addFromImage),
getString(R.string.addFromPdfFile)
},
builder.setAdapter(
adapter,
(dialogInterface, i) -> {
switch (i) {
case 0:
@@ -127,7 +163,10 @@ public class ScanActivity extends CatimaAppCompatActivity {
addFromImage();
break;
case 3:
addFromPdfFile();
addFromPdf();
break;
case 4:
addFromPkPass();
break;
default:
throw new IllegalArgumentException("Unknown 'Add a card in a different way' dialog option");
@@ -138,7 +177,13 @@ public class ScanActivity extends CatimaAppCompatActivity {
builder.show();
});
// Configure barcodeScanner
barcodeScannerView = binding.zxingBarcodeScanner;
Intent barcodeScannerIntent = new Intent();
Bundle barcodeScannerIntentBundle = new Bundle();
barcodeScannerIntentBundle.putBoolean(DecodeHintType.ALSO_INVERTED.name(), Boolean.TRUE);
barcodeScannerIntent.putExtras(barcodeScannerIntentBundle);
barcodeScannerView.initializeFromIntent(barcodeScannerIntent);
// Even though we do the actual decoding with the barcodeScannerView
// CaptureManager needs to be running to show the camera and scanning bar
@@ -152,16 +197,11 @@ public class ScanActivity extends CatimaAppCompatActivity {
barcodeScannerView.decodeSingle(new BarcodeCallback() {
@Override
public void barcodeResult(BarcodeResult result) {
Intent scanResult = new Intent();
Bundle scanResultBundle = new Bundle();
scanResultBundle.putString(BARCODE_CONTENTS, result.getText());
scanResultBundle.putString(BARCODE_FORMAT, result.getBarcodeFormat().name());
if (addGroup != null) {
scanResultBundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, addGroup);
}
scanResult.putExtras(scanResultBundle);
ScanActivity.this.setResult(RESULT_OK, scanResult);
finish();
LoyaltyCard loyaltyCard = new LoyaltyCard();
loyaltyCard.setCardId(result.getText());
loyaltyCard.setBarcodeType(CatimaBarcode.fromBarcode(result.getBarcodeFormat()));
returnResult(new ParseResult(ParseResultType.BARCODE_ONLY, loyaltyCard));
}
@Override
@@ -265,33 +305,31 @@ public class ScanActivity extends CatimaAppCompatActivity {
mScannerActive = isActive;
}
private void returnResult(String barcodeContents, String barcodeFormat) {
Intent manualResult = new Intent();
Bundle manualResultBundle = new Bundle();
manualResultBundle.putString(BARCODE_CONTENTS, barcodeContents);
manualResultBundle.putString(BARCODE_FORMAT, barcodeFormat);
private void returnResult(ParseResult parseResult) {
Intent result = new Intent();
Bundle bundle = parseResult.toLoyaltyCardBundle(ScanActivity.this);
if (addGroup != null) {
manualResultBundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, addGroup);
bundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, addGroup);
}
manualResult.putExtras(manualResultBundle);
ScanActivity.this.setResult(RESULT_OK, manualResult);
result.putExtras(bundle);
ScanActivity.this.setResult(RESULT_OK, result);
finish();
}
private void handleActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
List<BarcodeValues> barcodeValuesList = Utils.parseSetBarcodeActivityResult(requestCode, resultCode, intent, this);
List<ParseResult> parseResultList = Utils.parseSetBarcodeActivityResult(requestCode, resultCode, intent, this);
if (barcodeValuesList.isEmpty()) {
if (parseResultList.isEmpty()) {
setScannerActive(true);
return;
}
Utils.makeUserChooseBarcodeFromList(this, barcodeValuesList, new BarcodeValuesListDisambiguatorCallback() {
Utils.makeUserChooseParseResultFromList(this, parseResultList, new ParseResultListDisambiguatorCallback() {
@Override
public void onUserChoseBarcode(BarcodeValues barcodeValues) {
returnResult(barcodeValues.content(), barcodeValues.format());
public void onUserChoseParseResult(ParseResult parseResult) {
returnResult(parseResult);
}
@Override
@@ -338,7 +376,9 @@ public class ScanActivity extends CatimaAppCompatActivity {
// Buttons
builder.setPositiveButton(getString(R.string.ok), (dialog, which) -> {
returnResult(input.getText().toString(), "");
LoyaltyCard loyaltyCard = new LoyaltyCard();
loyaltyCard.setCardId(input.getText().toString());
returnResult(new ParseResult(ParseResultType.BARCODE_ONLY, loyaltyCard));
});
builder.setNegativeButton(getString(R.string.cancel), (dialog, which) -> dialog.cancel());
AlertDialog dialog = builder.create();
@@ -373,7 +413,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
Intent i = new Intent(getApplicationContext(), BarcodeSelectorActivity.class);
if (cardId != null) {
final Bundle b = new Bundle();
b.putString("initialCardId", cardId);
b.putString(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID, cardId);
i.putExtras(b);
}
manualAddLauncher.launch(i);
@@ -387,10 +427,14 @@ public class ScanActivity extends CatimaAppCompatActivity {
PermissionUtils.requestStorageReadPermission(this, PERMISSION_SCAN_ADD_FROM_IMAGE);
}
public void addFromPdfFile() {
public void addFromPdf() {
PermissionUtils.requestStorageReadPermission(this, PERMISSION_SCAN_ADD_FROM_PDF);
}
public void addFromPkPass() {
PermissionUtils.requestStorageReadPermission(this, PERMISSION_SCAN_ADD_FROM_PKPASS);
}
private void addFromImageOrFileAfterPermission(String mimeType, ActivityResultLauncher<Intent> launcher, int chooserText, int errorMessage) {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType(mimeType);
@@ -480,12 +524,14 @@ public class ScanActivity extends CatimaAppCompatActivity {
} else {
showCameraPermissionMissingText();
}
} else if (requestCode == PERMISSION_SCAN_ADD_FROM_IMAGE || requestCode == PERMISSION_SCAN_ADD_FROM_PDF) {
} else if (requestCode == PERMISSION_SCAN_ADD_FROM_IMAGE || requestCode == PERMISSION_SCAN_ADD_FROM_PDF || requestCode == PERMISSION_SCAN_ADD_FROM_PKPASS) {
if (granted) {
if (requestCode == PERMISSION_SCAN_ADD_FROM_IMAGE) {
addFromImageOrFileAfterPermission("image/*", photoPickerLauncher, R.string.addFromImage, R.string.failedLaunchingPhotoPicker);
} else {
} else if (requestCode == PERMISSION_SCAN_ADD_FROM_PDF) {
addFromImageOrFileAfterPermission("application/pdf", pdfPickerLauncher, R.string.addFromPdfFile, R.string.failedLaunchingFileManager);
} else {
addFromImageOrFileAfterPermission("application/*", pkpassPickerLauncher, R.string.addFromPkpass, R.string.failedLaunchingFileManager);
}
} else {
setScannerActive(true);

View File

@@ -33,7 +33,6 @@ class ShortcutHelper {
private static final int ADAPTIVE_BITMAP_SIZE = 108 * ADAPTIVE_BITMAP_SCALE;
private static final int ADAPTIVE_BITMAP_VISIBLE_SIZE = 72 * ADAPTIVE_BITMAP_SCALE;
private static final int ADAPTIVE_BITMAP_IMAGE_SIZE = ADAPTIVE_BITMAP_VISIBLE_SIZE + 5 * ADAPTIVE_BITMAP_SCALE;
private static final int PADDING_COLOR_OVERLAY = Color.argb(127, 0, 0, 0);
/**
* Add a card to the app shortcuts, and maintain a list of the most
@@ -87,7 +86,7 @@ class ShortcutHelper {
for (int index = 0; index < list.size(); index++) {
ShortcutInfoCompat prevShortcut = list.get(index);
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(database, Integer.parseInt(prevShortcut.getId()));
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(context, database, Integer.parseInt(prevShortcut.getId()));
// skip outdated cards that no longer exist
if (loyaltyCard != null) {
@@ -120,7 +119,7 @@ class ShortcutHelper {
Bitmap createAdaptiveBitmap(@NotNull Bitmap in, int paddingColor) {
Bitmap ret = Bitmap.createBitmap(ADAPTIVE_BITMAP_SIZE, ADAPTIVE_BITMAP_SIZE, Bitmap.Config.ARGB_8888);
Canvas output = new Canvas(ret);
output.drawColor(ColorUtils.compositeColors(PADDING_COLOR_OVERLAY, paddingColor));
output.drawColor(paddingColor);
Bitmap resized = Utils.resizeBitmap(in, ADAPTIVE_BITMAP_IMAGE_SIZE);
output.drawBitmap(resized, (ADAPTIVE_BITMAP_SIZE - resized.getWidth()) / 2f, (ADAPTIVE_BITMAP_SIZE - resized.getHeight()) / 2f, null);
return ret;
@@ -133,15 +132,14 @@ class ShortcutHelper {
// one replace it.
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_SINGLE_TOP);
final Bundle bundle = new Bundle();
bundle.putInt("id", loyaltyCard.id);
bundle.putBoolean("view", true);
bundle.putInt(LoyaltyCardViewActivity.BUNDLE_ID, loyaltyCard.id);
intent.putExtras(bundle);
Bitmap iconBitmap = Utils.retrieveCardImage(context, loyaltyCard.id, ImageLocationType.icon);
Bitmap iconBitmap = loyaltyCard.getImageThumbnail(context);
if (iconBitmap == null) {
iconBitmap = Utils.generateIcon(context, loyaltyCard, true).getLetterTile();
} else {
iconBitmap = createAdaptiveBitmap(iconBitmap, Utils.getHeaderColor(context, loyaltyCard));
iconBitmap = createAdaptiveBitmap(iconBitmap, Utils.needsDarkForeground(Utils.getHeaderColor(context, loyaltyCard)) ? Color.BLACK : Color.WHITE);
}
IconCompat icon = IconCompat.createWithAdaptiveBitmap(iconBitmap);

View File

@@ -24,6 +24,13 @@ import com.yalantis.ucrop.UCropActivity;
public class UCropWrapper extends UCropActivity {
public static final String UCROP_TOOLBAR_TYPEFACE_STYLE = "ucop_toolbar_typeface_style";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Utils.applyWindowInsets(findViewById(android.R.id.content));
}
@Override
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);

View File

@@ -4,11 +4,13 @@ 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;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ImageDecoder;
import android.graphics.Matrix;
@@ -26,6 +28,7 @@ import android.util.Log;
import android.util.TypedValue;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ImageView;
import android.widget.TextView;
@@ -37,7 +40,10 @@ import androidx.annotation.RawRes;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.core.graphics.ColorUtils;
import androidx.core.graphics.Insets;
import androidx.core.os.LocaleListCompat;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.core.view.WindowInsetsControllerCompat;
import androidx.core.widget.TextViewCompat;
import androidx.exifinterface.media.ExifInterface;
@@ -45,13 +51,15 @@ 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;
import com.google.zxing.DecodeHintType;
import com.google.zxing.NotFoundException;
import com.google.zxing.RGBLuminanceSource;
import com.google.zxing.Result;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.common.GlobalHistogramBinarizer;
import com.google.zxing.multi.GenericMultipleBarcodeReader;
import com.google.zxing.multi.MultipleBarcodeReader;
@@ -77,7 +85,9 @@ import java.util.Calendar;
import java.util.Collections;
import java.util.Currency;
import java.util.Date;
import java.util.EnumMap;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -95,12 +105,13 @@ public class Utils {
public static final int BARCODE_SCAN = 3;
public static final int BARCODE_IMPORT_FROM_IMAGE_FILE = 4;
public static final int BARCODE_IMPORT_FROM_PDF_FILE = 5;
public static final int CARD_IMAGE_FROM_CAMERA_FRONT = 6;
public static final int CARD_IMAGE_FROM_CAMERA_BACK = 7;
public static final int CARD_IMAGE_FROM_CAMERA_ICON = 8;
public static final int CARD_IMAGE_FROM_FILE_FRONT = 9;
public static final int CARD_IMAGE_FROM_FILE_BACK = 10;
public static final int CARD_IMAGE_FROM_FILE_ICON = 11;
public static final int BARCODE_IMPORT_FROM_PKPASS_FILE = 6;
public static final int CARD_IMAGE_FROM_CAMERA_FRONT = 7;
public static final int CARD_IMAGE_FROM_CAMERA_BACK = 8;
public static final int CARD_IMAGE_FROM_CAMERA_ICON = 9;
public static final int CARD_IMAGE_FROM_FILE_FRONT = 10;
public static final int CARD_IMAGE_FROM_FILE_BACK = 11;
public static final int CARD_IMAGE_FROM_FILE_ICON = 12;
public static final String CARD_IMAGE_FILENAME_REGEX = "^(card_)(\\d+)(_(?:front|back|icon)\\.png)$";
@@ -143,7 +154,7 @@ public class Utils {
return ColorUtils.calculateLuminance(backgroundColor) > LUMINANCE_MIDPOINT;
}
static public List<BarcodeValues> retrieveBarcodesFromImage(Context context, Uri uri) {
static public List<ParseResult> retrieveBarcodesFromImage(Context context, Uri uri) {
Log.i(TAG, "Received image file with possible barcode");
if (uri == null) {
@@ -162,7 +173,7 @@ public class Utils {
return new ArrayList<>();
}
List<BarcodeValues> barcodesFromBitmap = getBarcodesFromBitmap(bitmap);
List<ParseResult> barcodesFromBitmap = getBarcodesFromBitmap(bitmap);
if (barcodesFromBitmap.isEmpty()) {
Log.i(TAG, "No barcode found in image file");
@@ -172,7 +183,52 @@ public class Utils {
return barcodesFromBitmap;
}
static public List<BarcodeValues> retrieveBarcodesFromPdf(Context context, Uri uri) {
static public List<ParseResult> retrieveBarcodesFromPkPass(Context context, Uri uri) {
Log.i(TAG, "Received Pkpass file with possible barcode");
if (uri == null) {
Log.e(TAG, "Pkpass did not contain any data");
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
}
PkpassParser pkpassParser;
try {
pkpassParser = new PkpassParser(context, uri);
} catch (Exception e) {
Log.e(TAG, "Error reading pkpass file", e);
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
}
List<String> locales = pkpassParser.listLocales();
if (locales.isEmpty()) {
try {
return Collections.singletonList(new ParseResult(ParseResultType.FULL, pkpassParser.toLoyaltyCard(null)));
} catch (Exception e) {
Log.e(TAG, "Error calling toLoyaltyCard on pkpass file", e);
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
}
}
List<ParseResult> parseResultList = new ArrayList<>();
for (String locale : locales) {
ParseResult parseResult;
try {
parseResult = new ParseResult(ParseResultType.FULL, pkpassParser.toLoyaltyCard(locale));
} catch (Exception e) {
Log.e(TAG, "Error calling toLoyaltyCard on pkpass file", e);
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
}
parseResult.setNote(locale);
parseResultList.add(parseResult);
}
return parseResultList;
}
static public List<ParseResult> retrieveBarcodesFromPdf(Context context, Uri uri) {
Log.i(TAG, "Received PDF file with possible barcode");
if (uri == null) {
Log.e(TAG, "Uri did not contain any data");
@@ -182,7 +238,7 @@ public class Utils {
ParcelFileDescriptor parcelFileDescriptor = null;
PdfRenderer renderer = null;
List<BarcodeValues> barcodesFromPdfPages = new ArrayList<>();
List<ParseResult> barcodesFromPdfPages = new ArrayList<>();
try {
parcelFileDescriptor = context.getContentResolver().openFileDescriptor(uri, "r");
@@ -194,13 +250,20 @@ public class Utils {
for (int i = 0; i < renderer.getPageCount(); i++) {
PdfRenderer.Page page = renderer.openPage(i);
renderedPage = Bitmap.createBitmap(page.getWidth(), page.getHeight(), Bitmap.Config.ARGB_8888);
// Ensure the page has a background
// Fixes some transparent PDF files not being read well
Canvas canvas = new Canvas(renderedPage);
canvas.drawColor(Color.WHITE);
canvas.drawBitmap(renderedPage, 0, 0, null);
page.render(renderedPage, null, null, PdfRenderer.Page.RENDER_MODE_FOR_DISPLAY);
page.close();
List<BarcodeValues> barcodesFromPage = getBarcodesFromBitmap(renderedPage);
for (BarcodeValues barcodeValues : barcodesFromPage) {
barcodeValues.setNote(String.format(context.getString(R.string.pageWithNumber), i+1));
barcodesFromPdfPages.add(barcodeValues);
List<ParseResult> barcodesFromPage = getBarcodesFromBitmap(renderedPage);
for (ParseResult parseResult : barcodesFromPage) {
parseResult.setNote(String.format(context.getString(R.string.pageWithNumber), i+1));
barcodesFromPdfPages.add(parseResult);
}
}
}
@@ -229,17 +292,17 @@ public class Utils {
}
/**
* Returns the Barcode format and content based on the result of an activity.
* It shows toasts to notify the end-user as needed itself and will return an empty
* BarcodeValues object if the activity was cancelled or nothing could be found.
* Returns the ParseResult based on the result of an activity.
* It shows toasts to notify the end-user as needed itself and will return an empty list if the
* activity was cancelled or nothing could be found.
*
* @param requestCode
* @param resultCode
* @param intent
* @param context
* @return BarcodeValues
* @return List<ParseResult>
*/
static public List<BarcodeValues> parseSetBarcodeActivityResult(int requestCode, int resultCode, Intent intent, Context context) {
static public List<ParseResult> parseSetBarcodeActivityResult(int requestCode, int resultCode, Intent intent, Context context) {
String contents;
String format;
@@ -255,6 +318,10 @@ public class Utils {
return retrieveBarcodesFromPdf(context, intent.getData());
}
if (requestCode == Utils.BARCODE_IMPORT_FROM_PKPASS_FILE) {
return retrieveBarcodesFromPkPass(context, intent.getData());
}
if (requestCode == Utils.BARCODE_SCAN || requestCode == Utils.SELECT_BARCODE_REQUEST) {
if (requestCode == Utils.BARCODE_SCAN) {
Log.i(TAG, "Received barcode information from camera");
@@ -268,7 +335,15 @@ public class Utils {
Log.i(TAG, "Read barcode id: " + contents);
Log.i(TAG, "Read format: " + format);
return Collections.singletonList(new BarcodeValues(format, contents));
LoyaltyCard loyaltyCard = new LoyaltyCard();
if (format != null) {
loyaltyCard.setBarcodeType(CatimaBarcode.fromName(format));
}
if (contents != null) {
loyaltyCard.setCardId(contents);
}
return Collections.singletonList(new ParseResult(ParseResultType.BARCODE_ONLY, loyaltyCard));
}
throw new UnsupportedOperationException("Unknown request code for parseSetBarcodeActivityResult");
@@ -288,7 +363,7 @@ public class Utils {
return MediaStore.Images.Media.getBitmap(context.getContentResolver(), data);
}
static public List<BarcodeValues> getBarcodesFromBitmap(Bitmap bitmap) {
static public List<ParseResult> getBarcodesFromBitmap(Bitmap bitmap) {
// This function is vulnerable to OOM, so we try again with a smaller bitmap is we get OOM
for (int i = 0; i < 10; i++) {
try {
@@ -303,59 +378,67 @@ public class Utils {
return new ArrayList<>();
}
static private List<BarcodeValues> getBarcodesFromBitmapReal(Bitmap bitmap) {
static private List<ParseResult> getBarcodesFromBitmapReal(Bitmap bitmap) {
// In order to decode it, the Bitmap must first be converted into a pixel array...
int[] intArray = new int[bitmap.getWidth() * bitmap.getHeight()];
bitmap.getPixels(intArray, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
// ...and then turned into a binary bitmap from its luminance
LuminanceSource source = new RGBLuminanceSource(bitmap.getWidth(), bitmap.getHeight(), intArray);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(source));
BinaryBitmap binaryBitmap = new BinaryBitmap(new GlobalHistogramBinarizer(source));
List<BarcodeValues> barcodeValuesList = new ArrayList<>();
List<ParseResult> parseResultList = new ArrayList<>();
try {
MultiFormatReader multiFormatReader = new MultiFormatReader();
MultipleBarcodeReader multipleBarcodeReader = new GenericMultipleBarcodeReader(multiFormatReader);
Result[] barcodeResults = multipleBarcodeReader.decodeMultiple(binaryBitmap);
Map<DecodeHintType, Object> hints = new EnumMap<>(DecodeHintType.class);
hints.put(DecodeHintType.ALSO_INVERTED, Boolean.TRUE);
Result[] barcodeResults = multipleBarcodeReader.decodeMultiple(binaryBitmap,hints);
for (Result barcodeResult : barcodeResults) {
Log.i(TAG, "Read barcode id: " + barcodeResult.getText());
Log.i(TAG, "Read format: " + barcodeResult.getBarcodeFormat().name());
barcodeValuesList.add(new BarcodeValues(barcodeResult.getBarcodeFormat().name(), barcodeResult.getText()));
LoyaltyCard loyaltyCard = new LoyaltyCard();
loyaltyCard.setCardId(barcodeResult.getText());
loyaltyCard.setBarcodeType(CatimaBarcode.fromBarcode(barcodeResult.getBarcodeFormat()));
parseResultList.add(new ParseResult(ParseResultType.BARCODE_ONLY, loyaltyCard));
}
return barcodeValuesList;
return parseResultList;
} catch (NotFoundException e) {
return barcodeValuesList;
return parseResultList;
}
}
static public void makeUserChooseBarcodeFromList(Context context, List<BarcodeValues> barcodeValuesList, BarcodeValuesListDisambiguatorCallback callback) {
static public void makeUserChooseParseResultFromList(Context context, List<ParseResult> parseResultList, ParseResultListDisambiguatorCallback callback) {
// If there is only one choice, consider it chosen
if (barcodeValuesList.size() == 1) {
callback.onUserChoseBarcode(barcodeValuesList.get(0));
if (parseResultList.size() == 1) {
callback.onUserChoseParseResult(parseResultList.get(0));
return;
}
// Ask user to choose a barcode
// TODO: This should contain an image of the barcode in question to help users understand the choice they're making
CharSequence[] barcodeDescriptions = new CharSequence[barcodeValuesList.size()];
for (int i = 0; i < barcodeValuesList.size(); i++) {
BarcodeValues barcodeValues = barcodeValuesList.get(i);
CatimaBarcode catimaBarcode = CatimaBarcode.fromName(barcodeValues.format());
CharSequence[] barcodeDescriptions = new CharSequence[parseResultList.size()];
for (int i = 0; i < parseResultList.size(); i++) {
ParseResult parseResult = parseResultList.get(i);
CatimaBarcode catimaBarcode = parseResult.getLoyaltyCard().barcodeType;
String barcodeContent = barcodeValues.content();
String barcodeContent = parseResult.getLoyaltyCard().cardId;
// Shorten overly long barcodes
if (barcodeContent.length() > 22) {
barcodeContent = barcodeContent.substring(0, 20) + "";
}
if (barcodeValues.note() != null) {
barcodeDescriptions[i] = String.format("%s: %s (%s)", barcodeValues.note(), catimaBarcode.prettyName(), barcodeContent);
String parseResultNote = parseResult.getNote();
if (parseResultNote != null) {
barcodeDescriptions[i] = String.format("%s: %s (%s)", parseResultNote, catimaBarcode != null ? catimaBarcode.prettyName() : context.getString(R.string.noBarcode), barcodeContent);
} else {
barcodeDescriptions[i] = String.format("%s (%s)", catimaBarcode.prettyName(), barcodeContent);
barcodeDescriptions[i] = String.format("%s (%s)", catimaBarcode != null ? catimaBarcode.prettyName() : context.getString(R.string.noBarcode), barcodeContent);
}
}
@@ -363,7 +446,7 @@ public class Utils {
builder.setTitle(context.getString(R.string.multipleBarcodesFoundPleaseChooseOne));
builder.setItems(
barcodeDescriptions,
(dialogInterface, i) -> callback.onUserChoseBarcode(barcodeValuesList.get(i))
(dialogInterface, i) -> callback.onUserChoseParseResult(parseResultList.get(i))
);
builder.setOnCancelListener(dialogInterface -> callback.onUserDismissedSelector());
builder.show();
@@ -513,6 +596,11 @@ public class Utils {
double width = bitmap.getWidth();
double height = bitmap.getHeight();
// Early exit
if (Math.max(width, height) <= maxSize) {
return bitmap;
}
if (height > width) {
double scale = height / maxSize;
height = maxSize;
@@ -783,7 +871,7 @@ public class Utils {
}
}
public static Bitmap loadImage(String path) {
public static @Nullable Bitmap loadImage(String path) {
try {
return BitmapFactory.decodeStream(new FileInputStream(path));
} catch (IOException e) {
@@ -792,7 +880,7 @@ public class Utils {
}
}
public static Bitmap loadTempImage(Context context, String name) {
public static @Nullable Bitmap loadTempImage(Context context, String name) {
return loadImage(context.getCacheDir() + "/" + name);
}
@@ -869,7 +957,7 @@ public class Utils {
return typedValue.data;
}
public static int getHeaderColorFromImage(Bitmap image, int fallback) {
public static int getHeaderColorFromImage(@Nullable Bitmap image, int fallback) {
if (image == null) {
return fallback;
}
@@ -934,27 +1022,37 @@ public class Utils {
* @param textWhenNoImage TextView to write the loyalty card name into if icon is null
* @return background colour
*/
public static int setIconOrTextWithBackground(Context context, LoyaltyCard loyaltyCard, Bitmap icon, ImageView backgroundOrIcon, TextView textWhenNoImage) {
public static int setIconOrTextWithBackground(Context context, LoyaltyCard loyaltyCard, Bitmap icon, ImageView backgroundOrIcon, TextView textWhenNoImage, int columnCount) {
int headerColor = getHeaderColor(context, loyaltyCard);
backgroundOrIcon.setImageBitmap(icon);
backgroundOrIcon.setBackgroundColor(headerColor);
if (icon != null) {
// Use header colour to decide if this image will need a white or black background
backgroundOrIcon.setBackgroundColor(needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
// Ensure correct cropping style
backgroundOrIcon.setScaleType(Utils.getRecommendedScaleTypeForThumbnailImage(icon));
textWhenNoImage.setVisibility(View.GONE);
} else {
// Use header colour as background colour
backgroundOrIcon.setBackgroundColor(headerColor);
// Manually calculate how many lines will be needed
// This is necessary because Android's auto sizing will split over lines way before reaching the minimum font size and store names split over multiple lines are harder to scan with a quick glance so we should try to prevent it
// Because we have to write the text before we can actually know the exact laid out size (trying to delay this causes bugs where the autosize fails) we have to take some... weird shortcuts
// At this point textWhenNoImage.getWidth() still returns 0, so we cheat by calculating the whole width of the screen and then dividing it by the amount of columns
int textviewWidth = Resources.getSystem().getDisplayMetrics().widthPixels / context.getResources().getInteger(R.integer.main_view_card_columns);
int columnWidth = Resources.getSystem().getDisplayMetrics().widthPixels / columnCount;
// Calculate how wide a character is and calculate how many characters fit in a line
// text size is generally based on height, so setting 1:1 as width may be fishy
int characterWidth = TextViewCompat.getAutoSizeMinTextSize(textWhenNoImage);
int maxWidthPerLine = textviewWidth - textWhenNoImage.getPaddingStart() - textWhenNoImage.getPaddingEnd();
int maxWidthPerLine = columnWidth - textWhenNoImage.getPaddingStart() - textWhenNoImage.getPaddingEnd();
// Set amount of lines based on what could fit at most
int maxLines = ((loyaltyCard.store.length() * characterWidth) / maxWidthPerLine) + 1;
// Set number of lines based on what could fit at most
int fullTextWidth = loyaltyCard.store.length() * characterWidth;
int maxLines = (fullTextWidth / maxWidthPerLine) + 1;
textWhenNoImage.setMaxLines(maxLines);
// Actually set the text and colour
@@ -966,21 +1064,6 @@ public class Utils {
return headerColor;
}
public static boolean installedFromGooglePlay(Context context) {
try {
String packageName = context.getPackageName();
String installer;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
installer = context.getPackageManager().getInstallSourceInfo(packageName).getInstallingPackageName();
} else {
installer = context.getPackageManager().getInstallerPackageName(packageName);
}
return installer.equals("com.android.vending");
} catch (Throwable ignored) {
return false;
}
}
public static int getHeaderColor(Context context, LoyaltyCard loyaltyCard) {
return loyaltyCard.headerColor != null ? loyaltyCard.headerColor : LetterBitmap.getDefaultColor(context, loyaltyCard.store);
}
@@ -1042,4 +1125,92 @@ public class Utils {
return false;
}
}
public static void applyWindowInsets(View root) {
/* This function basically fakes the activity being edge-to-edge. Useful for those activities that are really hard to get to behave well */
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);
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
if (image == null) {
return ImageView.ScaleType.FIT_CENTER;
}
// If the image is relatively close to 85.6:53.98 (width = 1.58577250834 * height), allow cropping it to fit it
double ratio = (double) image.getWidth() / image.getHeight();
if (ratio >= 1.55 && ratio <= 1.60) {
return ImageView.ScaleType.CENTER_CROP;
}
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

@@ -23,7 +23,7 @@ public class ZipUtils {
return new JSONObject(read(zipInputStream));
}
private static String read(ZipInputStream zipInputStream) throws IOException {
public static String read(ZipInputStream zipInputStream) throws IOException {
StringBuilder stringBuilder = new StringBuilder();
Reader reader = new BufferedReader(new InputStreamReader(zipInputStream, StandardCharsets.UTF_8));
int c;

View File

@@ -49,7 +49,7 @@ public class CatimaExporter implements Exporter {
// Generate CSV
ByteArrayOutputStream catimaOutputStream = new ByteArrayOutputStream();
OutputStreamWriter catimaOutputStreamWriter = new OutputStreamWriter(catimaOutputStream, StandardCharsets.UTF_8);
writeCSV(database, catimaOutputStreamWriter);
writeCSV(context, database, catimaOutputStreamWriter);
// Add CSV to zip file
ZipParameters csvZipParameters = createZipParameters("catima.csv", password);
@@ -64,12 +64,12 @@ public class CatimaExporter implements Exporter {
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(database);
while (cardCursor.moveToNext()) {
// For each card
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cardCursor);
LoyaltyCard card = LoyaltyCard.fromCursor(context, cardCursor);
// For each image
for (ImageLocationType imageLocationType : ImageLocationType.values()) {
// If it exists, add to the .zip file
Bitmap image = Utils.retrieveCardImage(context, card.id, imageLocationType);
Bitmap image = card.getImageForImageLocationType(context, imageLocationType);
if (image != null) {
ZipParameters imageZipParameters = createZipParameters(Utils.getCardImageFileName(card.id, imageLocationType), password);
zipOutputStream.putNextEntry(imageZipParameters);
@@ -95,7 +95,7 @@ public class CatimaExporter implements Exporter {
return zipParameters;
}
private void writeCSV(SQLiteDatabase database, OutputStreamWriter output) throws IOException, InterruptedException {
private void writeCSV(Context context, SQLiteDatabase database, OutputStreamWriter output) throws IOException, InterruptedException {
CSVPrinter printer = new CSVPrinter(output, CSVFormat.RFC4180);
// Print the version
@@ -142,7 +142,7 @@ public class CatimaExporter implements Exporter {
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(database);
while (cardCursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cardCursor);
LoyaltyCard card = LoyaltyCard.fromCursor(context, cardCursor);
printer.printRecord(card.id,
card.store,
@@ -176,7 +176,7 @@ public class CatimaExporter implements Exporter {
Cursor cardCursor2 = DBHelper.getLoyaltyCardCursor(database);
while (cardCursor2.moveToNext()) {
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cardCursor2);
LoyaltyCard card = LoyaltyCard.fromCursor(context, cardCursor2);
for (Group group : DBHelper.getLoyaltyCardGroups(database, card.id)) {
printer.printRecord(card.id, group._id);

View File

@@ -124,7 +124,7 @@ public class CatimaImporter implements Importer {
Set<String> existingImages = DBHelper.imageFiles(context, database);
for (LoyaltyCard card : data.cards) {
LoyaltyCard existing = DBHelper.getLoyaltyCard(database, card.id);
LoyaltyCard existing = DBHelper.getLoyaltyCard(context, database, card.id);
if (existing == null) {
DBHelper.insertLoyaltyCard(database, card.id, card.store, card.note, card.validFrom, card.expiry, card.balance, card.balanceType,
card.cardId, card.barcodeId, card.barcodeType, card.headerColor, card.starStatus, card.lastUsed, card.archiveStatus);
@@ -152,7 +152,7 @@ public class CatimaImporter implements Importer {
}
public boolean isDuplicate(Context context, final LoyaltyCard existing, final LoyaltyCard card, final Set<String> existingImages, final Map<String, String> imageChecksums) throws IOException {
if (!LoyaltyCard.isDuplicate(existing, card)) {
if (!LoyaltyCard.isDuplicate(context, existing, card)) {
return false;
}
for (ImageLocationType imageLocationType : ImageLocationType.values()) {
@@ -490,7 +490,30 @@ public class CatimaImporter implements Importer {
// We catch this exception so we can still import old backups
}
return new LoyaltyCard(id, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus, lastUsed, DBHelper.DEFAULT_ZOOM_LEVEL, archiveStatus);
return new LoyaltyCard(
id,
store,
note,
validFrom,
expiry,
balance,
balanceType,
cardId,
barcodeId,
barcodeType,
headerColor,
starStatus,
lastUsed,
DBHelper.DEFAULT_ZOOM_LEVEL,
DBHelper.DEFAULT_ZOOM_LEVEL_WIDTH,
archiveStatus,
null,
null,
null,
null,
null,
null
);
}
/**

View File

@@ -149,7 +149,30 @@ public class FidmeImporter implements Importer {
// TODO: Front and back image
// use -1 for the ID, it will be ignored when inserting the card into the DB
return new LoyaltyCard(-1, store, note, null, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, headerColor, starStatus, Utils.getUnixTime(), DBHelper.DEFAULT_ZOOM_LEVEL, archiveStatus);
return new LoyaltyCard(
-1,
store,
note,
null,
null,
BigDecimal.valueOf(0),
null,
cardId,
null,
barcodeType,
headerColor,
starStatus,
Utils.getUnixTime(),
DBHelper.DEFAULT_ZOOM_LEVEL,
DBHelper.DEFAULT_ZOOM_LEVEL_WIDTH,
archiveStatus,
null,
null,
null,
null,
null,
null
);
}
public void saveAndDeduplicate(SQLiteDatabase database, final ImportedData data) {

View File

@@ -9,8 +9,9 @@ import androidx.annotation.NonNull;
import com.google.zxing.BarcodeFormat;
import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.io.inputstream.ZipInputStream;
import net.lingala.zip4j.model.LocalFileHeader;
import net.lingala.zip4j.model.FileHeader;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
@@ -20,9 +21,7 @@ import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
@@ -130,11 +129,9 @@ public class StocardImporter implements Importer {
throw new FormatException("Issue parsing CSV data", e);
}
InputStream input = new FileInputStream(inputFile);
ZipInputStream zipInputStream = new ZipInputStream(input, password);
zipData = importZIP(zipInputStream, zipData);
zipInputStream.close();
input.close();
ZipFile zipFile = new ZipFile(inputFile, password);
zipData = importZIP(zipFile, zipData);
zipFile.close();
if (zipData.cards.keySet().size() == 0) {
throw new FormatException("Couldn't find any loyalty cards in this Stocard export.");
@@ -144,7 +141,7 @@ public class StocardImporter implements Importer {
saveAndDeduplicate(context, database, importedData);
}
public ZIPData importZIP(ZipInputStream zipInputStream, final ZIPData zipData) throws IOException, FormatException, JSONException {
public ZIPData importZIP(ZipFile zipFile, final ZIPData zipData) throws IOException, FormatException, JSONException {
Map<String, StocardRecord> cards = zipData.cards;
Map<String, StocardProvider> providers = zipData.providers;
@@ -152,9 +149,8 @@ public class StocardImporter implements Importer {
String[] cardBaseName = null;
String customProviderId = "";
String cardName = "";
LocalFileHeader localFileHeader;
while ((localFileHeader = zipInputStream.getNextEntry()) != null) {
String fileName = localFileHeader.getFileName();
for (FileHeader fileHeader : zipFile.getFileHeaders()) {
String fileName = fileHeader.getFileName();
String[] nameParts = fileName.split("/");
if (nameParts.length < 2) {
@@ -162,6 +158,7 @@ public class StocardImporter implements Importer {
}
String userId = nameParts[1];
ZipInputStream zipInputStream = zipFile.getInputStream(fileHeader);
if (customProvidersBaseName == null) {
// FIXME: can we use the points-account/statement/content.json balance info somehow?
@@ -302,6 +299,8 @@ public class StocardImporter implements Importer {
} else if (!fileName.endsWith("/")) {
Log.d(TAG, "Unknown or unused file " + fileName + ", skipping...");
}
zipInputStream.close();
}
return new ZIPData(cards, providers);
@@ -355,7 +354,30 @@ public class StocardImporter implements Importer {
long lastUsed = record.lastUsed != null ? record.lastUsed : Utils.getUnixTime();
LoyaltyCard card = new LoyaltyCard(tempID, store, note, null, null, BigDecimal.valueOf(0), null, record.cardId, null, barcodeType, headerColor, 0, lastUsed, DBHelper.DEFAULT_ZOOM_LEVEL, 0);
LoyaltyCard card = new LoyaltyCard(
tempID,
store,
note,
null,
null,
BigDecimal.valueOf(0),
null,
record.cardId,
null,
barcodeType,
headerColor,
0,
lastUsed,
DBHelper.DEFAULT_ZOOM_LEVEL,
DBHelper.DEFAULT_ZOOM_LEVEL_WIDTH,
0,
null,
null,
null,
null,
null,
null
);
importedData.cards.add(card);
Map<ImageLocationType, Bitmap> images = new HashMap<>();

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