Compare commits

...
Author SHA1 Message Date
TheLastProjectandgithub-actions[bot] c5add200d8 Update Fastlane changelogs 2025-09-25 19:51:11 +00:00
Sylvia van Os 0634007258 Update CHANGELOG 2025-09-25 21:50:56 +02:00
Sylvia van OsandGitHub 663f68fff9 Merge pull request #2107 from CatimaLoyalty/experiment/acra
Set up ACRA with email crash alerts
2025-09-25 21:46:41 +02:00
Sylvia van Os dc9f4fafde Set up ACRA with email crash alerts for foss build 2025-09-25 19:14:39 +02:00
Sylvia van OsandGitHub 6651aff962 Merge pull request #2611 from CatimaLoyalty/dependabot/gradle/androidx.core-core-ktx-1.17.0
Bump androidx.core:core-ktx from 1.16.0 to 1.17.0
2025-09-25 19:04:40 +02:00
dependabot[bot]andGitHub 55a6dfafed Bump androidx.core:core-ktx from 1.16.0 to 1.17.0
Bumps androidx.core:core-ktx from 1.16.0 to 1.17.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-25 16:03:28 +00:00
Sylvia van OsandGitHub a6bf282db5 Merge pull request #2706 from CatimaLoyalty/create-pull-request/patch-1758733079
Update Fastlane changelogs
2025-09-24 18:58:23 +02:00
TheLastProjectandgithub-actions[bot] 63bd0edb10 Update Fastlane changelogs 2025-09-24 16:57:58 +00:00
Sylvia van Os 9f2adf4691 Update CHANGELOG 2025-09-24 18:57:47 +02:00
Sylvia van OsandGitHub d36b95d275 Merge pull request #2697 from CatimaLoyalty/target/android16
Target Android 16
2025-09-24 18:56:31 +02:00
Sylvia van Os c7fdd63d7d Add some FIXMEs 2025-09-24 18:31:22 +02:00
Sylvia van Os 412077e2ab Remove rotation hack and add warning to not rotate to import/export
This is suboptimal, but rotation support is being removed by Google for
over 600dp screen sizes
2025-09-24 18:31:22 +02:00
Sylvia van Os 0f1005c193 Remove rotation support
With the release of targetSdk 36, the Android platform will no longer
always apply rotation. To lower the chance of user confusion, this
support is being removed completely.

