Compare commits

...
487 Commits
Author SHA1 Message Date
Sylvia van Os 61b582f676 Release Catima 2.42.0 2026-05-06 20:34:41 +02:00
Sylvia van OsandGitHub 4bf6ae897f Merge pull request #3116 from CatimaLoyalty/feature/java_25_21
Java fixes
2026-05-06 20:29:56 +02:00
Sylvia van Os 74b15ce766 Java fixes
Use 25 in build.sh (Fedora 44 doesn't ship with 21 anymore) and target
21 consistently (Android Studio doesn't support 25 yet)
2026-05-06 19:01:35 +02:00
Sylvia van OsandGitHub cea4a5431e Merge pull request #3115 from CatimaLoyalty/dependabot/gradle/gradle-wrapper-9.5.0
Bump gradle-wrapper from 9.4.1 to 9.5.0
2026-05-06 17:05:31 +02:00
dependabot[bot]andGitHub 12e0105b5a Bump gradle-wrapper from 9.4.1 to 9.5.0
Bumps [gradle-wrapper](https://github.com/gradle/gradle) from 9.4.1 to 9.5.0.
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](https://github.com/gradle/gradle/compare/v9.4.1...v9.5.0)

---
updated-dependencies:
- dependency-name: gradle-wrapper
  dependency-version: 9.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-06 02:53:39 +00:00
Sylvia van OsandGitHub 17be43d0d2 Merge pull request #3114 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-05-05 20:47:27 +02:00
Francisco SerradorandHosted Weblate dd071c912a Translated using Weblate (Spanish)
Currently translated at 94.4% (154 of 163 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/es/
2026-05-05 18:47:00 +02:00
The WizardandHosted Weblate 32cdacb4be Translated using Weblate (Arabic)
Currently translated at 99.3% (318 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2026-05-05 18:46:59 +02:00
Thu Trang PhamandHosted Weblate c1cbebd782 Translated using Weblate (Vietnamese)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/vi/
2026-05-05 18:46:58 +02:00
Sylvia van OsandGitHub 2a334445dc Merge pull request #3113 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-05-05 13:27:21 +02:00
PatrikandHosted Weblate 34bba5a636 Translated using Weblate (Czech)
Currently translated at 100.0% (163 of 163 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2026-05-05 11:12:23 +00:00
Francisco SerradorandHosted Weblate 3c18ac0d96 Translated using Weblate (Spanish)
Currently translated at 75.4% (123 of 163 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/es/
2026-05-05 11:12:22 +00:00
PatrikandHosted Weblate 9b9005087e Translated using Weblate (Slovak)
Currently translated at 100.0% (163 of 163 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2026-05-05 11:12:21 +00:00
The WizardandHosted Weblate 88f0bc4c28 Translated using Weblate (Arabic)
Currently translated at 99.0% (317 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2026-05-05 11:12:20 +00:00
Sylvia van OsandGitHub c8d368e86f Merge pull request #3112 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-05-04 11:37:04 +02:00
PatrikandHosted Weblate 318d6956fa Translated using Weblate (Slovak)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sk/
2026-05-04 09:10:36 +00:00
OmikorinandHosted Weblate 5443214033 Translated using Weblate (Polish)
Currently translated at 100.0% (163 of 163 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2026-05-04 09:10:36 +00:00
NooB9496andHosted Weblate 2bdabbcd4c Translated using Weblate (Polish)
Currently translated at 100.0% (163 of 163 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2026-05-04 09:10:35 +00:00
Francisco SerradorandHosted Weblate 38eaa59518 Translated using Weblate (Spanish)
Currently translated at 69.9% (114 of 163 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/es/
2026-05-04 09:10:34 +00:00
PatrikandHosted Weblate ed6fa92f51 Translated using Weblate (Slovak)
Currently translated at 95.7% (156 of 163 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2026-05-04 09:10:33 +00:00
Sylvia van OsandGitHub 7f0b4bccb3 Merge pull request #3111 from CatimaLoyalty/create-pull-request/patch-1777789590
Update contributors
2026-05-03 08:48:31 +02:00
TheLastProjectandgithub-actions[bot] f4edfb870b Update contributors 2026-05-03 06:26:30 +00:00
Sylvia van OsandGitHub 9a07256a70 Merge pull request #3110 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-05-02 20:34:58 +02:00
이정희andHosted Weblate b744754949 Translated using Weblate (Korean)
Currently translated at 94.3% (302 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ko/
2026-05-02 18:10:09 +00:00
ssantosandHosted Weblate f08859b377 Translated using Weblate (Portuguese)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt/
2026-05-02 18:10:08 +00:00
ssantosandHosted Weblate fb5475b724 Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2026-05-02 18:10:07 +00:00
Sylvia van OsandGitHub 798d26ddae Merge pull request #3109 from CatimaLoyalty/fix/nfc_state
Ensure correct NFC state on onResume
2026-05-02 19:02:56 +02:00
Sylvia van Os cd2eb2e0d9 Ensure correct NFC state on onResume
This fixes going to settings from the view activity and disabling NFC,
followed by a press of the back button from not disabling reader mode
2026-05-02 16:14:50 +02:00
NightShiftNexusandGitHub dfa1c29fa0 feat: split complex loyaltyCardViewActivity (#3072) 2026-05-02 16:10:03 +02:00
Sylvia van OsandGitHub 090e85ea1c Merge pull request #3106 from CatimaLoyalty/dependabot/gradle/androidx.compose-compose-bom-2026.04.01
Bump androidx.compose:compose-bom from 2026.03.01 to 2026.04.01
2026-04-30 11:44:47 +02:00
dependabot[bot]andGitHub d1fd7c1eb0 Bump androidx.compose:compose-bom from 2026.03.01 to 2026.04.01
Bumps androidx.compose:compose-bom from 2026.03.01 to 2026.04.01.

---
updated-dependencies:
- dependency-name: androidx.compose:compose-bom
  dependency-version: 2026.04.01
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-30 05:37:45 +00:00
Sylvia van OsandGitHub 775cba5667 Merge pull request #3105 from CatimaLoyalty/dependabot/gradle/kotlin-2.3.21
Bump kotlin from 2.3.20 to 2.3.21
2026-04-30 07:36:40 +02:00
dependabot[bot]andGitHub 6f40bc5b1b Bump kotlin from 2.3.20 to 2.3.21
Bumps `kotlin` from 2.3.20 to 2.3.21.

Updates `org.jetbrains.kotlin.android` from 2.3.20 to 2.3.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.3.20...v2.3.21)

Updates `org.jetbrains.kotlin.plugin.compose` from 2.3.20 to 2.3.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.3.20...v2.3.21)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-30 02:56:01 +00:00
Sylvia van OsandGitHub e14fb974b4 Fix last updated year 2026-04-29 21:36:39 +02:00
Sylvia van OsandGitHub dbf29c6b83 Add NFC permission to privacy policy (#3104) 2026-04-29 21:24:06 +02:00
Sylvia van OsandGitHub ad44fd3382 Merge pull request #3103 from CatimaLoyalty/revert-3095-fix/remove_unneeded_nfc_permission
Revert "Remove unneeded NFC permission"
2026-04-29 19:42:47 +02:00
Sylvia van OsandGitHub 61df41d5fe Merge pull request #3102 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-04-29 19:27:38 +02:00
Sylvia van OsandGitHub 942a795c2c Revert "Remove unneeded NFC permission" 2026-04-29 19:18:52 +02:00
Sylvia van OsandHosted Weblate 5f948badd1 Translated using Weblate (Spanish)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2026-04-29 17:10:21 +00:00
Liner SevenandHosted Weblate f07f32b169 Translated using Weblate (Japanese)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ja/
2026-04-29 17:10:20 +00:00
Liner SevenandHosted Weblate 905257d039 Translated using Weblate (Japanese)
Currently translated at 100.0% (163 of 163 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ja/
2026-04-29 17:10:19 +00:00
ezn24andHosted Weblate 4af7500e42 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2026-04-29 17:10:18 +00:00
Sylvia van OsandGitHub a9a3a0037b Merge pull request #3100 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-04-28 18:28:16 +02:00
Sylvia van OsandHosted Weblate 111d16319b Translated using Weblate (Bulgarian)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2026-04-28 17:10:27 +02:00
Francisco SerradorandHosted Weblate 269a74da52 Translated using Weblate (Spanish)
Currently translated at 67.4% (110 of 163 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/es/
2026-04-28 17:10:26 +02:00
Milo IvirandHosted Weblate 51a094a502 Translated using Weblate (Croatian)
Currently translated at 2.4% (4 of 163 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/hr/
2026-04-28 17:10:25 +02:00
Francisco SerradorandHosted Weblate b048c017bf Translated using Weblate (Spanish)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2026-04-28 17:10:24 +02:00
NooB9496andHosted Weblate d725756498 Translated using Weblate (Polish)
Currently translated at 99.3% (162 of 163 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2026-04-28 17:10:23 +02:00
Milo IvirandHosted Weblate 65649bbb72 Translated using Weblate (Croatian)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hr/
2026-04-28 17:10:22 +02:00
Sylvia van OsandGitHub 7e246e9d78 Merge pull request #3098 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-04-27 16:35:37 +02:00
Sylvain PichonandHosted Weblate cdf965f4da Translated using Weblate (French)
Currently translated at 100.0% (163 of 163 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2026-04-27 16:11:24 +02:00
FjuroandHosted Weblate b2e19bb89a Translated using Weblate (Czech)
Currently translated at 100.0% (163 of 163 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2026-04-27 16:11:24 +02:00
B o d oandHosted Weblate ba6cfb0a55 Translated using Weblate (German)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2026-04-27 16:11:23 +02:00
109247019824andHosted Weblate 8a24dbfdaf Translated using Weblate (Bulgarian)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2026-04-27 16:11:21 +02:00
Oğuz ErsenandHosted Weblate d84e13e2ef Translated using Weblate (Turkish)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2026-04-27 16:11:20 +02:00
大王叫我来巡山andHosted Weblate c4727aa3d8 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2026-04-27 16:11:18 +02:00
josé m.andHosted Weblate 110b5d4c87 Translated using Weblate (Galician)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/gl/
2026-04-27 16:11:17 +02:00
大王叫我来巡山andHosted Weblate b8c834794b Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (163 of 163 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2026-04-27 16:11:16 +02:00
solokotandHosted Weblate bcc1cc412e Translated using Weblate (Russian)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2026-04-27 16:11:16 +02:00
B o d oandHosted Weblate ff96880cc2 Translated using Weblate (German)
Currently translated at 100.0% (163 of 163 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-04-27 16:11:15 +02:00
Sylvain PichonandHosted Weblate 6f4e9662db Translated using Weblate (French)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2026-04-27 16:11:14 +02:00
GideonandHosted Weblate 5da99fc5f0 Translated using Weblate (Dutch)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2026-04-27 16:11:12 +02:00
Priit JõerüütandHosted Weblate ec3fc8737a Translated using Weblate (Estonian)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2026-04-27 16:11:11 +02:00
Vasilis K.andHosted Weblate 5fd3dcda36 Translated using Weblate (Greek)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2026-04-27 16:11:11 +02:00
FjuroandHosted Weblate 938aaba898 Translated using Weblate (Czech)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2026-04-27 16:11:10 +02:00
Giovanni DonisiandHosted Weblate cb7e6c96b0 Translated using Weblate (Italian)
Currently translated at 100.0% (320 of 320 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2026-04-27 16:11:09 +02:00
Sylvia van OsandGitHub 49b128a20c Merge pull request #3096 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-04-26 16:04:06 +02:00
andHosted Weblate 7f683eb920 Translated using Weblate (Korean)
Currently translated at 95.2% (300 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ko/
2026-04-26 13:10:01 +00:00
Sylvia van OsandGitHub 489c89205d Merge pull request #3095 from CatimaLoyalty/fix/remove_unneeded_nfc_permission
Remove unneeded NFC permission
2026-04-25 18:20:55 +02:00
Sylvia van Os 4b0b91de98 Remove unneeded NFC permission 2026-04-25 16:09:39 +02:00
Sylvia van OsandGitHub c54b1ab4a0 Merge pull request #3094 from CatimaLoyalty/create-pull-request/patch-1777125791
Update Fastlane changelogs
2026-04-25 16:03:39 +02:00
TheLastProjectandgithub-actions[bot] 8055a2b651 Update Fastlane changelogs 2026-04-25 14:03:11 +00:00
Sylvia van Os 71ababc4d1 Update CHANGELOG 2026-04-25 16:02:58 +02:00
Sylvia van OsandGitHub 498b885398 Merge pull request #3047 from il-Luca/feature/pause-nfc-while-viewing-card
Add option to pause NFC while viewing a card
2026-04-25 16:02:30 +02:00
Sylvia van Os 774fcfd497 Improve comment clarity 2026-04-25 15:46:23 +02:00
Sylvia van Os 0967e475d5 Pause NFC by default 2026-04-25 15:42:08 +02:00
Sylvia van Os 2bd6fc444e Show snackbar when NFC is paused 2026-04-25 14:07:14 +02:00
Sylvia van OsandGitHub dfa025952b Merge pull request #3093 from CatimaLoyalty/dependabot/github_actions/peter-evans/create-pull-request-8.1.1
Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1
2026-04-23 09:09:12 +02:00
Sylvia van OsandGitHub 30918675bf Merge pull request #3092 from CatimaLoyalty/dependabot/github_actions/actions/upload-artifact-7.0.1
Bump actions/upload-artifact from 7.0.0 to 7.0.1
2026-04-23 09:08:34 +02:00
dependabot[bot]andGitHub 91f6c11821 Bump peter-evans/create-pull-request from 8.1.0 to 8.1.1
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 8.1.0 to 8.1.1.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v8.1.0...v8.1.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 02:53:10 +00:00
dependabot[bot]andGitHub bf16fbe84b Bump actions/upload-artifact from 7.0.0 to 7.0.1
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 7.0.0 to 7.0.1.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v7.0.0...v7.0.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 02:53:02 +00:00
Sylvia van OsandGitHub ffb8003245 Merge pull request #3090 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-04-21 21:29:59 +02:00
Ariel IsaharovandHosted Weblate 1645b5f362 Translated using Weblate (Hebrew (Israel))
Currently translated at 23.8% (75 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/he_IL/
2026-04-21 19:09:56 +00:00
Sylvia van OsandGitHub aa03cb5f89 Merge pull request #3089 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-04-20 19:31:59 +02:00
אופק מזרחיandHosted Weblate 1d8025b0cf Translated using Weblate (Hebrew)
Currently translated at 13.0% (41 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/he/
2026-04-20 17:09:59 +00:00
Sylvia van OsandGitHub 3ac8998377 Merge pull request #3088 from CatimaLoyalty/create-pull-request/patch-1776191728
Update Fastlane changelogs
2026-04-14 21:06:34 +02:00
TheLastProjectandgithub-actions[bot] 5160f61523 Update Fastlane changelogs 2026-04-14 18:35:28 +00:00
Sylvia van Os 68c5fa10f4 Update CHANGELOG 2026-04-14 20:35:15 +02:00
Sylvia van OsandGitHub 620f564ae5 Merge pull request #3087 from utafrali/fix/issue-3086-feature-request-timestamp-in-the-export-
Add timestamp to export filename
2026-04-14 20:34:35 +02:00
ugurtafrali b840d481a8 Add timestamp to export filename 2026-04-14 00:31:40 +03:00
Sylvia van OsandGitHub 7872a59a89 Merge pull request #3085 from CatimaLoyalty/create-pull-request/patch-1775973243
Update contributors
2026-04-12 09:19:26 +02:00
TheLastProjectandgithub-actions[bot] 62c7f92563 Update contributors 2026-04-12 05:54:02 +00:00
Sylvia van OsandGitHub 283f237180 Merge pull request #3084 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-04-10 13:18:16 +02:00
Thu Trang PhamandHosted Weblate 6dcd1c43fe Translated using Weblate (Vietnamese)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/vi/
2026-04-10 06:47:10 +02:00
ChaitanyaandHosted Weblate 805bad437c Translated using Weblate (Hindi)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hi/
2026-04-10 06:47:10 +02:00
Sylvia van OsandGitHub f476fb1cc0 Merge pull request #3082 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-04-08 10:53:11 +02:00
Sylvia van OsandHosted Weblate f35f8b1b29 Translated using Weblate (Bosnian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bs/
2026-04-07 22:53:57 +00:00
Sylvia van OsandGitHub 061ed7e765 Merge pull request #3081 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-04-07 15:18:02 +02:00
Milo IvirandHosted Weblate fbbfe78828 Translated using Weblate (Croatian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hr/
2026-04-06 19:09:57 +00:00
pacavarnandHosted Weblate 557132b4c5 Translated using Weblate (Bosnian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bs/
2026-04-06 19:09:56 +00:00
Sylvia van OsandGitHub 5bc7a15c15 Merge pull request #3079 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-04-03 21:41:03 +02:00
Sylvia van OsandHosted Weblate 0fa34e3eeb Translated using Weblate (Vietnamese)
Currently translated at 88.2% (278 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/vi/
2026-04-03 21:40:33 +02:00
Thu Trang PhamandHosted Weblate eeef8bd468 Translated using Weblate (Vietnamese)
Currently translated at 88.2% (278 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/vi/
2026-04-03 18:09:58 +02:00
Sylvia van OsandGitHub 6b5eeea3b7 Merge pull request #3077 from CatimaLoyalty/dependabot/gradle/androidx.compose-compose-bom-2026.03.01
Bump androidx.compose:compose-bom from 2026.03.00 to 2026.03.01
2026-04-02 08:31:43 +02:00
dependabot[bot]andGitHub 6e9fd540c5 Bump androidx.compose:compose-bom from 2026.03.00 to 2026.03.01
Bumps androidx.compose:compose-bom from 2026.03.00 to 2026.03.01.

---
updated-dependencies:
- dependency-name: androidx.compose:compose-bom
  dependency-version: 2026.03.01
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-02 05:34:18 +00:00
Sylvia van OsandGitHub c4da8ce9df Merge pull request #3075 from CatimaLoyalty/create-pull-request/patch-1774762990
Update contributors
2026-03-29 10:21:42 +02:00
TheLastProjectandgithub-actions[bot] 5cc50e6e06 Update contributors 2026-03-29 05:43:10 +00:00
Sylvia van OsandGitHub 5088ea7b80 Merge pull request #3074 from CatimaLoyalty/dependabot/gradle/gradle-wrapper-9.4.1
Bump gradle-wrapper from 9.4.0 to 9.4.1
2026-03-27 19:50:16 +01:00
dependabot[bot]andGitHub d7ae175a00 Bump gradle-wrapper from 9.4.0 to 9.4.1
Bumps [gradle-wrapper](https://github.com/gradle/gradle) from 9.4.0 to 9.4.1.
- [Release notes](https://github.com/gradle/gradle/releases)
- [Commits](https://github.com/gradle/gradle/compare/v9.4.0...v9.4.1)

---
updated-dependencies:
- dependency-name: gradle-wrapper
  dependency-version: 9.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-27 02:53:17 +00:00
Sylvia van OsandGitHub 60e47f2ffc Update to AGP 9.1.0 (#3071) 2026-03-26 21:00:32 +01:00
Sylvia van OsandGitHub 850c2d3b8a Merge pull request #3070 from CatimaLoyalty/create-pull-request/patch-1774369651
Update Fastlane changelogs
2026-03-24 18:01:11 +01:00
TheLastProjectandgithub-actions[bot] cdddd5eacf Update Fastlane changelogs 2026-03-24 16:27:30 +00:00
Sylvia van Os fd4793db99 Update CHANGELOG 2026-03-24 17:27:18 +01:00
Sylvia van OsandGitHub 9006dbee87 Merge pull request #3069 from tbertels/first_letter_capital
Set store name first letter as capital by default
2026-03-24 17:26:18 +01:00
Thomas Bertels 073923d072 Set store name first letter as capital by default
Asks the keyboard to switch to capital for the first letter of each
word.
2026-03-24 09:45:59 +01:00
Sylvia van OsandGitHub dfb006584e Merge pull request #3066 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-03-23 17:50:32 +01:00
Sylvia van OsandHosted Weblate c00383ce81 Translated using Weblate (Spanish (Argentina))
Currently translated at 87.3% (275 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es_AR/
2026-03-23 16:51:57 +01:00
Sylvia van OsandHosted Weblate ca9d61d955 Translated using Weblate (Finnish)
Currently translated at 99.3% (313 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2026-03-23 16:51:57 +01:00
LilliandHosted Weblate 37a8549d21 Translated using Weblate (Finnish)
Currently translated at 99.3% (313 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2026-03-23 12:10:03 +00:00
Agustin RodriguezandHosted Weblate 6c753b5058 Translated using Weblate (Spanish (Argentina))
Currently translated at 87.3% (275 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es_AR/
2026-03-23 12:10:02 +00:00
Sylvia van OsandGitHub 7395ed0c2b Merge pull request #3064 from CatimaLoyalty/dependabot/gradle/androidx.core-core-ktx-1.18.0
Bump androidx.core:core-ktx from 1.17.0 to 1.18.0
2026-03-19 09:38:59 +01:00
dependabot[bot]andGitHub 2b55c2b5e0 Bump androidx.core:core-ktx from 1.17.0 to 1.18.0
Bumps androidx.core:core-ktx from 1.17.0 to 1.18.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 06:13:20 +00:00
Sylvia van OsandGitHub 41d9aa488f Merge pull request #3063 from CatimaLoyalty/dependabot/gradle/androidx.compose-compose-bom-2026.03.00
Bump androidx.compose:compose-bom from 2026.02.01 to 2026.03.00
2026-03-19 07:12:19 +01:00
dependabot[bot]andGitHub 3e46d2ad84 Bump androidx.compose:compose-bom from 2026.02.01 to 2026.03.00
Bumps androidx.compose:compose-bom from 2026.02.01 to 2026.03.00.

---
updated-dependencies:
- dependency-name: androidx.compose:compose-bom
  dependency-version: 2026.03.00
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 05:51:36 +00:00
Sylvia van OsandGitHub dac990716d Merge pull request #3062 from CatimaLoyalty/dependabot/gradle/androidx.activity-activity-compose-1.13.0
Bump androidx.activity:activity-compose from 1.12.2 to 1.13.0
2026-03-19 06:50:21 +01:00
dependabot[bot]andGitHub ed56e14574 Bump androidx.activity:activity-compose from 1.12.2 to 1.13.0
Bumps androidx.activity:activity-compose from 1.12.2 to 1.13.0.

---
updated-dependencies:
- dependency-name: androidx.activity:activity-compose
  dependency-version: 1.13.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 02:52:32 +00:00
Sylvia van OsandGitHub acf72397b6 Merge pull request #3061 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-03-16 20:58:22 +01:00
EditaNEmilisandHosted Weblate 02d97e440f Translated using Weblate (Lithuanian)
Currently translated at 77.4% (244 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lt/
2026-03-16 19:10:03 +00:00
Sylvia van OsandGitHub f2e67d3727 Merge pull request #3058 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-03-15 16:52:37 +01:00
Sylvia van OsandGitHub ae11b24c7a Merge pull request #3059 from CatimaLoyalty/create-pull-request/patch-1773552502
Update contributors
2026-03-15 10:47:59 +01:00
TheLastProjectandgithub-actions[bot] 6f2b77fbdc Update contributors 2026-03-15 05:28:21 +00:00
Liner SevenandHosted Weblate 11d4df8c36 Translated using Weblate (Japanese)
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ja/
2026-03-15 02:10:11 +01:00
Sylvia van OsandGitHub f221b01811 Merge pull request #3056 from CatimaLoyalty/dependabot/gradle/gradle-wrapper-9.4.0
Bump gradle-wrapper from 9.3.1 to 9.4.0
2026-03-13 20:09:52 +01:00
Sylvia van OsandGitHub 236e9e60da Merge pull request #3057 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-03-13 19:38:35 +01:00
Thu Trang PhamandHosted Weblate 40cfb3d111 Translated using Weblate (Vietnamese)
Currently translated at 87.9% (277 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/vi/
2026-03-13 15:11:56 +01:00
Arif BudimanandHosted Weblate 05190e6384 Translated using Weblate (Indonesian)
Currently translated at 95.0% (154 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/id/
2026-03-13 15:11:56 +01:00
dependabot[bot]andGitHub 77ab8ed85b Bump gradle-wrapper from 9.3.1 to 9.4.0
Bumps gradle-wrapper from 9.3.1 to 9.4.0.

---
updated-dependencies:
- dependency-name: gradle-wrapper
  dependency-version: 9.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-12 02:53:34 +00:00
Sylvia van OsandGitHub 059cf5e631 Merge pull request #3055 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-03-11 16:23:18 +01:00
claudio.arseniandHosted Weblate b304c7ebe8 Translated using Weblate (Italian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2026-03-11 14:10:13 +00:00
claudio.arseniandHosted Weblate 9b097d3a42 Translated using Weblate (Italian)
Currently translated at 97.5% (158 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/it/
2026-03-11 14:10:10 +00:00
AhmedAwadandHosted Weblate 4dc2e1f262 Translated using Weblate (Arabic)
Currently translated at 41.9% (68 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ar/
2026-03-11 14:09:56 +00:00
claudio.arseniandHosted Weblate 6a10cdd8cd Translated using Weblate (Italian)
Currently translated at 100.0% (1 of 1 strings)

Translation: Catima/Android (Debug)
Translate-URL: https://hosted.weblate.org/projects/catima/android-debug/it/
2026-03-11 14:09:48 +00:00
Sylvia van OsandGitHub 7febdf13b7 Merge pull request #3054 from CatimaLoyalty/dependabot/gradle/androidx.compose-compose-bom-2026.02.01
Bump androidx.compose:compose-bom from 2026.02.00 to 2026.02.01
2026-03-09 07:04:54 +01:00
dependabot[bot]andGitHub 47b0b678e4 Bump androidx.compose:compose-bom from 2026.02.00 to 2026.02.01
Bumps androidx.compose:compose-bom from 2026.02.00 to 2026.02.01.

---
updated-dependencies:
- dependency-name: androidx.compose:compose-bom
  dependency-version: 2026.02.01
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 02:52:31 +00:00
Sylvia van OsandGitHub 4e21c606ef Merge pull request #3053 from CatimaLoyalty/create-pull-request/patch-1772988807
Update feature graphic
2026-03-08 17:53:53 +01:00
TheLastProjectandgithub-actions[bot] aef143256d Update feature graphic 2026-03-08 16:53:26 +00:00
Sylvia van OsandGitHub 7c76bd91b4 Merge pull request #3052 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-03-08 17:51:50 +01:00
Sylvia van OsandHosted Weblate 2ddce7b69b Translated using Weblate (Serbian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sr/
2026-03-08 17:51:24 +01:00
Michał KorczakandHosted Weblate 73df916b86 Translated using Weblate (Polish)
Currently translated at 99.3% (161 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2026-03-08 17:10:10 +01:00
Zoran JeremićandHosted Weblate 85285a2005 Translated using Weblate (Serbian)
Currently translated at 3.0% (5 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sr/
2026-03-08 17:10:08 +01:00
Zoran JeremićandHosted Weblate 5a3b90ec12 Translated using Weblate (Serbian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sr/
2026-03-08 17:10:04 +01:00
LepusOLandHosted Weblate 13bc0b7d46 Translated using Weblate (German)
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-03-08 17:10:01 +01:00
Sylvia van OsandGitHub 814e11a153 Merge pull request #3051 from CatimaLoyalty/create-pull-request/patch-1772946485
Update contributors
2026-03-08 10:44:06 +01:00
TheLastProjectandgithub-actions[bot] 262988a0f8 Update contributors 2026-03-08 05:08:05 +00:00
Sylvia van Os 4376bf069c Release Catima 2.41.7 2026-03-06 10:51:42 +01:00
Sylvia van OsandGitHub 995d75c95a Merge pull request #3048 from CatimaLoyalty/dependabot/github_actions/actions/upload-artifact-7.0.0
Bump actions/upload-artifact from 6.0.0 to 7.0.0
2026-03-05 09:16:53 +01:00
dependabot[bot]andGitHub f9773de1d8 Bump actions/upload-artifact from 6.0.0 to 7.0.0
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6.0.0 to 7.0.0.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v6.0.0...v7.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-05 02:52:50 +00:00
Sylvia van OsandGitHub c46cc41bc4 Merge pull request #3046 from CatimaLoyalty/translation_updates
Translation updates
2026-03-04 18:48:40 +01:00
FjuroandSylvia van Os bcef06a1f1 Translated using Weblate (Czech)
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2026-03-04 15:31:18 +01:00
B o d oandSylvia van Os 45941784a8 Translated using Weblate (German)
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-03-04 15:31:03 +01:00
Sylvain PichonandSylvia van Os d646853c2e Translated using Weblate (French)
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2026-03-04 15:30:54 +01:00
大王叫我来巡山andSylvia van Os eedc3ccc69 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2026-03-04 15:30:42 +01:00
c4tb3rtandSylvia van Os 036a9a12cc Translated using Weblate (Dutch)
Currently translated at 66.0% (107 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2026-03-04 15:30:04 +01:00
남현정andSylvia van Os 59d8746cb3 Translated using Weblate (Korean)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ko/
2026-03-04 15:29:29 +01:00
Sylvia van OsandGitHub cf8e266c4c Merge pull request #3041 from CatimaLoyalty/create-pull-request/patch-1772342234
Update contributors
2026-03-01 09:09:33 +01:00
TheLastProjectandgithub-actions[bot] 363c53ede2 Update contributors 2026-03-01 05:17:14 +00:00
Sylvia van OsandGitHub f9175ffd03 Merge pull request #3040 from CatimaLoyalty/create-pull-request/patch-1772283383
Update Fastlane changelogs
2026-02-28 13:57:19 +01:00
TheLastProjectandgithub-actions[bot] 041b2538d3 Update Fastlane changelogs 2026-02-28 12:56:22 +00:00
Sylvia van Os 58daf0993b Update CHANGELOG 2026-02-28 13:56:11 +01:00
Sylvia van OsandGitHub 2be75b28d9 Merge pull request #3039 from CatimaLoyalty/fix/3038
Fix shortcut returning to previous card after rotation
2026-02-28 13:55:51 +01:00
Sylvia van Os 3e9549088a Fix shortcut returning to previous card after rotation 2026-02-28 13:29:04 +01:00
il-Luca 0428a87c71 Add option to pause NFC while viewing a card 2026-02-27 12:37:19 +01:00
Sylvia van OsandGitHub 9121df192d Merge pull request #3036 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-02-26 11:14:34 +01:00
Pjetur G. HjaltasonandHosted Weblate b63d85d341 Translated using Weblate (Icelandic)
Currently translated at 38.4% (121 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/is/
2026-02-26 07:09:51 +01:00
AlexanderandHosted Weblate 423a762cad Translated using Weblate (Icelandic)
Currently translated at 38.4% (121 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/is/
2026-02-26 07:09:46 +01:00
Sean YoungandHosted Weblate 2c68d395f7 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hant/
2026-02-24 18:10:22 +01:00
Belkin FahriandHosted Weblate b1132c901a Translated using Weblate (Bulgarian)
Currently translated at 99.3% (161 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/bg/
2026-02-24 18:10:15 +01:00
E. Ta.andHosted Weblate db1fd83c8b Translated using Weblate (Arabic)
Currently translated at 99.6% (314 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2026-02-24 18:09:49 +01:00
Arne Martinus LindstadandHosted Weblate 4592ba8d38 Translated using Weblate (Norwegian Bokmål)
Currently translated at 81.2% (256 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nb_NO/
2026-02-24 18:09:47 +01:00
E. Ta.andHosted Weblate 05951c0776 Translated using Weblate (Arabic)
Currently translated at 99.6% (314 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2026-02-23 16:12:24 +01:00
E SaandHosted Weblate 070c010156 Translated using Weblate (Arabic)
Currently translated at 99.6% (314 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2026-02-23 16:12:23 +01:00
Ngô Quang ĐạiandHosted Weblate 3e0741b6d8 Translated using Weblate (Vietnamese)
Currently translated at 83.4% (263 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/vi/
2026-02-23 16:12:22 +01:00
Michał KorczakandHosted Weblate 8ec0e3348b Translated using Weblate (Polish)
Currently translated at 99.3% (161 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2026-02-23 16:12:21 +01:00
Sylvia van OsandGitHub e81a63c695 Merge pull request #3035 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-02-22 09:22:08 +01:00
Sylvia van OsandGitHub d41976829a Merge pull request #3034 from CatimaLoyalty/create-pull-request/patch-1771737337
Update contributors
2026-02-22 09:20:08 +01:00
Rostyslav SheshenyaandHosted Weblate 09589ec899 Translated using Weblate (Russian)
Currently translated at 95.6% (155 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2026-02-22 07:10:11 +01:00
TheLastProjectandgithub-actions[bot] 9553f1ca74 Update contributors 2026-02-22 05:15:37 +00:00
Sylvia van OsandGitHub 2d91e87ca0 Merge pull request #3032 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-02-19 19:26:57 +01:00
Sylvain PichonandHosted Weblate 1cd09bace7 Translated using Weblate (French)
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2026-02-19 14:11:12 +00:00
B o d oandHosted Weblate a896464e4c Translated using Weblate (German)
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-02-19 14:11:11 +00:00
Liner SevenandHosted Weblate 052d492f59 Translated using Weblate (Japanese)
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ja/
2026-02-19 14:11:11 +00:00
Edgars AndersonsandHosted Weblate d0fc8c3f73 Translated using Weblate (Latvian)
Currently translated at 12.3% (20 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2026-02-19 14:11:10 +00:00
FjuroandHosted Weblate 02322e50ab Translated using Weblate (Czech)
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2026-02-19 14:11:09 +00:00
Josefina VellozoandHosted Weblate 029aa6d466 Translated using Weblate (Spanish (Argentina))
Currently translated at 83.8% (264 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es_AR/
2026-02-19 14:11:08 +00:00
大王叫我来巡山andHosted Weblate 9fbbb43ec1 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2026-02-19 14:11:07 +00:00
Sylvia van OsandGitHub 8429539527 Merge pull request #3031 from CatimaLoyalty/dependabot/gradle/androidx.compose-compose-bom-2026.02.00
Bump androidx.compose:compose-bom from 2026.01.01 to 2026.02.00
2026-02-19 09:43:29 +01:00
Sylvia van OsandGitHub 935f878688 Merge pull request #3030 from CatimaLoyalty/dependabot/gradle/net.lingala.zip4j-zip4j-2.11.6
Bump net.lingala.zip4j:zip4j from 2.11.5 to 2.11.6
2026-02-19 09:40:48 +01:00
dependabot[bot]andGitHub 5596d1f8a6 Bump androidx.compose:compose-bom from 2026.01.01 to 2026.02.00
Bumps androidx.compose:compose-bom from 2026.01.01 to 2026.02.00.

---
updated-dependencies:
- dependency-name: androidx.compose:compose-bom
  dependency-version: 2026.02.00
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-19 02:53:44 +00:00
dependabot[bot]andGitHub 00028248c0 Bump net.lingala.zip4j:zip4j from 2.11.5 to 2.11.6
Bumps [net.lingala.zip4j:zip4j](https://github.com/srikanth-lingala/zip4j) from 2.11.5 to 2.11.6.
- [Release notes](https://github.com/srikanth-lingala/zip4j/releases)
- [Commits](https://github.com/srikanth-lingala/zip4j/compare/v2.11.5...v2.11.6)

---
updated-dependencies:
- dependency-name: net.lingala.zip4j:zip4j
  dependency-version: 2.11.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-19 02:52:51 +00:00
Sylvia van OsandGitHub 75feb7b409 Merge pull request #3029 from CatimaLoyalty/create-pull-request/patch-1771423966
Update feature graphic
2026-02-18 15:14:00 +01:00
TheLastProjectandgithub-actions[bot] 5fefe96963 Update feature graphic 2026-02-18 14:12:45 +00:00
Sylvia van OsandGitHub 7572cdb25d Merge pull request #3027 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-02-18 15:11:04 +01:00
Michał KorczakandHosted Weblate 77834809f6 Translated using Weblate (Polish)
Currently translated at 99.3% (161 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2026-02-18 14:11:14 +01:00
Igor WandHosted Weblate b72edac261 Translated using Weblate (Polish)
Currently translated at 99.3% (161 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2026-02-18 14:11:12 +01:00
m45kedandHosted Weblate 4c4623d92d Translated using Weblate (Polish)
Currently translated at 99.3% (161 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2026-02-18 14:11:11 +01:00
GnebandHosted Weblate 162b51f1fa Translated using Weblate (Slovak)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sk/
2026-02-18 14:11:09 +01:00
Sylvia van OsandGitHub f667c4f3ad Merge pull request #3025 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-02-15 12:30:59 +01:00
Sylvia van OsandGitHub b291f6b26c Merge pull request #3026 from CatimaLoyalty/create-pull-request/patch-1771155005
Update Fastlane changelogs
2026-02-15 12:30:32 +01:00
TheLastProjectandgithub-actions[bot] a679acfb6a Update Fastlane changelogs 2026-02-15 11:30:05 +00:00
Sylvia van Os c546294cd9 Update CHANGELOG 2026-02-15 12:29:53 +01:00
Sylvia van OsandGitHub 474c6e2112 Merge pull request #3024 from CatimaLoyalty/fix/3023
Fix crash in volume button card switching with no other cards
2026-02-15 12:25:01 +01:00
ssantosandHosted Weblate dbce80b4fa Translated using Weblate (Portuguese (Portugal))
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_PT/
2026-02-15 11:09:55 +00:00
Sylvia van Os 4399cdadb0 Fix crash in volume button card switching with no other cards 2026-02-15 11:49:58 +01:00
Sylvia van OsandGitHub 14e7f5bbb8 Merge pull request #3020 from CatimaLoyalty/dependabot/gradle/org.jetbrains.kotlin.plugin.compose-2.3.10
Bump org.jetbrains.kotlin.plugin.compose from 2.3.0 to 2.3.10
2026-02-12 08:47:01 +01:00
dependabot[bot]andGitHub 3440017db8 Bump org.jetbrains.kotlin.plugin.compose from 2.3.0 to 2.3.10
Bumps [org.jetbrains.kotlin.plugin.compose](https://github.com/JetBrains/kotlin) from 2.3.0 to 2.3.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.3.0...v2.3.10)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-12 07:28:44 +00:00
Sylvia van OsandGitHub 1223b2b4eb Merge pull request #3019 from CatimaLoyalty/dependabot/gradle/org.jetbrains.kotlin.android-2.3.10
Bump org.jetbrains.kotlin.android from 2.3.0 to 2.3.10
2026-02-12 08:27:54 +01:00
dependabot[bot]andGitHub 731fbc3083 Bump org.jetbrains.kotlin.android from 2.3.0 to 2.3.10
Bumps [org.jetbrains.kotlin.android](https://github.com/JetBrains/kotlin) from 2.3.0 to 2.3.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.3.0...v2.3.10)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-12 02:54:16 +00:00
Sylvia van OsandGitHub bb9487b35e Merge pull request #3018 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-02-11 14:31:30 +01:00
f4n0andHosted Weblate 43ea2a0f84 Translated using Weblate (Italian)
Currently translated at 97.5% (158 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/it/
2026-02-09 22:10:19 +01:00
Sylvia van OsandGitHub f5606aea09 Merge pull request #3016 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-02-08 23:28:06 +01:00
Sylvia van OsandGitHub 2d10d080a4 Delete gradle wrapper workflow
Dependabot now does this
2026-02-08 23:17:24 +01:00
Sylvia van OsandGitHub e36c007176 Merge pull request #3013 from CatimaLoyalty/dependabot/gradle/gradle-wrapper-9.3.1
Bump gradle-wrapper from 9.3.0 to 9.3.1
2026-02-08 23:16:24 +01:00
Wiesław FijołekandHosted Weblate 60c2784643 Translated using Weblate (Polish)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2026-02-08 10:11:36 +00:00
Wiesław FijołekandHosted Weblate 49d91caafd Translated using Weblate (Polish)
Currently translated at 98.1% (159 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2026-02-08 10:11:35 +00:00
Plamen NazarovandHosted Weblate 6c4e9fc29b Translated using Weblate (Bulgarian)
Currently translated at 99.3% (161 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/bg/
2026-02-08 10:11:33 +00:00
Plamen NazarovandHosted Weblate e49fa835a8 Translated using Weblate (Bulgarian)
Currently translated at 90.7% (147 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/bg/
2026-02-08 10:11:30 +00:00
Sylvia van OsandGitHub ab1e7c623f Merge pull request #3017 from CatimaLoyalty/create-pull-request/patch-1770528158
Update contributors
2026-02-08 10:50:53 +01:00
TheLastProjectandgithub-actions[bot] 725ce14ed6 Update contributors 2026-02-08 05:22:38 +00:00
Sylvia van OsandGitHub a154445723 Merge pull request #3014 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-02-06 10:05:16 +01:00
Plamen NazarovandHosted Weblate b09e49ddae Translated using Weblate (Bulgarian)
Currently translated at 50.0% (81 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/bg/
2026-02-06 06:03:21 +01:00
امیرضاandHosted Weblate f94f39a31c Translated using Weblate (Persian)
Currently translated at 83.1% (262 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fa/
2026-02-06 06:03:19 +01:00
Sean YoungandHosted Weblate a4172acdf2 Translated using Weblate (Japanese)
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ja/
2026-02-06 06:03:18 +01:00
Sean YoungandHosted Weblate 8823762b16 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hant/
2026-02-06 06:03:18 +01:00
امیرضاandHosted Weblate 5b9f44e73d Translated using Weblate (Persian)
Currently translated at 40.7% (66 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fa/
2026-02-06 06:03:17 +01:00
dependabot[bot]andGitHub af1b5f135b Bump gradle-wrapper from 9.3.0 to 9.3.1
Bumps gradle-wrapper from 9.3.0 to 9.3.1.

---
updated-dependencies:
- dependency-name: gradle-wrapper
  dependency-version: 9.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-06 02:53:56 +00:00
Sylvia van OsandGitHub 14399f46cf Merge pull request #3012 from CatimaLoyalty/dependabot/gradle/androidx.compose-compose-bom-2026.01.01
Bump androidx.compose:compose-bom from 2026.01.00 to 2026.01.01
2026-02-05 08:31:04 +01:00
dependabot[bot]andGitHub eccd154046 Bump androidx.compose:compose-bom from 2026.01.00 to 2026.01.01
Bumps androidx.compose:compose-bom from 2026.01.00 to 2026.01.01.

---
updated-dependencies:
- dependency-name: androidx.compose:compose-bom
  dependency-version: 2026.01.01
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-05 02:53:20 +00:00
Sylvia van OsandGitHub e7e789aadb Merge pull request #3010 from CatimaLoyalty/create-pull-request/patch-1770232751
Update feature graphic
2026-02-04 22:07:25 +01:00
TheLastProjectandgithub-actions[bot] 1f171427fc Update feature graphic 2026-02-04 19:19:11 +00:00
Sylvia van OsandGitHub 1cf054f50c Merge pull request #3009 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-02-04 20:17:18 +01:00
Hosted Weblate e824c3830e Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/
2026-02-04 17:05:20 +00:00
LepusOLandHosted Weblate b93b0eaef7 Translated using Weblate (German)
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-02-04 17:05:19 +00:00
LepusOLandHosted Weblate be4c4e7455 Translated using Weblate (Hungarian)
Currently translated at 28.3% (46 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/hu/
2026-02-04 17:05:18 +00:00
தமிழ்நேரம்andHosted Weblate 5dbb53f053 Translated using Weblate (Tamil)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2026-02-04 17:05:18 +00:00
தமிழ்நேரம்andHosted Weblate 550946be5e Translated using Weblate (Tamil)
Currently translated at 92.5% (150 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ta/
2026-02-04 17:05:17 +00:00
Plamen NazarovandHosted Weblate 8819e2dddc Translated using Weblate (Bulgarian)
Currently translated at 41.9% (68 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/bg/
2026-02-04 17:05:13 +00:00
Sylvia van OsandGitHub ae14412385 Merge pull request #3008 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-02-02 10:05:42 +01:00
TC0452andHosted Weblate 276a731f53 Translated using Weblate (Polish)
Currently translated at 99.6% (314 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2026-02-01 10:02:07 +01:00
Jiri GrönroosandHosted Weblate 6873c8bc72 Translated using Weblate (Finnish)
Currently translated at 98.7% (311 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2026-02-01 10:02:06 +01:00
Mika LatvalaandHosted Weblate 13a3a85916 Translated using Weblate (Finnish)
Currently translated at 98.7% (311 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2026-02-01 10:02:05 +01:00
Sylvia van OsandGitHub 79c25e5dd4 Merge pull request #3007 from CatimaLoyalty/create-pull-request/patch-1769923341
Update contributors
2026-02-01 06:58:07 +01:00
TheLastProjectandgithub-actions[bot] 05e1710953 Update contributors 2026-02-01 05:22:21 +00:00
Sylvia van OsandGitHub 756698bda6 Merge pull request #3006 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-31 18:46:10 +01:00
I.H.andHosted Weblate 8965acb17c Translated using Weblate (Dutch)
Currently translated at 61.7% (100 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nl/
2026-01-30 18:02:06 +00:00
大王叫我来巡山andHosted Weblate 87e6fc3d03 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2026-01-30 18:02:05 +00:00
Jiri GrönroosandHosted Weblate 438959e42b Translated using Weblate (Finnish)
Currently translated at 97.4% (307 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2026-01-30 18:02:04 +00:00
Sylvia van OsandGitHub c5713c6079 Merge pull request #3003 from CatimaLoyalty/dependabot/github_actions/peter-evans/create-pull-request-8.1.0
Bump peter-evans/create-pull-request from 8.0.0 to 8.1.0
2026-01-29 19:37:21 +01:00
Sylvia van OsandGitHub 2251df5a6f Merge pull request #3004 from CatimaLoyalty/dependabot/github_actions/actions/setup-python-6.2.0
Bump actions/setup-python from 6.1.0 to 6.2.0
2026-01-29 08:52:17 +01:00
dependabot[bot]andGitHub 4474aee7fa Bump actions/setup-python from 6.1.0 to 6.2.0
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 6.1.0 to 6.2.0.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v6.1.0...v6.2.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-29 02:53:49 +00:00
dependabot[bot]andGitHub 4dcc637065 Bump peter-evans/create-pull-request from 8.0.0 to 8.1.0
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 8.0.0 to 8.1.0.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v8.0.0...v8.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-29 02:53:08 +00:00
Sylvia van OsandGitHub d793eec2e0 Merge pull request #3002 from CatimaLoyalty/dependabot/gradle/org.robolectric-robolectric-4.16.1
Bump org.robolectric:robolectric from 4.16 to 4.16.1
2026-01-28 08:49:43 +01:00
dependabot[bot]andGitHub 3ece1c3636 Bump org.robolectric:robolectric from 4.16 to 4.16.1
Bumps [org.robolectric:robolectric](https://github.com/robolectric/robolectric) from 4.16 to 4.16.1.
- [Release notes](https://github.com/robolectric/robolectric/releases)
- [Commits](https://github.com/robolectric/robolectric/compare/robolectric-4.16...robolectric-4.16.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-28 02:53:33 +00:00
Sylvia van OsandGitHub c135cad669 Merge pull request #3000 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-27 17:44:35 +01:00
Edgars AndersonsandHosted Weblate 3d9e636cc3 Translated using Weblate (Latvian)
Currently translated at 12.3% (20 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2026-01-27 15:40:59 +00:00
Sylvia van OsandGitHub b64c4966e0 Merge pull request #2998 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-27 08:29:49 +01:00
Sylvain PichonandHosted Weblate 7695fe8659 Translated using Weblate (French)
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2026-01-27 04:00:55 +01:00
Sylvia van OsandGitHub ad7e021928 Merge pull request #2997 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-25 12:25:22 +01:00
FjuroandHosted Weblate 73233ad6de Translated using Weblate (Czech)
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2026-01-25 12:08:48 +01:00
Sylvia van OsandGitHub 3e96c793b1 Merge pull request #2996 from CatimaLoyalty/create-pull-request/patch-1769335330
Update contributors
2026-01-25 11:11:50 +01:00
TheLastProjectandgithub-actions[bot] 6d10a87efc Update contributors 2026-01-25 10:02:10 +00:00
Sylvia van OsandGitHub 0228b7d0a4 Fix typo 2026-01-25 10:59:02 +01:00
Sylvia van OsandGitHub 798377416d Merge pull request #2995 from CatimaLoyalty/TheLastProject-patch-1
Remove gradle-update-robot from contributors
2026-01-25 10:53:00 +01:00
Sylvia van OsandGitHub 9b64c65816 Merge pull request #2993 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-25 10:31:08 +01:00
Sylvia van OsandGitHub 2030fe4461 Remove gradle-update-robot from contributors 2026-01-25 10:28:54 +01:00
B o d oandHosted Weblate c8f9fb8bac Translated using Weblate (German)
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-01-25 08:55:26 +01:00
Liner SevenandHosted Weblate cce698578e Translated using Weblate (Japanese)
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ja/
2026-01-25 08:55:20 +01:00
Максим ГорпинічandHosted Weblate 2bf8146489 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2026-01-25 08:55:10 +01:00
大王叫我来巡山andHosted Weblate 7148477209 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (162 of 162 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2026-01-25 08:55:00 +01:00
大王叫我来巡山andHosted Weblate fe0e68ab37 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (161 of 161 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2026-01-25 00:43:30 +00:00
Максим ГорпинічandHosted Weblate 24420db4c4 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (161 of 161 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2026-01-25 00:43:30 +00:00
Sylvain PichonandHosted Weblate 2a0e067472 Translated using Weblate (French)
Currently translated at 100.0% (161 of 161 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2026-01-25 00:43:29 +00:00
ResandHosted Weblate 8126ffc980 Translated using Weblate (Indonesian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/id/
2026-01-25 00:43:28 +00:00
Sylvia van OsandGitHub 9d530e095a Merge pull request #2992 from CatimaLoyalty/create-pull-request/patch-1769269531
Update Fastlane changelogs
2026-01-24 16:57:52 +01:00
TheLastProjectandgithub-actions[bot] 8dd8ed45b4 Update Fastlane changelogs 2026-01-24 15:45:31 +00:00
Sylvia van OsandGitHub c825d91779 Merge pull request #2989 from CatimaLoyalty/revert-2984-sadness/revertAndroid5RemovalRevert
Revert "Reapply "Temporarily re-add Android 5 support (#2925)""
2026-01-24 16:45:21 +01:00
Sylvia van Os 38a2c3f26b Revert "Reapply "Temporarily re-add Android 5 support (#2925)"" 2026-01-24 16:24:13 +01:00
Sylvia van OsandGitHub 3b8aba29d5 Merge pull request #2990 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-24 08:49:39 +01:00
B o d oandHosted Weblate 3aa77e5022 Translated using Weblate (German)
Currently translated at 100.0% (161 of 161 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-01-24 03:23:40 +01:00
FjuroandHosted Weblate 543bacf448 Translated using Weblate (Czech)
Currently translated at 100.0% (161 of 161 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2026-01-24 03:23:40 +01:00
Sylvia van Os 4518dadcf6 Release Catima 2.41.6 2026-01-23 19:44:27 +01:00
Sylvia van OsandGitHub f07b7412f5 Merge pull request #2987 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-23 19:42:53 +01:00
Sylvia van OsandHosted Weblate 474dc0e5d6 Translated using Weblate (Czech)
Currently translated at 99.3% (160 of 161 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2026-01-23 19:29:05 +01:00
Sylvia van OsandHosted Weblate 202cb91ac3 Translated using Weblate (Bosnian)
Currently translated at 99.6% (314 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bs/
2026-01-23 19:29:02 +01:00
19atlasandHosted Weblate 4e2672d9ae Translated using Weblate (Turkish)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2026-01-23 19:25:01 +01:00
pacavarnandHosted Weblate b281bdf392 Translated using Weblate (Bosnian)
Currently translated at 53.4% (86 of 161 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/bs/
2026-01-23 19:25:00 +01:00
pacavarnandHosted Weblate 168245c3c1 Translated using Weblate (Bosnian)
Currently translated at 99.6% (314 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bs/
2026-01-23 19:25:00 +01:00
Sylvia van Os 6d1856ceba Remove Android 5 support removal note from translations 2026-01-23 18:49:13 +01:00
Sylvia van OsandGitHub dc58e89a0d Merge pull request #2986 from CatimaLoyalty/create-pull-request/patch-1769190474
Update Fastlane changelogs
2026-01-23 18:48:07 +01:00
TheLastProjectandgithub-actions[bot] 16f4866c38 Update Fastlane changelogs 2026-01-23 17:47:53 +00:00
Sylvia van OsandGitHub 93492828dc Merge pull request #2984 from CatimaLoyalty/sadness/revertAndroid5RemovalRevert
Reapply "Temporarily re-add Android 5 support (#2925)"
2026-01-23 18:47:42 +01:00
Sylvia van OsandGitHub e6fb6fd95b Merge pull request #2985 from CatimaLoyalty/create-pull-request/patch-1769189547
Update Fastlane changelogs
2026-01-23 18:35:14 +01:00
TheLastProjectandgithub-actions[bot] 57b2f308da Update Fastlane changelogs 2026-01-23 17:32:27 +00:00
Sylvia van Os 93d259b1d8 Reapply "Temporarily re-add Android 5 support (#2925)"
This reverts commit 5ac2405834.
2026-01-23 18:32:22 +01:00
Sylvia van Os daf447cbdd Update CHANGELOG 2026-01-23 18:32:12 +01:00
Sylvia van OsandGitHub 9e438e1498 Merge pull request #2983 from davkenn/fix/properly-loading-barcode-adapter
fix: BarcodeSelectorAdapter properly fills adapter with barcode images instead of passing in null
2026-01-23 18:26:43 +01:00
Sylvia van Os ce213356b9 Add FIXME 2026-01-23 18:24:17 +01:00
Sylvia van OsandGitHub f5fa11dcc3 Merge pull request #2982 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-23 18:11:48 +01:00
B o d oandHosted Weblate 841902bcaf Translated using Weblate (German)
Currently translated at 100.0% (161 of 161 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-01-23 11:45:32 +01:00
大王叫我来巡山andHosted Weblate 3de83b6745 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (161 of 161 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2026-01-23 11:45:29 +01:00
David Kennedy 18ae00f5a4 fix: passes ISO_8859_1 to BarcodeImageWriterTask constructor instead of null 2026-01-22 18:40:56 -07:00
pacavarnandHosted Weblate 8639bf98f4 Translated using Weblate (Bosnian)
Currently translated at 57.4% (181 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bs/
2026-01-23 00:48:39 +00:00
pacavarnandHosted Weblate 543c5f9b23 Translated using Weblate (Bosnian)
Currently translated at 52.1% (84 of 161 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/bs/
2026-01-23 00:48:38 +00:00
Sylvia van OsandGitHub 102ba18a05 Merge pull request #2980 from CatimaLoyalty/dependabot/gradle/androidx.compose-compose-bom-2026.01.00
Bump androidx.compose:compose-bom from 2025.11.01 to 2026.01.00
2026-01-22 21:44:31 +01:00
dependabot[bot]andGitHub 54e0ed3f82 Bump androidx.compose:compose-bom from 2025.11.01 to 2026.01.00
Bumps androidx.compose:compose-bom from 2025.11.01 to 2026.01.00.

---
updated-dependencies:
- dependency-name: androidx.compose:compose-bom
  dependency-version: 2026.01.00
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-22 19:38:23 +00:00
Sylvia van OsandGitHub d86b0043ff Merge pull request #2981 from CatimaLoyalty/create-pull-request/patch-1769110652
Update Fastlane changelogs
2026-01-22 20:37:52 +01:00
TheLastProjectandgithub-actions[bot] 1a214e6526 Update Fastlane changelogs 2026-01-22 19:37:32 +00:00
Sylvia van OsandGitHub af7cf16786 Merge pull request #2930 from CatimaLoyalty/revert-2925-temp/revertAndroid5Removal
Revert "Temporarily re-add Android 5 support"
2026-01-22 20:37:20 +01:00
Sylvia van Os 5ac2405834 Revert "Temporarily re-add Android 5 support (#2925)"
This reverts commit 37e6782032.
2026-01-22 20:13:37 +01:00
Sylvia van OsandGitHub 08325b8528 Merge pull request #2979 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-22 20:11:16 +01:00
Mauro F. T.andHosted Weblate 6573c5ea80 Translated using Weblate (Portuguese)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt/
2026-01-22 04:33:37 +01:00
Edgars AndersonsandHosted Weblate 77ca8e7069 Translated using Weblate (Latvian)
Currently translated at 12.4% (20 of 161 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/lv/
2026-01-22 03:07:39 +01:00
Sylvia van OsandGitHub 3dbd99f052 Merge pull request #2976 from CatimaLoyalty/gradlew-update-9.3.0
Update Gradle Wrapper from 9.2.1 to 9.3.0
2026-01-21 18:45:58 +01:00
Sylvia van OsandGitHub 4d34794957 Merge pull request #2978 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-21 18:41:57 +01:00
Максим ГорпинічandHosted Weblate 8c99189d79 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (161 of 161 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2026-01-21 15:04:02 +01:00
pacavarnandHosted Weblate 4dae3cb826 Translated using Weblate (Bosnian)
Currently translated at 42.8% (69 of 161 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/bs/
2026-01-21 15:04:01 +01:00
B o d oandHosted Weblate 52d4f63418 Translated using Weblate (German)
Currently translated at 100.0% (161 of 161 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-01-21 15:04:00 +01:00
FjuroandHosted Weblate 76e3ba2e4a Translated using Weblate (Czech)
Currently translated at 100.0% (161 of 161 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2026-01-21 15:03:59 +01:00
pacavarnandHosted Weblate 1bea439fa0 Translated using Weblate (Bosnian)
Currently translated at 42.2% (133 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bs/
2026-01-21 15:03:58 +01:00
Stefan RacicandHosted Weblate 36459d62b6 Translated using Weblate (Bosnian)
Currently translated at 42.2% (133 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bs/
2026-01-21 15:03:57 +01:00
slavkandHosted Weblate 3699a24809 Translated using Weblate (Croatian)
Currently translated at 99.3% (313 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hr/
2026-01-21 15:03:56 +01:00
大王叫我来巡山andHosted Weblate fc8691470c Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (161 of 161 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2026-01-21 15:03:56 +01:00
Liner SevenandHosted Weblate a03be85474 Translated using Weblate (Japanese)
Currently translated at 100.0% (161 of 161 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ja/
2026-01-21 15:03:55 +01:00
Sylvia van OsandGitHub 701964bc46 Merge pull request #2977 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-20 16:59:28 +01:00
தமிழ்நேரம்andHosted Weblate 18604ba8bd Translated using Weblate (Tamil)
Currently translated at 92.3% (291 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ta/
2026-01-20 13:02:06 +00:00
Nicolas AignerandHosted Weblate b6b9b7c90e Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt_BR/
2026-01-20 13:02:05 +00:00
GideonandHosted Weblate 5aa7217c1b Translated using Weblate (Dutch)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2026-01-20 13:02:04 +00:00
Aleś ŁahviniecandHosted Weblate 7fb5c96322 Translated using Weblate (Belarusian)
Currently translated at 90.4% (285 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/be/
2026-01-20 13:02:04 +00:00
gradle-update-robot 3d9729f992 Update Gradle Wrapper from 9.2.1 to 9.3.0
Signed-off-by: gradle-update-robot <gradle-update-robot@regolo.cc>
2026-01-20 01:04:18 +00:00
Sylvia van OsandGitHub 8c61e32798 Merge pull request #2975 from CatimaLoyalty/TheLastProject-patch-1
Fix gradle wrapper update
2026-01-19 21:47:48 +01:00
Sylvia van OsandGitHub 0bb38e4fce Fix gradle wrapper update
https://github.com/gradle-update/update-gradle-wrapper-action/issues/988
2026-01-19 21:23:11 +01:00
Sylvia van OsandGitHub 9eb9e9df25 Merge pull request #2971 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-19 20:54:13 +01:00
Sylvia van OsandGitHub e8d7857044 Merge pull request #2974 from CatimaLoyalty/create-pull-request/patch-1768852113
Update Fastlane changelogs
2026-01-19 20:49:41 +01:00
TheLastProjectandgithub-actions[bot] 2c782fba62 Update Fastlane changelogs 2026-01-19 19:48:33 +00:00
Sylvia van Os 31cd7f009c Fix typo 2026-01-19 20:48:22 +01:00
Sylvia van Os 068c0307af Update CHANGELOG 2026-01-19 20:37:06 +01:00
Sylvia van OsandGitHub 54c885d1cf Merge pull request #2970 from CatimaLoyalty/feature/2969
Autolink in card ID dialog
2026-01-19 20:35:52 +01:00
scollovatiandHosted Weblate bbb434e2b5 Translated using Weblate (Italian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2026-01-19 11:38:58 +01:00
tygyhandHosted Weblate bc879f847d Translated using Weblate (Swedish)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2026-01-19 00:01:58 +00:00
Sylvia van Os 1a474e9d22 Move info text dialog away from deprecated Linkify.ALL 2026-01-18 22:38:44 +01:00
Sylvia van Os cbb2453f6b Detect links in card ID in card ID popup 2026-01-18 22:37:56 +01:00
Sylvia van OsandGitHub e372d23b6e Merge pull request #2968 from CatimaLoyalty/create-pull-request/patch-1768711210
Update contributors
2026-01-18 09:33:30 +01:00
TheLastProjectandgithub-actions[bot] a3507d5975 Update contributors 2026-01-18 04:40:10 +00:00
Sylvia van Os c4f28c12f8 Revert "Update fastlane"
This reverts commit 69939d5957.

The new Fastlane version is broken on my system.
2026-01-17 19:50:59 +01:00
Sylvia van Os 69939d5957 Update fastlane 2026-01-17 18:54:57 +01:00
Sylvia van OsandGitHub c2b0fda80a Merge pull request #2966 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-17 12:48:14 +01:00
josé m.andHosted Weblate b62a0b0f4f Translated using Weblate (Galician)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/gl/
2026-01-17 08:01:55 +01:00
aliandHosted Weblate 5f9376ca63 Translated using Weblate (Arabic)
Currently translated at 99.6% (314 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2026-01-17 08:01:55 +01:00
Sylvia van Os f1087573dc Release Catima 2.41.5 2026-01-15 22:55:38 +01:00
Sylvia van OsandGitHub 62f188eb72 Merge pull request #2964 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-15 22:54:35 +01:00
Edgars AndersonsandHosted Weblate cdfa3e6779 Translated using Weblate (Latvian)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2026-01-15 21:38:02 +00:00
Максим ГорпинічandHosted Weblate f64406f70f Translated using Weblate (Ukrainian)
Currently translated at 100.0% (160 of 160 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2026-01-15 21:38:01 +00:00
Sylvia van OsandGitHub cabae400e6 Merge pull request #2963 from CatimaLoyalty/fix/pkpassEncodingCrashSafety
Fix crash risk on pkpass encoding
2026-01-15 20:43:32 +01:00
Sylvia van Os d5b3796ae9 Fix crash risk on pkpass encoding 2026-01-15 18:14:55 +01:00
Sylvia van OsandGitHub 442c7c28d4 Merge pull request #2959 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-14 22:07:58 +01:00
Sylvia van Os e7fd16dd45 Fix broken translations
This string no longer exists in the base translation
2026-01-14 21:52:21 +01:00
Sylvain PichonandHosted Weblate 868d065d5d Translated using Weblate (French)
Currently translated at 100.0% (160 of 160 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2026-01-14 20:55:39 +01:00
Liner SevenandHosted Weblate 185b0ff2df Translated using Weblate (Japanese)
Currently translated at 100.0% (160 of 160 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ja/
2026-01-14 17:10:08 +01:00
B o d oandHosted Weblate e60b1cc26a Translated using Weblate (German)
Currently translated at 100.0% (160 of 160 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-01-14 17:10:04 +01:00
Liner SevenandHosted Weblate 5cecad9088 Translated using Weblate (Japanese)
Currently translated at 100.0% (315 of 315 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ja/
2026-01-14 17:10:01 +01:00
大王叫我来巡山andHosted Weblate f26799c65c Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (160 of 160 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2026-01-14 17:10:00 +01:00
FjuroandHosted Weblate 6046b48285 Translated using Weblate (Czech)
Currently translated at 100.0% (160 of 160 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2026-01-14 17:09:57 +01:00
Sylvain PichonandHosted Weblate 4bf925f1b1 Translated using Weblate (French)
Currently translated at 100.0% (160 of 160 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2026-01-14 09:56:11 +01:00
Liner SevenandHosted Weblate fa55a8b354 Translated using Weblate (Japanese)
Currently translated at 99.3% (314 of 316 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ja/
2026-01-14 09:56:10 +01:00
Sylvain PichonandHosted Weblate 38a8f76b88 Translated using Weblate (French)
Currently translated at 100.0% (316 of 316 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2026-01-14 09:56:09 +01:00
ezn24andHosted Weblate dc574c0569 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (316 of 316 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2026-01-14 09:56:09 +01:00
solokotandHosted Weblate c52791e029 Translated using Weblate (Russian)
Currently translated at 100.0% (316 of 316 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2026-01-14 09:56:08 +01:00
Максим ГорпинічandHosted Weblate 37c31d8a0f Translated using Weblate (Ukrainian)
Currently translated at 100.0% (160 of 160 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2026-01-14 09:56:07 +01:00
Максим ГорпинічandHosted Weblate 4e99654d1d Translated using Weblate (Ukrainian)
Currently translated at 100.0% (316 of 316 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2026-01-14 09:56:06 +01:00
大王叫我来巡山andHosted Weblate a9a84ffdfc Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (160 of 160 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hans/
2026-01-14 09:56:06 +01:00
Максим ГорпинічandHosted Weblate 9bb51da3c1 Translated using Weblate (Ukrainian)
Currently translated at 99.6% (315 of 316 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2026-01-14 09:56:05 +01:00
FjuroandHosted Weblate 3f73224d97 Translated using Weblate (Czech)
Currently translated at 100.0% (160 of 160 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2026-01-14 09:56:04 +01:00
Damjan GerlandHosted Weblate b79c62341e Translated using Weblate (Slovenian)
Currently translated at 100.0% (316 of 316 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sl/
2026-01-14 09:56:03 +01:00
B o d oandHosted Weblate 33a47f2ed1 Translated using Weblate (German)
Currently translated at 100.0% (160 of 160 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-01-14 09:56:02 +01:00
大王叫我来巡山andHosted Weblate 3177e91e58 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (316 of 316 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2026-01-14 09:56:02 +01:00
Ahmed Al-MaharbiandHosted Weblate 3ec4ffcab2 Translated using Weblate (Arabic)
Currently translated at 43.2% (67 of 155 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ar/
2026-01-14 09:56:01 +01:00
Ahmed Al-MaharbiandHosted Weblate 2f8449bb04 Translated using Weblate (Arabic)
Currently translated at 98.4% (311 of 316 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2026-01-14 09:56:00 +01:00
Sylvia van OsandGitHub 011f3edcbc Merge pull request #2962 from CatimaLoyalty/create-pull-request/patch-1768338748
Update Fastlane changelogs
2026-01-13 23:17:23 +01:00
TheLastProjectandgithub-actions[bot] abb6762a4f Update Fastlane changelogs 2026-01-13 21:12:27 +00:00
Sylvia van Os 382a28c983 Update CHANGELOG 2026-01-13 22:12:15 +01:00
Sylvia van OsandGitHub c7a8d343b5 Merge pull request #2961 from CatimaLoyalty/feature/2890
Expose barcode encoding in content provider
2026-01-13 22:10:30 +01:00
Sylvia van Os bc21a53d44 Expose barcode encoding in content provider 2026-01-13 21:17:50 +01:00
Sylvia van Os d3bdad56e4 Update docs 2026-01-13 20:14:57 +01:00
Sylvia van OsandGitHub c9a2a4acbb Merge pull request #2960 from CatimaLoyalty/create-pull-request/patch-1768331285
Update Fastlane changelogs
2026-01-13 20:09:59 +01:00
TheLastProjectandgithub-actions[bot] eaf30e6c2d Update Fastlane changelogs 2026-01-13 19:08:04 +00:00
Sylvia van Os 5979160a6a Update CHANGELOG 2026-01-13 20:07:51 +01:00
Sylvia van OsandGitHub 0181fde243 Merge pull request #2957 from CatimaLoyalty/fix/2946
Remove automatic barcode encoding type
2026-01-13 20:06:33 +01:00
Sylvia van Os a5599dc673 Remove automatic barcode encoding type
Migrates all automatic cards to ISO-8859-1 and uses that as default
2026-01-13 19:47:29 +01:00
Sylvia van OsandGitHub 25290ae202 Merge pull request #2958 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-12 13:18:49 +01:00
LukasLKTandHosted Weblate 4d36812cd6 Translated using Weblate (Danish)
Currently translated at 46.2% (146 of 316 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/da/
2026-01-12 13:01:54 +01:00
Sylvia van OsandGitHub a9f402cd6d Merge pull request #2956 from CatimaLoyalty/create-pull-request/patch-1768106786
Update contributors
2026-01-11 09:51:24 +01:00
TheLastProjectandgithub-actions[bot] 2798ba7648 Update contributors 2026-01-11 04:46:26 +00:00
Sylvia van OsandGitHub 349558e62e Merge pull request #2955 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-10 14:32:30 +01:00
Hosted Weblate 91ca2a220e Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/
2026-01-10 11:04:49 +01:00
m45kedandHosted Weblate 93104e4b40 Translated using Weblate (Polish)
Currently translated at 98.0% (151 of 154 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2026-01-10 11:04:49 +01:00
m45kedandHosted Weblate d8adcdd1e5 Translated using Weblate (Polish)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2026-01-10 11:04:48 +01:00
Maciej BłędkowskiandHosted Weblate c4b210a8db Translated using Weblate (Polish)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2026-01-10 11:04:48 +01:00
Sylvia van OsandGitHub d54323fde0 Merge pull request #2954 from CatimaLoyalty/create-pull-request/patch-1767975957
Update Fastlane changelogs
2026-01-09 17:28:06 +01:00
TheLastProjectandgithub-actions[bot] c02be50242 Update Fastlane changelogs 2026-01-09 16:25:57 +00:00
Sylvia van Os a883ce0f43 Update CHANGELOG 2026-01-09 17:25:46 +01:00
Matthias PaulmierandGitHub ace353d71d Fix several bugs related to shortcut handling (#2919)
* Improve ShortcuHelper.updateShortcuts to take all actions into account

* Remove now useless calls to removeShortcut

* Add doc to explain the usage of maxShortcut

* Fix typo in doc of maxShortcuts
2026-01-09 17:24:29 +01:00
Sylvia van OsandGitHub 18dbb24375 Merge pull request #2953 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-09 08:18:47 +01:00
m45kedandHosted Weblate 78daf54716 Translated using Weblate (Polish)
Currently translated at 95.4% (147 of 154 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2026-01-09 05:56:05 +01:00
Sylvia van OsandGitHub ee6541ba54 Merge pull request #2952 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-08 16:42:28 +01:00
B o d oandHosted Weblate e4e9fe05e1 Translated using Weblate (German)
Currently translated at 100.0% (155 of 155 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2026-01-08 11:36:36 +00:00
Sylvia van OsandGitHub 9d4035c94e Merge pull request #2951 from CatimaLoyalty/create-pull-request/patch-1767812819
Update Fastlane changelogs
2026-01-07 20:09:53 +01:00
TheLastProjectandgithub-actions[bot] 293d38bd09 Update Fastlane changelogs 2026-01-07 19:06:59 +00:00
Sylvia van Os 28be05600b Update CHANGELOG 2026-01-07 20:06:46 +01:00
Sylvia van OsandGitHub 03649820ce Merge pull request #2950 from CatimaLoyalty/fix/2918
Set Compose TopAppBar to pure black in OLED theme
2026-01-07 20:05:51 +01:00
Sylvia van Os 93515d2f88 Set Compose TopAppBar to pure black in OLED theme 2026-01-07 17:17:49 +01:00
Sylvia van OsandGitHub d7dc70c0df Merge pull request #2949 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-06 17:50:23 +01:00
Francisco SerradorandHosted Weblate ce0738782a Translated using Weblate (Spanish)
Currently translated at 100.0% (316 of 316 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2026-01-06 13:02:02 +00:00
Sylvia van OsandGitHub df738b9c1d Merge pull request #2948 from CatimaLoyalty/create-pull-request/patch-1767646247
Update Fastlane changelogs
2026-01-05 21:52:18 +01:00
TheLastProjectandgithub-actions[bot] 8bf0033d22 Update Fastlane changelogs 2026-01-05 20:50:47 +00:00
Sylvia van Os 01e08e4928 Update CHANGELOG 2026-01-05 21:50:33 +01:00
Sylvia van OsandGitHub 90aee54a3c Merge pull request #2947 from CatimaLoyalty/fix/2945
Fix list widget opening on previous card sometimes
2026-01-05 21:49:50 +01:00
Sylvia van Os b7c42b5c8c Fix list widget opening on previous card sometimes 2026-01-05 20:20:41 +01:00
Sylvia van Os 008b5254c6 Release Catima 2.41.4 2026-01-04 23:17:37 +01:00
Sylvia van OsandGitHub 1b1163a100 Merge pull request #2941 from CatimaLoyalty/create-pull-request/patch-1767564871
Update Fastlane changelogs
2026-01-04 23:14:46 +01:00
TheLastProjectandgithub-actions[bot] 70c14514e6 Update Fastlane changelogs 2026-01-04 22:14:31 +00:00
Sylvia van Os 5830813170 Update CHANGELOG 2026-01-04 23:14:14 +01:00
Sylvia van OsandGitHub a07d4d1b8a Merge pull request #2940 from CatimaLoyalty/fix/disable_automatic_encoding
Disable automatic barcode encoding guessing for now
2026-01-04 23:12:57 +01:00
Sylvia van Os 29c4ccf4d9 Disable automatic barcode encoding guessing for now 2026-01-04 22:57:50 +01:00
Sylvia van Os 417006cfa3 Release Catima 2.41.3 2026-01-04 21:45:51 +01:00
Sylvia van OsandGitHub 907a8578ca Merge pull request #2938 from CatimaLoyalty/create-pull-request/patch-1767559150
Update Fastlane changelogs
2026-01-04 21:39:39 +01:00
TheLastProjectandgithub-actions[bot] 7e63babd47 Update Fastlane changelogs 2026-01-04 20:39:10 +00:00
Sylvia van Os c289bb0af3 Update CHANGELOG 2026-01-04 21:39:00 +01:00
Sylvia van OsandGitHub 80767e7cd6 Merge pull request #2937 from CatimaLoyalty/fix/enforce_iso_on_2.41.3_upgrade
On initial upgrade to 2.41.3, force all cards to ISO-8859-1
2026-01-04 21:38:11 +01:00
Sylvia van Os 90e6dd8738 Fix tests 2026-01-04 21:20:49 +01:00
Sylvia van Os d3de9c65e6 Force ISO-8859-1 when importing old backups
This will not catch one edge case: use exporting a backup in Catima
2.41.0 - 2.41.2, then uninstall Catima, then installing Catima 2.41.3
and then importing the database. But this seems rare enough to be
acceptable.
2026-01-04 21:20:49 +01:00
Sylvia van Os 48993f0486 On initial upgrade, force all automatic cards to ISO-8859-1
This fixes old pkpass files imported before Catima 2.41.0 to be forced
to "Automatic", which may guess UTF-8. New pkpass files will have the
encoding read from the file and newly scanned barcodes will use
Automatic.

This does have the unfortunate side effect of everyone who already
scanned a QR code with UTF-8 data since Catima 2.41.0 to have it forced
to ISO-8859-1, but it will fix Deutschlandtickets imported before 2.41.0
which is a rather large amount of the Catima userbase.
2026-01-04 21:20:44 +01:00
Sylvia van OsandGitHub 918c6fb41b Merge pull request #2936 from CatimaLoyalty/create-pull-request/patch-1767555122
Update Fastlane changelogs
2026-01-04 20:32:26 +01:00
TheLastProjectandgithub-actions[bot] d121841fdf Update Fastlane changelogs 2026-01-04 19:32:02 +00:00
Sylvia van Os 95ace2aa39 Update CHANGELOG 2026-01-04 20:31:51 +01:00
Sylvia van OsandGitHub b8cd52563d Merge pull request #2935 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-04 20:29:37 +01:00
Sylvia van OsandGitHub 70754af167 Merge pull request #2934 from CatimaLoyalty/fix/2932
Never pass ISO-8859-1 as encode hint
2026-01-04 20:29:24 +01:00
Sylvia van Os 80bad7ad56 Never pass ISO-8859-1 as encode hint
This fully restores the old behaviour for pkpass files with ISO-8859-1 as messageEncoding
2026-01-04 20:13:43 +01:00
Edgars AndersonsandHosted Weblate e214d6d69e Translated using Weblate (Latvian)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/lv/
2026-01-04 20:02:09 +01:00
109247019824andHosted Weblate 0e7509d966 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (316 of 316 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2026-01-04 20:02:08 +01:00
FjuroandHosted Weblate 58a5b16484 Translated using Weblate (Czech)
Currently translated at 100.0% (316 of 316 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2026-01-04 20:02:07 +01:00
B o d oandHosted Weblate a8df588b33 Translated using Weblate (German)
Currently translated at 100.0% (316 of 316 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2026-01-04 20:02:05 +01:00
Sylvia van OsandGitHub ef948f16f1 Merge pull request #2933 from CatimaLoyalty/create-pull-request/patch-1767502013
Update contributors
2026-01-04 09:50:08 +01:00
TheLastProjectandgithub-actions[bot] 11f942771f Update contributors 2026-01-04 04:46:53 +00:00
Sylvia van Os f507e15bfc Release Catima 2.41.2 2026-01-03 21:06:53 +01:00
Sylvia van OsandGitHub 64ebc345b5 Merge pull request #2929 from CatimaLoyalty/create-pull-request/patch-1767466255
Update feature graphic
2026-01-03 19:57:28 +01:00
Sylvia van OsandGitHub f94dbcd66d Merge pull request #2928 from CatimaLoyalty/create-pull-request/patch-1767466175
Update locales
2026-01-03 19:56:19 +01:00
TheLastProjectandgithub-actions[bot] 881303b73d Update feature graphic 2026-01-03 18:50:55 +00:00
TheLastProjectandgithub-actions[bot] 97a2ff7125 Update locales 2026-01-03 18:49:35 +00:00
Sylvia van OsandGitHub 22e968796d Merge pull request #2920 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2026-01-03 19:49:23 +01:00
Hosted Weblate 0c5f90d4ad Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/
2026-01-03 19:09:57 +01:00
Priit JõerüütandHosted Weblate 0f51e19d44 Translated using Weblate (Estonian)
Currently translated at 100.0% (316 of 316 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/et/
2026-01-03 19:09:57 +01:00
Priit JõerüütandHosted Weblate 5c720aa58a Translated using Weblate (Estonian)
Currently translated at 11.6% (18 of 154 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/et/
2026-01-03 19:09:57 +01:00
Sylvia van OsandHosted Weblate 19d7ef0669 Translated using Weblate (Persian (Old))
Currently translated at 99.0% (310 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/peo/
2026-01-03 19:09:57 +01:00
Hosted Weblate 04a22be542 Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/
2026-01-03 19:09:57 +01:00
امیرضاandHosted Weblate 6ff2a9b48c Translated using Weblate (Persian)
Currently translated at 42.2% (65 of 154 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fa/
2026-01-03 19:09:57 +01:00
Simone DottoandHosted Weblate 19d3b736cb Translated using Weblate (Italian)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2026-01-03 19:09:57 +01:00
Michael MoroniandHosted Weblate 2bcdf170ad Translated using Weblate (Italian)
Currently translated at 100.0% (313 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2026-01-03 19:09:57 +01:00
Simone DottoandHosted Weblate 23d79ba536 Translated using Weblate (Italian)
Currently translated at 100.0% (154 of 154 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/it/
2026-01-03 19:09:57 +01:00
Alì MortacciandHosted Weblate fe6de6f309 Translated using Weblate (Italian)
Currently translated at 100.0% (154 of 154 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/it/
2026-01-03 19:09:57 +01:00
امیرضاandHosted Weblate 29251978c4 Translated using Weblate (Persian (Old))
Currently translated at 99.3% (311 of 313 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/peo/
2026-01-03 19:09:57 +01:00
Sylvia van Os a10e8d5aab Fix typo in comment 2026-01-03 17:57:06 +01:00
Sylvia van OsandGitHub 5973761e2e Merge pull request #2926 from CatimaLoyalty/create-pull-request/patch-1767459283
Update Fastlane changelogs
2026-01-03 17:55:06 +01:00
TheLastProjectandgithub-actions[bot] 00f3fb47d5 Update Fastlane changelogs 2026-01-03 16:54:43 +00:00
Sylvia van OsandGitHub 37e6782032 Temporarily re-add Android 5 support (#2925)
* Revert "Bump androidx.activity:activity-compose from 1.10.1 to 1.12.2"

This reverts commit 307f0e12bc.

* Revert "Bump androidx.compose:compose-bom from 2025.11.01 to 2025.12.01"

This reverts commit a0fea79359.

* Revert "Remove Android 5 support"

This reverts commit 23457854b7.

* Update CHANGELOG
2026-01-03 17:54:33 +01:00
Sylvia van OsandGitHub f58bdba273 Merge pull request #2924 from CatimaLoyalty/create-pull-request/patch-1767452719
Update Fastlane changelogs
2026-01-03 16:07:00 +01:00
TheLastProjectandgithub-actions[bot] e02f74032b Update Fastlane changelogs 2026-01-03 15:05:19 +00:00
Sylvia van Os 6213bd4500 Update CHANGELOG 2026-01-03 16:05:07 +01:00
Sylvia van OsandGitHub 7739249364 Merge pull request #2923 from CatimaLoyalty/fix/2921
Only pass encoding hint in automatic if UTF-8
2026-01-03 16:04:12 +01:00
Sylvia van Os 2308deba33 Only pass encoding hint in automatic if UTF-8
If zxing is not explicitly told a barcode is UTF-8, it may render it
incorrectly. Which caused
https://github.com/CatimaLoyalty/Android/issues/2555.

However, when an encode hint is set, it will cause zxing to set an ECI
hint inside the barcode, which some scanners may trip over and cause
scanning failures, leading to
https://github.com/CatimaLoyalty/Android/issues/2921.

This change only passes the encoding in automatic mode if zxing
explicitly guesses it to be UTF-8, and otherwise doesn't pass anything,
to keep the ECI empty. This might need to be expanded for other types
like SJIS, but as nobody ever reported such a bug let's assume it's not
necessary for now.
2026-01-03 15:44:51 +01:00
Sylvia van OsandGitHub 8252f52862 Merge pull request #2922 from CatimaLoyalty/create-pull-request/patch-1767447624
Update Fastlane changelogs
2026-01-03 15:25:34 +01:00
TheLastProjectandgithub-actions[bot] 9b05d46c77 Update Fastlane changelogs 2026-01-03 13:40:24 +00:00
Sylvia van Os a8e9a932cb Update CHANGELOG 2026-01-03 14:40:13 +01:00
Sylvia van OsandGitHub d1858f22cf Merge pull request #2906 from CatimaLoyalty/dependabot/gradle/androidx.activity-activity-compose-1.12.2
Bump androidx.activity:activity-compose from 1.10.1 to 1.12.2
2026-01-01 21:43:29 +01:00
dependabot[bot]andGitHub 307f0e12bc Bump androidx.activity:activity-compose from 1.10.1 to 1.12.2
Bumps androidx.activity:activity-compose from 1.10.1 to 1.12.2.

---
updated-dependencies:
- dependency-name: androidx.activity:activity-compose
  dependency-version: 1.12.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-01 20:21:25 +00:00
Sylvia van OsandGitHub 3caf3ee0a8 Merge pull request #2905 from CatimaLoyalty/dependabot/gradle/androidx.compose-compose-bom-2025.12.01
Bump androidx.compose:compose-bom from 2025.11.01 to 2025.12.01
2026-01-01 21:20:19 +01:00
dependabot[bot]andGitHub a0fea79359 Bump androidx.compose:compose-bom from 2025.11.01 to 2025.12.01
Bumps androidx.compose:compose-bom from 2025.11.01 to 2025.12.01.

---
updated-dependencies:
- dependency-name: androidx.compose:compose-bom
  dependency-version: 2025.12.01
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-01 19:57:58 +00:00
Sylvia van OsandGitHub b01e6b5928 Merge pull request #2917 from CatimaLoyalty/minSdk23
Remove Android 5 support
2026-01-01 20:47:34 +01:00
Sylvia van Os 23457854b7 Remove Android 5 support
Newer dependencies need at least Android 6, so no use in keeping this
2026-01-01 19:58:19 +01:00
674 changed files with 4239 additions and 1661 deletions
+7 -7
View File
@@ -24,7 +24,7 @@ permissions:
security-events: none
statuses: none
env:
JAVA_HOME: /usr/lib/jvm/java-21-openjdk-amd64
JAVA_HOME: /usr/lib/jvm/java-25-openjdk-amd64
jobs:
build:
runs-on: ubuntu-latest
@@ -34,26 +34,26 @@ jobs:
steps:
- uses: actions/checkout@v6
- uses: gradle/actions/wrapper-validation@v5
- name: set up OpenJDK 21
- name: set up OpenJDK 25
run: |
sudo apt-get update
sudo apt-get install -y openjdk-21-jdk-headless
sudo apt-get install -y openjdk-25-jdk-headless
sudo update-alternatives --auto java
- name: Build
run: ./gradlew assemble${{ matrix.flavor }}Release
- name: Check lint
run: ./gradlew lint${{ matrix.flavor }}Release
- name: Run unit tests
run: timeout 5m ./gradlew test${{ matrix.flavor }}ReleaseUnitTest || { ./gradlew --stop && timeout 5m ./gradlew test${{ matrix.flavor }}ReleaseUnitTest; }
run: timeout 5m ./gradlew test${{ matrix.flavor }}DebugUnitTest || { ./gradlew --stop && timeout 5m ./gradlew test${{ matrix.flavor }}DebugUnitTest; }
- name: Enable KVM
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: Run instrumented tests (API 21)
- name: Run instrumented tests (API 23)
uses: ReactiveCircus/android-emulator-runner@v2
with:
api-level: 21
api-level: 23
arch: x86_64
script: ./gradlew connected${{ matrix.flavor }}DebugAndroidTest
- name: Run instrumented tests (API 35)
@@ -64,7 +64,7 @@ jobs:
script: ./gradlew connected${{ matrix.flavor }}DebugAndroidTest
- name: Archive test results
if: always()
uses: actions/upload-artifact@v6.0.0
uses: actions/upload-artifact@v7.0.1
with:
name: test-results-flavor${{ matrix.flavor }}
path: app/build/reports
+2 -2
View File
@@ -21,13 +21,13 @@ jobs:
id: checkout
uses: actions/checkout@v6
- name: Setup Python
uses: actions/setup-python@v6.1.0
uses: actions/setup-python@v6.2.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@v8.0.0
uses: peter-evans/create-pull-request@v8.1.1
with:
title: "Update Fastlane changelogs"
commit-message: "Update Fastlane changelogs"
+3 -1
View File
@@ -24,8 +24,10 @@ jobs:
with:
file_in_repo: app/src/main/res/raw/contributors.txt
min_commit_count: 5
- name: Remove gradle-update-robot from contributors (not a person)
run: "sed -i '/^gradle-update-robot$/d' app/src/main/res/raw/contributors.txt"
- name: Create Pull Request
uses: peter-evans/create-pull-request@v8.0.0
uses: peter-evans/create-pull-request@v8.1.1
with:
title: "Update contributors"
commit-message: "Update contributors"
@@ -31,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@v8.0.0
uses: peter-evans/create-pull-request@v8.1.1
with:
title: "Update feature graphic"
commit-message: "Update feature graphic"
@@ -1,19 +0,0 @@
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@v6
- name: Update Gradle Wrapper
uses: gradle-update/update-gradle-wrapper-action@v2
+1 -1
View File
@@ -23,7 +23,7 @@ jobs:
- name: Update locales
run: .scripts/locales.py
- name: Create Pull Request
uses: peter-evans/create-pull-request@v8.0.0
uses: peter-evans/create-pull-request@v8.1.1
with:
title: "Update locales"
commit-message: "Update locales"
+39
View File
@@ -1,5 +1,44 @@
# Changelog
## v2.42.0 - 165 (2026-05-06)
- Disable NFC while showing a card by default
- Ask keyboard to capitalize each word in store name in edit screen
- Put date in export file name
## v2.41.7 - 164 (2026-03-06)
Android 5.0 and 5.1 are no longer supported starting with this release. If you want to use Catima on these versions, please use version 2.41.6.
- Fix crash when switching cards using volume buttons if only one card is available
- Fix shortcut returning to previous card after rotation
## v2.41.6 - 163 (2026-01-23)
- Auto-detect URLs in card ID and make the clickable in card ID details pop-up
- Fix barcode selector activity showing white squares instead of barcodes
## v2.41.5 - 162 (2026-01-15)
- Fix list widget sometimes opening wrong card
- Fix several bugs with shortcut handling
- Fix About activity not using pure black title bar in OLED mode
- Fully remove automatic barcode encoding detection
- Expose barcode encoding through ContentProvider (used by Gadgetbridge)
## v2.41.4 - 161 (2026-01-04)
- Disable automatic barcode encoding detection for now (breaks too many cards)
## v2.41.3 - 160 (2026-01-04)
- Follow-up for fix in 2.41.2 for cards explicitly set to ISO-8859-1
- Migrate old cards to ISO-8859-1 to fix sudden behaviour differences for existing cards
## v2.41.2 - 159 (2026-01-03)
- Fix change introduced in 2.41.0 that broke support for some scanners for non-UTF-8 barcodes
## v2.41.1 - 158 (2025-12-31)
- Fix status and navigation bar colour in new About activity
+2 -1
View File
@@ -1,5 +1,5 @@
**Last updated**
September 30 2025
April 29 2026
# Privacy Policy
Catima does not collect or transmit any personal information.
@@ -7,6 +7,7 @@ Catima does not collect or transmit any personal information.
To ensure correct app functionality, we require access to the following:
- Camera: We need access to your camera to be able to scan barcodes. The app can still be used when camera access is denied, but you will have to manually type the barcode information.
- NFC: We need NFC access to temporarily disable NFC while showing a barcode to prevent NFC payment apps from triggering (such as when using a check-in gates which support both barcodes and NFC payments). This functionality can be disabled in settings.
- Storage (Android 5 and 6 only): We need access to your device storage to create or import backups. The app can still be used when storage access is denied, but you will not be able to create or import backups.
Catima offers a feature to share cards with other users. All the relevant data is in the generated shareable URLs and never transmitted to our servers. When viewed through catima.app, the data in the URL is rendered using client-side Javascript to further ensure no data is ever transmitted to us.
+8 -9
View File
@@ -17,15 +17,15 @@ android {
defaultConfig {
applicationId = "me.hackerchick.catima"
minSdk = 21
minSdk = 23
targetSdk = 36
versionCode = 158
versionName = "2.41.1"
versionCode = 165
versionName = "2.42.0"
vectorDrawables.useSupportLibrary = true
multiDexEnabled = true
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")
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", "peo", "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"
@@ -38,7 +38,7 @@ android {
release {
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android.txt"),
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
@@ -98,7 +98,7 @@ android {
kotlin {
compilerOptions {
jvmTarget = JvmTarget.JVM_17
jvmTarget = JvmTarget.JVM_21
}
}
compileOptions {
@@ -107,9 +107,8 @@ android {
// Flag to enable support for the new language APIs
isCoreLibraryDesugaringEnabled = true
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
sourceCompatibility = JavaVersion.VERSION_21
targetCompatibility = JavaVersion.VERSION_21
}
}
+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">Debug di Catima</string>
</resources>
+5 -1
View File
@@ -12,8 +12,12 @@
<uses-sdk tools:overrideLibrary="com.google.zxing.client.android" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="23" />
<uses-feature
android:name="android.hardware.nfc"
android:required="false" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
@@ -94,7 +98,7 @@
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="adjustResize"/>
<activity
android:name=".LoyaltyCardViewActivity"
android:name=".cardview.LoyaltyCardViewActivity"
android:exported="true"
android:theme="@style/AppTheme.NoActionBar" />
<activity
@@ -11,6 +11,7 @@ import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.zxing.EncodeHintType;
@@ -21,7 +22,9 @@ import com.google.zxing.common.StringUtils;
import java.lang.ref.WeakReference;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.Objects;
import protect.card_locker.async.CompatCallable;
@@ -54,9 +57,9 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
private final boolean showFallback;
private final BarcodeImageWriterResultCallback callback;
BarcodeImageWriterTask(
public BarcodeImageWriterTask(
Context context, ImageView imageView, String cardIdString,
CatimaBarcode barcodeFormat, @Nullable Charset barcodeEncoding, TextView textView,
CatimaBarcode barcodeFormat, @NonNull Charset barcodeEncoding, TextView textView,
boolean showFallback, BarcodeImageWriterResultCallback callback, boolean roundCornerPadding, boolean isFullscreen
) {
mContext = context;
@@ -183,14 +186,24 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
MultiFormatWriter writer = new MultiFormatWriter();
Map<EncodeHintType, Object> encodeHints = new ArrayMap<>();
// Use charset if defined or guess otherwise
if (encoding != null) {
Log.d(TAG, "Encoding explicitly set, " + encoding.name());
// We don't want to pass the ISO-8859-1 as an encoding hint as zxing may add this as ECI
// inside the barcode.
//
// Due to many barcode scanners in the wild being badly coded they may trip over ECI
// info existing and fail to scan.
// See:
// - https://github.com/CatimaLoyalty/Android/issues/2921
// - https://github.com/CatimaLoyalty/Android/issues/2932
//
// Just not always passing the encoding hint is slightly hacky, but in 5+ years of Catima
// cards without encode hints have never caused any issues (unless they were UTF-8), yet
// just days after passing ISO-8859-1 as CHARACTER_SET in the encode hints already 2
// scan failures were reported (one for QR, one for Aztec).
if (!Objects.equals(encoding.name(), StandardCharsets.ISO_8859_1.name())) {
Log.d(TAG, "Chosen encoding is not ISO_8859_1, so passing as encoding hint");
encodeHints.put(EncodeHintType.CHARACTER_SET, encoding);
} else {
String guessedEncoding = StringUtils.guessEncoding(cardId.getBytes(), new ArrayMap<>());
Log.d(TAG, "Guessed encoding: " + guessedEncoding);
encodeHints.put(EncodeHintType.CHARACTER_SET, Charset.forName(guessedEncoding));
Log.d(TAG, "Not passing encoding as encoding hint");
}
BitMatrix bitMatrix;
@@ -10,6 +10,7 @@ import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import protect.card_locker.async.TaskHandler;
@@ -74,6 +75,9 @@ public class BarcodeSelectorAdapter extends ArrayAdapter<CatimaBarcodeWithValue>
return viewHolder.image.getTag() != null && (boolean) viewHolder.image.getTag();
}
// FIXME: The examples in the selector activity are always rendering using ISO-8859-1, even if UTF-8 is the selected type
// This needs some refactoring to properly retrieve the barcode encoding when rendering an active barcode
// This is the case for example when editing an active card, pressing the "Edit barcode" button, then "More options" and then "Enter the barcode manually"
private void createBarcodeOption(final ImageView image, final String formatType, final String cardId, final TextView text) {
final CatimaBarcode format = CatimaBarcode.fromName(formatType);
@@ -92,13 +96,13 @@ public class BarcodeSelectorAdapter extends ArrayAdapter<CatimaBarcodeWithValue>
Log.d(TAG, "Generating barcode for type " + formatType);
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, null, text, true, null, true, false);
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, StandardCharsets.ISO_8859_1, 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, null, text, true, null, true, false);
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, StandardCharsets.ISO_8859_1, text, true, null, true, false);
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
}
}
@@ -22,6 +22,8 @@ import java.util.List;
import java.util.concurrent.Flow;
import java.util.function.Consumer;
import protect.card_locker.cardview.LoyaltyCardViewActivity;
@RequiresApi(Build.VERSION_CODES.R)
public class CardsOnPowerScreenService extends ControlsProviderService {
@@ -38,15 +38,10 @@ public class CatimaAppCompatActivity extends AppCompatActivity {
Window window = getWindow();
if (window != null) {
boolean darkMode = Utils.isDarkModeEnabled(this);
if (Build.VERSION.SDK_INT >= 23) {
View decorView = window.getDecorView();
WindowInsetsControllerCompat wic = new WindowInsetsControllerCompat(window, decorView);
wic.setAppearanceLightStatusBars(!darkMode);
window.setStatusBarColor(Color.TRANSPARENT);
} else {
// icons are always white back then
window.setStatusBarColor(darkMode ? Color.TRANSPARENT : Color.argb(127, 0, 0, 0));
}
View decorView = window.getDecorView();
WindowInsetsControllerCompat wic = new WindowInsetsControllerCompat(window, decorView);
wic.setAppearanceLightStatusBars(!darkMode);
window.setStatusBarColor(Color.TRANSPARENT);
}
// XXX android 9 and below has a nasty rendering bug if the theme was patched earlier
Utils.postPatchColors(this);
@@ -66,7 +61,4 @@ public class CatimaAppCompatActivity extends AppCompatActivity {
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
public void onMockedRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
}
}
@@ -10,6 +10,7 @@ import android.database.sqlite.SQLiteOpenHelper;
import android.text.TextUtils;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.io.FileNotFoundException;
@@ -26,7 +27,7 @@ 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 = 18;
public static final int DATABASE_VERSION = 20;
// NB: changing these values requires a migration
public static final int DEFAULT_ZOOM_LEVEL = 100;
@@ -116,7 +117,7 @@ public class DBHelper extends SQLiteOpenHelper {
LoyaltyCardDbIds.CARD_ID + " TEXT not null," +
LoyaltyCardDbIds.BARCODE_ID + " TEXT," +
LoyaltyCardDbIds.BARCODE_TYPE + " TEXT," +
LoyaltyCardDbIds.BARCODE_ENCODING + " TEXT," +
LoyaltyCardDbIds.BARCODE_ENCODING + " TEXT not null," +
LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0'," +
LoyaltyCardDbIds.LAST_USED + " INTEGER DEFAULT '0', " +
LoyaltyCardDbIds.ZOOM_LEVEL + " INTEGER DEFAULT '" + DEFAULT_ZOOM_LEVEL + "', " +
@@ -345,6 +346,155 @@ public class DBHelper extends SQLiteOpenHelper {
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
+ " ADD COLUMN " + LoyaltyCardDbIds.BARCODE_ENCODING + " TEXT");
}
// On upgrade to 2.41.3, force all existing "Automatic" cards to ISO-8859-1.
// UTF-8 support was only added in 2.42.0, before that, all barcodes were saved without
// any encoding info. As many scanners deal badly with ECI info, automatically guessing
// UTF-8 for old barcodes may break them.
//
// New cards will be saved using either "Automatic" encoding to guess or, for pkpass files,
// whatever encoding is specified.
if (oldVersion < 19 && newVersion >= 19) {
db.execSQL("UPDATE " + LoyaltyCardDbIds.TABLE + " SET " + LoyaltyCardDbIds.BARCODE_ENCODING + " = 'ISO-8859-1' WHERE " + LoyaltyCardDbIds.BARCODE_ENCODING + " IS NULL");
}
if (oldVersion < 20 && newVersion >= 20) {
// SQLite doesn't support modify column
// So we need to create a temp column to make barcode encoding non-nullable
// https://www.sqlite.org/faq.html#q11
db.beginTransaction();
// First migrate all cards to ISO-8859-1
db.execSQL("UPDATE " + LoyaltyCardDbIds.TABLE + " SET " + LoyaltyCardDbIds.BARCODE_ENCODING + " = 'ISO-8859-1' WHERE " + LoyaltyCardDbIds.BARCODE_ENCODING + " IS NULL");
// create temp table
db.execSQL("CREATE TEMPORARY TABLE tmp (" +
LoyaltyCardDbIds.ID + " INTEGER primary key autoincrement," +
LoyaltyCardDbIds.STORE + " TEXT not null," +
LoyaltyCardDbIds.NOTE + " TEXT not null," +
LoyaltyCardDbIds.VALID_FROM + " INTEGER," +
LoyaltyCardDbIds.EXPIRY + " INTEGER," +
LoyaltyCardDbIds.BALANCE + " TEXT not null DEFAULT '0'," +
LoyaltyCardDbIds.BALANCE_TYPE + " TEXT," +
LoyaltyCardDbIds.HEADER_COLOR + " INTEGER," +
LoyaltyCardDbIds.CARD_ID + " TEXT not null," +
LoyaltyCardDbIds.BARCODE_ID + " TEXT," +
LoyaltyCardDbIds.BARCODE_TYPE + " TEXT," +
LoyaltyCardDbIds.BARCODE_ENCODING + " TEXT not null," +
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' )");
// Insert all cards into temp table
db.execSQL("INSERT INTO tmp (" +
LoyaltyCardDbIds.ID + " ," +
LoyaltyCardDbIds.STORE + " ," +
LoyaltyCardDbIds.NOTE + " ," +
LoyaltyCardDbIds.VALID_FROM + " , " +
LoyaltyCardDbIds.EXPIRY + " ," +
LoyaltyCardDbIds.BALANCE + " ," +
LoyaltyCardDbIds.BALANCE_TYPE + " ," +
LoyaltyCardDbIds.HEADER_COLOR + " ," +
LoyaltyCardDbIds.CARD_ID + " ," +
LoyaltyCardDbIds.BARCODE_ID + " ," +
LoyaltyCardDbIds.BARCODE_TYPE + " ," +
LoyaltyCardDbIds.BARCODE_ENCODING + " ," +
LoyaltyCardDbIds.STAR_STATUS + " ," +
LoyaltyCardDbIds.LAST_USED + " ," +
LoyaltyCardDbIds.ZOOM_LEVEL + " ," +
LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH + " ," +
LoyaltyCardDbIds.ARCHIVE_STATUS + ")" +
" SELECT " +
LoyaltyCardDbIds.ID + " ," +
LoyaltyCardDbIds.STORE + " ," +
LoyaltyCardDbIds.NOTE + " ," +
LoyaltyCardDbIds.VALID_FROM + " ," +
LoyaltyCardDbIds.EXPIRY + " ," +
LoyaltyCardDbIds.BALANCE + " ," +
LoyaltyCardDbIds.BALANCE_TYPE + " ," +
LoyaltyCardDbIds.HEADER_COLOR + " ," +
LoyaltyCardDbIds.CARD_ID + " ," +
LoyaltyCardDbIds.BARCODE_ID + " ," +
LoyaltyCardDbIds.BARCODE_TYPE + " ," +
LoyaltyCardDbIds.BARCODE_ENCODING + " ," +
LoyaltyCardDbIds.STAR_STATUS + " ," +
LoyaltyCardDbIds.LAST_USED + " ," +
LoyaltyCardDbIds.ZOOM_LEVEL + " ," +
LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH + " ," +
LoyaltyCardDbIds.ARCHIVE_STATUS +
" FROM " + LoyaltyCardDbIds.TABLE);
// Drop old table
db.execSQL("DROP TABLE " + LoyaltyCardDbIds.TABLE);
// Create table again
db.execSQL("CREATE TABLE " + LoyaltyCardDbIds.TABLE + "(" +
LoyaltyCardDbIds.ID + " INTEGER primary key autoincrement," +
LoyaltyCardDbIds.STORE + " TEXT not null," +
LoyaltyCardDbIds.NOTE + " TEXT not null," +
LoyaltyCardDbIds.VALID_FROM + " INTEGER," +
LoyaltyCardDbIds.EXPIRY + " INTEGER," +
LoyaltyCardDbIds.BALANCE + " TEXT not null DEFAULT '0'," +
LoyaltyCardDbIds.BALANCE_TYPE + " TEXT," +
LoyaltyCardDbIds.HEADER_COLOR + " INTEGER," +
LoyaltyCardDbIds.CARD_ID + " TEXT not null," +
LoyaltyCardDbIds.BARCODE_ID + " TEXT," +
LoyaltyCardDbIds.BARCODE_TYPE + " TEXT," +
LoyaltyCardDbIds.BARCODE_ENCODING + " TEXT not null," +
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' )");
// Insert all temp cards into newly created table
db.execSQL("INSERT INTO " + LoyaltyCardDbIds.TABLE + "(" +
LoyaltyCardDbIds.ID + " ," +
LoyaltyCardDbIds.STORE + " ," +
LoyaltyCardDbIds.NOTE + " ," +
LoyaltyCardDbIds.VALID_FROM + " , " +
LoyaltyCardDbIds.EXPIRY + " ," +
LoyaltyCardDbIds.BALANCE + " ," +
LoyaltyCardDbIds.BALANCE_TYPE + " ," +
LoyaltyCardDbIds.HEADER_COLOR + " ," +
LoyaltyCardDbIds.CARD_ID + " ," +
LoyaltyCardDbIds.BARCODE_ID + " ," +
LoyaltyCardDbIds.BARCODE_TYPE + " ," +
LoyaltyCardDbIds.BARCODE_ENCODING + " ," +
LoyaltyCardDbIds.STAR_STATUS + " ," +
LoyaltyCardDbIds.LAST_USED + " ," +
LoyaltyCardDbIds.ZOOM_LEVEL + " ," +
LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH + " ," +
LoyaltyCardDbIds.ARCHIVE_STATUS + ")" +
" SELECT " +
LoyaltyCardDbIds.ID + " ," +
LoyaltyCardDbIds.STORE + " ," +
LoyaltyCardDbIds.NOTE + " ," +
LoyaltyCardDbIds.VALID_FROM + " ," +
LoyaltyCardDbIds.EXPIRY + " ," +
LoyaltyCardDbIds.BALANCE + " ," +
LoyaltyCardDbIds.BALANCE_TYPE + " ," +
LoyaltyCardDbIds.HEADER_COLOR + " ," +
LoyaltyCardDbIds.CARD_ID + " ," +
LoyaltyCardDbIds.BARCODE_ID + " ," +
LoyaltyCardDbIds.BARCODE_TYPE + " ," +
LoyaltyCardDbIds.BARCODE_ENCODING + " ," +
LoyaltyCardDbIds.STAR_STATUS + " ," +
LoyaltyCardDbIds.LAST_USED + " ," +
LoyaltyCardDbIds.ZOOM_LEVEL + " ," +
LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH + " ," +
LoyaltyCardDbIds.ARCHIVE_STATUS +
" FROM tmp");
// Drop tmp table
db.execSQL("DROP TABLE tmp");
db.setTransactionSuccessful();
db.endTransaction();
}
}
public static Set<String> imageFiles(Context context, final SQLiteDatabase database) {
@@ -406,7 +556,7 @@ public class DBHelper extends SQLiteOpenHelper {
public static long insertLoyaltyCard(
final SQLiteDatabase database, final String store, final String note, final Date validFrom,
final Date expiry, final BigDecimal balance, final Currency balanceType, final String cardId,
final String barcodeId, final CatimaBarcode barcodeType, final @Nullable Charset barcodeEncoding,
final String barcodeId, final CatimaBarcode barcodeType, final @NonNull Charset barcodeEncoding,
final Integer headerColor,
final int starStatus, final Long lastUsed, final int archiveStatus) {
database.beginTransaction();
@@ -422,7 +572,7 @@ public class DBHelper extends SQLiteOpenHelper {
contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId);
contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId);
contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null);
contentValues.put(LoyaltyCardDbIds.BARCODE_ENCODING, barcodeEncoding != null ? barcodeEncoding.name() : null);
contentValues.put(LoyaltyCardDbIds.BARCODE_ENCODING, barcodeEncoding.name());
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
@@ -442,7 +592,7 @@ public class DBHelper extends SQLiteOpenHelper {
final SQLiteDatabase database, final int id, final String store, final String note,
final Date validFrom, final Date expiry, final BigDecimal balance,
final Currency balanceType, final String cardId, final String barcodeId,
final CatimaBarcode barcodeType, final @Nullable Charset barcodeEncoding,
final CatimaBarcode barcodeType, final @NonNull Charset barcodeEncoding,
final Integer headerColor, final int starStatus,
final Long lastUsed, final int archiveStatus) {
database.beginTransaction();
@@ -459,7 +609,7 @@ public class DBHelper extends SQLiteOpenHelper {
contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId);
contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId);
contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null);
contentValues.put(LoyaltyCardDbIds.BARCODE_ENCODING, barcodeEncoding != null ? barcodeEncoding.name() : null);
contentValues.put(LoyaltyCardDbIds.BARCODE_ENCODING, barcodeEncoding.name());
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
@@ -479,7 +629,7 @@ public class DBHelper extends SQLiteOpenHelper {
SQLiteDatabase database, final int id, final String store, final String note,
final Date validFrom, final Date expiry, final BigDecimal balance,
final Currency balanceType, final String cardId, final String barcodeId,
final CatimaBarcode barcodeType, final @Nullable Charset barcodeEncoding,
final CatimaBarcode barcodeType, final @NonNull Charset barcodeEncoding,
final Integer headerColor, final int starStatus,
final Long lastUsed, final int archiveStatus) {
database.beginTransaction();
@@ -495,7 +645,7 @@ public class DBHelper extends SQLiteOpenHelper {
contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId);
contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId);
contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null);
contentValues.put(LoyaltyCardDbIds.BARCODE_ENCODING, barcodeEncoding != null ? barcodeEncoding.name() : null);
contentValues.put(LoyaltyCardDbIds.BARCODE_ENCODING, barcodeEncoding.name());
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
@@ -27,6 +27,9 @@ import protect.card_locker.importexport.ImportExportResultType
import java.io.IOException
import java.io.InputStream
import java.io.OutputStream
import java.text.SimpleDateFormat
import java.util.Date
import java.util.Locale
class ImportExportActivity : CatimaAppCompatActivity() {
private lateinit var binding: ImportExportActivityBinding
@@ -45,6 +48,11 @@ class ImportExportActivity : CatimaAppCompatActivity() {
companion object {
private const val TAG = "Catima"
internal fun getExportFilename(): String {
val sdf = SimpleDateFormat("yyyyMMdd", Locale.US)
return "catima_${sdf.format(Date())}.zip"
}
}
override fun onCreate(savedInstanceState: Bundle?) {
@@ -107,7 +115,7 @@ class ImportExportActivity : CatimaAppCompatActivity() {
val intentCreateDocumentAction = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "application/zip"
putExtra(Intent.EXTRA_TITLE, "catima.zip")
putExtra(Intent.EXTRA_TITLE, getExportFilename())
}
val exportButton: Button = binding.exportButton
@@ -70,7 +70,7 @@ public class ImportURIHelper {
try {
// These values are allowed to be null
CatimaBarcode barcodeType = null;
Charset barcodeEncoding = null;
Charset barcodeEncoding = StandardCharsets.ISO_8859_1;
Date validFrom = null;
Date expiry = null;
BigDecimal balance = new BigDecimal("0");
@@ -206,9 +206,7 @@ public class ImportURIHelper {
if (loyaltyCard.barcodeType != null) {
fragment = appendFragment(fragment, BARCODE_TYPE, loyaltyCard.barcodeType.name());
}
if (loyaltyCard.barcodeEncoding != null) {
fragment = appendFragment(fragment, BARCODE_ENCODING, loyaltyCard.barcodeEncoding.name());
}
fragment = appendFragment(fragment, BARCODE_ENCODING, loyaltyCard.barcodeEncoding.name());
if (loyaltyCard.headerColor != null) {
fragment = appendFragment(fragment, HEADER_COLOR, loyaltyCard.headerColor.toString());
}
@@ -13,6 +13,7 @@ import android.view.View
import android.widget.RemoteViews
import androidx.core.widget.RemoteViewsCompat
import protect.card_locker.DBHelper.LoyaltyCardArchiveFilter
import protect.card_locker.cardview.LoyaltyCardViewActivity
class ListWidget : AppWidgetProvider() {
fun updateAll(context: Context) {
@@ -69,7 +70,9 @@ class ListWidget : AppWidgetProvider() {
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 templateIntent = Intent(context, LoyaltyCardViewActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
val pendingIntent = PendingIntent.getActivity(
context,
0,
@@ -100,8 +103,7 @@ class ListWidget : AppWidgetProvider() {
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
// FIXME: The icon flow causes a crash up to Android 12L, so force anything below 33 down this path
if (icon != null && Build.VERSION.SDK_INT >= 32) {
setInt(R.id.item_container_foreground, "setBackgroundColor", foreground)
setImageViewIcon(R.id.item_image, Icon.createWithBitmap(icon))
@@ -128,4 +130,4 @@ class ListWidget : AppWidgetProvider() {
return remoteViews
}
}
}
@@ -10,6 +10,7 @@ import androidx.annotation.Nullable;
import java.math.BigDecimal;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.Currency;
import java.util.Date;
import java.util.List;
@@ -31,7 +32,6 @@ public class LoyaltyCard {
public String barcodeId;
@Nullable
public CatimaBarcode barcodeType;
@Nullable
public Charset barcodeEncoding;
@Nullable
public Integer headerColor;
@@ -94,7 +94,7 @@ public class LoyaltyCard {
setCardId("");
setBarcodeId(null);
setBarcodeType(null);
setBarcodeEncoding(null);
setBarcodeEncoding(StandardCharsets.ISO_8859_1);
setHeaderColor(null);
setStarStatus(0);
setLastUsed(Utils.getUnixTime());
@@ -129,7 +129,7 @@ public class LoyaltyCard {
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 Charset barcodeEncoding, @Nullable final Integer headerColor, final int starStatus,
@NonNull final Charset barcodeEncoding, @Nullable final Integer headerColor, final int starStatus,
final long lastUsed, final int zoomLevel, final int zoomLevelWidth, final int archiveStatus,
@Nullable Bitmap imageThumbnail, @Nullable String imageThumbnailPath,
@Nullable Bitmap imageFront, @Nullable String imageFrontPath,
@@ -250,7 +250,7 @@ public class LoyaltyCard {
this.barcodeType = barcodeType;
}
public void setBarcodeEncoding(@Nullable Charset barcodeEncoding) {
public void setBarcodeEncoding(@NonNull Charset barcodeEncoding) {
this.barcodeEncoding = barcodeEncoding;
}
@@ -478,7 +478,7 @@ public class LoyaltyCard {
bundle.putString(BUNDLE_LOYALTY_CARD_BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null);
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_BARCODE_ENCODING)) {
bundle.putString(BUNDLE_LOYALTY_CARD_BARCODE_ENCODING, barcodeEncoding != null ? barcodeEncoding.name() : null);
bundle.putString(BUNDLE_LOYALTY_CARD_BARCODE_ENCODING, barcodeEncoding.name());
}
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_HEADER_COLOR)) {
bundle.putInt(BUNDLE_LOYALTY_CARD_HEADER_COLOR, headerColor != null ? headerColor : -1);
@@ -558,8 +558,7 @@ public class LoyaltyCard {
int barcodeTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE);
CatimaBarcode barcodeType = !cursor.isNull(barcodeTypeColumn) ? CatimaBarcode.fromName(cursor.getString(barcodeTypeColumn)) : null;
// barcodeEncoding
int barcodeEncodingColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ENCODING);
Charset barcodeEncoding = !cursor.isNull(barcodeEncodingColumn) ? Charset.forName(cursor.getString(barcodeEncodingColumn)) : null;
Charset barcodeEncoding = Charset.forName(cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ENCODING)));
// headerColor
int headerColorColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_COLOR);
Integer headerColor = !cursor.isNull(headerColorColumn) ? cursor.getInt(headerColorColumn) : null;
@@ -615,7 +614,7 @@ public class LoyaltyCard {
Utils.equals(a.barcodeId, b.barcodeId) && // nullable String
Utils.equals(a.barcodeType == null ? null : a.barcodeType.format(),
b.barcodeType == null ? null : b.barcodeType.format()) && // nullable CatimaBarcode with no overridden .equals(), so we need to check .format()
Utils.equals(a.barcodeEncoding, b.barcodeEncoding) && // nullable String
a.barcodeEncoding.name().equals(b.barcodeEncoding.name()) && // non-nullable String
Utils.equals(a.headerColor, b.headerColor) && // nullable Integer
a.starStatus == b.starStatus && // non-nullable int
a.archiveStatus == b.archiveStatus && // non-nullable int
@@ -655,7 +654,7 @@ public class LoyaltyCard {
this.cardId,
this.barcodeId,
this.barcodeType != null ? this.barcodeType.format() : null,
this.barcodeEncoding != null ? this.barcodeEncoding.name() : null,
this.barcodeEncoding.name(),
this.headerColor,
this.starStatus,
this.lastUsed,
@@ -232,7 +232,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
viewModel.setHasChanged(true);
}
protected void setLoyaltyCardBarcodeEncoding(@Nullable Charset barcodeEncoding) {
protected void setLoyaltyCardBarcodeEncoding(@NonNull Charset barcodeEncoding) {
viewModel.getLoyaltyCard().setBarcodeEncoding(barcodeEncoding);
generateBarcode();
@@ -594,18 +594,13 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!s.toString().isEmpty()) {
Log.d(TAG, "Setting barcode encoding to " + s.toString());
if (s.toString().equals(getString(R.string.automatic))) {
setLoyaltyCardBarcodeEncoding(null);
} else {
setLoyaltyCardBarcodeEncoding(Charset.forName(s.toString()));
}
setLoyaltyCardBarcodeEncoding(Charset.forName(s.toString()));
}
}
@Override
public void afterTextChanged(Editable s) {
ArrayList<String> barcodeEncodingList = new ArrayList<>();
barcodeEncodingList.add(getString(R.string.automatic));
barcodeEncodingList.add(StandardCharsets.ISO_8859_1.name());
barcodeEncodingList.add(StandardCharsets.UTF_8.name());
ArrayAdapter<String> barcodeEncodingAdapter = new ArrayAdapter<>(LoyaltyCardEditActivity.this, android.R.layout.select_dialog_item, barcodeEncodingList);
@@ -724,6 +719,14 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
});
}
@Override
protected void onDestroy() {
if (mDatabase != null && mDatabase.isOpen()) {
mDatabase.close();
}
super.onDestroy();
}
private void selectTab(int index) {
binding.tabs.selectTab(binding.tabs.getTabAt(index));
viewModel.setTabIndex(index);
@@ -810,7 +813,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
CatimaBarcode barcodeType = viewModel.getLoyaltyCard().barcodeType;
barcodeTypeField.setText(barcodeType != null ? barcodeType.prettyName() : getString(R.string.noBarcode));
Charset barcodeEncoding = viewModel.getLoyaltyCard().barcodeEncoding;
barcodeEncodingField.setText(barcodeEncoding != null ? barcodeEncoding.name() : getString(R.string.automatic));
barcodeEncodingField.setText(barcodeEncoding.name());
// We set the balance here (with onResuming/onRestoring == true) to prevent formatBalanceCurrencyField() from setting it (via onTextChanged),
// which can cause issues when switching locale because it parses the balance and e.g. the decimal separator may have changed.
@@ -1532,7 +1535,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
DBHelper.setLoyaltyCardGroups(mDatabase, viewModel.getLoyaltyCardId(), selectedGroups);
ShortcutHelper.updateShortcuts(this, DBHelper.getLoyaltyCard(this, mDatabase, viewModel.getLoyaltyCardId()));
ShortcutHelper.updateShortcuts(this);
if (viewModel.getDuplicateFromLoyaltyCardId()) {
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
@@ -31,6 +31,7 @@ import com.google.android.material.tabs.TabLayout.OnTabSelectedListener
import protect.card_locker.DBHelper.LoyaltyCardOrder
import protect.card_locker.DBHelper.LoyaltyCardOrderDirection
import protect.card_locker.LoyaltyCardCursorAdapter.CardAdapterListener
import protect.card_locker.cardview.LoyaltyCardViewActivity
import protect.card_locker.databinding.ContentMainBinding
import protect.card_locker.databinding.MainActivityBinding
import protect.card_locker.databinding.SortingOptionBinding
@@ -156,8 +157,6 @@ class MainActivity : CatimaAppCompatActivity(), CardAdapterListener {
Log.d(TAG, "Deleting card: " + loyaltyCard.id)
DBHelper.deleteLoyaltyCard(mDatabase, this@MainActivity, loyaltyCard.id)
ShortcutHelper.removeShortcut(this@MainActivity, loyaltyCard.id)
}
val tab = groupsTabLayout.getTabAt(selectedTab)
mGroup = tab?.tag
@@ -177,7 +176,6 @@ class MainActivity : CatimaAppCompatActivity(), CardAdapterListener {
for (loyaltyCard in mAdapter.getSelectedItems()) {
Log.d(TAG, "Archiving card: " + loyaltyCard.id)
DBHelper.updateLoyaltyCardArchiveStatus(mDatabase, loyaltyCard.id, 1)
ShortcutHelper.removeShortcut(this@MainActivity, loyaltyCard.id)
updateLoyaltyCardList(false)
inputMode.finish()
invalidateOptionsMenu()
@@ -466,6 +464,7 @@ class MainActivity : CatimaAppCompatActivity(), CardAdapterListener {
}
ListWidget().updateAll(mAdapter.mContext)
ShortcutHelper.updateShortcuts(mAdapter.mContext)
}
private fun processParseResultList(
@@ -34,11 +34,6 @@ public class PermissionUtils {
* @return
*/
public static boolean needsCameraPermission(Activity activity) {
// Android only introduced the runtime permission system in Marshmallow (Android 6.0)
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return false;
}
return ContextCompat.checkSelfPermission(activity, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED;
}
@@ -49,21 +44,14 @@ public class PermissionUtils {
* @param activity
* @param requestCode
*/
public static void requestStorageReadPermission(CatimaAppCompatActivity activity, int requestCode) {
public static void requestStorageReadPermission(Activity activity, int requestCode) {
String[] permissions = new String[]{ android.Manifest.permission.READ_EXTERNAL_STORAGE };
int[] mockedResults = new int[]{ PackageManager.PERMISSION_GRANTED };
if (needsStorageReadPermission(activity)) {
ActivityCompat.requestPermissions(activity, permissions, requestCode);
} else {
// FIXME: This points to onMockedRequestPermissionResult instead of to
// onRequestPermissionResult because onRequestPermissionResult was only introduced in
// Android 6.0 (SDK 23) and we and to support Android 5.0 (SDK 21) too.
//
// When minSdk becomes 23, this should point to onRequestPermissionResult directly and
// the activity input variable should be changed from CatimaAppCompatActivity to
// Activity.
activity.onMockedRequestPermissionsResult(requestCode, permissions, mockedResults);
activity.onRequestPermissionsResult(requestCode, permissions, mockedResults);
}
}
@@ -74,21 +62,14 @@ public class PermissionUtils {
* @param activity
* @param requestCode
*/
public static void requestCameraPermission(CatimaAppCompatActivity activity, int requestCode) {
public static void requestCameraPermission(Activity activity, int requestCode) {
String[] permissions = new String[]{ Manifest.permission.CAMERA };
int[] mockedResults = new int[]{ PackageManager.PERMISSION_GRANTED };
if (needsCameraPermission(activity)) {
ActivityCompat.requestPermissions(activity, permissions, requestCode);
} else {
// FIXME: This points to onMockedRequestPermissionResult instead of to
// onRequestPermissionResult because onRequestPermissionResult was only introduced in
// Android 6.0 (SDK 23) and we and to support Android 5.0 (SDK 21) too.
//
// When minSdk becomes 23, this should point to onRequestPermissionResult directly and
// the activity input variable should be changed from CatimaAppCompatActivity to
// Activity.
activity.onMockedRequestPermissionsResult(requestCode, permissions, mockedResults);
activity.onRequestPermissionsResult(requestCode, permissions, mockedResults);
}
}
}
@@ -15,6 +15,7 @@ import java.io.FileNotFoundException
import java.io.IOException
import java.math.BigDecimal
import java.nio.charset.Charset
import java.nio.charset.StandardCharsets
import java.text.DateFormat
import java.text.ParseException
import java.time.ZonedDateTime
@@ -41,7 +42,7 @@ class PkpassParser(context: Context, uri: Uri?) {
private var cardId: String = context.getString(R.string.noBarcode)
private var barcodeId: String? = null
private var barcodeType: CatimaBarcode? = null
private var barcodeEncoding: Charset? = null
private var barcodeEncoding: Charset = StandardCharsets.ISO_8859_1
private var headerColor: Int? = null
private val starStatus = 0
private val lastUsed: Long = 0
@@ -348,11 +349,15 @@ class PkpassParser(context: Context, uri: Uri?) {
try {
cardId = barcodeInfo.getString("altText")
barcodeId = barcodeInfo.getString("message")
barcodeEncoding = Charset.forName(barcodeInfo.getString("messageEncoding"))
} catch (ignored: JSONException) {
cardId = barcodeInfo.getString("message")
barcodeId = null
}
try {
barcodeEncoding = Charset.forName(barcodeInfo.getString("messageEncoding"))
} catch (ignored: Exception) {
// If encoding is not defined, null or otherwise invalid, stick to the default
}
// Don't set barcodeId if it's the same as cardId
@@ -543,14 +543,6 @@ class ScanActivity : CatimaAppCompatActivity() {
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
onMockedRequestPermissionsResult(requestCode, permissions, grantResults)
}
override fun onMockedRequestPermissionsResult(
requestCode: Int,
permissions: Array<String>,
grantResults: IntArray
) {
val granted =
grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED
@@ -2,31 +2,35 @@ package protect.card_locker;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Bundle;
import androidx.annotation.VisibleForTesting;
import androidx.core.content.pm.ShortcutInfoCompat;
import androidx.core.content.pm.ShortcutManagerCompat;
import androidx.core.graphics.ColorUtils;
import androidx.core.graphics.drawable.IconCompat;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
class ShortcutHelper {
// Android documentation says that no more than 5 shortcuts
// are supported. However, that may be too many, as not all
// launcher will show all 5. Instead, the number is limited
// to 3 here, so that the most recent shortcut has a good
// chance of being shown.
private static final int MAX_SHORTCUTS = 3;
import protect.card_locker.cardview.LoyaltyCardViewActivity;
public class ShortcutHelper {
/**
* This variable controls the maximum number of shortcuts available.
* It is made public only to make testing easier and should not be
* manually modified. We use -1 here as a default value to check if
* the value has been set either manually by the test scenario or
* automatically in the `updateShortcuts` function.
* Its actual value will be set based on the maximum amount of shortcuts
* declared by the launcher via `getMaxShortcutCountPerActivity`.
*/
@VisibleForTesting
public static int maxShortcuts = -1;
// https://developer.android.com/reference/android/graphics/drawable/AdaptiveIconDrawable.html
private static final int ADAPTIVE_BITMAP_SCALE = 1;
@@ -35,86 +39,45 @@ class ShortcutHelper {
private static final int ADAPTIVE_BITMAP_IMAGE_SIZE = ADAPTIVE_BITMAP_VISIBLE_SIZE + 5 * ADAPTIVE_BITMAP_SCALE;
/**
* Add a card to the app shortcuts, and maintain a list of the most
* recently used cards. If there is already a shortcut for the card,
* the card is marked as the most recently used card. If adding this
* card exceeds the max number of shortcuts, then the least recently
* used card shortcut is discarded.
* Update the dynamic shortcut list with the most recently viewed cards
* based on the lastUsed field. Archived cards are excluded from the shortcuts
* list. The list keeps at most maxShortcuts number of elements.
*/
static void updateShortcuts(Context context, LoyaltyCard card) {
if (card.archiveStatus == 1) {
// Don't add archived card to menu
return;
public static void updateShortcuts(Context context) {
if (maxShortcuts == -1) {
maxShortcuts = ShortcutManagerCompat.getMaxShortcutCountPerActivity(context);
}
LinkedList<ShortcutInfoCompat> list = new LinkedList<>(ShortcutManagerCompat.getDynamicShortcuts(context));
SQLiteDatabase database = new DBHelper(context).getReadableDatabase();
String shortcutId = Integer.toString(card.id);
// Sort the shortcuts by rank, so working with the relative order will be easier.
// This sorts so that the lowest rank is first.
Collections.sort(list, Comparator.comparingInt(ShortcutInfoCompat::getRank));
Integer foundIndex = null;
for (int index = 0; index < list.size(); index++) {
if (list.get(index).getId().equals(shortcutId)) {
// Found the item already
foundIndex = index;
break;
}
}
if (foundIndex != null) {
// If the item is already found, then the list needs to be
// reordered, so that the selected item now has the lowest
// rank, thus letting it survive longer.
ShortcutInfoCompat found = list.remove(foundIndex.intValue());
list.addFirst(found);
} else {
// The item is new to the list. We add it and trim the list later.
ShortcutInfoCompat shortcut = createShortcutBuilder(context, card).build();
list.addFirst(shortcut);
}
LinkedList<ShortcutInfoCompat> finalList = new LinkedList<>();
int rank = 0;
DBHelper dbHelper = new DBHelper(context);
SQLiteDatabase database = dbHelper.getReadableDatabase();
try (Cursor loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(
database,
"",
null,
DBHelper.LoyaltyCardOrder.LastUsed,
DBHelper.LoyaltyCardOrderDirection.Ascending,
DBHelper.LoyaltyCardArchiveFilter.Unarchived
)) {
int rank = 0;
// The ranks are now updated; the order in the list is the rank.
for (int index = 0; index < list.size(); index++) {
ShortcutInfoCompat prevShortcut = list.get(index);
while (rank < maxShortcuts && loyaltyCardCursor.moveToNext()) {
int id = loyaltyCardCursor.getInt(loyaltyCardCursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ID));
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(context, database, id);
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(context, database, Integer.parseInt(prevShortcut.getId()));
// skip outdated cards that no longer exist
if (loyaltyCard != null) {
ShortcutInfoCompat updatedShortcut = createShortcutBuilder(context, loyaltyCard)
.setRank(rank)
.build();
finalList.addLast(updatedShortcut);
rank++;
// trim the list
if (rank >= MAX_SHORTCUTS) {
break;
}
}
} finally {
dbHelper.close();
}
ShortcutManagerCompat.setDynamicShortcuts(context, finalList);
}
/**
* Remove the given card id from the app shortcuts, if such a
* shortcut exists.
*/
static void removeShortcut(Context context, int cardId) {
ShortcutManagerCompat.removeDynamicShortcuts(context, Collections.singletonList(Integer.toString(cardId)));
}
static @NotNull
Bitmap createAdaptiveBitmap(@NotNull Bitmap in, int paddingColor) {
Bitmap ret = Bitmap.createBitmap(ADAPTIVE_BITMAP_SIZE, ADAPTIVE_BITMAP_SIZE, Bitmap.Config.ARGB_8888);
@@ -130,7 +93,7 @@ class ShortcutHelper {
intent.setAction(Intent.ACTION_MAIN);
// Prevent instances of the view activity from piling up; if one exists let this
// one replace it.
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
final Bundle bundle = new Bundle();
bundle.putInt(LoyaltyCardViewActivity.BUNDLE_ID, loyaltyCard.id);
intent.putExtras(bundle);
@@ -150,4 +113,4 @@ class ShortcutHelper {
.setIntent(intent)
.setIcon(icon);
}
}
}
@@ -40,16 +40,9 @@ class UCropWrapper : UCropActivity() {
return
}
if (Build.VERSION.SDK_INT >= 23) {
val decorView = window.decorView
val wic = WindowInsetsControllerCompat(window, decorView)
wic.isAppearanceLightStatusBars = !darkMode
} else if (!darkMode) {
window.statusBarColor = ColorUtils.compositeColors(
Color.argb(127, 0, 0, 0),
window.statusBarColor
)
}
val decorView = window.decorView
val wic = WindowInsetsControllerCompat(window, decorView)
wic.isAppearanceLightStatusBars = !darkMode
}
private fun checkViews(darkMode: Boolean) {
@@ -0,0 +1,103 @@
package protect.card_locker.cardview;
import java.util.ArrayList;
import java.util.List;
final class LoyaltyCardImageNavigator {
private final List<LoyaltyCardImageType> imageTypes;
private int currentIndex;
LoyaltyCardImageNavigator(List<LoyaltyCardImageType> imageTypes, int currentIndex) {
this.imageTypes = new ArrayList<>(imageTypes);
this.currentIndex = clampIndex(currentIndex);
}
LoyaltyCardImageType getCurrent() {
if (isEmpty()) {
return LoyaltyCardImageType.NONE;
}
return imageTypes.get(currentIndex);
}
boolean isEmpty() {
return imageTypes.isEmpty();
}
int size() {
return imageTypes.size();
}
boolean remove(LoyaltyCardImageType type) {
int removedIndex = imageTypes.indexOf(type);
if (removedIndex == -1) {
return false;
}
imageTypes.remove(removedIndex);
currentIndex = clampIndex(currentIndex);
return true;
}
boolean canGoPrevious() {
return currentIndex > 0;
}
boolean canGoNext() {
return currentIndex < imageTypes.size() - 1;
}
boolean movePrevious() {
if (!canGoPrevious()) {
return false;
}
currentIndex--;
return true;
}
boolean moveNext(boolean overflow) {
if (isEmpty()) {
return false;
}
if (canGoNext()) {
currentIndex++;
return true;
}
if (overflow) {
currentIndex = 0;
return true;
}
return false;
}
int getCurrentIndex() {
return currentIndex;
}
LoyaltyCardImageType peekNext(boolean overflow) {
if (isEmpty()) {
return LoyaltyCardImageType.NONE;
}
if (canGoNext()) {
return imageTypes.get(currentIndex + 1);
}
return overflow ? imageTypes.get(0) : getCurrent();
}
private int clampIndex(int index) {
if (imageTypes.isEmpty()) {
return 0;
}
return Math.max(0, Math.min(index, imageTypes.size() - 1));
}
}
enum LoyaltyCardImageType {
NONE,
ICON,
BARCODE,
IMAGE_FRONT,
IMAGE_BACK
}
@@ -0,0 +1,183 @@
package protect.card_locker.cardview;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.view.View;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.android.material.card.MaterialCardView;
import com.google.android.material.color.MaterialColors;
import java.nio.charset.Charset;
import protect.card_locker.*;
import protect.card_locker.async.TaskHandler;
final class LoyaltyCardMainImageRenderer {
private final Context context;
private final TaskHandler tasks = new TaskHandler();
private final BarcodeImageWriterResultCallback barcodeCallback;
LoyaltyCardMainImageRenderer(
Context context,
BarcodeImageWriterResultCallback barcodeCallback
) {
this.context = context;
this.barcodeCallback = barcodeCallback;
}
void renderCurrent(
LoyaltyCardImageType imageType,
Bitmap frontImageBitmap,
Bitmap backImageBitmap,
CatimaBarcode format,
Charset barcodeEncoding,
String cardIdString,
String barcodeIdString,
ImageView barcodeRenderTarget,
TextView mainImageDescription,
MaterialCardView mainCardView,
boolean isFullscreen,
boolean waitForResize
) {
if (imageType == LoyaltyCardImageType.NONE) {
// With no renderable media left, show the raw card ID instead of an empty card area.
barcodeRenderTarget.setVisibility(View.GONE);
mainCardView.setCardBackgroundColor(Color.TRANSPARENT);
mainImageDescription.setTextColor(
MaterialColors.getColor(
mainImageDescription,
com.google.android.material.R.attr.colorOnSurfaceVariant
)
);
mainImageDescription.setText(cardIdString);
return;
}
if (imageType == LoyaltyCardImageType.BARCODE) {
barcodeRenderTarget.setBackgroundColor(Color.WHITE);
mainCardView.setCardBackgroundColor(Color.WHITE);
mainImageDescription.setTextColor(context.getResources().getColor(R.color.md_theme_light_onSurfaceVariant));
if (waitForResize) {
redrawBarcodeAfterResize(
barcodeRenderTarget,
barcodeIdString,
cardIdString,
format,
barcodeEncoding,
!isFullscreen,
isFullscreen
);
} else {
drawBarcode(
barcodeRenderTarget,
barcodeIdString,
cardIdString,
format,
barcodeEncoding,
!isFullscreen,
isFullscreen
);
}
mainImageDescription.setText(cardIdString);
barcodeRenderTarget.setContentDescription(
context.getString(R.string.barcodeImageDescriptionWithType, format.prettyName())
);
} else if (imageType == LoyaltyCardImageType.IMAGE_FRONT) {
barcodeRenderTarget.setImageBitmap(frontImageBitmap);
barcodeRenderTarget.setBackgroundColor(Color.TRANSPARENT);
mainCardView.setCardBackgroundColor(Color.TRANSPARENT);
mainImageDescription.setTextColor(
MaterialColors.getColor(
mainImageDescription,
com.google.android.material.R.attr.colorOnSurfaceVariant
)
);
mainImageDescription.setText(context.getString(R.string.frontImageDescription));
barcodeRenderTarget.setContentDescription(context.getString(R.string.frontImageDescription));
} else if (imageType == LoyaltyCardImageType.IMAGE_BACK) {
barcodeRenderTarget.setImageBitmap(backImageBitmap);
barcodeRenderTarget.setBackgroundColor(Color.TRANSPARENT);
mainCardView.setCardBackgroundColor(Color.TRANSPARENT);
mainImageDescription.setTextColor(
MaterialColors.getColor(
mainImageDescription,
com.google.android.material.R.attr.colorOnSurfaceVariant
)
);
mainImageDescription.setText(context.getString(R.string.backImageDescription));
barcodeRenderTarget.setContentDescription(context.getString(R.string.backImageDescription));
} else {
throw new IllegalArgumentException("Unknown image type: " + imageType);
}
barcodeRenderTarget.setVisibility(View.VISIBLE);
}
private void redrawBarcodeAfterResize(
ImageView barcodeRenderTarget,
String barcodeIdString,
String cardIdString,
CatimaBarcode format,
Charset barcodeEncoding,
boolean addPadding,
boolean isFullscreen
) {
if (format == null) {
return;
}
// Barcode dimensions depend on the final ImageView size, so wait for layout before rendering.
barcodeRenderTarget.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
barcodeRenderTarget.getViewTreeObserver().removeOnGlobalLayoutListener(this);
drawBarcode(
barcodeRenderTarget,
barcodeIdString,
cardIdString,
format,
barcodeEncoding,
addPadding,
isFullscreen
);
}
});
}
private void drawBarcode(
ImageView barcodeRenderTarget,
String barcodeIdString,
String cardIdString,
CatimaBarcode format,
Charset barcodeEncoding,
boolean addPadding,
boolean isFullscreen
) {
// Barcodes are regenerated eagerly because zoom/fullscreen changes affect the output bitmap.
tasks.flushTaskList(TaskHandler.TYPE.BARCODE, true, false, false);
if (format == null) {
return;
}
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(
context.getApplicationContext(),
barcodeRenderTarget,
barcodeIdString != null ? barcodeIdString : cardIdString,
format,
barcodeEncoding,
null,
false,
barcodeCallback,
addPadding,
isFullscreen
);
tasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
}
}
@@ -0,0 +1,246 @@
package protect.card_locker.cardview;
import android.content.Context;
import android.graphics.Color;
import android.text.InputType;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextUtils;
import android.text.method.DigitsKeyListener;
import android.text.style.ForegroundColorSpan;
import android.text.util.Linkify;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AlertDialog;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import com.google.android.material.textfield.TextInputEditText;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.function.Predicate;
import protect.card_locker.*;
final class LoyaltyCardViewDialogs {
interface BalanceUpdateListener {
void onBalanceUpdated(BigDecimal newBalance);
}
void showInfoDialog(Context context, LoyaltyCard loyaltyCard, List<Group> loyaltyCardGroups) {
AlertDialog.Builder infoDialog = new MaterialAlertDialogBuilder(context);
int dialogContentPadding = context.getResources().getDimensionPixelSize(R.dimen.alert_dialog_content_padding);
infoDialog.setTitle(loyaltyCard.store);
TextView infoTextview = new TextView(context);
infoTextview.setPadding(
dialogContentPadding,
dialogContentPadding / 2,
dialogContentPadding,
0
);
infoTextview.setAutoLinkMask(Linkify.EMAIL_ADDRESSES | Linkify.PHONE_NUMBERS | Linkify.WEB_URLS);
infoTextview.setTextIsSelectable(true);
SpannableStringBuilder infoText = new SpannableStringBuilder();
if (!loyaltyCard.note.isEmpty()) {
infoText.append(loyaltyCard.note);
}
if (!loyaltyCardGroups.isEmpty()) {
List<String> groupNames = new ArrayList<>();
for (Group group : loyaltyCardGroups) {
groupNames.add(group._id);
}
padSpannableString(infoText);
infoText.append(context.getString(R.string.groupsList, TextUtils.join(", ", groupNames)));
}
if (hasBalance(loyaltyCard)) {
padSpannableString(infoText);
infoText.append(context.getString(
R.string.balanceSentence,
Utils.formatBalance(context, loyaltyCard.balance, loyaltyCard.balanceType)
));
}
appendDateInfo(
context,
infoText,
loyaltyCard.validFrom,
Utils::isNotYetValid,
R.string.validFromSentence,
R.string.validFromSentence
);
appendDateInfo(
context,
infoText,
loyaltyCard.expiry,
Utils::hasExpired,
R.string.expiryStateSentenceExpired,
R.string.expiryStateSentence
);
infoTextview.setText(infoText);
infoDialog.setView(infoTextview);
infoDialog.setPositiveButton(R.string.ok, (dialogInterface, i) -> dialogInterface.dismiss());
infoDialog.create().show();
}
void showBalanceUpdateDialog(
Context context,
LoyaltyCard loyaltyCard,
BalanceUpdateListener balanceUpdateListener
) {
AlertDialog.Builder builder = new MaterialAlertDialogBuilder(context);
builder.setTitle(R.string.updateBalanceTitle);
FrameLayout container = new FrameLayout(context);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
);
int contentPadding = context.getResources().getDimensionPixelSize(R.dimen.alert_dialog_content_padding);
params.leftMargin = contentPadding;
params.topMargin = contentPadding / 2;
params.rightMargin = contentPadding;
LinearLayout layout = new LinearLayout(context);
layout.setOrientation(LinearLayout.VERTICAL);
TextView currentTextview = new TextView(context);
currentTextview.setText(context.getString(
R.string.currentBalanceSentence,
Utils.formatBalance(context, loyaltyCard.balance, loyaltyCard.balanceType)
));
layout.addView(currentTextview);
final TextInputEditText input = new TextInputEditText(context);
input.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);
input.setKeyListener(DigitsKeyListener.getInstance("0123456789,."));
input.setHint(R.string.updateBalanceHint);
layout.addView(input);
layout.setLayoutParams(params);
container.addView(layout);
builder.setView(container);
builder.setPositiveButton(R.string.spend, (dialogInterface, i) -> {
try {
BigDecimal balanceChange = Utils.parseBalance(input.getText().toString(), loyaltyCard.balanceType);
BigDecimal newBalance = loyaltyCard.balance.subtract(balanceChange).max(new BigDecimal(0));
balanceUpdateListener.onBalanceUpdated(newBalance);
Toast.makeText(
context,
context.getString(
R.string.newBalanceSentence,
Utils.formatBalance(context, newBalance, loyaltyCard.balanceType)
),
Toast.LENGTH_LONG
).show();
} catch (ParseException e) {
Toast.makeText(context, R.string.amountParsingFailed, Toast.LENGTH_LONG).show();
}
});
builder.setNegativeButton(R.string.receive, (dialogInterface, i) -> {
try {
BigDecimal balanceChange = Utils.parseBalance(input.getText().toString(), loyaltyCard.balanceType);
BigDecimal newBalance = loyaltyCard.balance.add(balanceChange);
balanceUpdateListener.onBalanceUpdated(newBalance);
Toast.makeText(
context,
context.getString(
R.string.newBalanceSentence,
Utils.formatBalance(context, newBalance, loyaltyCard.balanceType)
),
Toast.LENGTH_LONG
).show();
} catch (ParseException e) {
Toast.makeText(context, R.string.amountParsingFailed, Toast.LENGTH_LONG).show();
}
});
builder.setNeutralButton(context.getString(R.string.cancel), (dialog, which) -> dialog.cancel());
AlertDialog dialog = builder.create();
// Button state depends on the parsed input, so listeners must be bound after the dialog exists.
input.addTextChangedListener(new SimpleTextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
BigDecimal balanceChange;
try {
balanceChange = Utils.parseBalance(s.toString(), loyaltyCard.balanceType);
} catch (ParseException e) {
input.setError(context.getString(R.string.amountParsingFailed));
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false);
return;
}
input.setError(null);
boolean hasNonZeroValue = !balanceChange.equals(new BigDecimal(0));
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(hasNonZeroValue);
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(hasNonZeroValue);
}
});
dialog.show();
// Touching dialog buttons before show() can crash because they are not created yet.
dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false);
dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false);
if (dialog.getWindow() != null) {
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
// Focus immediately so the keyboard opens on the amount field.
input.requestFocus();
}
private boolean hasBalance(LoyaltyCard loyaltyCard) {
return !loyaltyCard.balance.equals(new BigDecimal(0));
}
private SpannableStringBuilder padSpannableString(SpannableStringBuilder spannableStringBuilder) {
if (spannableStringBuilder.length() > 0) {
spannableStringBuilder.append("\n\n");
}
return spannableStringBuilder;
}
private void appendDateInfo(
Context context,
SpannableStringBuilder infoText,
Date date,
Predicate<Date> dateCheck,
@StringRes int dateCheckTrueString,
@StringRes int dateCheckFalseString
) {
if (date == null) {
return;
}
String formattedDate = DateFormat.getDateInstance(DateFormat.LONG).format(date);
padSpannableString(infoText);
if (dateCheck.test(date)) {
int start = infoText.length();
infoText.append(context.getString(dateCheckTrueString, formattedDate));
infoText.setSpan(new ForegroundColorSpan(Color.RED), start, infoText.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
} else {
infoText.append(context.getString(dateCheckFalseString, formattedDate));
}
}
}
@@ -1,6 +1,8 @@
package protect.card_locker.compose
import androidx.activity.OnBackPressedDispatcher
import androidx.appcompat.app.AppCompatDelegate
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.ExperimentalMaterial3Api
@@ -8,18 +10,38 @@ import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
import protect.card_locker.R
import protect.card_locker.preferences.Settings
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun CatimaTopAppBar(title: String, onBackPressedDispatcher: OnBackPressedDispatcher?) {
// Use pure black in OLED theme
val context = LocalContext.current
val settings = Settings(context)
val isDarkMode = when (settings.theme) {
AppCompatDelegate.MODE_NIGHT_NO -> false
AppCompatDelegate.MODE_NIGHT_YES -> true
else -> isSystemInDarkTheme()
}
val appBarColors = if (isDarkMode && settings.oledDark) {
TopAppBarDefaults.topAppBarColors().copy(containerColor = Color.Black)
} else {
TopAppBarDefaults.topAppBarColors()
}
TopAppBar(
modifier = Modifier.testTag("topbar_catima"),
title = { Text(text = title) },
colors = appBarColors,
navigationIcon = {
if (onBackPressedDispatcher != null) {
IconButton(onClick = { onBackPressedDispatcher.onBackPressed() }) {
@@ -32,7 +32,7 @@ public class CardsContentProvider extends ContentProvider {
public static final String MAJOR_COLUMN = "major";
public static final String MINOR_COLUMN = "minor";
public static final int MAJOR = 1;
public static final int MINOR = 0;
public static final int MINOR = 1;
}
private static final int URI_VERSION = 0;
@@ -52,7 +52,7 @@ public class CardsContentProvider extends ContentProvider {
LoyaltyCardDbIds.CARD_ID,
LoyaltyCardDbIds.BARCODE_ID,
LoyaltyCardDbIds.BARCODE_TYPE,
// FIXME: Expose BARCODE_ENCODING but without ever exposing the null value (so apps using this don't have to guess)
LoyaltyCardDbIds.BARCODE_ENCODING,
LoyaltyCardDbIds.STAR_STATUS,
LoyaltyCardDbIds.LAST_USED,
LoyaltyCardDbIds.ARCHIVE_STATUS,
@@ -77,13 +77,6 @@ public class CardsContentProvider extends ContentProvider {
@Nullable final String selection,
@Nullable final String[] selectionArgs,
@Nullable final String sortOrder) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
// Disable the content provider on SDK < 23 since it grants dangerous
// permissions at install-time
Log.w(TAG, "Content provider read is only available for SDK >= 23");
return null;
}
final Settings settings = new Settings(getContext());
if (!settings.getAllowContentProviderRead()) {
Log.w(TAG, "Content provider read is disabled");
@@ -155,7 +155,7 @@ public class CatimaExporter implements Exporter {
card.cardId,
card.barcodeId,
card.barcodeType != null ? card.barcodeType.name() : "",
card.barcodeEncoding != null ? card.barcodeEncoding.name() : "",
card.barcodeEncoding.name(),
card.headerColor,
card.starStatus,
card.lastUsed,
@@ -459,7 +459,10 @@ public class CatimaImporter implements Importer {
barcodeType = CatimaBarcode.fromName(unparsedBarcodeType);
}
Charset barcodeEncoding = null;
// Barcode encoding information is only supported since Catima 2.41.0, so old exports will lack this field
// Database migration 19 forcing ISO-8859-1 on all cards, so we should treat imports from old Catima versions the same and force ISO-8859-1 there too
// This limits the risk of breaking cards when importing an old database backup
Charset barcodeEncoding = StandardCharsets.ISO_8859_1;
String unparsedBarcodeEncoding = CSVHelpers.extractString(DBHelper.LoyaltyCardDbIds.BARCODE_ENCODING, record, "");
if (!unparsedBarcodeEncoding.isEmpty()) {
barcodeEncoding = Charset.forName(unparsedBarcodeEncoding);
@@ -160,7 +160,7 @@ public class FidmeImporter implements Importer {
cardId,
null,
barcodeType,
null,
StandardCharsets.ISO_8859_1,
headerColor,
starStatus,
Utils.getUnixTime(),
@@ -162,7 +162,7 @@ public class VoucherVaultImporter implements Importer {
cardId,
null,
barcodeType,
null,
StandardCharsets.ISO_8859_1,
headerColor,
0,
Utils.getUnixTime(),
@@ -82,6 +82,10 @@ public class Settings {
return getBoolean(R.string.settings_key_disable_lockscreen_while_viewing_card, true);
}
public boolean getDisableNfcWhileViewingCard() {
return getBoolean(R.string.settings_key_disable_nfc_while_viewing_card, true);
}
public boolean getAllowContentProviderRead() {
return getBoolean(R.string.settings_key_allow_content_provider_read, true);
}
@@ -157,12 +157,6 @@ class SettingsActivity : CatimaAppCompatActivity() {
true
}
// Disable content provider on SDK < 23 since dangerous permissions
// are granted at install-time
val contentProviderReadPreference = findPreference<Preference>(getString(R.string.settings_key_allow_content_provider_read))
contentProviderReadPreference!!.isVisible =
Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
// Hide crash reporter settings on builds it's not enabled on
val crashReporterPreference = findPreference<Preference>("acra.enable")
crashReporterPreference!!.isVisible = BuildConfig.useAcraCrashReporter
@@ -109,7 +109,8 @@
android:id="@+id/storeNameEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="true" />
android:singleLine="true"
android:inputType="textCapWords" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
+37 -33
View File
@@ -6,95 +6,99 @@ Allan Nordhøy
Heimen Stoffels
Oğuz Ersen
FC (Fay) Stegerman
StoyanDimitrov
大王叫我来巡山
B o d o
StoyanDimitrov
SlavekB
Katharine Chui
Katharine Chui / Katie
mondstern
IllusiveMan196
Silvério Santos
Altonss
Максим Горпиніч
Edgars Andersons
Joel A
Michael Moroni
Liner Seven
Altonss
Fjuro
Joel A
GitSpoon
Michael Moroni
Priit Jõerüüt
Eric
Максим Горпиніч
GitSpoon
Fjuro
GM
Petr Novák
laralem
Taco
Milo Ivir
nadiafekihahmed
pfaffenrodt
Aayush Gupta
Scrambled777
josé m
Nyatsuki
ikanakova
Vasilis
Kachelkaiser
ikanakova
Nyatsuki
Giovanni Donisi
Milo Ivir
Горпиніч Максим Олександрович
HudobniVolk
Kachelkaiser
Jiri Grönroos
HudobniVolk
Warder
Samantaz Fox
Balázs Meskó
109247019824
Feike Donia
Arno-github
Cliff Heraldo
Samantaz Fox
AMIR-G98
Balázs Meskó
Sergio Paredes
Cliff Heraldo
Ankit Tiwari
Arno-github
Feike
Jose Delvani
Robin
Milan Šalka
mdvhimself
தமிழ்நேரம்
Govindgopalyadav
damjang
Skrripy
Traductor
mdvhimself
Milan Šalka
Robin
தமிழ்நேரம்
huuhaa
Skrripy
Govindgopalyadav
Gideon
waffshappen
Marnick L'Eau
JungHee Lee
pacavarn
ngocanhtve
aradxxx
StellarSand
Quentin PAGÈS
Projjal Moitra
Aliaksandr Trush
e-michalak
JungHee Lee
AMIR-G98
hajertabbane
inavleb
Ziad OUALHADJ
Aliaksandr Trush
Denis Shilin
Traductor
Gideon
Renko
Ricky Tigg
Robin Liu
Ziad OUALHADJ
しいたけ
Alexander Ivanov
Miha Frangež
stavpup
mrestivill
ezn24
ehrt74
Virginie
Tim Trek
MisterCosta96
Alì Mortacci
Andre Costa
arshbeerSingh
Augustin LAVILLE
Freddo espresso
vasudev-cell
Govind S Nair
Kim Seohyun
echo r"0xX4H" | rev
rudy3
Michael Gangolf
PRATHAMESH BHAGAT
Peter Dave Hello
Thomas Bertels
+63 -49
View File
@@ -1,40 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="action_search">بحث</string>
<string name="action_add">أضف</string>
<string name="noGiftCards">اضغط على زر الإضافة + لإضافة بطاقة، أو استورد من القائمة خلال</string>
<string name="noMatchingGiftCards">لا نتائج. حاول تغيير كلمات البحث.</string>
<string name="action_add">إضافة</string>
<string name="noGiftCards">اضغط على زر + لإضافة بطاقة، أو استورد من خلال قائمة ⋮</string>
<string name="noMatchingGiftCards">لا توجد نتائج. حاول تغيير بحثك.</string>
<string name="storeName">اسم</string>
<string name="note">مذكرة</string>
<string name="note">ملاحظة</string>
<string name="cardId">معرّف البطاقة</string>
<string name="barcodeType">نوع الباركود</string>
<string name="noBarcode">لا يوجد باركود</string>
<string name="star">أضف الى المفضلة</string>
<string name="unstar">حذف من المفضلة</string>
<string name="star">إضافة إلى المفضّلة</string>
<string name="unstar">حذف من المفضّلة</string>
<string name="cancel">إلغاء</string>
<string name="save">حفظ</string>
<string name="edit">تعديل</string>
<string name="delete">مسح</string>
<string name="delete">حذف</string>
<string name="confirm">تأكيد</string>
<string name="deleteConfirmation">مسح هذة البطاقة نهائيا؟</string>
<string name="ok">حسنا</string>
<string name="share">شارك</string>
<string name="sendLabel">ارسل…</string>
<string name="editCardTitle">عدل البطاقة</string>
<string name="addCardTitle">اضف بطاقة</string>
<string name="scanCardBarcode">مسح باركود</string>
<string name="deleteConfirmation">حذف هذه البطاقة نهائيًا؟</string>
<string name="ok">حسنًا</string>
<string name="share">مشاركة</string>
<string name="sendLabel">إرسال…</string>
<string name="editCardTitle">تعديل البطاقة</string>
<string name="addCardTitle">إضافة بطاقة</string>
<string name="scanCardBarcode">مسح الباركود</string>
<string name="cardShortcut">اختصار البطاقة</string>
<string name="noCardsMessage">اضف بطاقة أولا</string>
<string name="noCardsMessage">أضف بطاقة أولًا</string>
<string name="barcodeImageDescriptionWithType">صورة <xliff:g>%s</xliff:g> الباركود</string>
<string name="noCardExistsError">لا يمكن العثور على هذه البطاقة</string>
<string name="failedParsingImportUriError">لا يمكن تحليل الرابط المستورد</string>
<string name="noCardExistsError">لم يتمّ العثور على تلك البطاقة</string>
<string name="failedParsingImportUriError">لا يمكن تحليل عنوان URL المستورد</string>
<string name="importExport">استيراد/تصدير</string>
<string name="importExportHelp">انشاء نسخة احتياطية من بياناتك يسمح بنقلها إلى جهاز آخر.</string>
<string name="importFailed">تعذر إجراء الاستيراد</string>
<string name="exportSuccessfulTitle">متصدر</string>
<string name="importExportHelp">تتيح لك عملية النسخ الاحتياطي لبياناتك نقلها إلى جهاز آخر</string>
<string name="importFailed">تعذّر إجراء عملية الاستيراد</string>
<string name="exportSuccessfulTitle">تمّ التصدير</string>
<string name="exportFailedTitle">فشل التصدير</string>
<string name="exportFailed">لا يمكن عمل التصدير</string>
<string name="exportOptionExplanation">ستتم كتابة البيانات في الموقع الذي تختاره.</string>
<string name="exportFailed">تعذّر إجراء عملية التصدير</string>
<string name="exportOptionExplanation">ستكون البيانات مكتوبة في المسار الذي تختاره</string>
<string name="importOptionFilesystemButton">من نظام الملفات</string>
<string name="about">حول</string>
<string name="app_copyright_old">بناء على Loyalty Card Keychain
@@ -53,7 +53,7 @@
<string name="exportSuccessful">تم تصدير البيانات</string>
<string name="enter_group_name">أدخل اسم المجموعة</string>
<string name="group_edit">تعديل المجموعة</string>
<string name="noGroups">اضغط زر + لإضافة مجموعات للتصنيف.</string>
<string name="noGroups">اضغط زر + لإضافة مجموعات للتصنيف</string>
<string name="noGroupCards">هذه المجموعة فارغة</string>
<string name="group_name_already_in_use">اسم المجموعة قيد الاستخدام بالفعل</string>
<string name="group_name_is_empty">لا يمكن أن يكون اسم المجموعة فارغًا</string>
@@ -73,9 +73,9 @@
<string name="importCatima">الاستيراد من Catima</string>
<string name="importCatimaMessage">حدّد ملفك تصدير من Catima للاستيراد.\nإنشئها من قائمة الاستيراد / التصدير لتطبيق Catima آخر بالضغط على تصدير .</string>
<string name="importFidme">الاستيراد من FidMe</string>
<string name="importFidmeMessage">حدّد ملفك <i>fidme-export-request-xxxxxx.zip</i> تصدير من FidMe للاستيراد، ثم حدد أنواع الباركود يدويًا بعد ذلك. \nإنشئها من ملف تعريف FidMe الخاص بك عن طريق اختيار حماية البيانات ثم الضغط على استخراج بياناتي أولاً.</string>
<string name="importFidmeMessage">حدّد للتصدير من FidMe للاستيراد، ثم حدد أنواع الباركود يدويًا بعد ذلك. \nقم بإنشاءها من ملفك التعريفي في FidMe عن طريق اختيار \"حماية البيانات\" ثم النقر على \"استخراج بياناتي\".</string>
<string name="importVoucherVault">الاستيراد من Voucher Vault</string>
<string name="importVoucherVaultMessage">حدّد ملفك <i>vouchervault.json</i> تصدير من Voucher Vault للاستيراد. \nإنشئها بالضغط على تصدير في Voucher Vault أولاً.</string>
<string name="importVoucherVaultMessage">حدّد ملفك <i>vouchervault.json</i> تصدير من Voucher Vault للاستيراد.\nإنشئها بالضغط على تصدير في Voucher Vault.</string>
<string name="barcodeId">قيمة الباركود</string>
<string name="sameAsCardId">نفس بطاقة الهوية</string>
<string name="setBarcodeId">عيّن قيمة الباركود</string>
@@ -122,8 +122,8 @@
<string name="archived">تمت أرشفة البطاقة</string>
<string name="unarchived">البطاقة غير مؤرشفة</string>
<string name="failedLaunchingPhotoPicker">تعذر العثور على تطبيق معرض مدعوم</string>
<string name="noGiftCardsGroup">أنشئ بعض البطاقات، ثم عيّنهم لهذه المجموعة.</string>
<string name="deleteTitle">مسح بطاقة</string>
<string name="noGiftCardsGroup">أنشئ بعض البطاقات، ثم عيّنهم لهذه المجموعة</string>
<string name="deleteTitle">حذف البطاقة</string>
<plurals name="selectedCardCount">
<item quantity="zero"><xliff:g>%d</xliff:g> محدد</item>
<item quantity="one"><xliff:g>%d</xliff:g> محددة</item>
@@ -132,11 +132,11 @@
<item quantity="many"><xliff:g>%d</xliff:g> محدد</item>
<item quantity="other"><xliff:g>%d</xliff:g> محدد</item>
</plurals>
<string name="importing">جار الاستيراد…</string>
<string name="importing">جارٍ الاستيراد…</string>
<string name="exportName">تصدير</string>
<string name="exporting">جار التصدير…</string>
<string name="importSuccessfulTitle">مستورد</string>
<string name="importFailedTitle">فشل بالاستيراد</string>
<string name="importSuccessfulTitle">تمّ الاستيراد</string>
<string name="importFailedTitle">فشل الاستيراد</string>
<string name="sort_by_most_recently_used">الأكثر أستعمالا مؤخرا</string>
<string name="license">رخصة</string>
<string name="sort_by_name">اسم</string>
@@ -150,23 +150,23 @@
<item quantity="other"><xliff:g>%1$d</xliff:g> بطاقات ( <xliff:g id="archivedCount">%2$d</xliff:g> مؤرشفة)</item>
</plurals>
<plurals name="deleteCardsTitle">
<item quantity="zero">مسح <xliff:g>%d</xliff:g> بطاقة</item>
<item quantity="one">مسح <xliff:g>%d</xliff:g> بطاقة</item>
<item quantity="two">مسح <xliff:g>%d</xliff:g> بطاقتين</item>
<item quantity="few">مسح <xliff:g>%d</xliff:g> بطائق</item>
<item quantity="many">مسح <xliff:g>%d</xliff:g> بطاقة</item>
<item quantity="other">مسح <xliff:g>%d</xliff:g> بطاقة</item>
<item quantity="zero">حذف <xliff:g>%d</xliff:g> بطاقة</item>
<item quantity="one">حذف <xliff:g>%d</xliff:g> بطاقة</item>
<item quantity="two">حذف <xliff:g>%d</xliff:g> بطاقتَين</item>
<item quantity="few">حذف <xliff:g>%d</xliff:g> من البطاقات</item>
<item quantity="many">حذف <xliff:g>%d</xliff:g> من البطاقات</item>
<item quantity="other">حذف <xliff:g>%d</xliff:g> من البطاقات</item>
</plurals>
<plurals name="deleteCardsConfirmation">
<item quantity="zero">مسح هذه <xliff:g>%d</xliff:g> البطاقة نهائيا؟</item>
<item quantity="one">مسح هذه <xliff:g>%d</xliff:g> البطاقة نهائيا؟</item>
<item quantity="two">مسح هذه <xliff:g>%d</xliff:g> البطاقتين نهائيا؟</item>
<item quantity="few">مسح هذه <xliff:g>%d</xliff:g> البطاقات نهائيا؟</item>
<item quantity="many">مسح هذه <xliff:g>%d</xliff:g> البطاقات نهائيا؟</item>
<item quantity="other">مسح هذه <xliff:g>%d</xliff:g> البطاقات نهائيا؟</item>
<item quantity="zero">حذف هذه <xliff:g>%d</xliff:g> البطاقة نهائيًا؟</item>
<item quantity="one">حذف هذه <xliff:g>%d</xliff:g> البطاقة نهائيًا؟</item>
<item quantity="two">حذف هذه <xliff:g>%d</xliff:g> البطاقتين نهائيًا؟</item>
<item quantity="few">حذف هذه <xliff:g>%d</xliff:g> البطاقات نهائيًا؟</item>
<item quantity="many">حذف هذه <xliff:g>%d</xliff:g> البطاقات نهائيًا؟</item>
<item quantity="other">حذف هذه <xliff:g>%d</xliff:g> البطاقات نهائيًا؟</item>
</plurals>
<string name="importOptionFilesystemTitle">الاستيراد من نظام الملفات</string>
<string name="importOptionFilesystemExplanation">اختر ملفًا محددًا من نظام الملفات.</string>
<string name="importOptionFilesystemExplanation">اختر ملفًا محددًا من نظام الملفات</string>
<string name="about_title_fmt">حول <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">نسخة: <xliff:g id="version">%s</xliff:g></string>
<string name="settings_system_theme">النظام</string>
@@ -213,7 +213,7 @@
<string name="report_error">الإبلاغ عن خطأ</string>
<string name="sort_by_expiry">انقضاء</string>
<string name="importLoyaltyCardKeychain">الاستيراد من Loyalty Card Keychain</string>
<string name="importLoyaltyCardKeychainMessage">حدّد ملفك <i>LoyaltyCardKeychain.csv</i> التصدير من Loyalty Card Keychain للاستيراد. \nإنشئها من قائمة الاستيراد / التصدير في Loyalty Card Keychain بالضغط على تصدير هناك أولاً.</string>
<string name="importLoyaltyCardKeychainMessage">حدد تصديرك من سلسلة مفاتيح بطاقة الولاء للتصدير.\nانشئها من قائمة استيراد/تصدير في سلسلة مفاتيح بطاقة الولاء عبر ضغط زر تصدير.</string>
<string name="failedGeneratingShareURL">تعذر إنشاء عنوان URL قابل للمشاركة</string>
<string name="help_translate_this_app">ساعد في ترجمة هذا التطبيق</string>
<string name="on_google_play">على Google Play</string>
@@ -228,17 +228,17 @@
<string name="importCards">استيراد البطاقات</string>
<string name="newBalanceSentence">الرصيد الجديد: <xliff:g>%s</xliff:g></string>
<string name="cameraPermissionDeniedTitle">تعذر الوصول إلى الكاميرا</string>
<string name="noCameraPermissionDirectToSystemSetting">لمسح الباركود، ستحتاج Catima إلى الوصول إلى الكاميرا. اضغط هنا لتغيير إعدادات الأذونات.</string>
<string name="noCameraPermissionDirectToSystemSetting">لمسح الباركود، ستحتاج كاتيما إلى الوصول إلى الكاميرا. اضغط هنا لتغيير إعدادات الأذونات.</string>
<string name="updateBalance">تحديث الرصيد</string>
<string name="updateBalanceHint">أدخل المبلغ</string>
<string name="storageReadPermissionRequired">الصلاحيه للوصل للتخزين مطلوبة لهذا الاجراء…</string>
<string name="storageReadPermissionRequired">الصلاحيه للوصول للتخزين مطلوبة لهذا الاجراء…</string>
<string name="validFromDate">عربيه</string>
<string name="cameraPermissionRequired">إذن للوصول إلى الكاميرا اللازمة لهذا الإجراء…</string>
<string name="anyDate">أي تاريخ</string>
<string name="chooseValidFromDate">اختر صالح من التاريخ</string>
<string name="validFromSentence">صالح من:<xliff:g>%s</xliff:g></string>
<string name="height">الطول</string>
<string name="permissionReadCardsDescription">اقرأ بطاقتك مع جميع التفاصيل، بما فيه الملاحضات والصور</string>
<string name="permissionReadCardsDescription">اقرأ بطاقتك مع جميع التفاصيل، بما فيه الملاحظات والصور</string>
<string name="settings_display_barcode_max_brightness_summary">ظروري لعمل بعض الماسحات الضوئية</string>
<string name="permissionReadCardsLabel">اقرأ بطاقات كاتيما</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">حقوق النشر © 2019<xliff:g>%d</xliff:g> Sylvia van Os والمساهمون</string>
@@ -280,7 +280,7 @@
<string name="spend">انفق</string>
<string name="receive">استلم</string>
<string name="amountParsingFailed">كمية غير صحيحة</string>
<string name="add_manually_warning_message">في بعض المتاجر قيمة الباركود تختلف عن الرقم الموجود على البطاقة. لهذا السبب إدخال الباركود يدوياً لن ينجح دائماً. من المستحسن فحص الباركود بكاميرا بدلا من ذالك. هل انت مُصِر على الاستكمال؟</string>
<string name="add_manually_warning_message">بالنسبة لبعض البطاقات، تختلف قيمة الرمز الشريطي عن الرقم المكتوب عليها. لذا، قد لا ينجح إدخال الرمز الشريطي يدويًا دائمًا. يُنصح بمسح الرمز الشريطي باستخدام الكاميرا. هل ما زلت ترغب في المتابعة؟</string>
<string name="addFromPdfFile">تحديد ملف PDF</string>
<string name="errorReadingFile">لا يمكن قراءة الملف</string>
<string name="failedLaunchingFileManager">لم يتم العثور على مدير ملفات مدعوم</string>
@@ -291,7 +291,7 @@
<string name="exportCancelled">تم الغاء الاستخراج</string>
<string name="useFrontImage">استخدام صورة أمامية</string>
<string name="useBackImage">استخدم صورة خلفية</string>
<string name="addFromPkpass">اختر ملف الدفتر (.pkpass)</string>
<string name="addFromPkpass">اختر ملف الدفتر الحساب [Passbook] (.pkpass. / pkpasses)</string>
<string name="unsupportedFile">هذا الملف غير مدعوم</string>
<string name="generic_error_please_retry">حدث خطأ ما</string>
<string name="settings_use_volume_keys_navigation">بدّل البطاقات باستخدام أزرار الصوت</string>
@@ -313,4 +313,18 @@
<string name="card_list_widget_name">قائمة البطاقات</string>
<string name="cardWithNumber">البطاقة <xliff:g>%d</xliff:g></string>
<string name="cardWithNumberAndLocale">البطاقة <xliff:g>%d</xliff:g> (<xliff:g>%s</xliff:g>)</string>
<string name="card_list_widget_empty">بعد أن تضيف بطاقات الولاء في كاتيما، ستظهر هنا. وإذا كنت تملك البطاقات، تأكد من عدم وجودهن جميعا في الأرشفة.</string>
<string name="pleaseDoNotRotateTheDevice">نرجو منك عدم تدوير الجهاز، أو سيُلغى هذا الإجراء</string>
<string name="acra_catima_has_crashed">نأسف، لقد توقف <xliff:g id="app_name">%s</xliff:g>. ساعدنا في إصلاح هذه المشكلة من خلال إرسال تقرير للأخطاء.</string>
<string name="acra_explain_crash">بقدر الإمكان، نرجو منك أن تضيف مزيدا من المعلومات عمَّ كنت تفعل هنا:</string>
<string name="acra_crash_email_subject">تقرير الأخطاء لـ<xliff:g id="app_name">%s</xliff:g></string>
<string name="copy_value">قيمة النسخ</string>
<string name="copied_to_clipboard">تم النسخ إلى الحافظة</string>
<string name="nothing_to_copy">لم يتم العثور على قيمة</string>
<string name="barcodeEncoding">طريقة ترميز الرمز الشريطي \"الباركود\"</string>
<string name="back">رجوع</string>
<string name="pref_enable_acra">إخطار بإرسال تقارير الأخطاء</string>
<string name="pref_enable_acra_summary">عند التفعيل, سيتم سؤالك للابلاغ بالاعطال عندما تحدث. لا ولن يتم الابلاغ بالاعطال تلفائيا.</string>
<string name="settings_disable_nfc_while_viewing_card">وقف NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">وقف NFC لمنع NFC من العمل أثناء عرض بطاقة</string>
</resources>
+7 -3
View File
@@ -10,7 +10,7 @@
<string name="action_add">Дадаць</string>
<string name="app_name">Catima</string>
<string name="action_search">Пошук</string>
<string name="noGiftCards">Націсніце кнопку + плюс, каб дадаць картку, або імпартуйце праз меню ⋮.</string>
<string name="noGiftCards">Націсніце кнопку + плюс, каб дадаць картку, або імпартуйце праз меню ⋮</string>
<string name="storeName">Назва</string>
<string name="star">Дадаць у абраныя</string>
<string name="unstar">Выдаліць з абраных</string>
@@ -37,7 +37,7 @@
<string name="storageReadPermissionRequired">Для гэтага дзеяння патрабуецца дазвол на чытанне сховішча…</string>
<string name="cameraPermissionRequired">Для гэтага дзеяння патрабуецца дазвол на доступ да камеры…</string>
<string name="permissionReadCardsLabel">Чытаць карты Catima</string>
<string name="exportOptionExplanation">Даныя будуць запісаны ў выбранае вамі месца.</string>
<string name="exportOptionExplanation">Даныя будуць запісаны ў выбранае вамі месца</string>
<string name="importOptionFilesystemExplanation">Выберыце пэўны файл з файлавай сістэмы.</string>
<string name="importOptionFilesystemButton">З файлавай сістэмы</string>
<string name="about">Аб праграме</string>
@@ -65,7 +65,7 @@
<string name="importExport">Імпарт/Экспарт</string>
<string name="importOptionFilesystemTitle">Імпарт з файлавай сістэмы</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Аўтарскае права © 2019–<xliff:g>%d</xliff:g> Sylvia van Os і суаўтары</string>
<string name="importExportHelp">Рэзервовае капіяванне даных дазваляе перанесці іх на іншую прыладу.</string>
<string name="importExportHelp">Рэзервовае капіяванне даных дазваляе перанесці іх на іншую прыладу</string>
<string name="failedParsingImportUriError">Не атрымалася разабраць URI імпарту</string>
<string name="exportFailedTitle">Не ўдалося экспартаваць</string>
<string name="exportFailed">Немагчыма выканаць экспарт</string>
@@ -308,4 +308,8 @@
<string name="card_list_widget_empty">Пасля таго, як вы дадасце некалькі картак лаяльнасці ў Catima, яны з\'явяцца тут. Калі ў вас ёсць карты, пераканайцеся, што яны не ўсе заархіваваны.</string>
<string name="acra_catima_has_crashed">Прабачце, але ў праграме <xliff:g id="app_name">%s</xliff:g> адбыўся збой. Калі ласка, дапамажыце нам выправіць гэту праблему, даслаўшы нам справаздачу аб памылцы.</string>
<string name="back">Назад</string>
<string name="copy_value">Скапіяваць значэнне</string>
<string name="copied_to_clipboard">Скапіявана ў буфер абмену</string>
<string name="nothing_to_copy">Значэнне не знойдзенае</string>
<string name="barcodeEncoding">Кадыяванне штрых-кодаў</string>
</resources>
+6
View File
@@ -299,4 +299,10 @@
<string name="copy_value">Копиране на стойността</string>
<string name="copied_to_clipboard">Копирано</string>
<string name="nothing_to_copy">Няма стойност</string>
<string name="back">Назад</string>
<string name="barcodeEncoding">Кодиране на щрихкода</string>
<string name="settings_disable_nfc_while_viewing_card">Пауза на NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Спира NFC, за да бъдат предотвратени безконтактни плащания при преглед на карта</string>
<string name="nfc_blocked_while_viewing_card">NFC е на пауза</string>
<string name="change_settings">Настройки</string>
</resources>
+239 -25
View File
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="save">Snimi</string>
<string name="cancel">Odustani</string>
<string name="unstar">Ukloni iz omiljenih</string>
@@ -8,15 +8,15 @@
<string name="note">Zabilješka</string>
<string name="storeName">Ime</string>
<string name="noMatchingGiftCards">Nema rezultata. Pokušaj promijeniti pretragu.</string>
<string name="noGiftCards">Kliknite + Plus dugme da dodate kartu ili uvezete nešto iz menija prvo.</string>
<string name="noGiftCards">Kliknite na dugme + plus da biste dodali karticu ili je uvezite iz menija</string>
<string name="action_add">Dodaj</string>
<string name="all">Sve</string>
<string name="noGroupCards">Ova grupa ne sadrži nikakve karte</string>
<string name="noGroups">Kliknite + Plus dugme da dodate grupe za kategorizaciju prvo.</string>
<string name="noGroupCards">Ova grupa je prazna</string>
<string name="noGroups">Kliknite na dugme + plus da biste dodali grupe za kategorizaciju</string>
<string name="groups">Grupe</string>
<string name="enter_group_name">Unesite ime grupe</string>
<string name="exportSuccessful">Podaci o kartama izvožen</string>
<string name="importSuccessful">Uvezeni podaci o kartama</string>
<string name="exportSuccessful">Izvezeni podaci</string>
<string name="importSuccessful">Uvezeni podaci</string>
<string name="intent_import_card_from_url_share_text">Želim podijeliti čestitku s tobom</string>
<string name="settings_disable_lockscreen_while_viewing_card">Spriječi zaključavanje ekrana</string>
<string name="settings_keep_screen_on">Zadrži ekran</string>
@@ -28,38 +28,38 @@
<string name="importLoyaltyCardKeychain">Uvezi iz Loyalty Card Keychain</string>
<string name="importVoucherVault">Uvezi iz trezora vaučer</string>
<string name="barcodeId">Barcode vrijednost</string>
<string name="sameAsCardId">Isto kao i kartica</string>
<string name="sameAsCardId">Isto kao i ID</string>
<string name="setBarcodeId">Postavi vrijednost za bar kod</string>
<string name="unsupportedBarcodeType">Ovaj bar kod još nije prikazan. Ona može biti podržana u kasnijoj verziji app.</string>
<string name="wrongValueForBarcodeType">Izabrana vrijednost nije izvršna</string>
<string name="wrongValueForBarcodeType">Vrijednost nije važeća za odabrani tip barkoda</string>
<string name="intent_import_card_from_url_share_multiple_text">Želim podijeliti karte s tobom</string>
<string name="frontImageDescription">Slika kartice</string>
<string name="backImageDescription">Slika pozadine kartice</string>
<string name="frontImageDescription">Prednja slika</string>
<string name="backImageDescription">Stražnja slika</string>
<string name="photos">Slike</string>
<string name="setFrontImage">Postavi naslovnu sliku</string>
<string name="setBackImage">Vrati sliku</string>
<string name="removeImage">Ukloni sliku</string>
<string name="takePhoto">Slikaj</string>
<string name="updateBarcodeQuestionTitle">Ažurirati bar kod vrijednost\?</string>
<string name="updateBarcodeQuestionText">Promijenio si auto. Da li želite ažurirati bar kod koristiti istu vrijednost\?</string>
<string name="updateBarcodeQuestionText">Promijenili ste ID. Želite li ažurirati i barkod da koristi istu vrijednost?</string>
<string name="yes">Da</string>
<string name="no">Ne.</string>
<string name="passwordRequired">Upišite šifru</string>
<string name="failedGeneratingShareURL">Ne mogu generisati oštriji URL. Molim vas, prijavite ovo.</string>
<string name="passwordRequired">Unesite lozinku</string>
<string name="failedGeneratingShareURL">Nije moguće generirati URL za dijeljenje</string>
<string name="turn_flashlight_on">Upali lampu</string>
<string name="turn_flashlight_off">Ugasi lampu</string>
<string name="settings_locale">Jezik</string>
<string name="settings_system_locale">Sistem</string>
<string name="sort">Poništi sortiranje</string>
<string name="sort_by_name">Ime</string>
<string name="sort_by_most_recently_used">Nedavno Korišten</string>
<string name="sort_by_most_recently_used">Najnovije korišteno</string>
<string name="sort_by_expiry">Sajam</string>
<string name="reverse">Rikverc</string>
<string name="reverse">...obrnutim redoslijedom</string>
<string name="sort_by">Sortiraj</string>
<string name="noCardExistsError">Nisam mogao pronaći tu karticu</string>
<string name="noCardExistsError">Nisam mogao/la pronaći tu karticu</string>
<string name="noCardsMessage">Dodaj prvo kartu</string>
<string name="addCardTitle">Dodaj Kartu</string>
<string name="editCardTitle">Izmijeni Karticu</string>
<string name="addCardTitle">Dodaj karticu</string>
<string name="editCardTitle">Uredi karticu</string>
<string name="sendLabel">Pošalji…</string>
<string name="share">Podijeli</string>
<string name="deleteConfirmation">Izbriši trajno ovu karticu\?</string>
@@ -72,25 +72,239 @@
<string name="exportFailed">Nisam uspio izvršiti izvoz</string>
<string name="app_copyright_old">Bazirano na Loyalty Card privjesku
\ncopyright © 2016-2020 Branden Archer</string>
<string name="noGiftCardsGroup">Kreirajte kartice, i dodajte ih ovdje u grupu.</string>
<string name="importExportHelp">Backupovanje vaših podataka omogućava njihov prenos na drugi uređaj.</string>
<string name="noGiftCardsGroup">Napravite nekoliko kartica, a zatim ih dodijelite grupi ovdje</string>
<string name="importExportHelp">Pravljenje sigurnosne kopije podataka omogućava njihovo premještanje na drugi uređaj</string>
<string name="importSuccessfulTitle">Uvezeno</string>
<string name="exportFailedTitle">Izvoz neuspješan</string>
<string name="scanCardBarcode">Skeniraj barkod</string>
<string name="cardShortcut">Prečica kartice</string>
<string name="failedParsingImportUriError">Nisam uspio parsirati URI za uvoz</string>
<string name="importExport">Uvoz/Izvoz</string>
<string name="failedParsingImportUriError">Nemogu analizirati URI za uvoz</string>
<string name="importExport">Uvoz/izvoz</string>
<string name="exportName">Izvoz</string>
<string name="importFailedTitle">Uvoz neuspješan</string>
<string name="importFailed">Nisam uspio odraditi uvoz</string>
<string name="exportSuccessfulTitle">Izvezeno</string>
<string name="importing">Uvozim…</string>
<string name="exporting">Izvozim…</string>
<string name="exportOptionExplanation">Ovi podaci će biti zapisani na lokaciju po Voj želji.</string>
<string name="exportOptionExplanation">Podaci će biti zapisani na lokaciju po vem izboru</string>
<string name="importOptionFilesystemTitle">Uvoz iz file sistema</string>
<string name="importOptionFilesystemExplanation">Izaberite specifični file iz file sistema.</string>
<string name="importOptionFilesystemExplanation">Odaberite određenu datoteku iz datotečnog sistema</string>
<string name="importOptionFilesystemButton">Iz file sistema</string>
<string name="about">O</string>
<string name="noBarcode">Nema barkoda</string>
<string name="deleteTitle">Obriši karticu</string>
</resources>
<string name="app_name">Catima</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> odabran</item>
<item quantity="few"><xliff:g>%d</xliff:g> odabranih</item>
<item quantity="other"><xliff:g>%d</xliff:g> odabrano</item>
</plurals>
<string name="cameraPermissionRequired">Za ovu radnju potrebna je dozvola za pristup kameri…</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Obriši <xliff:g>%d</xliff:g> karticu</item>
<item quantity="few">Obriši <xliff:g>%d</xliff:g> kartice</item>
<item quantity="other">Obriši <xliff:g>%d</xliff:g> kartica</item>
</plurals>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Trajno izbrisati ovu <xliff:g>%d</xliff:g> karticu?</item>
<item quantity="few">Trajno izbrisati ove <xliff:g>%d</xliff:g> kartice?</item>
<item quantity="other">Trajno izbrisati ovih <xliff:g>%d</xliff:g> kartica?</item>
</plurals>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> kartica</item>
<item quantity="few"><xliff:g>%d</xliff:g> kartice</item>
<item quantity="other"><xliff:g>%d</xliff:g> kartica</item>
</plurals>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> poen</item>
<item quantity="few"><xliff:g>%s</xliff:g> poena</item>
<item quantity="other"><xliff:g>%s</xliff:g> poena</item>
</plurals>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> kartica (<xliff:g id="archivedCount">%2$d</xliff:g> archived)</item>
<item quantity="few"><xliff:g>%1$d</xliff:g> kartice (<xliff:g id="archivedCount">%2$d</xliff:g> archived)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> kartica (<xliff:g id="archivedCount">%2$d</xliff:g> archived)</item>
</plurals>
<string name="barcodeImageDescriptionWithType">Slika <xliff:g>%s</xliff:g> barkoda</string>
<string name="storageReadPermissionRequired">Za ovu radnju potrebna je dozvola za čitanje pohrane…</string>
<string name="permissionReadCardsLabel">Čitajte Catima kartice</string>
<string name="permissionReadCardsDescription">da pročita vaše Catima kartice i sve njihove detalje, uključujući bilješke i slike</string>
<string name="cameraPermissionDeniedTitle">Nije bilo moguće pristupiti kameri</string>
<string name="noCameraPermissionDirectToSystemSetting">Za skeniranje barkodova, Catima će trebati pristup vašoj kameri. Dodirnite ovdje da promijenite postavke dozvola.</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Autorska prava © 2019<xliff:g>%d</xliff:g> Sylvia van Os i saradnici</string>
<string name="app_copyright_short">Autorska prava © Sylvia van Os i saradnici</string>
<string name="app_license">Slobodni softver zaštićen autorskim pravom, licenciran pod GPLv3+</string>
<string name="about_title_fmt">O aplikaciji <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Verzija: <xliff:g id="version">%s</xliff:g></string>
<string name="app_libraries">Biblioteke trećih strana: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_resources">Resursi trećih strana: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="selectBarcodeTitle">Odaberite barkod</string>
<string name="thumbnailDescription">Sličica</string>
<string name="settings">Postavke</string>
<string name="failedOpeningFileManager">Nije moguće otvoriti upravitelj datoteka</string>
<string name="moveUp">Pomakni se prema gore</string>
<string name="moveDown">Pomakni se prema dolje</string>
<string name="leaveWithoutSaveTitle">Izlaz</string>
<string name="leaveWithoutSaveConfirmation">Napustiti bez spremanja?</string>
<string name="addManually">Ručno unesite barkod</string>
<string name="addFromImage">Odaberite sliku iz galerije</string>
<string name="groupsList">Grupe: <xliff:g>%s</xliff:g></string>
<string name="editGroup">Grupa za uređivanje: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Ističe: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Isteklo: <xliff:g>%s</xliff:g></string>
<string name="balanceSentence">Stanje: <xliff:g>%s</xliff:g></string>
<string name="card">Kartica</string>
<string name="editBarcode">Uredi barkod</string>
<string name="expiryDate">Datum isteka</string>
<string name="never">Nikad</string>
<string name="chooseExpiryDate">Odaberite datum isteka</string>
<string name="moveBarcodeToTopOfScreen">Pomaknite barkod na vrh ekrana</string>
<string name="noBarcodeFound">Nije pronađen barkod</string>
<string name="errorReadingImage">Nisam mogao/la pročitati sliku</string>
<string name="balance">Stanje</string>
<string name="currency">Valuta</string>
<string name="points">Bodovi</string>
<string name="balanceParsingFailed">Nevažeći saldo</string>
<string name="chooseImportType">Uvoz podataka iz</string>
<string name="app_loyalty_card_keychain">Privjesak za ključeve s karticom vjernosti</string>
<string name="privacy_policy">Politika privatnosti</string>
<string name="accept">Prihvati</string>
<string name="importFidme">Uvoz iz FidMe-a</string>
<string name="importFidmeMessage">Odaberite izvoz iz FidMe-a za uvoz i nakon toga ručno odaberite vrste barkodova. \nKreirajte ga iz svog FidMe profila odabirom Zaštita podataka, a zatim pritiskom na Izdvoji moje podatke.</string>
<string name="importLoyaltyCardKeychainMessage">Odaberite svoj izvoz iz Privjeska za ključeve s karticom vjernosti za uvoz.\nKreirajte ga iz menija Uvoz/Izvoz u Privjesku za ključeve s karticom vjernosti pritiskom na Izvoz.</string>
<string name="importVoucherVaultMessage">Odaberite izvoz iz Voucher Vaulta za uvoz. \nKreirajte ga pritiskom na Izvoz u Voucher Vaultu.</string>
<string name="switchToBarcode">Prebaci na barkod</string>
<string name="openFrontImageInGalleryApp">Otvorite prednju sliku u aplikaciji za pregled slika</string>
<string name="switchToBackImage">Prebaci na sliku iz pozadine</string>
<string name="switchToFrontImage">Prebaci na prednju sliku</string>
<string name="height">Visina</string>
<string name="validFromSentence">Važi od: <xliff:g>%s</xliff:g></string>
<string name="chooseValidFromDate">Odaberite datum važenja od</string>
<string name="anyDate">Bilo koji datum</string>
<string name="validFromDate">Vrijedi od</string>
<string name="newBalanceSentence">Novo stanje: <xliff:g>%s</xliff:g></string>
<string name="currentBalanceSentence">Trenutno stanje: <xliff:g>%s</xliff:g></string>
<string name="updateBalanceHint">Unesite iznos</string>
<string name="updateBalanceTitle">Koliko ste potrošili ili primili?</string>
<string name="importCards">Uvezi kartice</string>
<string name="welcome">Dobrodošli u Catima</string>
<string name="failedToOpenUrl">Prvo instalirajte web preglednik</string>
<string name="nextCard">Sljedeće</string>
<string name="previousCard">Prethodno</string>
<string name="failedLaunchingPhotoPicker">Nemogu pronaći podržani alat za odabir slika</string>
<string name="unarchived">Kartica je vraćena iz arhive</string>
<string name="archived">Kartica je arhivirana</string>
<string name="unarchive">Vrati iz arhive</string>
<string name="archive">Arhiva</string>
<string name="duplicateCard">Duplikat</string>
<string name="include_if_asking_support">Ako želite zatražiti podršku, uključite sljedeće informacije:</string>
<string name="starred">Označeno zvjezdicom</string>
<string name="options">Opcije</string>
<string name="shortcutSelectCard">Odaberite karticu</string>
<string name="translate_platform">na Weblateu</string>
<string name="report_error">Prijavi grešku</string>
<string name="on_google_play">na Google Play</string>
<string name="rate_this_app">Ocijenite ovu aplikaciju</string>
<string name="and_data_usage">i korištenje podataka</string>
<string name="on_github">na GitHubu</string>
<string name="source_repository">Izvorni repozitorij</string>
<string name="license">Licenca</string>
<string name="help_translate_this_app">Pomozite u prevođenju ove aplikacije</string>
<string name="credits">Zasluge</string>
<string name="version_history">Historija verzija</string>
<string name="sort_by_valid_from">Vrijedi od</string>
<string name="barcodeLongPressMessage">U aplikaciji galerija mogu se otvoriti samo slike</string>
<string name="failedToRetrieveImageFile">Neuspjevam preuzimanje slikovne datoteke</string>
<string name="updateBalance">Ažuriraj stanje</string>
<string name="showMoreInfo">Prikaži informacije</string>
<string name="app_contributors">Omogućeno zahvaljujući: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="setIcon">Postavi sličicu</string>
<string name="selectColor">Odaberite boju</string>
<string name="settings_oled_dark_summary">Smanjuje potrošnju baterije na OLED ekranima</string>
<string name="settings_oled_dark">Čisto crna pozadina za tamnu temu</string>
<string name="exportPasswordHint">Unesite lozinku</string>
<string name="exportPassword">Postavite lozinku za zaštitu izvoza (opcionalno)</string>
<string name="back">Nazad</string>
<string name="barcodeEncoding">Kodiranje barkoda</string>
<string name="nothing_to_copy">Nije pronađena vrijednost</string>
<string name="settings_dark_theme">Tamno</string>
<string name="settings_display_barcode_max_brightness">Posvijetli ekran</string>
<string name="settings_display_barcode_max_brightness_summary">Neophodno za rad nekih skenera</string>
<string name="settings_keep_screen_on_summary">Onemogućava istek vremena ekrana tokom pregleda kartice</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Onemogućava zaključavanje ekrana tokom pregleda kartice</string>
<string name="settings_allow_content_provider_read_title">Dozvoli drugim aplikacijama pristup mojim podacima</string>
<string name="settings_allow_content_provider_read_summary">Aplikacije će i dalje morati tražiti dozvolu za pristup</string>
<string name="settings_use_volume_keys_navigation">Prebacivanje kartica pomoću tipki za jačinu zvuka</string>
<string name="settings_use_volume_keys_navigation_summary">Koristite tipke za jačinu zvuka da promijenite koja se kartica prikazuje</string>
<string name="group_edit">Uredi grupu</string>
<string name="group_name_already_in_use">Naziv grupe se već koristi</string>
<string name="group_name_is_empty">Naziv grupe ne smije biti prazan</string>
<string name="group_updated">Grupa ažurirana</string>
<string name="deleteConfirmationGroup">Izbrisati grupu?</string>
<string name="openBackImageInGalleryApp">Otvori sliku pozadi u aplikaciji za pregled slika</string>
<string name="setBarcodeHeight">Postavi visinu barkoda</string>
<string name="donate">Donirajte</string>
<string name="icon_header_click_text">Dugo pritisnite za uređivanje sličice</string>
<string name="show_name_below_image_thumbnail">Prikaži ime ispod sličice slike</string>
<string name="show_note">Prikaži bilješku</string>
<string name="show_balance">Prikaži stanje</string>
<string name="show_validity">Prikaži validnost</string>
<string name="settings_category_title_cards">Prikaz kartice</string>
<string name="settings_category_title_cards_overview">Pregled kartica</string>
<string name="settings_column_count_portrait">Kolone u portretnom načinu rada</string>
<string name="settings_column_count_landscape">Kolone u pejzažnom načinu rada</string>
<string name="settings_automatic_column_count">Automatski</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="settings_category_title_general">Općenito</string>
<string name="settings_category_title_privacy">Privatnost</string>
<string name="action_display_options">Opcije prikaza</string>
<string name="show_archived_cards">Prikaži arhivirane kartice</string>
<string name="view_online">Pogledajte online</string>
<string name="action_more_options">Više opcija</string>
<string name="addWithoutBarcode">Dodajte karticu bez barkoda</string>
<string name="enter_card_id">Unesite ID broj ili tekst sa vaše kartice</string>
<string name="card_id_must_not_be_empty">ID kartice ne smije biti prazan</string>
<string name="add_a_card_in_a_different_way">Dodajte karticu na drugačiji način</string>
<string name="field_must_not_be_empty">Polje ne smije biti prazno</string>
<string name="manually_enter_barcode_instructions">Unesite ID broj ili tekst sa vaše kartice i pritisnite barkod koji izgleda kao onaj na vašoj kartici.</string>
<string name="add_manually_warning_title">Preporučuje se skeniranje</string>
<string name="add_manually_warning_message">Za neke kartice, vrijednost barkoda se razlikuje od broja napisanog na kartici. Zbog toga, ručni unos barkoda možda neće uvijek funkcionirati. Preporučuje se skeniranje barkoda kamerom. Želite li i dalje nastaviti?</string>
<string name="continue_">Nastavi</string>
<string name="spend">Potroši</string>
<string name="receive">Primi</string>
<string name="amountParsingFailed">Nevažeći iznos</string>
<string name="addFromPdfFile">Odaberite PDF datoteku</string>
<string name="errorReadingFile">Nisam mogao pročitati datoteku</string>
<string name="failedLaunchingFileManager">Nije pronađen podržani upravitelj datoteka</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Koji od pronađenih barkodova želite koristiti?</string>
<string name="pageWithNumber">Stranica <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">Izgleda da vaš uređaj nema kameru. Ako je ima, pokušajte ponovo pokrenuti uređaj. U suprotnom, koristite dugme Više opcija ispod da biste dodali barkod na drugi način.</string>
<string name="importCancelled">Uvoz otkazan</string>
<string name="exportCancelled">Izvoz otkazan</string>
<string name="useFrontImage">Koristi prednju sliku</string>
<string name="useBackImage">Koristi sliku sa zadnje strane</string>
<string name="addFromPkpass">Odaberite Passbook datoteku (.pkpass / .pkpasses)</string>
<string name="unsupportedFile">Ova datoteka nije podržana</string>
<string name="generic_error_please_retry">Došlo je do greške</string>
<string name="width">Širina</string>
<string name="card_list_widget_name">Lista kartica</string>
<string name="setBarcodeWidth">Postavi širinu barkoda</string>
<string name="card_list_widget_empty">Nakon što dodate neke kartice vjernosti u Catima, one će se pojaviti ovdje. Ako imate kartice, provjerite da nisu sve arhivirane.</string>
<string name="cardWithNumber">Kartica <xliff:g>%d</xliff:g></string>
<string name="cardWithNumberAndLocale">Kartica <xliff:g>%d</xliff:g> (<xliff:g>%s</xliff:g>)</string>
<string name="pleaseDoNotRotateTheDevice">Molimo vas da ne rotirate uređaj, jer će to prekinuti radnju</string>
<string name="acra_catima_has_crashed">Žao nam je, ali aplikacija <xliff:g id="app_name">%s</xliff:g> se srušila. Molimo vas da nam pomognete da riješimo ovaj problem slanjem izvještaja o grešci.</string>
<string name="acra_explain_crash">Ako je moguće, molimo vas da dodate više detalja o tome šta ste ovdje radili:</string>
<string name="acra_crash_email_subject">Izvještaj o padu aplikacije <xliff:g id="app_name">%s</xliff:g></string>
<string name="pref_enable_acra">Zatraži slanje izvještaja o padu programa</string>
<string name="pref_enable_acra_summary">Kada je omogućeno, bit ćete upitani da prijavite pad sistema kada se dogodi. Izvještaji o padu sistema se nikada ne šalju automatski.</string>
<string name="copy_value">Kopiraj vrijednost</string>
<string name="copied_to_clipboard">Kopirano u međuspremnik</string>
<string name="importCatimaMessage">Odaberite izvoz iz Catima za uvoz. \nKreirajte ga iz menija Uvoz/izvoz druge Catima aplikacije pritiskom na Izvoz.</string>
</resources>
+6
View File
@@ -305,4 +305,10 @@
<string name="copy_value">Kopírovat hodnotu</string>
<string name="copied_to_clipboard">Zkopírováno do schránky</string>
<string name="nothing_to_copy">Nenalezena žádná hodnota</string>
<string name="barcodeEncoding">Kódování čárového kódu</string>
<string name="back">Zpět</string>
<string name="settings_disable_nfc_while_viewing_card">Pozastavit NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Pozastaví NFC pro zabránění spuštění NFC plateb při zobrazování karty</string>
<string name="nfc_blocked_while_viewing_card">NFC je pozastaveno</string>
<string name="change_settings">Změnit nastavení</string>
</resources>
+1 -1
View File
@@ -25,7 +25,7 @@
<string name="note">Bemærk</string>
<string name="storeName">Navn</string>
<string name="noMatchingGiftCards">Ingen resultater. Prøv at ændre din søgning.</string>
<string name="noGiftCards">Klik på + plus-knappen for at tilføje et kort, eller importer kort fra ⋮ menuen.</string>
<string name="noGiftCards">Klik på + plus-knappen for at tilføje et kort, eller importer kort fra ⋮ menuen</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> valgt kort</item>
<item quantity="other"><xliff:g>%d</xliff:g> valgte kort</item>
+5 -2
View File
@@ -100,7 +100,7 @@
<string name="importLoyaltyCardKeychain">Aus Loyalty Card Keychain importieren</string>
<string name="importFidmeMessage">Wähle deinen „FidMe-Export“ zum Importieren und anschließend manuell die Barcodetypen aus.\nErstelle ihn aus deinem FidMe-Profil, indem du Datenschutz wählst und dann auf Meine Daten extrahieren drückst.</string>
<string name="importFidme">Aus FidMe importieren</string>
<string name="importCatimaMessage">Wähle deinen „Catima-Export“ zum Importieren aus.\nErstelle diesen durch das Drücken auf Export im Import/Export-Menü in einer anderen Catima-Anwendung.</string>
<string name="importCatimaMessage">Wähle deinen „Catima-Export“ zum Importieren aus.\nExportiere diesen zuvor im Import/Export-Menü einer anderen Catima-Anwendung.</string>
<string name="importCatima">Aus Catima importieren</string>
<string name="setBarcodeId">Barcodewert festlegen</string>
<string name="sameAsCardId">Entspricht Kartennummer</string>
@@ -300,6 +300,9 @@
<string name="copied_to_clipboard">In die Zwischenablage kopiert</string>
<string name="nothing_to_copy">Keinen Betrag gefunden</string>
<string name="barcodeEncoding">Barcode-Kodierung</string>
<string name="automatic">Automatisch</string>
<string name="back">Zurück</string>
<string name="change_settings">Einstellungen ändern</string>
<string name="nfc_blocked_while_viewing_card">NFC ist vorübergehend deaktiviert</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Deaktiviert vorübergehend NFC, sodass keine NFC-Zahlungen ausgelöst werden können, während eine Karte angezeigt wird</string>
<string name="settings_disable_nfc_while_viewing_card">NFC vorübergehend deaktivieren</string>
</resources>
+4 -1
View File
@@ -299,7 +299,10 @@
<string name="copy_value">Αντιγραφή τιμής</string>
<string name="copied_to_clipboard">Αντιγράφηκε στο πρόχειρο</string>
<string name="nothing_to_copy">Δεν βρέθηκε τιμή</string>
<string name="automatic">Αυτόματη</string>
<string name="barcodeEncoding">Κωδικοποίηση γραμμωτού κώδικα</string>
<string name="back">Πίσω</string>
<string name="settings_disable_nfc_while_viewing_card">Παύση NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Παύση του NFC για την αποτροπή ενεργοποίησης πληρωμών NFC κατά την προβολή μιας κάρτας</string>
<string name="nfc_blocked_while_viewing_card">Το NFC είναι σε παύση</string>
<string name="change_settings">Αλλαγή ρυθμίσεων</string>
</resources>
+37 -1
View File
@@ -192,7 +192,7 @@
<string name="reverse">en orden inverso</string>
<string name="sort_by_most_recently_used">Más recientemente usado</string>
<string name="settings_use_volume_keys_navigation">Cambiar tarjetas usando los botones de volumen</string>
<string name="sort_by_valid_from">Válido Desde</string>
<string name="sort_by_valid_from">Válido desde</string>
<string name="sort_by_expiry">Vencimiento</string>
<string name="settings_use_volume_keys_navigation_summary">Usá los botones de volumen para cambiar la tarjeta que se muestra</string>
<string name="cardWithNumberAndLocale">Tarjeta <xliff:g>%d</xliff:g> (<xliff:g>%s</xliff:g>)</string>
@@ -227,4 +227,40 @@
<string name="source_repository">Fuente de repositorio</string>
<string name="and_data_usage">y uso de datos</string>
<string name="include_if_asking_support">Si queres solicitar soporte, incluya la siguiente información:</string>
<string name="starred">Favoritos</string>
<string name="unarchive">Desarchivar</string>
<string name="unarchived">Carta desarchivada</string>
<string name="updateBalanceTitle">¿Cuánto gastó o ganó?</string>
<string name="anyDate">Cualquier fecha</string>
<string name="chooseValidFromDate">Elija fecha válida desde</string>
<string name="switchToFrontImage">Cambiar a imagen frontal</string>
<string name="switchToBackImage">Cambiar a imagen trasera</string>
<string name="switchToBarcode">Cambiar a código de barras</string>
<string name="openFrontImageInGalleryApp">Abrir imagen frontal en aplicación para ver imágenes</string>
<string name="openBackImageInGalleryApp">Abrir imagen trasera en galería de fotos</string>
<string name="setBarcodeHeight">Definir altura de código de barras</string>
<string name="show_name_below_image_thumbnail">Mostrar nombre de la imagen bajo su miniatura</string>
<string name="show_balance">Mostrar saldo</string>
<string name="show_validity">Mostrar validez</string>
<string name="settings_category_title_cards">Ver tarjeta</string>
<string name="settings_category_title_cards_overview">Ver todas las tarjetas</string>
<string name="settings_column_count_portrait">Columna en modo retrato</string>
<string name="settings_column_count_landscape">Columna en modo horizontal</string>
<string name="settings_automatic_column_count">Automático</string>
<string name="settings_column_count_1">1</string>
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="currentBalanceSentence">Balance actual: <xliff:g>%s</xliff:g></string>
<string name="newBalanceSentence">Nuevo balance: <xliff:g>%s</xliff:g></string>
<string name="validFromSentence">Válido desde <xliff:g>%s</xliff:g></string>
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="settings_category_title_general">General</string>
<string name="settings_category_title_privacy">Privacidad</string>
<string name="action_display_options">Mostrar Opciones</string>
<string name="show_archived_cards">Mostrar tarjetas archivadas</string>
<string name="view_online">Ver Online</string>
<string name="action_more_options">Más Opciones</string>
</resources>
+8 -2
View File
@@ -10,7 +10,7 @@
<string name="edit">Editar</string>
<string name="delete">Eliminar</string>
<string name="confirm">Confirmar</string>
<string name="ok">De acuerdo</string>
<string name="ok">Aceptar</string>
<string name="sendLabel">Enviar…</string>
<string name="editCardTitle">Editar tarjeta</string>
<string name="addCardTitle">Añadir tarjeta</string>
@@ -134,7 +134,7 @@
<item quantity="many"><xliff:g>%d</xliff:g> seleccionadas</item>
<item quantity="other"><xliff:g>%d</xliff:g> seleccionadas</item>
</plurals>
<string name="deleteTitle">Eliminar la tarjeta</string>
<string name="deleteTitle">Eliminar tarjeta</string>
<string name="deleteConfirmation">¿Quiere eliminar permanentemente esta tarjeta\?</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">¿Borrar esta tarjeta <xliff:g>%d</xliff:g> permanentemente\?</item>
@@ -305,4 +305,10 @@
<string name="copy_value">Copia valor</string>
<string name="copied_to_clipboard">Copiado al portapapeles</string>
<string name="nothing_to_copy">Ningún valor encontrado</string>
<string name="barcodeEncoding">Codificación de barra de código</string>
<string name="back">Atrás</string>
<string name="settings_disable_nfc_while_viewing_card">Pausar NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Pausa NFC para prevenir abonaciones NFC desde disparador mientras vea una tarjeta</string>
<string name="nfc_blocked_while_viewing_card">NFC está pausado</string>
<string name="change_settings">Cambiar ajustes</string>
</resources>
+6
View File
@@ -299,4 +299,10 @@
<string name="copy_value">Kopeeri väärtus</string>
<string name="copied_to_clipboard">Kopeeritud lõikelauale</string>
<string name="nothing_to_copy">Ühtegi väärtust ei leidu</string>
<string name="barcodeEncoding">Triipkoodi kodeerimine</string>
<string name="back">Tagasi</string>
<string name="settings_disable_nfc_while_viewing_card">Peata lähiväljaside (NFC)</string>
<string name="nfc_blocked_while_viewing_card">Lähiväljaside (NFC) on peatatud</string>
<string name="change_settings">Muuda seadistusi</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Vältimaks, et lähiväljaside (NFC) abil toimiv makseliides käivitub, lülitatakse kaardi vaatamisel lähiväljaside (NFC) välja</string>
</resources>
+2 -2
View File
@@ -3,8 +3,8 @@
<string name="app_name">کاتیما</string>
<string name="action_search">جستجو</string>
<string name="action_add">افزودن</string>
<string name="noGiftCards">برای افزودن کارت دکمه + پلاس را بزنید, یا از منو ایمپورت کنید.</string>
<string name="noGiftCardsGroup">تعدادی کارت ایجاد کنید، و سپس آنها را اینجا به گروه بیافزایید.</string>
<string name="noGiftCards">برای افزودن کارت، روی دکمه + کلیک کنید یا از منوی ⋮ کارت‌ها را وارد کنید.</string>
<string name="noGiftCardsGroup">چند کارت ایجاد کنید و سپس آنها را در اینجا به این گروه اختصاص دهید.</string>
<string name="noMatchingGiftCards">بدون نتیجه. سعی کنید جستجویتان را تغییر دهید.</string>
<string name="storeName">نام</string>
<string name="note">یادداشت</string>
+34 -24
View File
@@ -10,17 +10,14 @@
<string name="setBarcodeId">Aseta viivakoodin arvo</string>
<string name="sameAsCardId">Sama kuin ID-tunnus</string>
<string name="barcodeId">Viivakoodin arvo</string>
<string name="importVoucherVaultMessage">Valitse tuotava <i>vouchervault.json</i>-vienti Voucher Vaultista.
\nLuo se painamalla ensin Vie Voucher Vaultissa.</string>
<string name="importVoucherVaultMessage">Valitse vienti Voucher Vaultista tuotavaksi. \nLuo se painamalla \"Export\" Voucher Vaultissa.</string>
<string name="importVoucherVault">Tuo Voucher Vault -varmuuskopiotiedostosta</string>
<string name="importLoyaltyCardKeychainMessage">Valitse tuotava <i>LoyaltyCardKeychain.csv</i>-vientitiedostosi Loyalty Card Keychainista.
\nTai luo se Loyalty Card Keychainin Import/Export-valikosta painamalla ensin Export (Vie).</string>
<string name="importLoyaltyCardKeychain">Tuo Loyalty Card Keychain varmuuskopiotiedostosta</string>
<string name="importFidmeMessage">Valitse tuotava <i>fidme-export-request-xxxxxxxx.zip</i>-vientitiedostosi FidMe:stä ja valitse viivakoodityypit manuaalisesti sen jälkeen.
\nLuo se FidMe-profiilistasi valitsemalla Tietosuoja ja painamalla ensin Extract my data.</string>
<string name="importFidmeMessage">Valitse vienti FidMe:stä tuotavaksi ja valitse viivakoodityypit manuaalisesti sen jälkeen. \nLuo se FidMe-profiilistasi valitsemalla \"Data Protection\" ja painamalla \"Extract my data\".</string>
<string name="importFidme">Tuo FidMe-varmuuskopiotiedostosta</string>
<string name="importCatimaMessage">Valitse tuotava <i>catima.zip</i>-vientitiedostosi Catimasta.
\nLuo se Catima-sovelluksen Tuo/vie-valikosta painamalla siellä ensin Vie.</string>
<string name="importCatimaMessage">Valitse tuotava vientitiedosto Catimasta. \nLuo se Catima-sovelluksen Tuo/vie-valikosta painamalla siellä ensin Vie.</string>
<string name="importCatima">Tuo Catima varmuuskopiotiedostosta</string>
<string name="accept">Hyväksy</string>
<string name="privacy_policy">Tietosuojakäytäntö</string>
@@ -47,14 +44,14 @@
<string name="leaveWithoutSaveTitle">Poistu</string>
<string name="moveDown">Siirrä alaspäin</string>
<string name="moveUp">Siirrä ylöspäin</string>
<string name="failedOpeningFileManager">Asenna ensin tiedostonhallintaohjelma.</string>
<string name="failedOpeningFileManager">Tiedostonhallintaohjelman avaaminen epäonnistui</string>
<string name="deleteConfirmationGroup">Poistetaanko ryhmä\?</string>
<string name="all">Kaikki</string>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> kortti</item>
<item quantity="other"><xliff:g>%d</xliff:g> korttia</item>
</plurals>
<string name="noGroups">Napsauta plus-painiketta (+) lisätäksesi ryhmät luokittelua varten.</string>
<string name="noGroups">Napsauta plus-painiketta (+) lisätäksesi ryhmät luokittelua varten</string>
<string name="groups">Ryhmät</string>
<string name="enter_group_name">Anna ryhmän nimi</string>
<string name="exportSuccessful">Tiedot viety</string>
@@ -71,8 +68,8 @@
<string name="starImage">Suosikkitähti</string>
<string name="thumbnailDescription">Pienoiskuva</string>
<string name="selectBarcodeTitle">Valitse viivakoodi</string>
<string name="app_resources">Vapaat kolmannen osapuolen resurssit: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_libraries">Vapaat kolmannen osapuolen kirjastot: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_resources">Kolmannen osapuolen resurssit: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_libraries">Kolmannen osapuolen kirjastot: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="debug_version_fmt">Versio: <xliff:g id="version">%s</xliff:g></string>
<string name="about_title_fmt">Tietoja <xliff:g id="app_name">%s</xliff:g></string>
<string name="app_license">Copyleft (käyttäjänoikeus) - vapaa ohjelmisto, lisenssi GPLv3+</string>
@@ -81,9 +78,9 @@
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Tekijänoikeus © 2019<xliff:g>%d</xliff:g> Sylvia van Os ja avustajat</string>
<string name="about">Tietoja</string>
<string name="importOptionFilesystemButton">Tiedostojärjestelmästä</string>
<string name="importOptionFilesystemExplanation">Valitse tietty tiedosto tiedostojärjestelmästä.</string>
<string name="importOptionFilesystemExplanation">Valitse tietty tiedosto tiedostojärjestelmästä</string>
<string name="importOptionFilesystemTitle">Tuo tiedostojärjestelmästä</string>
<string name="exportOptionExplanation">Tiedot kirjoitetaan valitsemaasi sijaintiin.</string>
<string name="exportOptionExplanation">Tiedot kirjoitetaan valitsemaasi sijaintiin</string>
<string name="exporting">Viedään…</string>
<string name="importing">Tuodaan…</string>
<string name="exportFailed">Vienti epäonnistui</string>
@@ -92,10 +89,10 @@
<string name="importFailed">Tuonti epäonnistui</string>
<string name="importFailedTitle">Tuonti epäonnistui</string>
<string name="importSuccessfulTitle">Tuonti valmis</string>
<string name="importExportHelp">Tietojesi varmuuskopiointi mahdollistaa niiden siirtämisen toiseen laitteeseen.</string>
<string name="importExportHelp">Tietojesi varmuuskopiointi mahdollistaa niiden siirtämisen toiseen laitteeseen</string>
<string name="exportName">Vie</string>
<string name="importExport">Tuo/vie</string>
<string name="failedParsingImportUriError">Tuonnin URI: n jäsentäminen epäonnistui</string>
<string name="failedParsingImportUriError">Tuonnin URI:n jäsentäminen epäonnistui</string>
<string name="noCardExistsError">Tätä korttia ei löytynyt</string>
<string name="noCardsMessage">Lisää ensin kortti</string>
<string name="cardShortcut">Kortin pikakuvake</string>
@@ -118,7 +115,7 @@
<string name="note">Lisätieto</string>
<string name="storeName">Nimi</string>
<string name="noMatchingGiftCards">Ei hakutuloksia, kokeile toisella hakutermillä.</string>
<string name="noGiftCards">Lisää kortti napsauttamalla plus-painiketta (+), tai mene ⋮-valikkoon tuodaksesi.</string>
<string name="noGiftCards">Lisää kortti napsauttamalla plus-painiketta (+), tai mene ⋮-valikkoon tuodaksesi</string>
<string name="action_add">Lisää</string>
<string name="action_search">Hae</string>
<string name="takePhoto">Ota valokuva</string>
@@ -142,8 +139,8 @@
<item quantity="one"><xliff:g>%d</xliff:g> valittu</item>
<item quantity="other"><xliff:g>%d</xliff:g> valitut</item>
</plurals>
<string name="passwordRequired">Ole hyvä ja syötä salasana</string>
<string name="failedGeneratingShareURL">Jaettavaa URL-osoitetta ei voitu luoda. Ilmoita tästä.</string>
<string name="passwordRequired">Syötä salasana</string>
<string name="failedGeneratingShareURL">Jaettavaa URL-osoitetta ei voitu luoda</string>
<string name="turn_flashlight_on">Käytä taskulamppua</string>
<string name="turn_flashlight_off">Sammuta salamavalo</string>
<string name="app_contributors">Mahdollistanut: <xliff:g id="app_contributors">%s</xliff:g></string>
@@ -173,7 +170,7 @@
<string name="on_github">GitHubissa</string>
<string name="and_data_usage">ja datan käyttö</string>
<string name="on_google_play">Google Playssa</string>
<string name="report_error">Ilmoita virheestä</string>
<string name="report_error">Ilmoita ongelmasta</string>
<string name="shortcutSelectCard">Valitse kortti</string>
<string name="starred">Tähdellä merkityt</string>
<string name="options">Vaihtoehdot</string>
@@ -186,12 +183,12 @@
<string name="translate_platform">Weblatessa</string>
<string name="selectColor">Valitse väri</string>
<string name="rate_this_app">Arvostele tämä sovellus</string>
<string name="noGiftCardsGroup">Lisää kortteja ja lisää ne ryhmään täällä.</string>
<string name="noGiftCardsGroup">Lisää kortteja ja lisää ne ryhmään täällä</string>
<string name="barcodeImageDescriptionWithType">Kuva <xliff:g>%s</xliff:g> viivakoodi</string>
<string name="unarchived">Kortti on poistettu arkistosta</string>
<string name="unarchive">Poista arkistosta</string>
<string name="archived">Kortti arkistoitu</string>
<string name="failedLaunchingPhotoPicker">Tuettua galleriasovellusta ei löytynyt</string>
<string name="failedLaunchingPhotoPicker">Tuettua kuvavalitsinta ei löytynyt</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> kortti (<xliff:g id="archivedCount">%2$d</xliff:g> arkistoitu)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> korttia (<xliff:g id="archivedCount">%2$d</xliff:g> arkistoitu)</item>
@@ -226,14 +223,14 @@
<string name="height">Korkeus</string>
<string name="switchToFrontImage">Vaihda etukuvaan</string>
<string name="switchToBarcode">Vaihda viivakoodiin</string>
<string name="openFrontImageInGalleryApp">Avaa etukuva galleriasovelluksessa</string>
<string name="openFrontImageInGalleryApp">Avaa etukuva kuvankatselusovelluksessa</string>
<string name="settings_display_barcode_max_brightness_summary">Välttämätön, jotta jotkin skannerit toimivat</string>
<string name="settings_keep_screen_on_summary">Poistaa näytön aikakatkaisun korttia katsellessa</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Poistaa näyttölukituksen käytöstä korttia katsellessa</string>
<string name="settings_allow_content_provider_read_title">Salli muiden sovellusten käyttää omaa dataa</string>
<string name="settings_oled_dark_summary">Vähentää akun käyttöä OLED-näytöillä</string>
<string name="switchToBackImage">Vaihda takakuvaan</string>
<string name="openBackImageInGalleryApp">Avaa takakuva galleriasovelluksessa</string>
<string name="openBackImageInGalleryApp">Avaa takakuva kuvankatselusovelluksessa</string>
<string name="setBarcodeHeight">Aseta viivakoodin korkeus</string>
<string name="icon_header_click_text">Pitkä painallus pikkukuvan muokkaamiseksi</string>
<string name="show_name_below_image_thumbnail">Näytä nimi pikkukuvan alapuolella</string>
@@ -284,12 +281,25 @@
<string name="settings_column_count_4">4</string>
<string name="settings_column_count_5">5</string>
<string name="settings_column_count_7">7</string>
<string name="addFromPkpass">Valitse Passbook-tiedosto (.pkpass)</string>
<string name="addFromPkpass">Valitse Passbook-tiedosto (.pkpass / .pkpasses)</string>
<string name="unsupportedFile">Tämä tiedosto ei ole tuettu</string>
<string name="generic_error_please_retry">Pahoittelut, jokin meni pieleen. Yritä uudelleen...</string>
<string name="generic_error_please_retry">Tapahtui virhe</string>
<string name="sort_by_valid_from">Voimassa alkaen</string>
<string name="width">Leveys</string>
<string name="setBarcodeWidth">Aseta viivakoodin leveys</string>
<string name="card_list_widget_name">Korttiluettelo</string>
<string name="card_list_widget_empty">Kun olet lisännyt kanta-asiakaskortteja Catimaan, ne näkyvät täällä. Jos sinulla on kortteja, varmista, etteivät ne kaikki ole arkistoituja.</string>
<string name="cardWithNumber">Kortti <xliff:g>%d</xliff:g></string>
<string name="cardWithNumberAndLocale">Kortti <xliff:g>%d</xliff:g> (<xliff:g>%s</xliff:g>)</string>
<string name="pleaseDoNotRotateTheDevice">Älä kierrä laitetta, koska se peruu toiminnon</string>
<string name="acra_catima_has_crashed">Valitettavasti <xliff:g id="app_name">%s</xliff:g> kaatui. Auta korjaamaan ongelma lähettämällä virheraportti.</string>
<string name="pref_enable_acra">Kysy kaatumisraporttien lähettämisestä</string>
<string name="pref_enable_acra_summary">Kun käytössä, sinulta kysytään lupa lähettää raportti kaatumisen yhteydessä. Kaatumisraportteja ei koskaan lähetetä automaattisesti.</string>
<string name="copy_value">Kopioi arvo</string>
<string name="copied_to_clipboard">Kopioitu leikepöydälle</string>
<string name="nothing_to_copy">Arvoa ei löytynyt</string>
<string name="barcodeEncoding">Viivakoodin koodaus</string>
<string name="back">Takaisin</string>
<string name="acra_explain_crash">Jos mahdollista lisää tietoja toiminnastasi täällä:</string>
<string name="acra_crash_email_subject"><xliff:g id="app_name">%s</xliff:g> pysähtymisraportti</string>
</resources>
+6
View File
@@ -305,4 +305,10 @@
<string name="copy_value">Copier la valeur</string>
<string name="copied_to_clipboard">Copié dans le presse-papier</string>
<string name="nothing_to_copy">Aucune valeur trouvée</string>
<string name="barcodeEncoding">Encodage du code-barres</string>
<string name="back">Retour</string>
<string name="settings_disable_nfc_while_viewing_card">Mettre en pause le NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Mettre en pause le NFC pour éviter le déclenchement de paiements NFC lors de la consultation d\'une carte</string>
<string name="nfc_blocked_while_viewing_card">Le NFC est en pause</string>
<string name="change_settings">Modifier les paramètres</string>
</resources>
+6
View File
@@ -298,4 +298,10 @@
<string name="copy_value">Copiar valor</string>
<string name="copied_to_clipboard">Copiado ao portapapeis</string>
<string name="nothing_to_copy">Non hai ningún valor</string>
<string name="barcodeEncoding">Códificación do código de barras</string>
<string name="back">Volver</string>
<string name="settings_disable_nfc_while_viewing_card">NFC en pausa</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Detén o NFC para evitar a activación de pago con NFC cando se mira unha tarxeta</string>
<string name="nfc_blocked_while_viewing_card">NFC está en pausa</string>
<string name="change_settings">Cambiar axustes</string>
</resources>
+18 -3
View File
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="action_add">הוספה</string>
<string name="cardId">מזהה כרטיס</string>
<string name="cancel">ביטול</string>
<string name="save">שמור</string>
<string name="ok">אישור</string>
<string name="action_search">חיפוש</string>
<string name="noGiftCards">לחץ על לחצן ה + להוספת כרטיס, או ייבא מספר כרטיסים באמצעות התפריט ⋮.</string>
<string name="noGiftCards">לחץ על כפתור הפלוס (+) כדי להוסיף כרטיס, או ייבא כרטיס מהתפריט ⋮.</string>
<string name="share">שיתוף</string>
<string name="addCardTitle">הוספת כרטיס</string>
<string name="star">הוספה למועדפים</string>
@@ -16,7 +16,7 @@
<string name="noBarcode">אין ברקוד</string>
<string name="edit">עריכה</string>
<string name="exportFailed">לא ניתן לייצא</string>
<string name="noGiftCardsGroup">צור מספר כרטיסים, ואז שייך אותם לקבוצה פה.</string>
<string name="noGiftCardsGroup">צור מספר כרטיסים, ולאחר מכן שייך אותם לקבוצה.</string>
<string name="failedParsingImportUriError">נתיב לא נמצא</string>
<string name="noMatchingGiftCards">אין תוצאות. נסה חיפוש אחר.</string>
<string name="storeName">שם חנות</string>
@@ -51,4 +51,19 @@
<string name="multipleBarcodesFoundPleaseChooseOne">באיזה מהברקודים שנמצאו אתה רוצה להשתמש?</string>
<string name="useFrontImage">השתמש בתמונה קדמית</string>
<string name="useBackImage">השתמש בתמונה אחורית</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> נבחר</item>
<item quantity="two"><xliff:g>%d</xliff:g> נבחרו</item>
<item quantity="other"><xliff:g>%d</xliff:g> נבחרו</item>
</plurals>
<plurals name="deleteCardsTitle">
<item quantity="one">הסר <xliff:g>%d</xliff:g> כרטיסייה</item>
<item quantity="two">הסר <xliff:g>%d</xliff:g> כרטיסיות</item>
<item quantity="other">הסר <xliff:g>%d</xliff:g> כרטיסיות</item>
</plurals>
<plurals name="deleteCardsConfirmation">
<item quantity="one">להסיר את <xliff:g>%d</xliff:g> הכרטיסייה לצמיתות?</item>
<item quantity="two">להסיר את <xliff:g>%d</xliff:g> הכרטיסיות לצמיתות?</item>
<item quantity="other">להסיר את <xliff:g>%d</xliff:g> הכרטיסיות לצמיתות?</item>
</plurals>
</resources>
+2
View File
@@ -298,4 +298,6 @@
<string name="copy_value">मान कॉपी करें</string>
<string name="copied_to_clipboard">क्लिपबोर्ड पर कॉपी किया गया</string>
<string name="nothing_to_copy">कोई मूल्य नहीं मिला</string>
<string name="barcodeEncoding">बारकोड एन्कोडिंग</string>
<string name="back">वापस</string>
</resources>
+9
View File
@@ -302,4 +302,13 @@
<string name="acra_crash_email_subject">Izvještaj o prekidu rada aplikacije <xliff:g id="app_name">%s</xliff:g></string>
<string name="pref_enable_acra">Pitaj da li poslati izvještaj o prekidu rada aplikacije</string>
<string name="pref_enable_acra_summary">Kada je uključeno, zamolit ćemo te da prijaviš prekid rada aplikacije kada se dogodi. Izvještaji o prekidu rada se nikada ne šalju automatski.</string>
<string name="copied_to_clipboard">Kopirano u međuspremnik</string>
<string name="back">Natrag</string>
<string name="copy_value">Kopiraj vrijednost</string>
<string name="nothing_to_copy">Nije pronađena vrijednost</string>
<string name="barcodeEncoding">Kodiranje barkoda</string>
<string name="change_settings">Promijeni postavke</string>
<string name="settings_disable_nfc_while_viewing_card">Pauziraj NFC</string>
<string name="nfc_blocked_while_viewing_card">NFC je pauziran</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Pauzira NFC kako bi se spriječilo aktiviranje NFC plaćanja tijekom prikazivanja kartice</string>
</resources>
@@ -292,4 +292,7 @@
<string name="pref_enable_acra_summary">Ketika diaktifkan, Anda akan diminta untuk melaporkan crash saat terjadi. Laporan crash tidak pernah dikirim secara otomatis.</string>
<string name="copy_value">Salin nilai</string>
<string name="copied_to_clipboard">Disalin ke papan klip</string>
<string name="nothing_to_copy">Tidak ditemukan nilai</string>
<string name="barcodeEncoding">Pengkodean barcode</string>
<string name="back">Kembali</string>
</resources>
+53 -29
View File
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="action_add">Bæta</string>
<string name="noBarcode">Nei strikamerkið</string>
<string name="noBarcode">Ekkert strikamerki</string>
<string name="action_search">Leita að</string>
<string name="delete">Eyða</string>
<string name="noGiftCards">Smelltu á + plús takka til að bæta korti, eða að flytja inn frá ⋮ Valmynd.</string>
<string name="noGiftCards">Smelltu á + plús takka til að bæta korti, eða að flytja inn frá ⋮ Valmynd</string>
<string name="note">Athugið</string>
<string name="barcodeType">Strikamerkið tegund</string>
<string name="cancel">Hætta</string>
@@ -12,61 +12,61 @@
<string name="storeName">Nafnið</string>
<string name="star">Bæta við eftirlæti</string>
<string name="unstar">Fjarlægja frá eftirlæti</string>
<string name="save">Sparaðu</string>
<string name="save">Vista</string>
<string name="edit">Breyta</string>
<string name="confirm">Staðfesta</string>
<string name="ok">OK</string>
<string name="sendLabel">Sendu…</string>
<string name="deleteConfirmation">Eyða þetta kort til frambúðar\?</string>
<string name="deleteConfirmation">Eyða þessu korti til frambúðar?</string>
<string name="share">Deila</string>
<string name="editCardTitle">Breyta Kort</string>
<string name="addCardTitle">Bæta Kort</string>
<string name="scanCardBarcode">Skanna Kort Strikamerkið</string>
<string name="noCardsMessage">Bæta kort fyrstu</string>
<string name="exportFailedTitle">Flytja mistókst</string>
<string name="exportSuccessfulTitle">Flutt</string>
<string name="noCardExistsError">Gæti ekki fundið kort</string>
<string name="failedParsingImportUriError">Get ekki lesið inn URI</string>
<string name="exportName">Flytja</string>
<string name="importExportHelp">Stuðningur upp spil gerir þér kleift að færa þá til annar tæki.</string>
<string name="importSuccessfulTitle">Flutt</string>
<string name="editCardTitle">Breyta Korti</string>
<string name="addCardTitle">Bæta við korti</string>
<string name="scanCardBarcode">Skanna Strikamerkið</string>
<string name="noCardsMessage">Bæta fyrst við korti</string>
<string name="exportFailedTitle">Útflutningur mistókst</string>
<string name="exportSuccessfulTitle">Flutt út</string>
<string name="noCardExistsError">Gat ekki fundið þetta kort</string>
<string name="failedParsingImportUriError">Get ekki flutt inn URI</string>
<string name="exportName">Flytja út</string>
<string name="importExportHelp">Afritun gagna gerir þér kleift að færa þá annað tæki</string>
<string name="importSuccessfulTitle">Flutt inn</string>
<string name="importFailedTitle">Innflutningur mistókst</string>
<string name="exportOptionExplanation">Gögnum verður skrifað á stað af eigin vali.</string>
<string name="exportOptionExplanation">Gögnin verðs skrifuð á stað sem þú velur</string>
<string name="importOptionFilesystemTitle">Innflutningur frá möppuna</string>
<string name="importOptionFilesystemExplanation">Velja ákveðna skrá frá möppuna.</string>
<string name="importOptionFilesystemExplanation">Velja ákveðna skrá úr skráakerfinu</string>
<string name="starImage">Uppáhalds stjörnu</string>
<string name="never">Aldrei</string>
<string name="currency">Mynt</string>
<string name="moveBarcodeToTopOfScreen">Færa strikamerkið að efst á skjánum</string>
<string name="errorReadingImage">Gat ekki lesið ímynd</string>
<string name="errorReadingImage">Gat ekki lesið mynd</string>
<string name="about">Um</string>
<string name="settings">Stillingar</string>
<string name="settings_keep_screen_on">Halda á skjánum</string>
<string name="settings_disable_lockscreen_while_viewing_card">Að koma í veg fyrir að læsa skjánum</string>
<string name="settings_disable_lockscreen_while_viewing_card">Koma í veg fyrir skjálæsingu</string>
<string name="editBarcode">Breyta strikamerkið</string>
<string name="settings_light_theme">Ljós</string>
<string name="importOptionFilesystemButton">Frá möppuna</string>
<string name="chooseImportType">Flytja gögn úr\?</string>
<string name="chooseImportType">Flytja gögn úr</string>
<string name="balance">Jafnvægi</string>
<string name="points">Stig</string>
<string name="selectBarcodeTitle">Veldu Strikamerkið</string>
<string name="thumbnailDescription">Þumalinn fyrir kort</string>
<string name="selectBarcodeTitle">Velja strikamerki</string>
<string name="thumbnailDescription">Táknmynd</string>
<string name="settings_theme">Þema</string>
<string name="app_license">Copylefted frítt hugbúnaður, leyfi GPLv3+</string>
<string name="noBarcodeFound">Nei strikamerkið var komist</string>
<string name="settings_system_theme">Kerfi</string>
<string name="settings_dark_theme">Dökk</string>
<string name="settings_display_barcode_max_brightness">Bjartari strikamerkið skoða</string>
<string name="settings_display_barcode_max_brightness">Bjartari skjá</string>
<string name="enter_group_name">Inn nafn hópur</string>
<string name="intent_import_card_from_url_share_text">Ég vil deila kort með þér</string>
<string name="importSuccessful">Kortið gögn flutt</string>
<string name="importSuccessful">Gögn flutt inn</string>
<string name="groups">Tekur</string>
<string name="exportSuccessful">Kortagögn flutt út</string>
<string name="failedOpeningFileManager">Setja skráasafn fyrst.</string>
<string name="exportSuccessful">Gögn flutt út</string>
<string name="failedOpeningFileManager">Gat ekki opnað skráakerfistjóra</string>
<string name="moveUp">Fara upp</string>
<string name="leaveWithoutSaveTitle">Brottför</string>
<string name="leaveWithoutSaveConfirmation">Fara án þess að bjarga\?</string>
<string name="addFromImage">Veldu mynd frá gallerí</string>
<string name="addFromImage">Veldu mynd úr gallerí</string>
<string name="card">Kort</string>
<string name="expiryDate">Fyrningu</string>
<string name="moveDown">Fara neðar</string>
@@ -75,8 +75,32 @@
<item quantity="one"><xliff:g>%d</xliff:g> valið</item>
<item quantity="other"><xliff:g>%d</xliff:g> valin</item>
</plurals>
<string name="noGiftCardsGroup">Búðu til nokkur kort og settu þau síðan í hópinn hér.</string>
<string name="noGiftCardsGroup">Búðu til nokkur kort og settu þau síðan í hópinn hér</string>
<string name="sort">flokka</string>
<string name="sort_by">flokka Eftir</string>
<string name="nextCard">Næsta</string>
</resources>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Eyða þessu <xliff:g>%d</xliff:g> korti varanlega?</item>
<item quantity="other">Eyða þessum <xliff:g>%d</xliff:g> kortum varanlega?</item>
</plurals>
<string name="barcodeImageDescriptionWithType">Mynd <xliff:g>%s</xliff:g> strikamerki</string>
<string name="importExport">Flytja inn/út</string>
<string name="importFailed">Gat ekki flutt inn</string>
<string name="app_name">Catima</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Eyða <xliff:g>%d</xliff:g> korti</item>
<item quantity="other">Eyða <xliff:g>%d</xliff:g> kortum</item>
</plurals>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> kort</item>
<item quantity="other"><xliff:g>%d</xliff:g> kort</item>
</plurals>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> punktur</item>
<item quantity="other"><xliff:g>%s</xliff:g> punktar</item>
</plurals>
<string name="previousCard">Fyrra</string>
<string name="failedToOpenUrl">Settu inn vef-vafra fyrst</string>
<string name="welcome">Velkomin að Catima</string>
<string name="importCards">Flytja inn kort</string>
</resources>
+40 -30
View File
@@ -3,7 +3,7 @@
<string name="action_search">Cerca</string>
<string name="action_add">Aggiungi</string>
<string name="noGiftCards">Premi il pulsante + per aggiungere una carta oppure importala dal menù ⋮</string>
<string name="noMatchingGiftCards">Nessun risultato. Prova a cambiare la tua ricerca.</string>
<string name="noMatchingGiftCards">Nessun risultato. Prova a modificare la ricerca.</string>
<string name="storeName">Nome</string>
<string name="note">Note</string>
<string name="cardId">Codice</string>
@@ -18,10 +18,10 @@
<string name="editCardTitle">Modifica carta</string>
<string name="addCardTitle">Aggiungi carta</string>
<string name="scanCardBarcode">Scansiona codice a barre</string>
<string name="cardShortcut">Scorciatoia per la carta</string>
<string name="cardShortcut">Scorciatoia carta</string>
<string name="noCardsMessage">Aggiungi prima una carta</string>
<string name="noCardExistsError">Impossibile trovare quella carta</string>
<string name="failedParsingImportUriError">Impossibile analizzare l\'URI di importazione</string>
<string name="failedParsingImportUriError">Impossibile processare l\'URI di importazione</string>
<string name="importExport">Importa/esporta</string>
<string name="exportName">Esporta</string>
<string name="importExportHelp">Il backup dei dati permette di spostarli su un altro dispositivo</string>
@@ -34,7 +34,7 @@
<string name="importing">Importazione in corso…</string>
<string name="exporting">Esportazione in corso…</string>
<string name="importOptionFilesystemTitle">Importa dall\'archivio</string>
<string name="importOptionFilesystemExplanation">Scegli un file dall\'archivio.</string>
<string name="importOptionFilesystemExplanation">Scegli un file specifico dal filesystem</string>
<string name="importOptionFilesystemButton">Dall\'archivio</string>
<string name="about">Informazioni</string>
<string name="app_license">Software libero con copyleft, licenza GPLv3+</string>
@@ -53,14 +53,14 @@
<string name="importSuccessful">Dati importati</string>
<string name="app_copyright_old">Basato su Loyalty Card Keychain
\ncopyright © 20162020 Branden Archer</string>
<string name="exportOptionExplanation">I dati verranno scritti in una posizione a tua scelta.</string>
<string name="exportOptionExplanation">I dati verranno scritti nella posizione da te scelta</string>
<string name="barcodeType">Tipo di codice a barre</string>
<string name="unstar">Rimuovi dai preferiti</string>
<string name="star">Aggiungi ai preferiti</string>
<string name="starImage">Stella dei preferiti</string>
<string name="deleteConfirmationGroup">Eliminare il gruppo\?</string>
<string name="all">Tutti</string>
<string name="noGroups">Clicca sul pulsante + per aggiungere i gruppi per la categorizzazione.</string>
<string name="noGroups">Clicca sul pulsante + per aggiungere gruppi per la categorizzazione</string>
<string name="groups">Gruppi</string>
<string name="enter_group_name">Inserisci il nome del gruppo</string>
<string name="groupsList">Gruppi: <xliff:g>%s</xliff:g></string>
@@ -69,7 +69,7 @@
<string name="leaveWithoutSaveTitle">Esci</string>
<string name="moveDown">Sposta in basso</string>
<string name="moveUp">Sposta in alto</string>
<string name="failedOpeningFileManager">Installa prima un gestore di file.</string>
<string name="failedOpeningFileManager">Impossibile aprire un gestore di file</string>
<string name="noBarcode">Nessun codice a barre</string>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> carta</item>
@@ -94,17 +94,13 @@
<string name="settings_disable_lockscreen_while_viewing_card">Impedisci il blocco dello schermo</string>
<string name="accept">Accetta</string>
<string name="privacy_policy">Informativa sulla riservatezza</string>
<string name="importVoucherVaultMessage">Seleziona il tuo file di esportazione <i>vouchervault.json</i> da Voucher Vault per importarlo.
\nCrealo premendo prima Esporta in Voucher Vault.</string>
<string name="importVoucherVaultMessage">Seleziona il tuo file di esportazione da Voucher Vault per importarlo. \nCrealo premendo Esporta in Voucher Vault.</string>
<string name="importVoucherVault">Importa da Voucher Vault</string>
<string name="importLoyaltyCardKeychainMessage">Seleziona il tuo file di esportazione <i>LoyaltyCardKeychain.csv</i> da Loyalty Card Keychain per importarlo.
\nCrealo dal menù Importa/Esporta in Loyalty Card Keychain premendo prima su Esporta.</string>
<string name="importLoyaltyCardKeychainMessage">Seleziona il tuo file di esportazione da Loyalty Card Keychain per importarlo. \nCrealo dal menu Importa/Esporta in Loyalty Card Keychain premendo su Esporta.</string>
<string name="importLoyaltyCardKeychain">Importa da Loyalty Card Keychain</string>
<string name="importFidmeMessage">Seleziona il tuo file di esportazione <i>fidme-export-request-xxxxxx.zip</i> da FidMe per importare e seleziona successivamente i tipi di codice a barre manualmente.
\nCrealo dal tuo profilo FidMe scegliendo Protezione Dati e poi premendo Estrai i miei dati prima.</string>
<string name="importFidmeMessage">Seleziona il tuo file di esportazione da FidMe per importarlo, dopodiché seleziona i tipi di codice a barre manualmente. \nPer crearlo, si fa dal tuo profilo FidMe scegliendo \"Data Protection\" e poi \"Extract my data\".</string>
<string name="importFidme">Importa da FidMe</string>
<string name="importCatimaMessage">Seleziona il file di esportazione <i>catima.zip</i> per importarlo.
\nCrealo dal menù Importa/Esporta di un\'altra applicazione Catima premendo prima Esporta.</string>
<string name="importCatimaMessage">Seleziona il file di esportazione per importarlo. \nSi può creare dal menu Importa/esporta di un\'altra applicazione Catima premendo su Esporta.</string>
<string name="importCatima">Importa da Catima</string>
<string name="setBarcodeId">Imposta il valore del codice a barre</string>
<string name="sameAsCardId">Uguale al codice</string>
@@ -114,8 +110,8 @@
<string name="addFromImage">Seleziona un\'immagine dalla galleria</string>
<string name="unsupportedBarcodeType">Questo tipo di codice a barre non può ancora essere visualizzato. Potrebbe essere supportato in una versione successiva dell\'applicazione.</string>
<string name="wrongValueForBarcodeType">Il valore non è valido per il tipo di codice a barre selezionato</string>
<string name="app_resources">Risorse libere di terze parti: <xliff:g id="app_resources_list"> %s </xliff:g></string>
<string name="app_libraries">Librerie libere di terze parti: <xliff:g id="app_libraries_list"> %s </xliff:g></string>
<string name="app_resources">Risorse di terze parti: <xliff:g id="app_resources_list"> %s </xliff:g></string>
<string name="app_libraries">Librerie di terze parti: <xliff:g id="app_libraries_list"> %s </xliff:g></string>
<string name="intent_import_card_from_url_share_multiple_text">Voglio condividere alcune carte con te</string>
<string name="no">No</string>
<string name="yes"></string>
@@ -128,10 +124,10 @@
<string name="photos">Foto</string>
<string name="backImageDescription">Immagine posteriore</string>
<string name="frontImageDescription">Immagine frontale</string>
<string name="passwordRequired">Si prega di inserire la password</string>
<string name="passwordRequired">Inserire la password</string>
<string name="turn_flashlight_off">Spegni la torcia</string>
<string name="turn_flashlight_on">Accendi la torcia</string>
<string name="failedGeneratingShareURL">Impossibile generare un URL condivisibile. Si prega di segnalarlo.</string>
<string name="failedGeneratingShareURL">Impossibile generare un URL da condividere</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> selezionata</item>
<item quantity="many"><xliff:g>%d</xliff:g> selezionate</item>
@@ -157,11 +153,11 @@
<string name="sort_by">Ordina per</string>
<string name="reverse">…in ordine inverso</string>
<string name="sort_by_expiry">Scadenza</string>
<string name="sort_by_most_recently_used">Usate più recentemente</string>
<string name="sort_by_most_recently_used">Le più recentemente utilizzate</string>
<string name="sort_by_name">Nome</string>
<string name="sort">Ordina</string>
<string name="license">Licenza</string>
<string name="source_repository">Repository del codice sorgente</string>
<string name="source_repository">Repository dei sorgenti</string>
<string name="on_github">su GitHub</string>
<string name="exportPasswordHint">Inserisci la password</string>
<string name="on_google_play">su Google Play</string>
@@ -197,7 +193,7 @@
<string name="unarchive">Disarchivia</string>
<string name="unarchived">Carta non archiviata</string>
<string name="archived">Carta archiviata</string>
<string name="failedLaunchingPhotoPicker">Impossibile trovare un\'app galleria supportata</string>
<string name="failedLaunchingPhotoPicker">Impossibile trovare un selettore di immagini supportato</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> carta (<xliff:g id="archivedCount">%2$d</xliff:g> archiviata)</item>
<item quantity="many"><xliff:g>%1$d</xliff:g> carte (<xliff:g id="archivedCount">%2$d</xliff:g> archiviate)</item>
@@ -209,7 +205,7 @@
<string name="failedToOpenUrl">Installa prima un browser web</string>
<string name="failedToRetrieveImageFile">Impossibile ottenere il file dell\'immagine</string>
<string name="barcodeLongPressMessage">Si possono aprire solo immagini dell\'app della galleria</string>
<string name="cameraPermissionDeniedTitle">È impossibile accedere alla fotocamera</string>
<string name="cameraPermissionDeniedTitle">Impossibile accedere alla fotocamera</string>
<string name="noCameraPermissionDirectToSystemSetting">Per poter scansionare i codici a barre, Catima ha bisogno di accedere alla tua fotocamera. Premi qui per poter cambiare le impostazioni dei permessi.</string>
<string name="updateBalance">Aggiorna bilancio</string>
<string name="updateBalanceTitle">Quanto hai speso o ricevuto?</string>
@@ -227,16 +223,16 @@
<string name="switchToFrontImage">Passa all\'immagine frontale</string>
<string name="switchToBackImage">Passa all\'immagine dietro</string>
<string name="switchToBarcode">Passa al codice a barre</string>
<string name="openFrontImageInGalleryApp">Apri l\'immagine frontale nell\'app Galleria</string>
<string name="openFrontImageInGalleryApp">Apri immagine frontale nell\'app per la visualizzazione di immagini</string>
<string name="donate">Dona</string>
<string name="openBackImageInGalleryApp">Apri l\'immagine posteriore nell\'app Galleria</string>
<string name="openBackImageInGalleryApp">Apri l\'immagine retro nell\'app per la visualizzazione di immagini</string>
<string name="setBarcodeHeight">Imposta l\'altezza del codice a barre</string>
<string name="icon_header_click_text">Premi a lungo per modificare l\'immagine</string>
<string name="show_note">Mostra nota</string>
<string name="show_balance">Mostra bilancio</string>
<string name="show_validity">Mostra validità</string>
<string name="show_name_below_image_thumbnail">Mostra il nome sotto l\'immagine</string>
<string name="permissionReadCardsLabel">Leggi le carte Catima</string>
<string name="permissionReadCardsLabel">Leggi Carte Catima</string>
<string name="settings_allow_content_provider_read_summary">Le applicazioni dovranno comunque richiedere l\'autorizzazione per ottenere l\'accesso</string>
<string name="settings_allow_content_provider_read_title">Consenti ad altre applicazioni di accedere ai miei dati</string>
<string name="permissionReadCardsDescription">Leggere le sue carte e tutti i suoi dettagli, comprese le note e le immagini</string>
@@ -263,7 +259,7 @@
<string name="app_name">Catima</string>
<string name="add_manually_warning_title">Consigliata scansione</string>
<string name="continue_">Successivo</string>
<string name="add_manually_warning_message">In alcuni negozi, il valore del codice a barre differisce dal numero scritto sulla carta. Per questo motivo, l\'inserimento manuale del codice a barre potrebbe non funzionare sempre. Si consiglia di scansionare il codice a barre con la fotocamera. Vuoi continuare lo stesso?</string>
<string name="add_manually_warning_message">Per alcune carte, il valore del codice a barre differisce dal numero scritto sulla carta. Per questo motivo, l\'inserimento manuale del codice a barre potrebbe non funzionare sempre. Per questo motivo si consiglia di scansionare il codice a barre con la fotocamera. Vuoi procedere lo stesso?</string>
<string name="amountParsingFailed">Importo non valido</string>
<string name="spend">Spendi</string>
<string name="receive">Ricevi</string>
@@ -291,14 +287,28 @@
<string name="settings_column_count_5">5</string>
<string name="settings_category_title_cards_overview">Panoramica delle carte</string>
<string name="unsupportedFile">Questo file non è supportato</string>
<string name="generic_error_please_retry">Siamo spiacenti, qualcosa è andato storto, riprova...</string>
<string name="addFromPkpass">Seleziona un file Passbook (.pkpass)</string>
<string name="generic_error_please_retry">Rilevato un errore</string>
<string name="addFromPkpass">Seleziona un file Passbook (.pkpass/.pkpasses)</string>
<string name="sort_by_valid_from">Valido da</string>
<string name="setBarcodeWidth">Imposta la larghezza del codice a barre</string>
<string name="setBarcodeWidth">Imposta larghezza del codice a barre</string>
<string name="width">Larghezza</string>
<string name="card_list_widget_name">Lista delle carte</string>
<string name="card_list_widget_empty">Dopo aver aggiunto alcune carte fedeltà in Catima, queste appariranno qui. Se hai delle carte, assicurati che non siano tutte archiviate.</string>
<string name="cardWithNumber">Carta <xliff:g>%d</xliff:g></string>
<string name="cardWithNumberAndLocale">Carta <xliff:g>%d</xliff:g> (<xliff:g>%s</xliff:g>)</string>
<string name="acra_crash_email_subject"><xliff:g id="app_name">%s</xliff:g> rapporto sull\'incidente</string>
<string name="pleaseDoNotRotateTheDevice">Si prega di non ruotare il dispositivo, perché così si annullerà l\'azione</string>
<string name="acra_catima_has_crashed">Siamo spiacenti, ma <xliff:g id="app_name">%s</xliff:g> si è interrotta. Aiutaci a risolvere questo problema inviandoci un resoconto dell\'errore.</string>
<string name="acra_explain_crash">Se possibile, si prega di aggiungere ulteriori dettagli su quello che si stava facendo:</string>
<string name="pref_enable_acra">Chiedi di inviare resoconti di interruzioni anomale</string>
<string name="pref_enable_acra_summary">Quando attivo, ti verrà chiesto di inviare un resoconto dell\'interruzione quando avviene. I resoconti non sono mai inviati automaticamente.</string>
<string name="copy_value">Copia valore</string>
<string name="copied_to_clipboard">Copiato negli appunti</string>
<string name="nothing_to_copy">Nessun valore trovato</string>
<string name="barcodeEncoding">Codifica codici a barre</string>
<string name="back">Indietro</string>
<string name="settings_disable_nfc_while_viewing_card">Pausa NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Sospende la funzione NFC per impedire che i pagamenti NFC vengano attivati durante la visualizzazione di una carta</string>
<string name="nfc_blocked_while_viewing_card">La funzione NFC è disattivata</string>
<string name="change_settings">Modifica impostazioni</string>
</resources>
+5
View File
@@ -8,4 +8,9 @@
</plurals>
<string name="action_add">הוסף</string>
<string name="noGiftCards">לחץ על כפתור הפלוס (+) כדי להוסיף כרטיס, או ייבא מתפריט ⋮.</string>
<string name="noMatchingGiftCards">אין תוצאות. נסה לשנות את החיפוש.</string>
<string name="storeName">שם החנות</string>
<string name="note">הערות</string>
<string name="barcodeType">סוג ברקוד</string>
<string name="noBarcode">אין ברקוד</string>
</resources>
+6
View File
@@ -292,4 +292,10 @@
<string name="copy_value">値をコピー</string>
<string name="copied_to_clipboard">クリップボードへコピー</string>
<string name="nothing_to_copy">値が見つかりません</string>
<string name="barcodeEncoding">バーコードの符号化</string>
<string name="back">戻る</string>
<string name="settings_disable_nfc_while_viewing_card">NFCを一時停止</string>
<string name="settings_disable_nfc_while_viewing_card_summary">カードの表示中にNFC決済が誤って実行されないようにNFCを一時停止します</string>
<string name="nfc_blocked_while_viewing_card">NFCは停止中です</string>
<string name="change_settings">設定を変更する</string>
</resources>
+6 -9
View File
@@ -87,7 +87,7 @@
<string name="settings_locale">언어</string>
<string name="settings_system_locale">시스템</string>
<string name="selectColor">색상 선택</string>
<string name="app_contributors">기여자: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="app_contributors">제작 지원: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="showMoreInfo">정보 보기</string>
<string name="updateBalance">잔액 업데이트</string>
<string name="failedToRetrieveImageFile">이미지 파일을 검색하지 못했습니다</string>
@@ -210,17 +210,13 @@
<string name="app_loyalty_card_keychain">로열티 카드 키체인</string>
<string name="privacy_policy">개인 정보 정책</string>
<string name="importCatima">Catima에서 가져오기</string>
<string name="importCatimaMessage">가져올 Catima에서 <i>catima.zip</i> 내보내기를 선택합니다.
\n먼저 내보내기를 눌러 다른 Catima 앱의 가져오기/내보내기 메뉴에서 생성합니다.</string>
<string name="importCatimaMessage">가져올 Catima에서 <i>catima.zip</i> 내보내기를 선택합니다. \n먼저 내보내기를 눌러 다른 Catima 앱의 가져오기/내보내기 메뉴에서 생성합니다.</string>
<string name="importFidme">FidMe에서 가져오기</string>
<string name="importFidmeMessage">가져올 FidMe에서 <i>fidme-export-request-xxxxxx.zip</i> 내보내기를 선택하고 나중에 바코드 유형을 수동으로 선택합니다.
\n데이터 보호를 선택한 다음 먼저 내 데이터 추출을 눌러 FidMe 프로필에서 생성합니다.</string>
<string name="importLoyaltyCardKeychainMessage">가져올 포인트 카드 키체인에서 <i>LoyaltyCardKeychain.csv</i> 내보내기를 선택합니다.
\n먼저 내보내기를 눌러 로열티 카드 키체인의 가져오기/내보내기 메뉴에서 만드십시오.</string>
<string name="importFidmeMessage">가져올 FidMe에서 <i>fidme-export-request-xxxxxx.zip</i> 내보내기를 선택하고 나중에 바코드 유형을 수동으로 선택합니다. \n데이터 보호를 선택한 다음 먼저 내 데이터 추출을 눌러 FidMe 프로필에서 생성합니다.</string>
<string name="importLoyaltyCardKeychainMessage">가져올 포인트 카드 키체인에서 <i>LoyaltyCardKeychain.csv</i> 내보내기를 선택합니다. \n먼저 내보내기를 눌러 로열티 카드 키체인의 가져오기/내보내기 메뉴에서 만드십시오.</string>
<string name="setBarcodeId">바코드 값 설정</string>
<string name="importVoucherVault">Voucher Vault에서 가져오기</string>
<string name="importVoucherVaultMessage">가져올 Voucher Vault에서 <i>vouchervault.json</i> 내보내기를 선택합니다.
\n먼저 바우처 금고에서 내보내기를 눌러 생성하세요.</string>
<string name="importVoucherVaultMessage">가져올 Voucher Vault에서 <i>vouchervault.json</i> 내보내기를 선택합니다. \n먼저 바우처 금고에서 내보내기를 눌러 생성하세요.</string>
<string name="sameAsCardId">아이디와 동일</string>
<string name="previousCard">이전의</string>
<string name="nextCard">다음</string>
@@ -284,4 +280,5 @@
<string name="sort_by_valid_from">유효 기간</string>
<string name="width">너비</string>
<string name="setBarcodeWidth">바코드 너비를 설정하세요</string>
<string name="card_list_widget_name">카드 목록</string>
</resources>
+4
View File
@@ -280,4 +280,8 @@
<string name="sort_by_valid_from">Teisinga forma</string>
<string name="settings_use_volume_keys_navigation">Keisti korteles su garso mygtukais</string>
<string name="settings_use_volume_keys_navigation_summary">Naudokite garso mygtukus kortelių pakeitimui</string>
<string name="settings_category_title_cards_overview">Kortelių apžvalga</string>
<string name="settings_column_count_portrait">Stulpeliai vertikaliame režime</string>
<string name="settings_column_count_landscape">Stulpeliai horizontaliame režime</string>
<string name="settings_automatic_column_count">Automatiškai</string>
</resources>
+3 -1
View File
@@ -145,7 +145,7 @@
<string name="privacy_policy">Privātuma politika</string>
<string name="accept">Pieņemt</string>
<string name="editGroup">Kopas labošana: <xliff:g>%s</xliff:g></string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Autortiesības © 2019<xliff:g>%d</xliff:g> Sylvia van Os</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Autortiesības © 2019<xliff:g>%d</xliff:g> Sylvia van Os un līdzdalībnieki</string>
<string name="app_copyright_old">Balstīta uz Loyalty Card Keychain
\nautortiesības © 20162020 Branden Archer</string>
<string name="debug_version_fmt">Versija: <xliff:g id="version">%s</xliff:g></string>
@@ -305,4 +305,6 @@
<string name="copy_value">Ievietot vērtību starpliktuvē</string>
<string name="copied_to_clipboard">Ievietots starpliktuvē</string>
<string name="nothing_to_copy">Nav atrasta vērtība</string>
<string name="barcodeEncoding">Svītrkoda šifrēšana</string>
<string name="back">Atpakaļ</string>
</resources>
+7 -7
View File
@@ -29,13 +29,13 @@
<string name="exportFailedTitle">Kunne ikke eksportere</string>
<string name="exportFailed">Kunne ikke utføre eksport</string>
<string name="importing">Importerer…</string>
<string name="exporting">Exporterer…</string>
<string name="exporting">Eksporterer…</string>
<string name="exportOptionExplanation">Data skrives dit du ønsker det.</string>
<string name="importOptionFilesystemTitle">Importer fra filsystem</string>
<string name="importOptionFilesystemExplanation">Velg spesifikk fil fra filsystemet.</string>
<string name="importOptionFilesystemExplanation">Velg en bestemt fil fra filsystemet.</string>
<string name="importOptionFilesystemButton">Fra filsystem</string>
<string name="about">Om</string>
<string name="app_license">Gemenhetslig fri programvare, lisensiert GPLv3+</string>
<string name="app_license">Opphavsrettslig fri programvare, lisensiert GPLv3+</string>
<string name="about_title_fmt">Om <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Versjon: <xliff:g id="version">%s</xliff:g></string>
<string name="selectBarcodeTitle">Velg strekkode</string>
@@ -48,7 +48,7 @@
<string name="settings_dark_theme">Mørk</string>
<string name="settings_light_theme">Lys</string>
<string name="settings_system_theme">System</string>
<string name="settings_theme">Drakt</string>
<string name="settings_theme">Tema</string>
<string name="app_copyright_old">Basert på Kundekortknippe
\nopphavsrett 20162020 Branden Archer</string>
<string name="failedParsingImportUriError">Kunne ikke tolke importerings-URI</string>
@@ -132,10 +132,10 @@
<item quantity="one"><xliff:g>%d</xliff:g> valgt</item>
<item quantity="other"><xliff:g>%d</xliff:g> valgt</item>
</plurals>
<string name="deleteConfirmation">Slett dette kortet for godt?</string>
<string name="deleteConfirmation">Slette dette kortet for godt?</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Slett dette <xliff:g>%d</xliff:g> kortet for godt\?</item>
<item quantity="other">Slett disse <xliff:g>%d</xliff:g> kortene for godt\?</item>
<item quantity="one">Slette dette <xliff:g>%d</xliff:g> kortet for godt?</item>
<item quantity="other">Slette disse <xliff:g>%d</xliff:g> kortene for godt?</item>
</plurals>
<string name="turn_flashlight_on">Skru på lommelykten</string>
<string name="turn_flashlight_off">Skru av lommelykten</string>
+6
View File
@@ -299,4 +299,10 @@
<string name="nothing_to_copy">Geen waarde gevonden</string>
<string name="copied_to_clipboard">Gekopieerd naar klembord</string>
<string name="copy_value">Kopieer waarde</string>
<string name="back">Terug</string>
<string name="barcodeEncoding">Barcodecodering</string>
<string name="change_settings">Verander instellingen</string>
<string name="settings_disable_nfc_while_viewing_card">Pauzeer NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Pauzeert NFC om te voorkomen dat NFC-betalingen activeren tijdens het bekijken van een kaart</string>
<string name="nfc_blocked_while_viewing_card">NFC is gepauzeerd</string>
</resources>
+80 -3
View File
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="app_name">کاتیما</string>
<string name="action_search">گشتن</string>
<string name="action_add">اضافه کردن</string>
@@ -7,7 +7,7 @@
<item quantity="one"><xliff:g>%d</xliff:g> انتخاب شد</item>
<item quantity="other"><xliff:g>%d</xliff:g> انتخاب شد</item>
</plurals>
<string name="noGiftCards">برای اضافه کردن کارت، روی دکمه + به علاوه بزنید ، یا از منوی ⋮ توش کنید</string>
<string name="noGiftCards">برای اضافه کردن کارت، روی دکمه + به علاوه بزنید ، یا از منوی ⋮ وارد کنید</string>
<string name="noMatchingGiftCards">بدون نتیجه. سعی کن گشتن تون رو عوض کنید</string>
<string name="storeName">اسم</string>
<string name="note">نسخه برداری</string>
@@ -55,7 +55,7 @@
<string name="permissionReadCardsLabel">کارت های کاتیما رو بخونید</string>
<string name="permissionReadCardsDescription">کارتای کاتیما و تمام جزئیاتشون از جمله یادداشت‌ها و عکس‌ها رو بخون</string>
<string name="cameraPermissionDeniedTitle">دسترسی به دوربین گرفته نشد</string>
<string name="noCameraPermissionDirectToSystemSetting">"برای اسکن بارکدای کاتیما ، دسترسی به دوربین نیازه. برای تغییر تنظیمات مجوز، اینجا رو لمس کن"</string>
<string name="noCameraPermissionDirectToSystemSetting">برای اسکن بارکد ها، کاتیما نیاز داره به دوربین شما دسترسی داشته باشه. اینجا بزنید تا تنظیمات دسترسی خود را تغییر دهید.</string>
<string name="exportOptionExplanation">داده‌ها تو جای دلخواه خودت نوشته میشه</string>
<string name="importOptionFilesystemTitle">ورود از فایل سیستم</string>
<string name="importOptionFilesystemExplanation">یه فایل خاص رو از سیستم انتخاب کن</string>
@@ -219,4 +219,81 @@
<string name="updateBalanceTitle">چقدر هزینه کردی یا گرفتی؟</string>
<string name="updateBalanceHint">مبلغ رو وارد کن</string>
<string name="currentBalanceSentence">موجودی فعلی: <xliff:g>%s</xliff:g></string>
<string name="newBalanceSentence">موجودی جدید: <xliff:g>%s</xliff:g></string>
<string name="validFromDate">معتبر از</string>
<string name="anyDate">هر وقتی</string>
<string name="chooseValidFromDate">معتبر از تاریخ رو انتخاب کن</string>
<string name="validFromSentence">معتبر از: <xliff:g>%s</xliff:g></string>
<string name="height">ارتفاع</string>
<string name="switchToFrontImage">تغییر به عکس جلو</string>
<string name="switchToBackImage">تغییر به عکس عقب</string>
<string name="switchToBarcode">به بارکد تغییر بده</string>
<string name="openFrontImageInGalleryApp">عکس جلویی رو تو image viewer app باز کن</string>
<string name="openBackImageInGalleryApp">باز کردن عکس تو image viewer app</string>
<string name="setBarcodeHeight">تنظیم ارتفاع بارکد</string>
<string name="donate">کمک مالی کن</string>
<string name="icon_header_click_text">برای ویرایش عکس کوچیک، فشار طولانی بده</string>
<string name="show_name_below_image_thumbnail">نمایش اسم زیر عکس بندانگشتی</string>
<string name="show_note">دیدن یادداشت</string>
<string name="show_balance">دیدن موجودی</string>
<string name="show_validity">دیدن دارایی</string>
<string name="settings_category_title_cards">نمای کارت</string>
<string name="settings_category_title_cards_overview">نمای کلی به کارت‌ها</string>
<string name="settings_column_count_portrait">سطون ها تو حالت عمودی</string>
<string name="settings_column_count_landscape">سطون ها تو حالت افقی</string>
<string name="settings_automatic_column_count">خودکار</string>
<string name="settings_column_count_1">۱</string>
<string name="settings_column_count_2">۲</string>
<string name="settings_column_count_3">۳</string>
<string name="settings_column_count_4">۴</string>
<string name="settings_column_count_5">۵</string>
<string name="settings_column_count_6">۶</string>
<string name="settings_column_count_7">۷</string>
<string name="settings_category_title_general">عمومی</string>
<string name="settings_category_title_privacy">حریم شخصی</string>
<string name="action_display_options">گزینه های نمایش</string>
<string name="show_archived_cards">دیدن کارت‌های بایگانی شده</string>
<string name="view_online">دیدن انلاین</string>
<string name="action_more_options">گزینه‌های بیشتر</string>
<string name="addWithoutBarcode">اضافه کردن کارت بدون بارکد</string>
<string name="enter_card_id">شماره شناسایی یا متن روی کارت خودتو وارد کن</string>
<string name="card_id_must_not_be_empty">شناسه کارت نباید خالی باشه</string>
<string name="add_a_card_in_a_different_way">یه کارت با روش‌دیگه اضاف کن</string>
<string name="field_must_not_be_empty">فیلد نباید خالی باشه</string>
<string name="manually_enter_barcode_instructions">شماره شناسایی یا متن روی کارت خودتو وارد‌کن و بارکدی رو که شبیه بارکد روی کارت خودته، فشار بده.</string>
<string name="add_manually_warning_title">اسکن توصیه میشه</string>
<string name="add_manually_warning_message">برای بعضی از کارت‌ها، اندازه بارکد با عدد نوشته شده روی کارت متفاوته. به همین دلیل، وارد کردن دستی بارکد ممکنه همیشه کار نکنه. توصیه میشه به جای این، بارکد رو با دوربین خودت اسکن کنی. میخای هنوز ادامه بدی؟</string>
<string name="continue_">ادامه</string>
<string name="spend">خرج کردن</string>
<string name="receive">گرفتن</string>
<string name="amountParsingFailed">اندازه نامعتبر</string>
<string name="addFromPdfFile">یه فایل PDF انتخاب کن</string>
<string name="errorReadingFile">نتونستم فایل رو بخونم</string>
<string name="failedLaunchingFileManager">نتونستم یه مدیر فایل پشتیبانی شده پیدا کنم</string>
<string name="multipleBarcodesFoundPleaseChooseOne">از کدوم بارکد‌های پیدا شده میخای استفاده کنی ؟</string>
<string name="pageWithNumber">صفحه <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">به نظر نمیرسه دستگاهت دوربین داشته باشه. اگه داره، دستگاه رو دوباره راه‌اندازی کن. در غیر این صورت، از دکمه گزینه‌های بیشتر زیر برای اضاف‌کردن بارکد به روش دیگه‌ای استفاده کن.</string>
<string name="importCancelled">واردات لغو شد</string>
<string name="exportCancelled">خروجی گرفتن لغو شد</string>
<string name="useFrontImage">از عکس جلو استفاده کن</string>
<string name="useBackImage">از عکس عقب استفاده کنید</string>
<string name="addFromPkpass">یه فایل دفترچه‌ حساب انتخاب‌کن(.pkpass / .pkpasses)</string>
<string name="unsupportedFile">این فایل پشتیبانی نمیشه</string>
<string name="generic_error_please_retry">مشکلی رخ داد</string>
<string name="width">عرض</string>
<string name="card_list_widget_name">لیست کارت‌ها</string>
<string name="setBarcodeWidth">تنظیم عرض بارکد</string>
<string name="card_list_widget_empty">بعد از اینکه چندتا کارت وفاداری تو کاتیما اضافه کردی، اونها اینجا ظاهر میشن. اگه کارت داری، مطمئن شو که همه اونها بایگانی نشدن.</string>
<string name="cardWithNumber">کارت <xliff:g>%d</xliff:g></string>
<string name="cardWithNumberAndLocale">کارت <xliff:g>%d</xliff:g> (<xliff:g>%s</xliff:g>)</string>
<string name="pleaseDoNotRotateTheDevice">لطفاً دستگاه رو نچرخون، چون اینکار عملکرد رو لغو میکنه</string>
<string name="acra_catima_has_crashed">متاسفیم، اما <xliff:g id="app_name"> %s </xliff:g> از کار افتاده است. لطفاً با ارسال گزارش خطا، به ما در رفع این مشکل کمک کنید.</string>
<string name="acra_explain_crash">اگه امکانش هست، لطفاً جزئیات بیشتری از کاری که انجام میدادی رو اینجا اضافه کن:</string>
<string name="acra_crash_email_subject"><xliff:g id="app_name">%s</xliff:g> گزارش مشکل</string>
<string name="pref_enable_acra">درخاست ارسال گزارش‌های خرابی</string>
<string name="pref_enable_acra_summary">وقتی فعال باشه، از شما خواسته می‌شه که در صورت بروز خرابی، اون رو گزارش بدی. گزارش‌های خرابی هرگز به طور خودکار ارسال نمیشن.</string>
<string name="copy_value">مقدار کپی</string>
<string name="copied_to_clipboard">کپی تو کیبورد</string>
<string name="nothing_to_copy">ارزشی پیدا نشد</string>
<string name="noGiftCardsGroup">چند کارت ایجاد کنید و سپس آنها را به گروه اینجا اختصاص دهید</string>
</resources>
+28 -26
View File
@@ -22,9 +22,9 @@
<string name="noCardsMessage">Najpierw dodaj kartę</string>
<string name="noCardExistsError">Nie można znaleźć tej karty</string>
<string name="failedParsingImportUriError">Nie można przeanalizować identyfikatora importu URL</string>
<string name="importExport">Importuj/Eksportuj</string>
<string name="importExport">Import/eksport</string>
<string name="exportName">Eksportuj</string>
<string name="importExportHelp">Kopie zapasowe umożliwiają przeniesienie danych na inne urządzenie.</string>
<string name="importExportHelp">Kopie zapasowe umożliwiają przeniesienie danych na inne urządzenie</string>
<string name="importSuccessfulTitle">Zaimportowano</string>
<string name="importFailedTitle">Importowanie nie powiodło się</string>
<string name="importFailed">Nie udało się zaimportować</string>
@@ -51,7 +51,7 @@
<string name="intent_import_card_from_url_share_text">Chcę udostępnić Ci kartę lojalnościową</string>
<string name="deleteConfirmationGroup">Usunąć grupę\?</string>
<string name="all">Wszystko</string>
<string name="noGroups">Kliknij przycisk + plus, aby dodać grupy do kategoryzacji.</string>
<string name="noGroups">Kliknij przycisk +, aby dodać grupy do kategoryzacji</string>
<string name="groups">Grupy</string>
<string name="enter_group_name">Wpisz nazwę grupy</string>
<string name="exportSuccessful">Dane zostały wyeksportowane</string>
@@ -59,7 +59,7 @@
<string name="starImage">Gwiazdka ulubionych</string>
<string name="app_copyright_old">Na podstawie Loyalty Card Keychain
\nWszelkie prawa zastrzeżone © 20162020 Branden Archer</string>
<string name="exportOptionExplanation">Dane zostaną zapisane w wybranym przez ciebie miejscu.</string>
<string name="exportOptionExplanation">Dane zostaną zapisane w wybranym przez ciebie miejscu</string>
<string name="unstar">Usuń z ulubionych</string>
<string name="star">Dodaj do ulubionych</string>
<string name="noBarcode">Brak kodu kreskowego</string>
@@ -71,8 +71,8 @@
<string name="settings_locale">Język</string>
<string name="turn_flashlight_off">Wyłącz latarkę</string>
<string name="turn_flashlight_on">Włącz latarkę</string>
<string name="failedGeneratingShareURL">Nie można wygenerować adresu URL do udostępnienia. Proszę to zgłosić.</string>
<string name="passwordRequired">Proszę wpisać hasło</string>
<string name="failedGeneratingShareURL">Nie można wygenerować adresu URL do udostępnienia</string>
<string name="passwordRequired">Wprowadź hasło</string>
<string name="no">Nie</string>
<string name="yes">Tak</string>
<string name="updateBarcodeQuestionText">Zmieniłeś ID. Czy chcesz zaktualizować kod kreskowy, aby używał tej samej wartości\?</string>
@@ -90,17 +90,13 @@
<string name="setBarcodeId">Ustaw wartość kodu kreskowego</string>
<string name="sameAsCardId">Taki sam jak ID</string>
<string name="barcodeId">Wartość kodu kreskowego</string>
<string name="importVoucherVaultMessage">Wybierz swój <i>vouchervault.json</i> z Voucher Vault, aby zaimportować.
\nUtwórz go wpierw klikając Eksportuj w Voucher Vault.</string>
<string name="importVoucherVaultMessage">Wybierz swój plik eksportu z Voucher Vault, aby zaimportować. \nUtwórz go wybierając Eksportuj w Voucher Vault.</string>
<string name="importVoucherVault">Importuj z Voucher Vault</string>
<string name="importLoyaltyCardKeychainMessage">Wybierz swój <i>LoyaltyCardKeychain.csv</i> z Loyalty Card Keychain, aby zaimportować.
\nUtwórz go z menu Importuj/Eksportuj w Loyalty Card Keychain, wpierw klikając tam Eksportuj.</string>
<string name="importLoyaltyCardKeychainMessage">Wybierz swój plik eksportu z Loyalty Card Keychain, aby zaimportować. \nUtwórz go z menu Import/eksport w Loyalty Card Keychain, wybierając opcję Eksportuj.</string>
<string name="importLoyaltyCardKeychain">Importuj z Loyalty Card Keychain</string>
<string name="importFidmeMessage">Wybierz swój <i>fidme-export-request-xxxxxx.zip</i> z FidMe, aby zaimportować, po czym wybierz typy kodów kreskowych.
\nStwórz go ze swojego profilu FidMe, wybierając wpierw Ochrona Danych, a następnie naciskając Wyodrębnij moje dane.</string>
<string name="importFidmeMessage">Wybierz swój plik eksportu z FidMe, aby zaimportować, po czym wybierz typy kodów kreskowych. \nStwórz go ze swojego profilu FidMe, wybierając Ochrona Danych, a następnie Wyodrębnij moje dane.</string>
<string name="importFidme">Importuj z FidMe</string>
<string name="importCatimaMessage">Wybierz swój <i>catima.zip</i> z Catima, aby zaimportować.
\nUtwórz go z menu Importuj/Eksportuj innej aplikacji Catima, wpierw klikając tam Eksportuj.</string>
<string name="importCatimaMessage">Wybierz swój plik eksportu z Catima, aby zaimportować. \nUtwórz go z menu Import/eksport innej aplikacji Catima poprzez wybór opcji Eksport.</string>
<string name="importCatima">Importuj z Catima</string>
<string name="accept">Zaakceptuj</string>
<string name="privacy_policy">Polityka prywatności</string>
@@ -109,7 +105,7 @@
<string name="points">Punkty</string>
<string name="currency">Waluta</string>
<string name="balance">Saldo</string>
<string name="errorReadingImage">Nie udało się odczytać zdjęcia</string>
<string name="errorReadingImage">Odczytanie zdjęcia nie powiodło się</string>
<string name="noBarcodeFound">Nie znaleziono kodu kreskowego</string>
<string name="moveBarcodeToTopOfScreen">Przenieś kod kreskowy na górę ekranu</string>
<string name="chooseExpiryDate">Wybierz datę wygaśnięcia</string>
@@ -127,7 +123,7 @@
<string name="leaveWithoutSaveTitle">Wyjdź</string>
<string name="moveDown">Przesuń w dół</string>
<string name="moveUp">Przesuń w górę</string>
<string name="failedOpeningFileManager">Nie można otworzyć menadżera plików.</string>
<string name="failedOpeningFileManager">Nie można otworzyć menadżera plików</string>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> karta</item>
<item quantity="few"><xliff:g>%d</xliff:g> karty</item>
@@ -137,8 +133,8 @@
<string name="noGroupCards">Ta grupa jest pusta</string>
<string name="settings_disable_lockscreen_while_viewing_card">Zapobiegaj wyłączeniu ekranu</string>
<string name="settings_keep_screen_on">Nie wygaszaj ekranu</string>
<string name="app_resources">Otwarte zewnętrzne zasoby: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_libraries">Otwarte zewnętrzne biblioteki: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_resources">Zasoby zewnętrzne: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_libraries">Biblioteki zewnętrzne: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Wszelkie prawa zastrzeżone © 2019<xliff:g>%d</xliff:g> Sylvia van Os i współtwórcy</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Usunąć tą <xliff:g>%d</xliff:g> kartę permamentnie\?</item>
@@ -184,7 +180,7 @@
<string name="group_name_already_in_use">Ta nazwa jest już w użytku</string>
<string name="group_name_is_empty">Nazwa grupy nie może być pusta</string>
<string name="group_updated">Zaktualizowano grupę</string>
<string name="editGroup">Edytowanie grupy: <xliff:g>%s</xliff:g></string>
<string name="editGroup">Edycja grupy: <xliff:g>%s</xliff:g></string>
<string name="exportPassword">Ustaw hasło, aby zabezpieczyć twoje wyeksportowane dane (opcjonalne)</string>
<string name="exportPasswordHint">Wpisz hasło</string>
<string name="options">Opcje</string>
@@ -203,7 +199,7 @@
<string name="unarchive">Cofnij archiwizację</string>
<string name="archived">Karta zarchiwizowana</string>
<string name="unarchived">Karta niezarchiwizowana</string>
<string name="failedLaunchingPhotoPicker">Nie można odnaleźć obsługiwanej galerii.</string>
<string name="failedLaunchingPhotoPicker">Nie można odnaleźć obsługiwanej galerii</string>
<string name="previousCard">Poprzedni</string>
<string name="nextCard">Następny</string>
<plurals name="groupCardCountWithArchived">
@@ -243,7 +239,7 @@
<string name="show_balance">Pokaż balans</string>
<string name="show_validity">Pokaż ważność</string>
<string name="show_note">Pokaż notatkę</string>
<string name="permissionReadCardsLabel">Odczytaj Karty Catima</string>
<string name="permissionReadCardsLabel">Odczytaj karty Catima</string>
<string name="permissionReadCardsDescription">odczytywanie swoich kart Catima i ich szczegółów, włącznie z notatkami i obrazkami</string>
<string name="settings_allow_content_provider_read_title">Pozwól innym aplikacjom na dostęp do moich danych</string>
<string name="settings_display_barcode_max_brightness_summary">Potrzebne aby niektóre skanery działały</string>
@@ -275,9 +271,9 @@
<string name="receive">Otrzymaj</string>
<string name="amountParsingFailed">Nieprawidłowa ilość</string>
<string name="add_manually_warning_title">Skanowanie jest zalecane</string>
<string name="failedLaunchingFileManager">Nie można znaleźć obsługiwanego menedżera plików</string>
<string name="failedLaunchingFileManager">Nie można znaleźć wspieranego menedżera plików</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Którego ze znalezionych kodów kreskowych chciałbyś użyć?</string>
<string name="add_manually_warning_message">W przypadku niektórych sklepów wartość kodu kreskowego różni się od liczby zapisanej na karcie. Z tego powodu ręczne wprowadzanie kodu kreskowego może nie zawsze działać. Zdecydowanie zaleca się zeskanowanie kodu kreskowego za pomocą aparatu. Czy nadal chcesz kontynuować?</string>
<string name="add_manually_warning_message">W przypadku niektórych kart wartość kodu kreskowego różni się od liczby zapisanej na karcie. Z tego powodu ręczne wprowadzanie kodu kreskowego może nie zawsze działać. Zaleca się zeskanowanie kodu kreskowego za pomocą aparatu. Czy nadal chcesz kontynuować?</string>
<string name="noCameraFoundGuideText">Nie wykryto kamery. Jeśli twoje urządzenie posiada kamerę, spróbuj uruchomić je ponownie. W innym wypadku wybierz Więcej opcji i dodaj kartę w inny sposób.</string>
<string name="importCancelled">Import anulowany</string>
<string name="exportCancelled">Eksport anulowany</string>
@@ -298,17 +294,23 @@
<string name="settings_column_count_1">1</string>
<string name="addFromPkpass">Wybierz plik Passbook (.pkpass / .pkpasses)</string>
<string name="unsupportedFile">Ten plik nie jest obsługiwany</string>
<string name="generic_error_please_retry">Coś poszło nie tak, spróbuj ponownie później...</string>
<string name="sort_by_valid_from">Poprawna forma</string>
<string name="generic_error_please_retry">Wystąpił błąd</string>
<string name="sort_by_valid_from">Ważne od</string>
<string name="setBarcodeWidth">Ustaw szerokość kodu kreskowego</string>
<string name="width">Szerokość</string>
<string name="card_list_widget_empty">Karty lojalnościowe dodane w aplikacji Catima pokażą się tutaj. Jeżeli masz jakieś karty, upewnij się że nie są one zarchiwizowane.</string>
<string name="card_list_widget_name">Lista kart</string>
<string name="cardWithNumber">Karta <xliff:g>%d</xliff:g></string>
<string name="cardWithNumberAndLocale">Karta <xliff:g>%d</xliff:g> (%s)</string>
<string name="cardWithNumberAndLocale">Karta <xliff:g>%d</xliff:g> (<xliff:g>%s</xliff:g>)</string>
<string name="pleaseDoNotRotateTheDevice">Proszę nie obracać urządzenia, gdyż anuluje to obecne zadanie</string>
<string name="acra_explain_crash">Jeśli możliwe, dodaj więcej szczegółów na temat co robiłeś/aś tutaj:</string>
<string name="acra_crash_email_subject"><xliff:g id="app_name">%s</xliff:g> raport błędu</string>
<string name="pref_enable_acra">Zapytaj o wysłanie raportu błędu</string>
<string name="pref_enable_acra_summary">Kiedy zaznaczone, będziesz proszony/a o zgłoszenie raportu błędu, gdyby zaistniał. Raporty błędu nigdy nie są wysyłane automatycznie.</string>
<string name="acra_catima_has_crashed">Przepraszamy, ale aplikacja <xliff:g id="app_name">%s</xliff:g> uległa awarii. Prosimy o pomoc w rozwiązaniu tego problemu poprzez przesłanie nam raportu o błędzie.</string>
<string name="copy_value">Kopiuj wartość</string>
<string name="copied_to_clipboard">Skopiowano do schowka</string>
<string name="nothing_to_copy">Nie znaleziono wartości</string>
<string name="back">Wstecz</string>
<string name="barcodeEncoding">Kodowanie kodów kreskowych</string>
</resources>
@@ -305,4 +305,6 @@
<string name="copy_value">Copiar valor</string>
<string name="copied_to_clipboard">Copiado para a área de transferência</string>
<string name="nothing_to_copy">Nenhum valor encontrado</string>
<string name="barcodeEncoding">codificação de código de barras</string>
<string name="back">Voltar</string>
</resources>
@@ -305,4 +305,10 @@
<string name="copy_value">Copiar valor</string>
<string name="copied_to_clipboard">Copiado para a área de transferência</string>
<string name="nothing_to_copy">Nenhum valor encontrado</string>
<string name="barcodeEncoding">Codificação de códigos de barras</string>
<string name="back">Voltar</string>
<string name="settings_disable_nfc_while_viewing_card">Pausar NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Pausa NFC para evitar que pagamentos de NFC sejam acionados enquanto visualiza um cartão</string>
<string name="nfc_blocked_while_viewing_card">NFC está pausado</string>
<string name="change_settings">Alterar configurações</string>
</resources>
+6
View File
@@ -304,4 +304,10 @@
<string name="copy_value">Copiar valor</string>
<string name="copied_to_clipboard">Copiado para a área de transferência</string>
<string name="nothing_to_copy">Nenhum valor encontrado</string>
<string name="barcodeEncoding">codificação de código de barras</string>
<string name="back">Voltar</string>
<string name="settings_disable_nfc_while_viewing_card">Pausar NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Pausa NFC para evitar que pagamentos de NFC sejam acionados enquanto visualiza um cartão</string>
<string name="nfc_blocked_while_viewing_card">NFC está pausado</string>
<string name="change_settings">Alterar configurações</string>
</resources>
+6
View File
@@ -311,4 +311,10 @@
<string name="copy_value">Скопировать значение</string>
<string name="copied_to_clipboard">Скопировано в буфер обмена</string>
<string name="nothing_to_copy">Значение не найдено</string>
<string name="barcodeEncoding">Кодировка штрих-кода</string>
<string name="back">Назад</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Приостанавливать работу NFC для предотвращения срабатывание NFC-платежей при просмотре карты</string>
<string name="settings_disable_nfc_while_viewing_card">Отключать NFC</string>
<string name="nfc_blocked_while_viewing_card">NFC приостановлен</string>
<string name="change_settings">Изменить настройки</string>
</resources>
+6
View File
@@ -305,4 +305,10 @@
<string name="copy_value">Kopírovať hodnotu</string>
<string name="copied_to_clipboard">Skopírované do schránky</string>
<string name="nothing_to_copy">Nenašla sa žiadna hodnota</string>
<string name="barcodeEncoding">Kódovanie čiarového kódu</string>
<string name="back">Späť</string>
<string name="settings_disable_nfc_while_viewing_card">Pozastaviť NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Pozastaví NFC pre zabránenie spustenia NFC platieb pri zobrazovaní karty</string>
<string name="nfc_blocked_while_viewing_card">NFC je pozastavené</string>
<string name="change_settings">Zmenit nastavenie</string>
</resources>
+2
View File
@@ -310,4 +310,6 @@
<string name="copy_value">Kopiraj vrednost</string>
<string name="copied_to_clipboard">Kopirano v odložišče</string>
<string name="nothing_to_copy">Nobena vrednost ni najdena</string>
<string name="barcodeEncoding">Kodiranje črtne kode</string>
<string name="back">Nazaj</string>
</resources>
+35 -26
View File
@@ -2,7 +2,7 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="action_add">Dodaj</string>
<string name="action_search">Pretraga</string>
<string name="noGiftCards">Klikni + plus znak da dodaš karticu, ili je uvezi pomoću ⋮ menija.</string>
<string name="noGiftCards">Klikni + plus znak da dodaš karticu, ili je uvezi pomoću ⋮ menija</string>
<string name="storeName">Ime</string>
<string name="cardId">Broj kartice</string>
<string name="star">Dodaj u omiljene</string>
@@ -27,10 +27,10 @@
<string name="cardShortcut">Prečica kartice</string>
<string name="noCardsMessage">Prvo dodaj karticu</string>
<string name="noCardExistsError">Nije moguće pronaći tu karticu</string>
<string name="failedParsingImportUriError">Nije moguće obraditi uvozni URI</string>
<string name="importExport">Uvoz/Izvoz</string>
<string name="failedParsingImportUriError">Nije moguće obraditi uvozni URL</string>
<string name="importExport">Uvoz/izvoz</string>
<string name="exportName">Izvoz</string>
<string name="importExportHelp">Pravljenje rezervnih kopija podataka omogućava premeštanje na drugi uređaj.</string>
<string name="importExportHelp">Pravljenje rezervnih kopija podataka omogućava premeštanje na drugi uređaj</string>
<string name="importSuccessfulTitle">Uvezeno</string>
<string name="importFailedTitle">Uvoz nije uspeo</string>
<string name="importFailed">Nije moguće izvršiti uvoz</string>
@@ -43,8 +43,8 @@
<string name="noBarcode">Nema bar-koda</string>
<string name="scanCardBarcode">Skeniraj bar-kod</string>
<string name="barcodeImageDescriptionWithType">Fotografija <xliff:g>%s</xliff:g> bar-koda</string>
<string name="exportOptionExplanation">Podaci će biti sačuvani na lokaciji po tvom izboru.</string>
<string name="importOptionFilesystemExplanation">Odaberi određenu datoteku iz sistema za upravljanje datotekama.</string>
<string name="exportOptionExplanation">Podaci će biti sačuvani na lokaciji po tvom izboru</string>
<string name="importOptionFilesystemExplanation">Odaberi određenu datoteku iz sistema za upravljanje datotekama</string>
<string name="importOptionFilesystemTitle">Uvezi iz sistema za upravljanje datotekama</string>
<string name="importOptionFilesystemButton">Iz sistema za upravljanje datotekama</string>
<string name="about">O aplikaciji</string>
@@ -68,7 +68,7 @@
<string name="importSuccessful">Podaci uvezeni</string>
<string name="exportSuccessful">Podaci izvezeni</string>
<string name="enter_group_name">Unesite ime grupe</string>
<string name="noGroups">Klikni + plus znak da dodaš grupe za kategorizaciju.</string>
<string name="noGroups">Klikni + plus znak da dodaš grupe za kategorizaciju</string>
<string name="noGroupCards">Ova grupa je prazna</string>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> kartica</item>
@@ -99,11 +99,9 @@
<string name="importCatima">Uvezi iz Catime</string>
<string name="importFidme">Uvoz iz FidMe</string>
<string name="importLoyaltyCardKeychain">Uvezi iz aplikacije Loyalty Card Keychain</string>
<string name="importLoyaltyCardKeychainMessage">Odaberi svoj <i>LoyaltyCardKeychain.csv</i> izvoz iz aplikacije Loyalty Card Keychain za uvoz.
\nKreiraj ga iz menija \"Import/Export\" u aplikaciji Loyalty Card Keychain klikom na \"Export\".</string>
<string name="importLoyaltyCardKeychainMessage">Odaberi svoj izvoz iz aplikacije Loyalty Card Keychain za uvoz. \nKreiraj ga iz menija \"Import/Export\" u aplikaciji Loyalty Card Keychain klikom na \"Export\".</string>
<string name="importVoucherVault">Uvoz iz Voucher Vault</string>
<string name="importVoucherVaultMessage">Odaberi svoj <i>vouchervault.json</i> izvoz iz Voucher Vault za uvoz.
\nKreiraj ga pritiskom na \"Export\" u Voucher Vault aplikaciji.</string>
<string name="importVoucherVaultMessage">Odaberi svoj izvoz iz Voucher Vault za uvoz. \nKreiraj ga pritiskom na \"Export\" u Voucher Vault aplikaciji.</string>
<string name="barcodeId">Vrednost bar-koda</string>
<string name="sameAsCardId">Isti kao broj kartice</string>
<string name="setBarcodeId">Podesi vrednost bar-koda</string>
@@ -119,7 +117,7 @@
<string name="yes">Da</string>
<string name="exportPassword">Podesi lozinku da bi zaštitio svoj izvoz (opciono)</string>
<string name="exportPasswordHint">Unesi lozinku</string>
<string name="failedGeneratingShareURL">Nije moguće generisati URL koji se može podeliti. Molim te da prijaviš ovo developeru.</string>
<string name="failedGeneratingShareURL">Nije moguće generisati URL koji se može podeliti.</string>
<string name="turn_flashlight_on">Uključi blic</string>
<string name="turn_flashlight_off">Isključi blic</string>
<string name="settings_locale">Jezik</string>
@@ -155,7 +153,7 @@
<string name="unarchive">Ukloni iz arhive</string>
<string name="unarchived">Kartica uklonjena iz arhive</string>
<string name="archived">Kartica dodata u arhivu</string>
<string name="failedLaunchingPhotoPicker">Nije moguće pronaći podržanu galerija aplikaciju</string>
<string name="failedLaunchingPhotoPicker">Nije moguće pronaći podržan birač fotografija</string>
<string name="previousCard">Prethodna</string>
<string name="nextCard">Sledeća</string>
<string name="failedToOpenUrl">Prvo instalirajte internet pregledač</string>
@@ -171,7 +169,7 @@
<string name="height">Visina</string>
<string name="switchToFrontImage">Prebaci na prednju fotografiju</string>
<string name="switchToBarcode">Prebaci na bar-kod</string>
<string name="openFrontImageInGalleryApp">Otvori prednju fotografiju u galerija aplikaciji</string>
<string name="openFrontImageInGalleryApp">Otvori prednju fotografiju u prikazivaču fotografija</string>
<string name="setBarcodeHeight">Postavi visinu bar-koda</string>
<string name="donate">Doniraj</string>
<string name="icon_header_click_text">Dugi pritisak za izmenu naslovne fotografije</string>
@@ -191,7 +189,7 @@
<item quantity="few"><xliff:g>%d</xliff:g> izabrane</item>
<item quantity="other"><xliff:g>%d</xliff:g> izabranih</item>
</plurals>
<string name="noGiftCardsGroup">Kreirajte par kartica, a zatim ih ovde dodeli grupi.</string>
<string name="noGiftCardsGroup">Kreiraj par kartica, a zatim ih ovde dodeli grupi.</string>
<string name="noMatchingGiftCards">Nema rezultata. Pokušaj da promeniš pretragu.</string>
<string name="note">Napomena</string>
<plurals name="deleteCardsTitle">
@@ -208,8 +206,8 @@
<string name="app_license">Kopileftovani slobodni softver, licenciran GPLv3+</string>
<string name="about_title_fmt">O <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Verzija: <xliff:g id="version">%s</xliff:g></string>
<string name="app_libraries">Slobodne biblioteke trećih strana: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_resources">Slobodni resursi trećih strana: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_libraries">Biblioteke trećih strana: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_resources">Resursi trećih strana: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="settings_keep_screen_on">Drži ekran uključen</string>
<string name="settings_keep_screen_on_summary">Onemogućava vremensko ograničenje gašenja ekrana dok gledate karticu</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Onemogućava zaključavanje ekrana dok gledate karticu</string>
@@ -217,7 +215,7 @@
<string name="groups">Grupe</string>
<string name="group_edit">Izmeni grupu</string>
<string name="group_updated">Grupa ažurirana</string>
<string name="failedOpeningFileManager">Prvo instaliraj menadžer datoteka.</string>
<string name="failedOpeningFileManager">Otvaranje menadžera datoteka nije uspelo.</string>
<string name="editGroup">Izmena grupe: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Ističe: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Istekla: <xliff:g>%s</xliff:g></string>
@@ -233,10 +231,8 @@
<string name="never">Nikad</string>
<string name="chooseExpiryDate">Odaberi datum isteka</string>
<string name="noBarcodeFound">Nije pronađen bar-kod</string>
<string name="importCatimaMessage">Odaberi svoj <i>catima.zip</i> koji želiš da uvezeš.
\nMožeš da ga kreiraš u Catima aplikaciji koju prenosiš iz menija Uvoz/Izvoz aplikacije pritiskom na izvoz.</string>
<string name="importFidmeMessage">Odaberi svoj <i>fidme-export-request-xxxxxx.zip</i> izvoz iz FidMe za uvoz, a zatim ručno izaberite tipove bar-kodova.
\nKreirajte ga iz svog FidMe profila tako što ćeš izabrati \"Data Protection\", a zatim pritisnuti \"Extract my data first\".</string>
<string name="importCatimaMessage">Odaberi svoj export iz Carine radi importa.\nMožeš da ga kreiraš u Catima aplikaciji koju prenosiš iz menija Uvoz/Izvoz u drugoj Catima aplikaciji pritiskom na Izvoz.</string>
<string name="importFidmeMessage">Odaberi svoj izvoz iz FidMe za uvoz, a zatim ručno izaberite tipove bar-kodova.\nKreirajte ga iz svog FidMe profila tako što ćeš izabrati \"Data Protection\", a zatim pritisnuti \"Extract my data first\".</string>
<string name="backImageDescription">Zadnja fotografija kartice</string>
<string name="setBackImage">Postavi zadnju fotografiju</string>
<string name="passwordRequired">Unesi lozinku</string>
@@ -253,7 +249,7 @@
<string name="include_if_asking_support">Ako želiš da zatražiš podršku, ubaci sledeće informacije:</string>
<string name="newBalanceSentence">Novo stanje: <xliff:g>%s</xliff:g></string>
<string name="switchToBackImage">Prebaci na zadnju fotografiju</string>
<string name="openBackImageInGalleryApp">Otvori zadnju fotografiju u galerija aplikaciji</string>
<string name="openBackImageInGalleryApp">Otvori zadnju fotografiju u prikazivaču fotografija</string>
<string name="settings_category_title_cards">Pregled kartica</string>
<string name="addWithoutBarcode">Dodaj karticu bez bar-koda</string>
<string name="enter_card_id">Unesite broj ili tekst sa kartice</string>
@@ -262,7 +258,7 @@
<string name="field_must_not_be_empty">Ovo polje ne sme biti prazno</string>
<string name="manually_enter_barcode_instructions">Unesi broj ili tekst sa kartice i pritisnite bar-kod koji liči na onaj koji je na kartici.</string>
<string name="add_manually_warning_title">Skeniranje se preporučuje</string>
<string name="add_manually_warning_message">Za neke prodavnice, vrednost bar-koda može da se razlikuje od broja napisanog na kartici. Zbog toga, ručno unešeni bar-kod možda neće uvek funkcionisati. Toplo se preporučuje da umesto toga skeniraš bar-kod kamerom. Da li ipak želiš da nastaviš?</string>
<string name="add_manually_warning_message">Za neke kartice, vrednost bar-koda može da se razlikuje od broja napisanog na kartici. Zbog toga, ručno unešeni bar-kod možda neće uvek funkcionisati. Preporučujemo da umesto toga skeniraš bar-kod kamerom. Da li ipak želiš da nastaviš?</string>
<string name="continue_">Nastavi</string>
<string name="spend">Potroši</string>
<string name="receive">Primi</string>
@@ -278,7 +274,7 @@
<string name="pageWithNumber">Strana <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">Čini se da tvoj uređaj nema kameru. Ako je ima, pokušaj da ponovo pokreneš uređaj. U suprotnom, koristi dugme Više opcija, koje se nalazi ispod, da bi dodao bar-kod na drugi način.</string>
<string name="sort_by_valid_from">Važi od</string>
<string name="generic_error_please_retry">Izvinite, nešto je pošlo naopako, molimo Vas pokušajte ponovo...</string>
<string name="generic_error_please_retry">Došlo je do greške</string>
<string name="width">Širina</string>
<string name="setBarcodeWidth">Postavi širinu barkoda</string>
<string name="settings_use_volume_keys_navigation">Promeni kartice koristeći dugmad za zvuk</string>
@@ -295,7 +291,20 @@
<string name="settings_column_count_2">2</string>
<string name="settings_column_count_3">3</string>
<string name="settings_column_count_4">4</string>
<string name="addFromPkpass">Izaberi \"Passbook\" dokument (.pkpass)</string>
<string name="addFromPkpass">Izaberi \"Passbook\" dokument (.pkpass/.pkpasses)</string>
<string name="card_list_widget_name">Lista kartica</string>
<string name="card_list_widget_empty">Nakon što dodate neke kartice lojalnosti u Catima, one će se pojaviti ovde. Ako imate kartice, uverite se da nisu sve arhivirane.</string>
<string name="cardWithNumber">Kartica <xliff:g>%d</xliff:g></string>
<string name="cardWithNumberAndLocale">Kartica <xliff:g>%d</xliff:g> (<xliff:g>%s</xliff:g>)</string>
<string name="pleaseDoNotRotateTheDevice">Molimo ne rotiraj uređaj, jer će to poništiti radnju</string>
<string name="acra_catima_has_crashed">Nažalost, aplikacija <xliff:g id="app_name">%s</xliff:g> se neočekivano zaustavila. Molimo te da nam pomogneš u popravljanju ovog problema tako što ćeš nam poslati izveštaj o grešci.</string>
<string name="acra_explain_crash">Ukoliko je moguće, molimo te da dodaš još detalja o tome šta si radio ovde:</string>
<string name="acra_crash_email_subject"><xliff:g id="app_name">%s</xliff:g> izveštaj o grešci</string>
<string name="pref_enable_acra">Pitaj za slanje izveštaja o grešci</string>
<string name="pref_enable_acra_summary">Kada je omogućeno, bićeš upitan da prijaviš grešku kada do nje dođe. Izveštaji o grešci nikada neće biti poslati automatski.</string>
<string name="copy_value">Kopiraj vrednost</string>
<string name="copied_to_clipboard">Kopiramo u privremenu memoriju</string>
<string name="nothing_to_copy">Nije pronađena vrednost</string>
<string name="barcodeEncoding">Enkodiranje bar-koda</string>
<string name="back">Nazad</string>
</resources>
+2
View File
@@ -299,4 +299,6 @@
<string name="copy_value">Kopiera värde</string>
<string name="copied_to_clipboard">Kopierade till urklipp</string>
<string name="nothing_to_copy">Inget värde hittades</string>
<string name="barcodeEncoding">Streckkods-kodning</string>
<string name="back">Tillbaka</string>
</resources>
+17 -12
View File
@@ -79,7 +79,7 @@
<string name="settings_column_count_7">7</string>
<string name="spend">செலவு</string>
<string name="unsupportedFile">இந்த கோப்பு ஆதரிக்கப்படவில்லை</string>
<string name="generic_error_please_retry">மன்னிக்கவும், ஏதோ தவறு நடந்தது, தயவுசெய்து மீண்டும் முயற்சிக்கவும் ...</string>
<string name="generic_error_please_retry">பிழை ஏற்பட்டது</string>
<string name="noMatchingGiftCards">முடிவுகள் இல்லை. உங்கள் தேடலை மாற்ற முயற்சிக்கவும்.</string>
<string name="edit">தொகு</string>
<string name="deleteTitle">அட்டையை நீக்கு</string>
@@ -145,7 +145,7 @@
<string name="unsupportedBarcodeType">இந்த பார்கோடு வகையை இன்னும் காட்ட முடியாது. பயன்பாட்டின் பின்னர் பதிப்பில் இது ஆதரிக்கப்படலாம்.</string>
<string name="wrongValueForBarcodeType">தேர்ந்தெடுக்கப்பட்ட பார்கோடு வகைக்கு மதிப்பு செல்லுபடியாகாது</string>
<string name="intent_import_card_from_url_share_multiple_text">சில அட்டைகளை உங்களுடன் பகிர்ந்து கொள்ள விரும்புகிறேன்</string>
<string name="importVoucherVaultMessage">உங்கள் <i> vouchervault.json </i> வவுச்சர் பெட்டகத்திலிருந்து இறக்குமதி செய்ய ஏற்றுமதி என்பதைத் தேர்ந்தெடுக்கவும்.\n முதலில் வவுச்சர் வால்ட்டில் ஏற்றுமதிை அழுத்துவதன் மூலம் அதை உருவாக்கவும்.</string>
<string name="importVoucherVaultMessage">இறக்குமதி செய்ய வவுச்சர் வால்ட்டிலிருந்து உங்கள் ஏற்றுமதிைத் தேர்ந்தெடுக்கவும். \nவவுச்சர் வால்ட்டில் ஏற்றுமதி என்பதை அழுத்தி உருவாக்கவும்.</string>
<string name="frontImageDescription">முன் படம்</string>
<string name="updateBarcodeQuestionTitle">பார்கோடு மதிப்பைப் புதுப்பிக்கவா?</string>
<string name="updateBarcodeQuestionText">நீங்கள் ஐடியை மாற்றினீர்கள். அதே மதிப்பைப் பயன்படுத்த பார்கோடு புதுப்பிக்க விரும்புகிறீர்களா?</string>
@@ -154,7 +154,7 @@
<string name="passwordRequired">கடவுச்சொல்லை உள்ளிடவும்</string>
<string name="exportPassword">உங்கள் ஏற்றுமதியைப் பாதுகாக்க கடவுச்சொல்லை அமைக்கவும் (விரும்பினால்)</string>
<string name="exportPasswordHint">கடவுச்சொல்லை உள்ளிடவும்</string>
<string name="failedGeneratingShareURL">பகிரக்கூடிய முகவரி ஐ உருவாக்க முடியவில்லை. இதை புகாரளிக்கவும்.</string>
<string name="failedGeneratingShareURL">பகிரக்கூடிய முகவரி ஐ உருவாக்க முடியவில்லை</string>
<string name="turn_flashlight_on">ஒளிரும் விளக்கை இயக்கவும்</string>
<string name="turn_flashlight_off">ஒளிரும் விளக்கை அணைக்கவும்</string>
<string name="settings_locale">மொழி</string>
@@ -187,7 +187,7 @@
<string name="unarchive">அன்கான்</string>
<string name="archived">அட்டை காப்பகப்படுத்தப்பட்டது</string>
<string name="unarchived">அட்டை பதிக்கப்படாதது</string>
<string name="failedLaunchingPhotoPicker">உதவி கேலரி பயன்பாட்டைக் கண்டுபிடிக்க முடியவில்லை</string>
<string name="failedLaunchingPhotoPicker">ஆதரிக்கப்படும் படத் தேர்வியைக் கண்டறிய முடியவில்லை</string>
<string name="previousCard">முந்தைய</string>
<string name="failedToOpenUrl">முதலில் ஒரு வலை உலாவியை நிறுவவும்</string>
<string name="welcome">கேட்டிமாவுக்கு வருக</string>
@@ -201,8 +201,8 @@
<string name="switchToFrontImage">முன் படத்திற்கு மாறவும்</string>
<string name="switchToBackImage">பின் படத்திற்கு மாறவும்</string>
<string name="switchToBarcode">பார்கோடு மாறவும்</string>
<string name="openFrontImageInGalleryApp">கேலரி பயன்பாட்டில் முன் படத்தைத் திறக்கவும்</string>
<string name="openBackImageInGalleryApp">கேலரி பயன்பாட்டில் படத்தைத் திறக்கவும்</string>
<string name="openFrontImageInGalleryApp">இமேச் வியூவர் ஆப்சில் முன் படத்தைத் திறக்கவும்</string>
<string name="openBackImageInGalleryApp">இமேச் வியூவர் ஆப்சில் மீண்டும் படத்தைத் திறக்கவும்</string>
<string name="setBarcodeHeight">பார்கோடு உயரத்தை அமைக்கவும்</string>
<string name="donate">நன்கொடை</string>
<string name="icon_header_click_text">சிறுபடத்தைத் திருத்த நீண்ட அழுத்தவும்</string>
@@ -234,16 +234,16 @@
<string name="continue_">தொடரவும்</string>
<string name="receive">பெறுங்கள்</string>
<string name="amountParsingFailed">தவறான தொகை</string>
<string name="add_manually_warning_message">சில கடைகளுக்கு, ார்கோடு மதிப்பு அட்டையில் எழுதப்பட்ட எண்ணிலிருந்து வேறுபடுகிறது. இதன் காரணமாக, ஒரு பார்கோடு கைமுறையாக நுழைவது எப்போதும் வேலை செய்யாது. அதற்கு பதிலாக உங்கள் கேமராவுடன் பார்கோடு ச்கேன் செய்ய கடுமையாக பரிந்துரைக்கப்படுகிறது. நீங்கள் இன்னும் தொடர விரும்புகிறீர்களா?</string>
<string name="add_manually_warning_message">சில கார்டுகளுக்கு, ார்ில் எழுதப்பட்ட எண்ணிலிருந்து பார்கோடு மதிப்பு வேறுபடும். இதன் காரணமாக, பார்கோடு கைமுறையாக உள்ளிடுவது எப்போதும் வேலை செய்யாது. அதற்கு பதிலாக உங்கள் கேமரா மூலம் பார்கோடை வருடு செய்ய பரிந்துரைக்கப்படுகிறது. நீங்கள் இன்னும் தொடர விரும்புகிறீர்களா?</string>
<string name="addFromPdfFile">PDF கோப்பைத் தேர்ந்தெடுக்கவும்</string>
<string name="errorReadingFile">கோப்பைப் படிக்க முடியவில்லை</string>
<string name="failedLaunchingFileManager">உதவி கோப்பு மேலாளரைக் கண்டுபிடிக்க முடியவில்லை</string>
<string name="failedLaunchingFileManager">ஆதரிக்கப்படும் கோப்பு மேலாளரைக் கண்டுபிடிக்க முடியவில்லை</string>
<string name="multipleBarcodesFoundPleaseChooseOne">கண்டுபிடிக்கப்பட்ட பார்கோடுகளில் எது நீங்கள் பயன்படுத்த விரும்புகிறீர்கள்?</string>
<string name="noCameraFoundGuideText">உங்கள் சாதனத்தில் கேமரா இருப்பதாகத் தெரியவில்லை. அவ்வாறு இருந்தால், சாதனத்தை மறுதொடக்கம் செய்ய முயற்சிக்கவும். இல்லையெனில், பார்கோடை மற்றொரு வழியில் சேர்க்க கீழே உள்ள கூடுதல் விருப்பங்கள் பொத்தானைப் பயன்படுத்தவும்.</string>
<string name="importCancelled">இறக்குமதி ரத்து செய்யப்பட்டது</string>
<string name="exportCancelled">ஏற்றுமதி ரத்து செய்யப்பட்டது</string>
<string name="useBackImage">பின் படத்தைப் பயன்படுத்தவும்</string>
<string name="addFromPkpass">பாச் புக் கோப்பைத் தேர்ந்தெடுக்கவும் (.pkpass)</string>
<string name="addFromPkpass">பாச்புக் கோப்பைத் தேர்ந்தெடுக்கவும் (.pkpass / .pkpasses)</string>
<string name="useFrontImage">முன் படத்தைப் பயன்படுத்தவும்</string>
<plurals name="deleteCardsTitle">
<item quantity="one"><xliff:g>%d</xliff:g> அட்டை நீக்கு</item>
@@ -264,7 +264,7 @@
<item quantity="one"><xliff:g>%s</xliff:g> புள்ளி</item>
<item quantity="other"><xliff:g>%s</xliff:g> புள்ளிகள்</item>
</plurals>
<string name="importLoyaltyCardKeychainMessage">இறக்குமதி செய்ய உங்கள் <i>LoyaltyCardKeychain.csv</i> விசுவாச அட்டை சாவிக்கொத்திலிருந்து ஏற்றுமதி செய். \nமுதலில் அங்கு ஏற்றுமதியை அழுத்துவதன் மூலம் விசுவாச அட்டை சாவிக்கொத்தில் இறக்குமதி/ஏற்றுமதி பட்டியலிலிருந்து அதை உருவாக்க.</string>
<string name="importLoyaltyCardKeychainMessage">இறக்குமதி செய்ய லாயல்டி கார்டு கீசெயினிலிருந்து உங்கள் ஏற்றுமதியைத் தேர்ந்தெடுக்கவும். \nஏற்றுமதியை அழுத்துவதன் மூலம் லாயல்டி கார்டு கீசெயினில் உள்ள இறக்குமதி/ஏற்றுமதி மெனுவிலிருந்து அதை உருவாக்கவும்.</string>
<string name="validFromSentence">இதிலிருந்து செல்லுபடியாகும்: <xliff:g>%s</xliff:g></string>
<string name="newBalanceSentence">புதிய இருப்பு: <xliff:g>%s</xliff:g></string>
<string name="pageWithNumber">பக்கம் <xliff:g>%d</xliff:g></string>
@@ -283,11 +283,11 @@
<string name="app_resources">மூன்றாம் தரப்பு வளங்கள்: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="groupsList">குழுக்கள்: <xliff:g>%s</xliff:g></string>
<string name="sort_by_valid_from">இருந்து செல்லுபடியாகும்</string>
<string name="setBarcodeWidth">ட்டைகுறி அகலம் அமை</string>
<string name="setBarcodeWidth">ார்கோடு அகலத்தை அமைக்கவும்</string>
<string name="width">அகலம்</string>
<string name="card_list_widget_name">அட்டை பட்டியல்</string>
<string name="card_list_widget_empty">கேட்டிமாவில் நீங்கள் விசுவாச அட்டைகளை சேர்த்த பிறகு, அவை இங்கு தோன்றும். அட்டைகள் காப்பகப்படுத்த படவில்லை என உறுதி செய்க.</string>
<string name="cardWithNumber">அட்டை<xliff:g>%d</xliff:g></string>
<string name="cardWithNumber">அட்டை <xliff:g>%d</xliff:g></string>
<string name="cardWithNumberAndLocale">அட்டை<xliff:g>%d</xliff:g> (<xliff:g>%s</xliff:g>)</string>
<string name="pleaseDoNotRotateTheDevice">தயவுசெய்து சாதனத்தை சுழற்றாதீர்கள், இது செயலை ரத்து செய்யும்.</string>
<string name="acra_catima_has_crashed">மன்னிக்கவும், <xliff:g id="app_name">%s</xliff:g> செயலி செயலிழந்துள்ளது. தயவுசெய்து பிழை அறிக்கையை அனுப்பி, இந்த பிரச்சினையை சரிசெய்ய எங்களுக்கு உதவுங்கள்.</string>
@@ -295,4 +295,9 @@
<string name="acra_crash_email_subject"><xliff:g id="app_name">%s</xliff:g> செயலிழப்பு அறிக்கை</string>
<string name="pref_enable_acra">செயலிழப்பு அறிக்கைகளை அனுப்ப வேண்டுமா</string>
<string name="pref_enable_acra_summary">இது இயக்கப்பட்டால், செயலி செயலிழக்கும் போது அதைப் பற்றிய அறிக்கையை அனுப்பும்படி உங்களிடம் கேட்கப்படும். செயலிழப்பு அறிக்கைகள் ஒருபோதும் தானாக அனுப்பப்படமாட்டாது.</string>
<string name="copy_value">நகல் மதிப்பு</string>
<string name="copied_to_clipboard">இடைநிலைப்பலகைக்கு நகலெடுக்கப்பட்டது</string>
<string name="nothing_to_copy">மதிப்பு இல்லை</string>
<string name="barcodeEncoding">பார்கோடு குறியாக்கம்</string>
<string name="back">பின்</string>
</resources>
+6
View File
@@ -299,4 +299,10 @@
<string name="copy_value">Değeri kopyala</string>
<string name="copied_to_clipboard">Panoya kopyalandı</string>
<string name="nothing_to_copy">Değer bulunamadı</string>
<string name="barcodeEncoding">Barkod kodlaması</string>
<string name="back">Geri</string>
<string name="settings_disable_nfc_while_viewing_card">NFC\'yi duraklat</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Kart görüntülenirken NFC ödemelerinin tetiklenmesini önlemek için NFC işlevini duraklatır</string>
<string name="nfc_blocked_while_viewing_card">NFC duraklatıldı</string>
<string name="change_settings">Ayarları değiştir</string>
</resources>
+2
View File
@@ -311,4 +311,6 @@
<string name="copy_value">Копіювати значення</string>
<string name="copied_to_clipboard">Скопійовано в буфер обміну</string>
<string name="nothing_to_copy">Значення не знайдено</string>
<string name="barcodeEncoding">Кодування штрих-кодів</string>
<string name="back">Назад</string>
</resources>
+46 -32
View File
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="translate_platform">trên Weblate</string>
<string name="failedOpeningFileManager">Cài đặt trình quản lý tập tin trước đã.</string>
<string name="failedOpeningFileManager">Không thể mở trình quản lý tập tin</string>
<string name="intent_import_card_from_url_share_multiple_text">Tôi muốn chia sẻ vài cái thẻ với bạn</string>
<string name="card_id_must_not_be_empty">ID thẻ không thể bỏ trống</string>
<string name="duplicateCard">Tạo bản sao</string>
@@ -21,12 +21,12 @@
<string name="takePhoto">Chụp ảnh</string>
<string name="storeName">Tên</string>
<string name="validFromDate">Có hiệu lực từ</string>
<string name="cameraPermissionDeniedTitle">Không sử dụng được camera</string>
<string name="wrongValueForBarcodeType">Giá trị cho loại mã vạch này không hợp lệ</string>
<string name="cameraPermissionDeniedTitle">Không thể truy cập camera</string>
<string name="wrongValueForBarcodeType">Giá trị không hợp lệ cho loại mã vạch đã chọn</string>
<string name="expiryDate">Ngày hết hạn</string>
<string name="currency">Tiền tệ</string>
<string name="welcome">Chào mừng tới Catima</string>
<string name="failedParsingImportUriError">Không thể phân tích URI được cung cấp</string>
<string name="failedParsingImportUriError">Không thể phân tích URI đã nhập</string>
<string name="exporting">Đang xuất dữ liệu…</string>
<string name="group_edit">Sửa nhóm</string>
<string name="debug_version_fmt">Phiên bản: <xliff:g id="version">%s</xliff:g></string>
@@ -54,11 +54,10 @@
<string name="cardId">ID thẻ</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Tắt tính năng khóa màng hình khi đang xem thẻ</string>
<string name="action_more_options">Tùy chọn mở rộng</string>
<string name="exportOptionExplanation">Dữ liệu sẽ được ghi vào vị trí mà bạn chọn.</string>
<string name="exportOptionExplanation">Dữ liệu sẽ được ghi vào vị trí mà bạn chọn</string>
<string name="app_copyright_old">Dựa trên Loyalty Card Keychain
\nbản quyền © 20162020 Branden Archer</string>
<string name="importVoucherVaultMessage">Chọn <i>vouchervault.json</i> được xuất từ Voucher Vault để nhập liệu.
\nTập tin này có thể tạo bằng cách bấm Export trong ứng dụng Voucher Vault.</string>
<string name="importVoucherVaultMessage">Chọn tập tin đã xuất từ Voucher Vault để nhập liệu. \nTạo tập tin này bằng cách bấm Export trong ứng dụng Voucher Vault.</string>
<string name="importFailed">Không thể nhập dữ liệu</string>
<string name="chooseImportType">Nhập dữ liệu từ</string>
<string name="frontImageDescription">Ảnh mặt trước</string>
@@ -106,18 +105,18 @@
<string name="on_google_play">trên CH Play</string>
<string name="turn_flashlight_off">Tắt đèn pin</string>
<string name="show_note">Hiện ghi chú</string>
<string name="report_error">Báo Lỗi</string>
<string name="report_error">Báo lỗi</string>
<string name="passwordRequired">Xin mời nhập mật khẩu</string>
<string name="intent_import_card_from_url_share_text">Tôi muốn chia sẻ thẻ với bạn</string>
<string name="star">Đánh dấu ưa thích</string>
<string name="addFromImage">Chọn ảnh từ thư viện ảnh</string>
<string name="reverse">...theo trật tự đảo ngược</string>
<string name="app_copyright_short">Bản quyền © Sylvia van Os và các cộng sự</string>
<string name="importExportHelp">Sao lưu cho phép bạn chuyển dữ liệu của mình đến thiết bị khác.</string>
<string name="importExportHelp">Sao lưu cho phép bạn chuyển dữ liệu của mình đến thiết bị khác</string>
<string name="settings_oled_dark">Nền đen tuyền cho chủ đề tối</string>
<string name="starred">Ưa thích</string>
<string name="field_must_not_be_empty">Không được để ô trống</string>
<string name="importOptionFilesystemExplanation">Chọn 1 tập tin cụ thể từ hệ thống (filesystem).</string>
<string name="importOptionFilesystemExplanation">Chọn 1 tập tin cụ thể từ hệ thống (filesystem)</string>
<string name="validFromSentence">Hợp lệ từ: <xliff:g>%s</xliff:g></string>
<string name="exportSuccessful">Xuất dữ liệu xong</string>
<string name="previousCard">Trước</string>
@@ -125,7 +124,7 @@
<string name="license">Giấy phép</string>
<string name="newBalanceSentence">Số dư mới: <xliff:g>%s</xliff:g></string>
<string name="editGroup">Sửa nhóm: <xliff:g>%s</xliff:g></string>
<string name="noGroups">Bấm vào dấu cộng + để thêm nhóm cho việc phân loại.</string>
<string name="noGroups">Bấm vào dấu cộng + để thêm nhóm cho việc phân loại</string>
<plurals name="groupCardCountWithArchived">
<item quantity="other"><xliff:g>%1$d</xliff:g> thẻ (lưu trữ <xliff:g id="archivedCount">%2$d</xliff:g>)</item>
</plurals>
@@ -137,10 +136,10 @@
<string name="options">Tùy chọn</string>
<string name="sendLabel">Gửi…</string>
<string name="importOptionFilesystemButton">Lấy từ hệ thống</string>
<string name="failedGeneratingShareURL">Không tạo được URL chia sẻ. Xin hãy báo cáo sự cố này.</string>
<string name="failedGeneratingShareURL">Không tạo được URL để chia sẻ</string>
<string name="selectColor">Chọn màu</string>
<string name="setBarcodeHeight">Đặt chiều cao cho mã vạch</string>
<string name="privacy_policy">Chính Sách Quyền Riêng Tư</string>
<string name="privacy_policy">Chính sách quyền riêng tư</string>
<string name="enter_group_name">Nhập tên nhóm</string>
<string name="addCardTitle">Thêm Thẻ</string>
<string name="exportFailed">Không thể xuất dữ liệu</string>
@@ -149,7 +148,7 @@
<string name="addManually">Nhập mã vạch thủ công</string>
<string name="updateBalance">Cập nhật số dư</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Bản quyền © 2019<xliff:g>%d</xliff:g> Sylvia van Os và các cộng sự</string>
<string name="sort_by_most_recently_used">Sửa dụng gần đây nhất</string>
<string name="sort_by_most_recently_used">Sử dụng gần đây nhất</string>
<string name="noGiftCards">Bấm nút dấu cộng + để thêm thẻ, hoặc nhập dữ liệu từ ⋮ menu</string>
<string name="importVoucherVault">Nhập dữ liệu từ Voucher Vault</string>
<string name="barcodeId">Giá trị mã vạch</string>
@@ -164,8 +163,7 @@
<string name="cameraPermissionRequired">Tác vụ này cần được cấp quyền sử dụng camera…</string>
<string name="settings_allow_content_provider_read_title">Cho phép ứng dụng khác truy cập vào dữ liệu của tôi</string>
<string name="updateBarcodeQuestionText">Bạn đã thay đổi ID. Bạn có muốn cập nhật mã vạch dùng chung giá trị này\?</string>
<string name="importLoyaltyCardKeychainMessage">Chọn <i>LoyaltyCardKeychain.csv</i> được xuất từ Loyalty Card Keychain để nhập liệu.
\nTập tin này có thể tạo bằng cách vào menu Import/Export của Loyalty Card Keychain → bấm Export.</string>
<string name="importLoyaltyCardKeychainMessage">Chọn tập tin được xuất từ Loyalty Card Keychain để nhập liệu. \nTạo tập tin này bằng cách vào menu Import/Export của Loyalty Card Keychain và bấm Export.</string>
<string name="settings_light_theme">Sáng</string>
<string name="moveDown">Kéo xuống</string>
<string name="importSuccessfulTitle">Nhập dữ liệu xong</string>
@@ -178,7 +176,7 @@
<string name="scanCardBarcode">Quét Mã Vạch</string>
<string name="updateBalanceHint">Nhập số lượng</string>
<string name="action_search">Tìm kiếm</string>
<string name="noGiftCardsGroup">Tạo vài thẻ, và phân công chúng vào nhóm này.</string>
<string name="noGiftCardsGroup">Tạo vài thẻ, và sắp xếp chúng vào nhóm này</string>
<string name="on_github">trên Github</string>
<string name="sort">Sắp Xếp</string>
<string name="permissionReadCardsLabel">Đọc thẻ Catima</string>
@@ -202,11 +200,11 @@
<string name="show_archived_cards">Hiện thẻ lưu trữ</string>
<string name="selectBarcodeTitle">Chọn Mã Vạch</string>
<string name="importSuccessful">Nhập dữ liệu xong</string>
<string name="app_libraries">Thư viện mở từ bên thứ 3: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_libraries">Thư viện mở từ bên thứ ba: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="updateBalanceTitle">Bạn đã chi tiêu hoặc nhận được bao nhiêu?</string>
<string name="editCardTitle">Sửa Thẻ</string>
<string name="editCardTitle">Sửa thẻ</string>
<string name="archive">Lưu trữ</string>
<string name="app_resources">Tài nguyên mở từ bên thứ 3: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_resources">Tài nguyên mở từ bên thứ ba: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="shortcutSelectCard">Chọn một thẻ</string>
<string name="accept">Đồng ý</string>
<string name="noCardsMessage">Thêm danh sách thẻ</string>
@@ -220,15 +218,13 @@
<plurals name="selectedCardCount">
<item quantity="other"><xliff:g>%d</xliff:g> đã được chọn</item>
</plurals>
<string name="version_history">Lịch SPhiên Bản</string>
<string name="version_history">Lịch sphiên bản</string>
<string name="note">Ghi chú</string>
<string name="importCatimaMessage">Chọn <i>catima.zip</i> được xuất từ Catima để nhập liệu.
\nTập tin này có thể tạo bằng cách vào menu Nhập/Xuất dữ liệu → bấm Xuất dữ liệu ở ứng dụng Catima khác.</string>
<string name="importCatimaMessage">Chọn tập tin được xuất từ Catima để nhập liệu.\nTạo tập tin từ menu Nhập/Xuất dữ liệu ở ứng dụng Catima khác và bấm Xuất dữ liệu.</string>
<plurals name="balancePoints">
<item quantity="other"><xliff:g>%s</xliff:g> điểm</item>
</plurals>
<string name="importFidmeMessage">Chọn <i>fidme-export-request-xxxxxx.zip</i> được xuất từ FidMe để nhập liệu, sau đó chọn mã vạch thủ công.
\nTập tin này có thể tạo bằng cách vào FidMe profile → Data Protection → bấm Extract my data.</string>
<string name="importFidmeMessage">Chọn tập tin được xuất từ FidMe để nhập liệu, sau đó chọn thủ công loại mã vạch. \nTạo tập tin này bằng cách vào tài khoản FidMe, chọn Data Protection, rồi bấm Extract my data.</string>
<string name="action_add">Thêm</string>
<string name="updateBarcodeQuestionTitle">Cập nhật giá trị cho mã vạch chứ\?</string>
<string name="deleteTitle">Xóa thẻ</string>
@@ -238,14 +234,14 @@
<string name="rate_this_app">Đánh giá ứng dụng</string>
<string name="credits">Ghi nhận</string>
<string name="app_name">Catima</string>
<string name="openFrontImageInGalleryApp">Mở hình ảnh phía trước trong ứng dụng thư viện</string>
<string name="openFrontImageInGalleryApp">Mở hình ảnh mặt trước trong ứng dụng thư viện ảnh</string>
<string name="and_data_usage">và sử dụng dữ liệu</string>
<string name="show_validity">Hiển thị tính hợp lệ</string>
<string name="barcodeLongPressMessage">Chỉ có thể mở hình ảnh trong ứng dụng thư viện</string>
<string name="source_repository">Kho lưu trữ nguồn</string>
<string name="switchToBackImage">Chuyển sang hình ảnh phía sau</string>
<string name="switchToFrontImage">Chuyển sang hình ảnh phía trước</string>
<string name="openBackImageInGalleryApp">Mở lại hình ảnh trong ứng dụng thư viện</string>
<string name="openBackImageInGalleryApp">Mở hình ảnh mặt sau trong ứng dụng thư viện ảnh</string>
<string name="failedToRetrieveImageFile">Không thể truy xuất tệp hình ảnh</string>
<string name="app_contributors">Được thực hiện bởi: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="app_license">Phần mềm miễn phí có bản quyền theo giấy phép GPLv3+</string>
@@ -254,12 +250,12 @@
<string name="spend">Tiêu</string>
<string name="receive">Nhận được</string>
<string name="amountParsingFailed">Số tiền không hợp lệ</string>
<string name="add_manually_warning_message">Đối với một số cửa hàng, giá trị mã vạch khác với số ghi trên thẻ. Vì lý do này, việc nhập mã vạch theo cách thủ công không phải lúc nào cũng hiệu quả. Thay vào đó, bạn nên quét mã vạch bằng máy ảnh của mình. Bạn vẫn muốn tiếp tục chứ?</string>
<string name="add_manually_warning_message">Đối với một số thẻ, giá trị mã vạch khác với số ghi trên thẻ. Vì lý do này, việc nhập mã vạch theo cách thủ công không phải lúc nào cũng hiệu quả. Thay vào đó, bạn nên quét mã vạch bằng máy ảnh của mình. Bạn vẫn muốn tiếp tục chứ?</string>
<string name="addFromPdfFile">Chọn tệp PDF</string>
<string name="errorReadingFile">Không thể đọc tệp</string>
<string name="errorReadingFile">Không thể đọc tập tin</string>
<string name="pageWithNumber">Page <xliff:g>%d</xliff:g></string>
<string name="multipleBarcodesFoundPleaseChooseOne">Bạn muốn sử dụng mã vạch nào được tìm thấy?</string>
<string name="failedLaunchingFileManager">Không thể tìm thấy trình quản lý tệp được hỗ trợ</string>
<string name="failedLaunchingFileManager">Không thể tìm thấy trình quản lý tập tin được hỗ trợ</string>
<string name="noCameraFoundGuideText">Có vẻ như thiết bị của bạn không có camera. Nếu có, hãy thử khởi động lại thiết bị. Nếu không, hãy sử dụng nút Tùy chọn khác bên dưới để thêm mã vạch theo cách khác.</string>
<string name="useFrontImage">Sử dụng hình ảnh phía trước</string>
<string name="useBackImage">Sử dụng hình ảnh phía sau</string>
@@ -279,10 +275,28 @@
<string name="settings_column_count_6">6</string>
<string name="settings_column_count_7">7</string>
<string name="sort_by_valid_from">Có hiệu lực từ</string>
<string name="addFromPkpass">Chọn tệp Passbook (.pkpass)</string>
<string name="addFromPkpass">Chọn tập tin Passbook (.pkpass / .pkpasses)</string>
<string name="unsupportedFile">Tập tin này không được hỗ trợ</string>
<string name="generic_error_please_retry">Xin lỗi, có gì đó không ổn, vui lòng thử lại...</string>
<string name="generic_error_please_retry"> lỗi xảy ra</string>
<string name="width">Chiều rộng</string>
<string name="setBarcodeWidth">Đặt chiều rộng mã vạch</string>
<string name="card_list_widget_name">Danh sách thẻ</string>
<string name="card_list_widget_empty">Sau khi được nhập vào Catima, thẻ hội viên của bạn sẽ xuất hiện ở đây. Hãy đảm bảo tất cả các thẻ không ở trạng thái đã lưu trữ.</string>
<string name="cardWithNumber">Thẻ <xliff:g>%d</xliff:g></string>
<string name="cardWithNumberAndLocale">Thẻ <xliff:g>%d</xliff:g> (<xliff:g>%s</xliff:g>)</string>
<string name="pleaseDoNotRotateTheDevice">Vui lòng không quay thiết bị, thao tác này sẽ huỷ hành động</string>
<string name="acra_catima_has_crashed">Rất tiếc, <xliff:g id="app_name">%s</xliff:g> đã bị lỗi. Vui lòng giúp chúng tôi sửa vấn đề này bằng cách gửi báo cáo lỗi.</string>
<string name="acra_explain_crash">Nếu được, bạn vui lòng mô tả rõ hơn về thao tác đã thực hiện tại đây:</string>
<string name="acra_crash_email_subject">Báo cáo lỗi <xliff:g id="app_name">%s</xliff:g></string>
<string name="pref_enable_acra">Yêu cầu gửi báo cáo lỗi</string>
<string name="pref_enable_acra_summary">Khi nhấn cho phép, bạn sẽ được yêu cầu gửi báo cáo khi lỗi xảy ra. Báo cáo lỗi sẽ không bao giờ được tự động gửi đi.</string>
<string name="copy_value">Sao chép giá trị</string>
<string name="copied_to_clipboard">Sao chép vào bộ nhớ tạm</string>
<string name="nothing_to_copy">Không tìm thấy giá trị</string>
<string name="barcodeEncoding">Mã hoá mã vạch</string>
<string name="back">Quay lại</string>
<string name="settings_disable_nfc_while_viewing_card">Tạm dừng NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Tạm dừng NFC để tránh tự động kích hoạt thanh toán NFC khi đang xem một thẻ</string>
<string name="nfc_blocked_while_viewing_card">Đã tạm dừng NFC</string>
<string name="change_settings">Thay đổi cài đặt</string>
</resources>
+7 -1
View File
@@ -282,7 +282,7 @@
<string name="setBarcodeWidth">设置条码宽度</string>
<string name="card_list_widget_name">卡片列表</string>
<string name="card_list_widget_empty">在 Catima 中添加了一些会员卡后,它们会出现在这里。如果你有卡片,确保不是所有都已归档。</string>
<string name="cardWithNumber"><xliff:g>%d</xliff:g></string>
<string name="cardWithNumber"><xliff:g>%d</xliff:g></string>
<string name="cardWithNumberAndLocale"><xliff:g>%d</xliff:g> <xliff:g>%s</xliff:g></string>
<string name="pleaseDoNotRotateTheDevice">请不要旋转设备,这样做会取消操作</string>
<string name="acra_catima_has_crashed">抱歉,但 <xliff:g id="app_name">%s</xliff:g>崩溃了。请发送错误报告帮助修复这个问题。</string>
@@ -293,4 +293,10 @@
<string name="copy_value">复制值</string>
<string name="copied_to_clipboard">已复制到剪贴板</string>
<string name="nothing_to_copy">没找到值</string>
<string name="barcodeEncoding">条形码编码</string>
<string name="back">返回</string>
<string name="settings_disable_nfc_while_viewing_card">暂停 NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">暂停 NFC 防止在查看卡片时触发 NFC 支付</string>
<string name="nfc_blocked_while_viewing_card">NFC 已暂停</string>
<string name="change_settings">更改设置</string>
</resources>
@@ -292,4 +292,10 @@
<string name="copy_value">複製值</string>
<string name="copied_to_clipboard">已複製到剪貼簿</string>
<string name="nothing_to_copy">未找到值</string>
<string name="barcodeEncoding">條碼編碼</string>
<string name="back">返回</string>
<string name="settings_disable_nfc_while_viewing_card">暫停 NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">暫停 NFC,以防止在檢視卡片時觸發 NFC 付款</string>
<string name="nfc_blocked_while_viewing_card">NFC 已暫停</string>
<string name="change_settings">變更設定</string>
</resources>
+1 -1
View File
@@ -98,7 +98,7 @@
<item>nb-rNO</item>
<item>nl</item>
<item>oc</item>
<!-- <item>peo</item> -->
<item>peo</item>
<item>pl</item>
<item>pt</item>
<item>pt-rBR</item>
+5 -1
View File
@@ -101,6 +101,9 @@
<string name="settings_key_keep_screen_on" translatable="false">pref_keep_screen_on</string>
<string name="settings_disable_lockscreen_while_viewing_card">Prevent screen lock</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Disables screen lock while viewing a card</string>
<string name="settings_disable_nfc_while_viewing_card">Pause NFC</string>
<string name="settings_disable_nfc_while_viewing_card_summary">Pauses NFC to prevent NFC payments from triggering while viewing a card</string>
<string name="settings_key_disable_nfc_while_viewing_card" translatable="false">pref_disable_nfc_while_viewing_card</string>
<string name="settings_allow_content_provider_read_title">Allow other apps to access my data</string>
<string name="settings_allow_content_provider_read_summary">Apps will still have to request permission to be granted access</string>
<string name="settings_key_disable_lockscreen_while_viewing_card" translatable="false">pref_disable_lockscreen_while_viewing_card</string>
@@ -344,6 +347,7 @@
<string name="copied_to_clipboard">Copied to clipboard</string>
<string name="nothing_to_copy">No value found</string>
<string name="barcodeEncoding">Barcode encoding</string>
<string name="automatic">Automatic</string>
<string name="back">Back</string>
<string name="nfc_blocked_while_viewing_card">NFC is paused</string>
<string name="change_settings">Change settings</string>
</resources>
+1
View File
@@ -33,6 +33,7 @@
<locale android:name="nb-NO" />
<locale android:name="nl" />
<locale android:name="oc" />
<locale android:name="peo" />
<locale android:name="pl" />
<locale android:name="pt" />
<locale android:name="pt-BR" />
+9
View File
@@ -109,6 +109,15 @@
android:title="@string/settings_disable_lockscreen_while_viewing_card"
app:iconSpaceReserved="false"
app:singleLineTitle="false" />
<SwitchPreferenceCompat
android:widgetLayout="@layout/preference_material_switch"
android:defaultValue="true"
android:key="@string/settings_key_disable_nfc_while_viewing_card"
android:summary="@string/settings_disable_nfc_while_viewing_card_summary"
android:title="@string/settings_disable_nfc_while_viewing_card"
app:iconSpaceReserved="false"
app:singleLineTitle="false" />
</PreferenceCategory>
<PreferenceCategory
@@ -42,7 +42,7 @@ public class DatabaseTest {
@Test
public void addRemoveOneGiftCard() {
assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase));
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, DEFAULT_HEADER_COLOR, 0, null,0);
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, DEFAULT_HEADER_COLOR, 0, null,0);
boolean result = (id != -1);
assertTrue(result);
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
@@ -58,7 +58,7 @@ public class DatabaseTest {
assertEquals("cardId", loyaltyCard.cardId);
assertEquals(null, loyaltyCard.barcodeId);
assertEquals(BarcodeFormat.UPC_A, loyaltyCard.barcodeType.format());
assertEquals(null, loyaltyCard.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, loyaltyCard.barcodeEncoding);
assertEquals(DEFAULT_HEADER_COLOR, loyaltyCard.headerColor);
assertEquals(0, loyaltyCard.starStatus);
assertEquals(0, loyaltyCard.archiveStatus);
@@ -71,7 +71,7 @@ public class DatabaseTest {
@Test
public void updateGiftCard() {
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, DEFAULT_HEADER_COLOR, 0, null,0);
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, DEFAULT_HEADER_COLOR, 0, null,0);
boolean result = (id != -1);
assertTrue(result);
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
@@ -99,7 +99,7 @@ public class DatabaseTest {
@Test
public void updateGiftCardOnlyStar() {
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, DEFAULT_HEADER_COLOR, 0, null,0);
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, DEFAULT_HEADER_COLOR, 0, null,0);
boolean result = (id != -1);
assertTrue(result);
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
@@ -119,7 +119,7 @@ public class DatabaseTest {
assertEquals("cardId", loyaltyCard.cardId);
assertEquals(null, loyaltyCard.barcodeId);
assertEquals(BarcodeFormat.UPC_A, loyaltyCard.barcodeType.format());
assertEquals(null, loyaltyCard.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, loyaltyCard.barcodeEncoding);
assertEquals(DEFAULT_HEADER_COLOR, loyaltyCard.headerColor);
assertEquals(1, loyaltyCard.starStatus);
assertEquals(0, loyaltyCard.archiveStatus);
@@ -130,14 +130,14 @@ public class DatabaseTest {
assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase));
boolean result = DBHelper.updateLoyaltyCard(mDatabase, 1, "store1", "note1", null, null, new BigDecimal("0"), null, "cardId1",
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, DEFAULT_HEADER_COLOR, 0, null, 0);
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, DEFAULT_HEADER_COLOR, 0, null, 0);
assertEquals(false, result);
assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase));
}
@Test
public void emptyGiftCardValues() {
long id = DBHelper.insertLoyaltyCard(mDatabase, "", "", null, null, new BigDecimal("0"), null, "", null, null, null, null, 0, null,0);
long id = DBHelper.insertLoyaltyCard(mDatabase, "", "", null, null, new BigDecimal("0"), null, "", null, null, StandardCharsets.ISO_8859_1, null, 0, null,0);
boolean result = (id != -1);
assertTrue(result);
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
@@ -153,7 +153,7 @@ public class DatabaseTest {
assertEquals("", loyaltyCard.cardId);
assertEquals(null, loyaltyCard.barcodeId);
assertEquals(null, loyaltyCard.barcodeType);
assertEquals(null, loyaltyCard.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, loyaltyCard.barcodeEncoding);
// headerColor is randomly generated when not given, so skip
assertEquals(0, loyaltyCard.starStatus);
assertEquals(0, loyaltyCard.archiveStatus);
@@ -214,10 +214,10 @@ public class DatabaseTest {
for (int index = CARDS_TO_ADD - 1; index >= 0; index--) {
if (index == CARDS_TO_ADD - 1) {
id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, null, new BigDecimal("0"), null, "cardId" + index,
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, index, 1, null,0);
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, index, 1, null,0);
} else {
id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, null, new BigDecimal("0"), null, "cardId" + index,
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, index, 0, null,0);
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, index, 0, null,0);
}
boolean result = (id != -1);
assertTrue(result);
@@ -241,7 +241,7 @@ public class DatabaseTest {
assertEquals("cardId" + index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID)));
assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ID)));
assertEquals(BarcodeFormat.UPC_A.toString(), cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE)));
assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ENCODING)));
assertEquals(StandardCharsets.ISO_8859_1.name(), cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ENCODING)));
assertEquals(index, cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_COLOR)));
assertEquals(1, cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STAR_STATUS)));
@@ -317,7 +317,7 @@ public class DatabaseTest {
public void updateGroup() {
// Create card
assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase));
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, DEFAULT_HEADER_COLOR, 0, null,0);
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, DEFAULT_HEADER_COLOR, 0, null,0);
boolean result = (id != -1);
assertTrue(result);
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
@@ -429,7 +429,7 @@ public class DatabaseTest {
public void cardAddAndRemoveGroups() {
// Create card
assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase));
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, DEFAULT_HEADER_COLOR, 0, null,0);
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, DEFAULT_HEADER_COLOR, 0, null,0);
boolean result = (id != -1);
assertTrue(result);
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
@@ -497,7 +497,7 @@ public class DatabaseTest {
assertEquals("cardId", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BarcodeFormat.UPC_A, card.barcodeType.format());
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding); // Old cards are assumed to be ISO-8859-1
assertEquals(null, card.headerColor);
assertEquals(0, card.starStatus);
assertEquals(0, card.lastUsed);
@@ -515,7 +515,7 @@ public class DatabaseTest {
assertEquals("cardId", card2.cardId);
assertEquals(null, card2.barcodeId);
assertEquals(null, card2.barcodeType); // Empty string should've become null
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding); // Old cards are assumed to be ISO-8859-1
assertEquals(null, card2.headerColor);
assertEquals(0, card2.starStatus);
assertEquals(0, card2.lastUsed);
@@ -525,7 +525,7 @@ public class DatabaseTest {
@Test
public void updateGiftCardOnlyBalance() {
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, DEFAULT_HEADER_COLOR, 0, null,0);
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, DEFAULT_HEADER_COLOR, 0, null,0);
boolean result = (id != -1);
assertTrue(result);
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
@@ -545,7 +545,7 @@ public class DatabaseTest {
assertEquals("cardId", loyaltyCard.cardId);
assertEquals(null, loyaltyCard.barcodeId);
assertEquals(BarcodeFormat.UPC_A, loyaltyCard.barcodeType.format());
assertEquals(null, loyaltyCard.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, loyaltyCard.barcodeEncoding);
assertEquals(DEFAULT_HEADER_COLOR, loyaltyCard.headerColor);
assertEquals(0, loyaltyCard.starStatus);
assertEquals(0, loyaltyCard.archiveStatus);
@@ -7,6 +7,7 @@ import android.content.pm.ApplicationInfo
import android.content.pm.ResolveInfo
import android.view.View
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.Robolectric
@@ -61,6 +62,12 @@ class ImportExportActivityTest {
assertEquals(state, buttonView.visibility)
}
@Test
fun testExportFilenameHasTimestamp() {
val filename = ImportExportActivity.getExportFilename()
assertTrue(filename.matches(Regex("catima_\\d{8}\\.zip")))
}
@Test
fun testAllOptionsAvailable() {
registerIntentHandler(Intent.ACTION_PICK)
@@ -74,7 +74,7 @@ public class ImportExportTest {
for (int index = cardsToAdd; index > 4; index--) {
String storeName = String.format("store, \"%4d", index);
String note = String.format("note, \"%4d", index);
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, null, index, 1, null,0);
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, index, 1, null,0);
boolean result = (id != -1);
assertTrue(result);
}
@@ -82,7 +82,7 @@ public class ImportExportTest {
String storeName = String.format("store, \"%4d", index);
String note = String.format("note, \"%4d", index);
//if index is even
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, null, index, 0, null,0);
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, index, 0, null,0);
boolean result = (id != -1);
assertTrue(result);
}
@@ -91,7 +91,7 @@ public class ImportExportTest {
@Test
public void addLoyaltyCardsWithExpiryNeverPastTodayFuture() {
long id = DBHelper.insertLoyaltyCard(mDatabase, "No Expiry", "", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, 0, null,0);
long id = DBHelper.insertLoyaltyCard(mDatabase, "No Expiry", "", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, 0, 0, null,0);
boolean result = (id != -1);
assertTrue(result);
@@ -105,11 +105,11 @@ public class ImportExportTest {
assertEquals(BARCODE_DATA, card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BARCODE_TYPE.format(), card.barcodeType.format());
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
assertEquals(Integer.valueOf(0), card.headerColor);
assertEquals(0, card.starStatus);
id = DBHelper.insertLoyaltyCard(mDatabase, "Past", "", null, new Date((long) 1), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, 0, null,0);
id = DBHelper.insertLoyaltyCard(mDatabase, "Past", "", null, new Date((long) 1), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, 0, 0, null,0);
result = (id != -1);
assertTrue(result);
@@ -123,11 +123,11 @@ public class ImportExportTest {
assertEquals(BARCODE_DATA, card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BARCODE_TYPE.format(), card.barcodeType.format());
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
assertEquals(Integer.valueOf(0), card.headerColor);
assertEquals(0, card.starStatus);
id = DBHelper.insertLoyaltyCard(mDatabase, "Today", "", null, new Date(), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, 0, null,0);
id = DBHelper.insertLoyaltyCard(mDatabase, "Today", "", null, new Date(), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, 0, 0, null,0);
result = (id != -1);
assertTrue(result);
@@ -142,13 +142,13 @@ public class ImportExportTest {
assertEquals(BARCODE_DATA, card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BARCODE_TYPE.format(), card.barcodeType.format());
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
assertEquals(Integer.valueOf(0), card.headerColor);
assertEquals(0, card.starStatus);
// This will break after 19 January 2038
// If someone is still maintaining this code base by then: I love you
id = DBHelper.insertLoyaltyCard(mDatabase, "Future", "", null, new Date(2147483648000L), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, 0, null,0);
id = DBHelper.insertLoyaltyCard(mDatabase, "Future", "", null, new Date(2147483648000L), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, 0, 0, null,0);
result = (id != -1);
assertTrue(result);
@@ -162,7 +162,7 @@ public class ImportExportTest {
assertEquals(BARCODE_DATA, card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BARCODE_TYPE.format(), card.barcodeType.format());
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
assertEquals(Integer.valueOf(0), card.headerColor);
assertEquals(0, card.starStatus);
@@ -193,7 +193,7 @@ public class ImportExportTest {
assertEquals(BARCODE_DATA, card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BARCODE_TYPE.format(), card.barcodeType.format());
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
assertEquals(Integer.valueOf(index), card.headerColor);
assertEquals(0, card.starStatus);
@@ -225,7 +225,7 @@ public class ImportExportTest {
assertEquals(BARCODE_DATA, card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BARCODE_TYPE.format(), card.barcodeType.format());
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
assertEquals(Integer.valueOf(index), card.headerColor);
assertEquals(0, card.starStatus);
}
@@ -257,7 +257,7 @@ public class ImportExportTest {
assertEquals(BARCODE_DATA, card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BARCODE_TYPE.format(), card.barcodeType.format());
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
assertEquals(Integer.valueOf(index), card.headerColor);
assertEquals(1, card.starStatus);
@@ -280,7 +280,7 @@ public class ImportExportTest {
assertEquals(BARCODE_DATA, card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BARCODE_TYPE.format(), card.barcodeType.format());
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
assertEquals(Integer.valueOf(index), card.headerColor);
assertEquals(0, card.starStatus);
@@ -669,7 +669,7 @@ public class ImportExportTest {
assertEquals("12345", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BarcodeFormat.AZTEC, card.barcodeType.format());
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding); // Old cards are assumed to be ISO-8859-1
assertNull(card.headerColor);
assertEquals(0, card.starStatus);
@@ -696,7 +696,7 @@ public class ImportExportTest {
assertEquals("12345", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BarcodeFormat.AZTEC, card.barcodeType.format());
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding); // Old cards are assumed to be ISO-8859-1
assertNull(card.headerColor);
assertEquals(0, card.starStatus);
@@ -735,7 +735,7 @@ public class ImportExportTest {
assertEquals("12345", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(null, card.barcodeType);
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding); // Old cards are assumed to be ISO-8859-1
assertEquals(1, (long) card.headerColor);
assertEquals(0, card.starStatus);
@@ -762,7 +762,7 @@ public class ImportExportTest {
assertEquals("12345", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BarcodeFormat.AZTEC, card.barcodeType.format());
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding); // Old cards are assumed to be ISO-8859-1
assertEquals(1, (long) card.headerColor);
assertEquals(1, card.starStatus);
@@ -789,7 +789,7 @@ public class ImportExportTest {
assertEquals("12345", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BarcodeFormat.AZTEC, card.barcodeType.format());
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding); // Old cards are assumed to be ISO-8859-1
assertEquals(1, (long) card.headerColor);
assertEquals(0, card.starStatus);
@@ -823,7 +823,7 @@ public class ImportExportTest {
assertEquals("12345", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BarcodeFormat.AZTEC, card.barcodeType.format());
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding); // Old cards are assumed to be ISO-8859-1
assertEquals(1, (long) card.headerColor);
assertEquals(0, card.starStatus);
@@ -859,7 +859,7 @@ public class ImportExportTest {
loyaltyCardIconImages.put(loyaltyCardId, bitmap1);
// Create card 2
loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 2", "", null, null, new BigDecimal(0), null, "123456", null, null, null, 2, 1, null,0);
loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 2", "", null, null, new BigDecimal(0), null, "123456", null, null, StandardCharsets.ISO_8859_1, 2, 1, null,0);
loyaltyCardHashMap.put(loyaltyCardId, DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, loyaltyCardId));
// Export everything
@@ -977,7 +977,7 @@ public class ImportExportTest {
assertEquals("1234", card1.cardId);
assertEquals("5432", card1.barcodeId);
assertEquals(BarcodeFormat.QR_CODE, card1.barcodeType.format());
assertEquals(null, card1.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card1.barcodeEncoding);
assertEquals(1, (long) card1.headerColor);
assertEquals(0, card1.starStatus);
assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card1.id, ImageLocationType.front));
@@ -995,7 +995,7 @@ public class ImportExportTest {
assertEquals("a", card8.cardId);
assertEquals(null, card8.barcodeId);
assertEquals(null, card8.barcodeType);
assertEquals(null, card8.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card8.barcodeEncoding);
assertEquals(-5317, (long) card8.headerColor);
assertEquals(0, card8.starStatus);
assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card8.id, ImageLocationType.front));
@@ -1013,7 +1013,7 @@ public class ImportExportTest {
assertEquals("A", card2.cardId);
assertEquals(null, card2.barcodeId);
assertEquals(null, card2.barcodeType);
assertEquals(null, card2.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card2.barcodeEncoding);
assertEquals(-9977996, (long) card2.headerColor);
assertEquals(0, card2.starStatus);
assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card2.id, ImageLocationType.front));
@@ -1031,7 +1031,7 @@ public class ImportExportTest {
assertEquals("dhd", card3.cardId);
assertEquals(null, card3.barcodeId);
assertEquals(null, card3.barcodeType);
assertEquals(null, card3.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card3.barcodeEncoding);
assertEquals(-9977996, (long) card3.headerColor);
assertEquals(0, card3.starStatus);
assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card3.id, ImageLocationType.front));
@@ -1049,7 +1049,7 @@ public class ImportExportTest {
assertEquals("dhshsvshs", card4.cardId);
assertEquals(null, card4.barcodeId);
assertEquals(null, card4.barcodeType);
assertEquals(null, card4.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card4.barcodeEncoding);
assertEquals(-10902850, (long) card4.headerColor);
assertEquals(1, card4.starStatus);
assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card4.id, ImageLocationType.front));
@@ -1085,7 +1085,7 @@ public class ImportExportTest {
assertEquals("a", card6.cardId);
assertEquals("-5317", card6.barcodeId);
assertEquals(BarcodeFormat.AZTEC, card6.barcodeType.format());
assertEquals(null, card6.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card6.barcodeEncoding);
assertEquals(null, card6.headerColor);
assertEquals(0, card6.starStatus);
assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card6.id, ImageLocationType.front));
@@ -1133,7 +1133,7 @@ public class ImportExportTest {
assertEquals("82825292629272726", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(null, card.barcodeType);
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
assertEquals(0, card.starStatus);
card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 2);
@@ -1147,7 +1147,7 @@ public class ImportExportTest {
assertEquals("123456", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(null, card.barcodeType);
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
assertEquals(0, card.starStatus);
card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 3);
@@ -1161,7 +1161,7 @@ public class ImportExportTest {
assertEquals("123435363634", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(null, card.barcodeType);
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
assertEquals(0, card.starStatus);
TestHelpers.getEmptyDb(activity);
@@ -1187,7 +1187,7 @@ public class ImportExportTest {
assertEquals("123456", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BarcodeFormat.CODE_128, card.barcodeType.format());
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
assertEquals(Color.GRAY, (long) card.headerColor);
assertEquals(0, card.starStatus);
@@ -1202,7 +1202,7 @@ public class ImportExportTest {
assertEquals("26846363", card.cardId);
assertEquals(null, card.barcodeId);
assertEquals(BarcodeFormat.CODE_39, card.barcodeType.format());
assertEquals(null, card.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
assertEquals(Color.rgb(128, 0, 128), (long) card.headerColor);
assertEquals(0, card.starStatus);
@@ -73,7 +73,7 @@ public class ImportURITest {
@Test
public void ensureNoCrashOnMissingHeaderFields() throws InvalidObjectException, UnsupportedEncodingException {
// Generate card
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), null, null, 0, null,0);
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), StandardCharsets.ISO_8859_1, null, 0, null,0);
// Get card
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
@@ -187,7 +187,7 @@ public class ImportURITest {
assertEquals("12345", parsedCard.cardId);
assertEquals(null, parsedCard.barcodeId);
assertEquals(BarcodeFormat.ITF, parsedCard.barcodeType.format());
assertEquals(null, parsedCard.barcodeEncoding);
assertEquals(StandardCharsets.ISO_8859_1, parsedCard.barcodeEncoding);
assertEquals(Integer.valueOf(-416706), parsedCard.headerColor);
assertEquals(0, parsedCard.starStatus);
}
@@ -25,6 +25,7 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.shadows.ShadowLog;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.util.Currency;
@RunWith(RobolectricTestRunner.class)
@@ -96,7 +97,7 @@ public class LoyaltyCardCursorAdapterTest {
@Test
public void TestCursorAdapterEmptyNote() {
DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
@@ -111,7 +112,7 @@ public class LoyaltyCardCursorAdapterTest {
@Test
public void TestCursorAdapterWithNote() {
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
@@ -126,10 +127,10 @@ public class LoyaltyCardCursorAdapterTest {
@Test
public void TestCursorAdapterStarring() {
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeA", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,1));
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeB", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 1, null,1));
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeC", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0));
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeD", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 1, null,0));
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeA", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,1));
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeB", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 1, null,1));
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeC", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0));
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeD", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 1, null,0));
assertEquals(4, DBHelper.getLoyaltyCardCount(mDatabase));
@@ -177,7 +178,7 @@ public class LoyaltyCardCursorAdapterTest {
@Test
public void TestCursorAdapter0Points() {
DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
@@ -192,7 +193,7 @@ public class LoyaltyCardCursorAdapterTest {
@Test
public void TestCursorAdapter0EUR() {
DBHelper.insertLoyaltyCard(mDatabase,"store", "", null, null, new BigDecimal("0"), Currency.getInstance("EUR"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
DBHelper.insertLoyaltyCard(mDatabase,"store", "", null, null, new BigDecimal("0"), Currency.getInstance("EUR"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
@@ -207,7 +208,7 @@ public class LoyaltyCardCursorAdapterTest {
@Test
public void TestCursorAdapter100Points() {
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
@@ -222,7 +223,7 @@ public class LoyaltyCardCursorAdapterTest {
@Test
public void TestCursorAdapter10USD() {
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("USD"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("USD"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
File diff suppressed because it is too large Load Diff
@@ -32,6 +32,7 @@ import org.robolectric.android.controller.ActivityController;
import org.robolectric.shadows.ShadowActivity;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
@@ -97,7 +98,7 @@ public class MainActivityTest {
assertEquals(0, list.getAdapter().getItemCount());
SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
assertEquals(View.VISIBLE, helpSection.getVisibility());
assertEquals(View.GONE, noMatchingCardsText.getVisibility());
@@ -132,10 +133,10 @@ public class MainActivityTest {
assertEquals(0, list.getAdapter().getItemCount());
SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "storeB", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
DBHelper.insertLoyaltyCard(database, "storeA", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
DBHelper.insertLoyaltyCard(database, "storeD", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 1, null,0);
DBHelper.insertLoyaltyCard(database, "storeC", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 1, null,0);
DBHelper.insertLoyaltyCard(database, "storeB", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
DBHelper.insertLoyaltyCard(database, "storeA", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
DBHelper.insertLoyaltyCard(database, "storeD", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 1, null,0);
DBHelper.insertLoyaltyCard(database, "storeC", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 1, null,0);
assertEquals(View.VISIBLE, helpSection.getVisibility());
assertEquals(View.GONE, noMatchingCardsText.getVisibility());
@@ -229,8 +230,8 @@ public class MainActivityTest {
TabLayout groupTabs = mainActivity.findViewById(R.id.groups);
SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "The First Store", "Initial note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
DBHelper.insertLoyaltyCard(database, "The Second Store", "Secondary note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
DBHelper.insertLoyaltyCard(database, "The First Store", "Initial note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
DBHelper.insertLoyaltyCard(database, "The Second Store", "Secondary note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
DBHelper.insertGroup(database, "Group one");
List<Group> groups = new ArrayList<>();
@@ -485,8 +486,8 @@ public class MainActivityTest {
SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "The First Store", "Initial note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
DBHelper.insertLoyaltyCard(database, "The Second Store", "Secondary note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
DBHelper.insertLoyaltyCard(database, "The First Store", "Initial note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
DBHelper.insertLoyaltyCard(database, "The Second Store", "Secondary note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
String finalQuery = "store";
assert mSearchView != null;
@@ -492,7 +492,7 @@ class PkpassTest {
Assert.assertEquals("No barcode", parsedCard.cardId)
Assert.assertEquals(null, parsedCard.barcodeId)
Assert.assertEquals(null, parsedCard.barcodeType)
Assert.assertEquals(null, parsedCard.barcodeEncoding)
Assert.assertEquals(StandardCharsets.ISO_8859_1, parsedCard.barcodeEncoding)
Assert.assertEquals(Color.parseColor("#FFFFFF"), parsedCard.headerColor)
Assert.assertEquals(0, parsedCard.starStatus)
Assert.assertEquals(0, parsedCard.archiveStatus)
@@ -559,7 +559,7 @@ class PkpassTest {
Assert.assertEquals("No barcode", parsedCard.cardId)
Assert.assertEquals(null, parsedCard.barcodeId)
Assert.assertEquals(null, parsedCard.barcodeType)
Assert.assertEquals(null, parsedCard.barcodeEncoding)
Assert.assertEquals(StandardCharsets.ISO_8859_1, parsedCard.barcodeEncoding)
Assert.assertEquals(Color.parseColor("#FFFFFF"), parsedCard.headerColor)
Assert.assertEquals(0, parsedCard.starStatus)
Assert.assertEquals(0, parsedCard.archiveStatus)
@@ -0,0 +1,125 @@
package protect.card_locker;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import android.app.Activity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import androidx.core.content.pm.ShortcutInfoCompat;
import androidx.core.content.pm.ShortcutManagerCompat;
import com.google.zxing.BarcodeFormat;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.android.controller.ActivityController;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.util.Comparator;
@RunWith(RobolectricTestRunner.class)
public class ShortcutHelperTest {
private Activity mActivity;
private SQLiteDatabase mDatabase;
private int id1;
private int id2;
private int id3;
private int id4;
@Before
public void setUp() {
mActivity = Robolectric.setupActivity(MainActivity.class);
mDatabase = TestHelpers.getEmptyDb(mActivity).getWritableDatabase();
long now = System.currentTimeMillis();
id1 = (int) DBHelper.insertLoyaltyCard(mDatabase, "store1", "note1", null, null, new BigDecimal("0"), null, "cardId1", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, now,0);
id2 = (int) DBHelper.insertLoyaltyCard(mDatabase, "store2", "note2", null, null, new BigDecimal("0"), null, "cardId2", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, now + 10,0);
id3 = (int) DBHelper.insertLoyaltyCard(mDatabase, "store3", "note3", null, null, new BigDecimal("0"), null, "cardId3", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, now + 20,0);
id4 = (int) DBHelper.insertLoyaltyCard(mDatabase, "store4", "note4", null, null, new BigDecimal("0"), null, "cardId4", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, now + 30,0);
ShortcutHelper.maxShortcuts = 3;
}
private Integer[] getShortcutIds(Context context) {
return ShortcutManagerCompat.getDynamicShortcuts(context)
.stream()
.sorted(Comparator.comparingInt(ShortcutInfoCompat::getRank))
.map(shortcut -> Integer.parseInt(shortcut.getId()))
.toArray(Integer[]::new);
}
@Test
public void onArchiveUnarchive() {
ActivityController activityController = Robolectric.buildActivity(MainActivity.class).create();
Activity mainActivity = (Activity) activityController.get();
activityController.pause();
activityController.resume();
assertEquals(3, ShortcutManagerCompat.getDynamicShortcuts(mainActivity).stream().count());
Integer[] ids = getShortcutIds(mainActivity);
assertArrayEquals(new Integer[] {id4, id3, id2}, ids);
DBHelper.updateLoyaltyCardArchiveStatus(mDatabase, id4, 1);
activityController.pause();
activityController.resume();
Integer[] idsAfterArchive = getShortcutIds(mainActivity);
assertArrayEquals(new Integer[] {id3, id2, id1}, idsAfterArchive);
DBHelper.updateLoyaltyCardArchiveStatus(mDatabase, id4, 0);
activityController.pause();
activityController.resume();
Integer[] idsAfterUnarchive = getShortcutIds(mainActivity);
assertArrayEquals(new Integer[] {id4, id3, id2}, idsAfterUnarchive);
}
@Test
public void onAddRemoveFavorite() {
ActivityController activityController = Robolectric.buildActivity(MainActivity.class).create();
Activity mainActivity = (Activity) activityController.get();
activityController.pause();
activityController.resume();
assertEquals(3, ShortcutManagerCompat.getDynamicShortcuts(mainActivity).stream().count());
Integer[] ids = getShortcutIds(mainActivity);
assertArrayEquals(new Integer[] {id4, id3, id2}, ids);
DBHelper.updateLoyaltyCardStarStatus(mDatabase, id1, 1);
activityController.pause();
activityController.resume();
Integer[] idsAfterFav = getShortcutIds(mainActivity);
assertArrayEquals(new Integer[] {id1, id4, id3}, idsAfterFav);
DBHelper.updateLoyaltyCardStarStatus(mDatabase, id1, 0);
activityController.pause();
activityController.resume();
Integer[] idsAfterUnfav = getShortcutIds(mainActivity);
assertArrayEquals(new Integer[] {id4, id3, id2}, idsAfterUnfav);
}
}
@@ -11,6 +11,7 @@ import com.google.zxing.BarcodeFormat;
import java.io.FileNotFoundException;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
public class TestHelpers {
private static final String BARCODE_DATA = "428311627547";
@@ -21,19 +22,20 @@ public class TestHelpers {
SQLiteDatabase database = db.getWritableDatabase();
// Make sure no files remain
Cursor cursor = DBHelper.getLoyaltyCardCursor(database);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
int cardID = cursor.getColumnIndex(DBHelper.LoyaltyCardDbIds.ID);
try (Cursor cursor = DBHelper.getLoyaltyCardCursor(database)) {
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
int cardID = cursor.getColumnIndex(DBHelper.LoyaltyCardDbIds.ID);
for (ImageLocationType imageLocationType : ImageLocationType.values()) {
try {
Utils.saveCardImage(context.getApplicationContext(), null, cardID, imageLocationType);
} catch (FileNotFoundException ignored) {
for (ImageLocationType imageLocationType : ImageLocationType.values()) {
try {
Utils.saveCardImage(context.getApplicationContext(), null, cardID, imageLocationType);
} catch (FileNotFoundException ignored) {
}
}
}
cursor.moveToNext();
cursor.moveToNext();
}
}
// Make sure DB is empty
@@ -55,7 +57,7 @@ public class TestHelpers {
for (int index = cardsToAdd; index > 0; index--) {
String storeName = String.format("store, \"%4d", index);
String note = String.format("note, \"%4d", index);
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, null, index, 0, null,0);
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, index, 0, null,0);
boolean result = (id != -1);
assertTrue(result);
}
@@ -75,7 +75,7 @@ public class CardsContentProviderTest {
assertArrayEquals("column names", new String[]{"major", "minor"}, cursor.getColumnNames());
cursor.moveToNext();
assertEquals("major version", 1, cursor.getInt(cursor.getColumnIndexOrThrow("major")));
assertEquals("minor version", 0, cursor.getInt(cursor.getColumnIndexOrThrow("minor")));
assertEquals("minor version", 1, cursor.getInt(cursor.getColumnIndexOrThrow("minor")));
}
}
@@ -114,7 +114,7 @@ public class CardsContentProviderTest {
final String[] expectedColumns = new String[]{
"_id", "store", "validfrom", "expiry", "balance", "balancetype",
"note", "headercolor", "cardid", "barcodeid",
"barcodetype", "starstatus", "lastused", "archive"
"barcodetype", "barcodeencoding", "starstatus", "lastused", "archive"
};
assertEquals("number of columns", expectedColumns.length, cursor.getColumnCount());
@@ -136,6 +136,7 @@ public class CardsContentProviderTest {
final String actualCardId = cursor.getString(cursor.getColumnIndexOrThrow("cardid"));
final String actualBarcodeId = cursor.getString(cursor.getColumnIndexOrThrow("barcodeid"));
final String actualBarcodeType = cursor.getString(cursor.getColumnIndexOrThrow("barcodetype"));
final String actualBarcodeEncoding = cursor.getString(cursor.getColumnIndexOrThrow("barcodeencoding"));
final int actualHeaderColor = cursor.getInt(cursor.getColumnIndexOrThrow("headercolor"));
final int actualStarred = cursor.getInt(cursor.getColumnIndexOrThrow("starstatus"));
final long actualLastUsed = cursor.getLong(cursor.getColumnIndexOrThrow("lastused"));
@@ -151,6 +152,7 @@ public class CardsContentProviderTest {
assertEquals("CardId", cardId, actualCardId);
assertEquals("BarcodeId", barcodeId, actualBarcodeId);
assertEquals("BarcodeType", barcodeType.format().name(), actualBarcodeType);
assertEquals("barcodeEncoding", barcodeEncoding.name(), actualBarcodeEncoding);
assertEquals("HeaderColorColumn", headerColor, actualHeaderColor);
assertEquals("Starred", starStatus, actualStarred);
assertEquals("LastUsed", lastUsed, actualLastUsed);

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