Compare commits

...

123 Commits

Author SHA1 Message Date
Sylvia van Os
693e89c635 Bump com.android.application to 8.7.1 and suppress incorrect new lint warning 2024-10-22 18:39:34 +02:00
Vincent Caron
d95a7f7982 Add icons to the "More options" dialog (#2121) 2024-10-21 18:39:30 +02:00
Sylvia van Os
2f72fee1aa Merge pull request #2122 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2024-10-21 17:49:06 +02:00
Jiri Grönroos
59ffa6c357 Translated using Weblate (Finnish)
Currently translated at 100.0% (315 of 315 strings)

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

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

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

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

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

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

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

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

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

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

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-14 02:53:36 +00:00
dependabot[bot]
b025af8d07 Bump actions/checkout from 4.2.0 to 4.2.1
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.0 to 4.2.1.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4.2.0...v4.2.1)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2024-09-30 14:34:04 +02:00
Sylvia van Os
74ae9ee040 Merge pull request #2090 from CatimaLoyalty/dependabot/github_actions/actions/checkout-4.2.0
Bump actions/checkout from 4.1.7 to 4.2.0
2024-09-30 08:22:39 +02:00
dependabot[bot]
d1e455f038 Bump actions/checkout from 4.1.7 to 4.2.0
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.7 to 4.2.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4.1.7...v4.2.0)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-27 02:30:23 +00:00
Sylvia van Os
a3ca084444 Merge pull request #2056 from CatimaLoyalty/create-pull-request/patch-1724559358
Update contributors
2024-08-25 10:52:03 +02:00
TheLastProject
35082be6cd Update contributors 2024-08-25 04:15:57 +00:00
Sylvia van Os
934ddb1bfe Merge pull request #2055 from CatimaLoyalty/fix/1842
Fix about screen text overlaying into arrows
2024-08-24 18:57:57 +02:00
Sylvia van Os
5d0a1d8fb2 Fix about screen text overlaying into arrows 2024-08-24 18:35:36 +02:00
99 changed files with 1133 additions and 511 deletions

View File

@@ -32,7 +32,7 @@ jobs:
matrix:
api-level: [ 21, 34 ]
steps:
- uses: actions/checkout@v4.1.7
- uses: actions/checkout@v4.2.1
- name: Fail on bad translations
run: if grep -ri "&lt;xliff" app/src/main/res/values*/strings.xml; then echo "Invalidly escaped translations found"; exit 1; fi
- uses: gradle/actions/wrapper-validation@v4
@@ -62,7 +62,7 @@ jobs:
run: ./gradlew spotbugsRelease
- name: Archive test results
if: always()
uses: actions/upload-artifact@v4.3.6
uses: actions/upload-artifact@v4.4.3
with:
name: test-results-api${{ matrix.api-level }}
path: app/build/reports

View File

@@ -27,15 +27,15 @@ jobs:
steps:
- name: Checkout repo
id: checkout
uses: actions/checkout@v4.1.7
uses: actions/checkout@v4.2.1
- name: Setup Python
uses: actions/setup-python@v5.1.1
uses: actions/setup-python@v5.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@v6.1.0
uses: peter-evans/create-pull-request@v7.0.5
with:
title: "Update Fastlane changelogs"
commit-message: "Update Fastlane changelogs"

View File

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

View File

@@ -25,7 +25,7 @@ jobs:
generate-feature-graphic:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.7
- uses: actions/checkout@v4.2.1
- name: Install requirements
run: |
sudo apt-get update
@@ -39,7 +39,7 @@ jobs:
- name: Generate featureGraphic.png for each language
run: .scripts/generate_feature_graphic/generate_feature_graphic.sh
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6.1.0
uses: peter-evans/create-pull-request@v7.0.5
with:
title: "Update feature graphic"
commit-message: "Update feature graphic"

View File

@@ -21,12 +21,12 @@ jobs:
gradle-update:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4.1.7
- uses: actions/checkout@v4.2.1
- uses: obfusk/gradle-update-action@v3.0.0
id: gradle-update
- uses: gradle/actions/wrapper-validation@v4
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6.1.0
uses: peter-evans/create-pull-request@v7.0.5
with:
title: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"
commit-message: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"

View File

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

View File

@@ -4,6 +4,11 @@ set -euo pipefail
script_location="$(dirname "$(readlink -f "$0")")"
for lang in "$script_location/../../fastlane/metadata/android/"*; do
# Skip languages without title.txt
if [ ! -f "$lang/title.txt" ]; then
continue
fi
pushd "$lang"
# Place temporary copy for editing if needed
cp "$script_location/featureGraphic.svg" featureGraphic.svg

View File

@@ -1,5 +1,9 @@
# Changelog
## Unreleased - 139
- Option to navigate cards using the volume buttons
## v2.31.1 - 138 (2024-08-24)
- Fix back gesture on main screen dismissing keyboard and search on Android 13+

View File