I know some of you really love this, but I can't do anything about this.
This is Google's decision and my opinion doesn't matter.
2025-09-24 18:31:19 +02:00
Sylvia van Os 7353414ae6 Bump targetSdk to 36 2025-09-24 18:30:44 +02:00
Sylvia van OsandGitHub 894a3dd44f Merge pull request #2705 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-24 17:28:09 +02:00
Sylvia van OsandHosted Weblate 4b86f3e822 Translated using Weblate (Hindi)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/hi/
2025-09-24 13:02:32 +00:00
B o d oandHosted Weblate b6077e1dd6 Translated using Weblate (Swedish)
Currently translated at 97.9% (327 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2025-09-24 13:02:08 +00:00
B o d oandHosted Weblate 267efb8905 Translated using Weblate (Swedish)
Currently translated at 93.1% (311 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2025-09-24 12:03:02 +00:00
Joel AandHosted Weblate 9412a70517 Translated using Weblate (Swedish)
Currently translated at 93.1% (311 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2025-09-24 12:03:01 +00:00
Govind Gopal YadavandHosted Weblate de754acf92 Translated using Weblate (Hindi)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/hi/
2025-09-24 12:03:01 +00:00
Govind Gopal YadavandHosted Weblate fce7bf9cd0 Translated using Weblate (Hindi)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/hi/
2025-09-24 12:03:00 +00:00
Govind Gopal YadavandHosted Weblate 6f335d44a0 Translated using Weblate (Hindi)
Currently translated at 98.6% (148 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/hi/
2025-09-24 12:02:59 +00:00
Hosted Weblate 2fa6af7de9 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-09-24 12:02:58 +00:00
Govind Gopal YadavandHosted Weblate 4b9dfc9e0c Translated using Weblate (Hindi)
Currently translated at 97.3% (146 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/hi/
2025-09-24 12:02:58 +00:00
Govind Gopal YadavandHosted Weblate 3ead1ab079 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-09-24 12:02:57 +00:00
Py- DroidandHosted Weblate ff5ffed8aa Translated using Weblate (Arabic)
Currently translated at 97.3% (325 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2025-09-24 12:02:55 +00:00
PRATHAMESH BHAGATandGitHub d047c38bc2 Migrating ThirdPartyInfo class to kotlin (#2699)
* Migrating ThirdPartyINfo class to kotlin

* Removing null allowance in strings
2025-09-23 18:30:00 +02:00
Sylvia van OsandGitHub 52b62b1075 Merge pull request #2701 from CatimaLoyalty/gradlew-update-9.1.0
Update Gradle Wrapper from 9.0.0 to 9.1.0
2025-09-22 22:36:33 +02:00
Sylvia van OsandGitHub ad384af7e4 Merge pull request #2704 from CatimaLoyalty/create-pull-request/patch-1758428392
Update contributors
2025-09-21 10:59:55 +02:00
TheLastProjectandgithub-actions[bot] 06b3ec09be Update contributors 2025-09-21 04:19:52 +00:00
Sylvia van OsandGitHub c803c5be8b Merge pull request #2703 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-20 23:14:02 +02:00
FjuroandHosted Weblate f120a00a75 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-09-20 21:02:35 +00:00
Sylvia van OsandGitHub 99a244ae2e Merge pull request #2702 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-20 17:18:40 +02:00
Sylvain PichonandHosted Weblate 713af1aeaa 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-09-19 04:02:24 +00:00
gradle-update-robot 1cc7ac3f4d Update Gradle Wrapper from 9.0.0 to 9.1.0
Signed-off-by: gradle-update-robot <gradle-update-robot@regolo.cc>
2025-09-19 00:56:32 +00:00
Sylvia van OsandGitHub dfee86186a Merge pull request #2700 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-18 20:10:50 +02:00
Priit JõerüütandHosted Weblate d82574136a 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-09-18 19:02:28 +02:00
delvaniandHosted Weblate 766f953e65 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-09-18 19:02:27 +02:00
Sylvia van OsandGitHub 593a4098a5 Merge pull request #2698 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-18 17:24:22 +02:00
helloooandHosted Weblate ecfc29feb9 Translated using Weblate (Romanian)
Currently translated at 86.2% (288 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2025-09-18 14:02:01 +02:00
Edgars AndersonsandHosted Weblate 84ce92cebc 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-09-18 10:02:04 +00:00
109247019824andHosted Weblate 489a2eb037 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-09-18 11:02:06 +02:00
B o d oandHosted Weblate e48e0233bb Translated using Weblate (Spanish)
Currently translated at 99.1% (331 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2025-09-18 11:02:02 +02:00
B o d oandHosted Weblate b67471df92 Translated using Weblate (Spanish (Argentina))
Currently translated at 70.9% (237 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es_AR/
2025-09-18 11:02:00 +02:00
大王叫我来巡山andHosted Weblate be727462ee 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-09-18 10:02:00 +02:00
josé mandHosted Weblate ed72b41527 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-09-18 06:02:10 +00:00
solokotandHosted Weblate 309980836a 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-09-18 06:02:01 +00:00
Yasin TanışandHosted Weblate fb3ab11700 Translated using Weblate (Turkish)
Currently translated at 87.7% (293 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2025-09-18 01:02:23 +02:00
Sylvia van OsandGitHub ccbcc8b736 Merge pull request #2696 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-17 23:32:46 +02:00
Bert AartsandHosted Weblate 7fcfcf7bdb Translated using Weblate (Dutch)
Currently translated at 66.0% (99 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2025-09-17 21:02:44 +00:00
Bert AartsandHosted Weblate f7231a3ac5 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-09-17 21:02:43 +00:00
KachelkaiserandHosted Weblate c4ae77123d 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-09-17 21:02:43 +00:00
Sylvia van OsandGitHub 81c6874aff Merge pull request #2694 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-17 21:21:19 +02:00
Максим ГорпинічandHosted Weblate de05560297 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-09-17 21:02:29 +02:00
HostujePlik.PLandHosted Weblate 816a3b2f2c Translated using Weblate (Polish)
Currently translated at 91.0% (304 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2025-09-17 21:02:29 +02:00
Vasilis KandHosted Weblate c8af3fe35e 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-09-17 21:02:29 +02:00
Sylvia van OsandGitHub f3448d06c1 Merge pull request #2693 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-17 20:19:54 +02:00
HostujePlik.PLandHosted Weblate 3442cf3a35 Translated using Weblate (Polish)
Currently translated at 91.0% (304 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2025-09-17 18:02:30 +00:00
PRATHAMESH BHAGATandGitHub 03115c0de1 Removing unnecessary lines in workflows files (#2692) 2025-09-17 18:55:37 +02:00
Sylvia van OsandGitHub 9f5f7f0dd8 Merge pull request #2676 from CatimaLoyalty/gradlew-update-9.0.0
Update Gradle Wrapper from 8.14 to 9.0.0
2025-09-16 19:39:01 +02:00
PRATHAMESH BHAGATandGitHub 4901a6b183 Merge pull request #2687 from PrathameshBhagat/main
Making Github Actions file more readable
2025-09-16 18:24:32 +02:00
Sylvia van OsandGitHub f2372c40aa Merge pull request #2683 from CatimaLoyalty/fix/missingPositionalFormatting
Fix missing positional formatting
2025-09-16 18:22:51 +02:00
Sylvia van OsandGitHub 3f1c0695b8 Merge pull request #2691 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-16 17:12:52 +02:00
GideonandHosted Weblate fd9991ceb1 Translated using Weblate (Dutch)
Currently translated at 63.3% (95 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2025-09-16 14:02:23 +02:00
GideonandHosted Weblate 2628a9856b 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-09-16 14:02:00 +02:00
Edgars AndersonsandHosted Weblate c1f3fae50b Translated using Weblate (Latvian)
Currently translated at 10.0% (15 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2025-09-16 07:02:30 +00:00
Edgars AndersonsandHosted Weblate 2d5cd25696 Translated using Weblate (Latvian)
Currently translated at 94.0% (314 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2025-09-16 07:02:29 +00:00
Sylvia van OsandGitHub dc8b7d6ae4 Merge pull request #2690 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-16 08:18:43 +02:00
josé mandHosted Weblate a2211947cd 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-09-16 08:02:28 +02:00
Sylvia van OsandGitHub db2617e2d4 Merge pull request #2689 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-15 22:58:24 +02:00
Giuseppe PiscitelliandHosted Weblate 412f48d801 Translated using Weblate (Italian)
Currently translated at 86.8% (290 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2025-09-15 20:02:01 +00:00
Hosted Weblate bd7bf7ddbe 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-09-15 18:04:26 +00:00
GideonandHosted Weblate e7a99ad7b6 Translated using Weblate (Dutch)
Currently translated at 62.6% (94 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2025-09-15 18:04:26 +00:00
GideonandHosted Weblate 8fce04cf45 Translated using Weblate (Dutch)
Currently translated at 99.4% (332 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2025-09-15 18:04:25 +00:00
Heimen StoffelsandHosted Weblate 62f2545f9e Translated using Weblate (Dutch)
Currently translated at 99.4% (332 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2025-09-15 18:04:24 +00:00
Sylvia van OsandGitHub d22e0bd5e5 Merge pull request #2686 from CatimaLoyalty/dependabot/github_actions/actions/checkout-5
Bump actions/checkout from 4 to 5
2025-09-15 19:23:00 +02:00
Sylvia van OsandGitHub 61d206f318 Merge pull request #2685 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-15 18:55:23 +02:00
Álvaro PalaciosandHosted Weblate 7bfef398c3 Translated using Weblate (Spanish)
Currently translated at 99.1% (331 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2025-09-15 14:02:01 +02:00
Vasilis KandHosted Weblate 2311acc15e 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-09-15 10:02:03 +02:00
Deleted UserandHosted Weblate 14787cc520 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-09-15 10:02:00 +02:00
Sylwester CybaandHosted Weblate 7b57b603aa Translated using Weblate (Polish)
Currently translated at 89.2% (298 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2025-09-15 09:02:03 +02:00
WarderandHosted Weblate 185f6d1a5f Translated using Weblate (Slovak)
Currently translated at 89.8% (300 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sk/
2025-09-15 07:02:01 +02:00
dependabot[bot]andGitHub 791cf7224e Bump actions/checkout from 4 to 5
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [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...v5)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-15 02:05:54 +00:00
Vasilis KandHosted Weblate 8cab9a4204 Translated using Weblate (Greek)
Currently translated at 94.6% (316 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2025-09-14 21:02:22 +00:00
Deleted UserandHosted Weblate 42a8efd5e5 Translated using Weblate (Greek)
Currently translated at 94.6% (316 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2025-09-14 21:02:21 +00:00
Sylvia van OsandGitHub 85e171ae4a Merge pull request #2684 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-14 19:02:21 +02:00
Sylvia van OsandHosted Weblate 18d5438c38 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-09-14 14:02:26 +02:00
Sylvia van Os 0f311d1901 Fix missing positional formatting 2025-09-14 13:46:50 +02:00
Sylvia van OsandGitHub 5f33679ddd Merge pull request #2681 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-14 13:27:43 +02:00
Sylvia van OsandGitHub ce0fab5b38 Merge pull request #2682 from CatimaLoyalty/create-pull-request/patch-1757823583
Update contributors
2025-09-14 11:22:11 +02:00
B o d oandHosted Weblate d6ba49add5 Translated using Weblate (Spanish)
Currently translated at 98.5% (329 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2025-09-14 09:02:05 +00:00
J. LavoieandHosted Weblate 2dcb561882 Translated using Weblate (Spanish)
Currently translated at 98.5% (329 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2025-09-14 09:02:03 +00:00
B o d oandHosted Weblate 25153d98e7 Translated using Weblate (Spanish (Argentina))
Currently translated at 70.3% (235 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es_AR/
2025-09-14 09:02:02 +00:00
Brian BentancourandHosted Weblate ee90044a59 Translated using Weblate (Spanish (Argentina))
Currently translated at 70.3% (235 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es_AR/
2025-09-14 09:02:01 +00:00
Viviana YandHosted Weblate 4a0a23a8f7 Translated using Weblate (Spanish (Argentina))
Currently translated at 70.3% (235 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es_AR/
2025-09-14 09:01:59 +00:00
TheLastProjectandgithub-actions[bot] 09d5b68baf Update contributors 2025-09-14 04:19:42 +00:00
Sylvain PichonandHosted Weblate 402a5ef044 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-09-13 23:02:01 +02:00
NagaandHosted Weblate 31fd642295 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-09-13 23:02:00 +02:00
Thomas BertelsandHosted Weblate 68dc947c4c 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-09-13 23:01:59 +02:00
Максим ГорпинічandHosted Weblate 4daa00111b Translated using Weblate (Ukrainian)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-09-13 21:02:29 +02:00
Максим ГорпинічandHosted Weblate b6e00fa096 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-09-13 21:02:03 +02:00
IllusiveMan196andHosted Weblate 3cf5910e62 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-09-13 21:02:00 +02:00
delvaniandHosted Weblate 681d0744d4 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-09-13 19:02:23 +02:00
Sylvia van OsandGitHub c19d6dd2f2 Merge pull request #2680 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-13 18:56:16 +02:00
delvaniandHosted Weblate 35b81437f8 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-09-13 18:44:43 +02:00
Bruno FernandesandHosted Weblate f1403e6fce 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-09-13 18:44:43 +02:00
Sylvain PichonandHosted Weblate 7f12530b8e Translated using Weblate (French)
Currently translated at 94.3% (315 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2025-09-13 18:44:42 +02:00
Thomas BertelsandHosted Weblate 850209c00b Translated using Weblate (French)
Currently translated at 94.3% (315 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2025-09-13 18:44:42 +02:00
Sylvia van OsandGitHub 72e7b8127a Merge pull request #2679 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-13 17:17:37 +02:00
Nataniel Dika KurniawanandHosted Weblate db2808fa94 Translated using Weblate (Indonesian)
Currently translated at 89.2% (298 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/id/
2025-09-13 16:03:11 +02:00
FjuroandHosted Weblate d9c3509bbc Translated using Weblate (Czech)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2025-09-13 16:03:10 +02:00
Sylvain PichonandHosted Weblate 231b17d955 Translated using Weblate (French)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2025-09-13 16:03:10 +02:00
Sylvain PichonandHosted Weblate 310a1266a5 Translated using Weblate (French)
Currently translated at 94.0% (314 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2025-09-13 16:03:09 +02:00
J. LavoieandHosted Weblate 407e7293af Translated using Weblate (French)
Currently translated at 94.0% (314 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2025-09-13 16:03:08 +02:00
FjuroandHosted Weblate 577ab84020 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-09-13 16:03:08 +02:00
Slávek BankoandHosted Weblate 650cf559ba 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-09-13 16:03:07 +02:00
Jan NovotnyandHosted Weblate b3b53cd25a 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-09-13 16:03:07 +02:00
Sylvia van OsandGitHub 160456d21c Merge pull request #2678 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-13 13:23:23 +02:00
B o d oandHosted Weblate 37b5ed2c24 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-09-13 13:02:02 +02:00
B o d oandHosted Weblate 5c410d4817 Translated using Weblate (German)
Currently translated at 93.4% (312 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2025-09-13 10:02:41 +00:00
B o d oandHosted Weblate 940ba85e3d Translated using Weblate (German)
Currently translated at 93.1% (311 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2025-09-13 10:02:40 +00:00
B o d oandHosted Weblate 92508bdd2b Translated using Weblate (German)
Currently translated at 92.8% (310 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2025-09-13 10:02:39 +00:00
J. LavoieandHosted Weblate 235cbce123 Translated using Weblate (German)
Currently translated at 92.8% (310 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2025-09-13 10:02:38 +00:00
Sylvia van OsandGitHub 060cfa75bf Merge pull request #2677 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-13 11:14:08 +02:00
B o d oandHosted Weblate 329770576e Translated using Weblate (German)
Currently translated at 88.0% (294 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2025-09-13 11:02:22 +02:00
B o d oandHosted Weblate 4881212adb Translated using Weblate (German)
Currently translated at 87.7% (293 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2025-09-13 11:02:21 +02:00
Sylvia van OsandGitHub 5b7ed3f4e5 Merge pull request #2675 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-13 10:50:50 +02:00
solokotandHosted Weblate bdd6bc3923 Translated using Weblate (Russian)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-09-13 08:02:29 +00:00
solokotandHosted Weblate 1d5d5419dc 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-09-13 08:02:01 +00:00
josé mandHosted Weblate 196051dc82 Translated using Weblate (Galician)
Currently translated at 96.1% (321 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/gl/
2025-09-13 06:02:01 +02:00
gradle-update-robot 4962701224 Update Gradle Wrapper from 8.14 to 9.0.0
Signed-off-by: gradle-update-robot <gradle-update-robot@regolo.cc>
2025-09-13 00:51:38 +00:00
大王叫我来巡山andHosted Weblate a74c801977 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-09-13 02:02:36 +02:00
大王叫我来巡山andHosted Weblate 409f35719d 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-09-13 02:02:11 +02:00
Deleted UserandHosted Weblate f761ae6c3e 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-09-13 02:02:09 +02:00
109247019824andHosted Weblate d56f1eb2a3 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-09-12 23:02:23 +02:00
Sylvia van OsandGitHub 23907a558d Merge pull request #2674 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-12 22:31:21 +02:00
B o d oandHosted Weblate 6b77aff18f Translated using Weblate (German)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-09-12 22:03:09 +02:00
Sylvia van Os b66383e9ab Release Catima 2.38.0 2025-09-12 20:58:31 +02:00
PRATHAMESH BHAGATandGitHub 863316d7b4 Merge pull request #2662 from PrathameshBhagat/main
Replace Gradle update checker
2025-09-12 20:48:47 +02:00
Sylvia van OsandGitHub 33d5632b6d Merge pull request #2672 from CatimaLoyalty/create-pull-request/patch-1757607265
Update Fastlane changelogs
2025-09-11 19:57:20 +02:00
TheLastProjectandgithub-actions[bot] 67d8ae2d90 Update Fastlane changelogs 2025-09-11 16:14:24 +00:00
Sylvia van Os c933b76a8c Update CHANGELOG 2025-09-11 18:14:12 +02:00
Sylvia van OsandGitHub 9d12123f71 Merge pull request #2670 from CatimaLoyalty/fix/widgetIconCrash
Workaround widget crash by disabling images on Android 12L and below
2025-09-11 18:13:18 +02:00
Sylvia van OsandGitHub beff5e0aa4 Merge pull request #2671 from CatimaLoyalty/dependabot/gradle/org.jetbrains.kotlin.android-2.2.20
Bump org.jetbrains.kotlin.android from 2.2.10 to 2.2.20
2025-09-11 08:16:55 +02:00
dependabot[bot]andGitHub d61da3e499 Bump org.jetbrains.kotlin.android from 2.2.10 to 2.2.20
Bumps [org.jetbrains.kotlin.android](https://github.com/JetBrains/kotlin) from 2.2.10 to 2.2.20.
- [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.10...v2.2.20)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-11 02:04:30 +00:00
Sylvia van Os 8419122193 Fix wrong SDK_INT 2025-09-10 23:24:36 +02:00
Sylvia van Os 20559d1506 Workaround widget crash by disabling images on Android 12L and below 2025-09-10 21:49:32 +02:00
Sylvia van OsandGitHub 5e3de19e7b Merge pull request #2669 from CatimaLoyalty/fix/permissionIcon
Use monochrome icon for permission dialog
2025-09-10 20:38:14 +02:00
Sylvia van Os 2463599ba2 Use monochrome icon for permission dialog 2025-09-10 20:24:54 +02:00
ea90d26a0a Minor string updates (#2638)
Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
2025-09-10 20:12:43 +02:00
Sylvia van OsandGitHub 8339de2596 Merge pull request #2668 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-10 17:21:03 +02:00
Hasan Berat KaylanandHosted Weblate e283d3abd8 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-09-10 14:02:02 +00:00
FjuroandHosted Weblate b8980e3708 Translated using Weblate (Czech)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2025-09-10 13:02:45 +00:00
Edgars AndersonsandHosted Weblate 2d306a2046 Translated using Weblate (Latvian)
Currently translated at 10.0% (15 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2025-09-10 12:02:10 +02:00
solokotandHosted Weblate fe79e03fb3 Translated using Weblate (Russian)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-09-10 09:02:26 +00:00
B o d oandHosted Weblate e938c29601 Translated using Weblate (German)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-09-10 10:05:25 +02:00
B o d oandHosted Weblate 45d76468dc 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-09-10 10:05:24 +02:00
Sylvia van OsandGitHub d8aab4f956 Merge pull request #2667 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-10 08:21:43 +02:00
Sylvain PichonandHosted Weblate 7084420781 Translated using Weblate (French)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2025-09-10 08:04:06 +02:00
大王叫我来巡山andHosted Weblate b4b90cdf48 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (150 of 150 strings)

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

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-09-10 07:02:35 +02:00
Milo IvirandHosted Weblate e04fead496 Translated using Weblate (Croatian)
Currently translated at 99.7% (333 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hr/
2025-09-09 23:02:00 +00:00
KachelkaiserandHosted Weblate 4d5c4bfc6e Translated using Weblate (German)
Currently translated at 99.3% (149 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-09-09 22:02:50 +00:00
Sylvia van OsandGitHub 6779693213 Merge pull request #2666 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-09 23:32:13 +02:00
KachelkaiserandHosted Weblate f2db558eaf Translated using Weblate (German)
Currently translated at 100.0% (336 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2025-09-09 21:02:06 +00:00
Sylvia van OsandGitHub cecf0bf1bc Merge pull request #2665 from CatimaLoyalty/create-pull-request/patch-1757437148
Update Fastlane changelogs
2025-09-09 19:38:32 +02:00
TheLastProjectandgithub-actions[bot] 9110d3cc17 Update Fastlane changelogs 2025-09-09 16:59:07 +00:00
Sylvia van Os 032380e872 Update CHANGELOG 2025-09-09 18:58:55 +02:00
Sylvia van OsandGitHub 53ea1741c0 Merge pull request #2657 from CatimaLoyalty/fix/removeStocardImport
Remove Stocard importer
2025-09-09 18:58:12 +02:00
Sylvia van OsandGitHub 51e75f61ec Merge pull request #2664 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-09 17:02:29 +02:00
DikaandHosted Weblate a590e6dca1 Translated using Weblate (Indonesian)
Currently translated at 99.4% (334 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/id/
2025-09-09 12:02:09 +02:00
Sylvia van OsandGitHub e25128947c Merge pull request #2663 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-09 08:19:44 +02:00
josé mandHosted Weblate da6c81595c Translated using Weblate (Galician)
Currently translated at 100.0% (336 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/gl/
2025-09-09 04:02:07 +00:00
Sylvia van Os 1fc5a1e04a Remove Stocard importer
Stocard no longer exists as a company and these import files are no
longer generated
2025-09-08 19:55:10 +02:00
Sylvia van OsandGitHub faa5946c15 Merge pull request #2661 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-08 19:39:59 +02:00
Edgars AndersonsandHosted Weblate d35911724c Translated using Weblate (Latvian)
Currently translated at 10.0% (15 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2025-09-08 11:02:12 +02:00
Edgars AndersonsandHosted Weblate 2acd9d87f4 Translated using Weblate (Latvian)
Currently translated at 100.0% (336 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2025-09-08 08:02:09 +00:00
Sylvia van OsandGitHub 43c2e3e78a Merge pull request #2660 from CatimaLoyalty/dependabot/github_actions/actions/setup-python-6.0.0
Bump actions/setup-python from 5.6.0 to 6.0.0
2025-09-08 06:57:47 +02:00
dependabot[bot]andGitHub 1ea3dc77f0 Bump actions/setup-python from 5.6.0 to 6.0.0
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5.6.0 to 6.0.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5.6.0...v6.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-08 02:06:00 +00:00
Sylvia van OsandGitHub eeb27dc169 Merge pull request #2659 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-07 22:14:15 +02:00
FjuroandHosted Weblate 7cc09e4a0d Translated using Weblate (Czech)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2025-09-07 20:02:28 +00:00
Sylvia van OsandGitHub 8ca0bcd97c Merge pull request #2658 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-07 21:20:38 +02:00
FjuroandHosted Weblate 8bfdef6f9c Translated using Weblate (Czech)
Currently translated at 100.0% (336 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2025-09-07 19:02:15 +00:00
Sylvia van OsandGitHub e7155a55bd Merge pull request #2656 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-07 15:00:24 +02:00
ssantosandHosted Weblate 0405a96710 Translated using Weblate (Portuguese)
Currently translated at 100.0% (336 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt/
2025-09-07 12:04:47 +00:00
Priit JõerüütandHosted Weblate a4a988393c Translated using Weblate (Estonian)
Currently translated at 100.0% (336 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2025-09-07 12:04:47 +00:00
delvaniandHosted Weblate 155d732ec7 Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (336 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2025-09-07 12:04:46 +00:00
ssantosandHosted Weblate c07eefd48f Translated using Weblate (Portuguese)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt/
2025-09-07 12:04:45 +00:00
ssantosandHosted Weblate edf4a67590 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (336 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2025-09-07 12:04:45 +00:00
ssantosandHosted Weblate 442072641a Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_PT/
2025-09-07 12:04:44 +00:00
109247019824andHosted Weblate 7719ece810 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (336 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2025-09-07 12:04:44 +00:00
大王叫我来巡山andHosted Weblate 6de0473582 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-09-07 12:04:43 +00:00
大王叫我来巡山andHosted Weblate 4da1d3d1c3 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (336 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2025-09-07 12:04:42 +00:00
WarderandHosted Weblate 4a70c1f6c9 Translated using Weblate (Slovak)
Currently translated at 98.6% (148 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2025-09-07 12:04:42 +00:00
Максим ГорпинічandHosted Weblate 873d7e3cd1 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-09-07 12:04:41 +00:00
solokotandHosted Weblate fce8f6cdb9 Translated using Weblate (Russian)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-09-07 12:04:41 +00:00
B o d oandHosted Weblate 207781fa58 Translated using Weblate (German)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-09-07 12:04:40 +00:00
Sylvain PichonandHosted Weblate 3aae958a1b Translated using Weblate (French)
Currently translated at 100.0% (150 of 150 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2025-09-07 12:04:39 +00:00
Максим ГорпинічandHosted Weblate 65b699564e Translated using Weblate (Ukrainian)
Currently translated at 100.0% (336 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2025-09-07 12:04:39 +00:00
WarderandHosted Weblate acf7314f6c Translated using Weblate (Slovak)
Currently translated at 100.0% (336 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sk/
2025-09-07 12:04:38 +00:00
solokotandHosted Weblate 8b394cc644 Translated using Weblate (Russian)
Currently translated at 100.0% (336 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2025-09-07 12:04:37 +00:00
mateale1234andHosted Weblate a1385be797 Translated using Weblate (Polish)
Currently translated at 100.0% (336 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2025-09-07 12:04:37 +00:00
Sylvain PichonandHosted Weblate cf9249b97e Translated using Weblate (French)
Currently translated at 100.0% (336 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2025-09-07 12:04:36 +00:00
Vasilis KandHosted Weblate 91f953915d Translated using Weblate (Greek)
Currently translated at 100.0% (336 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2025-09-07 12:04:35 +00:00
B o d oandHosted Weblate f6263e6cf5 Translated using Weblate (German)
Currently translated at 100.0% (336 of 336 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2025-09-07 12:04:35 +00:00
Sylvia van OsandGitHub e48ff4d6a3 Merge pull request #2644 from CatimaLoyalty/dependabot/gradle/org.robolectric-robolectric-4.16
Bump org.robolectric:robolectric from 4.15.1 to 4.16
2025-09-06 13:51:22 +02:00
dependabot[bot]andGitHub a93ee35c9b Bump org.robolectric:robolectric from 4.15.1 to 4.16
Bumps [org.robolectric:robolectric](https://github.com/robolectric/robolectric) from 4.15.1 to 4.16.
- [Release notes](https://github.com/robolectric/robolectric/releases)
- [Commits](https://github.com/robolectric/robolectric/compare/robolectric-4.15.1...robolectric-4.16)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-06 11:33:33 +00:00
Sylvia van OsandGitHub 6b561d00f3 Merge pull request #2655 from CatimaLoyalty/create-pull-request/patch-1757156668
Update Fastlane changelogs
2025-09-06 13:04:55 +02:00
TheLastProjectandgithub-actions[bot] ffd9b9c097 Update Fastlane changelogs 2025-09-06 11:04:28 +00:00
Sylvia van Os 4b4d7f537d Update CHANGELOG 2025-09-06 13:04:16 +02:00
Sylvia van OsandGitHub 58bad96b2e Merge pull request #2654 from CatimaLoyalty/feature/pkpasses
Add support for .pkpasses
2025-09-06 13:03:20 +02:00
Sylvia van Os 67701840bb Add support for .pkpasses 2025-09-06 12:49:50 +02:00
Sylvia van OsandGitHub d936209b0e Merge pull request #2652 from CatimaLoyalty/dependabot/gradle/com.google.android.material-material-1.13.0
Bump com.google.android.material:material from 1.12.0 to 1.13.0
2025-09-04 20:01:46 +02:00
dependabot[bot]andGitHub 14f7116aad Bump com.google.android.material:material from 1.12.0 to 1.13.0
Bumps [com.google.android.material:material](https://github.com/material-components/material-components-android) from 1.12.0 to 1.13.0.
- [Release notes](https://github.com/material-components/material-components-android/releases)
- [Commits](https://github.com/material-components/material-components-android/compare/1.12.0...1.13.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-04 10:17:41 +00:00
Sylvia van OsandGitHub 132844f6ce Merge pull request #2651 from CatimaLoyalty/dependabot/gradle/com.android.application-8.13.0
Bump com.android.application from 8.12.2 to 8.13.0
2025-09-03 23:56:18 +02:00
dependabot[bot]andGitHub a50789a7e9 Bump com.android.application from 8.12.2 to 8.13.0
Bumps com.android.application from 8.12.2 to 8.13.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-09-03 21:21:21 +00:00
Sylvia van OsandGitHub 513e3d97f6 Merge pull request #2650 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-09-01 19:27:01 +02:00
NikoandHosted Weblate 58f1944268 Translated using Weblate (Serbian)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sr/
2025-08-31 21:02:26 +02:00
Damjan GerlandHosted Weblate aa75c22328 Translated using Weblate (Slovenian)
Currently translated at 26.8% (40 of 149 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sl/
2025-08-31 21:02:26 +02:00
Damjan GerlandHosted Weblate 3b72ada8d0 Translated using Weblate (Slovenian)
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sl/
2025-08-31 21:02:25 +02:00
Sylvia van OsandGitHub a65131bdf6 Merge pull request #2648 from CatimaLoyalty/create-pull-request/patch-1756613947
Update contributors
2025-08-31 11:08:03 +02:00
TheLastProjectandgithub-actions[bot] b9622d3da9 Update contributors 2025-08-31 04:19:06 +00:00
Sylvia van OsandGitHub 234bb86d7e Merge pull request #2646 from CatimaLoyalty/dependabot/gradle/com.android.application-8.12.2
Bump com.android.application from 8.12.1 to 8.12.2
2025-08-29 08:25:23 +02:00
dependabot[bot]andGitHub b6243a1f2f Bump com.android.application from 8.12.1 to 8.12.2
Bumps com.android.application from 8.12.1 to 8.12.2.

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

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-29 02:03:33 +00:00
Sylvia van OsandGitHub 5f01eef75a Merge pull request #2643 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-26 18:10:17 +02:00
ssantosandHosted Weblate 9c43752134 Translated using Weblate (Portuguese)
Currently translated at 100.0% (149 of 149 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt/
2025-08-26 02:03:51 +00:00
ssantosandHosted Weblate e7d965576f Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (149 of 149 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt_PT/
2025-08-26 02:03:50 +00:00
大王叫我来巡山andHosted Weblate 2111357c7d Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (149 of 149 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2025-08-26 02:03:50 +00:00
Sylvia van OsandGitHub 37c7f88f82 Merge pull request #2641 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-25 07:21:18 +02:00
Robin SylandHosted Weblate 15b466c9a6 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/zh_Hant/
2025-08-24 23:03:06 +02:00
Robin SylandHosted Weblate 42a0e5abd8 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 85.9% (128 of 149 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hant/
2025-08-24 23:03:05 +02:00
Robin SylandHosted Weblate feb217f1ba Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (334 of 334 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2025-08-24 23:03:04 +02:00
Sylvia van OsandGitHub c5e56ca27d Merge pull request #2633 from CatimaLoyalty/create-pull-request/patch-1756009535
Update contributors
2025-08-24 09:18:28 +02:00
TheLastProjectandgithub-actions[bot] 6ccfdaef83 Update contributors 2025-08-24 04:25:35 +00:00
Sylvia van OsandGitHub 081c0b8507 Merge pull request #2632 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-23 19:21:20 +02:00
FjuroandHosted Weblate 351ee7caed Translated using Weblate (Czech)
Currently translated at 100.0% (149 of 149 strings)

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

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2025-08-23 17:04:16 +00:00
solokotandHosted Weblate b1102fbcc0 Translated using Weblate (Russian)
Currently translated at 100.0% (149 of 149 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2025-08-23 17:04:15 +00:00
B o d oandHosted Weblate b9a5032b15 Translated using Weblate (German)
Currently translated at 100.0% (149 of 149 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2025-08-23 17:04:15 +00:00
Sylvain PichonandHosted Weblate d6e52e17ee Translated using Weblate (French)
Currently translated at 100.0% (149 of 149 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2025-08-23 17:04:14 +00:00
Sylvia van Os fc25082a9a Release Catima 2.37.0 2025-08-22 18:18:42 +02:00
Sylvia van OsandGitHub 7625d783f3 Merge pull request #2630 from CatimaLoyalty/create-pull-request/patch-1755877734
Update feature graphic
2025-08-22 18:15:19 +02:00
TheLastProjectandgithub-actions[bot] f61c9adf61 Update feature graphic 2025-08-22 15:48:53 +00:00
Sylvia van OsandGitHub 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-LucaandGitHub dd69182347 Update generate_feature_graphic.sh 2025-08-22 13:14:37 +02:00
il-LucaandGitHub e5fb836131 Update featureGraphic.svg 2025-08-22 12:45:58 +02:00
Sylvia van OsandGitHub 2026c4e171 Merge pull request #2626 from CatimaLoyalty/create-pull-request/patch-1755812967
Update Fastlane changelogs
2025-08-21 23:50:31 +02:00
TheLastProjectandgithub-actions[bot] ac8e89d65f Update Fastlane changelogs 2025-08-21 21:49:26 +00:00
Sylvia van OsandGitHub 2f97628c52 Update CHANGELOG 2025-08-21 23:49:17 +02:00
Sylvia van OsandGitHub 59d373aa74 Merge pull request #2625 from CatimaLoyalty/create-pull-request/patch-1755812511
Update feature graphic
2025-08-21 23:47:04 +02:00
TheLastProjectandgithub-actions[bot] 742e8799f1 Update feature graphic 2025-08-21 21:41:50 +00:00
Sylvia van OsandGitHub 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-LucaandSylvia van Os 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 OsandGitHub 59d6c047ed Delete bors.toml
Stopped using bors years ago
2025-08-20 18:25:38 +02:00
Sylvia van OsandGitHub 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 OsandHosted Weblate 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 AandHosted Weblate 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 OsandGitHub 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 OsandGitHub 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]andGitHub 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
ShivaandHosted Weblate 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
tomek7667andHosted Weblate 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
tomek7667andHosted Weblate 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 OsandGitHub 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 OsandGitHub 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]andGitHub 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
TheLastProjectandgithub-actions[bot] 447433f865 Update feature graphic 2025-08-17 17:20:48 +00:00
Sylvia van OsandGitHub bb1f5c979e Merge pull request #2615 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-17 19:19:10 +02:00
Kolappan NandHosted Weblate 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 NandHosted Weblate 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 YefetandHosted Weblate 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 YefetandHosted Weblate 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
mrMonosandHosted Weblate 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 OsandGitHub 89f730b23a Merge pull request #2614 from CatimaLoyalty/create-pull-request/patch-1755405024
Update contributors
2025-08-17 09:26:54 +02:00
TheLastProjectandgithub-actions[bot] c67b1b9fe4 Update contributors 2025-08-17 04:30:24 +00:00
Sylvia van OsandGitHub 2b931f68fe Merge pull request #2613 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-16 19:04:59 +02:00
Joel AandHosted Weblate 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 AandHosted Weblate 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
novrianandHosted Weblate 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
SofiaandHosted Weblate 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
SofiaandHosted Weblate 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 OsandGitHub 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]andGitHub 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 OsandGitHub a471fa36c8 Merge pull request #2609 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-11 17:02:45 +02:00
Thong NguyenandHosted Weblate 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
LandandHosted Weblate 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 YadavandHosted Weblate 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 YadavandHosted Weblate 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 OsandGitHub 241591db0f Merge pull request #2607 from CatimaLoyalty/create-pull-request/patch-1754800744
Update contributors
2025-08-10 11:58:17 +02:00
TheLastProjectandgithub-actions[bot] 058b822a52 Update contributors 2025-08-10 04:39:04 +00:00
Sylvia van OsandGitHub d21a53dbf0 Merge pull request #2606 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-09 18:41:50 +02:00
Joel AandHosted Weblate 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 OsandGitHub bed1b11384 Merge pull request #2605 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-08 16:57:05 +02:00
Andrzej StacheraandHosted Weblate 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 OsandGitHub a7d47477d1 Merge pull request #2603 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-06 18:33:29 +02:00
WarderandHosted Weblate 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 OsandHosted Weblate 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 OsandGitHub 5634df1f5a Merge pull request #2601 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-05 18:09:02 +02:00
delvaniandHosted Weblate 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 AndersonsandHosted Weblate 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 AndersonsandHosted Weblate 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 OsandHosted Weblate 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 OsandHosted Weblate 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 OsandGitHub 4c00c8b94d Merge pull request #2599 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-03 20:49:25 +02:00
ÖmerandHosted Weblate 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 DonisiandHosted Weblate 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 OsandGitHub 62aeadae71 Merge pull request #2598 from CatimaLoyalty/create-pull-request/patch-1754196371
Update contributors
2025-08-03 10:24:36 +02:00
TheLastProjectandgithub-actions[bot] 7e89db428b Update contributors 2025-08-03 04:46:11 +00:00
Sylvia van OsandGitHub 50e13c22c6 Merge pull request #2597 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-02 17:33:07 +02:00
ssantosandHosted Weblate 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é mandHosted Weblate 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üütandHosted Weblate 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üütandHosted Weblate 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
ssantosandHosted Weblate 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
ssantosandHosted Weblate 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
ssantosandHosted Weblate 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
109247019824andHosted Weblate 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 TiggandHosted Weblate 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
大王叫我来巡山andHosted Weblate 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
大王叫我来巡山andHosted Weblate 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
WarderandHosted Weblate 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
FjuroandHosted Weblate 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
Максим ГорпинічandHosted Weblate 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
solokotandHosted Weblate 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
KachelkaiserandHosted Weblate 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 PichonandHosted Weblate 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
Максим ГорпинічandHosted Weblate 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
WarderandHosted Weblate 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
solokotandHosted Weblate 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 PichonandHosted Weblate 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 KandHosted Weblate 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
KachelkaiserandHosted Weblate 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
FjuroandHosted Weblate 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 OsandGitHub 88369ea070 Merge pull request #2596 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-08-01 17:18:04 +02:00
WarderandHosted Weblate 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 OsandGitHub 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]andGitHub 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 OsandGitHub 9956f6de34 Merge pull request #2592 from CatimaLoyalty/create-pull-request/patch-1753994193
Update Fastlane changelogs
2025-07-31 22:38:06 +02:00
TheLastProjectandgithub-actions[bot] 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 OsandGitHub 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 OsandGitHub 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]andGitHub 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 OsandGitHub 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 OsandGitHub 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]andGitHub 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]andGitHub 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
realwkandSylvia van Os 9a0149def8 Initial widget work
Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
2025-07-30 21:23:14 +02:00
Sylvia van OsandGitHub e217e99864 Merge pull request #2587 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-07-29 20:17:46 +02:00
Lilith MariaandHosted Weblate 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 OsandGitHub a2b85dd37a Merge pull request #2585 from StellarSand/mainfork
Migrate 2 actvities to kotlin
2025-07-29 18:15:01 +02:00
Sylvia van OsandGitHub 220fe96268 Merge pull request #2586 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-07-28 18:45:19 +02:00
ssantosandHosted Weblate 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
ssantosandHosted Weblate 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 AndersonsandHosted Weblate 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
大王叫我来巡山andHosted Weblate 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 OsandGitHub ef39f30fd7 Merge pull request #2584 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-07-27 15:37:11 +02:00
ReptalicaandHosted Weblate 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
FjuroandHosted Weblate 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
Максим ГорпинічandHosted Weblate 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
solokotandHosted Weblate 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 oandHosted Weblate 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 PichonandHosted Weblate 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 OsandGitHub bae7e676b4 Merge pull request #2581 from CatimaLoyalty/create-pull-request/patch-1753466727
Update Fastlane changelogs
2025-07-25 20:05:51 +02:00
TheLastProjectandgithub-actions[bot] 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
StellarSandandGitHub 996cd2cd2c Proper fix for FAB being hidden by keyboard (#2579) 2025-07-25 20:04:24 +02:00
Sylvia van OsandGitHub 8f6bd8c266 Merge pull request #2578 from CatimaLoyalty/create-pull-request/patch-1753131181
Update Fastlane changelogs
2025-07-21 23:20:23 +02:00
TheLastProjectandgithub-actions[bot] 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 OsandGitHub 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 OsandGitHub 26797addb8 Merge pull request #2577 from CatimaLoyalty/create-pull-request/patch-1752986452
Update contributors
2025-07-20 09:59:27 +02:00
TheLastProjectandgithub-actions[bot] b320e6f253 Update contributors 2025-07-20 04:40:52 +00:00
Sylvia van OsandGitHub 48d9ac4eed Merge pull request #2575 from CatimaLoyalty/create-pull-request/patch-1752820497
Update feature graphic
2025-07-18 17:42:17 +02:00
TheLastProjectandgithub-actions[bot] 388eb273e4 Update feature graphic 2025-07-18 06:34:57 +00:00
Sylvia van OsandGitHub 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-AlsalehandHosted Weblate 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-AlsalehandHosted Weblate 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-AlsalehandHosted Weblate 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 OsandGitHub 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 OsandGitHub 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]andGitHub 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 OsandGitHub fec8d05927 Merge pull request #2570 from CatimaLoyalty/create-pull-request/patch-1751776272
Update contributors
2025-07-06 07:13:23 +02:00
TheLastProjectandgithub-actions[bot] 466f068e36 Update contributors 2025-07-06 04:31:11 +00:00
Sylvia van OsandGitHub b5880223a5 Merge pull request #2569 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-07-05 08:46:07 +02:00
toposetsandHosted Weblate 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 CarpoandHosted Weblate 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 OsandGitHub 5474a516f4 Merge pull request #2567 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-07-01 23:38:33 +02:00
ssantosandHosted Weblate 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
ssantosandHosted Weblate 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
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 OsandGitHub 59fb95a4a7 Merge pull request #2563 from CatimaLoyalty/create-pull-request/patch-1751171603
Update contributors
2025-06-29 08:11:57 +02:00
TheLastProjectandgithub-actions[bot] 157617fe4a Update contributors 2025-06-29 04:33:23 +00:00
Sylvia van OsandGitHub 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]andGitHub 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 OsandGitHub 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 OsandGitHub 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
WarderandHosted Weblate 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]andGitHub 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 OsandGitHub 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]andGitHub 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 OsandGitHub 33d4b3ab7c Merge pull request #2558 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-22 23:20:41 +02:00
solokotandHosted Weblate 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 OsandGitHub a24805232c Merge pull request #2557 from CatimaLoyalty/create-pull-request/patch-1750566607
Update contributors
2025-06-22 10:03:50 +02:00
TheLastProjectandgithub-actions[bot] 5ec1bcb721 Update contributors 2025-06-22 04:30:07 +00:00
Sylvia van OsandGitHub cddc273333 Merge pull request #2556 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-21 16:23:36 +02:00
大王叫我来巡山andHosted Weblate 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
FjuroandHosted Weblate 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
Максим ГорпинічandHosted Weblate 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 MoroniandHosted Weblate 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 oandHosted Weblate 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 PichonandHosted Weblate 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 OsandGitHub b16ea272ae Merge pull request #2554 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-20 17:10:52 +02:00
ssantosandHosted Weblate 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
ssantosandHosted Weblate 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 OsandGitHub 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]andGitHub 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 OsandGitHub e2413f8538 Merge pull request #2551 from CatimaLoyalty/create-pull-request/patch-1750178776
Update Fastlane changelogs
2025-06-17 18:46:41 +02:00
TheLastProjectandgithub-actions[bot] 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 OsandGitHub f284c4807f Merge pull request #2549 from CatimaLoyalty/create-pull-request/patch-1749961719
Update contributors
2025-06-15 11:46:00 +02:00
TheLastProjectandgithub-actions[bot] 9927d6a544 Update contributors 2025-06-15 04:28:39 +00:00
Sylvia van OsandGitHub 0b4c474ece Merge pull request #2548 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-14 12:25:26 +02:00
KING APPSandHosted Weblate 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 OsandGitHub 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 OsandGitHub 6ac864e3aa Merge pull request #2547 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-11 15:43:54 +02:00
smcxandHosted Weblate 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 LiskiandHosted Weblate 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 LiskiandHosted Weblate 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 FoxandGitHub 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 OsandGitHub 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 OsandGitHub 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 OsandGitHub 809a91b16a Add reproducibility status
Powered by https://shields.rbtlog.dev/
2025-06-10 23:36:39 +02:00
Sylvia van OsandHosted Weblate 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 OsandHosted Weblate 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
jonnysemonandHosted Weblate 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 ParkandHosted Weblate 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 OhnoandHosted Weblate 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 ParkandHosted Weblate 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 OsandGitHub b697aa389a Merge pull request #2542 from CatimaLoyalty/create-pull-request/patch-1749356924
Update contributors
2025-06-08 11:02:56 +02:00
TheLastProjectandgithub-actions[bot] a19f5b91a8 Update contributors 2025-06-08 04:28:44 +00:00
Sylvia van OsandGitHub 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 OsandHosted Weblate 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 OsandGitHub b3b45fcc50 Merge pull request #2537 from CatimaLoyalty/create-pull-request/patch-1749113981
Update locales
2025-06-05 11:20:37 +02:00
TheLastProjectandgithub-actions[bot] 3bf63b855f Update locales 2025-06-05 08:59:40 +00:00
Sylvia van OsandGitHub 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 OsandGitHub 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 GandHosted Weblate 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]andGitHub 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
ofab22andHosted Weblate 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 OsandGitHub 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 OsandGitHub c42533aba5 Merge pull request #2534 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-02 15:06:07 +02:00
dicaeffeandHosted Weblate 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 OsandGitHub 90afc5594f Merge pull request #2533 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-06-02 11:15:26 +02:00
ssantosandHosted Weblate 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
ofab22andHosted Weblate 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 OsandGitHub 62dbc9c97f Merge pull request #2531 from CatimaLoyalty/create-pull-request/patch-1748752381
Update contributors
2025-06-01 09:23:25 +02:00
TheLastProjectandgithub-actions[bot] ed9beb0752 Update contributors 2025-06-01 04:33:01 +00:00
Sylvia van OsandGitHub 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 OsandHosted Weblate 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
林依若andHosted Weblate 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
WarderandHosted Weblate 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 OsandGitHub e297620ea2 Merge pull request #2528 from CatimaLoyalty/create-pull-request/patch-1748542198
Update feature graphic
2025-05-29 20:10:50 +02:00
TheLastProjectandgithub-actions[bot] 83e5240871 Update feature graphic 2025-05-29 18:09:58 +00:00
Sylvia van OsandGitHub 2e68290d0c Merge pull request #2527 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-29 20:07:22 +02:00
ofab22andHosted Weblate 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
ofab22andHosted Weblate 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]andGitHub 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 OsandGitHub 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]andGitHub 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 OsandGitHub 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 OsandGitHub 6cf68abfc7 Update OpenJDK version in README 2025-05-28 10:11:53 +02:00
Sylvia van OsandGitHub 0e95dadb6c Merge pull request #2523 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-27 17:12:01 +02:00
summoner001andHosted Weblate 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
WarderandHosted Weblate 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 OsandGitHub 353c8090a9 Merge pull request #2522 from CatimaLoyalty/create-pull-request/patch-1748147066
Update contributors
2025-05-25 08:48:35 +02:00
Sylvia van OsandGitHub 7928cf8332 Merge pull request #2521 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-25 08:44:59 +02:00
TheLastProjectandgithub-actions[bot] 75bcade01c Update contributors 2025-05-25 04:24:26 +00:00
Sylvia van OsandHosted Weblate 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 OsandGitHub 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 oandHosted Weblate 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 OsandGitHub 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üütandHosted Weblate 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 OsandGitHub 2943b64634 Merge pull request #2517 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-20 20:53:10 +02:00
Takahiro NamatameandHosted Weblate 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 OsandGitHub ff8c662423 Merge pull request #2515 from CatimaLoyalty/create-pull-request/patch-1747561264
Update locales
2025-05-18 11:52:42 +02:00
Sylvia van OsandGitHub 9314637094 Merge pull request #2514 from CatimaLoyalty/fix/he
Fix hebrew support
2025-05-18 11:52:14 +02:00
TheLastProjectandgithub-actions[bot] 8def5cbe5b Update locales 2025-05-18 09:41:04 +00:00
Sylvia van OsandGitHub 6c7f21d6fd Fix hebrew support 2025-05-18 11:40:01 +02:00
Sylvia van OsandGitHub 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 OsandGitHub 4045566514 Merge pull request #2512 from CatimaLoyalty/create-pull-request/patch-1747542126
Update contributors
2025-05-18 11:12:52 +02:00
elidandHosted Weblate 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
elidandHosted Weblate b5fc0af979 Added translation using Weblate (Hebrew) 2025-05-18 05:41:35 +00:00
TheLastProjectandgithub-actions[bot] 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 OsandGitHub 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 OsandGitHub 21b051c422 Merge pull request #2507 from CatimaLoyalty/target/java21
Use Java 21
2025-05-15 21:48:22 +02:00
Prachi JoshiandHosted Weblate 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 PichonandHosted Weblate 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 OsandGitHub ebacb6fe4c Fix CI status badge 2025-05-14 20:49:04 +02:00
Sylvia van OsandGitHub fb329f410a Merge pull request #2509 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-14 17:12:12 +02:00
Edgars AndersonsandHosted Weblate 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
大王叫我来巡山andHosted Weblate 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
FjuroandHosted Weblate 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
Максим ГорпинічandHosted Weblate 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
solokotandHosted Weblate 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 oandHosted Weblate 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 OsandGitHub f4de708e42 Merge pull request #2506 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-13 17:23:41 +02:00
hajer tabbaneandHosted Weblate 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.onlineandHosted Weblate 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 OsandGitHub f62fc879c5 Merge pull request #2505 from CatimaLoyalty/create-pull-request/patch-1747073386
Update Fastlane changelogs
2025-05-12 20:15:28 +02:00
TheLastProjectandgithub-actions[bot] 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 OsandGitHub 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 OsandGitHub e12204771f Merge pull request #2502 from CatimaLoyalty/create-pull-request/patch-1746937166
Update contributors
2025-05-11 11:08:42 +02:00
TheLastProjectandgithub-actions[bot] cf9612052a Update contributors 2025-05-11 04:19:26 +00:00
Sylvia van OsandGitHub b0081919c9 Merge pull request #2499 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-10 18:06:10 +02:00
e zabihiandHosted Weblate 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
大王叫我来巡山andHosted Weblate 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 PichonandHosted Weblate 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 GerlandHosted Weblate 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 OsandGitHub b1c806a189 Merge pull request #2498 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-09 18:17:36 +02:00
Edgars AndersonsandHosted Weblate 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
SerhatandHosted Weblate 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
FjuroandHosted Weblate 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
Максим ГорпинічandHosted Weblate 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
solokotandHosted Weblate 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 oandHosted Weblate 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 oandHosted Weblate 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 OsandGitHub d9ee1950d8 Merge pull request #2496 from CatimaLoyalty/create-pull-request/patch-1746719450
Update feature graphic
2025-05-08 17:58:20 +02:00
TheLastProjectandgithub-actions[bot] 601600a036 Update feature graphic 2025-05-08 15:50:50 +00:00
Sylvia van OsandGitHub 7805e9f323 Merge pull request #2495 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-08 17:47:33 +02:00
WarderandHosted Weblate 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 OsandGitHub 1c91842ad4 Merge pull request #2493 from CatimaLoyalty/create-pull-request/patch-1746652483
Update Fastlane changelogs
2025-05-07 23:30:55 +02:00
TheLastProjectandgithub-actions[bot] 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 OsandGitHub 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 OsandGitHub 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 OsandHosted Weblate 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
WarderandHosted Weblate 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
GiannosOBandHosted Weblate 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
WarderandHosted Weblate 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 OsandGitHub 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]andGitHub 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 OsandGitHub 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 OsandGitHub 8f944329c2 Merge pull request #2486 from CatimaLoyalty/create-pull-request/patch-1746332429
Update contributors
2025-05-04 10:56:28 +02:00
Sylvia van OsandGitHub 24cde962b4 Merge pull request #2485 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-04 10:55:49 +02:00
TheLastProjectandgithub-actions[bot] cdd78cbfb5 Update contributors 2025-05-04 04:20:29 +00:00
Aliaksandr TrušandHosted Weblate 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 OsandGitHub 1d2e7bb8d2 Merge pull request #2484 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-05-03 22:15:40 +02:00
ProvekandHosted Weblate 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 MoroniandHosted Weblate 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
LordTenebrousandHosted Weblate 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 OsandGitHub e1cfb15a8b Merge pull request #2482 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-30 08:43:19 +02:00
NoctadeandHosted Weblate 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 jabraneandHosted Weblate 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
RTTTCandHosted Weblate 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 OsandGitHub 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 OsandGitHub 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]andGitHub 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šandHosted Weblate 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
ssantosandHosted Weblate 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
ssantosandHosted Weblate 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 OsandGitHub 00052f68b8 Merge pull request #2478 from CatimaLoyalty/create-pull-request/patch-1745784188
Update locales
2025-04-27 22:04:23 +02:00
TheLastProjectandgithub-actions[bot] 70f90bbf8f Update locales 2025-04-27 20:03:08 +00:00
Sylvia van OsandGitHub 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 OsandGitHub a056841aec Merge pull request #2476 from CatimaLoyalty/create-pull-request/patch-1745727537
Update contributors
2025-04-27 12:39:16 +02:00
TheLastProjectandgithub-actions[bot] bb81e22dae Update contributors 2025-04-27 04:18:57 +00:00
Aliaksandr TrušandHosted Weblate 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 OsandGitHub 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 OsandGitHub 4696862745 Merge pull request #2473 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-26 20:39:09 +02:00
TheLastProjectandgithub-actions[bot] a8930c43ce Update Gradle to 8.14 2025-04-26 06:24:47 +00:00
Govind Gopal YadavandHosted Weblate 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 YadavandHosted Weblate 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 OsandGitHub 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šandHosted Weblate 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 YadavandHosted Weblate 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 OsandGitHub 32a6fa9e8f Merge pull request #2470 from CatimaLoyalty/create-pull-request/patch-1745506852
Update locales
2025-04-24 17:35:08 +02:00
TheLastProjectandgithub-actions[bot] 4f4ffa46e7 Update locales 2025-04-24 15:00:51 +00:00
Sylvia van OsandGitHub 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 OsandGitHub 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šandHosted Weblate bdb1f70754 Added translation using Weblate (Belarusian) 2025-04-24 15:32:19 +02:00
Sylvia van OsandHosted Weblate 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 OsandHosted Weblate 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üütandHosted Weblate 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
dedakir923andHosted Weblate 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 OsandHosted Weblate 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
大王叫我来巡山andHosted Weblate 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
大王叫我来巡山andHosted Weblate 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 OsandHosted Weblate 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 OsandHosted Weblate 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 OsandHosted Weblate 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]andGitHub 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 OsandGitHub 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 DalostoandHosted Weblate 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
தமிழ்நேரம்andHosted Weblate 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é mandHosted Weblate 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üütandHosted Weblate 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 AndersonsandHosted Weblate 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 AndersonsandHosted Weblate 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
109247019824andHosted Weblate 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
FjuroandHosted Weblate 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 oandHosted Weblate 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
solokotandHosted Weblate 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 PichonandHosted Weblate 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
solokotandHosted Weblate 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 PichonandHosted Weblate 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
GiannosOBandHosted Weblate 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 oandHosted Weblate 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
FjuroandHosted Weblate 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 OsandGitHub 2bcd6f856a Merge pull request #2463 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-22 21:41:35 +02:00
Максим ГорпинічandHosted Weblate 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 oandHosted Weblate 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 oandHosted Weblate 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 KandHosted Weblate 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 oandHosted Weblate 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
Максим ГорпинічandHosted Weblate 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
தமிழ்நேரம்andHosted Weblate f2c32202c8 Added translation using Weblate (Tamil) 2025-04-22 16:48:40 +02:00
nadia fekih ahmedandHosted Weblate 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 OsandGitHub 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]andGitHub 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 OsandGitHub f4927d9c8b Merge pull request #2458 from CatimaLoyalty/create-pull-request/patch-1745248381
Update Fastlane changelogs
2025-04-21 17:13:42 +02:00
TheLastProjectandgithub-actions[bot] 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
perepujalandGitHub 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 OsandGitHub cb547b0a71 Merge pull request #2457 from CatimaLoyalty/create-pull-request/patch-1745122739
Update contributors
2025-04-20 08:03:26 +02:00
TheLastProjectandgithub-actions[bot] 01ee3568ca Update contributors 2025-04-20 04:18:59 +00:00
Sylvia van OsandGitHub fcd7c00cc7 Merge pull request #2456 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-18 20:20:10 +02:00
Brian ScirettiandHosted Weblate 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 OsandGitHub 6c9748aca4 Merge pull request #2455 from CatimaLoyalty/create-pull-request/patch-1744925476
Update locales
2025-04-18 17:06:43 +02:00
TheLastProjectandgithub-actions[bot] 02e3ae4dd6 Update locales 2025-04-17 21:31:15 +00:00
Sylvia van OsandGitHub 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 OsandGitHub 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 OsandGitHub 0fa4a6a4c8 Merge pull request #2454 from CatimaLoyalty/create-pull-request/patch-1744921489
Update feature graphic
2025-04-17 22:55:18 +02:00
TheLastProjectandgithub-actions[bot] 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 ScirettiandHosted Weblate f21264c762 Added translation using Weblate (Lombard) 2025-04-17 19:52:33 +02:00
hajer tabbaneandHosted Weblate 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
hadeelljnandHosted Weblate 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 OsandGitHub 43add95012 Merge pull request #2444 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-14 20:30:27 +02:00
Sylvain PichonandHosted Weblate 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 OsandGitHub 1c832eb899 Merge pull request #2443 from CatimaLoyalty/create-pull-request/patch-1744519581
Update contributors
2025-04-13 11:14:29 +02:00
TheLastProjectandgithub-actions[bot] f187fd10a5 Update contributors 2025-04-13 04:46:21 +00:00
Sylvia van OsandGitHub 4cac1b103a Merge pull request #2441 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-12 00:21:38 +02:00
Edgars AndersonsandHosted Weblate 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 OsandGitHub 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 OsandHosted Weblate 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 oandHosted Weblate 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 OsandGitHub 8cb08dc980 Merge pull request #2438 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-10 17:13:58 +02:00
hajer tabbaneandHosted Weblate 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 tabbaneandHosted Weblate 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
109247019824andHosted Weblate 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 tabbaneandHosted Weblate 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
大王叫我来巡山andHosted Weblate 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
FjuroandHosted Weblate 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
Максим ГорпинічandHosted Weblate 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
solokotandHosted Weblate 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 ahmedandHosted Weblate 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 tabbaneandHosted Weblate 4610058c54 Added translation using Weblate (Tamazight (Central Atlas)) 2025-04-10 09:00:43 +00:00
nadia fekih ahmedandHosted Weblate 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 ahmedandHosted Weblate 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 ahmedandHosted Weblate 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 ahmedandHosted Weblate 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 ahmedandHosted Weblate 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 ahmedandHosted Weblate 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 ahmedandHosted Weblate 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 ahmedandHosted Weblate 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 ahmedandHosted Weblate 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 ahmedandHosted Weblate 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 ahmedandHosted Weblate 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 ahmedandHosted Weblate 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 ahmedandHosted Weblate 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 ahmedandHosted Weblate 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 ahmedandHosted Weblate 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 ahmedandHosted Weblate 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
hadeelljnandHosted Weblate 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
hadeelljnandHosted Weblate 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
hadeelljnandHosted Weblate 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 OsandGitHub 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]andGitHub 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 OsandGitHub 8ff1120a0d Merge pull request #2437 from CatimaLoyalty/create-pull-request/patch-1744140504
Update Fastlane changelogs
2025-04-08 21:28:45 +02:00
TheLastProjectandgithub-actions[bot] 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 OsandGitHub 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 OsandGitHub 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)andHosted Weblate 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 OsandGitHub 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 OsandHosted Weblate 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
ssantosandHosted Weblate 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 APPSandHosted Weblate 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 APPSandHosted Weblate 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 APPSandHosted Weblate 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 OsandGitHub 91386df0f7 Merge pull request #2426 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-04 17:57:07 +02:00
XblateXandHosted Weblate 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 OsandGitHub 361b011205 Merge pull request #2425 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-04 10:43:46 +02:00
Tachibana SazaandHosted Weblate 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 SazaandHosted Weblate 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 OsandGitHub 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 OsandHosted Weblate 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 chartandHosted Weblate 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 chartandHosted Weblate 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 chartandHosted Weblate ad68c43857 Added translation using Weblate (Persian) 2025-04-01 19:11:23 +02:00
alpha chartandHosted Weblate 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 OsandGitHub 0e9366e0ce Merge pull request #2423 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-04-01 07:31:25 +02:00
Branislav VeljkovicandHosted Weblate 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 OsandGitHub 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]andGitHub 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 OsandGitHub 2bf9f58054 Merge pull request #2420 from CatimaLoyalty/create-pull-request/patch-1743308358
Update contributors
2025-03-30 12:16:15 +02:00
TheLastProjectandgithub-actions[bot] 07ba380c21 Update contributors 2025-03-30 04:19:17 +00:00
Sylvia van OsandGitHub 6e523dff7e Merge pull request #2419 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-30 00:33:20 +01:00
abdelbasset jabraneandHosted Weblate 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 OsandGitHub 6b9c452de7 Merge pull request #2418 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-26 10:32:27 +01:00
mohamad jamshidiandHosted Weblate 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 OsandGitHub 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]andGitHub 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 OsandGitHub 55b0ee7a63 Merge pull request #2415 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-24 22:01:08 +01:00
ar djebandHosted Weblate 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 OsandGitHub 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 OsandGitHub 18e530f3a0 Merge pull request #2414 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-24 13:13:47 +01:00
Edgars AndersonsandHosted Weblate 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
Максим ГорпинічandHosted Weblate 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
solokotandHosted Weblate 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]andGitHub 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 OsandGitHub a25e91dede Merge pull request #2412 from CatimaLoyalty/create-pull-request/patch-1742767250
Update feature graphic
2025-03-23 23:04:21 +01:00
TheLastProjectandgithub-actions[bot] 57086649f4 Update feature graphic 2025-03-23 22:00:50 +00:00
Sylvia van OsandGitHub 7d2fc03248 Merge pull request #2410 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-23 22:59:38 +01:00
ssantosandHosted Weblate 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
ssantosandHosted Weblate 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 OsandGitHub c9e713cf7f Merge pull request #2409 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-23 17:58:01 +01:00
FjuroandHosted Weblate 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 OsandGitHub f60cf0e674 Merge pull request #2408 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-23 15:50:42 +01:00
大王叫我来巡山andHosted Weblate 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 OsandGitHub 77860441ad Merge pull request #2406 from CatimaLoyalty/create-pull-request/patch-1742703483
Update contributors
2025-03-23 10:33:48 +01:00
Sylvia van OsandGitHub f46ec1ec51 Merge pull request #2405 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-23 10:32:38 +01:00
TheLastProjectandgithub-actions[bot] e644c347ec Update contributors 2025-03-23 04:18:03 +00:00
B o d oandHosted Weblate 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 OsandGitHub dddb3e3a11 Merge pull request #2404 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-22 20:56:27 +01:00
Edgars AndersonsandHosted Weblate 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 oandHosted Weblate 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 OsandGitHub 93c3705207 Merge pull request #2403 from CatimaLoyalty/create-pull-request/patch-1742664270
Update Fastlane changelogs
2025-03-22 19:16:44 +01:00
TheLastProjectandgithub-actions[bot] 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 OsandGitHub 0458c501c8 Merge pull request #2394 from CatimaLoyalty/create-pull-request/patch-1742235107
Update Fastlane changelogs
2025-03-17 19:12:06 +01:00
TheLastProjectandgithub-actions[bot] 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 OsandGitHub 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 OsandGitHub 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 OsandGitHub 8f00b17315 Merge pull request #2391 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-16 00:50:42 +01:00
Fajar ShiddiqandHosted Weblate 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 OsandGitHub cff3fff971 Merge pull request #2390 from CatimaLoyalty/create-pull-request/patch-1741987875
Update Fastlane changelogs
2025-03-14 22:32:17 +01:00
TheLastProjectandgithub-actions[bot] 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 OsandGitHub 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 OsandGitHub 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
TheLastProjectandgithub-actions[bot] 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 OsandGitHub 0792bb1407 Merge pull request #2378 from CatimaLoyalty/feature/android15
Target Android 15
2025-03-14 21:26:58 +01:00
Sylvia van OsandGitHub 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]andGitHub 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 OsandGitHub 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 OsandGitHub caea63ea32 Merge pull request #2383 from CatimaLoyalty/create-pull-request/patch-1741493688
Update contributors
2025-03-09 09:55:44 +01:00
TheLastProjectandgithub-actions[bot] 1761465532 Update contributors 2025-03-09 04:14:48 +00:00
PixiiiandHosted Weblate 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 OsandGitHub c2ff763311 Merge pull request #2375 from CatimaLoyalty/create-pull-request/patch-1741191680
Update locales
2025-03-07 20:07:08 +01:00
Sylvia van OsandGitHub 813287a657 Merge pull request #2376 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-07 20:06:47 +01:00
FjuroandHosted Weblate 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
ssantosandHosted Weblate 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 OsandGitHub 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
TheLastProjectandgithub-actions[bot] d66066c195 Update locales 2025-03-05 16:21:19 +00:00
Sylvia van OsandGitHub 0a222ca16a Merge pull request #2374 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-03-05 17:21:02 +01:00
ssantosandHosted Weblate 48fa369dc3 Added translation using Weblate (Portuguese) 2025-03-05 14:36:53 +00:00
ssantosandHosted Weblate 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]andGitHub 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 OsandGitHub 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óandHosted Weblate 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 OsandGitHub 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]andGitHub 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 OsandGitHub 2653c7aea3 Merge pull request #2367 from CatimaLoyalty/create-pull-request/patch-1740889044
Update contributors
2025-03-02 13:31:55 +01:00
juuce79andGitHub 1a892b2de3 Kotlin conversion of AboutActivity with tests also in Kotlin (#2360) 2025-03-02 13:30:10 +01:00
TheLastProjectandgithub-actions[bot] a9e9ee511d Update contributors 2025-03-02 04:17:23 +00:00
Sylvia van OsandGitHub 7719a2d3fd Merge pull request #2365 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-28 18:50:07 +01:00
Ricky TiggandHosted Weblate 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 OsandGitHub 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]andGitHub 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 OsandGitHub 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]andGitHub 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 OsandGitHub 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]andGitHub 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 OsandGitHub 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 OsandGitHub 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
TheLastProjectandgithub-actions[bot] 2e9d1a41f6 Update Gradle to 8.13 2025-02-26 06:25:09 +00:00
dependabot[bot]andGitHub 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 OsandGitHub 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üütandHosted Weblate 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 OsandGitHub 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]andGitHub 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 OsandGitHub 0314d49b77 Merge pull request #2355 from CatimaLoyalty/create-pull-request/patch-1740284254
Update contributors
2025-02-23 09:09:05 +01:00
TheLastProjectandgithub-actions[bot] 6335b731df Update contributors 2025-02-23 04:17:34 +00:00
Sylvia van OsandGitHub c248d1e84c Merge pull request #2354 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-22 09:06:29 +01:00
தமிழ்நேரம்andHosted Weblate 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 AndersonsandHosted Weblate 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 OsandGitHub 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 BremnesandHosted Weblate 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 OsandGitHub 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]andGitHub 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 OsandGitHub f51cc70d8e Merge pull request #2346 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-13 19:09:14 +01:00
zedsansorandHosted Weblate 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 OsandGitHub 906162ebb4 Merge pull request #2343 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-11 20:02:28 +01:00
Lari TanaseandHosted Weblate 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 OsandGitHub 6aec4b93ff Merge pull request #2341 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2025-02-10 19:49:28 +01:00
Mahan KhaliliandHosted Weblate 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 TanaseandHosted Weblate 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
dicaeffeandHosted Weblate 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 OsandGitHub 4e291b58d3 Merge pull request #2339 from CatimaLoyalty/create-pull-request/patch-1739074637
Update contributors
2025-02-09 11:45:49 +01:00
727 changed files with 5770 additions and 10887 deletions
+4
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
+3
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

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

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

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.5 KiB

+7 -9
View File
@@ -24,7 +24,7 @@ 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
@@ -32,14 +32,14 @@ jobs:
matrix:
flavor: [Foss, Gplay]
steps:
- uses: actions/checkout@v4.2.2
- uses: actions/checkout@v5
- 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 17
- name: set up OpenJDK 21
run: |
sudo apt-get update
sudo apt-get install -y openjdk-17-jdk-headless
sudo apt-get install -y openjdk-21-jdk-headless
sudo update-alternatives --auto java
- name: Build
run: ./gradlew assemble${{ matrix.flavor }}Release
@@ -58,17 +58,15 @@ jobs:
api-level: 21
arch: x86_64
script: ./gradlew connected${{ matrix.flavor }}DebugAndroidTest
- name: Run instrumented tests (API 34)
- name: Run instrumented tests (API 35)
uses: ReactiveCircus/android-emulator-runner@v2
with:
api-level: 34
api-level: 35
arch: x86_64
script: ./gradlew connected${{ matrix.flavor }}DebugAndroidTest
- name: SpotBugs
run: ./gradlew spotbugs${{ matrix.flavor }}Release
- name: Archive test results
if: always()
uses: actions/upload-artifact@v4.6.0
uses: actions/upload-artifact@v4.6.2
with:
name: test-results-flavor${{ matrix.flavor }}
path: app/build/reports
+6 -14
View File
@@ -1,4 +1,5 @@
name: Convert CHANGELOG to Fastlane
on:
workflow_dispatch:
push:
@@ -6,20 +7,11 @@ on:
- main
paths:
- 'CHANGELOG.md'
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:
convert_changelog_to_fastlane:
runs-on: ubuntu-latest
@@ -27,15 +19,15 @@ jobs:
steps:
- name: Checkout repo
id: checkout
uses: actions/checkout@v4.2.2
uses: actions/checkout@v5
- name: Setup Python
uses: actions/setup-python@v5.4.0
uses: actions/setup-python@v6.0.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@v7.0.6
uses: peter-evans/create-pull-request@v7.0.8
with:
title: "Update Fastlane changelogs"
commit-message: "Update Fastlane changelogs"
+5 -13
View File
@@ -1,22 +1,14 @@
name: Write contributors to file
on:
workflow_dispatch:
schedule:
- cron: '3 4 * * 0'
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:
contributors_to_file:
runs-on: ubuntu-latest
@@ -25,7 +17,7 @@ jobs:
steps:
- name: Checkout repo
id: checkout
uses: actions/checkout@v4.2.2
uses: actions/checkout@v5
- name: Update contributors
id: update_contributors
uses: TheLastProject/contributors-to-file-action@v3.2.0
@@ -33,7 +25,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@v7.0.6
uses: peter-evans/create-pull-request@v7.0.8
with:
title: "Update contributors"
commit-message: "Update contributors"
+6 -14
View File
@@ -1,4 +1,5 @@
name: Generate feature graphic
on:
workflow_dispatch:
push:
@@ -7,29 +8,20 @@ on:
paths:
- 'fastlane/**/title.txt'
- '.scripts/generate_feature_graphic/**'
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:
generate-feature-graphic:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.2.2
- uses: actions/checkout@v5
- name: Install requirements
run: |
sudo apt-get update
sudo apt-get install imagemagick mat2 optipng
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 +31,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@v7.0.6
uses: peter-evans/create-pull-request@v7.0.8
with:
title: "Update feature graphic"
commit-message: "Update feature graphic"
-33
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.2.2
- uses: obfusk/gradle-update-action@v3.0.0
id: gradle-update
- uses: gradle/actions/wrapper-validation@v4
- name: Create Pull Request
uses: peter-evans/create-pull-request@v7.0.6
with:
title: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"
commit-message: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"
branch-suffix: timestamp
@@ -0,0 +1,19 @@
name: Update Gradle Wrapper
on:
schedule:
- cron: "0 0 * * *"
permissions:
contents: write
pull-requests: write
jobs:
update-gradle-wrapper:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
- name: Update Gradle Wrapper
uses: gradle-update/update-gradle-wrapper-action@v2
+5 -13
View File
@@ -1,4 +1,5 @@
name: Update locales
on:
workflow_dispatch:
push:
@@ -7,31 +8,22 @@ on:
paths:
- app/src/main/res/values-*/strings.xml
- app/src/main/res/values/settings.xml
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:
update-locales:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.2.2
- uses: actions/checkout@v5
- 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@v7.0.6
uses: peter-evans/create-pull-request@v7.0.8
with:
title: "Update locales"
commit-message: "Update locales"
-44
View File
@@ -1,44 +0,0 @@
#!/usr/bin/python3
import csv
import json
import msgpack
MSGPACK = "bootstrapdata.msgpack"
OUTFILE = "stocard_stores.csv"
def load(fh):
data = []
for r in msgpack.Unpacker(fh, raw=False):
if r["collection"] == "/loyalty-card-providers/":
d = json.loads(r["data"])
data.append([r["resource_id"], d["name"], d["default_barcode_format"]])
return data
def save(data, output_file=OUTFILE):
with open(output_file, "w") as fh:
writer = csv.writer(fh, lineterminator="\n")
writer.writerow(["_id", "name", "barcodeFormat"])
for row in data:
writer.writerow(row)
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(
epilog=f"INPUT_FILE must be a .msgpack or .apk and defaults to {MSGPACK}; "
f"OUTPUT_FILE defaults to {OUTFILE}")
parser.add_argument("input_file", metavar="INPUT_FILE", nargs="?", default=MSGPACK)
parser.add_argument("output_file", metavar="OUTPUT_FILE", nargs="?", default=OUTFILE)
args = parser.parse_args()
if args.input_file.lower().endswith(".apk"):
import zipfile
with zipfile.ZipFile(args.input_file) as zf:
with zf.open(f"assets/{MSGPACK}") as fh:
data = load(fh)
else:
with open(args.input_file, "rb") as fh:
data = load(fh)
save(data, args.output_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

@@ -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
-----------------------------------------------------------
@@ -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
-----------------------------------------------------------
@@ -33,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 Sans Devanagari/" -e "s/Lexend Deca/Noto Serif Devanagari/" featureGraphic.svg ;;
ja-JP) sed -i "s/Lexend Deca/Noto Serif CJK JP/" featureGraphic.svg ;;
kn-IN) sed -i -e 's/font-size="150"/font-size="100"/' -e "s/Yesteryear/Noto Serif Kannada/" featureGraphic.svg ;;
ko) sed -i "s/Lexend Deca/Noto Serif CJK KR/" featureGraphic.svg ;;
zh-CN) sed -i "s/Lexend Deca/Noto Serif CJK SC/" featureGraphic.svg ;;
zh-TW) sed -i -e "s/Yesteryear/Noto Sans CJK TC/" -e "s/Lexend Deca/Noto Serif CJK TC/" featureGraphic.svg ;;
bg|el-GR|ru-RU|uk) sed -i "s/Lexend/Noto Sans/" featureGraphic.svg ;;
ar|fa-IR) sed -i -e 's/svg direction="ltr"/svg direction="rtl"/' -e "s/Lobster/Noto Sans Arabic/" -e "s/Lexend/Noto Sans Arabic/" featureGraphic.svg ;;
he-IL) sed -i -e "s/Lobster/Noto Sans Hebrew/" -e "s/Lexend/Noto Sans Hebrew/" featureGraphic.svg ;;
hi-IN) sed -i -e "s/Lobster/Noto Sans Devanagari/" -e "s/Lexend/Noto Sans Devanagari/" featureGraphic.svg ;;
ja-JP) sed -i "s/Lexend/Noto Sans CJK JP/" featureGraphic.svg ;;
kn-IN) sed -i -e 's/font-size="150"/font-size="125"/' -e 's/\(<tspan x="469" \)y="270"/\1y="240"/' -e "s/Lobster/Noto Sans Kannada/" -e "s/Lexend/Noto Sans Kannada/" featureGraphic.svg ;;
ko) sed -i "s/Lexend/Noto Sans CJK KR/" featureGraphic.svg ;;
zh-CN) sed -i "s/Lexend/Noto Sans CJK SC/" featureGraphic.svg ;;
zh-TW) sed -i -e "s/Lobster/Noto Sans CJK TC/" -e "s/Lexend/Noto Sans CJK TC/" featureGraphic.svg ;;
*) ;;
esac
fi
# Ensure images directory exists
mkdir -p images
# Generate .png
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
+1
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",
+39
View File
@@ -1,5 +1,44 @@
# Changelog
## Unreleased - 153
- Target Android 16
- Remove "Screen orientation" feature (Google removed the ability for apps to control screen rotation when targeting Android 16)
- Add error reporting to FOSS build (not used in Google Play version, only in other app stores)
## v2.38.0 - 152 (2025-09-12)
- Add support for .pkpasses files
- Remove Stocard importer (Stocard no longer exists)
- Temporarily disable widget images below Android 12L (workaround for a crash issue)
## 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
-4
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.
+5
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"
+39 -29
View File
@@ -5,35 +5,38 @@ GEM
base64
nkf
rexml
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.1020.0)
aws-sdk-core (3.214.0)
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.992.0)
aws-sigv4 (~> 1.9)
base64
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.96.0)
aws-sdk-core (~> 3, >= 3.210.0)
logger
aws-sdk-kms (1.105.0)
aws-sdk-core (~> 3, >= 3.225.0)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.176.0)
aws-sdk-core (~> 3, >= 3.210.0)
aws-sdk-s3 (1.189.1)
aws-sdk-core (~> 3, >= 3.225.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.10.1)
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)
@@ -55,11 +58,11 @@ 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-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)
@@ -67,8 +70,8 @@ GEM
faraday-retry (1.0.3)
faraday_middleware (1.2.1)
faraday (~> 1.0)
fastimage (2.3.1)
fastlane (2.226.0)
fastimage (2.4.0)
fastlane (2.228.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
@@ -108,7 +111,7 @@ GEM
tty-spinner (>= 0.8.0, < 1.0.0)
word_wrap (~> 1.0.0)
xcodeproj (>= 1.13.0, < 2.0.0)
xcpretty (~> 0.4.0)
xcpretty (~> 0.4.1)
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
fastlane-sirp (1.0.0)
sysrandom (~> 1.0)
@@ -129,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.1)
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)
@@ -152,34 +155,38 @@ GEM
highline (2.0.3)
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.9.0)
jwt (2.9.3)
json (2.12.2)
jwt (2.10.1)
base64
logger (1.7.0)
mini_magick (4.13.2)
mini_mime (1.1.5)
multi_json (1.15.0)
multipart-post (2.4.1)
mutex_m (0.3.0)
nanaimo (0.4.0)
naturally (2.2.1)
naturally (2.3.0)
nkf (0.2.0)
optparse (0.6.0)
os (1.1.4)
plist (3.7.1)
public_suffix (6.0.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.3.9)
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)
@@ -206,7 +213,7 @@ GEM
colored2 (~> 3.1)
nanaimo (~> 0.4.0)
rexml (>= 3.3.6, < 4.0)
xcpretty (0.4.0)
xcpretty (0.4.1)
rouge (~> 3.28.0)
xcpretty-travis-formatter (1.0.1)
xcpretty (~> 0.2, >= 0.0.7)
@@ -215,7 +222,10 @@ PLATFORMS
ruby
DEPENDENCIES
abbrev
fastlane
mutex_m
ostruct
BUNDLED WITH
2.5.22
+31 -37
View File
@@ -1,39 +1,35 @@
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 = 35
compileSdk = 36
defaultConfig {
applicationId = "me.hackerchick.catima"
minSdk = 21
targetSdk = 34
versionCode = 146
versionName = "2.34.4"
targetSdk = 36
versionCode = 152
versionName = "2.38.0"
vectorDrawables.useSupportLibrary = true
multiDexEnabled = true
resourceConfigurations += listOf("ar", "bg", "bn", "bn-rIN", "bs", "cs", "da", "de", "el-rGR", "en", "eo", "es", "es-rAR", "et", "fi", "fr", "gl", "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", "ta", "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")
buildConfigField("boolean", "useAcraCrashReporter", "true")
}
buildTypes {
@@ -66,6 +62,9 @@ android {
// Google doesn't allow donation links
buildConfigField("boolean", "showDonate", "false")
buildConfigField("boolean", "showRateOnGooglePlay", "true")
// Google Play already sends crashes to the Google Play Console
buildConfigField("boolean", "useAcraCrashReporter", "false")
}
}
@@ -104,21 +103,26 @@ android {
lintConfig = file("lint.xml")
}
kotlinOptions {
jvmTarget = "17"
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.2.0")
implementation("androidx.core:core-ktx:1.15.0")
implementation("androidx.appcompat:appcompat:1.7.1")
implementation("androidx.constraintlayout:constraintlayout:2.2.1")
implementation("androidx.core:core-ktx:1.17.0")
implementation("androidx.core:core-remoteviews:1.1.0")
implementation("androidx.core:core-splashscreen:1.0.1")
implementation("androidx.exifinterface:exifinterface:1.3.7")
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")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
implementation("com.google.android.material:material:1.13.0")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5")
// Third-party
implementation("com.journeyapps:zxing-android-embedded:4.3.0@aar")
@@ -128,34 +132,24 @@ dependencies {
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")
// Crash reporting
val acraVersion = "5.12.0"
implementation("ch.acra:acra-mail:$acraVersion")
implementation("ch.acra:acra-dialog:$acraVersion")
// Testing
val androidXTestVersion = "1.6.1"
val androidXTestVersion = "1.7.0"
val junitVersion = "4.13.2"
testImplementation("androidx.test:core:$androidXTestVersion")
testImplementation("junit:junit:$junitVersion")
testImplementation("org.robolectric:robolectric:4.14.1")
testImplementation("org.robolectric:robolectric:4.16")
androidTestImplementation("androidx.test:core:$androidXTestVersion")
androidTestImplementation("junit:junit:$junitVersion")
androidTestImplementation("androidx.test.ext:junit:1.2.1")
androidTestImplementation("androidx.test.ext:junit:1.3.0")
androidTestImplementation("androidx.test:runner:$androidXTestVersion")
androidTestImplementation("androidx.test.uiautomator:uiautomator:2.3.0")
androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1")
}
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.espresso:espresso-core:3.7.0")
}
tasks.register("copyRawResFiles", Copy::class) {
+3 -1
View File
@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima Fehlersuche</string>
</resources>
+3 -1
View File
@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Отстраняване на грешки в Catima</string>
</resources>
+3 -1
View File
@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">ক্যাটিমা ডিবাগ</string>
</resources>
+3 -1
View File
@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">ক্যাটিমা ডিবাগ</string>
</resources>
+3 -1
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>
+2 -2
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>
+3 -1
View File
@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima Datfygio</string>
</resources>
+3 -1
View File
@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima Fejlfinding</string>
</resources>
+3 -1
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>
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">عیب‌یابی کاتیما</string>
</resources>
+1 -1
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>
+3 -1
View File
@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">קטימה ניפוי באגים</string>
</resources>
+3 -1
View File
@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima Villuleit</string>
</resources>
+3 -1
View File
@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catimaデバーグ</string>
</resources>
+3 -1
View File
@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">Catima Feelerkorrektur</string>
</resources>
+3 -1
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>
+3 -1
View File
@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">കാറ്റിമ ഡീബഗ്</string>
</resources>
+3 -1
View File
@@ -1,2 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
<resources>
<string name="app_name">कॅटिमा डीबग</string>
</resources>
+3 -1
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>
+3 -1
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>
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">கேட்டிமா Debug</string>
</resources>
+2 -2
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>
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">ⴽⴰⵜⵉⵎⴰ ⴰⵙⵔⴰⵡ</string>
</resources>
+2 -2
View File
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Catima 除錯版</string>
</resources>
<string name="app_name">卡提碼除錯版</string>
</resources>
+20 -4
View File
@@ -4,7 +4,7 @@
<permission
android:description="@string/permissionReadCardsDescription"
android:icon="@drawable/ic_launcher_foreground"
android:icon="@drawable/ic_launcher_monochrome"
android:label="@string/permissionReadCardsLabel"
android:name="${applicationId}.READ_CARDS"
android:protectionLevel="dangerous" />
@@ -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"
@@ -51,6 +65,7 @@
<data android:mimeType="application/vnd.apple.pkpass" />
<data android:mimeType="application/vnd-com.apple.pkpass" />
<data android:mimeType="application/vnd.espass-espass" />
<data android:mimeType="application/vnd.apple.pkpasses" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
@@ -62,6 +77,7 @@
<data android:mimeType="application/vnd.apple.pkpass" />
<data android:mimeType="application/vnd-com.apple.pkpass" />
<data android:mimeType="application/vnd.espass-espass" />
<data android:mimeType="application/vnd.apple.pkpasses" />
</intent-filter>
</activity>
<activity
@@ -75,7 +91,8 @@
<activity
android:name=".ManageGroupActivity"
android:label="@string/group_edit"
android:theme="@style/AppTheme.NoActionBar"/>
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="adjustResize"/>
<activity
android:name=".LoyaltyCardViewActivity"
android:exported="true"
@@ -127,12 +144,11 @@
android:name=".preferences.SettingsActivity"
android:label="@string/settings"
android:theme="@style/AppTheme.NoActionBar" />
<!-- FIXME: locked screenOrientation is a workaround for https://github.com/CatimaLoyalty/Android/issues/1715, remove when https://github.com/CatimaLoyalty/Android/issues/513 is fixed -->
<!-- FIXME: ImportExportActivity cancels import on rotation -->
<activity
android:name=".ImportExportActivity"
android:label="@string/importExport"
android:exported="true"
android:screenOrientation="locked"
android:theme="@style/AppTheme.NoActionBar">
<!-- ZIP Intent Filter -->
Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 20 KiB

@@ -1,146 +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");
// Hide Google Play rate button if not on Google Play
binding.rate.setVisibility(BuildConfig.showRateOnGooglePlay ? View.VISIBLE : View.GONE);
// Hide donate button on Google Play (Google Play doesn't allow donation links)
binding.donate.setVisibility(BuildConfig.showDonate ? View.VISIBLE : View.GONE);
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);
}
}
}
@@ -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)
}
}
}
@@ -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);
}
@@ -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(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID) : null;
if (initialCardId != null) {
cardId.setText(initialCardId);
} else {
generateBarcodes("");
}
}
private void generateBarcodes(String value) {
// Update barcodes
ArrayList<CatimaBarcodeWithValue> barcodes = new ArrayList<>();
for (BarcodeFormat barcodeFormat : CatimaBarcode.barcodeFormats) {
CatimaBarcode catimaBarcode = CatimaBarcode.fromBarcode(barcodeFormat);
barcodes.add(new CatimaBarcodeWithValue(catimaBarcode, value));
}
mAdapter.setBarcodes(barcodes);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
setResult(Activity.RESULT_CANCELED);
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onRowClicked(int inputPosition, View view) {
CatimaBarcodeWithValue barcodeWithValue = mAdapter.getItem(inputPosition);
CatimaBarcode catimaBarcode = barcodeWithValue.catimaBarcode();
if (!mAdapter.isValid(view)) {
Toast.makeText(this, getString(R.string.wrongValueForBarcodeType), Toast.LENGTH_LONG).show();
return;
}
String barcodeFormat = catimaBarcode.format().name();
String value = barcodeWithValue.value();
Log.d(TAG, "Selected barcode type " + barcodeFormat);
Intent result = new Intent();
result.putExtra(BARCODE_FORMAT, barcodeFormat);
result.putExtra(BARCODE_CONTENTS, value);
BarcodeSelectorActivity.this.setResult(RESULT_OK, result);
finish();
}
}
@@ -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()
}
}
@@ -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);
}
}
@@ -1,110 +0,0 @@
package protect.card_locker;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.pm.ShortcutInfoCompat;
import androidx.core.content.pm.ShortcutManagerCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import protect.card_locker.databinding.CardShortcutConfigureActivityBinding;
import protect.card_locker.preferences.Settings;
/**
* The configuration screen for creating a shortcut.
*/
public class CardShortcutConfigure extends CatimaAppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener {
private CardShortcutConfigureActivityBinding binding;
static final String TAG = "Catima";
private SQLiteDatabase mDatabase;
private LoyaltyCardCursorAdapter mAdapter;
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
binding = CardShortcutConfigureActivityBinding.inflate(getLayoutInflater());
mDatabase = new DBHelper(this).getReadableDatabase();
// Set the result to CANCELED. This will cause nothing to happen if the
// aback button is pressed.
setResult(RESULT_CANCELED);
setContentView(binding.getRoot());
Toolbar toolbar = binding.toolbar;
toolbar.setTitle(R.string.shortcutSelectCard);
setSupportActionBar(toolbar);
// If there are no cards, bail
int cardCount = DBHelper.getLoyaltyCardCount(mDatabase);
if (cardCount == 0) {
Toast.makeText(this, R.string.noCardsMessage, Toast.LENGTH_LONG).show();
finish();
}
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.All);
mAdapter = new LoyaltyCardCursorAdapter(this, cardCursor, this, null);
binding.list.setAdapter(mAdapter);
}
@Override
protected void onResume() {
super.onResume();
var layoutManager = (GridLayoutManager) binding.list.getLayoutManager();
if (layoutManager != null) {
var settings = new Settings(this);
layoutManager.setSpanCount(settings.getPreferredColumnCount());
}
}
private void onClickAction(int position) {
Cursor selected = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.All);
selected.moveToPosition(position);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(CardShortcutConfigure.this, selected);
Log.d(TAG, "Creating shortcut for card " + loyaltyCard.store + "," + loyaltyCard.id);
ShortcutInfoCompat shortcut = ShortcutHelper.createShortcutBuilder(CardShortcutConfigure.this, loyaltyCard).build();
setResult(RESULT_OK, ShortcutManagerCompat.createShortcutResultIntent(CardShortcutConfigure.this, shortcut));
finish();
}
@Override
public boolean onCreateOptionsMenu(Menu inputMenu) {
getMenuInflater().inflate(R.menu.card_details_menu, inputMenu);
return super.onCreateOptionsMenu(inputMenu);
}
@Override
public boolean onOptionsItemSelected(MenuItem inputItem) {
int id = inputItem.getItemId();
if (id == R.id.action_display_options) {
mAdapter.showDisplayOptionsDialog();
invalidateOptionsMenu();
return true;
}
return super.onOptionsItemSelected(inputItem);
}
@Override
public void onRowClicked(int inputPosition) {
onClickAction(inputPosition);
}
@Override
public void onRowLongClicked(int inputPosition) {
// do nothing
}
}
@@ -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
}
}
@@ -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);
}
@@ -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";
}
@@ -113,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
@@ -327,6 +330,11 @@ 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) {
@@ -516,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) {
@@ -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,12 +171,10 @@ 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");
betaImportOptions.add("Stocard");
List<CharSequence> importOptions = new ArrayList<>();
for (String importOption : getResources().getStringArray(R.array.import_types_array)) {
@@ -226,14 +207,8 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
importAlertMessage = getString(R.string.importLoyaltyCardKeychainMessage);
importDataFormat = DataFormat.Catima;
break;
// Stocard
case 3:
importAlertTitle = getString(R.string.importStocard);
importAlertMessage = getString(R.string.importStocardMessage);
importDataFormat = DataFormat.Stocard;
break;
// Voucher Vault
case 4:
case 3:
importAlertTitle = getString(R.string.importVoucherVault);
importAlertMessage = getString(R.string.importVoucherVaultMessage);
importDataFormat = DataFormat.VoucherVault;
@@ -250,20 +225,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)
@@ -1,12 +1,17 @@
package protect.card_locker;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import android.widget.Toast;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.io.IOException;
import java.io.InputStream;
@@ -32,7 +37,7 @@ public class ImportExportTask implements CompatCallable<ImportExportResult> {
private char[] password;
private TaskCompleteListener listener;
private ProgressDialog progress;
private AlertDialog progress;
/**
* Constructor which will setup a task for exporting to the given file
@@ -88,12 +93,36 @@ public class ImportExportTask implements CompatCallable<ImportExportResult> {
}
public void onPreExecute() {
progress = new ProgressDialog(activity);
progress.setTitle(doImport ? R.string.importing : R.string.exporting);
MaterialAlertDialogBuilder progressDialogBuilder = new MaterialAlertDialogBuilder(activity);
progressDialogBuilder.setCancelable(false); // Don't cancel if user taps next to dialog
progressDialogBuilder.setTitle(doImport ? R.string.importing : R.string.exporting);
progress.setOnCancelListener(dialog -> cancel());
progress.setOnDismissListener(dialog -> cancel());
// Create components
TextView progressDialogTextView = new TextView(activity);
progressDialogTextView.setText(R.string.pleaseDoNotRotateTheDevice); // FIXME: Instead of telling the user to not rotate, rotation should not cancel the import
ProgressBar progressDialogProgressBar = new ProgressBar(activity);
progressDialogProgressBar.setIndeterminate(true);
// Create LinearLayout (to put the components below each other)
LinearLayout progressDialogLayout = new LinearLayout(activity);
progressDialogLayout.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams progressDialogLayoutParams = new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
);
int contentPadding = activity.getResources().getDimensionPixelSize(R.dimen.alert_dialog_content_padding);
progressDialogLayoutParams.setMargins(contentPadding, contentPadding / 2, contentPadding, 0);
// Put components in layout
progressDialogLayout.addView(progressDialogTextView, progressDialogLayoutParams);
progressDialogLayout.addView(progressDialogProgressBar, progressDialogLayoutParams);
// Create and show dialog
progressDialogBuilder.setView(progressDialogLayout);
progressDialogBuilder.setNeutralButton(R.string.cancel, (dialogInterface, i) -> cancel());
progressDialogBuilder.setOnCancelListener(dialogInterface -> cancel());
progressDialogBuilder.setOnDismissListener(dialogInterface -> cancel());
progress = progressDialogBuilder.create();
progress.show();
}
@@ -140,6 +140,7 @@ public class ImportURIHelper {
0,
Utils.getUnixTime(),
100,
100,
0,
null,
null,
@@ -0,0 +1,131 @@
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
// FIXME: The icon flow causes a crash up to Android 12L, so SDK_INT is forced up from 23 to 33
if (icon != null && Build.VERSION.SDK_INT >= 32) {
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
}
}
@@ -35,8 +35,10 @@ public class LoyaltyCard {
public int starStatus;
public long lastUsed;
public int zoomLevel;
public int zoomLevelWidth;
public int archiveStatus;
@Nullable
private Bitmap imageThumbnail;
@Nullable
@@ -64,6 +66,7 @@ public class LoyaltyCard {
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";
@@ -91,6 +94,7 @@ public class LoyaltyCard {
setStarStatus(0);
setLastUsed(Utils.getUnixTime());
setZoomLevel(100);
setZoomLevelWidth(100);
setArchiveStatus(0);
setImageThumbnail(null, null);
setImageFront(null, null);
@@ -114,13 +118,14 @@ public class LoyaltyCard {
* @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) {
@@ -138,6 +143,7 @@ public class LoyaltyCard {
setStarStatus(starStatus);
setLastUsed(lastUsed);
setZoomLevel(zoomLevel);
setZoomLevelWidth(zoomLevelWidth);
setArchiveStatus(archiveStatus);
setImageThumbnail(imageThumbnail, imageThumbnailPath);
setImageFront(imageFront, imageFrontPath);
@@ -262,6 +268,14 @@ public class LoyaltyCard {
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");
@@ -386,6 +400,11 @@ public class LoyaltyCard {
} 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) {
@@ -455,6 +474,9 @@ public class LoyaltyCard {
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);
}
@@ -526,6 +548,8 @@ public class LoyaltyCard {
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));
@@ -544,6 +568,7 @@ public class LoyaltyCard {
starStatus,
lastUsed,
zoomLevel,
zoomLevelWidth,
archiveStatus,
null,
Utils.getCardImageFileName(id, ImageLocationType.icon),
@@ -556,7 +581,7 @@ public class LoyaltyCard {
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
// 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
@@ -595,7 +620,7 @@ public class LoyaltyCard {
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,
@@ -611,6 +636,7 @@ public class LoyaltyCard {
this.starStatus,
this.lastUsed,
this.zoomLevel,
this.zoomLevelWidth,
this.archiveStatus,
this.imageThumbnail,
this.imageThumbnailPath,
@@ -44,6 +44,9 @@ import androidx.appcompat.widget.AppCompatTextView;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.exifinterface.media.ExifInterface;
import androidx.lifecycle.ViewModelProvider;
@@ -297,6 +300,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
super.onCreate(savedInstanceState);
binding = LoyaltyCardEditActivityBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
Utils.applyWindowInsetsAndFabOffset(binding.getRoot(), binding.fabSave);
viewModel = new ViewModelProvider(this).get(LoyaltyCardEditActivityViewModel.class);
@@ -575,7 +579,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
binding.tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings("NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE")
public void onTabSelected(TabLayout.Tab tab) {
viewModel.setTabIndex(tab.getPosition());
showPart(tab.getText().toString());
@@ -587,7 +590,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
}
@Override
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings("NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE")
public void onTabReselected(TabLayout.Tab tab) {
viewModel.setTabIndex(tab.getPosition());
showPart(tab.getText().toString());
@@ -1614,13 +1616,13 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
barcodeImage.getViewTreeObserver().removeOnGlobalLayoutListener(this);
Log.d(TAG, "ImageView size now known");
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, LoyaltyCardEditActivity.this, true);
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, LoyaltyCardEditActivity.this, true, false);
viewModel.getTaskHandler().executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
}
});
} else {
Log.d(TAG, "ImageView size known known, creating barcode");
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, this, true);
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, this, true, false);
viewModel.getTaskHandler().executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
}
}
@@ -4,6 +4,12 @@ import android.app.Application;
import androidx.appcompat.app.AppCompatDelegate;
import org.acra.ACRA;
import org.acra.config.CoreConfigurationBuilder;
import org.acra.config.DialogConfigurationBuilder;
import org.acra.config.MailSenderConfigurationBuilder;
import org.acra.data.StringFormat;
import protect.card_locker.preferences.Settings;
public class LoyaltyCardLockerApplication extends Application {
@@ -12,6 +18,27 @@ public class LoyaltyCardLockerApplication extends Application {
public void onCreate() {
super.onCreate();
// Initialize crash reporter (if enabled)
if (BuildConfig.useAcraCrashReporter) {
ACRA.init(this, new CoreConfigurationBuilder()
//core configuration:
.withBuildConfigClass(BuildConfig.class)
.withReportFormat(StringFormat.KEY_VALUE_LIST)
.withPluginConfigurations(
new DialogConfigurationBuilder()
.withText(String.format(getString(R.string.acra_catima_has_crashed), getString(R.string.app_name)))
.withCommentPrompt(getString(R.string.acra_explain_crash))
.withResTheme(R.style.AppTheme)
.build(),
new MailSenderConfigurationBuilder()
.withMailTo("acra-crash@catima.app")
.withSubject(String.format(getString(R.string.acra_crash_email_subject), getString(R.string.app_name)))
.build()
)
);
}
// Set theme
Settings settings = new Settings(this);
AppCompatDelegate.setDefaultNightMode(settings.getTheme());
}
@@ -52,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;
@@ -139,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;
}
@@ -221,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
@@ -248,24 +256,12 @@ 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);
settings = new Settings(this);
String cardOrientation = settings.getCardViewOrientation();
if (cardOrientation.equals(getString(R.string.settings_key_follow_sensor_orientation))) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
} else if (cardOrientation.equals(getString(R.string.settings_key_lock_on_opening_orientation))) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
} else if (cardOrientation.equals(getString(R.string.settings_key_portrait_orientation))) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if (cardOrientation.equals(getString(R.string.settings_key_landscape_orientation))) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
if (savedInstanceState != null) {
mainImageIndex = savedInstanceState.getInt(STATE_IMAGEINDEX);
isFullscreen = savedInstanceState.getBoolean(STATE_FULLSCREEN);
@@ -278,36 +274,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;
@@ -369,6 +337,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");
@@ -707,6 +715,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);
@@ -857,6 +867,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();
@@ -867,6 +879,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();
@@ -892,6 +905,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();
@@ -935,7 +949,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
null,
false,
this,
addPadding);
addPadding,
isFullscreen);
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
}
}
@@ -1129,11 +1144,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();
@@ -2,6 +2,8 @@ package protect.card_locker;
import android.app.Activity;
import android.app.SearchManager;
import android.appwidget.AppWidgetManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@@ -229,6 +231,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
binding = MainActivityBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
Utils.applyWindowInsets(binding.getRoot());
setSupportActionBar(binding.toolbar);
groupsTabLayout = binding.groups;
contentMainBinding = ContentMainBinding.bind(binding.include.getRoot());
@@ -329,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;
@@ -441,6 +430,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
if (mCurrentActionMode != null) {
mCurrentActionMode.finish();
}
new ListWidget().updateAll(mAdapter.mContext);
}
private void processParseResultList(List<ParseResult> parseResultList, String group, boolean closeAppOnNoBarcode) {
@@ -507,6 +498,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
// 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 if (receivedType.equals("application/vnd.apple.pkpasses")) {
parseResultList = Utils.retrieveBarcodesFromPkPasses(this, data);
} else {
Log.e(TAG, "Wrong mime-type");
return;
@@ -708,6 +701,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
showReversed.isChecked() ? DBHelper.LoyaltyCardOrderDirection.Descending : DBHelper.LoyaltyCardOrderDirection.Ascending
);
new ListWidget().updateAll(this);
dialog.dismiss();
});
@@ -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);
@@ -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();
@@ -34,13 +34,17 @@ class PkpassParser(context: Context, uri: Uri?) {
private var expiry: Date? = null
private val balance: BigDecimal = BigDecimal(0)
private val balanceType: Currency? = null
private var cardId: String? = 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
@@ -63,8 +67,17 @@ class PkpassParser(context: Context, uri: Uri?) {
try {
mContext.contentResolver.openInputStream(uri).use { inputStream ->
ZipInputStream(inputStream).use { zipInputStream ->
var localFileHeader: LocalFileHeader
while ((zipInputStream.nextEntry.also { localFileHeader = it }) != null) {
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
@@ -125,6 +138,7 @@ class PkpassParser(context: Context, uri: Uri?) {
starStatus,
lastUsed,
zoomLevel,
zoomLevelWidth,
archiveStatus,
image,
null,
@@ -296,30 +310,22 @@ class PkpassParser(context: Context, uri: Uri?) {
}
// Append type-specific info to the pass
noteText.append("\n\n")
// Find the relevant pass type and parse it
var hasPassData = false
for (passType in listOf("boardingPass", "coupon", "eventTicket", "generic")) {
try {
noteText.append(
parsePassJSONPassFields(
jsonObject.getJSONObject(passType),
locale
)
var extraText = parsePassJSONPassFields(
jsonObject.getJSONObject(passType),
locale
)
hasPassData = true
noteText.append("\n\n")
noteText.append(extraText)
break
} catch (ignored: JSONException) {}
}
// Failed to parse anything, error out
if (!hasPassData) {
throw FormatException(mContext.getString(R.string.errorReadingFile))
}
note = noteText.toString()
}
@@ -0,0 +1,73 @@
package protect.card_locker
import android.content.Context
import android.net.Uri
import android.util.Log
import androidx.core.net.toUri
import net.lingala.zip4j.io.inputstream.ZipInputStream
import net.lingala.zip4j.model.LocalFileHeader
import java.io.FileNotFoundException
import java.io.IOException
class PkpassesParser(context: Context, uri: Uri?) {
private var mContext = context
private val pkPassParsers: ArrayList<PkpassParser> = ArrayList()
init {
mContext = context
Log.i(TAG, "Received Pkpasses 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
// Ignore non-pkpass files
if (!localFileHeader.fileName.endsWith(".pkpass")) continue
// Extract .pkpass (.zip) inside .pkpasses to cache directory
val tempFileName = "pkpassparser_" + System.currentTimeMillis() + "_" + localFileHeader.fileName
val tempFile = Utils.copyToTempFile(mContext, zipInputStream, tempFileName)
// Parse temporary file
pkPassParsers.add(
PkpassParser(mContext, tempFile.toUri())
)
// Delete temporary file
tempFile.delete()
}
}
}
} catch (e: FileNotFoundException) {
throw IOException(mContext.getString(R.string.errorReadingFile))
} catch (e: Exception) {
throw e
}
}
fun getPkpassParsers(): ArrayList<PkpassParser> {
return pkPassParsers
}
companion object {
private const val TAG = "Catima"
}
}
@@ -37,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;
@@ -100,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();
@@ -175,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
@@ -1,29 +0,0 @@
package protect.card_locker;
public class ThirdPartyInfo {
private final String mName;
private final String mUrl;
private final String mLicense;
public ThirdPartyInfo(String name, String url, String license) {
mName = name;
mUrl = url;
mLicense = license;
}
public String name() {
return mName;
}
public String url() {
return mUrl;
}
public String license() {
return mLicense;
}
public String toHtml() {
return String.format("<a href=\"%s\">%s</a> (%s)", url(), name(), license());
}
}
@@ -0,0 +1,23 @@
package protect.card_locker
class ThirdPartyInfo(
private val mName: String,
private val mUrl: String,
private val mLicense: String
) {
fun name(): String {
return mName
}
fun url(): String {
return mUrl
}
fun license(): String {
return mLicense
}
fun toHtml(): String {
return String.format("<a href=\"%s\">%s</a> (%s)", url(), name(), license())
}
}
@@ -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);
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
@@ -27,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;
@@ -38,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;
@@ -46,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;
@@ -78,11 +85,12 @@ 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;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -194,12 +202,25 @@ public class Utils {
List<String> locales = pkpassParser.listLocales();
if (locales.isEmpty()) {
return Collections.singletonList(new ParseResult(ParseResultType.FULL, pkpassParser.toLoyaltyCard(null)));
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 = new ParseResult(ParseResultType.FULL, pkpassParser.toLoyaltyCard(locale));
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);
}
@@ -207,6 +228,58 @@ public class Utils {
return parseResultList;
}
static public List<ParseResult> retrieveBarcodesFromPkPasses(Context context, Uri uri) {
Log.i(TAG, "Received Pkpasses file with possible barcode");
if (uri == null) {
Log.e(TAG, "Pkpasses did not contain any data");
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
}
PkpassesParser pkpassesParser;
try {
pkpassesParser = new PkpassesParser(context, uri);
} catch (Exception e) {
Log.e(TAG, "Error reading pkpasses file", e);
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
}
List<ParseResult> parseResultList = new ArrayList<>();
int i = 0;
for (PkpassParser pkpassParser : pkpassesParser.getPkpassParsers()) {
ParseResult parseResult;
List<String> locales = pkpassParser.listLocales();
if (locales.isEmpty()) {
try {
parseResult = 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<>();
}
parseResult.setNote(String.format(context.getString(R.string.cardWithNumber), i+1));
parseResultList.add(parseResult);
} else {
for (String locale : locales) {
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(String.format(context.getString(R.string.cardWithNumberAndLocale), i+1, locale));
parseResultList.add(parseResult);
}
}
i++;
}
return parseResultList;
}
static public List<ParseResult> retrieveBarcodesFromPdf(Context context, Uri uri) {
Log.i(TAG, "Received PDF file with possible barcode");
if (uri == null) {
@@ -298,7 +371,19 @@ public class Utils {
}
if (requestCode == Utils.BARCODE_IMPORT_FROM_PKPASS_FILE) {
return retrieveBarcodesFromPkPass(context, intent.getData());
Uri intentData = intent.getData();
if (intentData == null) {
Log.e(TAG, "Uri did not contain any data");
Toast.makeText(context, R.string.errorReadingFile, Toast.LENGTH_LONG).show();
return new ArrayList<>();
}
if (Objects.equals(context.getContentResolver().getType(intentData), "application/vnd.apple.pkpasses")) {
return retrieveBarcodesFromPkPasses(context, intentData);
}
return retrieveBarcodesFromPkPass(context, intentData);
}
if (requestCode == Utils.BARCODE_SCAN || requestCode == Utils.SELECT_BARCODE_REQUEST) {
@@ -364,14 +449,17 @@ public class Utils {
// ...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<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());
@@ -572,6 +660,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;
@@ -821,7 +914,7 @@ public class Utils {
public static File copyToTempFile(Context context, InputStream input, String name) throws IOException {
File file = createTempFile(context, name);
try (input; FileOutputStream out = new FileOutputStream(file)) {
try (FileOutputStream out = new FileOutputStream(file)) {
byte[] buf = new byte[4096];
int len;
while ((len = input.read(buf)) != -1) {
@@ -1001,6 +1094,9 @@ public class Utils {
// 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
@@ -1093,4 +1189,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;
}
}
@@ -505,6 +505,7 @@ public class CatimaImporter implements Importer {
starStatus,
lastUsed,
DBHelper.DEFAULT_ZOOM_LEVEL,
DBHelper.DEFAULT_ZOOM_LEVEL_WIDTH,
archiveStatus,
null,
null,
@@ -3,6 +3,5 @@ package protect.card_locker.importexport;
public enum DataFormat {
Catima,
Fidme,
Stocard,
VoucherVault;
}
@@ -164,6 +164,7 @@ public class FidmeImporter implements Importer {
starStatus,
Utils.getUnixTime(),
DBHelper.DEFAULT_ZOOM_LEVEL,
DBHelper.DEFAULT_ZOOM_LEVEL_WIDTH,
archiveStatus,
null,
null,
@@ -37,9 +37,6 @@ public class MultiFormatImporter {
case Fidme:
importer = new FidmeImporter();
break;
case Stocard:
importer = new StocardImporter();
break;
case VoucherVault:
importer = new VoucherVaultImporter();
break;
@@ -1,427 +0,0 @@
package protect.card_locker.importexport;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.util.Log;
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.FileHeader;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.text.ParseException;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import protect.card_locker.CatimaBarcode;
import protect.card_locker.DBHelper;
import protect.card_locker.FormatException;
import protect.card_locker.ImageLocationType;
import protect.card_locker.LoyaltyCard;
import protect.card_locker.R;
import protect.card_locker.Utils;
import protect.card_locker.ZipUtils;
/**
* Class for importing a database from CSV (Comma Separate Values)
* formatted data.
* <p>
* The database's loyalty cards are expected to appear in the CSV data.
* A header is expected for the each table showing the names of the columns.
*/
public class StocardImporter implements Importer {
public static class StocardProvider {
public String name = null;
public String barcodeFormat = null;
public Bitmap logo = null;
}
public static class StocardRecord {
public String providerId = null;
public String store = null;
public String label = null;
public String note = null;
public String cardId = null;
public String barcodeType = null;
public Long lastUsed = null;
public Bitmap frontImage = null;
public Bitmap backImage = null;
@NonNull
@Override
public String toString() {
return String.format(
"StocardRecord{%n providerId=%s,%n store=%s,%n label=%s,%n note=%s,%n cardId=%s,%n"
+ " barcodeType=%s,%n lastUsed=%s,%n frontImage=%s,%n backImage=%s%n}",
this.providerId,
this.store,
this.label,
this.note,
this.cardId,
this.barcodeType,
this.lastUsed,
this.frontImage,
this.backImage
);
}
}
public static class ZIPData {
public final Map<String, StocardRecord> cards;
public final Map<String, StocardProvider> providers;
ZIPData(final Map<String, StocardRecord> cards, final Map<String, StocardProvider> providers) {
this.cards = cards;
this.providers = providers;
}
}
public static class ImportedData {
public final List<LoyaltyCard> cards;
public final Map<Integer, Map<ImageLocationType, Bitmap>> images;
ImportedData(final List<LoyaltyCard> cards, final Map<Integer, Map<ImageLocationType, Bitmap>> images) {
this.cards = cards;
this.images = images;
}
}
public static final String PROVIDER_PREFIX = "/loyalty-card-providers/";
private static final String TAG = "Catima";
public void importData(Context context, SQLiteDatabase database, File inputFile, char[] password) throws IOException, FormatException, JSONException, ParseException {
ZIPData zipData = new ZIPData(new HashMap<>(), new HashMap<>());
final CSVParser parser = new CSVParser(new InputStreamReader(context.getResources().openRawResource(R.raw.stocard_stores), StandardCharsets.UTF_8), CSVFormat.RFC4180.builder().setHeader().build());
try {
for (CSVRecord record : parser) {
StocardProvider provider = new StocardProvider();
provider.name = record.get("name").trim();
provider.barcodeFormat = record.get("barcodeFormat").trim();
zipData.providers.put(record.get("_id").trim(), provider);
}
parser.close();
} catch (IllegalArgumentException | IllegalStateException e) {
throw new FormatException("Issue parsing CSV data", e);
}
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.");
}
ImportedData importedData = importLoyaltyCardHashMap(context, zipData);
saveAndDeduplicate(context, database, importedData);
}
public ZIPData importZIP(ZipFile zipFile, final ZIPData zipData) throws IOException, FormatException, JSONException {
Map<String, StocardRecord> cards = zipData.cards;
Map<String, StocardProvider> providers = zipData.providers;
String[] customProvidersBaseName = null;
String[] cardBaseName = null;
String customProviderId = "";
String cardName = "";
for (FileHeader fileHeader : zipFile.getFileHeaders()) {
String fileName = fileHeader.getFileName();
String[] nameParts = fileName.split("/");
if (nameParts.length < 2) {
continue;
}
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?
/*
Known files:
extracts/<user-UUID>/users/<user-UUID>/
analytics-properties/content.json
devices/<device-UUID>/
analytics-properties/content.json
content.json
ip-location-wifi/content.json
enabled-regions/<UUID>/content.json
loyalty-card-custom-providers/<provider-UUID>/content.json - custom providers
loyalty-cards/<card-UUID>/
card-linked-coupons/accounts/default/
content.json
user-coupons/<UUID>/content.json
content.json - card itself
images/back.png - back image (legacy)
images/back/back.jpg - back image
images/back/content.json
images/front.png - front image (legacy)
images/front/content.json
images/front/front.jpg - front image
notes/default/content.json - note
points-account/
content.json
statement/content.json
usages/<UUID>/content.json - timestamps
usage-statistics/content.json - timestamps
reward-program-balances/<UUID>/content.json
*/
customProvidersBaseName = new String[]{
"extracts",
userId,
"users",
userId,
"loyalty-card-custom-providers"
};
cardBaseName = new String[]{
"extracts",
userId,
"users",
userId,
"loyalty-cards"
};
}
if (startsWith(nameParts, customProvidersBaseName, 1)) {
// Extract providerId
customProviderId = nameParts[customProvidersBaseName.length];
StocardProvider provider = providers.get(customProviderId);
if (provider == null) {
provider = new StocardProvider();
providers.put(customProviderId, provider);
}
// Name file
if (fileName.endsWith(customProviderId + "/content.json")) {
JSONObject jsonObject = ZipUtils.readJSON(zipInputStream);
provider.name = jsonObject.getString("name");
} else if (fileName.endsWith("logo.png")) {
provider.logo = ZipUtils.readImage(zipInputStream);
} else if (!fileName.endsWith("/")) {
Log.d(TAG, "Unknown or unused loyalty-card-custom-providers file " + fileName + ", skipping...");
}
} else if (startsWith(nameParts, cardBaseName, 1)) {
// Extract cardName
cardName = nameParts[cardBaseName.length];
StocardRecord record = cards.get(cardName);
if (record == null) {
record = new StocardRecord();
cards.put(cardName, record);
}
// This is the card itself
if (fileName.endsWith(cardName + "/content.json")) {
JSONObject jsonObject = ZipUtils.readJSON(zipInputStream);
record.cardId = jsonObject.getString("input_id");
if (jsonObject.has("input_provider_name")) {
record.store = jsonObject.getString("input_provider_name");
}
if (jsonObject.has("label")) {
String label = jsonObject.getString("label");
if (!label.isBlank()) {
record.label = label;
}
}
// Provider ID can be either custom or not, extract whatever version is relevant
String customProviderPrefix = "/users/" + userId + "/loyalty-card-custom-providers/";
String providerId = jsonObject
.getJSONObject("input_provider_reference")
.getString("identifier");
if (providerId.startsWith(customProviderPrefix)) {
providerId = providerId.substring(customProviderPrefix.length());
} else if (providerId.startsWith(PROVIDER_PREFIX)) {
providerId = providerId.substring(PROVIDER_PREFIX.length());
} else {
throw new FormatException("Unsupported provider ID format: " + providerId);
}
record.providerId = providerId;
if (jsonObject.has("input_barcode_format")) {
record.barcodeType = jsonObject.getString("input_barcode_format");
}
} else if (fileName.endsWith("notes/default/content.json")) {
record.note = ZipUtils.readJSON(zipInputStream).getString("content");
} else if (fileName.endsWith("usage-statistics/content.json")) {
JSONArray usages = ZipUtils.readJSON(zipInputStream).getJSONArray("usages");
for (int i = 0; i < usages.length(); i++) {
JSONObject lastUsedObject = usages.getJSONObject(i);
String lastUsedString = lastUsedObject.getJSONObject("time").getString("value");
long timeStamp = Instant.parse(lastUsedString).getEpochSecond();
if (record.lastUsed == null || timeStamp > record.lastUsed) {
record.lastUsed = timeStamp;
}
}
} else if (fileName.matches(".*/usages/[^/]+/content.json")) {
JSONObject lastUsedObject = ZipUtils.readJSON(zipInputStream);
String lastUsedString = lastUsedObject.getJSONObject("time").getString("value");
long timeStamp = Instant.parse(lastUsedString).getEpochSecond();
if (record.lastUsed == null || timeStamp > record.lastUsed) {
record.lastUsed = timeStamp;
}
} else if (fileName.endsWith("/images/front.png") || fileName.endsWith("/images/front/front.jpg")) {
record.frontImage = ZipUtils.readImage(zipInputStream);
} else if (fileName.endsWith("/images/back.png") || fileName.endsWith("/images/back/back.jpg")) {
record.backImage = ZipUtils.readImage(zipInputStream);
} else if (!fileName.endsWith("/")) {
Log.d(TAG, "Unknown or unused loyalty-cards file " + fileName + ", skipping...");
}
} else if (!fileName.endsWith("/")) {
Log.d(TAG, "Unknown or unused file " + fileName + ", skipping...");
}
zipInputStream.close();
}
return new ZIPData(cards, providers);
}
public ImportedData importLoyaltyCardHashMap(Context context, final ZIPData zipData) throws FormatException {
ImportedData importedData = new ImportedData(new ArrayList<>(), new HashMap<>());
int tempID = 0;
List<String> cardKeys = new ArrayList<>(zipData.cards.keySet());
Collections.sort(cardKeys);
for (String key : cardKeys) {
StocardRecord record = zipData.cards.get(key);
if (record.providerId == null) {
Log.d(TAG, "Missing providerId for card " + record + ", ignoring...");
continue;
}
if (record.cardId == null) {
throw new FormatException("No card ID listed, but is required");
}
StocardProvider provider = zipData.providers.get(record.providerId);
// Read store from card, if not available (old export), fall back to providerData
String store = record.store != null ? record.store : provider != null ? provider.name : record.providerId;
String note = record.note != null ? record.note : "";
String barcodeTypeString = record.barcodeType != null ? record.barcodeType : provider != null ? provider.barcodeFormat : null;
if (record.label != null && !record.label.equals(store) && !record.label.equals(note)) {
note = note.isEmpty() ? record.label : note + "\n" + record.label;
}
CatimaBarcode barcodeType = null;
if (barcodeTypeString != null && !barcodeTypeString.isEmpty()) {
if (barcodeTypeString.equals("RSS_DATABAR_EXPANDED")) {
barcodeType = CatimaBarcode.fromBarcode(BarcodeFormat.RSS_EXPANDED);
} else if (barcodeTypeString.equals("GS1_128")) {
barcodeType = CatimaBarcode.fromBarcode(BarcodeFormat.CODE_128);
} else {
barcodeType = CatimaBarcode.fromName(barcodeTypeString);
}
}
int headerColor = Utils.getRandomHeaderColor(context);
if (provider != null && provider.logo != null) {
headerColor = Utils.getHeaderColorFromImage(provider.logo, headerColor);
}
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,
null,
null,
null,
null,
null,
null
);
importedData.cards.add(card);
Map<ImageLocationType, Bitmap> images = new HashMap<>();
if (provider != null && provider.logo != null) {
images.put(ImageLocationType.icon, provider.logo);
}
if (record.frontImage != null) {
images.put(ImageLocationType.front, record.frontImage);
}
if (record.backImage != null) {
images.put(ImageLocationType.back, record.backImage);
}
importedData.images.put(tempID, images);
tempID++;
}
return importedData;
}
public void saveAndDeduplicate(Context context, SQLiteDatabase database, final ImportedData data) throws IOException {
// This format does not have IDs that can cause conflicts
// Proper deduplication for all formats will be implemented later
for (LoyaltyCard card : data.cards) {
// card.id is temporary and only used to index the images Map
long id = DBHelper.insertLoyaltyCard(database, 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);
for (Map.Entry<ImageLocationType, Bitmap> entry : data.images.get(card.id).entrySet()) {
Utils.saveCardImage(context, entry.getValue(), (int) id, entry.getKey());
}
}
}
private boolean startsWith(String[] full, String[] start, int minExtraLength) {
if (full.length - minExtraLength < start.length) {
return false;
}
for (int i = 0; i < start.length; i++) {
if (!start[i].contentEquals(full[i])) {
return false;
}
}
return true;
}
}
@@ -166,6 +166,7 @@ public class VoucherVaultImporter implements Importer {
0,
Utils.getUnixTime(),
DBHelper.DEFAULT_ZOOM_LEVEL,
DBHelper.DEFAULT_ZOOM_LEVEL_WIDTH,
0,
null,
null,
@@ -74,10 +74,6 @@ public class Settings {
return getBoolean(R.string.settings_key_display_barcode_max_brightness, true);
}
public String getCardViewOrientation() {
return getString(R.string.settings_key_card_orientation, getResString(R.string.settings_key_follow_system_orientation));
}
public boolean getKeepScreenOn() {
return getBoolean(R.string.settings_key_keep_screen_on, true);
}
@@ -24,6 +24,7 @@ import java.util.Locale;
import java.util.Objects;
import java.util.stream.Collectors;
import protect.card_locker.BuildConfig;
import protect.card_locker.CatimaAppCompatActivity;
import protect.card_locker.MainActivity;
import protect.card_locker.R;
@@ -42,6 +43,7 @@ public class SettingsActivity extends CatimaAppCompatActivity {
binding = SettingsActivityBinding.inflate(getLayoutInflater());
setTitle(R.string.settings);
setContentView(binding.getRoot());
Utils.applyWindowInsets(binding.getRoot());
Toolbar toolbar = binding.toolbar;
setSupportActionBar(toolbar);
enableToolbarBackButton();
@@ -192,6 +194,11 @@ public class SettingsActivity extends CatimaAppCompatActivity {
Preference contentProviderReadPreference = findPreference(getResources().getString(R.string.settings_key_allow_content_provider_read));
assert contentProviderReadPreference != null;
contentProviderReadPreference.setVisible(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M);
// Hide crash reporter settings on builds it's not enabled on
Preference crashReporterPreference = findPreference("acra.enable");
assert crashReporterPreference != null;
crashReporterPreference.setVisible(BuildConfig.useAcraCrashReporter);
}
private void refreshActivity(boolean reloadMain) {
Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:pathData="M0,0h108v108h-108z"
android:fillColor="#1F4262"/>
</vector>
@@ -3,69 +3,57 @@
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<group android:scaleX="1.5307087"
android:scaleY="1.5307087"
android:translateX="15.12"
android:translateY="15.12">
<group android:scaleX="0.75"
android:scaleY="0.75"
android:translateX="13.5"
android:translateY="13.5">
<path
android:pathData="M14.3354,20.1954l20.7318,-9.2304l5.7612,12.9398l-20.7318,9.2304z"
android:strokeLineJoin="miter"
android:strokeWidth="0.529167"
android:fillColor="#f0f0f0"
android:strokeColor="#c80000"/>
android:pathData="M45.5,30.58L68.05,22.37C70.13,21.61 72.42,22.68 73.18,24.76L75.92,32.28L49.6,41.85L45.5,30.58Z"
android:fillColor="#F5A3A3"/>
<path
android:pathData="M14.8755,10.9648l23.2041,10.3311l-6.8874,15.4694l-23.2041,-10.3311z"
android:strokeLineJoin="miter"
android:strokeWidth="0.529167"
android:fillColor="#f0f0f0"
android:strokeColor="#c80000"/>
android:pathData="M70.36,25.78C70.17,25.27 69.6,25 69.08,25.19L49.35,32.37L51.4,38.01L72.07,30.48L70.36,25.78ZM75.92,32.28L49.6,41.85L45.5,30.58L68.05,22.37C70.13,21.61 72.42,22.68 73.18,24.76L75.92,32.28Z"
android:fillColor="#CF1717"/>
<path
android:pathData="M16.5599,16.1348l26.5459,7.6119l-4.5489,15.8639l-26.5459,-7.6119z"
android:strokeLineJoin="round"
android:strokeWidth="1.5875"
android:fillColor="#c80000"
android:strokeColor="#c80000"
android:fillType="evenOdd"/>
android:pathData="M58.42,30.58L35.86,22.37C33.79,21.61 31.49,22.68 30.74,24.76L28,32.28L54.31,41.85L58.42,30.58Z"
android:fillColor="#F5A3A3"/>
<path
android:pathData="M12.011,15.4955h27.6157v16.5032h-27.6157z"
android:strokeLineJoin="round"
android:strokeWidth="1.5875"
android:fillColor="#ff0000"
android:strokeColor="#ff0000"
android:fillType="evenOdd"/>
android:pathData="M33.56,25.78C33.74,25.27 34.32,25 34.84,25.19L54.57,32.37L52.52,38.01L31.84,30.48L33.56,25.78ZM28,32.28L54.31,41.85L58.42,30.58L35.86,22.37C33.79,21.61 31.49,22.68 30.74,24.76L28,32.28Z"
android:fillColor="#DD1818"/>
<path
android:pathData="M7.8471,23.7471a4.3659,8.5899 0,1 0,8.7317 0a4.3659,8.5899 0,1 0,-8.7317 0z"
android:strokeLineJoin="round"
android:strokeWidth="0.91078"
android:fillColor="#ff0000"
android:strokeColor="#ff0000"/>
android:pathData="M28.7,37.6C29.08,35.42 31.15,33.97 33.33,34.35L80.6,42.69C82.78,43.07 84.23,45.15 83.85,47.32L81.82,58.83C82.3,59.1 84.67,60.16 87.42,57.23V57.23C87.92,56.69 88.45,56.23 89.01,55.86C91.76,54.02 94,55.22 94,58.53C94,61.34 92.39,64.78 90.21,66.88C86.63,70.54 80.69,70.56 79.75,70.53L77.59,82.78C77.21,84.95 75.14,86.4 72.96,86.02L25.69,77.69C25.67,77.68 25.66,77.68 25.64,77.68C23.45,77.32 22,76.7 22,76C22,75.72 22.23,75.45 22.66,75.2C22.4,74.54 22.31,73.8 22.44,73.05L28.7,37.6Z"
android:fillColor="#B81414"/>
<path
android:pathData="m24.4983,25.781a1.6711,1.6711 0,0 1,-1.3809 1.6457,1.6711 1.6711,0 0,1 -1.8605,-1.0741"
android:strokeLineJoin="round"
android:strokeWidth="0.529167"
android:fillColor="#00000000"
android:strokeColor="#f0f0f0"
android:strokeLineCap="round"/>
android:pathData="M90.67,60.75C90.67,61.85 89.93,63.24 89.01,63.86C88.09,64.47 87.34,64.07 87.34,62.97C87.34,61.86 88.09,60.47 89.01,59.86C89.93,59.24 90.67,59.64 90.67,60.75Z"
android:fillColor="#E82E2E"/>
<path
android:pathData="m27.7991,26.333a1.6711,1.6711 0,0 1,-1.8605 1.0741,1.6711 1.6711,0 0,1 -1.3809,-1.6457"
android:strokeLineJoin="round"
android:strokeWidth="0.529167"
android:fillColor="#00000000"
android:strokeColor="#f0f0f0"
android:strokeLineCap="round"/>
android:pathData="M78,30C80.21,30 82,31.79 82,34V70C82,72.21 80.21,74 78,74H30C25.58,74 22,74.9 22,76V32C22,30.9 25.58,30 30,30H78Z"
android:fillColor="#E82E2E"/>
<path
android:pathData="m16.0606,22.271 l2.6458,-2.6458 2.6458,2.6458"
android:strokeLineJoin="miter"
android:strokeWidth="0.529167"
android:fillColor="#00000000"
android:strokeColor="#f0f0f0"
android:strokeLineCap="butt"/>
android:pathData="M51.2,54.25C51.62,53.53 52.53,53.29 53.25,53.7C53.94,54.1 54.2,54.98 53.84,55.68L53.76,55.82C53.4,56.52 53.65,57.4 54.35,57.8C55.04,58.2 55.93,57.98 56.36,57.32L56.44,57.18C56.87,56.52 57.75,56.3 58.45,56.7C59.16,57.12 59.41,58.03 58.99,58.75C57.75,60.9 55,61.64 52.85,60.4C50.7,59.15 49.96,56.4 51.2,54.25Z"
android:fillColor="#8A0F0F"/>
<path
android:pathData="m27.7023,22.271 l2.6458,-2.6458 2.6458,2.6458"
android:strokeLineJoin="miter"
android:strokeWidth="0.529167"
android:fillColor="#00000000"
android:strokeColor="#f0f0f0"
android:strokeLineCap="butt"/>
android:pathData="M52.79,54.25C52.38,53.53 51.46,53.29 50.75,53.7C50.05,54.1 49.8,54.98 50.16,55.68L50.23,55.82C50.6,56.52 50.34,57.4 49.65,57.8C48.95,58.2 48.07,57.98 47.64,57.32L47.56,57.18C47.13,56.52 46.24,56.3 45.55,56.7C44.83,57.12 44.59,58.03 45,58.75C46.24,60.9 49,61.64 51.15,60.4C53.3,59.15 54.04,56.4 52.79,54.25Z"
android:fillColor="#8A0F0F"/>
<path
android:pathData="M53.3,56.75C52.72,57.75 51.28,57.75 50.7,56.75L48.1,52.25C47.53,51.25 48.25,50 49.4,50L54.6,50C55.75,50 56.47,51.25 55.9,52.25L53.3,56.75Z"
android:fillColor="#8A0F0F"/>
<path
android:pathData="M40.5,40.5C43.73,40.5 46.46,42.62 47.42,45.53C47.68,46.31 47.26,47.16 46.47,47.42C45.69,47.68 44.84,47.26 44.58,46.47C44,44.73 42.38,43.5 40.5,43.5C38.62,43.5 37,44.73 36.42,46.47C36.16,47.26 35.31,47.68 34.53,47.42C33.74,47.16 33.32,46.31 33.58,45.53C34.54,42.62 37.27,40.5 40.5,40.5Z"
android:fillColor="#8A0F0F"/>
<path
android:pathData="M63.5,40.5C66.73,40.5 69.46,42.62 70.42,45.53C70.68,46.31 70.26,47.16 69.47,47.42C68.69,47.68 67.84,47.26 67.58,46.47C67,44.73 65.38,43.5 63.5,43.5C61.62,43.5 60,44.73 59.42,46.47C59.16,47.26 58.31,47.68 57.53,47.42C56.74,47.16 56.32,46.31 56.58,45.53C57.54,42.62 60.27,40.5 63.5,40.5Z"
android:fillColor="#8A0F0F"/>
<path
android:pathData="M26,55C25.45,55 25,54.55 25,54C25,53.45 25.45,53 26,53H42C42.55,53 43,53.45 43,54C43,54.55 42.55,55 42,55H26Z"
android:fillColor="#8A0F0F"/>
<path
android:pathData="M26.35,60.94C25.83,61.13 25.26,60.87 25.06,60.35C24.87,59.83 25.13,59.26 25.65,59.06L41.65,53.06C42.17,52.87 42.74,53.13 42.94,53.65C43.13,54.17 42.87,54.74 42.35,54.94L26.35,60.94Z"
android:fillColor="#8A0F0F"/>
<path
android:pathData="M61.65,54.94C61.13,54.74 60.87,54.17 61.06,53.65C61.26,53.13 61.83,52.87 62.35,53.06L78.35,59.06C78.87,59.26 79.13,59.83 78.94,60.35C78.74,60.87 78.17,61.13 77.65,60.94L61.65,54.94Z"
android:fillColor="#8A0F0F"/>
<path
android:pathData="M78,55C78.55,55 79,54.55 79,54C79,53.45 78.55,53 78,53H62C61.45,53 61,53.45 61,54C61,54.55 61.45,55 62,55H78Z"
android:fillColor="#8A0F0F"/>
</group>
</vector>
@@ -3,25 +3,34 @@
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#FF000000"
android:pathData="M53.26,40.92l14.35,-6.39l2.86,6.42"
android:strokeAlpha="0.4"
android:fillAlpha="0.4"/>
<path
android:fillColor="#FF000000"
android:pathData="M36.14,40.95l2.86,-6.42l14.24,6.34"
android:strokeAlpha="0.4"
android:fillAlpha="0.4"/>
<path
android:fillColor="#FF000000"
android:pathData="M40.01,37.17l7.73,3.44H38.48l1.53,-3.44m26.58,0 l1.53,3.44H58.86l7.73,-3.44M39,34.53l-2.86,6.42v1.66H70.47V40.95L67.61,34.53 53.27,40.92l-0.02,-0.05L39,34.53Z"/>
<path
android:fillColor="#FF000000"
android:pathData="M74.07,51.23l4.93,1.41l-6.44,22.48l-37.61,-10.79l39.13,0l0,-13.11z"
android:strokeAlpha="0.7"
android:fillAlpha="0.7"/>
<path
android:fillColor="#FF000000"
android:pathData="M34.94,40.95C31.66,40.95 29,46.19 29,52.64s2.66,11.69 5.94,11.69L74.07,64.34L74.07,40.95ZM41.21,51.08 L40.15,50.02 44.43,45.74 48.71,50.02 47.65,51.08 44.43,47.86ZM58.02,56.56a3.11,3.11 0,0 1,-2.93 2.05,3.15 3.15,0 0,1 -0.55,-0.05 3.11,3.11 0,0 1,-1.83 -1.04,3.12 3.12,0 0,1 -5.3,-0.96 0.75,0.75 0,0 1,1.41 -0.51,1.62 1.62,0 0,0 3.14,-0.55 0.75,0.75 0,0 1,1.5 0,1.62 1.62,0 0,0 3.14,0.55 0.75,0.75 0,0 1,1.41 0.51ZM64.14,51.08 L60.92,47.86L57.71,51.08l-1.06,-1.06 4.28,-4.28 4.28,4.28Z"/>
<group android:scaleX="0.75"
android:scaleY="0.75"
android:translateX="13.5"
android:translateY="13.5">
<path
android:pathData="M75,31C78.31,31 81,33.69 81,37V44.43C81.83,45.67 82.2,47.22 81.92,48.81L81,54.01V55.87C81.24,55.72 81.5,55.51 81.79,55.22L81.86,55.14C82.38,54.59 82.96,54.08 83.58,53.67L83.72,53.57C85.2,52.64 87.03,52.17 88.68,53.05C90.37,53.96 90.99,55.83 90.99,57.63L90.99,57.77C90.94,60.78 89.29,64.16 87.12,66.26L87.12,66.26C85.22,68.18 82.74,69.08 80.76,69.52C80.64,69.55 80.53,69.57 80.41,69.6C79.85,70.76 78.92,71.72 77.77,72.32L76.71,78.35C76.13,81.61 73.02,83.79 69.76,83.22L30.37,76.27C30.33,76.27 30.29,76.26 30.26,76.25C29.12,76.09 28.06,75.84 27.22,75.49C26.8,75.32 26.33,75.07 25.93,74.72C25.54,74.37 25.01,73.72 25,72.78C25,72.78 25,72.78 25,72.78C25,72.77 25,72.76 25,72.75V34.5C25,33.84 25.32,33.25 25.82,32.89C26.23,32.49 26.7,32.24 27.04,32.09C27.6,31.83 28.27,31.63 28.97,31.48C29.75,31.31 30.64,31.18 31.59,31.1C31.59,31.1 31.58,31.1 31.57,31.1L32.67,28.07L32.73,27.93C33.91,24.91 37.3,23.37 40.36,24.49L52.83,29.03L65.3,24.49C68.42,23.36 71.86,24.96 73,28.07L74.06,31H75ZM34.85,73L70.45,79.28C71.54,79.47 72.58,78.74 72.77,77.66L73.59,73H34.85ZM34,35C32.35,35 30.88,35.15 29.82,35.39C29.48,35.46 29.21,35.54 29,35.61V69.47C30.4,69.17 32.15,69 34,69H75L75.1,69C76.13,68.95 76.95,68.13 77,67.1L77,67V37C77,35.9 76.1,35 75,35H34ZM86.78,56.59C86.68,56.59 86.4,56.61 85.88,56.94L85.8,56.99C85.47,57.21 85.13,57.51 84.78,57.88C84.78,57.88 84.78,57.88 84.78,57.88L84.64,58.03C83.44,59.25 82.18,59.88 81,60.12V65.32C82.2,64.94 83.35,64.36 84.22,63.5L84.34,63.38C85.88,61.89 86.99,59.43 86.99,57.63L86.99,57.53C86.98,56.92 86.84,56.67 86.78,56.59ZM46.56,31L38.99,28.25C37.99,27.88 36.88,28.37 36.47,29.35L36.43,29.44L35.86,31H46.56ZM69.8,31L69.24,29.44C68.86,28.41 67.71,27.87 66.67,28.25L59.11,31H69.8Z"
android:fillColor="#000000"
android:fillType="evenOdd"/>
<path
android:pathData="M55.17,51C56.32,51 57.04,52.25 56.46,53.25L54.69,56.31C54.6,56.76 54.79,57.24 55.21,57.48C55.73,57.78 56.39,57.6 56.69,57.08C57.11,56.37 58.02,56.12 58.74,56.53C59.46,56.95 59.7,57.87 59.29,58.58C58.16,60.54 55.67,61.21 53.71,60.08C53.45,59.93 53.21,59.75 53,59.55C52.78,59.75 52.54,59.93 52.28,60.08C50.33,61.21 47.83,60.54 46.7,58.58C46.29,57.87 46.53,56.95 47.25,56.53C47.97,56.12 48.88,56.37 49.3,57.08C49.6,57.6 50.26,57.78 50.78,57.48C51.2,57.23 51.4,56.74 51.29,56.29L49.54,53.25C48.96,52.25 49.68,51 50.83,51H55.17Z"
android:fillColor="#000000"/>
<path
android:pathData="M43.25,42.5C46,42.5 48.48,44.07 49.4,46.46C49.7,47.24 49.31,48.1 48.54,48.4C47.76,48.7 46.9,48.31 46.6,47.54C46.18,46.44 44.91,45.5 43.25,45.5C41.58,45.5 40.32,46.44 39.9,47.54C39.6,48.31 38.74,48.7 37.96,48.4C37.19,48.1 36.8,47.24 37.1,46.46C38.02,44.07 40.5,42.5 43.25,42.5Z"
android:fillColor="#000000"/>
<path
android:pathData="M62.75,42.5C65.5,42.5 67.98,44.07 68.9,46.46C69.2,47.24 68.81,48.1 68.04,48.4C67.26,48.7 66.4,48.31 66.1,47.54C65.68,46.44 64.41,45.5 62.75,45.5C61.08,45.5 59.82,46.44 59.4,47.54C59.1,48.31 58.24,48.7 57.46,48.4C56.69,48.1 56.3,47.24 56.6,46.46C57.52,44.07 60,42.5 62.75,42.5Z"
android:fillColor="#000000"/>
<path
android:pathData="M33,55C32.17,55 31.5,54.33 31.5,53.5C31.5,52.67 32.17,52 33,52H44.25C45.08,52 45.75,52.67 45.75,53.5C45.75,54.33 45.08,55 44.25,55H33Z"
android:fillColor="#000000"/>
<path
android:pathData="M33.61,59.87C32.85,60.21 31.97,59.87 31.63,59.11C31.29,58.35 31.63,57.47 32.39,57.13L43.61,52.13C44.37,51.79 45.26,52.13 45.59,52.89C45.93,53.65 45.59,54.53 44.83,54.87L33.61,59.87Z"
android:fillColor="#000000"/>
<path
android:pathData="M60.85,54.88C60.09,54.55 59.74,53.66 60.07,52.9C60.4,52.14 61.28,51.79 62.04,52.12L73.6,57.12C74.36,57.45 74.71,58.34 74.38,59.1C74.05,59.86 73.16,60.21 72.4,59.88L60.85,54.88Z"
android:fillColor="#000000"/>
<path
android:pathData="M73,52C73.83,52 74.5,52.67 74.5,53.5C74.5,54.33 73.83,55 73,55H61.5C60.67,55 60,54.33 60,53.5C60,52.67 60.67,52 61.5,52H73Z"
android:fillColor="#000000"/>
</group>
</vector>
+1 -1
View File
@@ -6,7 +6,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="protect.card_locker.MainActivity"
tools:context="protect.card_locker.ManageGroupActivity"
tools:showIn="@layout/main_activity">
<TextView
@@ -97,36 +97,6 @@
android:layout_gravity="center_horizontal"
android:layout_marginTop="8dp"
android:text="@string/importOptionFilesystemButton" />
<View
android:id="@+id/dividerImportApplication"
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_margin="16dp"
android:background="?android:attr/listDivider"/>
<TextView
android:id="@+id/importOptionApplicationTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/text_size_large"
android:text="@string/importOptionApplicationTitle"/>
<TextView
android:id="@+id/importOptionApplicationExplanation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textSize="@dimen/text_size_medium"
android:text="@string/importOptionApplicationExplanation"/>
<Button
android:id="@+id/importOptionApplicationButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:layout_marginTop="8dp"
android:text="@string/importOptionApplicationButton" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>
+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/widget_layout"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- android:columnWidth must be kept in sync with list_widget_item.xml -->
<GridView
android:id="@+id/grid_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:numColumns="auto_fit"
android:columnWidth="107dp"
android:verticalSpacing="4dp"
android:horizontalSpacing="4dp"
android:gravity="center"/>
</LinearLayout>
@@ -0,0 +1,17 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/widget_layout"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/no_cards_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/card_list_widget_empty"
app:autoSizeTextType="uniform"
app:autoSizeMinTextSize="12sp"
app:autoSizeMaxTextSize="100sp"
app:autoSizeStepGranularity="2sp" />
</LinearLayout>
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
85.6dp : 53.98dp
Both multiplied by 1.25 to fit better
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="107dp"
android:layout_height="67.475dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:gravity="center"
android:id="@+id/item_container"
android:background="@drawable/round_outline"
android:clipToOutline="true">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/item_container_foreground">
<ImageView
android:id="@+id/item_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center|center" />
<TextView
android:id="@+id/item_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:autoSizeMinTextSize="6sp"
app:autoSizeTextType="uniform"
android:layout_gravity="center|center"
android:gravity="center" />
</FrameLayout>
</FrameLayout>
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/coordinator_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
@@ -142,20 +143,30 @@
android:background="@android:color/transparent"/>
</LinearLayout>
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/fullscreen_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- Top white background that stays white even when scaling the fullscreen image-->
<ImageView
android:importantForAccessibility="no"
android:layout_height="0dp"
android:layout_width="match_parent"
android:background="#FFFFFFFF"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/scaler_guideline" />
<ImageView
android:importantForAccessibility="no"
android:id="@+id/fullscreen_image"
android:layout_width="match_parent"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/scaler_guideline"/>
app:layout_constraintBottom_toTopOf="@+id/scaler_guideline"
app:layout_constraintStart_toStartOf="@+id/scaler_startwidthguideline"
app:layout_constraintEnd_toEndOf="@+id/scaler_endwidthguideline"/>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/scaler_guideline"
@@ -164,10 +175,24 @@
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.5"/>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/scaler_startwidthguideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="1"/>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/scaler_endwidthguideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="1"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@+id/fullscreen_button_minimize"
app:layout_constraintBottom_toTopOf="@+id/set_width_layout"
android:layout_marginBottom="25dp"
android:layout_marginStart="15.0dip"
android:layout_marginEnd="15.0dip">
@@ -188,6 +213,31 @@
android:max="100" />
</LinearLayout>
<LinearLayout
android:id="@+id/set_width_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="15.0dip"
android:layout_marginEnd="15.0dip"
app:layout_constraintBottom_toTopOf="@+id/fullscreen_button_minimize">
<TextView
android:importantForAccessibility="no"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/width"/>
<SeekBar
android:id="@+id/barcode_widthscaler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:contentDescription="@string/setBarcodeWidth"
android:min="20"
android:max="100" />
</LinearLayout>
<ImageButton
android:id="@+id/fullscreen_button_minimize"
android:layout_width="match_parent"

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