@@ -96,7 +96,7 @@ dependencies {
implementation("androidx.preference:preference:1.2.1")
implementation("com.google.android.material:material:1.12.0")
implementation("com.github.yalantis:ucrop:2.2.9")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.2")
// Splash Screen
implementation("androidx.core:core-splashscreen:1.0.1")

View File

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

View File

@@ -183,7 +183,8 @@
android:resource="@xml/file_provider_paths" />
</provider>
<service android:name=".CardsOnPowerScreenService" android:label="@string/app_name"
android:permission="android.permission.BIND_CONTROLS" android:exported="true">
android:permission="android.permission.BIND_CONTROLS" android:exported="true"
tools:targetApi="r">
<intent-filter>
<action android:name="android.service.controls.ControlsProviderService" />
</intent-filter>

View File

@@ -71,7 +71,7 @@ public class BarcodeSelectorActivity extends CatimaAppCompatActivity implements
});
final Bundle b = getIntent().getExtras();
final String initialCardId = b != null ? b.getString("initialCardId") : null;
final String initialCardId = b != null ? b.getString(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID) : null;
if (initialCardId != null) {
cardId.setText(initialCardId);

View File

@@ -1,11 +1,14 @@
package protect.card_locker;
import androidx.annotation.Nullable;
public class BarcodeValues {
private final String mFormat;
@Nullable
private final CatimaBarcode mFormat;
private final String mContent;
private String mNote;
public BarcodeValues(String format, String content) {
public BarcodeValues(@Nullable CatimaBarcode format, String content) {
mFormat = format;
mContent = content;
}
@@ -14,7 +17,7 @@ public class BarcodeValues {
mNote = note;
}
public String format() {
public @Nullable CatimaBarcode format() {
return mFormat;
}

View File

@@ -61,7 +61,7 @@ public class CardShortcutConfigure extends CatimaAppCompatActivity implements Lo
private void onClickAction(int position) {
Cursor selected = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.All);
selected.moveToPosition(position);
LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(selected);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(selected);
Log.d(TAG, "Creating shortcut for card " + loyaltyCard.store + "," + loyaltyCard.id);

View File

@@ -42,10 +42,10 @@ public class CardsOnPowerScreenService extends ControlsProviderService {
Cursor loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.Unarchived);
return subscriber -> {
while (loyaltyCardCursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(loyaltyCardCursor);
LoyaltyCard card = LoyaltyCard.fromCursor(loyaltyCardCursor);
Intent openIntent = new Intent(this, LoyaltyCardViewActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra("id", card.id);
.putExtra(LoyaltyCardViewActivity.BUNDLE_ID, card.id);
PendingIntent pendingIntent = PendingIntent.getActivity(getBaseContext(), card.id, openIntent, PendingIntent.FLAG_IMMUTABLE);
subscriber.onNext(
new Control.StatelessBuilder(PREFIX + card.id, pendingIntent)
@@ -73,7 +73,7 @@ public class CardsOnPowerScreenService extends ControlsProviderService {
if (card != null) {
Intent openIntent = new Intent(this, LoyaltyCardViewActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra("id", card.id);
.putExtra(LoyaltyCardViewActivity.BUNDLE_ID, card.id);
PendingIntent pendingIntent = PendingIntent.getActivity(getBaseContext(), card.id, openIntent, PendingIntent.FLAG_IMMUTABLE);
control = new Control.StatefulBuilder(controlId, pendingIntent)
.setTitle(card.store)
@@ -129,7 +129,7 @@ public class CardsOnPowerScreenService extends ControlsProviderService {
consumer.accept(ControlAction.RESPONSE_OK);
Intent openIntent = new Intent(this, LoyaltyCardViewActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra("id", controlIdToCardId(controlId));
.putExtra(LoyaltyCardViewActivity.BUNDLE_ID, controlIdToCardId(controlId));
startActivity(openIntent);
closePowerScreenOnAndroid11();

View File

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

View File

@@ -332,7 +332,7 @@ public class DBHelper extends SQLiteOpenHelper {
Set<String> files = new HashSet<>();
Cursor cardCursor = getLoyaltyCardCursor(database);
while (cardCursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cardCursor);
LoyaltyCard card = LoyaltyCard.fromCursor(cardCursor);
for (ImageLocationType imageLocationType : ImageLocationType.values()) {
String name = Utils.getCardImageFileName(card.id, imageLocationType);
if (Utils.retrieveCardImageAsFile(context, name).exists()) {
@@ -542,7 +542,7 @@ public class DBHelper extends SQLiteOpenHelper {
if (data.getCount() == 1) {
data.moveToFirst();
card = LoyaltyCard.toLoyaltyCard(data);
card = LoyaltyCard.fromCursor(data);
}
data.close();

View File

@@ -1,6 +1,7 @@
package protect.card_locker;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Parcel;
import android.os.Parcelable;
@@ -10,76 +11,207 @@ import androidx.annotation.Nullable;
import java.math.BigDecimal;
import java.util.Currency;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
public class LoyaltyCard implements Parcelable {
public final int id;
public final String store;
public final String note;
public int id;
public String store;
public String note;
@Nullable
public final Date validFrom;
public Date validFrom;
@Nullable
public final Date expiry;
public final BigDecimal balance;
public Date expiry;
public BigDecimal balance;
@Nullable
public final Currency balanceType;
public final String cardId;
public Currency balanceType;
public String cardId;
@Nullable
public final String barcodeId;
public String barcodeId;
@Nullable
public final CatimaBarcode barcodeType;
public CatimaBarcode barcodeType;
@Nullable
public final Integer headerColor;
public final int starStatus;
public final int archiveStatus;
public final long lastUsed;
public Integer headerColor;
public int starStatus;
public long lastUsed;
public int zoomLevel;
public int archiveStatus;
public static final String BUNDLE_LOYALTY_CARD_ID = "loyaltyCardId";
public static final String BUNDLE_LOYALTY_CARD_STORE = "loyaltyCardStore";
public static final String BUNDLE_LOYALTY_CARD_NOTE = "loyaltyCardNote";
public static final String BUNDLE_LOYALTY_CARD_VALID_FROM = "loyaltyCardValidFrom";
public static final String BUNDLE_LOYALTY_CARD_EXPIRY = "loyaltyCardExpiry";
public static final String BUNDLE_LOYALTY_CARD_BALANCE = "loyaltyCardBalance";
public static final String BUNDLE_LOYALTY_CARD_BALANCE_TYPE = "loyaltyCardBalanceType";
public static final String BUNDLE_LOYALTY_CARD_CARD_ID = "loyaltyCardCardId";
public static final String BUNDLE_LOYALTY_CARD_BARCODE_ID = "loyaltyCardBarcodeId";
public static final String BUNDLE_LOYALTY_CARD_BARCODE_TYPE = "loyaltyCardBarcodeType";
public static final String BUNDLE_LOYALTY_CARD_HEADER_COLOR = "loyaltyCardHeaderColor";
public static final String BUNDLE_LOYALTY_CARD_STAR_STATUS = "loyaltyCardStarStatus";
public static final String BUNDLE_LOYALTY_CARD_LAST_USED = "loyaltyCardLastUsed";
public static final String BUNDLE_LOYALTY_CARD_ZOOM_LEVEL = "loyaltyCardZoomLevel";
public static final String BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS = "loyaltyCardArchiveStatus";
/**
* Create a loyalty card object with default values
*/
public LoyaltyCard() {
setId(-1);
setStore("");
setNote("");
setValidFrom(null);
setExpiry(null);
setBalance(new BigDecimal("0"));
setBalanceType(null);
setCardId("");
setBarcodeId(null);
setBarcodeType(null);
setHeaderColor(null);
setStarStatus(0);
setLastUsed(Utils.getUnixTime());
setZoomLevel(100);
setArchiveStatus(0);
}
/**
* Create a new loyalty card
*
* @param id
* @param store
* @param note
* @param validFrom
* @param expiry
* @param balance
* @param balanceType
* @param cardId
* @param barcodeId
* @param barcodeType
* @param headerColor
* @param starStatus
* @param lastUsed
* @param zoomLevel
* @param archiveStatus
*/
public LoyaltyCard(final int id, final String store, final String note, @Nullable final Date validFrom,
@Nullable final Date expiry, final BigDecimal balance, @Nullable final Currency balanceType,
final String cardId, @Nullable final String barcodeId, @Nullable final CatimaBarcode barcodeType,
@Nullable final Integer headerColor, final int starStatus,
final long lastUsed, final int zoomLevel, final int archiveStatus) {
setId(id);
setStore(store);
setNote(note);
setValidFrom(validFrom);
setExpiry(expiry);
setBalance(balance);
setBalanceType(balanceType);
setCardId(cardId);
setBarcodeId(barcodeId);
setBarcodeType(barcodeType);
setHeaderColor(headerColor);
setStarStatus(starStatus);
setLastUsed(lastUsed);
setZoomLevel(zoomLevel);
setArchiveStatus(archiveStatus);
}
public void setId(int id) {
this.id = id;
}
public void setStore(@NonNull String store) {
this.store = store;
}
public void setNote(@NonNull String note) {
this.note = note;
}
public void setValidFrom(@Nullable Date validFrom) {
this.validFrom = validFrom;
}
public void setExpiry(@Nullable Date expiry) {
this.expiry = expiry;
}
public void setBalance(@NonNull BigDecimal balance) {
this.balance = balance;
}
public void setBalanceType(@Nullable Currency balanceType) {
this.balanceType = balanceType;
}
public void setCardId(@NonNull String cardId) {
this.cardId = cardId;
}
public void setBarcodeId(@Nullable String barcodeId) {
this.barcodeId = barcodeId;
}
public void setBarcodeType(@Nullable CatimaBarcode barcodeType) {
this.barcodeType = barcodeType;
}
public void setHeaderColor(@Nullable Integer headerColor) {
this.headerColor = headerColor;
}
public void setStarStatus(int starStatus) {
if (starStatus != 0 && starStatus != 1) {
throw new IllegalArgumentException("starStatus must be 0 or 1");
}
this.starStatus = starStatus;
}
public void setLastUsed(long lastUsed) {
this.lastUsed = lastUsed;
}
public void setZoomLevel(int zoomLevel) {
if (zoomLevel < 0 || zoomLevel > 100) {
throw new IllegalArgumentException("zoomLevel must be in range 0-100");
}
this.zoomLevel = zoomLevel;
}
public void setArchiveStatus(int archiveStatus) {
if (archiveStatus != 0 && archiveStatus != 1) {
throw new IllegalArgumentException("archiveStatus must be 0 or 1");
}
this.archiveStatus = archiveStatus;
}
protected LoyaltyCard(Parcel in) {
id = in.readInt();
store = in.readString();
note = in.readString();
setId(in.readInt());
setStore(Objects.requireNonNull(in.readString()));
setNote(Objects.requireNonNull(in.readString()));
long tmpValidFrom = in.readLong();
validFrom = tmpValidFrom != -1 ? new Date(tmpValidFrom) : null;
setValidFrom(tmpValidFrom > 0 ? new Date(tmpValidFrom) : null);
long tmpExpiry = in.readLong();
expiry = tmpExpiry != -1 ? new Date(tmpExpiry) : null;
balance = (BigDecimal) in.readValue(BigDecimal.class.getClassLoader());
balanceType = (Currency) in.readValue(Currency.class.getClassLoader());
cardId = in.readString();
barcodeId = in.readString();
setExpiry(tmpExpiry > 0 ? new Date(tmpExpiry) : null);
setBalance((BigDecimal) in.readValue(BigDecimal.class.getClassLoader()));
setBalanceType((Currency) in.readValue(Currency.class.getClassLoader()));
setCardId(Objects.requireNonNull(in.readString()));
setBarcodeId(in.readString());
String tmpBarcodeType = in.readString();
barcodeType = !tmpBarcodeType.isEmpty() ? CatimaBarcode.fromName(tmpBarcodeType) : null;
setBarcodeType((tmpBarcodeType != null && !tmpBarcodeType.isEmpty()) ? CatimaBarcode.fromName(tmpBarcodeType) : null);
int tmpHeaderColor = in.readInt();
headerColor = tmpHeaderColor != -1 ? tmpHeaderColor : null;
starStatus = in.readInt();
lastUsed = in.readLong();
zoomLevel = in.readInt();
archiveStatus = in.readInt();
setHeaderColor(tmpHeaderColor != -1 ? tmpHeaderColor : null);
setStarStatus(in.readInt());
setLastUsed(in.readLong());
setZoomLevel(in.readInt());
setArchiveStatus(in.readInt());
}
@Override
public void writeToParcel(Parcel parcel, int i) {
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(id);
parcel.writeString(store);
parcel.writeString(note);
@@ -97,51 +229,171 @@ public class LoyaltyCard implements Parcelable {
parcel.writeInt(archiveStatus);
}
public static LoyaltyCard toLoyaltyCard(Cursor cursor) {
public static LoyaltyCard fromBundle(Bundle bundle, boolean requireFull) {
// Grab default card
LoyaltyCard loyaltyCard = new LoyaltyCard();
// Update from bundle
loyaltyCard.updateFromBundle(bundle, requireFull);
// Return updated version
return loyaltyCard;
}
public void updateFromBundle(Bundle bundle, boolean requireFull) {
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_ID)) {
setId(bundle.getInt(BUNDLE_LOYALTY_CARD_ID));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_ID);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_STORE)) {
setStore(Objects.requireNonNull(bundle.getString(BUNDLE_LOYALTY_CARD_STORE)));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_STORE);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_NOTE)) {
setNote(Objects.requireNonNull(bundle.getString(BUNDLE_LOYALTY_CARD_NOTE)));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_NOTE);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_VALID_FROM)) {
long tmpValidFrom = bundle.getLong(BUNDLE_LOYALTY_CARD_VALID_FROM);
setValidFrom(tmpValidFrom > 0 ? new Date(tmpValidFrom) : null);
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_VALID_FROM);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_EXPIRY)) {
long tmpExpiry = bundle.getLong(BUNDLE_LOYALTY_CARD_EXPIRY);
setExpiry(tmpExpiry > 0 ? new Date(tmpExpiry) : null);
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_EXPIRY);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_BALANCE)) {
setBalance(new BigDecimal(bundle.getString(BUNDLE_LOYALTY_CARD_BALANCE)));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_BALANCE);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_BALANCE_TYPE)) {
String tmpBalanceType = bundle.getString(BUNDLE_LOYALTY_CARD_BALANCE_TYPE);
setBalanceType(tmpBalanceType != null ? Currency.getInstance(tmpBalanceType) : null);
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_BALANCE_TYPE);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_CARD_ID)) {
setCardId(Objects.requireNonNull(bundle.getString(BUNDLE_LOYALTY_CARD_CARD_ID)));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_CARD_ID);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_BARCODE_ID)) {
setBarcodeId(bundle.getString(BUNDLE_LOYALTY_CARD_BARCODE_ID));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_BARCODE_ID);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_BARCODE_TYPE)) {
String tmpBarcodeType = bundle.getString(BUNDLE_LOYALTY_CARD_BARCODE_TYPE);
setBarcodeType(tmpBarcodeType != null ? CatimaBarcode.fromName(tmpBarcodeType) : null);
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_BARCODE_TYPE);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_HEADER_COLOR)) {
int tmpHeaderColor = bundle.getInt(BUNDLE_LOYALTY_CARD_HEADER_COLOR);
setHeaderColor(tmpHeaderColor != -1 ? tmpHeaderColor : null);
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_HEADER_COLOR);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_STAR_STATUS)) {
setStarStatus(bundle.getInt(BUNDLE_LOYALTY_CARD_STAR_STATUS));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_STAR_STATUS);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_LAST_USED)) {
setLastUsed(bundle.getLong(BUNDLE_LOYALTY_CARD_LAST_USED));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_LAST_USED);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL)) {
setZoomLevel(bundle.getInt(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_ZOOM_LEVEL);
}
if (bundle.containsKey(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS)) {
setArchiveStatus(bundle.getInt(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS));
} else if (requireFull) {
throw new IllegalArgumentException("Missing key " + BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS);
}
}
public Bundle toBundle() {
Bundle bundle = new Bundle();
bundle.putInt(BUNDLE_LOYALTY_CARD_ID, id);
bundle.putString(BUNDLE_LOYALTY_CARD_STORE, store);
bundle.putString(BUNDLE_LOYALTY_CARD_NOTE, note);
if (validFrom != null) {
bundle.putLong(BUNDLE_LOYALTY_CARD_VALID_FROM, validFrom.getTime());
}
if (expiry != null) {
bundle.putLong(BUNDLE_LOYALTY_CARD_EXPIRY, expiry.getTime());
}
bundle.putString(BUNDLE_LOYALTY_CARD_BALANCE, balance.toString());
if (balanceType != null) {
bundle.putString(BUNDLE_LOYALTY_CARD_BALANCE_TYPE, balanceType.toString());
}
bundle.putString(BUNDLE_LOYALTY_CARD_CARD_ID, cardId);
bundle.putString(BUNDLE_LOYALTY_CARD_BARCODE_ID, barcodeId);
if (barcodeType != null) {
bundle.putString(BUNDLE_LOYALTY_CARD_BARCODE_TYPE, barcodeType.name());
}
if (headerColor != null) {
bundle.putInt(BUNDLE_LOYALTY_CARD_HEADER_COLOR, headerColor);
}
bundle.putInt(BUNDLE_LOYALTY_CARD_STAR_STATUS, starStatus);
bundle.putLong(BUNDLE_LOYALTY_CARD_LAST_USED, lastUsed);
bundle.putInt(BUNDLE_LOYALTY_CARD_ZOOM_LEVEL, zoomLevel);
bundle.putInt(BUNDLE_LOYALTY_CARD_ARCHIVE_STATUS, archiveStatus);
return bundle;
}
public static LoyaltyCard fromCursor(Cursor cursor) {
// id
int id = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ID));
// store
String store = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STORE));
// note
String note = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.NOTE));
// validFrom
long validFromLong = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.VALID_FROM));
Date validFrom = validFromLong > 0 ? new Date(validFromLong) : null;
// expiry
long expiryLong = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.EXPIRY));
Date expiry = expiryLong > 0 ? new Date(expiryLong) : null;
// balance
BigDecimal balance = new BigDecimal(cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE)));
String cardId = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID));
String barcodeId = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ID));
int starred = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STAR_STATUS));
long lastUsed = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.LAST_USED));
int zoomLevel = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ZOOM_LEVEL));
int archived = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ARCHIVE_STATUS));
int barcodeTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE);
// balanceType
int balanceTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE);
Currency balanceType = !cursor.isNull(balanceTypeColumn) ? Currency.getInstance(cursor.getString(balanceTypeColumn)) : null;
// cardId
String cardId = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID));
// barcodeId
int barcodeIdColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ID);
String barcodeId = !cursor.isNull(barcodeIdColumn) ? cursor.getString(barcodeIdColumn) : null;
// barcodeType
int barcodeTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE);
CatimaBarcode barcodeType = !cursor.isNull(barcodeTypeColumn) ? CatimaBarcode.fromName(cursor.getString(barcodeTypeColumn)) : null;
// headerColor
int headerColorColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_COLOR);
Integer headerColor = !cursor.isNull(headerColorColumn) ? cursor.getInt(headerColorColumn) : null;
// starStatus
int starStatus = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STAR_STATUS));
// lastUsed
long lastUsed = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.LAST_USED));
// zoomLevel
int zoomLevel = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ZOOM_LEVEL));
// archiveStatus
int archiveStatus = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ARCHIVE_STATUS));
CatimaBarcode barcodeType = null;
Currency balanceType = null;
Date validFrom = null;
Date expiry = null;
Integer headerColor = null;
if (cursor.isNull(barcodeTypeColumn) == false) {
barcodeType = CatimaBarcode.fromName(cursor.getString(barcodeTypeColumn));
}
if (cursor.isNull(balanceTypeColumn) == false) {
balanceType = Currency.getInstance(cursor.getString(balanceTypeColumn));
}
if (validFromLong > 0) {
validFrom = new Date(validFromLong);
}
if (expiryLong > 0) {
expiry = new Date(expiryLong);
}
if (cursor.isNull(headerColorColumn) == false) {
headerColor = cursor.getInt(headerColorColumn);
}
return new LoyaltyCard(id, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starred, lastUsed, zoomLevel, archived);
return new LoyaltyCard(id, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus, lastUsed, zoomLevel, archiveStatus);
}
public static boolean isDuplicate(final LoyaltyCard a, final LoyaltyCard b) {

View File

@@ -79,7 +79,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
public LoyaltyCard getCard(int position) {
mCursor.moveToPosition(position);
return LoyaltyCard.toLoyaltyCard(mCursor);
return LoyaltyCard.fromCursor(mCursor);
}
public void onBindViewHolder(LoyaltyCardListItemViewHolder inputHolder, Cursor inputCursor) {
@@ -87,7 +87,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
boolean showDivider = false;
inputHolder.mDivider.setVisibility(View.GONE);
LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(inputCursor);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(inputCursor);
Bitmap icon = Utils.retrieveCardImage(mContext, loyaltyCard.id, ImageLocationType.icon);
if (mLoyaltyCardListDisplayOptions.showingNameBelowThumbnail() && icon != null) {
@@ -192,7 +192,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
int i;
for (i = 0; i < mSelectedItems.size(); i++) {
mCursor.moveToPosition(mSelectedItems.keyAt(i));
result.add(LoyaltyCard.toLoyaltyCard(mCursor));
result.add(LoyaltyCard.fromCursor(mCursor));
}
return result;

View File

@@ -127,9 +127,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
public static final String BUNDLE_DUPLICATE_ID = "duplicateId";
public static final String BUNDLE_UPDATE = "update";
public static final String BUNDLE_OPEN_SET_ICON_MENU = "openSetIconMenu";
public static final String BUNDLE_CARDID = "cardId";
public static final String BUNDLE_BARCODEID = "barcodeId";
public static final String BUNDLE_BARCODETYPE = "barcodeType";
public static final String BUNDLE_ADDGROUP = "addGroup";
TabLayout tabs;
@@ -162,15 +159,11 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
boolean updateLoyaltyCard;
boolean duplicateFromLoyaltyCardId;
boolean openSetIconMenu;
String cardId;
String barcodeId;
String barcodeType;
String addGroup;
Uri importLoyaltyCardUri = null;
SQLiteDatabase mDatabase;
ImportURIHelper importUriHelper;
boolean hasChanged = false;
String tempStoredOldBarcodeValue = null;
@@ -183,7 +176,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
HashMap<String, Currency> currencies = new HashMap<>();
HashMap<String, String> currencySymbols = new HashMap<>();
LoyaltyCard tempLoyaltyCard;
LoyaltyCard tempLoyaltyCard = new LoyaltyCard();
LoyaltyCardField tempLoyaltyCardField;
ActivityResultLauncher<Uri> mPhotoTakerLauncher;
@@ -215,53 +208,112 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
super.attachBaseContext(base);
}
private static LoyaltyCard updateTempState(LoyaltyCard loyaltyCard, LoyaltyCardField fieldName, Object value) {
return new LoyaltyCard(
(int) (fieldName == LoyaltyCardField.id ? value : loyaltyCard.id),
(String) (fieldName == LoyaltyCardField.store ? value : loyaltyCard.store),
(String) (fieldName == LoyaltyCardField.note ? value : loyaltyCard.note),
(Date) (fieldName == LoyaltyCardField.validFrom ? value : loyaltyCard.validFrom),
(Date) (fieldName == LoyaltyCardField.expiry ? value : loyaltyCard.expiry),
(BigDecimal) (fieldName == LoyaltyCardField.balance ? value : loyaltyCard.balance),
(Currency) (fieldName == LoyaltyCardField.balanceType ? value : loyaltyCard.balanceType),
(String) (fieldName == LoyaltyCardField.cardId ? value : loyaltyCard.cardId),
(String) (fieldName == LoyaltyCardField.barcodeId ? value : loyaltyCard.barcodeId),
(CatimaBarcode) (fieldName == LoyaltyCardField.barcodeType ? value : loyaltyCard.barcodeType),
(Integer) (fieldName == LoyaltyCardField.headerColor ? value : loyaltyCard.headerColor),
(int) (fieldName == LoyaltyCardField.starStatus ? value : loyaltyCard.starStatus),
0, // Unimportant, always set to null in doSave so the DB updates it to the current timestamp
100, // Unimportant, not updated in doSave, defaults to 100 for new cards
(int) (fieldName == LoyaltyCardField.archiveStatus ? value : loyaltyCard.archiveStatus)
);
}
protected void updateTempState(LoyaltyCardField fieldName, Object value) {
tempLoyaltyCard = updateTempState(tempLoyaltyCard, fieldName, value);
if (initDone && (fieldName == LoyaltyCardField.cardId || fieldName == LoyaltyCardField.barcodeId || fieldName == LoyaltyCardField.barcodeType)) {
generateBarcode();
}
protected void setLoyaltyCardStore(@NonNull String store) {
tempLoyaltyCard.setStore(store);
hasChanged = true;
}
private void extractIntentFields(Intent intent) {
protected void setLoyaltyCardNote(@NonNull String note) {
tempLoyaltyCard.setNote(note);
hasChanged = true;
}
protected void setLoyaltyCardValidFrom(@Nullable Date validFrom) {
tempLoyaltyCard.setValidFrom(validFrom);
hasChanged = true;
}
protected void setLoyaltyCardExpiry(@Nullable Date expiry) {
tempLoyaltyCard.setExpiry(expiry);
hasChanged = true;
}
protected void setLoyaltyCardBalance(@NonNull BigDecimal balance) {
tempLoyaltyCard.setBalance(balance);
hasChanged = true;
}
protected void setLoyaltyCardBalanceType(@Nullable Currency balanceType) {
tempLoyaltyCard.setBalanceType(balanceType);
hasChanged = true;
}
protected void setLoyaltyCardCardId(@NonNull String cardId) {
tempLoyaltyCard.setCardId(cardId);
generateBarcode();
hasChanged = true;
}
protected void setLoyaltyCardBarcodeId(@Nullable String barcodeId) {
tempLoyaltyCard.setBarcodeId(barcodeId);
generateBarcode();
hasChanged = true;
}
protected void setLoyaltyCardBarcodeType(@Nullable CatimaBarcode barcodeType) {
tempLoyaltyCard.setBarcodeType(barcodeType);
generateBarcode();
hasChanged = true;
}
protected void setLoyaltyCardHeaderColor(@Nullable Integer headerColor) {
tempLoyaltyCard.setHeaderColor(headerColor);
hasChanged = true;
}
/* Extract intent fields and return if code should keep running */
private boolean extractIntentFields(Intent intent) {
final Bundle b = intent.getExtras();
addGroup = b != null ? b.getString(BUNDLE_ADDGROUP) : null;
openSetIconMenu = b != null && b.getBoolean(BUNDLE_OPEN_SET_ICON_MENU, false);
loyaltyCardId = b != null ? b.getInt(BUNDLE_ID) : 0;
updateLoyaltyCard = b != null && b.getBoolean(BUNDLE_UPDATE, false);
duplicateFromLoyaltyCardId = b != null && b.getBoolean(BUNDLE_DUPLICATE_ID, false);
openSetIconMenu = b != null && b.getBoolean(BUNDLE_OPEN_SET_ICON_MENU, false);
cardId = b != null ? b.getString(BUNDLE_CARDID) : null;
barcodeId = b != null ? b.getString(BUNDLE_BARCODEID) : null;
barcodeType = b != null ? b.getString(BUNDLE_BARCODETYPE) : null;
addGroup = b != null ? b.getString(BUNDLE_ADDGROUP) : null;
importLoyaltyCardUri = intent.getData();
// If we have to import a loyalty card, do so
if (updateLoyaltyCard || duplicateFromLoyaltyCardId) {
tempLoyaltyCard = DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId);
if (tempLoyaltyCard == null) {
Log.w(TAG, "Could not lookup loyalty card " + loyaltyCardId);
Toast.makeText(this, R.string.noCardExistsError, Toast.LENGTH_LONG).show();
finish();
return false;
}
} else if (importLoyaltyCardUri != null) {
try {
tempLoyaltyCard = new ImportURIHelper(this).parse(importLoyaltyCardUri);
} catch (InvalidObjectException ex) {
Toast.makeText(this, R.string.failedParsingImportUriError, Toast.LENGTH_LONG).show();
finish();
return false;
}
}
// If the intent contains any loyalty card fields, override those fields in our current temp card
if (b != null) {
tempLoyaltyCard.updateFromBundle(b, false);
}
Log.d(TAG, "Edit activity: id=" + loyaltyCardId
+ ", updateLoyaltyCard=" + updateLoyaltyCard);
return true;
}
@Override
@@ -333,9 +385,9 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
mDatabase = new DBHelper(this).getWritableDatabase();
extractIntentFields(getIntent());
importUriHelper = new ImportURIHelper(this);
if (!extractIntentFields(getIntent())) {
return;
}
for (Currency currency : Currency.getAvailableCurrencies()) {
currencies.put(currency.getSymbol(), currency);
@@ -370,7 +422,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String storeName = s.toString().trim();
updateTempState(LoyaltyCardField.store, storeName);
setLoyaltyCardStore(storeName);
generateIcon(storeName);
if (storeName.length() == 0) {
@@ -384,7 +436,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
noteFieldEdit.addTextChangedListener(new SimpleTextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
updateTempState(LoyaltyCardField.note, s.toString());
setLoyaltyCardNote(s.toString());
}
});
@@ -397,7 +449,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
balanceField.setOnFocusChangeListener((v, hasFocus) -> {
if (!hasFocus && !onResuming && !onRestoring) {
if (balanceField.getText().toString().isEmpty()) {
updateTempState(LoyaltyCardField.balance, BigDecimal.valueOf(0));
setLoyaltyCardBalance(BigDecimal.valueOf(0));
}
balanceField.setText(Utils.formatBalanceWithoutCurrencySymbol(tempLoyaltyCard.balance, tempLoyaltyCard.balanceType));
@@ -410,7 +462,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
if (onResuming || onRestoring) return;
try {
BigDecimal balance = Utils.parseBalance(s.toString(), tempLoyaltyCard.balanceType);
updateTempState(LoyaltyCardField.balance, balance);
setLoyaltyCardBalance(balance);
balanceField.setError(null);
validBalance = true;
} catch (ParseException e) {
@@ -432,7 +484,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
currency = currencies.get(s.toString());
}
updateTempState(LoyaltyCardField.balanceType, currency);
setLoyaltyCardBalanceType(currency);
if (tempLoyaltyCard.balance != null && !onResuming && !onRestoring) {
balanceField.setText(Utils.formatBalanceWithoutCurrencySymbol(tempLoyaltyCard.balance, currency));
@@ -491,7 +543,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
updateTempState(LoyaltyCardField.cardId, s.toString());
setLoyaltyCardCardId(s.toString());
if (s.length() == 0) {
cardIdFieldView.setError(getString(R.string.field_must_not_be_empty));
@@ -516,7 +568,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
// request to update it to match the card id (if changed)
tempStoredOldBarcodeValue = null;
updateTempState(LoyaltyCardField.barcodeId, null);
setLoyaltyCardBarcodeId(null);
} else if (s.toString().equals(getString(R.string.setBarcodeId))) {
if (!lastValue.toString().equals(getString(R.string.setBarcodeId))) {
barcodeIdField.setText(lastValue);
@@ -554,7 +606,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
input.requestFocus();
} else {
updateTempState(LoyaltyCardField.barcodeId, s.toString());
setLoyaltyCardBarcodeId(s.toString());
}
}
@@ -573,12 +625,12 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!s.toString().isEmpty()) {
if (s.toString().equals(getString(R.string.noBarcode))) {
updateTempState(LoyaltyCardField.barcodeType, null);
setLoyaltyCardBarcodeType(null);
} else {
try {
CatimaBarcode barcodeFormat = CatimaBarcode.fromPrettyName(s.toString());
updateTempState(LoyaltyCardField.barcodeType, barcodeFormat);
setLoyaltyCardBarcodeType(barcodeFormat);
if (!barcodeFormat.isSupported()) {
Toast.makeText(LoyaltyCardEditActivity.this, getString(R.string.unsupportedBarcodeType), Toast.LENGTH_LONG).show();
@@ -652,9 +704,9 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
Utils.makeUserChooseBarcodeFromList(this, barcodeValuesList, new BarcodeValuesListDisambiguatorCallback() {
@Override
public void onUserChoseBarcode(BarcodeValues barcodeValues) {
cardId = barcodeValues.content();
barcodeType = barcodeValues.format();
barcodeId = "";
setLoyaltyCardCardId(barcodeValues.content());
setLoyaltyCardBarcodeType(barcodeValues.format());
setLoyaltyCardBarcodeId("");
}
@Override
@@ -796,30 +848,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
onResuming = true;
if (tempLoyaltyCard == null) {
if (updateLoyaltyCard || duplicateFromLoyaltyCardId) {
tempLoyaltyCard = DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId);
if (tempLoyaltyCard == null) {
Log.w(TAG, "Could not lookup loyalty card " + loyaltyCardId);
Toast.makeText(this, R.string.noCardExistsError, Toast.LENGTH_LONG).show();
finish();
return;
}
} else if (importLoyaltyCardUri != null) {
try {
tempLoyaltyCard = importUriHelper.parse(importLoyaltyCardUri);
} catch (InvalidObjectException ex) {
Toast.makeText(this, R.string.failedParsingImportUriError, Toast.LENGTH_LONG).show();
finish();
return;
}
} else {
// New card, use default values
tempLoyaltyCard = new LoyaltyCard(-1, "", "", null, null, new BigDecimal("0"), null, "", null, null, null, 0, Utils.getUnixTime(), 100,0);
}
}
if (!initDone) {
if (updateLoyaltyCard) {
setTitle(R.string.editCardTitle);
@@ -868,7 +896,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
// which can cause issues when switching locale because it parses the balance and e.g. the decimal separator may have changed.
formatBalanceCurrencyField(tempLoyaltyCard.balanceType);
BigDecimal balance = tempLoyaltyCard.balance == null ? new BigDecimal("0") : tempLoyaltyCard.balance;
tempLoyaltyCard = updateTempState(tempLoyaltyCard, LoyaltyCardField.balance, balance);
setLoyaltyCardBalance(balance);
balanceField.setText(Utils.formatBalanceWithoutCurrencySymbol(tempLoyaltyCard.balance, tempLoyaltyCard.balanceType));
validBalance = true;
Log.d(TAG, "Setting balance to " + balance);
@@ -915,35 +943,30 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
if (tempLoyaltyCard.headerColor == null) {
// If name is set, pick colour relevant for name. Otherwise pick randomly
updateTempState(LoyaltyCardField.headerColor, tempLoyaltyCard.store.isEmpty() ? Utils.getRandomHeaderColor(this) : Utils.getHeaderColor(this, tempLoyaltyCard));
setLoyaltyCardHeaderColor(tempLoyaltyCard.store.isEmpty() ? Utils.getRandomHeaderColor(this) : Utils.getHeaderColor(this, tempLoyaltyCard));
}
// Update from intent
if (barcodeType != null) {
// Fix up some fields
if (tempLoyaltyCard.barcodeType != null) {
try {
barcodeTypeField.setText(CatimaBarcode.fromName(barcodeType).prettyName());
barcodeTypeField.setText(tempLoyaltyCard.barcodeType.prettyName());
} catch (IllegalArgumentException e) {
barcodeTypeField.setText(getString(R.string.noBarcode));
}
}
if (cardId != null) {
cardIdFieldView.setText(cardId);
if (tempLoyaltyCard.cardId != null) {
cardIdFieldView.setText(tempLoyaltyCard.cardId);
}
if (barcodeId != null) {
if (!barcodeId.isEmpty()) {
barcodeIdField.setText(barcodeId);
if (tempLoyaltyCard.barcodeId != null) {
if (!tempLoyaltyCard.barcodeId.isEmpty()) {
barcodeIdField.setText(tempLoyaltyCard.barcodeId);
} else {
barcodeIdField.setText(getString(R.string.sameAsCardId));
}
}
// Empty intent values
barcodeType = null;
cardId = null;
barcodeId = null;
// Initialization has finished
if (!initDone) {
initDone = true;
@@ -964,9 +987,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
generateIcon(storeFieldEdit.getText().toString().trim());
// It can't be null because we set it in updateTempState but SpotBugs insists it can be
// NP_NULL_ON_SOME_PATH: Possible null pointer dereference and
// NP_NULL_PARAM_DEREF: Method call passes null for non-null parameter
Integer headerColor = tempLoyaltyCard.headerColor;
if (headerColor != null) {
thumbnail.setOnClickListener(new ChooseCardImage());
@@ -990,7 +1010,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
if (icon != null && (icon instanceof Bitmap)) {
int headerColor = Utils.getHeaderColorFromImage((Bitmap) icon, Utils.getHeaderColor(this, tempLoyaltyCard));
updateTempState(LoyaltyCardField.headerColor, headerColor);
setLoyaltyCardHeaderColor(headerColor);
thumbnailEditIcon.setBackgroundColor(Utils.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
thumbnailEditIcon.setColorFilter(Utils.needsDarkForeground(headerColor) ? Color.WHITE : Color.BLACK);
@@ -1038,7 +1058,16 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (s.toString().equals(getString(defaultOptionStringId))) {
dateField.setTag(null);
updateTempState(loyaltyCardField, null);
switch (loyaltyCardField) {
case validFrom:
setLoyaltyCardValidFrom(null);
break;
case expiry:
setLoyaltyCardExpiry(null);
break;
default:
throw new AssertionError("Unexpected field: " + loyaltyCardField);
}
} else if (s.toString().equals(getString(chooseDateOptionStringId))) {
if (!lastValue.toString().equals(getString(chooseDateOptionStringId))) {
dateField.setText(lastValue);
@@ -1255,7 +1284,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(), ScanActivity.class);
final Bundle b = new Bundle();
b.putString(LoyaltyCardEditActivity.BUNDLE_CARDID, cardIdFieldView.getText().toString());
b.putString(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID, cardIdFieldView.getText().toString());
i.putExtras(b);
mCardIdAndBarCodeEditorLauncher.launch(i);
}
@@ -1405,7 +1434,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
@Override
public void onColorSelected(int dialogId, int color) {
// Save new colour
updateTempState(LoyaltyCardField.headerColor, color);
setLoyaltyCardHeaderColor(color);
// Unset image if set
mIconRemoved = true;
@@ -1496,11 +1525,11 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
switch (tempLoyaltyCardField) {
case validFrom:
formatDateField(LoyaltyCardEditActivity.this, validFromField, newDate);
updateTempState(LoyaltyCardField.validFrom, newDate);
setLoyaltyCardValidFrom(newDate);
break;
case expiry:
formatDateField(LoyaltyCardEditActivity.this, expiryField, newDate);
updateTempState(LoyaltyCardField.expiry, newDate);
setLoyaltyCardExpiry(newDate);
break;
default:
throw new AssertionError("Unexpected field: " + tempLoyaltyCardField);
@@ -1594,8 +1623,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
e.printStackTrace();
}
Log.i(TAG, "Set " + loyaltyCardId + " to " + cardId + " (update: " + updateLoyaltyCard + ")");
DBHelper.setLoyaltyCardGroups(mDatabase, loyaltyCardId, selectedGroups);
ShortcutHelper.updateShortcuts(this, DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId));
@@ -1693,10 +1720,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
}
private void generateBarcode() {
if (tempLoyaltyCard == null) {
return;
}
mTasks.flushTaskList(TaskHandler.TYPE.BARCODE, true, false, false);
String cardIdString = tempLoyaltyCard.barcodeId != null ? tempLoyaltyCard.barcodeId : tempLoyaltyCard.cardId;

View File

@@ -19,6 +19,7 @@ import android.text.method.DigitsKeyListener;
import android.text.style.ForegroundColorSpan;
import android.text.util.Linkify;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
@@ -97,9 +98,35 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
static final String STATE_IMAGEINDEX = "imageIndex";
static final String STATE_FULLSCREEN = "isFullscreen";
static final String BUNDLE_ID = "id";
static final String BUNDLE_CARDLIST = "cardList";
static final String BUNDLE_TRANSITION_RIGHT = "transition_right";
final private TaskHandler mTasks = new TaskHandler();
Runnable barcodeImageGenerationFinishedCallback;
private long initTime = System.currentTimeMillis();
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (settings.useVolumeKeysForNavigation()) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
// Navigate to the previous card
if (initTime < (System.currentTimeMillis() - 1000)) {
prevNextCard(false);
}
return true;
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
// Navigate to the next card
if (initTime < (System.currentTimeMillis() - 1000)) {
prevNextCard(true);
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
public void onMainImageTap() {
// If we're in fullscreen, leave fullscreen
if (isFullscreen) {
@@ -181,8 +208,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
private void extractIntentFields(Intent intent) {
final Bundle b = intent.getExtras();
loyaltyCardId = b != null ? b.getInt("id") : 0;
cardList = b != null ? b.getIntegerArrayList("cardList") : null;
loyaltyCardId = b != null ? b.getInt(BUNDLE_ID) : 0;
cardList = b != null ? b.getIntegerArrayList(BUNDLE_CARDLIST) : null;
Log.d(TAG, "View activity: id=" + loyaltyCardId);
}
@@ -208,7 +235,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
return;
}
int transitionRight = incomingIntentExtras.getInt("transition_right", -1);
int transitionRight = incomingIntentExtras.getInt(BUNDLE_TRANSITION_RIGHT, -1);
if (transitionRight == 1) {
// right side transition
overridePendingTransition(R.anim.slide_in_right, R.anim.slide_out_left);
@@ -572,8 +599,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
// Restart activity with new card id and index
Intent intent = getIntent();
Bundle b = intent.getExtras();
b.putInt("id", loyaltyCardId);
b.putInt("transition_right", transitionRight ? 1 : 0);
b.putInt(BUNDLE_ID, loyaltyCardId);
b.putInt(BUNDLE_TRANSITION_RIGHT, transitionRight ? 1 : 0);
intent.putExtras(b);
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

View File

@@ -426,15 +426,18 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
Utils.makeUserChooseBarcodeFromList(MainActivity.this, barcodeValuesList, new BarcodeValuesListDisambiguatorCallback() {
@Override
public void onUserChoseBarcode(BarcodeValues barcodeValues) {
Intent newIntent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
Bundle newBundle = new Bundle();
newBundle.putString(LoyaltyCardEditActivity.BUNDLE_BARCODETYPE, barcodeValues.format());
newBundle.putString(LoyaltyCardEditActivity.BUNDLE_CARDID, barcodeValues.content());
CatimaBarcode barcodeType = barcodeValues.format();
Intent intent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
Bundle bundle = new Bundle();
bundle.putString(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID, barcodeValues.content());
bundle.putString(LoyaltyCard.BUNDLE_LOYALTY_CARD_BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null);
bundle.putString(LoyaltyCard.BUNDLE_LOYALTY_CARD_BARCODE_ID, null);
if (group != null) {
newBundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, group);
bundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, group);
}
newIntent.putExtras(newBundle);
startActivity(newIntent);
intent.putExtras(bundle);
startActivity(intent);
}
@Override
@@ -781,14 +784,14 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
Intent intent = new Intent(this, LoyaltyCardViewActivity.class);
intent.setAction("");
final Bundle b = new Bundle();
b.putInt("id", loyaltyCard.id);
b.putInt(LoyaltyCardViewActivity.BUNDLE_ID, loyaltyCard.id);
ArrayList<Integer> cardList = new ArrayList<>();
for (int i = 0; i < mAdapter.getItemCount(); i++) {
cardList.add(mAdapter.getCard(i).id);
}
b.putIntegerArrayList("cardList", cardList);
b.putIntegerArrayList(LoyaltyCardViewActivity.BUNDLE_CARDLIST, cardList);
intent.putExtras(b);
startActivity(intent);

View File

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

View File

@@ -24,6 +24,8 @@ import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;
@@ -42,6 +44,8 @@ import com.journeyapps.barcodescanner.BarcodeResult;
import com.journeyapps.barcodescanner.CaptureManager;
import com.journeyapps.barcodescanner.DecoratedBarcodeView;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import protect.card_locker.databinding.CustomBarcodeScannerBinding;
@@ -82,7 +86,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
private void extractIntentFields(Intent intent) {
final Bundle b = intent.getExtras();
cardId = b != null ? b.getString(LoyaltyCardEditActivity.BUNDLE_CARDID) : null;
cardId = b != null ? b.getString(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID) : null;
addGroup = b != null ? b.getString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP) : null;
Log.d(TAG, "Scan activity: id=" + cardId);
}
@@ -106,15 +110,40 @@ public class ScanActivity extends CatimaAppCompatActivity {
customBarcodeScannerBinding.fabOtherOptions.setOnClickListener(view -> {
setScannerActive(false);
ArrayList<HashMap<String, Object>> list = new ArrayList<>();
String[] texts = new String[]{
getString(R.string.addWithoutBarcode),
getString(R.string.addManually),
getString(R.string.addFromImage),
getString(R.string.addFromPdfFile),
};
Object[] icons = new Object[]{
R.drawable.baseline_block_24,
R.drawable.ic_edit,
R.drawable.baseline_image_24,
R.drawable.baseline_picture_as_pdf_24,
};
String[] columns = new String[]{"text", "icon"};
for (int i = 0; i < texts.length; i++) {
HashMap<String, Object> map = new HashMap<>();
map.put(columns[0], texts[i]);
map.put(columns[1], icons[i]);
list.add(map);
}
ListAdapter adapter = new SimpleAdapter(
ScanActivity.this,
list,
R.layout.alertdialog_row_with_icon,
columns,
new int[]{R.id.textView, R.id.imageView}
);
MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(ScanActivity.this);
builder.setTitle(getString(R.string.add_a_card_in_a_different_way));
builder.setItems(
new CharSequence[]{
getString(R.string.addWithoutBarcode),
getString(R.string.addManually),
getString(R.string.addFromImage),
getString(R.string.addFromPdfFile)
},
builder.setAdapter(
adapter,
(dialogInterface, i) -> {
switch (i) {
case 0:
@@ -291,7 +320,9 @@ public class ScanActivity extends CatimaAppCompatActivity {
Utils.makeUserChooseBarcodeFromList(this, barcodeValuesList, new BarcodeValuesListDisambiguatorCallback() {
@Override
public void onUserChoseBarcode(BarcodeValues barcodeValues) {
returnResult(barcodeValues.content(), barcodeValues.format());
CatimaBarcode barcodeType = barcodeValues.format();
returnResult(barcodeValues.content(), barcodeType != null ? barcodeType.name() : null);
}
@Override
@@ -338,7 +369,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
// Buttons
builder.setPositiveButton(getString(R.string.ok), (dialog, which) -> {
returnResult(input.getText().toString(), "");
returnResult(input.getText().toString(), null);
});
builder.setNegativeButton(getString(R.string.cancel), (dialog, which) -> dialog.cancel());
AlertDialog dialog = builder.create();
@@ -373,7 +404,7 @@ public class ScanActivity extends CatimaAppCompatActivity {
Intent i = new Intent(getApplicationContext(), BarcodeSelectorActivity.class);
if (cardId != null) {
final Bundle b = new Bundle();
b.putString("initialCardId", cardId);
b.putString(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID, cardId);
i.putExtras(b);
}
manualAddLauncher.launch(i);

View File

@@ -133,8 +133,7 @@ class ShortcutHelper {
// one replace it.
intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_SINGLE_TOP);
final Bundle bundle = new Bundle();
bundle.putInt("id", loyaltyCard.id);
bundle.putBoolean("view", true);
bundle.putInt(LoyaltyCardViewActivity.BUNDLE_ID, loyaltyCard.id);
intent.putExtras(bundle);
Bitmap iconBitmap = Utils.retrieveCardImage(context, loyaltyCard.id, ImageLocationType.icon);

View File

@@ -268,7 +268,7 @@ public class Utils {
Log.i(TAG, "Read barcode id: " + contents);
Log.i(TAG, "Read format: " + format);
return Collections.singletonList(new BarcodeValues(format, contents));
return Collections.singletonList(new BarcodeValues(format != null ? CatimaBarcode.fromName(format) : null, contents));
}
throw new UnsupportedOperationException("Unknown request code for parseSetBarcodeActivityResult");
@@ -323,7 +323,7 @@ public class Utils {
Log.i(TAG, "Read barcode id: " + barcodeResult.getText());
Log.i(TAG, "Read format: " + barcodeResult.getBarcodeFormat().name());
barcodeValuesList.add(new BarcodeValues(barcodeResult.getBarcodeFormat().name(), barcodeResult.getText()));
barcodeValuesList.add(new BarcodeValues(CatimaBarcode.fromBarcode(barcodeResult.getBarcodeFormat()), barcodeResult.getText()));
}
return barcodeValuesList;
@@ -344,7 +344,7 @@ public class Utils {
CharSequence[] barcodeDescriptions = new CharSequence[barcodeValuesList.size()];
for (int i = 0; i < barcodeValuesList.size(); i++) {
BarcodeValues barcodeValues = barcodeValuesList.get(i);
CatimaBarcode catimaBarcode = CatimaBarcode.fromName(barcodeValues.format());
CatimaBarcode catimaBarcode = barcodeValues.format();
String barcodeContent = barcodeValues.content();
// Shorten overly long barcodes
@@ -353,9 +353,9 @@ public class Utils {
}
if (barcodeValues.note() != null) {
barcodeDescriptions[i] = String.format("%s: %s (%s)", barcodeValues.note(), catimaBarcode.prettyName(), barcodeContent);
barcodeDescriptions[i] = String.format("%s: %s (%s)", barcodeValues.note(), catimaBarcode != null ? catimaBarcode.prettyName() : context.getString(R.string.noBarcode), barcodeContent);
} else {
barcodeDescriptions[i] = String.format("%s (%s)", catimaBarcode.prettyName(), barcodeContent);
barcodeDescriptions[i] = String.format("%s (%s)", catimaBarcode != null ? catimaBarcode.prettyName() : context.getString(R.string.noBarcode), barcodeContent);
}
}

View File

@@ -64,7 +64,7 @@ public class CatimaExporter implements Exporter {
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(database);
while (cardCursor.moveToNext()) {
// For each card
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cardCursor);
LoyaltyCard card = LoyaltyCard.fromCursor(cardCursor);
// For each image
for (ImageLocationType imageLocationType : ImageLocationType.values()) {
@@ -142,7 +142,7 @@ public class CatimaExporter implements Exporter {
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(database);
while (cardCursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cardCursor);
LoyaltyCard card = LoyaltyCard.fromCursor(cardCursor);
printer.printRecord(card.id,
card.store,
@@ -176,7 +176,7 @@ public class CatimaExporter implements Exporter {
Cursor cardCursor2 = DBHelper.getLoyaltyCardCursor(database);
while (cardCursor2.moveToNext()) {
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cardCursor2);
LoyaltyCard card = LoyaltyCard.fromCursor(cardCursor2);
for (Group group : DBHelper.getLoyaltyCardGroups(database, card.id)) {
printer.printRecord(card.id, group._id);

View File

@@ -91,4 +91,8 @@ public class Settings {
public String getColor() {
return getString(R.string.setting_key_theme_color, mContext.getResources().getString(R.string.settings_key_system_theme));
}
public boolean useVolumeKeysForNavigation() {
return getBoolean(R.string.settings_key_use_volume_keys_navigation, false);
}
}

View File

@@ -0,0 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="?attr/colorControlNormal" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM4,12c0,-4.42 3.58,-8 8,-8 1.85,0 3.55,0.63 4.9,1.69L5.69,16.9C4.63,15.55 4,13.85 4,12zM12,20c-1.85,0 -3.55,-0.63 -4.9,-1.69L18.31,7.1C19.37,8.45 20,10.15 20,12c0,4.42 -3.58,8 -8,8z"/>
</vector>

View File

@@ -0,0 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="?attr/colorControlNormal" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M21,19V5c0,-1.1 -0.9,-2 -2,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2zM8.5,13.5l2.5,3.01L14.5,12l4.5,6H5l3.5,-4.5z"/>
</vector>

View File

@@ -0,0 +1,5 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="24dp" android:tint="?attr/colorControlNormal" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp">
<path android:fillColor="@android:color/white" android:pathData="M20,2L8,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM11.5,9.5c0,0.83 -0.67,1.5 -1.5,1.5L9,11v2L7.5,13L7.5,7L10,7c0.83,0 1.5,0.67 1.5,1.5v1zM16.5,11.5c0,0.83 -0.67,1.5 -1.5,1.5h-2.5L12.5,7L15,7c0.83,0 1.5,0.67 1.5,1.5v3zM20.5,8.5L19,8.5v1h1.5L20.5,11L19,11v2h-1.5L17.5,7h3v1.5zM9,9.5h1v-1L9,8.5v1zM4,6L2,6v14c0,1.1 0.9,2 2,2h14v-2L4,20L4,6zM14,11.5h1v-3h-1v3z"/>
</vector>

View File

@@ -46,7 +46,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:padding="2dp"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:text="@string/version_history"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
@@ -56,7 +57,8 @@
android:id="@+id/version_history_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="2dp"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/version_history_main" />
@@ -87,7 +89,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:padding="2dp"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:text="@string/credits"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
@@ -97,7 +100,8 @@
android:id="@+id/credits_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="2dp"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/credits_main" />
@@ -128,7 +132,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:padding="2dp"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:text="@string/help_translate_this_app"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
@@ -138,7 +143,8 @@
android:id="@+id/translate_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="2dp"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:text="@string/translate_platform"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
@@ -170,7 +176,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:padding="2dp"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:text="@string/license"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
@@ -180,7 +187,8 @@
android:id="@+id/license_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="2dp"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:text="@string/app_license"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
@@ -212,7 +220,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:padding="2dp"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:text="@string/source_repository"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
@@ -222,7 +231,8 @@
android:id="@+id/repo_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="2dp"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:text="@string/on_github"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
@@ -254,7 +264,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:padding="2dp"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:text="@string/privacy_policy"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
@@ -264,7 +275,8 @@
android:id="@+id/privacy_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="2dp"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:text="@string/and_data_usage"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
@@ -296,7 +308,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:padding="2dp"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:text="@string/donate"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
@@ -329,7 +342,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:padding="2dp"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:text="@string/rate_this_app"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
@@ -339,7 +353,8 @@
android:id="@+id/rate_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="2dp"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:text="@string/on_google_play"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
@@ -371,7 +386,8 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:padding="2dp"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:text="@string/report_error"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
@@ -383,9 +399,10 @@
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/report_error_main"
app:layout_constraintStart_toStartOf="parent"
android:paddingStart="2dp"
android:paddingEnd="30dp"
android:textSize="16sp"
android:text="@string/on_github"
android:padding="2dp"/>
android:text="@string/on_github" />
<TextView
android:importantForAccessibility="no"

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="24dp"
android:layout_marginStart="24dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_baseline_archive_24" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@+id/imageView"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -13,20 +13,21 @@ mondstern
IllusiveMan196
Altonss
Michael Moroni
GM
Eric
GM
Petr Novák
laralem
Joel A
Taco
大王叫我来巡山
Taco
pfaffenrodt
Scrambled777
Aayush Gupta
Scrambled777
HudobniVolk
Nyatsuki
Giovanni Donisi
Jiri Grönroos
Priit Jõerüüt
Samantaz Fox
Cliff Heraldo
Sergio Paredes
@@ -47,7 +48,6 @@ Silvério Santos
waffshappen
Ziad OUALHADJ
Robin Liu
Priit Jõerüüt
Denis Shilin
しいたけ
Alexander Ivanov
@@ -56,10 +56,12 @@ Viet Nguyen Hoang
stavpup
ehrt74
Virginie
Michael Gangolf
rudy3
Kim Seohyun
Govind S Nair
Freddo espresso
arshbeerSingh
Tim Trek
MisterCosta96
arshbeerSingh
Freddo espresso
Govind S Nair
Kim Seohyun
Renko
rudy3
Michael Gangolf

View File

@@ -75,7 +75,7 @@
<string name="groups">Списъци</string>
<string name="enter_group_name">Въведете име на списъка</string>
<string name="intent_import_card_from_url_share_text">Искам да споделя тази карта с вас</string>
<string name="settings_display_barcode_max_brightness">Максимална яркост при видим щрихкод</string>
<string name="settings_display_barcode_max_brightness">Максимална яркост на екрана</string>
<string name="settings_keep_screen_on">Без изключване на екрана</string>
<string name="settings_disable_lockscreen_while_viewing_card">Без заключване на екрана</string>
<string name="settings_dark_theme">Тъмна</string>
@@ -203,7 +203,7 @@
</plurals>
<string name="settings_oled_dark">Черен фон за тъмната тема</string>
<string name="include_if_asking_support">Ако искате да потърсите поддръжка, включете следната информация:</string>
<string name="settings_card_orientation">Завъртане на щрихкода</string>
<string name="settings_card_orientation">Завъртане на екрана</string>
<string name="settings_follow_system_orientation">Според системата</string>
<string name="settings_portrait_orientation">Портрет</string>
<string name="settings_landscape_orientation">Пейзаж</string>
@@ -258,7 +258,7 @@
<string name="settings_disable_lockscreen_while_viewing_card_summary">Без заключване на екрана при преглед на карта</string>
<string name="settings_allow_content_provider_read_summary">Приложенията ще искат разрешение, за да получат достъп</string>
<string name="settings_oled_dark_summary">Намалява разхода на батерия от OLED дисплеи</string>
<string name="settings_category_title_cards">Карти</string>
<string name="settings_category_title_cards">Изглед с карти</string>
<string name="settings_category_title_general">Общи</string>
<string name="settings_category_title_privacy">Поверителност</string>
<string name="settings_keep_screen_on_summary">Спира автоматичното заключване на екрана при преглед на карти</string>
@@ -292,4 +292,6 @@
<string name="exportCancelled">Изнасянето е спряно</string>
<string name="useFrontImage">Използване на предната страна</string>
<string name="useBackImage">Използване на задната страна</string>
<string name="settings_use_volume_keys_navigation">Сменяне на картите с бутоните за звука</string>
<string name="settings_use_volume_keys_navigation_summary">Бутоните за силата на звука сменят видимата карта</string>
</resources>

View File

@@ -75,4 +75,4 @@
<string name="exportFailedTitle">রপ্তানি ব্যর্থ</string>
<string name="settings_card_orientation">বারকোড অভিমুখ (ওরিয়েন্টেশন)</string>
<string name="app_name">ক্যাটিমা</string>
</resources>
</resources>

View File

@@ -46,7 +46,7 @@
<string name="selectBarcodeTitle">Barcode auswählen</string>
<string name="thumbnailDescription">Vorschaubild</string>
<string name="settings">Einstellungen</string>
<string name="settings_display_barcode_max_brightness">Displayhelligkeit in der Barcodeansicht erhöhen</string>
<string name="settings_display_barcode_max_brightness">Displayhelligkeit erhöhen</string>
<string name="exportSuccessful">Daten exportiert</string>
<string name="importSuccessful">Daten importiert</string>
<string name="intent_import_card_from_url_share_text">Ich würde gerne diese Karte mit dir teilen</string>
@@ -207,7 +207,7 @@
<string name="settings_portrait_orientation">Hochformat</string>
<string name="duplicateCard">Duplizieren</string>
<string name="unarchive">Archivierung aufheben</string>
<string name="settings_card_orientation">Barcode-Ausrichtung</string>
<string name="settings_card_orientation">Bildschirm-Ausrichtung</string>
<string name="unarchived">Karte aus dem Archiv entfernt</string>
<string name="archive">Archivieren</string>
<string name="archived">Karte archiviert</string>
@@ -258,7 +258,7 @@
<string name="settings_keep_screen_on_summary">Deaktiviert die Bildschirmzeitüberschreitung beim Anzeigen einer Karte</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Deaktiviert die Bildschirmsperre während der Anzeige einer Karte</string>
<string name="settings_oled_dark_summary">Reduziert den Batterieverbrauch bei OLED-Displays</string>
<string name="settings_category_title_cards">Karten</string>
<string name="settings_category_title_cards">Kartenansicht</string>
<string name="settings_category_title_privacy">Datenschutz</string>
<string name="settings_category_title_general">Allgemein</string>
<string name="view_online">Online anzeigen</string>
@@ -292,4 +292,6 @@
<string name="importCancelled">Import abgebrochen</string>
<string name="useFrontImage">Vorderseite verwenden</string>
<string name="useBackImage">Rückseite verwenden</string>
<string name="settings_use_volume_keys_navigation">Karten mit Lautstärketasten wechseln</string>
<string name="settings_use_volume_keys_navigation_summary">Benutzen Sie die Lautstärketasten, um zu ändern, welche Karte angezeigt wird</string>
</resources>

View File

@@ -46,10 +46,10 @@
<string name="settings_dark_theme">Tume kujundus</string>
<string name="thumbnailDescription">Pisipilt</string>
<string name="settings_theme">Kujundus</string>
<string name="settings_card_orientation">Triipkoodi suund</string>
<string name="settings_card_orientation">Ekraanipaigutuse suund</string>
<string name="settings_follow_sensor_orientation">Alati pööra (eira süsteemset paigutust)</string>
<string name="settings_landscape_orientation">Rõhtvaade</string>
<string name="settings_display_barcode_max_brightness">Eredam triipkoodivaade</string>
<string name="settings_display_barcode_max_brightness">Tee ekraan eredamaks</string>
<string name="app_license">Copyleft-tüüpi autoriõiguste alusel loodud avatud lähtekoodiga tarkvara, mis on avaldatud GPLv3+ all</string>
<string name="settings_keep_screen_on">Hoia ekraan sisselülitatuna</string>
<string name="cardShortcut">Kaardi kiirviide</string>
@@ -63,7 +63,7 @@
<string name="importSuccessfulTitle">Imporditud</string>
<string name="importFailedTitle">Import ei õnnestunud</string>
<string name="exportSuccessfulTitle">Eksporditud</string>
<string name="exportFailedTitle">Eksportimine ei õnenstunud</string>
<string name="exportFailedTitle">Eksportimine ei õnnestunud</string>
<string name="exportFailed">Eksportimist ei õnnestunud teha</string>
<string name="importing">Impordime…</string>
<string name="exporting">Ekspordime…</string>
@@ -120,8 +120,7 @@
<string name="expiryDate">Aegumise kuupäev</string>
<string name="never">Mitte kunagi</string>
<string name="showMoreInfo">Näita teavet</string>
<string name="importLoyaltyCardKeychainMessage">Importimiseks vali oma <i>LoyaltyCardKeychain.csv</i> Loyalty Card Keychaini ekspordifail.
\nSellise faili saad teha rakendusest Loyalty Card Keychain valides menüüst Import/Eksport valiku Eksport.</string>
<string name="importLoyaltyCardKeychainMessage">Importimiseks vali oma <i>LoyaltyCardKeychain.csv</i> Loyalty Card Keychaini ekspordifail. \nSellise faili saad teha rakendusest Loyalty Card Keychain valides menüüst Import/Eksport valiku Eksport.</string>
<string name="unsupportedBarcodeType">Sellist triipkoodi tüüpi pole veel võimalik kuvada, aga mõnes hilisemas rakenduse versioonis võib see võimalik olla.</string>
<string name="wrongValueForBarcodeType">Väärtus ei sobi selle triipkoodi tüübiga</string>
<string name="passwordRequired">Palun sisesta salasõna</string>
@@ -182,19 +181,15 @@
<string name="privacy_policy">Privaatsuspoliitika</string>
<string name="accept">Nõustu</string>
<string name="importCatima">Impordi Catima varukoopiast</string>
<string name="importCatimaMessage">Importimiseks vali varem tehtud <i>catima.zip</i> Catima ekspordifail.
\nSellise faili saad luua mõnes teises seadmes olevast Catima rakendusest Import/Eksport menüüst valikust Eksport.</string>
<string name="importCatimaMessage">Importimiseks vali varem tehtud <i>catima.zip</i> Catima ekspordifail. \nSellise faili saad luua mõnes teises seadmes olevast Catima rakendusest Import/Eksport menüüst valikust Eksport.</string>
<string name="importFidme">Impordi FidMe varukoopiast</string>
<string name="importFidmeMessage">Importimiseks vali oma <i>fidme-export-request-xxxxxx.zip</i>, mille oled FidMe rakendusest eksportinud. Peale importi määra triipkoodi tüübid käsistsi.
\nSellise faili loomiseks vali oma FidMe profiilist eelistuse Andmekaitse-Paki lahti.</string>
<string name="importFidmeMessage">Importimiseks vali oma <i>fidme-export-request-xxxxxx.zip</i>, mille oled FidMe rakendusest eksportinud. Peale importi määra triipkoodi tüübid käsistsi. \nSellise faili loomiseks vali oma FidMe profiilist eelistuse Andmekaitse-Paki lahti.</string>
<string name="importLoyaltyCardKeychain">Impordi rakendusest Loyalty Card Keychain</string>
<string name="importStocard">Impordi Stocardist</string>
<string name="importStocardMessage">Importimiseks vali oma <i>***.zip</i> Stocardi ekspordifail.
\nSellise faili saad saates kirja aadressile support@stocardapp.com ning küsides oma andmeid.</string>
<string name="importStocardMessage">Importimiseks vali oma <i>***.zip</i> Stocardi ekspordifail. \nSellise faili saad saates kirja aadressile support@stocardapp.com ning küsides oma andmeid.</string>
<string name="chooseImportType">Importimise valikud</string>
<string name="importVoucherVault">Impordi rakendusest Voucher Vault</string>
<string name="importVoucherVaultMessage">Importimiseks vali oma <i>vouchervault.json</i> Voucher Vaulti ekspordifail.
\nSellise faili saad teha rakenduses Voucher Vault menüüvalikust Eksport.</string>
<string name="importVoucherVaultMessage">Importimiseks vali oma <i>vouchervault.json</i> Voucher Vaulti ekspordifail. \nSellise faili saad teha rakenduses Voucher Vault menüüvalikust Eksport.</string>
<string name="barcodeId">Triipkoodi väärtus</string>
<string name="sameAsCardId">Sama, kui ID</string>
<string name="setBarcodeId">Sisesta triipkoodi väärtus</string>
@@ -266,7 +261,7 @@
<string name="noCameraFoundGuideText">Sinu nutiseadmed ei tundu olema kaamerat. Kui ta siiski on olemas, siis esmalt proovi, kas taaskäivitamine aitab. Lisaks võid nupust „Veel“ leida muid valikuid triipkoodi lisamiseks.</string>
<string name="action_more_options">Lisavalikud</string>
<string name="importCancelled">Import on katkestatud</string>
<string name="settings_category_title_cards">Kaardid</string>
<string name="settings_category_title_cards">Vahekaartide vaade</string>
<string name="settings_category_title_general">Üldised seadistused</string>
<string name="settings_category_title_privacy">Privaatsus</string>
<string name="action_display_options">Ekraani valikud</string>
@@ -292,4 +287,6 @@
<string name="exportCancelled">Eksport on tühistatud</string>
<string name="useFrontImage">Kasuta esikülje pilti</string>
<string name="useBackImage">Kasuta tagakülje pilti</string>
<string name="settings_use_volume_keys_navigation">Vaheta kaarte helivaljuse nuppudega</string>
<string name="settings_use_volume_keys_navigation_summary">Vaheta kuvatavaid vahekaarte helivaljuse nuppudega</string>
</resources>

View File

@@ -62,7 +62,7 @@
<string name="intent_import_card_from_url_share_text">Haluan jakaa kortin kanssasi</string>
<string name="settings_disable_lockscreen_while_viewing_card">Estä näytön lukitus</string>
<string name="settings_keep_screen_on">Pidä näyttö päällä</string>
<string name="settings_display_barcode_max_brightness">Kirkasta viivakoodinäkymää</string>
<string name="settings_display_barcode_max_brightness">Kirkasta näyttöä</string>
<string name="settings_dark_theme">Tumma</string>
<string name="settings_light_theme">Vaalea</string>
<string name="settings_system_theme">Järjestelmän oletus</string>
@@ -210,7 +210,7 @@
<string name="unarchive">Poista arkistosta</string>
<string name="archived">Kortti arkistoitu</string>
<string name="failedLaunchingPhotoPicker">Tuettua galleriasovellusta ei löytynyt</string>
<string name="settings_card_orientation">Viivakoodin suuntaus</string>
<string name="settings_card_orientation">Näytön suunta</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>
@@ -260,7 +260,7 @@
<string name="show_note">Näytä huomautus</string>
<string name="show_balance">Näytä saldo</string>
<string name="show_validity">Näytä kelpoisuus</string>
<string name="settings_category_title_cards">Kortit</string>
<string name="settings_category_title_cards">Korttinäkymä</string>
<string name="settings_category_title_general">Yleiset</string>
<string name="action_display_options">Näyttövalinnat</string>
<string name="app_copyright_short">Tekijänoikeus © Sylvia van Os ja avustajat</string>
@@ -287,4 +287,11 @@
<string name="failedLaunchingFileManager">Tuettua tiedostonhallintasovellusta ei löytynyt</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Mitä löytyneistä viivakoodeista haluat käyttää?</string>
<string name="pageWithNumber">Sivu <xliff:g>%d</xliff:g></string>
<string name="noCameraFoundGuideText">Laitteessasi ei näytä olevan kameraa. Jos näin käy, yritä käynnistää laite uudelleen. Muussa tapauksessa käytä alla olevaa Lisää vaihtoehtoja -painiketta lisätäksesi viivakoodin toisella tavalla.</string>
<string name="importCancelled">Tuonti peruttu</string>
<string name="exportCancelled">Vienti peruttu</string>
<string name="useBackImage">Käytä takakuvaa</string>
<string name="useFrontImage">Käytä etukuvaa</string>
<string name="settings_use_volume_keys_navigation">Vaihtele korttien välillä äänenvoimakkuuspainikkeilla</string>
<string name="settings_use_volume_keys_navigation_summary">Käytä äänenvoimakkuuspainikkeita vaihtaaksesi näytettävän kortin</string>
</resources>

View File

@@ -42,7 +42,7 @@
<string name="selectBarcodeTitle">Choisissez le code-barres</string>
<string name="thumbnailDescription">Miniature</string>
<string name="settings">Paramètres</string>
<string name="settings_display_barcode_max_brightness">Augmenter la luminosité du code-barres</string>
<string name="settings_display_barcode_max_brightness">Augmenter la luminosité</string>
<string name="exportSuccessful">Données exportées</string>
<string name="importSuccessful">Données importées</string>
<string name="intent_import_card_from_url_share_text">Je veux partager une carte avec toi</string>
@@ -207,7 +207,7 @@
</plurals>
<string name="settings_oled_dark">Fond noir pour le thème sombre</string>
<string name="include_if_asking_support">Si vous voulez demander de l\'aide, incluez les informations suivantes :</string>
<string name="settings_card_orientation">Orientation du code-barres</string>
<string name="settings_card_orientation">Orientation de l\'écran</string>
<string name="settings_follow_system_orientation">Suivre le système</string>
<string name="settings_portrait_orientation">Portrait</string>
<string name="settings_landscape_orientation">Paysage</string>
@@ -263,7 +263,7 @@
<string name="settings_display_barcode_max_brightness_summary">Nécessaire au fonctionnement de certains scanneurs</string>
<string name="settings_keep_screen_on_summary">Désactive la temporisation de l\'écran lors de la visualisation d\'une carte</string>
<string name="settings_oled_dark_summary">Réduit l\'utilisation de la batterie sur les écrans OLED</string>
<string name="settings_category_title_cards">Cartes</string>
<string name="settings_category_title_cards">Vue carte</string>
<string name="settings_category_title_general">Généraux</string>
<string name="settings_category_title_privacy">Confidentialité</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Désactive le verrouillage de l\'écran pendant la visualisation d\'une carte</string>
@@ -298,4 +298,6 @@
<string name="importCancelled">Importation annulée</string>
<string name="useFrontImage">Utiliser l\'image de face</string>
<string name="useBackImage">Utiliser l\'image arrière</string>
<string name="settings_use_volume_keys_navigation">Changer de cartes avec les boutons de volume</string>
<string name="settings_use_volume_keys_navigation_summary">Utilisez les boutons de volume pour changer la carte affichée</string>
</resources>

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>
<string name="action_add">הוספה</string>
<string name="cardId">מזהה כרטיס</string>
<string name="cancel">ביטול</string>
@@ -61,4 +61,12 @@
<item quantity="many">מעט</item>
<item quantity="other">אחר</item>
</plurals>
<string name="importCancelled">ייבוא בוטל</string>
<string name="exportCancelled">ייצוא בוטל</string>
<string name="addFromPdfFile">בחר קובץ PDF</string>
<string name="errorReadingFile">לא ניתן לקרוא את הקובץ</string>
<string name="failedLaunchingFileManager">לא נמצא קובץ ניהול נתמך</string>
<string name="multipleBarcodesFoundPleaseChooseOne">באיזה מהברקודים שנמצאו אתה רוצה להשתמש?</string>
<string name="useFrontImage">השתמש בתמונה קדמית</string>
<string name="useBackImage">השתמש בתמונה אחורית</string>
</resources>

View File

@@ -282,4 +282,8 @@
<string name="amountParsingFailed">Jumlah tidak valid</string>
<string name="add_manually_warning_message">Untuk beberapa toko, nilai barcode berbeda dengan nomor yang tertulis di kartu. Oleh karena itu, memasukkan barcode secara manual mungkin tidak selalu berhasil. Sangat disarankan untuk memindai barcode dengan kamera anda. Apakah anda masih ingin melanjutkan?</string>
<string name="noCameraFoundGuideText">Perangkat Anda sepertinya tidak memiliki kamera. Jika iya, coba mulai ulang perangkat. Jika tidak, gunakan tombol Opsi lainnya di bawah untuk menambahkan barcode dengan cara lain.</string>
<string name="importCancelled">Impor dibatalkan</string>
<string name="exportCancelled">Ekspor dibatalkan</string>
<string name="useFrontImage">Gunakan gambar depan</string>
<string name="useBackImage">Gunakan gambar belakang</string>
</resources>

View File

@@ -86,4 +86,4 @@
<string name="nextCard">Næsta</string>
<string name="settings_blue_theme">Blár</string>
<string name="settings_sky_blue_theme">Himinblár</string>
</resources>
</resources>

View File

@@ -50,7 +50,7 @@
<string name="settings_system_theme">Sistema</string>
<string name="settings_light_theme">Chiaro</string>
<string name="settings_dark_theme">Scuro</string>
<string name="settings_display_barcode_max_brightness">Aumenta luminosità dello schermo quando viene aperto un codice a barre</string>
<string name="settings_display_barcode_max_brightness">Aumenta la luminosità</string>
<string name="intent_import_card_from_url_share_text">Voglio condividere una carta fedeltà con te</string>
<string name="exportSuccessful">Dati della carta esportati</string>
<string name="importSuccessful">Dati importati</string>
@@ -207,7 +207,7 @@
</plurals>
<string name="settings_oled_dark">Sfondo nero puro per il tema scuro</string>
<string name="include_if_asking_support">Se vuoi richiedere supporto, includi le seguenti informazioni:</string>
<string name="settings_card_orientation">Orientamento del codice a barre</string>
<string name="settings_card_orientation">Orientamento dello schermo</string>
<string name="settings_follow_system_orientation">Segui il sistema</string>
<string name="duplicateCard">Duplica</string>
<string name="archive">Archivia</string>
@@ -264,7 +264,7 @@
<string name="settings_keep_screen_on_summary">Disattiva il timeout dello schermo durante la visualizzazione di una carta</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Disattiva il blocco dello schermo durante la visualizzazione di una carta</string>
<string name="settings_oled_dark_summary">Riduce il consumo della batteria sui display OLED</string>
<string name="settings_category_title_cards">Carte</string>
<string name="settings_category_title_cards">Vista carta</string>
<string name="settings_category_title_general">Generali</string>
<string name="settings_category_title_privacy">Privacy</string>
<string name="app_copyright_short">Copyright © Sylvia van Os e contributori</string>
@@ -298,4 +298,6 @@
<string name="exportCancelled">Esportazione annullata</string>
<string name="useBackImage">Usa l\'immagine posteriore</string>
<string name="useFrontImage">Usa l\'immagine anteriore</string>
<string name="settings_use_volume_keys_navigation">Cambia carte con i pulsanti di volume</string>
<string name="settings_use_volume_keys_navigation_summary">Utilizza i pulsanti di volume per modificare la carta visualizzata</string>
</resources>

View File

@@ -17,4 +17,35 @@
</plurals>
<string name="note">ಸೂಚನೆ</string>
<string name="action_add">ಸೇರಿಸಿ</string>
<string name="addFromImage">ಗ್ಯಾಲರಿಯಿಂದ ಚಿತ್ರವನ್ನು ಆಯ್ಕೆಮಾಡಿ</string>
<string name="balance">ಸಮತೋಲನ</string>
<string name="balanceParsingFailed">ಅಮಾನ್ಯ ಬ್ಯಾಲೆನ್ಸ್</string>
<string name="chooseImportType">ನಿಂದ ಡೇಟಾವನ್ನು ಆಮದು ಮಾಡಿ</string>
<string name="currency">ಕರೆನ್ಸಿ</string>
<string name="action_display_options">ಪ್ರದರ್ಶನ ಆಯ್ಕೆಗಳು</string>
<string name="add_manually_warning_title">ಸ್ಕ್ಯಾನಿಂಗ್ ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ</string>
<string name="cameraPermissionDeniedTitle">ಕ್ಯಾಮರಾವನ್ನು ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</string>
<string name="addManually">ಬಾರ್ಕೋಡ್ ಅನ್ನು ಹಸ್ತಚಾಲಿತವಾಗಿ ನಮೂದಿಸಿ</string>
<string name="card">ಕಾರ್ಡ್</string>
<string name="chooseExpiryDate">ಮುಕ್ತಾಯ ದಿನಾಂಕವನ್ನು ಆರಿಸಿ</string>
<string name="barcodeId">ಬಾರ್ಕೋಡ್ ಮೌಲ್ಯ</string>
<string name="backImageDescription">ಹಿಂದಿನ ಚಿತ್ರ</string>
<string name="credits">ಸಾಲಗಳು</string>
<string name="and_data_usage">ಮತ್ತು ಡೇಟಾ ಬಳಕೆ</string>
<string name="anyDate">ಯಾವುದೇ ದಿನಾಂಕ</string>
<string name="card_id_must_not_be_empty">ಕಾರ್ಡ್ ಐಡಿ ಖಾಲಿಯಾಗಿರಬಾರದು</string>
<string name="donate">ದಾನ ಮಾಡಿ</string>
<string name="action_more_options">ಹೆಚ್ಚಿನ ಆಯ್ಕೆಗಳು</string>
<string name="add_a_card_in_a_different_way">ಬೇರೆ ರೀತಿಯಲ್ಲಿ ಕಾರ್ಡ್ ಸೇರಿಸಿ</string>
<string name="barcodeLongPressMessage">ಗ್ಯಾಲರಿ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ ಚಿತ್ರಗಳನ್ನು ಮಾತ್ರ ತೆರೆಯಬಹುದು</string>
<string name="all">ಎಲ್ಲವೂ</string>
<string name="chooseValidFromDate">ದಿನಾಂಕದಿಂದ ಮಾನ್ಯವಾಗಿ ಆಯ್ಕೆಮಾಡಿ</string>
<string name="delete">ಅಳಿಸಿ</string>
<string name="cardShortcut">ಕಾರ್ಡ್ ಶಾರ್ಟ್‌ಕಟ್</string>
<string name="addCardTitle">ಕಾರ್ಡ್ ಸೇರಿಸಿ</string>
<string name="about">ಸುಮಾರು</string>
<string name="cameraPermissionRequired">ಈ ಕ್ರಿಯೆಗೆ ಕ್ಯಾಮರಾವನ್ನು ಪ್ರವೇಶಿಸಲು ಅನುಮತಿ ಅಗತ್ಯವಿದೆ…</string>
<string name="amountParsingFailed">ಅಮಾನ್ಯ ಮೊತ್ತ</string>
<string name="accept">ಸ್ವೀಕರಿಸಿ</string>
<string name="confirm">ದೃಢೀಕರಿಸಿ</string>
</resources>

View File

@@ -218,7 +218,7 @@
<string name="unarchive">Išarchyvuoti</string>
<string name="archived">Kortelė archyvuota</string>
<string name="unarchived">Kortelė išarchyvuota</string>
<string name="updateBalanceTitle">Kiek išleidote?</string>
<string name="updateBalanceTitle">Kiek išleidote arba gavote?</string>
<string name="updateBalanceHint">Įveskite sumą</string>
<string name="currentBalanceSentence">Dabartinis likutis: <xliff:g>%s</xliff:g></string>
<string name="newBalanceSentence">Naujas balansas: <xliff:g>%s</xliff:g></string>
@@ -252,4 +252,50 @@
<string name="switchToFrontImage">Perjungti į priekinį vaizdą</string>
<string name="openFrontImageInGalleryApp">Atidarykite priekinį vaizdą galerijos programėlėje</string>
<string name="donate">Aukoti</string>
<string name="settings_follow_sensor_orientation">Visada sukti (nekreipiant dėmesio į sistemos nustatymus)</string>
<string name="settings_keep_screen_on_summary">Išjungti ekrano užmigdymą kol peržiūrite kortelę</string>
<string name="manually_enter_barcode_instructions">Įveskite ID numerį arba tekstą ant jūsų kortelės ir paspauskite brūkšninį kodą, kuris atrodo kaip ant jūsų kortelės.</string>
<string name="addWithoutBarcode">Pridėti kortelę be brūkšninio kodo</string>
<string name="settings_oled_dark_summary">Umažina baterijos naudojimą OLED ekranuose</string>
<string name="show_note">Rodyti nota</string>
<string name="show_balance">Parodyti balansą</string>
<string name="view_online">Rodyti internete</string>
<string name="action_more_options">Daugiau galimybių</string>
<string name="enter_card_id">Įveskite ID numerį arba tekstą ant jūsų kortelės</string>
<string name="noCameraFoundGuideText">Atrodo, kad jūsų įrenginys neturi kameros. Jei jis turi kamerą, pabandykite perkrauti įrenginį. Naudokite žemiau esantį „Daugiau galimybių“ mygtuką, kad pridėtumėte brūkšninį kodą kitu būdu.</string>
<string name="settings_display_barcode_max_brightness_summary">Būtina, kad veiktų kai kurie skeneriai</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Išjungti ekrano užraktą kol peržiūrite kortelę</string>
<string name="settings_allow_content_provider_read_title">Leisti kitoms programoms išrinkti mano informaciją</string>
<string name="settings_allow_content_provider_read_summary">Programos vis tiek turės prašyti leidimo, kad gautu informaciją</string>
<string name="show_name_below_image_thumbnail">Rodyti pavadinimą po piktogramą</string>
<string name="icon_header_click_text">Ilgai paspauskite, kad pakeisti piktogramą</string>
<string name="add_manually_warning_title">Rekomenduojama skenuoti</string>
<string name="continue_">Tęsti</string>
<string name="add_manually_warning_message">Kai kuriuose parduotuvėse brūkšninio kodo vertė gali skirtis nuo kortelėje nurodyto numerio. Dėlto įvedus brūkšninį kodą rankiniu būdu gali nepavykti. Vietoj to, labai rekomenduojama nuskaityti brūkšninį kodą naudojant kamerą. Ar vis tiek norite tęsti?</string>
<string name="permissionReadCardsLabel">Skenuoti Catima Korteles</string>
<string name="settings_category_title_cards">Kortelės</string>
<string name="settings_category_title_general">Bendri</string>
<string name="settings_category_title_privacy">Privatumąi</string>
<string name="importCancelled">Importas atšauktas</string>
<string name="exportCancelled">Eksportas atšauktas</string>
<string name="addFromPdfFile">isrinkti PDF failą</string>
<string name="errorReadingFile">Nepavyko analizuoti failo</string>
<string name="failedLaunchingFileManager">Nepavyko rasti suderinamo failų tvarkytuve</string>
<string name="multipleBarcodesFoundPleaseChooseOne">Kurį iš rastų brūkšninių kodų norite naudoti?</string>
<string name="pageWithNumber"><xliff:g>%d</xliff:g> Puslapis</string>
<string name="spend">Išleisti</string>
<string name="receive">Gauti</string>
<string name="amountParsingFailed">Negaliojanti suma</string>
<string name="balanceParsingFailed">Negaliojantis balansas</string>
<string name="permissionReadCardsDescription">skaityti savo Catima korteles ir visą informaciją apie jas, įskaitant pastabas ir paveikslėlius</string>
<string name="show_validity">Parodyti galiojimą</string>
<string name="action_display_options">Rodymo parinktys</string>
<string name="show_archived_cards">Rodyti archyvuotus korteles</string>
<string name="card_id_must_not_be_empty">Kortelės ID negali būti tuščia</string>
<string name="add_a_card_in_a_different_way">Pridėti kortelę kitu būdu</string>
<string name="field_must_not_be_empty">Laukelis negali būti tuščias</string>
<string name="app_name">Catima</string>
<string name="app_copyright_short">Autorių teisės © Sylvia van Os ir Pagalbininkai</string>
<string name="useFrontImage">Naudoti priekinį vaizdą</string>
<string name="useBackImage">Naudoti galinį vaizdą</string>
</resources>

View File

@@ -52,7 +52,7 @@
<string name="settings_system_theme">Systeemthema</string>
<string name="settings_light_theme">Licht thema</string>
<string name="settings_dark_theme">Donker thema</string>
<string name="settings_display_barcode_max_brightness">Scherm helderder maken bij tonen van barcode</string>
<string name="settings_display_barcode_max_brightness">Scherm oplichten bij tonen van barcode</string>
<string name="intent_import_card_from_url_share_text">Ik wil een klantenkaart met je delen</string>
<string name="all">Alles</string>
<string name="importSuccessful">De gegevens zijn geïmporteerd</string>
@@ -260,7 +260,7 @@
<string name="settings_display_barcode_max_brightness_summary">Benodigd voor de werking van sommige scanners</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Schakelt schermvergrendeling uit tijdens het bekijken van een kaart</string>
<string name="settings_oled_dark_summary">Verlaagt het accuverbruik op oledschermen</string>
<string name="settings_category_title_cards">Kaarten</string>
<string name="settings_category_title_cards">Kaartenoverzicht</string>
<string name="settings_category_title_general">Algemeen</string>
<string name="app_copyright_short">Auteursrecht © Sylvia van Os en bijdragers</string>
<string name="action_display_options">Weergave-instellingen</string>
@@ -292,4 +292,6 @@
<string name="exportCancelled">Exporteren geannuleerd</string>
<string name="useFrontImage">Gebruik voorzijde van kaart</string>
<string name="useBackImage">Gebruik achterzijde van kaart</string>
<string name="settings_use_volume_keys_navigation">Verwissel kaart met de volume knoppen</string>
<string name="settings_use_volume_keys_navigation_summary">Gebruik de volume knoppen om te wisselen van getoonde kaart</string>
</resources>

View File

@@ -50,7 +50,7 @@
<string name="settings_system_theme">Systemowy</string>
<string name="settings_light_theme">Jasny</string>
<string name="settings_dark_theme">Ciemny</string>
<string name="settings_display_barcode_max_brightness">Rozjaśnij widok kodu kreskowego</string>
<string name="settings_display_barcode_max_brightness">Rozjaśnij ekran</string>
<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>
@@ -212,7 +212,7 @@
</plurals>
<string name="include_if_asking_support">Jeśli chcesz poprosić o pomoc, podaj następujące informacje:</string>
<string name="settings_oled_dark">Całkowicie czarne tło dla ciemnego motywu</string>
<string name="settings_card_orientation">Orientacja kodu kreskowego</string>
<string name="settings_card_orientation">Orientacja ekranu</string>
<string name="settings_follow_system_orientation">Śledź orientację systemową</string>
<string name="duplicateCard">Duplikuj</string>
<string name="starred">Oznaczone gwiazdką</string>
@@ -271,7 +271,7 @@
<string name="settings_disable_lockscreen_while_viewing_card_summary">Wyłącza blokadę ekranu kiedy wyświetlana jest karta</string>
<string name="settings_allow_content_provider_read_summary">Aplikacje będą wymagały pozwolenia aby otrzymać dostęp do danych</string>
<string name="settings_oled_dark_summary">Zmniejsza zużycie baterii na wyświetlaczach OLED</string>
<string name="settings_category_title_cards">Karty</string>
<string name="settings_category_title_cards">Widok karty</string>
<string name="settings_category_title_general">Ogólne</string>
<string name="settings_category_title_privacy">Prywatność</string>
<string name="app_copyright_short">Wszelkie prawa zastrzeżone © Sylvia van Os i współtwórcy</string>
@@ -304,4 +304,6 @@
<string name="exportCancelled">Eksport anulowany</string>
<string name="useBackImage">Użyj obrazu z tyłu</string>
<string name="useFrontImage">Użyj obrazu z przodu</string>
<string name="settings_use_volume_keys_navigation">Przełączaj karty przy użyciu przycisków głośności</string>
<string name="settings_use_volume_keys_navigation_summary">Użyj przycisków głośności do przełączania kart</string>
</resources>

View File

@@ -210,7 +210,7 @@
<string name="updateBalanceTitle">Quanto você gastou ou recebeu?</string>
<string name="currentBalanceSentence">Saldo atual: <xliff:g>%s</xliff:g></string>
<string name="newBalanceSentence">Novo saldo: <xliff:g>%s</xliff:g></string>
<string name="settings_category_title_cards">Cartões</string>
<string name="settings_category_title_cards">Visualização do cartão</string>
<string name="updateBalanceHint">Inserir quantidade</string>
<string name="anyDate">Qualquer data</string>
<string name="settings_category_title_general">Geral</string>
@@ -223,7 +223,7 @@
<string name="failedLaunchingFileManager">Não foi possível encontrar um gerenciador de arquivos compatível</string>
<string name="pageWithNumber">Página <xliff:g>%d</xliff:g></string>
<string name="multipleBarcodesFoundPleaseChooseOne">Qual dos códigos de barras encontrados você quer usar?</string>
<string name="settings_display_barcode_max_brightness">Clarear visão do código de barras</string>
<string name="settings_display_barcode_max_brightness">Iluminar a tela</string>
<string name="settings_display_barcode_max_brightness_summary">Necessário para alguns scanners funcionarem</string>
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
<string name="balance">Saldo</string>
@@ -233,7 +233,7 @@
<string name="settings_system_theme">Sistema</string>
<string name="settings_dark_theme">Escuro</string>
<string name="moveBarcodeToTopOfScreen">Mover o código de barras para o topo da tela</string>
<string name="settings_card_orientation">Orientação do código de barras</string>
<string name="settings_card_orientation">Orientação da tela</string>
<string name="settings_portrait_orientation">Retrato</string>
<string name="settings_landscape_orientation">Paisagem</string>
<string name="settings_keep_screen_on_summary">Desativa o tempo limite de tela enquanto estiver vendo um cartão</string>
@@ -298,4 +298,6 @@
<string name="exportCancelled">Exportação cancelada</string>
<string name="useBackImage">Usar imagem traseira</string>
<string name="useFrontImage">Usar imagem frontal</string>
<string name="settings_use_volume_keys_navigation_summary">Use os botões de volume para alterar qual cartão é exibido</string>
<string name="settings_use_volume_keys_navigation">Trocar de cartão usando botões de volume</string>
</resources>

View File

@@ -45,7 +45,7 @@
<string name="noGroups">Clique no botão + para adicionar grupos para categorização.</string>
<string name="noGroupCards">Este grupo está vazio</string>
<string name="intent_import_card_from_url_share_text">Quero partilhar um cartão</string>
<string name="settings_display_barcode_max_brightness">Iluminar o código de barras</string>
<string name="settings_display_barcode_max_brightness">Iluminar o ecrã</string>
<string name="settings_keep_screen_on">Manter ecrã ligado</string>
<string name="enter_group_name">Introduza o nome do grupo</string>
<string name="groups">Grupos</string>
@@ -210,7 +210,7 @@
<string name="include_if_asking_support">Se quiser pedir ajuda, inclua as seguintes informações:</string>
<string name="duplicateCard">Duplicar</string>
<string name="archive">Arquivar</string>
<string name="settings_card_orientation">Orientação do código de barras</string>
<string name="settings_card_orientation">Orientação do ecrã</string>
<string name="settings_follow_system_orientation">Definido no sistema</string>
<string name="settings_portrait_orientation">Retrato</string>
<string name="settings_landscape_orientation">Paisagem</string>
@@ -265,7 +265,7 @@
<string name="settings_allow_content_provider_read_summary">Os aplicativos ainda terão que solicitar permissão para receber acesso</string>
<string name="settings_oled_dark_summary">Reduz a utilização da bateria em ecrãs OLED</string>
<string name="icon_header_click_text">Pressione e segure para editar o icone</string>
<string name="settings_category_title_cards">Cartões</string>
<string name="settings_category_title_cards">Vista de cartão</string>
<string name="settings_category_title_general">Geral</string>
<string name="settings_category_title_privacy">Privacidade</string>
<string name="card_id_must_not_be_empty">O ID do cartão não pode estar vazio</string>
@@ -298,4 +298,6 @@
<string name="exportCancelled">Exportação cancelada</string>
<string name="useFrontImage">Utilizar imagem frontal</string>
<string name="useBackImage">Utilizar imagem do verso</string>
<string name="settings_use_volume_keys_navigation">Mudar de cartão usando os botões de volume</string>
<string name="settings_use_volume_keys_navigation_summary">Utilize os botões de volume para alterar o cartão que é apresentado</string>
</resources>

View File

@@ -52,7 +52,7 @@
<string name="settings_light_theme">Lumină</string>
<string name="settings_dark_theme">Întuneric</string>
<string name="noBarcodeFound">Nu a fost găsit niciun cod de bare</string>
<string name="settings_display_barcode_max_brightness">Luminați vizualizarea codurilor de bare</string>
<string name="settings_display_barcode_max_brightness">Iluminare ecran</string>
<string name="settings_keep_screen_on">Păstrați ecranul pornit</string>
<string name="settings_disable_lockscreen_while_viewing_card">Preveniți blocarea ecranului</string>
<string name="balance">Balanță</string>
@@ -167,7 +167,7 @@
<string name="group_name_is_empty">Numele grupului nu poate fi liber</string>
<string name="importCards">Importați carduri</string>
<string name="icon_header_click_text">Apăsați lung pentru a edita miniatura</string>
<string name="settings_category_title_cards">Carduri</string>
<string name="settings_category_title_cards">Afișare carduri</string>
<string name="setBarcodeId">Setați valoarea codului de bare</string>
<string name="ok">OK</string>
<string name="unarchive">Dezarhivare</string>
@@ -246,7 +246,7 @@
<string name="settings_violet_theme">Violet</string>
<string name="include_if_asking_support">Dacă doriți să cereți ajutor, includeți informațiile următoare:</string>
<string name="show_archived_cards">Afișați cardurile arhivate</string>
<string name="settings_card_orientation">Orientarea codului de bare</string>
<string name="settings_card_orientation">Orientare ecran</string>
<string name="app_libraries">Biblioteci terță deschise: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="updateBalanceTitle">Cât de mult ați cheltuit sau primit?</string>
<string name="settings_blue_theme">Albastru</string>
@@ -298,4 +298,6 @@
<string name="exportCancelled">Exportare anulată</string>
<string name="useBackImage">Utilizează imaginea din spate</string>
<string name="useFrontImage">Utilizează imaginea din față</string>
<string name="settings_use_volume_keys_navigation">Schimbă cardurile folosind butoanele de volum</string>
<string name="settings_use_volume_keys_navigation_summary">Folosiți butoanele de volum pentru a schimba ce card este afișat</string>
</resources>

View File

@@ -52,7 +52,7 @@
<string name="settings_system_theme">Системная</string>
<string name="settings_light_theme">Светлая</string>
<string name="settings_dark_theme">Тёмная</string>
<string name="settings_display_barcode_max_brightness">Максимальная яркость при отображении карты</string>
<string name="settings_display_barcode_max_brightness">Максимальная яркость экрана</string>
<string name="intent_import_card_from_url_share_text">Я хочу поделиться с вами картой</string>
<string name="exportSuccessful">Данные успешно экспортированы</string>
<string name="all">Все</string>
@@ -220,7 +220,7 @@
<string name="unarchive">Разархивировать</string>
<string name="settings_follow_system_orientation">Как в системе</string>
<string name="duplicateCard">Дублировать</string>
<string name="settings_card_orientation">Ориентация штрих-кода</string>
<string name="settings_card_orientation">Ориентация экрана</string>
<string name="archived">Карта архивирована</string>
<string name="unarchived">Карта разархивирована</string>
<string name="failedLaunchingPhotoPicker">Не найдено поддерживаемое приложение галереи</string>
@@ -270,7 +270,7 @@
<string name="settings_category_title_privacy">Конфиденциальность</string>
<string name="settings_display_barcode_max_brightness_summary">Необходимо для работы некоторых сканеров</string>
<string name="settings_keep_screen_on_summary">Отключение функции автоотключения экрана при отображении карты</string>
<string name="settings_category_title_cards">Карты</string>
<string name="settings_category_title_cards">Отображение карт</string>
<string name="settings_category_title_general">Общие</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Отключение функции блокировки экрана при отображении карты</string>
<string name="settings_oled_dark_summary">Снижение расхода заряда батареи на OLED-экранах</string>
@@ -304,4 +304,6 @@
<string name="exportCancelled">Экспорт отменён</string>
<string name="useFrontImage">Использовать лицевую сторону</string>
<string name="useBackImage">Использовать заднюю сторону</string>
<string name="settings_use_volume_keys_navigation_summary">Использовать кнопки регулировки громкости для смены отображаемой карты</string>
<string name="settings_use_volume_keys_navigation">Переключать карты кнопками громкости</string>
</resources>

View File

@@ -42,7 +42,7 @@
<string name="selectBarcodeTitle">Vyberte čiarový kód</string>
<string name="thumbnailDescription">Miniatúra</string>
<string name="settings">Nastavenia</string>
<string name="settings_display_barcode_max_brightness">Zvýšiť jas pri zobrazení čiarového kódu </string>
<string name="settings_display_barcode_max_brightness">Zvýšiť jas pri zobrazení čiarového kódu</string>
<string name="deleteTitle">Odstrániť kartu</string>
<string name="deleteConfirmation">Naozaj chcete túto kartu odstrániť?</string>
<string name="star">Pridať k obľúbeným</string>

View File

@@ -244,7 +244,7 @@
<string name="height">Höjd:</string>
<string name="settings_category_title_general">Generellt</string>
<string name="switchToBarcode">Byt till streckkod</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Stänger av skärmlåset när kortet visas</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">Stänger av skärmlåset medans kort visas</string>
<string name="permissionReadCardsDescription">Se dina kort med alla dess detaljer, inklusive anteckningar och bilder</string>
<string name="action_display_options">Visningsalternativ</string>
<string name="settings_display_barcode_max_brightness_summary">Nödvändigt för att en del skannrar ska fungera</string>
@@ -265,7 +265,7 @@
<string name="show_archived_cards">Visa arkiverade kort</string>
<string name="settings_category_title_privacy">Sekretess</string>
<string name="show_balance">Visa konto</string>
<string name="settings_keep_screen_on_summary">Stänger av skärmens tidsgräns medan ett kort visas</string>
<string name="settings_keep_screen_on_summary">Stänger av skärmtidsgräns medans ett kort visas</string>
<string name="card_id_must_not_be_empty">Kort id får inte vara tomt</string>
<string name="balanceParsingFailed">Ogiltiga balanser</string>
<string name="add_a_card_in_a_different_way">Lägg till kort på annat sätt</string>
@@ -275,4 +275,5 @@
<string name="addWithoutBarcode">Lägg till kort utan streckkod</string>
<string name="field_must_not_be_empty">Obligatoriskt fält</string>
<string name="app_name">Catima</string>
<string name="settings_follow_sensor_orientation">Rotera automatiskt (ignorerar systeminställningar)</string>
</resources>

View File

@@ -89,7 +89,7 @@
<string name="intent_import_card_from_url_share_text">Seninle bir kart paylaşmak istiyorum</string>
<string name="settings_disable_lockscreen_while_viewing_card">Ekran kilidini engelle</string>
<string name="settings_keep_screen_on">Ekranıık tut</string>
<string name="settings_display_barcode_max_brightness">Barkod görünümünü aydınlat</string>
<string name="settings_display_barcode_max_brightness">Ekranı aydınlat</string>
<string name="settings_dark_theme">Koyu</string>
<string name="settings_light_theme">ık</string>
<string name="settings_system_theme">Sistem</string>
@@ -209,7 +209,7 @@
<string name="duplicateCard">Çoğalt</string>
<string name="unarchive">Arşivden çıkar</string>
<string name="archived">Kart arşivlendi</string>
<string name="settings_card_orientation">Barkod yönü</string>
<string name="settings_card_orientation">Ekran yönü</string>
<string name="settings_lock_on_opening_orientation">Kartı açarken kullanılan yönü kilitle</string>
<string name="unarchived">Kart arşivden çıkarıldı</string>
<string name="archive">Arşivle</string>
@@ -261,7 +261,7 @@
<string name="settings_category_title_general">Genel</string>
<string name="settings_category_title_privacy">Gizlilik</string>
<string name="settings_oled_dark_summary">OLED ekranlarda güç kullanımını düşürür</string>
<string name="settings_category_title_cards">Kartlar</string>
<string name="settings_category_title_cards">Kart görünümü</string>
<string name="app_copyright_short">Telif hakkı © Sylvia van Os ve katkıda bulunanlar</string>
<string name="action_display_options">Görüntüleme seçenekleri</string>
<string name="show_archived_cards">Arşivlenen kartları göster</string>
@@ -292,4 +292,6 @@
<string name="exportCancelled">Dışa aktarma iptal edildi</string>
<string name="useFrontImage">Ön resmi kullan</string>
<string name="useBackImage">Arka resmi kullan</string>
<string name="settings_use_volume_keys_navigation_summary">Hangi kartın görüntüleneceğini değiştirmek için ses düğmelerini kullanın</string>
<string name="settings_use_volume_keys_navigation">Ses düğmelerini kullanarak kartları değiştir</string>
</resources>

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="noGiftCards">Натисніть кнопку +, щоб додати картку, або ⋮ для імпорту з меню.</string>
<string name="settings_display_barcode_max_brightness">Яскравіший штрих-код</string>
<string name="settings_display_barcode_max_brightness">Збільшити яскравість екрана</string>
<string name="selectBarcodeTitle">Оберіть штрих-код</string>
<string name="scanCardBarcode">Відсканувати штрих-код</string>
<string name="noBarcode">Без штрих-коду</string>
@@ -35,7 +35,7 @@
<string name="importCatima">Імпорт з Catima</string>
<string name="accept">Прийняти</string>
<string name="privacy_policy">Політика конфіденційності</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="app_loyalty_card_keychain">Брелок для картки лояльності</string>
<string name="chooseImportType">Імпортувати дані з</string>
<string name="points">Бали</string>
<string name="currency">Валюта</string>
@@ -137,8 +137,7 @@
<string name="photos">Світлини</string>
<string name="backImageDescription">Тильна сторона</string>
<string name="frontImageDescription">Лицьова сторона</string>
<string name="importStocardMessage">Виберіть експорт <i> ***.zip </i> з Stocard для імпорту.
\nОтримайте його, надіславши електронного листа support@stocardapp.com з проханням експортувати ваші дані.</string>
<string name="importStocardMessage">Виберіть експорт <i> ***.zip </i> з Stocard для імпорту.\nОтримайте його, надіславши електронного листа support@stocardapp.com з проханням експортувати ваші дані.</string>
<string name="importStocard">Імпорт з Stocard</string>
<plurals name="selectedCardCount">
<item quantity="one">Обрано: <xliff:g>%d</xliff:g></item>
@@ -214,7 +213,7 @@
</plurals>
<string name="include_if_asking_support">Якщо ви хочете отримати техпідтримку, додайте цю інформацію:</string>
<string name="unarchive">Розархівувати</string>
<string name="settings_card_orientation">Орієнтація штрих-коду</string>
<string name="settings_card_orientation">Орієнтація екрана</string>
<string name="settings_follow_system_orientation">Як у системі</string>
<string name="duplicateCard">Дублювати</string>
<string name="archive">Архівувати</string>
@@ -271,7 +270,7 @@
<string name="settings_disable_lockscreen_while_viewing_card_summary">Вимикає блокування екрана під час перегляду картки</string>
<string name="settings_allow_content_provider_read_title">Дозволити іншим застосункам доступ до моїх даних</string>
<string name="settings_oled_dark_summary">Зменшує використання батареї на OLED екранах</string>
<string name="settings_category_title_cards">Картки</string>
<string name="settings_category_title_cards">Перегляд картки</string>
<string name="settings_category_title_general">Загальні</string>
<string name="settings_category_title_privacy">Конфіденційність</string>
<string name="view_online">Переглянути онлайн</string>
@@ -304,4 +303,6 @@
<string name="exportCancelled">Експортування скасовано</string>
<string name="useFrontImage">Використати фронтальне зображення</string>
<string name="useBackImage">Використати зворотне зображення</string>
<string name="settings_use_volume_keys_navigation">Перемикайте карти за допомогою кнопок гучності</string>
<string name="settings_use_volume_keys_navigation_summary">Використовуйте кнопки гучності, щоб змінити картку, яка відображається</string>
</resources>

View File

@@ -268,7 +268,7 @@
<string name="openBackImageInGalleryApp">Mở lại hình ảnh trong ứng dụng thư viện</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 libre được bảo vệ bản quyền theo giấy phép GPLv3+.</string>
<string name="app_license">Phần mềm miễn phí có bản quyền theo giấy phép GPLv3+</string>
<string name="settings_follow_sensor_orientation">Luôn xoay (bỏ qua thiết đặt hệ thống)</string>
<string name="continue_">Tiếp tục</string>
<string name="add_manually_warning_title">Nên quét</string>
@@ -282,4 +282,8 @@
<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="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>
<string name="importCancelled">Đã huỷ nhập</string>
<string name="exportCancelled">Đã hủy xuất</string>
</resources>

View File

@@ -64,7 +64,7 @@
<string name="intent_import_card_from_url_share_text">我想和你分享一张卡</string>
<string name="settings_disable_lockscreen_while_viewing_card">防止锁屏</string>
<string name="settings_keep_screen_on">保持屏幕常亮</string>
<string name="settings_display_barcode_max_brightness">提高条码界面亮度</string>
<string name="settings_display_barcode_max_brightness">提高屏幕亮度</string>
<string name="settings_dark_theme">暗色</string>
<string name="settings_light_theme">浅色</string>
<string name="settings_theme">主题</string>
@@ -199,7 +199,7 @@
<string name="failedLaunchingPhotoPicker">找不到支持的图库应用</string>
<string name="previousCard">前一张</string>
<string name="nextCard">下一张</string>
<string name="settings_card_orientation">条形码朝向</string>
<string name="settings_card_orientation">屏幕</string>
<string name="settings_landscape_orientation">横向</string>
<string name="settings_follow_system_orientation">跟随系统</string>
<string name="settings_lock_on_opening_orientation">使用上次打开卡片时的朝向</string>
@@ -253,7 +253,7 @@
<string name="settings_category_title_privacy">隐私</string>
<string name="settings_disable_lockscreen_while_viewing_card_summary">查看卡片时禁用屏幕锁</string>
<string name="settings_display_barcode_max_brightness_summary">一些扫描仪工作所必需的</string>
<string name="settings_category_title_cards"></string>
<string name="settings_category_title_cards">片视图</string>
<string name="settings_category_title_general">常规</string>
<string name="action_display_options">显示选项</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">版权所有 © 2019<xliff:g>%d</xliff:g> Sylvia van Os 及其贡献者们</string>
@@ -286,4 +286,6 @@
<string name="exportCancelled">取消了导出</string>
<string name="useFrontImage">使用正面图</string>
<string name="useBackImage">使用背面图</string>
<string name="settings_use_volume_keys_navigation">用音量按钮切换卡片</string>
<string name="settings_use_volume_keys_navigation_summary">是用音量按钮改变展示的卡片</string>
</resources>

View File

@@ -134,7 +134,7 @@
<string name="noGroupCards">此群組為空</string>
<string name="settings_light_theme">淺色</string>
<string name="settings_dark_theme">深色</string>
<string name="settings_display_barcode_max_brightness">調高條碼介面螢幕亮度</string>
<string name="settings_display_barcode_max_brightness">調高螢幕亮度</string>
<string name="settings_keep_screen_on">螢幕恆亮</string>
<string name="settings_disable_lockscreen_while_viewing_card">防止螢幕鎖定</string>
<string name="importSuccessful">已匯入資料</string>
@@ -197,7 +197,7 @@
<string name="translate_platform">於 Weblate</string>
<string name="options">選項</string>
<string name="include_if_asking_support">如果您想請求協助,請附上以下訊息:</string>
<string name="settings_card_orientation">條碼方向</string>
<string name="settings_card_orientation">螢幕方向</string>
<string name="failedToRetrieveImageFile">無法擷取圖片檔案</string>
<string name="barcodeLongPressMessage">圖庫應用程式僅可開啟圖片</string>
<string name="duplicateCard">重複</string>
@@ -257,7 +257,7 @@
<string name="action_more_options">更多選項</string>
<string name="action_display_options">螢幕</string>
<string name="settings_oled_dark_summary">降低OLED螢幕使用的電力</string>
<string name="settings_category_title_cards">卡片</string>
<string name="settings_category_title_cards">卡片檢視</string>
<string name="addWithoutBarcode">新增無條碼卡片</string>
<string name="show_archived_cards">顯示已封存卡片</string>
<string name="settings_category_title_privacy">隱私權</string>
@@ -285,4 +285,6 @@
<string name="importCancelled">已取消匯入</string>
<string name="useFrontImage">使用正面圖片</string>
<string name="useBackImage">使用背面圖片</string>
<string name="settings_use_volume_keys_navigation_summary">使用音量按鈕來切換顯示的卡片</string>
<string name="settings_use_volume_keys_navigation">使用音量按鈕切換卡片</string>
</resources>

View File

@@ -95,7 +95,7 @@
<string name="settings_key_light_theme" translatable="false">light</string>
<string name="settings_dark_theme">Dark</string>
<string name="settings_key_dark_theme" translatable="false">dark</string>
<string name="settings_card_orientation">Barcode orientation</string>
<string name="settings_card_orientation">Screen orientation</string>
<string name="settings_key_card_orientation" translatable="false">pref_card_orientation</string>
<string name="settings_follow_system_orientation">Follow system</string>
<string name="settings_key_follow_system_orientation" translatable="false">follow_system</string>
@@ -108,7 +108,7 @@
<string name="settings_lock_on_opening_orientation">Lock to orientation used when opening the card</string>
<string name="settings_key_lock_on_opening_orientation" translatable="false">lock_on_opening</string>
<string name="settings_key_max_font_size_scale" translatable="false">pref_max_font_size_scale</string>
<string name="settings_display_barcode_max_brightness">Brighten barcode view</string>
<string name="settings_display_barcode_max_brightness">Brighten screen</string>
<string name="settings_display_barcode_max_brightness_summary">Necessary for some scanners to work</string>
<string name="settings_key_display_barcode_max_brightness" translatable="false">pref_display_card_max_brightness</string>
<string name="settings_keep_screen_on">Keep screen on</string>
@@ -121,6 +121,9 @@
<string name="settings_key_disable_lockscreen_while_viewing_card" translatable="false">pref_disable_lockscreen_while_viewing_card</string>
<string name="settings_key_allow_content_provider_read" translatable="false">pref_allow_content_provider_read</string>
<string name="settings_key_oled_dark" translatable="false">pref_oled_dark</string>
<string name="settings_use_volume_keys_navigation">Switch cards using volume buttons</string>
<string name="settings_use_volume_keys_navigation_summary">Use the volume buttons to change which card is displayed</string>
<string name="settings_key_use_volume_keys_navigation" translatable="false">pref_use_volume_keys_navigation</string>
<string name="sharedpreference_active_tab" translatable="false">sharedpreference_active_tab</string>
<string name="sharedpreference_sort" translatable="false">sharedpreference_sort</string>
<string name="sharedpreference_sort_order" translatable="false">sharedpreference_sort_order</string>
@@ -314,7 +317,7 @@
<string name="sharedpreference_card_details_show_balance" translatable="false">sharedpreference_card_details_show_balance</string>
<string name="sharedpreference_card_details_show_validity" translatable="false">sharedpreference_card_details_show_validity</string>
<string name="sharedpreference_card_details_show_archived_cards" translatable="false">sharedpreference_card_details_show_archived_cards</string>
<string name="settings_category_title_cards">Cards</string>
<string name="settings_category_title_cards">Card view</string>
<string name="settings_category_title_general">General</string>
<string name="settings_category_title_privacy">Privacy</string>
<string name="action_display_options">Display options</string>

View File

@@ -50,6 +50,15 @@
android:title="@string/settings_category_title_cards"
app:iconSpaceReserved="false">
<SwitchPreferenceCompat
android:widgetLayout="@layout/preference_material_switch"
android:defaultValue="false"
android:key="@string/settings_key_use_volume_keys_navigation"
android:summary="@string/settings_use_volume_keys_navigation_summary"
android:title="@string/settings_use_volume_keys_navigation"
app:iconSpaceReserved="false"
app:singleLineTitle="false" />
<SwitchPreferenceCompat
android:widgetLayout="@layout/preference_material_switch"
android:defaultValue="true"
@@ -102,5 +111,5 @@
app:singleLineTitle="false" />
</PreferenceCategory>
</PreferenceScreen>
</PreferenceScreen>

View File

@@ -174,7 +174,7 @@ public class ImportExportTest {
int index = 1;
while (cursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cursor);
LoyaltyCard card = LoyaltyCard.fromCursor(cursor);
String expectedStore = String.format("store, \"%4d", index);
String expectedNote = String.format("note, \"%4d", index);
@@ -200,7 +200,7 @@ public class ImportExportTest {
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
while (cursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cursor);
LoyaltyCard card = LoyaltyCard.fromCursor(cursor);
// ID goes up for duplicates (b/c the cursor orders by store), down for originals
int index = card.id > numCards ? card.id - numCards : numCards - card.id + 1;
@@ -236,7 +236,7 @@ public class ImportExportTest {
while (index < 10) {
cursor.moveToNext();
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cursor);
LoyaltyCard card = LoyaltyCard.fromCursor(cursor);
String expectedStore = String.format("store, \"%4d", index);
String expectedNote = String.format("note, \"%4d", index);
@@ -258,7 +258,7 @@ public class ImportExportTest {
index = 1;
while (cursor.moveToNext() && index < 5) {
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(cursor);
LoyaltyCard card = LoyaltyCard.fromCursor(cursor);
String expectedStore = String.format("store, \"%4d", index);
String expectedNote = String.format("note, \"%4d", index);

View File

@@ -137,7 +137,7 @@ public class LoyaltyCardCursorAdapterTest {
assertEquals(4, cursor.getCount());
assertTrue(cursor.moveToFirst());
LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(cursor);
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(cursor);
assertEquals("storeD", loyaltyCard.store);
View view = createView(cursor);
ConstraintLayout star = view.findViewById(R.id.star);
@@ -146,7 +146,7 @@ public class LoyaltyCardCursorAdapterTest {
assertEquals(View.GONE, archive.getVisibility());
assertTrue(cursor.moveToNext());
loyaltyCard = LoyaltyCard.toLoyaltyCard(cursor);
loyaltyCard = LoyaltyCard.fromCursor(cursor);
assertEquals("storeC", loyaltyCard.store);
view = createView(cursor);
star = view.findViewById(R.id.star);
@@ -155,7 +155,7 @@ public class LoyaltyCardCursorAdapterTest {
assertEquals(View.GONE, archive.getVisibility());
assertTrue(cursor.moveToNext());
loyaltyCard = LoyaltyCard.toLoyaltyCard(cursor);
loyaltyCard = LoyaltyCard.fromCursor(cursor);
assertEquals("storeB", loyaltyCard.store);
view = createView(cursor);
star = view.findViewById(R.id.star);
@@ -164,7 +164,7 @@ public class LoyaltyCardCursorAdapterTest {
assertEquals(View.VISIBLE, archive.getVisibility());
assertTrue(cursor.moveToNext());
loyaltyCard = LoyaltyCard.toLoyaltyCard(cursor);
loyaltyCard = LoyaltyCard.fromCursor(cursor);
assertEquals("storeA", loyaltyCard.store);
view = createView(cursor);
star = view.findViewById(R.id.star);

View File

@@ -37,9 +37,11 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.test.core.app.ApplicationProvider;
import com.google.android.material.bottomappbar.BottomAppBar;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
@@ -347,8 +349,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void noDataLossOnResumeOrRotate() {
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
registerMediaStoreIntentHandler();
Integer cardId;
for (boolean newCard : new boolean[]{false, true}) {
System.out.println();
System.out.println("=====");
@@ -356,21 +363,14 @@ public class LoyaltyCardViewActivityTest {
System.out.println("=====");
System.out.println();
ActivityController activityController;
if (!newCard) {
activityController = createActivityWithLoyaltyCard(true);
cardId = (int) DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0);
} else {
activityController = Robolectric.buildActivity(LoyaltyCardEditActivity.class).create();
cardId = null;
}
ActivityController activityController = createActivityWithLoyaltyCard(true, cardId);
LoyaltyCardEditActivity activity = (LoyaltyCardEditActivity) activityController.get();
final Context context = activity.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
if (!newCard) {
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
}
activityController.start();
activityController.visible();
@@ -403,9 +403,9 @@ public class LoyaltyCardViewActivityTest {
storeField.setText("correct store");
noteField.setText("correct note");
LoyaltyCardEditActivity.formatDateField(context, validFromField, validFromDate);
activity.updateTempState(LoyaltyCardField.validFrom, validFromDate);
activity.setLoyaltyCardValidFrom(validFromDate);
LoyaltyCardEditActivity.formatDateField(context, expiryField, expiryDate);
activity.updateTempState(LoyaltyCardField.expiry, expiryDate);
activity.setLoyaltyCardExpiry(expiryDate);
balanceField.setText("100");
balanceTypeField.setText(currency.getSymbol());
cardIdField.setText("12345678");
@@ -461,6 +461,9 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startWithoutParametersCannotCreateLoyaltyCard() {
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
ActivityController activityController = Robolectric.buildActivity(LoyaltyCardEditActivity.class).create();
activityController.start();
activityController.visible();
@@ -468,7 +471,6 @@ public class LoyaltyCardViewActivityTest {
Activity activity = (Activity) activityController.get();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
assertEquals(0, DBHelper.getLoyaltyCardCount(database));
final EditText storeField = activity.findViewById(R.id.storeNameEdit);
@@ -583,18 +585,20 @@ public class LoyaltyCardViewActivityTest {
assertEquals(true, activity.isFinishing());
}
private ActivityController createActivityWithLoyaltyCard(boolean editMode) {
private ActivityController createActivityWithLoyaltyCard(boolean editMode, @Nullable Integer loyaltyCardId) {
Intent intent = new Intent();
final Bundle bundle = new Bundle();
bundle.putInt("id", 1);
Class clazz;
if (editMode) {
bundle.putBoolean("update", true);
if (loyaltyCardId != null) {
bundle.putInt(LoyaltyCardEditActivity.BUNDLE_ID, loyaltyCardId);
bundle.putBoolean(LoyaltyCardEditActivity.BUNDLE_UPDATE, true);
}
clazz = LoyaltyCardEditActivity.class;
} else {
bundle.putBoolean("view", true);
bundle.putInt(LoyaltyCardViewActivity.BUNDLE_ID, loyaltyCardId);
clazz = LoyaltyCardViewActivity.class;
}
@@ -605,12 +609,14 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startWithLoyaltyCardEditModeCheckDisplay() throws IOException {
ActivityController activityController = createActivityWithLoyaltyCard(true);
Activity activity = (Activity) activityController.get();
final Context context = activity.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
Activity activity = (Activity) activityController.get();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
activityController.start();
activityController.visible();
@@ -623,12 +629,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startWithLoyaltyCardViewModeCheckDisplay() {
ActivityController activityController = createActivityWithLoyaltyCard(false);
Activity activity = (Activity) activityController.get();
final Context context = activity.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId);
Activity activity = (Activity) activityController.get();
activityController.start();
activityController.visible();
@@ -641,12 +648,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startWithLoyaltyCardWithBarcodeUpdateBarcode() throws IOException {
ActivityController activityController = createActivityWithLoyaltyCard(true);
Activity activity = (Activity) activityController.get();
final Context context = activity.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
Activity activity = (Activity) activityController.get();
activityController.start();
activityController.visible();
@@ -665,12 +673,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startWithLoyaltyCardWithReceiptUpdateReceiptCancel() throws IOException {
ActivityController activityController = createActivityWithLoyaltyCard(true);
LoyaltyCardEditActivity activity = (LoyaltyCardEditActivity) activityController.get();
final Context context = activity.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
LoyaltyCardEditActivity activity = (LoyaltyCardEditActivity) activityController.get();
activityController.start();
activityController.visible();
@@ -703,12 +712,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startWithLoyaltyCardNoExpirySetExpiry() throws IOException {
ActivityController activityController = createActivityWithLoyaltyCard(true);
Activity activity = (Activity) activityController.get();
final Context context = activity.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
Activity activity = (Activity) activityController.get();
activityController.start();
activityController.visible();
@@ -735,12 +745,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startWithLoyaltyCardExpirySetNoExpiry() throws IOException {
ActivityController activityController = createActivityWithLoyaltyCard(true);
Activity activity = (Activity) activityController.get();
final Context context = activity.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, new Date(), new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, new Date(), new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
Activity activity = (Activity) activityController.get();
activityController.start();
activityController.visible();
@@ -759,12 +770,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startWithLoyaltyCardNoBalanceSetBalance() throws IOException {
ActivityController activityController = createActivityWithLoyaltyCard(true);
Activity activity = (Activity) activityController.get();
final Context context = activity.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
Activity activity = (Activity) activityController.get();
activityController.start();
activityController.visible();
@@ -809,12 +821,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startWithLoyaltyCardBalanceSetNoBalance() throws IOException {
ActivityController activityController = createActivityWithLoyaltyCard(true);
Activity activity = (Activity) activityController.get();
final Context context = activity.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("USD"), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("USD"), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
Activity activity = (Activity) activityController.get();
activityController.start();
activityController.visible();
@@ -849,12 +862,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startWithLoyaltyCardSameAsCardIDUpdateBarcodeID() {
ActivityController activityController = createActivityWithLoyaltyCard(true);
Activity activity = (Activity) activityController.get();
final Context context = activity.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
Activity activity = (Activity) activityController.get();
activityController.start();
activityController.visible();
@@ -880,12 +894,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startWithLoyaltyCardSameAsCardIDUpdateCardID() {
ActivityController activityController = createActivityWithLoyaltyCard(true);
Activity activity = (Activity) activityController.get();
final Context context = activity.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
Activity activity = (Activity) activityController.get();
activityController.start();
activityController.visible();
@@ -913,12 +928,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startWithLoyaltyCardDifferentFromCardIDUpdateCardIDUpdate() {
ActivityController activityController = createActivityWithLoyaltyCard(true);
Activity activity = (Activity) activityController.get();
final Context context = activity.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
Activity activity = (Activity) activityController.get();
activityController.start();
activityController.visible();
@@ -949,12 +965,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startWithLoyaltyCardDifferentFromCardIDUpdateCardIDDoNotUpdate() {
ActivityController activityController = createActivityWithLoyaltyCard(true);
Activity activity = (Activity) activityController.get();
final Context context = activity.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
Activity activity = (Activity) activityController.get();
activityController.start();
activityController.visible();
@@ -985,11 +1002,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void checkMenu() throws IOException {
ActivityController activityController = createActivityWithLoyaltyCard(false);
Activity activity = (Activity) activityController.get();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId);
Activity activity = (Activity) activityController.get();
activityController.start();
activityController.visible();
@@ -1011,15 +1030,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startWithMissingLoyaltyCard() throws IOException {
ActivityController activityController = createActivityWithLoyaltyCard(true);
ActivityController activityController = createActivityWithLoyaltyCard(true, 1);
Activity activity = (Activity) activityController.get();
activityController.start();
activityController.visible();
activityController.resume();
// The activity should find that the card is missing and shut down
assertTrue(activity.isFinishing());
// Make sure the activity can close down
@@ -1030,11 +1047,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startWithoutParametersViewBack() {
ActivityController activityController = createActivityWithLoyaltyCard(false);
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId);
Activity activity = (Activity) activityController.get();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
activityController.start();
activityController.visible();
@@ -1049,11 +1068,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startWithoutColors() {
ActivityController activityController = createActivityWithLoyaltyCard(false);
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId);
Activity activity = (Activity) activityController.get();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null,0);
activityController.start();
activityController.visible();
@@ -1068,11 +1089,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startLoyaltyCardWithoutColorsSave() throws IOException, ParseException {
ActivityController activityController = createActivityWithLoyaltyCard(true);
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
Activity activity = (Activity) activityController.get();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null,0);
activityController.start();
activityController.visible();
@@ -1086,11 +1109,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void startLoyaltyCardWithExplicitNoBarcodeSave() throws IOException, ParseException {
ActivityController activityController = createActivityWithLoyaltyCard(true);
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
Activity activity = (Activity) activityController.get();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0, null,0);
activityController.start();
activityController.visible();
@@ -1104,12 +1129,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void removeBarcodeFromLoyaltyCard() throws IOException, ParseException {
ActivityController activityController = createActivityWithLoyaltyCard(true);
Activity activity = (Activity) activityController.get();
final Context context = activity.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
Activity activity = (Activity) activityController.get();
activityController.start();
activityController.visible();
@@ -1119,7 +1145,7 @@ public class LoyaltyCardViewActivityTest {
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), null, null);
// Complete empty barcode selection successfully
selectBarcodeWithResult(activity, BARCODE_DATA, "", true);
selectBarcodeWithResult(activity, BARCODE_DATA, null, true);
activityController.resume();
// Check if the barcode type is NO_BARCODE as expected
@@ -1134,11 +1160,14 @@ public class LoyaltyCardViewActivityTest {
@Test
public void checkPushStarIcon() {
ActivityController activityController = createActivityWithLoyaltyCard(false);
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId);
Activity activity = (Activity) activityController.get();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
activityController.start();
activityController.visible();
activityController.resume();
@@ -1168,11 +1197,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void checkBarcodeFullscreenWorkflow() {
ActivityController activityController = createActivityWithLoyaltyCard(false);
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId);
AppCompatActivity activity = (AppCompatActivity) activityController.get();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
activityController.start();
activityController.visible();
@@ -1262,11 +1293,13 @@ public class LoyaltyCardViewActivityTest {
@Test
public void checkNoBarcodeFullscreenWorkflow() {
ActivityController activityController = createActivityWithLoyaltyCard(false);
final Context context = ApplicationProvider.getApplicationContext();
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0, null, 0);
ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId);
AppCompatActivity activity = (AppCompatActivity) activityController.get();
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0, null,0);
activityController.start();
activityController.visible();

View File

@@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id("com.android.application") version "8.5.2" apply false
id("com.android.application") version "8.7.1" apply false
id("com.github.spotbugs") version "5.1.4" apply false
}

View File

@@ -1,5 +1,5 @@
- Karten-ID beim Bearbeiten vorab ausfüllen. (Pull #94 (https://github.com/brarcher/loyalty-card-locker/pull/94))
- Barcode-Breite begrenzen, um Speicherprobleme zu vermeiden. (Pull #103 (https://github.com/brarcher/loyalty-card-locker/pull/103))
- „Bearbeiten“ statt „Hinzufügen“ bei existierender ID anzeigen. (Pull #104 (https://github.com/brarcher/loyalty-card-locker/pull/104))
- Farbschema und Layout überarbeitet. (Pull #107 (https://github.com/brarcher/loyalty-card-locker/pull/107))
- Einführungsassistent bei der ersten Nutzung hinzugefügt. (Pull #108 (https://github.com/brarcher/loyalty-card-locker/pull/108))
- Startet Bearbeiten bei Karten-ID (https://github.com/brarcher/loyalty-card-locker/pull/94)
- Barcode-Breite begrenzt => keine Speicherproblem (https://github.com/brarcher/loyalty-card-locker/pull/103)
- „Bearbeiten“ statt „Hinzufügen“ bei bekannter ID (https://github.com/brarcher/loyalty-card-locker/pull/104)
- Farbschema + Layout überarbeitet (https://github.com/brarcher/loyalty-card-locker/pull/107)
- Einführungsassistent hinzugefügt (https://github.com/brarcher/loyalty-card-locker/pull/108)

View File

@@ -1,3 +1,4 @@
- Lange Store-Namen in der Vorschau auf mehrere Zeilen aufteilen
- Vorder- oder Hintergrundbild im Thumbnail-Menü verwenden
- Kleine Fehlerbehebungen bei Import/Export
- Kleine Fehlerbehebungen beim UI

View File

@@ -0,0 +1 @@
- „Zurück-Geste“ zum Verlassen der Tastatur auf dem Hauptbildschirm und der Suche unter Android 13+ repariert

View File

@@ -0,0 +1 @@
- Möglichkeit, mit den Lautstärketasten durch die Karten zu navigieren

View File

@@ -1,5 +1,5 @@
- Unterstützung für Home-Screen-Shortcuts beim Hinzufügen oder Bearbeiten einer Karte. (Pull #155 (https://github.com/brarcher/loyalty-card-locker/pull/155))
- Widget entfernt, da es keine gute Alternative zu Shortcuts war. (Pull #155 (https://github.com/brarcher/loyalty-card-locker/pull/155))
- Fehler beim Export von Backups auf Android 7+ behoben. (Pull #153 (https://github.com/brarcher/loyalty-card-locker/pull/153))
- Genaueren MIME-Typ beim Export von Backup-Daten gemeldet. (Pull #156 (https://github.com/brarcher/loyalty-card-locker/pull/156))
- Fehler beim Bearbeiten von Karten behoben. (Pull #155 (https://github.com/brarcher/loyalty-card-locker/pull/155))
- Home-Screen-Shortcut bei Hinzufügen oder Bearbeiten einer Karte. (https://github.com/brarcher/loyalty-card-locker/pull/155)
- Widget entfernt. (https://github.com/brarcher/loyalty-card-locker/pull/155)
- Backup-Exportfehler auf Android 7+ behoben. (https://github.com/brarcher/loyalty-card-locker/pull/153)
- MIME-Typ bei Daten-Export genauer. (https://github.com/brarcher/loyalty-card-locker/pull/156)
- Kein Fehler bei Kartenbearbeitung. (https://github.com/brarcher/loyalty-card-locker/pull/155)

View File

@@ -1,11 +1,11 @@
- Suche nach Karten hinzugefügt. (#320 (https://github.com/brarcher/loyalty-card-locker/pull/320))
- Karten teilen und empfangen möglich. (#321 (https://github.com/brarcher/loyalty-card-locker/pull/321))
- Unterstützung für den Dunkelmodus. (#322 (https://github.com/brarcher/loyalty-card-locker/pull/322))
- Treuekarten können jetzt ohne Barcode gespeichert werden. (#324 (https://github.com/brarcher/loyalty-card-locker/pull/324))
- Notizen können mehrere Zeilen umfassen. (#326 (https://github.com/brarcher/loyalty-card-locker/pull/326))
- Verbesserungen bei der Notizgröße. (#319 (https://github.com/brarcher/loyalty-card-locker/pull/319))
- Benachrichtigungen und App-Icon sichtbarer gemacht. (#330 (https://github.com/brarcher/loyalty-card-locker/pull/330))
- Ziel-SDK auf Android 10 aktualisiert.
- NEU: Kartensuche (https://github.com/brarcher/loyalty-card-locker/pull/320)
- NEU: Karten teilen und empfangen (https://github.com/brarcher/loyalty-card-locker/pull/321)
- NEU: Dunkelmodus (https://github.com/brarcher/loyalty-card-locker/pull/322)
- NEU: Treuekarten ohne Barcode speichern (https://github.com/brarcher/loyalty-card-locker/pull/324)
- NEU: Notizen über mehrere Zeilen (https://github.com/brarcher/loyalty-card-locker/pull/326)
- Optimierung Notizgrößen (https://github.com/brarcher/loyalty-card-locker/pull/319)
- Optimierung Benachrichtigungen und App-Icon Sichtbarkeit (https://github.com/brarcher/loyalty-card-locker/pull/330)
- Ziel-SDK auf Android 10 aktualisiert
- Übersetzungen verbessert:
- Deutsch
- Italienisch

View File

@@ -1,11 +1,11 @@
- BREAKING CHANGE: Backup-Format geändert, siehe https://github.com/TheLastProject/Catima/wiki/Export-format
- BREAKING CHANGE: URL-Sharing-Format geändert, siehe https://github.com/TheLastProject/Catima/wiki/Card-sharing-URL-format
- Taschenlampe beim Scannen an/aus
- UPC-E-Unterstützung hinzugefügt
- Fotos von Vorder- und Rückseite der Karte hinzufügen
- Passwortgeschützte Zip-Dateien importieren
- Stocard-Import (Beta) unterstützt
- Leerzeichen bei Fidme-Import entfernt
- Neues Voucher Vault-Format unterstützt
- CHANGE: Backup-Format (https://github.com/TheLastProject/Catima/wiki/Export-format)
- CHANGE: URL-Teilen-Format (https://github.com/TheLastProject/Catima/wiki/Card-sharing-URL-format)
- SCANNEN: Lampe AN/AUS
- UPC-E-Unterstützung
- Fotos für Vor- und Rückseite der Karten
- Import passwortgeschützter Zip-Dateien
- Stocard-Import (Beta)
- Fidme-Import: Ohne überflüssige Leerzeichen
- Voucher Vault-Format export
- Floating Action Buttons auf Android 4 repariert
- Oberer Rand der Appbar repariert

View File

@@ -1,4 +1,4 @@
- Bildschirmhelligkeit auf Maximum beim Anzeigen einer Karte. (Pull #54 (https://github.com/brarcher/loyalty-card-locker/pull/54))
- Bestätigung beim Löschen von Karten hinzugefügt. (Pull #55 (https://github.com/brarcher/loyalty-card-locker/pull/55))
- Deutsche (Pull #57 (https://github.com/brarcher/loyalty-card-locker/pull/57)) und tschechische (Pull #58 (https://github.com/brarcher/loyalty-card-locker/pull/58)) Übersetzungen hinzugefügt.
- Italienische Übersetzung verbessert. (Pull #66 (https://github.com/brarcher/loyalty-card-locker/pull/66))
- Das Anzeigen einer Karte steigert die Bildschirmhelligkeit aufs Maximum. (https://github.com/brarcher/loyalty-card-locker/pull/54)
- NEU: Bestätigung beim Löschen von Karten. (https://github.com/brarcher/loyalty-card-locker/pull/55)
- NEU: Übersetzung für Deutsch (https://github.com/brarcher/loyalty-card-locker/pull/57) und Tschechisch (https://github.com/brarcher/loyalty-card-locker/pull/58).
- Italienische Übersetzung verbessert. (https://github.com/brarcher/loyalty-card-locker/pull/66)

View File

@@ -2,6 +2,6 @@ Der Name „Locker“ war missverständlich. Ein neues Icon von betsythefc und d
Zusätzliche Funktionen/Verbesserungen:
- Flexibleres Import/Export von Karten. (Pull #76 (https://github.com/brarcher/loyalty-card-locker/pull/76))
- Litauische Übersetzung hinzugefügt. (Pull #62 (https://github.com/brarcher/loyalty-card-locker/pull/62))
- Französische Übersetzung hinzugefügt. (Pull #80 (https://github.com/brarcher/loyalty-card-locker/pull/80))
- Flexiblerer Import/Export von Karten. (https://github.com/brarcher/loyalty-card-locker/pull/76)
- NEU: Litauische Übersetzung. (https://github.com/brarcher/loyalty-card-locker/pull/62)
- NEU: Französische Übersetzung. (https://github.com/brarcher/loyalty-card-locker/pull/80)

View File

@@ -0,0 +1 @@
- Option to navigate cards using the volume buttons

View File

@@ -0,0 +1 @@
- Opción para navegar por las tarjetas usando los botones de volumen

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -0,0 +1 @@
Kaarditasku kliendikaartidele, liikmekaartidele, kupongidele ja piletitele.

View File

@@ -0,0 +1 @@
Catima — kliendikaartide tasku

View File

@@ -3,17 +3,17 @@ Nustokite ieškoti plastikinių lojalumo kortelių parduotuvėje ar parduotuvėj
Pamirškite piniginę arba laikykite ją itin lengvą tik vertingiems daiktams.
Naudodami šį būtiną kasdienio naudojimo (EDC) įrankį galite nenaudingą plastiką pakeisti grynaisiais pinigais.
Su šiuo būtinu kasdienio nešiojimo (EDC) įrankiu nenaudingą plastiką galite pakeisti grynaisiais pinigais.
- Išvenkite šnipinėjimo, programėlė prašo labai nedaug leidimų. Jokios prieigos prie interneto ir jokių reklamų.
- Pridėkite korteles ar kodus su pavadinimais ir pasirenkamomis spalvomis.
- Rankiniu būdu įveskite kodą, jei nėra saugotino brūkšninio kodo arba jo negalima naudoti.
- Pridėkite korteles arba kodus su pavadinimais ir pasirenkamomis spalvomis.
- Rankiniu būdu įveskite kodą, jei nėra saugotino brūkšninio kodo arba jei jis neįskaitomas.
- Importuokite korteles ir kodus iš failų, "Catima", "FidMe", "Loyalty Card Keychain", "Stocard", "Voucher Vault".
- Padarykite atsarginę visų kortelių kopiją ir, jei norite, perkelkite jas į naują įrenginį.
- Padarykite atsarginę kopiją visų kortelių ir, jei norite, perkelkite jas į naują įrenginį.
- Dalinkitės kuponais, išskirtiniais pasiūlymais, reklaminiais kodais arba kortelėmis ir kodais naudodami bet kurią programą.
- Tamsi tema ir parinktys naudotojams su regos sutrikimais.
- "Libre" programinės įrangos bendruomenės sukurta visiems.
- Lokalizuoti rankų darbo vertimai į daugiau nei 20 kalbų.
- Lokalizuoti rankų darbo vertimai į daugiau nei 40 kalbų.
- Nemokama, remiama bendruomenės įnašais.
- Naudokite, studijuokite, keiskite ir dalinkitės, kaip norite; <i>su visais</i>.
- Ne tik laisvoji programinė įranga / atvirasis kodas. <i>"Copylefted"</i> laisvosios programinės įrangos (GPLv3+) kortelių valdymas.

View File

@@ -1,3 +1,4 @@
- Permitir que nomes longos de lojas na pré-visualização sejam divididos em várias linhas
- Opção para utilizar a imagem de frente ou de verso no menu de miniaturas
- Pequenas correcções de importação/exportação
- Pequenas correções de importação/exportação
- Pequenas correções na interface do utilizador

View File

@@ -0,0 +1 @@
- Opção para navegar entre cartões usando os botões de volume

View File

@@ -0,0 +1,2 @@
- Esconder pesquisa, expandir e organizar ícones desde que haja pelo menos 1 cartão
- Várias correções nos temas

View File

@@ -0,0 +1,3 @@
- Correção no recortado para que use a cor do tema
- Correção de pequenos problemas nos temas
- Adicionar tema escuro "pure black" para ecrãs OLED

View File

@@ -0,0 +1,2 @@
- Várias pequenas correções
- Correção de falha quando Norueguês é utilizado

View File

@@ -0,0 +1,2 @@
- Correção em todo o lado da seleção manual de linguagem
- Correção da falha na vista de editor em locais sem região

View File

@@ -0,0 +1 @@
Para os seus códigos de barras, subscrições, cupões e bilhetes.

View File

@@ -0,0 +1 @@
- Исправлен жест возврата на главном экране, закрывавший клавиатуру и поиск на Android 13+

View File

@@ -0,0 +1 @@
- Возможность навигации по картам с помощью кнопок громкости

View File

@@ -1,3 +1,4 @@
- Можливість розділити довгі назви магазинів на кілька рядків
- Можливість використання фронтального чи зворотного зображення в меню ескізів
- Незначні виправлення імпорту/експорту
- Незначні виправлення інтерфейсу користувача

View File

@@ -0,0 +1 @@
- Виправлено жест назад на головному екрані для згортання клавіатури та пошуку на Android 13+

View File

@@ -0,0 +1 @@
- Можливість навігації картками за допомогою кнопок гучності

View File

@@ -0,0 +1 @@
- 修复 Android 13 以上系统中主屏幕返回手势不理会键盘和搜索的问题

View File

@@ -0,0 +1 @@
- 使用音量按钮切换卡片的选项

View File

@@ -0,0 +1 @@
- 修正 Android 13 以上版本中,主畫面返回手勢會關閉鍵盤和搜尋的問題

View File

@@ -0,0 +1 @@
- 選擇使用音量按鈕來瀏覽卡片

View File

@@ -0,0 +1,2 @@
- 允許使用者手動輸入條碼。如果使用者選擇手動輸入條碼將顯示所有有效且支援的條碼圖像清單。然後使用者可以選擇與其需求相符的條碼圖像。Issue #33 (https://github.com/brarcher/loyalty-card-locker/issues/33)PR #44 (https://github.com/brarcher/loyalty-card-locker/pull/44)
- 解決部分顯示的條碼模糊的問題。Issue #37 (https://github.com/brarcher/loyalty-card-locker/issues/37)

View File

@@ -0,0 +1,2 @@
- 長按卡片會出現選項,將卡片 ID 複製到剪貼簿。(PR #49 (https://github.com/brarcher/loyalty-card-locker/issues/49))
- 匯入/匯出畫面的返回按鈕現在可以使用了,將使用者移動到主畫面

View File

@@ -1,7 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionSha256Sum=5b9c5eb3f9fc2c94abaea57d90bd78747ca117ddbbf96c859d3741181a12bf2a
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
distributionSha256Sum=31c55713e40233a8303827ceb42ca48a47267a0ad4bab9177123121e71524c26
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME