Compare commits

...

454 Commits

Author SHA1 Message Date
Sylvia van Os
0189f13ee6 Retag 2.18.0 as 2.18.1
I accidentally built the .apk and uploaded it to Google Play before
doing a "git pull" or my main branch. So the 2.18.0 I uploaded to Google
Play was wrong. Because Google doesn't allow me to undo a release that
not a single person has installed yet, I'm retagging 2.18.0 as 2.18.1 to
keep it consistent on all platforms.
2022-07-24 19:56:38 +02:00
Sylvia van Os
11e32712f3 Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2022-07-24 19:40:58 +02:00
Sylvia van Os
d124894d34 Release Catima 2.18.0 2022-07-24 19:40:39 +02:00
Sylvia van Os
84bfcf2b3f Merge pull request #956 from CatimaLoyalty/create-pull-request/patch-1658682152
Update Fastlane changelogs
2022-07-24 19:04:34 +02:00
TheLastProject
8e96096353 Update Fastlane changelogs 2022-07-24 17:02:32 +00:00
Sylvia van Os
a4739b2001 Merge pull request #955 from CatimaLoyalty/fix/currencyParsing
Fixes to currency parsing
2022-07-24 19:02:16 +02:00
Sylvia van Os
d3f5f33b53 Document parsing fix 2022-07-24 18:52:54 +02:00
Sylvia van Os
11bb1aa126 Remove unused imports 2022-07-24 18:42:16 +02:00
Sylvia van Os
688010cae4 Fixes to currency parsing 2022-07-24 18:14:49 +02:00
Sylvia van Os
150482eb56 Merge pull request #954 from CatimaLoyalty/create-pull-request/patch-1658639980
Update contributors
2022-07-24 12:37:26 +02:00
TheLastProject
c5e98c62ec Update contributors 2022-07-24 05:19:40 +00:00
Sylvia van Os
7b2f8885b1 Enable Arabic translation 2022-07-24 00:00:03 +02:00
Sylvia van Os
d4a7c33787 Merge pull request #952 from CatimaLoyalty/create-pull-request/patch-1658612341
Update Fastlane changelogs
2022-07-23 23:40:28 +02:00
TheLastProject
0cd245cafc Update Fastlane changelogs 2022-07-23 21:39:00 +00:00
Sylvia van Os
7487993537 Document Arabic language support in CHANGELOG 2022-07-23 23:38:41 +02:00
bors[bot]
33b7829b88 Merge #951
951: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)

Co-authored-by: Yousef Ryan <youssefryan3@gmail.com>
Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
2022-07-23 21:31:43 +00:00
Sylvia van Os
7531853548 Translated using Weblate (Arabic)
Currently translated at 2.7% (3 of 109 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ar/
2022-07-23 23:30:48 +02:00
Yousef Ryan
3b77cf6f8a Translated using Weblate (Arabic)
Currently translated at 100.0% (259 of 259 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ar/
2022-07-23 23:24:40 +02:00
Sylvia van Os
7b0f459337 Merge pull request #949 from CatimaLoyalty/create-pull-request/patch-1658590793
Update Fastlane changelogs
2022-07-23 17:41:25 +02:00
TheLastProject
b498ffd66e Update Fastlane changelogs 2022-07-23 15:39:52 +00:00
Sylvia van Os
6c8440a95f Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2022-07-23 17:39:10 +02:00
Sylvia van Os
6bb8cc8bc9 Fix back icon direction on RTL layouts 2022-07-23 17:38:51 +02:00
bors[bot]
dad531876a Merge #947
947: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)

Co-authored-by: Yousef Ryan <youssefryan3@gmail.com>
2022-07-22 23:00:05 +00:00
Yousef Ryan
205a629071 Added translation using Weblate (Arabic) 2022-07-23 00:56:48 +02:00
Sylvia van Os
b7704cc55e Merge pull request #946 from CatimaLoyalty/create-pull-request/patch-1658437884
Update Fastlane changelogs
2022-07-21 23:11:57 +02:00
TheLastProject
84ddbef585 Update Fastlane changelogs 2022-07-21 21:11:24 +00:00
Sylvia van Os
3bed947ba9 Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2022-07-21 23:11:02 +02:00
Sylvia van Os
23d2faf107 Hack to not crash in RTL
I don't understand why it can be null. I don't understand why everything
still looks fine when I do this. But it fixes a crash so hey, that's
good right?
2022-07-21 23:09:56 +02:00
Sylvia van Os
b1d06a0be1 Merge pull request #944 from CatimaLoyalty/create-pull-request/patch-1658434626
Update Fastlane changelogs
2022-07-21 22:19:46 +02:00
TheLastProject
83ad3e2200 Update Fastlane changelogs 2022-07-21 20:17:06 +00:00
Sylvia van Os
84dcce6018 Update CHANGELOG 2022-07-21 22:16:48 +02:00
Sylvia van Os
d447ea7ff8 Merge pull request #943 from SamarthAsthan/master
Added new look to selected card
2022-07-21 22:14:59 +02:00
Samarth Asthan
91f8856efe Selected card fix 2022-07-22 00:26:54 +05:30
bors[bot]
77e45626bb Merge #942
942: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)

Co-authored-by: Slávek Banko <slavek.banko@axis.cz>
2022-07-19 20:19:30 +00:00
Slávek Banko
a61304a72a Translated using Weblate (Czech)
Currently translated at 100.0% (259 of 259 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2022-07-19 22:16:46 +02:00
Sylvia van Os
7336075860 Merge pull request #940 from CatimaLoyalty/create-pull-request/patch-1658035831
Update contributors
2022-07-17 11:06:50 +02:00
TheLastProject
6dbd70fced Update contributors 2022-07-17 05:30:31 +00:00
bors[bot]
81c7d8a259 Merge #938
938: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)

Co-authored-by: Freddo espresso <weblate.3n7cf@simplelogin.co>
Co-authored-by: SC <lalocas@protonmail.com>
2022-07-14 19:23:45 +00:00
SC
a6a899e696 Translated using Weblate (Portuguese)
Currently translated at 100.0% (259 of 259 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt/
2022-07-14 21:18:05 +02:00
Freddo espresso
4ae314b3a0 Translated using Weblate (Greek)
Currently translated at 1.8% (2 of 109 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/el/
2022-07-14 21:18:05 +02:00
Freddo espresso
16ac55fd67 Translated using Weblate (Greek)
Currently translated at 100.0% (259 of 259 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2022-07-14 21:18:05 +02:00
Sylvia van Os
c659065986 Merge pull request #936 from CatimaLoyalty/create-pull-request/patch-1657430685
Update contributors
2022-07-10 11:33:44 +02:00
TheLastProject
f1a6b5a7a8 Update contributors 2022-07-10 05:24:45 +00:00
Sylvia van Os
036de26e2a Merge pull request #935 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-07-08 23:50:02 +02:00
Oğuz Ersen
5ca0919546 Translated using Weblate (Turkish)
Currently translated at 67.8% (74 of 109 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2022-07-08 22:18:15 +02:00
Oğuz Ersen
4430df50fe Translated using Weblate (Turkish)
Currently translated at 100.0% (259 of 259 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2022-07-08 22:18:15 +02:00
109247019824
4ff7913283 Translated using Weblate (Bulgarian)
Currently translated at 9.1% (10 of 109 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/bg/
2022-07-08 22:18:15 +02:00
109247019824
0376245dbc Translated using Weblate (Bulgarian)
Currently translated at 100.0% (259 of 259 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2022-07-08 22:18:15 +02:00
J. Lavoie
3052c40359 Translated using Weblate (Finnish)
Currently translated at 98.0% (254 of 259 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2022-07-08 22:18:15 +02:00
Slávek Banko
64af34ca71 Translated using Weblate (Czech)
Currently translated at 100.0% (109 of 109 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2022-07-08 22:18:15 +02:00
solokot
aba95bbd8a Translated using Weblate (Russian)
Currently translated at 100.0% (259 of 259 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2022-07-08 22:18:15 +02:00
Heimen Stoffels
5de2a40a54 Translated using Weblate (Dutch)
Currently translated at 100.0% (259 of 259 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2022-07-08 22:18:15 +02:00
J. Lavoie
c12c5a6cc4 Translated using Weblate (Italian)
Currently translated at 100.0% (259 of 259 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2022-07-08 22:18:15 +02:00
J. Lavoie
8674520d46 Translated using Weblate (French)
Currently translated at 100.0% (259 of 259 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2022-07-08 22:18:15 +02:00
J. Lavoie
06d3a5fe54 Translated using Weblate (German)
Currently translated at 100.0% (259 of 259 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2022-07-08 22:18:15 +02:00
Slávek Banko
6c485af249 Translated using Weblate (Czech)
Currently translated at 100.0% (259 of 259 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2022-07-08 22:18:15 +02:00
Sylvia van Os
f0ed989463 Merge pull request #934 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-07-07 21:21:22 +02:00
J. Lavoie
05de9d6941 Translated using Weblate (Finnish)
Currently translated at 98.0% (253 of 258 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2022-07-07 20:14:46 +02:00
Sylvia van Os
2ddebc5970 Merge pull request #933 from CatimaLoyalty/create-pull-request/patch-1657142599
Update Fastlane changelogs
2022-07-06 23:24:59 +02:00
TheLastProject
f1265bf84e Update Fastlane changelogs 2022-07-06 21:23:19 +00:00
Sylvia van Os
dc4c4be4c7 Document group archive count 2022-07-06 23:23:00 +02:00
alajemba-vik
d5100b97f3 Show groups archived count (#930)
Fixes #924
2022-07-06 23:21:59 +02:00
Sylvia van Os
31dc05f6b2 Merge pull request #932 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-07-05 18:57:40 +02:00
Oğuz Ersen
ca7ee9e694 Translated using Weblate (Turkish)
Currently translated at 100.0% (258 of 258 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2022-07-05 12:18:21 +02:00
109247019824
7acc2e28cd Translated using Weblate (Bulgarian)
Currently translated at 100.0% (258 of 258 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2022-07-05 12:18:21 +02:00
Slávek Banko
7eff64bf26 Translated using Weblate (Czech)
Currently translated at 100.0% (109 of 109 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2022-07-05 12:18:20 +02:00
solokot
d5d3cfa4e8 Translated using Weblate (Russian)
Currently translated at 100.0% (258 of 258 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2022-07-05 12:18:20 +02:00
Heimen Stoffels
2b937eda7c Translated using Weblate (Dutch)
Currently translated at 100.0% (258 of 258 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2022-07-05 12:18:20 +02:00
Giovanni Donisi
118b5a90b6 Translated using Weblate (Italian)
Currently translated at 100.0% (258 of 258 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2022-07-05 12:18:20 +02:00
J. Lavoie
d9c9295220 Translated using Weblate (French)
Currently translated at 100.0% (258 of 258 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2022-07-05 12:18:20 +02:00
Slávek Banko
eb4b6f276e Translated using Weblate (Czech)
Currently translated at 100.0% (258 of 258 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2022-07-05 12:18:20 +02:00
Sylvia van Os
52e68df515 Merge pull request #931 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-07-04 17:11:39 +02:00
Oğuz Ersen
c23973086c Translated using Weblate (Turkish)
Currently translated at 67.8% (74 of 109 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2022-07-04 11:18:49 +02:00
Slávek Banko
34be79f3d2 Translated using Weblate (Czech)
Currently translated at 100.0% (109 of 109 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2022-07-04 11:18:49 +02:00
bors[bot]
a8082748ad Merge #920
920: Crash on clicking "Add from image" button in scan activity #856 r=TheLastProject a=alajemba-vik

This PR contains a fix for issue #856, which concerns a crash that occurs when no activity can handle the intent to pick an image file.

### The simplest way to reproduce
* Disable all the gallery apps (e.g., Google Photos)
* Go to the ScanActivity by clicking the FAB on the home screen
* The app crashes when you click the button "Select image from gallery"

### Expected behavior
Clicking that button should have launched a gallery app, or displayed a disambiguation dialog if there is more than one app that can handle the intent being invoked.

### Solution
Wrapped the call to launch in a try-catch block.

Co-authored-by: Alajemba <alajemba.dev@gmail.com>
2022-07-03 17:18:36 +00:00
Sylvia van Os
08a4de919f Merge pull request #929 from CatimaLoyalty/create-pull-request/patch-1656825915
Update contributors
2022-07-03 16:48:37 +02:00
TheLastProject
7ce54ec0d3 Update contributors 2022-07-03 05:25:15 +00:00
bors[bot]
ce7dad0c8e Merge #928
928: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)

Co-authored-by: solokot <solokot@gmail.com>
Co-authored-by: Artem <artem@molotov.work>
2022-07-02 08:21:48 +00:00
Artem
e059ed361d Translated using Weblate (Ukrainian)
Currently translated at 32.7% (35 of 107 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2022-07-02 10:17:51 +02:00
solokot
d12d641913 Translated using Weblate (Russian)
Currently translated at 2.8% (3 of 107 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2022-07-02 10:17:51 +02:00
Artem
5336b37133 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (257 of 257 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2022-07-02 10:17:51 +02:00
solokot
1819476a71 Translated using Weblate (Russian)
Currently translated at 100.0% (257 of 257 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2022-07-02 10:17:51 +02:00
Alajemba
e2c621ec1f Wrapped call to launch photo picker in LoyaltyCardEditActivity in try-catch block 2022-06-30 20:57:26 +00:00
Sylvia van Os
854bca27ae Merge pull request #922 from CatimaLoyalty/create-pull-request/patch-1656531042
Update Fastlane changelogs
2022-06-29 21:43:51 +02:00
TheLastProject
b1dd9fa38a Update Fastlane changelogs 2022-06-29 19:30:42 +00:00
Sylvia van Os
8776ed61e9 Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2022-06-29 21:30:19 +02:00
Sylvia van Os
c35fe166ed Fix custom theme not applying to main screen correctly
We were using the SplashScreen incorrectly. While it isn't consistently
documented, I managed to find a small note on
https://developer.android.com/reference/kotlin/androidx/core/splashscreen/SplashScreen#usage-of-the-core-splashscreen-library:
which states that installSplashScreen has to be called BEFORE onCreate.
Doing this fixing some theming bugs and allows deleting a hacky and
buggy workaround.
2022-06-29 21:28:56 +02:00
Sylvia van Os
0126b6d6da Merge pull request #921 from CatimaLoyalty/dependabot/gradle/com.android.tools-desugar_jdk_libs-1.1.6
Bump desugar_jdk_libs from 1.1.5 to 1.1.6
2022-06-29 20:28:41 +02:00
dependabot[bot]
4ecb877e27 Bump desugar_jdk_libs from 1.1.5 to 1.1.6
Bumps [desugar_jdk_libs](https://github.com/google/desugar_jdk_libs) from 1.1.5 to 1.1.6.
- [Release notes](https://github.com/google/desugar_jdk_libs/releases)
- [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>
2022-06-29 02:23:13 +00:00
Sylvia van Os
1c2e810319 Release Catima 2.17.1 2022-06-28 19:49:44 +02:00
Alajemba
4f7f72f213 Fix for 'Crash on clicking "Add from image" button in scan activity #856' 2022-06-28 06:33:36 +00:00
Sylvia van Os
88d27c0385 Fix hardcoded text colour 2022-06-27 22:28:43 +02:00
Sylvia van Os
2f1f6ed452 Merge pull request #916 from CatimaLoyalty/create-pull-request/patch-1656220588
Update contributors
2022-06-26 10:24:16 +02:00
TheLastProject
1ac816000d Update contributors 2022-06-26 05:16:28 +00:00
Sylvia van Os
aa069e93b1 Metadata fixes 2022-06-24 22:47:44 +02:00
Sylvia van Os
2f0084a73b Release Catima 2.17.0 2022-06-24 21:25:56 +02:00
Sylvia van Os
68624f8911 Merge pull request #913 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-06-24 19:25:56 +02:00
SC
5d7c503465 Translated using Weblate (Portuguese)
Currently translated at 100.0% (257 of 257 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt/
2022-06-24 19:17:40 +02:00
Freddo espresso
9015b17de6 Translated using Weblate (Greek)
Currently translated at 0.9% (1 of 107 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/el/
2022-06-24 19:17:40 +02:00
Freddo espresso
a5f7265bd6 Translated using Weblate (Greek)
Currently translated at 29.9% (77 of 257 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/el/
2022-06-24 19:17:40 +02:00
Sylvia van Os
b03d579ee7 Merge pull request #911 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-06-24 17:18:31 +02:00
Sylvia van Os
f4511aa82e Merge pull request #912 from CatimaLoyalty/dependabot/gradle/net.lingala.zip4j-zip4j-2.11.1
Bump zip4j from 2.11.0 to 2.11.1
2022-06-24 17:18:20 +02:00
dependabot[bot]
69da7e1e2c Bump zip4j from 2.11.0 to 2.11.1
Bumps [zip4j](https://github.com/srikanth-lingala/zip4j) from 2.11.0 to 2.11.1.
- [Release notes](https://github.com/srikanth-lingala/zip4j/releases)
- [Commits](https://github.com/srikanth-lingala/zip4j/compare/v2.11.0...v2.11.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-24 02:28:08 +00:00
Sylvia van Os
b3de8428f8 Cleanups 2022-06-23 18:51:22 +02:00
Astro Hops
7edf97774b Translated using Weblate (Polish)
Currently translated at 2.8% (3 of 107 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pl/
2022-06-23 13:17:59 +02:00
Astro Hops
fddad366d6 Translated using Weblate (Polish)
Currently translated at 100.0% (257 of 257 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2022-06-23 13:17:59 +02:00
Sylvia van Os
fcb03791b1 Merge pull request #910 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-06-21 22:48:35 +02:00
Altons
e25b0ee251 Translated using Weblate (French)
Currently translated at 100.0% (257 of 257 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2022-06-21 22:15:16 +02:00
Altons
c5b5b0e979 Translated using Weblate (German)
Currently translated at 100.0% (257 of 257 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2022-06-21 22:15:16 +02:00
Sylvia van Os
347e975d9b Merge pull request #909 from CatimaLoyalty/dependabot/gradle/net.lingala.zip4j-zip4j-2.11.0
Bump zip4j from 2.10.0 to 2.11.0
2022-06-21 19:38:24 +02:00
dependabot[bot]
8890788c3d Bump zip4j from 2.10.0 to 2.11.0
Bumps [zip4j](https://github.com/srikanth-lingala/zip4j) from 2.10.0 to 2.11.0.
- [Release notes](https://github.com/srikanth-lingala/zip4j/releases)
- [Commits](https://github.com/srikanth-lingala/zip4j/compare/v2.10.0...v2.11.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-21 02:45:04 +00:00
Sylvia van Os
9f9da82e18 Merge pull request #908 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-06-20 21:27:14 +02:00
Oğuz Ersen
ab8490798b Translated using Weblate (Turkish)
Currently translated at 67.2% (72 of 107 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2022-06-20 21:20:05 +02:00
Oğuz Ersen
c4b9bf77d9 Translated using Weblate (Turkish)
Currently translated at 100.0% (257 of 257 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2022-06-20 21:20:05 +02:00
109247019824
a1a653b939 Translated using Weblate (Bulgarian)
Currently translated at 6.5% (7 of 107 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/bg/
2022-06-20 21:20:05 +02:00
109247019824
f9cf64a2ea Translated using Weblate (Bulgarian)
Currently translated at 100.0% (257 of 257 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2022-06-20 21:20:05 +02:00
Slávek Banko
83e9a01b8d Translated using Weblate (Czech)
Currently translated at 100.0% (107 of 107 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2022-06-20 21:20:05 +02:00
solokot
1d776914ee Translated using Weblate (Russian)
Currently translated at 100.0% (257 of 257 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2022-06-20 21:20:05 +02:00
Heimen Stoffels
bfc103dca9 Translated using Weblate (Dutch)
Currently translated at 100.0% (257 of 257 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2022-06-20 21:20:05 +02:00
Allan Nordhøy
0281f15b36 Translated using Weblate (Norwegian Bokmål)
Currently translated at 98.4% (253 of 257 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nb_NO/
2022-06-20 21:20:05 +02:00
J. Lavoie
e1929de4b3 Translated using Weblate (Italian)
Currently translated at 100.0% (257 of 257 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2022-06-20 21:20:05 +02:00
J. Lavoie
81699dbed9 Translated using Weblate (French)
Currently translated at 100.0% (257 of 257 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2022-06-20 21:20:05 +02:00
J. Lavoie
5c42342070 Translated using Weblate (German)
Currently translated at 99.6% (256 of 257 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2022-06-20 21:20:05 +02:00
Slávek Banko
f1c21fc7fe Translated using Weblate (Czech)
Currently translated at 100.0% (257 of 257 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2022-06-20 21:20:05 +02:00
Sylvia van Os
7c418dc416 Revert "Hardcode Google Play "Varies with device" value"
This reverts commit 677283c872.
2022-06-20 19:50:23 +02:00
Sylvia van Os
3610e9dfb2 Merge pull request #906 from CatimaLoyalty/create-pull-request/patch-1655616434
Update contributors
2022-06-19 10:51:33 +02:00
TheLastProject
c5793da52c Update contributors 2022-06-19 05:27:14 +00:00
Sylvia van Os
deef5ced0c Merge pull request #905 from CatimaLoyalty/create-pull-request/patch-1655590869
Update Fastlane changelogs
2022-06-19 00:21:41 +02:00
TheLastProject
7861f6cd8c Update Fastlane changelogs 2022-06-18 22:21:09 +00:00
Sylvia van Os
4ad73a754e Replace rotation lock icon with barcode orientation setting (#901) 2022-06-19 00:20:56 +02:00
Sylvia van Os
d3487cc535 Merge pull request #902 from CatimaLoyalty/feature/archive
Archive support
2022-06-18 14:13:16 +02:00
Sylvia van Os
677283c872 Hardcode Google Play "Varies with device" value
Fixes #903
2022-06-18 13:09:24 +02:00
Sylvia van Os
d39b732b77 Fix export and shortcut bugs 2022-06-17 19:53:51 +02:00
Sylvia van Os
5242290a8f Update CHANGELOG 2022-06-17 17:50:08 +02:00
Sylvia van Os
9d07c1a29c Cleanups 2022-06-16 23:53:46 +02:00
Jasielprogramador
548b1b1e8e Archive support 2022-06-16 22:59:11 +02:00
Sylvia van Os
8318d2e7c3 Merge pull request #897 from CatimaLoyalty/create-pull-request/patch-1655011240
Update contributors
2022-06-12 10:49:13 +02:00
TheLastProject
99e836a8f1 Update contributors 2022-06-12 05:20:39 +00:00
Sylvia van Os
3586d27249 Update Fastlane 2022-06-08 18:49:46 +02:00
Sylvia van Os
5904ba2af7 Merge pull request #895 from CatimaLoyalty/create-pull-request/patch-1654548179
Update Fastlane changelogs
2022-06-06 22:45:39 +02:00
TheLastProject
48b89af11a Update Fastlane changelogs 2022-06-06 20:42:59 +00:00
Sylvia van Os
0b0a5cc5fa Reword 2022-06-06 22:42:40 +02:00
Sylvia van Os
098f987d66 Update CHANGELOG 2022-06-06 22:40:01 +02:00
Sylvia van Os
0083150fa9 Merge pull request #893 from pooyanazari/MinOfExpireDate
Set min date for expire date #753
2022-06-06 22:39:07 +02:00
pooyanazari
1c4b4f1f25 Set min date for expire date 2022-06-06 21:58:29 +04:30
Sylvia van Os
b7f596568d Merge pull request #892 from CatimaLoyalty/dependabot/gradle/androidx.appcompat-appcompat-1.4.2
Bump appcompat from 1.4.1 to 1.4.2
2022-06-02 20:17:00 +02:00
dependabot[bot]
2df7b9e8c6 Bump appcompat from 1.4.1 to 1.4.2
Bumps appcompat from 1.4.1 to 1.4.2.

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-02 02:29:19 +00:00
Sylvia van Os
c37e5f4076 Merge pull request #890 from CatimaLoyalty/dependabot/gradle/com.google.android.material-material-1.6.1
Bump material from 1.6.0 to 1.6.1
2022-06-01 17:15:35 +02:00
dependabot[bot]
8840390b3a Bump material from 1.6.0 to 1.6.1
Bumps [material](https://github.com/material-components/material-components-android) from 1.6.0 to 1.6.1.
- [Release notes](https://github.com/material-components/material-components-android/releases)
- [Commits](https://github.com/material-components/material-components-android/compare/1.6.0...1.6.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-01 03:46:22 +00:00
Sylvia van Os
a8a8ac59b0 Merge pull request #889 from CatimaLoyalty/create-pull-request/patch-1653802088
Update contributors
2022-05-29 12:20:36 +02:00
TheLastProject
a2e37a82b7 Update contributors 2022-05-29 05:28:08 +00:00
Sylvia van Os
1b52cafea6 Merge pull request #886 from CatimaLoyalty/create-pull-request/patch-1653505625
Update Fastlane changelogs
2022-05-25 21:07:46 +02:00
TheLastProject
706bf36584 Update Fastlane changelogs 2022-05-25 19:07:05 +00:00
Sylvia van Os
05f3b77a73 Various minor fixes 2022-05-25 21:06:43 +02:00
Asier
00b0502a6a Add card duplication feature 2022-05-25 21:03:11 +02:00
Sylvia van Os
ed755c35b4 Merge pull request #883 from CatimaLoyalty/dependabot/gradle/androidx.core-core-splashscreen-1.0.0-rc01
Bump core-splashscreen from 1.0.0-beta02 to 1.0.0-rc01
2022-05-20 21:50:31 +02:00
dependabot[bot]
3101688abb Bump core-splashscreen from 1.0.0-beta02 to 1.0.0-rc01
Bumps core-splashscreen from 1.0.0-beta02 to 1.0.0-rc01.

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-19 02:24:30 +00:00
Sylvia van Os
98c9c9ce15 Merge pull request #882 from CatimaLoyalty/create-pull-request/patch-1652592163
Update contributors
2022-05-15 10:52:13 +02:00
TheLastProject
3040cbf7a7 Update contributors 2022-05-15 05:22:42 +00:00
Sylvia van Os
806b232d60 Merge pull request #878 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-05-11 19:24:36 +02:00
Moi Toi
982e012940 Translated using Weblate (French)
Currently translated at 21.6% (23 of 106 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2022-05-11 19:14:06 +02:00
Grzegorz
e2cff0f11e Translated using Weblate (Polish)
Currently translated at 99.1% (241 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pl/
2022-05-11 19:14:06 +02:00
Sylvia van Os
e678bae95c Merge pull request #875 from CatimaLoyalty/dependabot/gradle/com.google.android.material-material-1.6.0
Bump material from 1.5.0 to 1.6.0
2022-05-10 13:51:55 +02:00
Sylvia van Os
c3758f2a23 Merge pull request #874 from CatimaLoyalty/dependabot/gradle/org.robolectric-robolectric-4.8.1
Bump robolectric from 4.7.3 to 4.8.1
2022-05-10 13:38:29 +02:00
Sylvia van Os
4852e61c99 Merge pull request #876 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-05-05 19:53:25 +02:00
Slávek Banko
74d55c8b73 Translated using Weblate (Czech)
Currently translated at 100.0% (243 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2022-05-05 15:09:58 +02:00
dependabot[bot]
89670b5176 Bump material from 1.5.0 to 1.6.0
Bumps [material](https://github.com/material-components/material-components-android) from 1.5.0 to 1.6.0.
- [Release notes](https://github.com/material-components/material-components-android/releases)
- [Commits](https://github.com/material-components/material-components-android/compare/1.5.0...1.6.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-05 02:27:24 +00:00
dependabot[bot]
6840f39e35 Bump robolectric from 4.7.3 to 4.8.1
Bumps [robolectric](https://github.com/robolectric/robolectric) from 4.7.3 to 4.8.1.
- [Release notes](https://github.com/robolectric/robolectric/releases)
- [Commits](https://github.com/robolectric/robolectric/compare/robolectric-4.7.3...robolectric-4.8.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-04 02:23:24 +00:00
bors[bot]
635fb0105b Merge #873
873: Bump core from 3.4.1 to 3.5.0 r=TheLastProject a=dependabot[bot]

Bumps [core](https://github.com/zxing/zxing) from 3.4.1 to 3.5.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/zxing/zxing/releases">core's releases</a>.</em></p>
<blockquote>
<h2>ZXing 3.5.0</h2>
<ul>
<li>Many edge-case fixes and improvements from <a href="https://bugs.chromium.org/p/oss-fuzz/issues/list">oss-fuzz</a></li>
<li>Various improvements and fixes to Aztec, PDF417, DataMatrix decoding</li>
<li>New 'minimal' encoding mode from <a href="https://github.com/AlexGeller1"><code>`@​AlexGeller1</code></a>` (<a href="https://github-redirect.dependabot.com/zxing/zxing/issues/1444">zxing/zxing#1444</a>)</li>
</ul>
<p>See <a href="https://github.com/zxing/zxing/milestone/13?closed=1">https://github.com/zxing/zxing/milestone/13?closed=1</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/zxing/zxing/blob/master/CHANGES">core's changelog</a>.</em></p>
<blockquote>
<p>0.1 (09 Nov 2007)</p>
<ul>
<li>Initial release</li>
</ul>
<p>0.1.1 (11 Nov 2007)</p>
<ul>
<li>Fixed bug decoding version 0 QR Codes</li>
<li>Now default zoom is 2.5x in Java ME client</li>
</ul>
<p>0.1.2 (28 Nov 2007)</p>
<ul>
<li>Issue 11 fixed: Build problems on Windows</li>
<li>Can now build &quot;ZXingReaderBasic&quot; which does not require JSR-234</li>
<li>Issue 14 fixed: release .zip builds into one directory</li>
</ul>
<p>0.1.3 (7 Dec 2007)</p>
<ul>
<li>Unit test for QR Code decoding</li>
<li>Added EAN-13 support</li>
<li>Now builds with class file format version 1.2 -- may solve some compatibility issues?</li>
<li>Fixed obfuscation step bug causing NoClassDefFoundError</li>
</ul>
<p>0.1.4 (13 Dec 2007)</p>
<ul>
<li>Added Blackberry client build script -- does not yet work</li>
<li>Big change to handling of content of barcodes:
<ul>
<li>com.google.zxing.client.result moved from core-ext to core</li>
<li>Rewritten for J2ME</li>
<li>core-ext removed</li>
<li>J2ME client now uses this code for better parsing/handling of results</li>
</ul>
</li>
</ul>
<p>0.2 (07 Jan 2008)</p>
<ul>
<li>Few small bug fixes in AlignmentPatternFinder, MultiFormatReader
(thank K. Kakima, Andreas)</li>
<li>LCDUIImageMonochromeBitmapSource now public</li>
<li>Notably improved decoding for Basic version -- Regular version still
your best bet if you can run it though</li>
</ul>
<p>0.2.1 (16 Jan 2008)</p>
<ul>
<li>Slight tweaks and enhancements to decode and runtime performance of UPCDecoder</li>
<li>Added black-box test suites against a known set of images
(Thanks to Enrique G. S. for additional images)</li>
</ul>
<p>0.2.2 (22 Jan 2008)</p>
<ul>
<li>Now includes junit locally to build tests</li>
<li>Fixed &quot;MIDlet&quot; name in MANIFEST.MF, which may solve some problems</li>
<li>Friendlier error message when barcode can't be found</li>
</ul>
<p>0.3 (04 Feb 2008)</p>
<ul>
<li>Major refactoring of 1D barcode decoding</li>
<li>Added support for UPC-E, EAN-8</li>
<li>Also added Code 39, Code 128 support -- may need refinement</li>
<li>Now any &quot;game&quot; key triggers photo capture</li>
<li>Workaround implemented for Nokias that use &quot;capture://image&quot; in MMAPI</li>
<li>UPC codes now trigger lookup to upcdatabase.com</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="eb76d0283c"><code>eb76d02</code></a> [maven-release-plugin] prepare release zxing-3.5.0</li>
<li><a href="89a56210cc"><code>89a5621</code></a> Update Android modules for 3.5.0</li>
<li><a href="939632072f"><code>9396320</code></a> Minor dep updates</li>
<li><a href="fbeeae49f5"><code>fbeeae4</code></a> Update README.md: Add SCodes Qt/Qml wrapper library link (<a href="https://github-redirect.dependabot.com/zxing/zxing/issues/1518">#1518</a>)</li>
<li><a href="4f9f466f7d"><code>4f9f466</code></a> Update AndroidManifest.xml: set exported flag (<a href="https://github-redirect.dependabot.com/zxing/zxing/issues/1516">#1516</a>)</li>
<li><a href="5f20b8d095"><code>5f20b8d</code></a> Replacing non ISO-8859-1 characters in PDF417 input with '?' (<a href="https://github-redirect.dependabot.com/zxing/zxing/issues/1514">#1514</a>)</li>
<li><a href="8265242784"><code>8265242</code></a> Share the ECI string builder of the data matrix decoder with the PDF417 decod...</li>
<li><a href="ce1a1a53cf"><code>ce1a1a5</code></a> Add multi-eci decoding for PDF417 (<a href="https://github-redirect.dependabot.com/zxing/zxing/issues/1507">#1507</a>)</li>
<li><a href="92854d4a55"><code>92854d4</code></a> Add support for multi-eci encoding for PDF417 (<a href="https://github-redirect.dependabot.com/zxing/zxing/issues/1506">#1506</a>)</li>
<li><a href="4bd257e8c5"><code>4bd257e</code></a> BitArray perf improvement, possibly addressing <a href="https://bugs.chromium.org/p/os">https://bugs.chromium.org/p/os</a>...</li>
<li>Additional commits viewable in <a href="https://github.com/zxing/zxing/compare/zxing-3.4.1...zxing-3.5.0">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.google.zxing:core&package-manager=gradle&previous-version=3.4.1&new-version=3.5.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting ``@dependabot` rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- ``@dependabot` rebase` will rebase this PR
- ``@dependabot` recreate` will recreate this PR, overwriting any edits that have been made to it
- ``@dependabot` merge` will merge this PR after your CI passes on it
- ``@dependabot` squash and merge` will squash and merge this PR after your CI passes on it
- ``@dependabot` cancel merge` will cancel a previously requested merge and block automerging
- ``@dependabot` reopen` will reopen this PR if it is closed
- ``@dependabot` close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- ``@dependabot` ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- ``@dependabot` ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- ``@dependabot` ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-05-02 17:01:53 +00:00
dependabot[bot]
9ad50041b5 Bump core from 3.4.1 to 3.5.0
Bumps [core](https://github.com/zxing/zxing) from 3.4.1 to 3.5.0.
- [Release notes](https://github.com/zxing/zxing/releases)
- [Changelog](https://github.com/zxing/zxing/blob/master/CHANGES)
- [Commits](https://github.com/zxing/zxing/compare/zxing-3.4.1...zxing-3.5.0)

---
updated-dependencies:
- dependency-name: com.google.zxing:core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-05-02 02:24:32 +00:00
Sylvia van Os
0887a16555 Merge pull request #872 from CatimaLoyalty/create-pull-request/patch-1651383162
Update contributors
2022-05-01 11:23:07 +02:00
TheLastProject
ea690d19dc Update contributors 2022-05-01 05:32:42 +00:00
Sylvia van Os
40f7b6e417 Merge pull request #870 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-04-27 11:33:25 +02:00
IllusiveMan196
25b3e18618 Translated using Weblate (Ukrainian)
Currently translated at 33.0% (35 of 106 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2022-04-26 04:08:03 +02:00
IllusiveMan196
aa28a52855 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (243 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2022-04-26 04:08:03 +02:00
Sylvia van Os
fe87fe1981 Merge pull request #869 from CatimaLoyalty/create-pull-request/patch-1650777439
Update contributors
2022-04-24 09:16:25 +02:00
TheLastProject
6f66b95506 Update contributors 2022-04-24 05:17:19 +00:00
bors[bot]
a80ab32f07 Merge #868
868: Deps/net.lingala.zip4j zip4j 2.10.0 r=TheLastProject a=TheLastProject



Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
2022-04-17 12:27:33 +00:00
Sylvia van Os
de6248a5d6 Fix wrong password detection 2022-04-17 14:25:26 +02:00
dependabot[bot]
cfbaeb1ffc Bump zip4j from 2.9.1 to 2.10.0
Bumps [zip4j](https://github.com/srikanth-lingala/zip4j) from 2.9.1 to 2.10.0.
- [Release notes](https://github.com/srikanth-lingala/zip4j/releases)
- [Commits](https://github.com/srikanth-lingala/zip4j/compare/v2.9.1...v2.10.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-04-17 12:13:30 +00:00
Sylvia van Os
749a4ddb29 Merge pull request #867 from CatimaLoyalty/create-pull-request/patch-1650172610
Update contributors
2022-04-17 10:52:53 +02:00
TheLastProject
4c070c3137 Update contributors 2022-04-17 05:16:50 +00:00
bors[bot]
5cb8cf3a14 Merge #866
866: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
Co-authored-by: 109247019824 <stoyan@gmx.com>
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
2022-04-16 21:55:44 +00:00
Oğuz Ersen
a1410a588e Translated using Weblate (Turkish)
Currently translated at 60.3% (64 of 106 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2022-04-16 20:11:15 +02:00
109247019824
b2b40809ad Translated using Weblate (Bulgarian)
Currently translated at 5.6% (6 of 106 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/bg/
2022-04-16 20:11:15 +02:00
Allan Nordhøy
c092a04e9c Translated using Weblate (Norwegian Bokmål)
Currently translated at 20.7% (22 of 106 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nb_NO/
2022-04-16 20:11:15 +02:00
Allan Nordhøy
5bd3a309cc Translated using Weblate (Norwegian Bokmål)
Currently translated at 98.7% (240 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nb_NO/
2022-04-16 20:11:15 +02:00
Sylvia van Os
4bf6f6cd5f Release Catima 2.16.3 2022-04-15 18:51:42 +02:00
Sylvia van Os
1872bea0c3 Stocard: Ignore cards with missing card data
Stocard appears to keep images for deleted cards, which causes some
cards to have only images and no data, making them impossible to import.

This is most likely a bug on Stocard's side. As a workaround, we ignore
cards with no data file.
2022-04-14 22:25:46 +02:00
Sylvia van Os
665ef5f712 Merge pull request #864 from CatimaLoyalty/create-pull-request/patch-1649961053
Update Fastlane changelogs
2022-04-14 20:31:52 +02:00
TheLastProject
9fbcb23465 Update Fastlane changelogs 2022-04-14 18:30:52 +00:00
Sylvia van Os
25c35acd6d Import Stocard GS1_128 as CODE_128
GS1_128 seems to be an implementation of CODE_128. ZXING doesn't
explicitly support GS1_128, but CODE_128 should work probably.
2022-04-14 20:30:35 +02:00
Sylvia van Os
35747b7d9f Fix import getting stuck on unexpected exception 2022-04-14 20:20:36 +02:00
Sylvia van Os
eea5cdfdd0 Merge pull request #862 from CatimaLoyalty/create-pull-request/patch-1649567192
Update contributors
2022-04-10 11:16:32 +02:00
TheLastProject
e0c28830ab Update contributors 2022-04-10 05:06:31 +00:00
bors[bot]
e714d98ae6 Merge #860
860: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: 109247019824 <stoyan@gmx.com>
Co-authored-by: Quentin PAGÈS <quentinantonin@free.fr>
2022-04-08 20:03:02 +00:00
Sylvia van Os
bbfba92de0 Merge pull request #859 from CatimaLoyalty/create-pull-request/patch-1648963016
Update contributors
2022-04-08 22:02:32 +02:00
Quentin PAGÈS
efda8f9f10 Translated using Weblate (Occitan)
Currently translated at 39.5% (96 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/oc/
2022-04-04 09:10:40 +02:00
109247019824
041472b44b Translated using Weblate (Bulgarian)
Currently translated at 4.7% (5 of 105 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/bg/
2022-04-04 09:10:40 +02:00
TheLastProject
92f79e9d3e Update contributors 2022-04-03 05:16:56 +00:00
Sylvia van Os
f932d8f6e4 Release Catima 2.16.2 2022-03-31 23:11:03 +02:00
bors[bot]
5e3399cd32 Merge #857
857: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: 109247019824 <stoyan@gmx.com>
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
2022-03-31 20:57:20 +00:00
Oğuz Ersen
b736f31dc2 Translated using Weblate (Turkish)
Currently translated at 60.0% (63 of 105 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2022-03-31 22:56:04 +02:00
109247019824
ff285430c0 Translated using Weblate (Bulgarian)
Currently translated at 4.7% (5 of 105 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/bg/
2022-03-31 22:56:04 +02:00
bors[bot]
504c1ac516 Merge #855
855: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Tony C <kodo60@gmail.com>
2022-03-31 16:12:14 +00:00
Tony C
c4746fe2b9 Translated using Weblate (French)
Currently translated at 19.2% (20 of 104 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2022-03-31 18:09:35 +02:00
Sylvia van Os
99383d4fc6 Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2022-03-30 19:45:18 +02:00
Sylvia van Os
71cd16caac Fix broken colours in Fidme import 2022-03-30 19:45:10 +02:00
Sylvia van Os
6a04077cec Merge pull request #854 from CatimaLoyalty/create-pull-request/patch-1648585831
Update Fastlane changelogs
2022-03-29 22:31:42 +02:00
TheLastProject
5664ff5631 Update Fastlane changelogs 2022-03-29 20:30:30 +00:00
Sylvia van Os
48764e266e Update CHANGELOG 2022-03-29 22:29:55 +02:00
Sylvia van Os
435cfd2839 Merge pull request #853 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-03-29 22:20:08 +02:00
Sylvia van Os
34639f2a2e Don't render text sequences as single character 2022-03-29 22:19:12 +02:00
Joel A
ce9c3bffe6 Translated using Weblate (Swedish)
Currently translated at 1.9% (2 of 104 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sv/
2022-03-29 21:09:59 +02:00
Sylvia van Os
d0d15393f6 Merge pull request #850 from CatimaLoyalty/create-pull-request/patch-1648357620
Update contributors
2022-03-27 11:11:27 +02:00
TheLastProject
e9eaf51e40 Update contributors 2022-03-27 05:07:00 +00:00
bors[bot]
de8a843414 Merge #849
849: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Altons <marsupilami450@gmail.com>
2022-03-26 21:35:52 +00:00
Altons
0ad4c683b7 Translated using Weblate (German)
Currently translated at 6.7% (7 of 104 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2022-03-26 22:09:45 +01:00
Altons
fdbff0f942 Translated using Weblate (French)
Currently translated at 18.2% (19 of 104 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2022-03-26 22:09:45 +01:00
Sylvia van Os
a02d9fd995 Merge pull request #846 from CatimaLoyalty/dependabot/gradle/androidx.core-core-splashscreen-1.0.0-beta02
Bump core-splashscreen from 1.0.0-beta01 to 1.0.0-beta02
2022-03-25 21:51:52 +01:00
Sylvia van Os
d7f43f8a2b Release Catima 2.16.1 2022-03-25 20:51:01 +01:00
bors[bot]
3cbd69c6c7 Merge #847
847: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
2022-03-25 18:11:08 +00:00
Oğuz Ersen
1cff0e29e4 Translated using Weblate (Turkish)
Currently translated at 59.6% (62 of 104 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2022-03-25 15:09:48 +01:00
Sylvia van Os
e718ffb77d Translated using Weblate (Swedish)
Currently translated at 1.9% (2 of 104 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sv/
2022-03-25 15:09:45 +01:00
Sylvia van Os
c2d711650f Translated using Weblate (Slovak)
Currently translated at 1.9% (2 of 104 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2022-03-25 15:09:45 +01:00
Sylvia van Os
f205045916 Translated using Weblate (French)
Currently translated at 17.3% (18 of 104 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2022-03-25 15:09:45 +01:00
Sylvia van Os
6ed6e683b5 Translated using Weblate (Slovak)
Currently translated at 82.7% (201 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sk/
2022-03-25 15:09:44 +01:00
Sylvia van Os
1612bed309 Translated using Weblate (French)
Currently translated at 100.0% (243 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2022-03-25 15:09:43 +01:00
Sylvia van Os
ac8a2c445c Translated using Weblate (Spanish)
Currently translated at 69.1% (168 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2022-03-25 15:09:43 +01:00
dependabot[bot]
f98203fc5d Bump core-splashscreen from 1.0.0-beta01 to 1.0.0-beta02
Bumps core-splashscreen from 1.0.0-beta01 to 1.0.0-beta02.

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 02:26:52 +00:00
Sylvia van Os
82298d0d50 Merge pull request #845 from CatimaLoyalty/create-pull-request/patch-1648059304
Update Fastlane changelogs
2022-03-23 19:16:13 +01:00
TheLastProject
916515f8b2 Update Fastlane changelogs 2022-03-23 18:15:04 +00:00
Sylvia van Os
b5e6d40857 Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2022-03-23 19:14:19 +01:00
Sylvia van Os
efef397870 Fix gray block appearing on invalid value for barcode 2022-03-23 19:13:54 +01:00
Sylvia van Os
377438b6ae Merge pull request #844 from CatimaLoyalty/fix/843
Stocard import fixes
2022-03-23 17:58:39 +01:00
Sylvia van Os
27443db945 Import fix 2022-03-23 17:31:11 +01:00
Sylvia van Os
420886bc3f Make SpotBugs happy 2022-03-22 21:59:35 +01:00
Sylvia van Os
86a01d36db Fix background color generation 2022-03-22 21:46:37 +01:00
Sylvia van Os
329293fa7c Support custom providers in Stocard import 2022-03-22 21:26:36 +01:00
Sylvia van Os
26bbea7377 Fix Stocard import getting stuck 2022-03-22 20:25:39 +01:00
Sylvia van Os
50385c6e0e Merge pull request #842 from CatimaLoyalty/create-pull-request/patch-1647753417
Update contributors
2022-03-20 11:25:33 +01:00
TheLastProject
43c45c9c0c Update contributors 2022-03-20 05:16:57 +00:00
bors[bot]
17cdc58b19 Merge #841
841: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: huuhaa <huuhaa.tm+gitlab@gmail.com>
2022-03-14 16:25:13 +00:00
huuhaa
4960b77ca3 Translated using Weblate (Finnish)
Currently translated at 2.9% (3 of 103 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fi/
2022-03-14 14:56:44 +01:00
Sylvia van Os
a7c6ac695e Merge pull request #838 from CatimaLoyalty/create-pull-request/patch-1647148614
Update contributors
2022-03-13 11:05:48 +01:00
TheLastProject
63dfe27b25 Update contributors 2022-03-13 05:16:54 +00:00
bors[bot]
2ec44046a8 Merge #837
837: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: 109247019824 <stoyan@gmx.com>
Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
Co-authored-by: Jane Kong <myonjane@gmail.com>
Co-authored-by: Michael Moroni <michaelmoroni@disroot.org>
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
2022-03-12 09:28:40 +00:00
Oğuz Ersen
0363bc67e4 Translated using Weblate (Turkish)
Currently translated at 59.2% (61 of 103 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2022-03-12 09:54:37 +01:00
Sylvia van Os
affa434679 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (243 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2022-03-12 09:54:35 +01:00
Michael Moroni
ded151830e Translated using Weblate (Italian)
Currently translated at 8.7% (9 of 103 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/it/
2022-03-12 09:54:35 +01:00
109247019824
e1b604c1d2 Translated using Weblate (Bulgarian)
Currently translated at 99.5% (242 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2022-03-11 07:55:45 +01:00
Jane Kong
45d9353b54 Translated using Weblate (Chinese (Simplified))
Currently translated at 96.7% (235 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2022-03-11 07:55:45 +01:00
Sylvia van Os
ceceda560a Translated using Weblate (Bulgarian)
Currently translated at 100.0% (243 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2022-03-11 07:55:45 +01:00
109247019824
088c25dbad Translated using Weblate (Bulgarian)
Currently translated at 99.5% (242 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2022-03-11 07:55:45 +01:00
Sylvia van Os
54fc1e9106 Release Catima 2.16.0 2022-03-09 19:27:08 +01:00
Sylvia van Os
1ce4216584 Fix extreme padding on some barcode types 2022-03-09 19:07:19 +01:00
Sylvia van Os
78d0bc7bb7 Merge pull request #834 from CatimaLoyalty/create-pull-request/patch-1646770776
Update Fastlane changelogs
2022-03-08 21:20:24 +01:00
bors[bot]
fc4bb134a9 Update Fastlane changelogs 2022-03-08 20:19:35 +00:00
bors[bot]
cecfcd4714 Merge #833
833: Padding improvements r=TheLastProject a=TheLastProject

Fixes #823 

Sadly, it also caused a new regression, cutting off part of the card ID if you use AZTEC and a photo...

| Before | After |
| - | - |
| ![image](https://user-images.githubusercontent.com/1885159/157125003-e336fef8-4dbe-4f75-8d00-908bced3e533.png) | ![image](https://user-images.githubusercontent.com/1885159/157125032-41f3e8ac-9fca-4f21-9a0e-df955670814a.png) |

Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
2022-03-08 20:13:56 +00:00
Sylvia van Os
c3364d4592 Update CHANGELOG 2022-03-08 21:12:50 +01:00
Sylvia van Os
df29abbebd Fix weird UI glitch
No, I don't understand why this works. Black magic, I guess.
2022-03-08 21:10:28 +01:00
Sylvia van Os
d4f30f798b Update screenshots 2022-03-08 20:33:46 +01:00
Sylvia van Os
61578a6016 Consistency improvements 2022-03-08 19:56:42 +01:00
Sylvia van Os
13695b5c37 Padding improvements 2022-03-07 22:57:42 +01:00
Sylvia van Os
97d1dcc7eb Merge pull request #830 from CatimaLoyalty/create-pull-request/patch-1646543770
Update contributors
2022-03-06 10:41:00 +01:00
TheLastProject
5efea8c1e8 Update contributors 2022-03-06 05:16:09 +00:00
bors[bot]
c2607cc6a2 Merge #829
829: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Joel A <joeax910@student.liu.se>
2022-03-04 06:52:28 +00:00
Joel A
6c70e77a75 Translated using Weblate (Swedish)
Currently translated at 100.0% (243 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2022-03-04 04:58:38 +01:00
bors[bot]
d67c896ffe Merge #828
828: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Giovanni Donisi <giovannidonisi0701@gmail.com>
2022-02-27 14:59:06 +00:00
Giovanni Donisi
c821040c25 Translated using Weblate (Italian)
Currently translated at 100.0% (243 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2022-02-27 15:54:58 +01:00
Sylvia van Os
946a56e921 Merge pull request #827 from CatimaLoyalty/create-pull-request/patch-1645937169
Update contributors
2022-02-27 09:10:05 +01:00
TheLastProject
b1ea2c4687 Update contributors 2022-02-27 04:46:09 +00:00
bors[bot]
745dd109fb Merge #825
825: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: IllusiveMan196 <hamsterrv@gmail.com>
Co-authored-by: huuhaa <huuhaa.tm+gitlab@gmail.com>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
2022-02-22 14:03:38 +00:00
Oğuz Ersen
9f047f3dbd Translated using Weblate (Turkish)
Currently translated at 59.2% (61 of 103 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2022-02-22 14:55:20 +01:00
huuhaa
68afe746eb Translated using Weblate (Finnish)
Currently translated at 2.9% (3 of 103 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fi/
2022-02-22 14:55:20 +01:00
huuhaa
ebd3b0f7f5 Translated using Weblate (Finnish)
Currently translated at 100.0% (243 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fi/
2022-02-22 14:55:20 +01:00
IllusiveMan196
163de3653e Translated using Weblate (Ukrainian)
Currently translated at 25.2% (26 of 103 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2022-02-22 14:55:20 +01:00
IllusiveMan196
1507694bae Translated using Weblate (Ukrainian)
Currently translated at 100.0% (243 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2022-02-22 14:55:20 +01:00
Sylvia van Os
6d134009be Merge pull request #819 from Kethen/emoji_icon
emoji icons, color theme in short-cut selection menu
2022-02-20 18:11:31 +01:00
Sylvia van Os
c1d2a30931 Merge pull request #821 from Kethen/edit_view_card_icon_corner
proper clipping for card icon inside edit view
2022-02-20 18:05:57 +01:00
Sylvia van Os
e5cb6fa1a7 Merge pull request #822 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-02-20 17:13:42 +01:00
Joel A
2188280ada Translated using Weblate (Swedish)
Currently translated at 99.5% (240 of 241 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2022-02-20 16:58:40 +01:00
Katharine Chui
fdc8cb0adf proper clipping for card icon inside edit view 2022-02-20 20:33:25 +08:00
Sylvia van Os
b79286d1a6 Merge pull request #820 from CatimaLoyalty/create-pull-request/patch-1645334167
Update contributors
2022-02-20 12:49:42 +01:00
Katharine Chui
d9f0ea8346 emoji icons, color theme in short-cut selection menu 2022-02-20 19:16:43 +08:00
TheLastProject
a262120bc3 Update contributors 2022-02-20 05:16:06 +00:00
Sylvia van Os
446131a87d Merge pull request #817 from Kethen/card_view_color_fix
#803 cardView appbar icon fix
2022-02-19 17:02:57 +01:00
Sylvia van Os
3466ba6591 Merge pull request #818 from CatimaLoyalty/create-pull-request/patch-1645281896
Update Fastlane changelogs
2022-02-19 15:46:35 +01:00
TheLastProject
5b3c6559b4 Update Fastlane changelogs 2022-02-19 14:44:56 +00:00
Sylvia van Os
4680b53f86 Save card details expansion state 2022-02-19 15:44:35 +01:00
Katharine Chui
8423ea9b59 in cardView, hide iconImage manually instead of relying on appBarLayout height 2022-02-19 21:31:16 +08:00
Sylvia van Os
1d8b2d82ed Remove duplicate translation 2022-02-16 23:54:08 +01:00
Sylvia van Os
784bd299e8 Fastlane fixes 2022-02-16 23:41:43 +01:00
bors[bot]
c8df7a7a2e Merge #814
814: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: 109247019824 <stoyan@gmx.com>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Co-authored-by: ssantos <ssantos@web.de>
2022-02-14 21:58:54 +00:00
ssantos
cec2058f49 Translated using Weblate (Portuguese)
Currently translated at 6.8% (7 of 102 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/pt/
2022-02-14 22:56:59 +01:00
Oğuz Ersen
c910a96005 Translated using Weblate (Turkish)
Currently translated at 57.8% (59 of 102 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2022-02-14 22:56:59 +01:00
109247019824
f3c7a75963 Translated using Weblate (Bulgarian)
Currently translated at 3.9% (4 of 102 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/bg/
2022-02-14 22:56:59 +01:00
Sylvia van Os
04e0b9ba34 Merge pull request #813 from CatimaLoyalty/create-pull-request/patch-1644729316
Update contributors
2022-02-13 09:40:03 +01:00
TheLastProject
1b8e9e4d7c Update contributors 2022-02-13 05:15:15 +00:00
bors[bot]
7a556e320b Merge #812
812: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: 109247019824 <stoyan@gmx.com>
2022-02-11 20:10:27 +00:00
109247019824
db706a02d3 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (241 of 241 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2022-02-11 20:55:41 +01:00
Sylvia van Os
8e452ed6bd Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2022-02-11 20:04:50 +01:00
Sylvia van Os
a9e574a9b4 Release Catima 2.15.2 2022-02-11 20:04:38 +01:00
Sylvia van Os
f24d11403c Merge pull request #810 from CatimaLoyalty/create-pull-request/patch-1644601552
Update Fastlane changelogs
2022-02-11 19:46:45 +01:00
TheLastProject
e1c658ac2a Update Fastlane changelogs 2022-02-11 17:45:52 +00:00
Sylvia van Os
a5901700b4 Fix crash in edit activity on locale without region 2022-02-11 18:45:28 +01:00
Sylvia van Os
bf4cd7a961 Merge pull request #807 from CatimaLoyalty/create-pull-request/patch-1644529031
Update Fastlane changelogs
2022-02-10 22:37:35 +01:00
TheLastProject
79ca5196d0 Update Fastlane changelogs 2022-02-10 21:37:10 +00:00
Sylvia van Os
b24d641aa6 Fix manual language selection not applying anywhere 2022-02-10 22:36:51 +01:00
Sylvia van Os
84051555b6 Release Catima 2.15.1 2022-02-10 17:39:39 +01:00
Sylvia van Os
48ff57d0fc Merge pull request #802 from CatimaLoyalty/create-pull-request/patch-1644510077
Update Fastlane changelogs
2022-02-10 17:23:42 +01:00
TheLastProject
3a6828b34b Update Fastlane changelogs 2022-02-10 16:21:16 +00:00
Sylvia van Os
efd36d061f Update CHANGELOG 2022-02-10 17:20:52 +01:00
bors[bot]
a5ef8ae914 Merge #801
801: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
2022-02-10 11:14:04 +00:00
Allan Nordhøy
37ce61646b Translated using Weblate (Norwegian Bokmål)
Currently translated at 98.7% (238 of 241 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nb_NO/
2022-02-10 12:13:15 +01:00
bors[bot]
5e59315017 Merge #799
799: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Heimen Stoffels <vistausss@fastmail.com>
Co-authored-by: solokot <solokot@gmail.com>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Co-authored-by: SC <lalocas@protonmail.com>
Co-authored-by: Still Hsu <dev@stillu.cc>
2022-02-09 16:50:40 +00:00
Still Hsu
fbed1348aa Translated using Weblate (Chinese (Traditional))
Currently translated at 3.9% (4 of 101 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/zh_Hant/
2022-02-09 15:57:11 +01:00
Still Hsu
438e9f09a3 Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (241 of 241 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hant/
2022-02-09 15:57:11 +01:00
SC
aee9176518 Translated using Weblate (Portuguese)
Currently translated at 100.0% (241 of 241 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt/
2022-02-09 15:57:11 +01:00
Oğuz Ersen
70f7768cee Translated using Weblate (Turkish)
Currently translated at 58.4% (59 of 101 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2022-02-09 15:57:11 +01:00
solokot
bf7e35c361 Translated using Weblate (Russian)
Currently translated at 100.0% (241 of 241 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2022-02-09 15:57:11 +01:00
Heimen Stoffels
71a6fb2f56 Translated using Weblate (Dutch)
Currently translated at 100.0% (241 of 241 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2022-02-09 15:57:11 +01:00
Sylvia van Os
8d799fce26 Fix fastlane directory names 2022-02-08 22:02:38 +01:00
bors[bot]
ae6e98b876 Merge #798
798: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Altons <marsupilami450@gmail.com>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
2022-02-07 16:38:06 +00:00
Oğuz Ersen
44d8597fa5 Translated using Weblate (Turkish)
Currently translated at 100.0% (241 of 241 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2022-02-07 12:56:29 +01:00
Altons
de47b7b1d2 Translated using Weblate (French)
Currently translated at 100.0% (241 of 241 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2022-02-07 12:56:29 +01:00
Altons
631d65708e Translated using Weblate (German)
Currently translated at 100.0% (241 of 241 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2022-02-07 12:56:29 +01:00
Sylvia van Os
62ffcbc948 Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2022-02-06 22:53:09 +01:00
Sylvia van Os
14ef3086a4 Make spotBugs happy 2022-02-06 22:52:55 +01:00
Sylvia van Os
011b0f7ecc Merge pull request #796 from CatimaLoyalty/create-pull-request/patch-1644183457
Update Fastlane changelogs
2022-02-06 22:37:56 +01:00
TheLastProject
89eaac12d5 Update Fastlane changelogs 2022-02-06 21:37:37 +00:00
Sylvia van Os
2fbe5a821c Fix main menu item hiding logic 2022-02-06 22:37:21 +01:00
Sylvia van Os
5516acecce Release Catima 2.15.0 2022-02-06 12:49:02 +01:00
bors[bot]
6163de3086 Merge #792
792: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: 109247019824 <stoyan@gmx.com>
2022-02-06 10:54:51 +00:00
Sylvia van Os
4658896304 Add spacing for FAB below groups 2022-02-06 11:53:08 +01:00
Sylvia van Os
e0d9e2b2dd Merge pull request #793 from CatimaLoyalty/create-pull-request/patch-1644124546
Update contributors
2022-02-06 11:50:13 +01:00
Sylvia van Os
7dd2291376 Merge pull request #786 from Kethen/colors
old color themes, ucrop color, edit button icon color by theme, ucrop toolbar font
2022-02-06 11:49:35 +01:00
TheLastProject
bc69b82029 Update contributors 2022-02-06 05:15:46 +00:00
109247019824
1502ac1923 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (240 of 240 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2022-02-05 23:57:50 +01:00
Katharine Chui
0552acae26 spotbug 2022-02-06 03:44:20 +08:00
Katharine Chui
18e30d2726 apply dynamic color instead of leaving it as catima theme for invalid theme key 2022-02-06 03:38:28 +08:00
Sylvia van Os
1646db24df Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2022-02-05 16:54:49 +01:00
Sylvia van Os
6a6a8fff2b Include basic error details on import failure 2022-02-05 16:54:40 +01:00
Sylvia van Os
a0f8f6e6b5 Update label name in needs info autoclose action 2022-02-05 13:48:05 +01:00
bors[bot]
3dda3aa1a5 Merge #790
790: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Altons <marsupilami450@gmail.com>
Co-authored-by: Michael Moroni <michaelmoroni@disroot.org>
Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
Co-authored-by: Heimen Stoffels <vistausss@fastmail.com>
Co-authored-by: solokot <solokot@gmail.com>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
2022-02-04 18:37:42 +00:00
Sylvia van Os
ac6bffcc67 Fix Norwegian translation 2022-02-04 19:37:02 +01:00
Oğuz Ersen
93fac2e726 Translated using Weblate (Turkish)
Currently translated at 58.0% (58 of 100 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2022-02-04 17:56:31 +01:00
Oğuz Ersen
9b724ebcc7 Translated using Weblate (Turkish)
Currently translated at 100.0% (240 of 240 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2022-02-04 17:56:31 +01:00
Michael Moroni
540ef6d345 Translated using Weblate (Italian)
Currently translated at 7.0% (7 of 100 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/it/
2022-02-04 17:56:31 +01:00
Altons
64fa790836 Translated using Weblate (German)
Currently translated at 6.0% (6 of 100 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2022-02-04 17:56:31 +01:00
Altons
2c18b0dd19 Translated using Weblate (French)
Currently translated at 16.0% (16 of 100 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2022-02-04 17:56:31 +01:00
solokot
f570f2746a Translated using Weblate (Russian)
Currently translated at 100.0% (240 of 240 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2022-02-04 17:56:31 +01:00
Heimen Stoffels
4c9c717792 Translated using Weblate (Dutch)
Currently translated at 100.0% (240 of 240 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2022-02-04 17:56:31 +01:00
Allan Nordhøy
db4408108a Translated using Weblate (Norwegian Bokmål)
Currently translated at 98.3% (236 of 240 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nb_NO/
2022-02-04 17:56:31 +01:00
Michael Moroni
f75df30493 Translated using Weblate (Italian)
Currently translated at 100.0% (240 of 240 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2022-02-04 17:56:31 +01:00
Altons
0f914414af Translated using Weblate (French)
Currently translated at 100.0% (240 of 240 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2022-02-04 17:56:31 +01:00
Altons
3468293f5f Translated using Weblate (German)
Currently translated at 100.0% (240 of 240 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2022-02-04 17:56:31 +01:00
Katharine Chui
c9b8b2df9e requested changes
theme color preference is now before pure black background preference

new setting string arrays for when dynamic color is not available

general refactoring and formatting changes
2022-02-04 14:35:10 +08:00
Katharine Chui
3d138c9504 ucrop toolbar typeface 2022-02-03 20:40:52 +08:00
Katharine Chui
72b95988e5 hide catima theme when dynamic color is not available 2022-02-03 19:36:24 +08:00
Katharine Chui
188c147173 better themed color resolution for edit button on card view 2022-02-03 18:05:03 +08:00
Katharine Chui
6224a13d17 ucrop color 2022-02-03 17:53:32 +08:00
bors[bot]
f393b9b618 Merge #787
787: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Altons <marsupilami450@gmail.com>
Co-authored-by: Joel A <joeax910@student.liu.se>
2022-02-03 07:08:34 +00:00
Joel A
6fa6cdfadf Translated using Weblate (Swedish)
Currently translated at 99.5% (237 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sv/
2022-02-03 00:51:59 +01:00
Altons
bc7f44f60a Translated using Weblate (German)
Currently translated at 7.0% (7 of 100 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2022-02-03 00:51:59 +01:00
Altons
5579784b0a Translated using Weblate (French)
Currently translated at 16.0% (16 of 100 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2022-02-03 00:51:59 +01:00
Sylvia van Os
a20f8b58f8 Fix more missing screenshots 2022-02-02 22:52:43 +01:00
Sylvia van Os
fc8d0ac1aa Fix screenshots 2022-02-02 22:17:00 +01:00
Katharine Chui
edf953cdad colors 2022-02-03 05:12:20 +08:00
Sylvia van Os
7290c4aa28 Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2022-02-02 21:47:25 +01:00
Sylvia van Os
f28e614c7f Update screenshots 2022-02-02 21:47:16 +01:00
Sylvia van Os
616b23d3a8 Merge pull request #785 from CatimaLoyalty/create-pull-request/patch-1643833796
Update Fastlane changelogs
2022-02-02 21:31:05 +01:00
TheLastProject
5fda774626 Update Fastlane changelogs 2022-02-02 20:29:56 +00:00
Sylvia van Os
30941a9e16 Update CHANGELOG 2022-02-02 21:28:48 +01:00
Sylvia van Os
9289d3cf0b Merge pull request #783 from Kethen/color_fixes
various color fixes
2022-02-02 20:30:27 +01:00
Sylvia van Os
0ecc36a83c Merge pull request #784 from ratneshnavlakhe/add-padding-to-main-list
Add padding to the bottom of the main list.
2022-02-02 19:54:53 +01:00
Katharine Chui
d3b8569ef7 settings for pure black oled 2022-02-03 00:29:49 +08:00
Ratnesh Navlakhe
19722af65f Add padding to the bottom of the main list. 2022-02-01 23:37:43 +05:30
Katharine Chui
329be8abbb various color fixes
band-aid fixes for splash screen and material 3 dynamic color api

change editbutton icon's color in card view based on editbutton background color

make status bar transparent as per material 3, or tainted transparent for api level < 23 + light theme
2022-02-02 01:46:09 +08:00
bors[bot]
9aa6acccda Merge #780
780: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Petr Novák <nit.monkey@gmail.com>
2022-02-01 11:19:59 +00:00
Petr Novák
ba05c6872b Translated using Weblate (Czech)
Currently translated at 99.0% (99 of 100 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2022-02-01 09:53:24 +01:00
Petr Novák
ca1fc214ff Translated using Weblate (Czech)
Currently translated at 100.0% (238 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2022-02-01 09:53:24 +01:00
Sylvia van Os
2ebb3e1837 Merge pull request #778 from Altonss/patch-1
Update to 2.2.8 version of ucrop!
2022-01-31 17:33:52 +01:00
Altonss
019c5e232d Update to 2.2.8 version of ucrop! 2022-01-31 11:24:32 +01:00
bors[bot]
dda527a72f Merge #775
775: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: mondstern <mondstern@snopyta.org>
Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
2022-01-31 05:10:02 +00:00
Allan Nordhøy
df0bbe773f Translated using Weblate (Norwegian Bokmål)
Currently translated at 21.0% (21 of 100 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nb_NO/
2022-01-31 04:55:15 +01:00
mondstern
a320e1c776 Translated using Weblate (German)
Currently translated at 6.0% (6 of 100 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2022-01-30 15:56:23 +01:00
Sylvia van Os
607669a74c Merge pull request #774 from CatimaLoyalty/create-pull-request/patch-1643519707
Update contributors
2022-01-30 09:48:50 +01:00
TheLastProject
f50dfeac9e Update contributors 2022-01-30 05:15:07 +00:00
bors[bot]
ef46f6a00b Merge #772
772: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
2022-01-28 19:01:20 +00:00
Oğuz Ersen
eafedb52ad Translated using Weblate (Turkish)
Currently translated at 58.0% (58 of 100 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2022-01-28 19:55:48 +01:00
bors[bot]
423384fae6 Merge #770
770: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: solokot <solokot@gmail.com>
2022-01-27 17:55:15 +00:00
solokot
09e96eba53 Translated using Weblate (Russian)
Currently translated at 100.0% (238 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2022-01-27 18:53:35 +01:00
Sylvia van Os
4b0a4a7db9 Merge pull request #769 from CatimaLoyalty/dependabot/gradle/androidx.preference-preference-1.2.0
Bump preference from 1.1.1 to 1.2.0
2022-01-27 17:45:06 +01:00
dependabot[bot]
2371738a15 Bump preference from 1.1.1 to 1.2.0
Bumps preference from 1.1.1 to 1.2.0.

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

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-27 02:30:12 +00:00
Sylvia van Os
e22d11f8e9 Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2022-01-26 22:58:25 +01:00
Sylvia van Os
917e60a7f5 Fix lint 2022-01-26 22:58:02 +01:00
Sylvia van Os
4d09f66ac6 Merge pull request #768 from CatimaLoyalty/create-pull-request/patch-1643233121
Update Fastlane changelogs
2022-01-26 22:42:53 +01:00
TheLastProject
622aa96464 Update Fastlane changelogs 2022-01-26 21:38:41 +00:00
Sylvia van Os
9887e19ec9 Fix cropper not using theme colour 2022-01-26 22:38:02 +01:00
bors[bot]
a308634868 Merge #766
766: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Quentin PAGÈS <quentinantonin@free.fr>
Co-authored-by: H Tamás <hovanszki@gmail.com>
2022-01-26 16:46:59 +00:00
H Tamás
44c3c8b32f Translated using Weblate (Hungarian)
Currently translated at 9.0% (9 of 99 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/hu/
2022-01-26 14:56:20 +01:00
H Tamás
69835ff0c9 Translated using Weblate (Hungarian)
Currently translated at 100.0% (238 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hu/
2022-01-26 14:56:20 +01:00
Quentin PAGÈS
8270bc6c03 Translated using Weblate (Occitan)
Currently translated at 38.2% (91 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/oc/
2022-01-26 14:56:20 +01:00
Sylvia van Os
9e8ea3384e Add PayPal 2022-01-24 22:21:21 +01:00
Sylvia van Os
c8b258cd62 Merge pull request #760 from CatimaLoyalty/create-pull-request/patch-1642912504
Update contributors
2022-01-23 09:45:38 +01:00
TheLastProject
f23c73a67a Update contributors 2022-01-23 04:35:04 +00:00
bors[bot]
8ba3295ba1 Merge #759
759: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
Co-authored-by: H Tamás <hovanszki@gmail.com>
2022-01-22 17:57:33 +00:00
H Tamás
6e3d61304f Translated using Weblate (Hungarian)
Currently translated at 33.6% (80 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/hu/
2022-01-22 18:54:21 +01:00
Oğuz Ersen
9b7b3c4b9f Translated using Weblate (Turkish)
Currently translated at 100.0% (238 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2022-01-22 18:54:21 +01:00
bors[bot]
b993221af5 Merge #758
758: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: H Tamás <hovanszki@gmail.com>
Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
Co-authored-by: J. Lavoie <j.lavoie@net-c.ca>
Co-authored-by: Michael Moroni <michaelmoroni@disroot.org>
Co-authored-by: Heimen Stoffels <vistausss@fastmail.com>
Co-authored-by: solokot <solokot@gmail.com>
Co-authored-by: Eric <alchemillatruth@purelymail.com>
Co-authored-by: 109247019824 <stoyan@gmx.com>
Co-authored-by: Oğuz Ersen <oguzersen@protonmail.com>
2022-01-21 22:03:16 +00:00
Oğuz Ersen
86c029fe92 Translated using Weblate (Turkish)
Currently translated at 99.5% (237 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2022-01-21 14:10:45 +01:00
109247019824
fbe857a5cf Translated using Weblate (Bulgarian)
Currently translated at 100.0% (238 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2022-01-21 14:10:45 +01:00
Eric
1717560c05 Translated using Weblate (Chinese (Simplified))
Currently translated at 79.4% (189 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2022-01-21 14:10:45 +01:00
solokot
02f85cd49a Translated using Weblate (Russian)
Currently translated at 100.0% (238 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2022-01-21 14:10:45 +01:00
Heimen Stoffels
69a6afe611 Translated using Weblate (Dutch)
Currently translated at 100.0% (238 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2022-01-21 14:10:45 +01:00
Michael Moroni
94fa6d19c4 Translated using Weblate (Italian)
Currently translated at 100.0% (238 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/it/
2022-01-21 14:10:45 +01:00
J. Lavoie
211ee9ce69 Translated using Weblate (French)
Currently translated at 100.0% (238 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2022-01-21 14:10:45 +01:00
J. Lavoie
e818be3d50 Translated using Weblate (German)
Currently translated at 100.0% (238 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2022-01-21 14:10:45 +01:00
Sylvia van Os
6620369616 Translated using Weblate (English)
Currently translated at 100.0% (238 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/en/
2022-01-21 14:10:45 +01:00
H Tamás
9d9ce1d11f Added translation using Weblate (Hungarian) 2022-01-21 14:10:45 +01:00
bors[bot]
76ba3c333e Merge #757
757: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Ati <ati@tutamail.com>
Co-authored-by: Allan Nordhøy <epost@anotheragency.no>
Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
2022-01-20 19:21:08 +00:00
Sylvia van Os
0429086c57 Fix build 2022-01-20 20:20:36 +01:00
Ati
4a4b534813 Translated using Weblate (Slovak)
Currently translated at 84.0% (200 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sk/
2022-01-20 19:54:13 +01:00
Allan Nordhøy
8cfae80ea8 Translated using Weblate (Norwegian Bokmål)
Currently translated at 97.4% (232 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nb_NO/
2022-01-20 19:54:13 +01:00
Ati
517a9cf37a Translated using Weblate (Czech)
Currently translated at 100.0% (238 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2022-01-20 19:54:13 +01:00
Sylvia van Os
242f4b7ad9 Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2022-01-18 23:14:25 +01:00
Sylvia van Os
ce1a210650 Correctly make balancePoints a plural string 2022-01-18 23:14:12 +01:00
bors[bot]
9d369a8e6f Merge #754
754: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Ati <ati@tutamail.com>
Co-authored-by: IllusiveMan196 <hamsterrv@gmail.com>
Co-authored-by: Altons <marsupilami450@gmail.com>
Co-authored-by: Michael Moroni <michaelmoroni@disroot.org>
2022-01-18 21:56:59 +00:00
IllusiveMan196
240f73f743 Translated using Weblate (Ukrainian)
Currently translated at 24.2% (24 of 99 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/uk/
2022-01-18 22:55:16 +01:00
Michael Moroni
3cf1579bb0 Translated using Weblate (Italian)
Currently translated at 5.0% (5 of 99 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/it/
2022-01-18 22:55:16 +01:00
Altons
171fb83249 Translated using Weblate (German)
Currently translated at 5.0% (5 of 99 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2022-01-18 22:55:16 +01:00
Altons
603b02911b Translated using Weblate (French)
Currently translated at 15.1% (15 of 99 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2022-01-18 22:55:16 +01:00
IllusiveMan196
ab5eb62bc1 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (238 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2022-01-18 22:55:16 +01:00
Ati
40b2b5c96f Translated using Weblate (Slovak)
Currently translated at 48.7% (116 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sk/
2022-01-18 22:55:16 +01:00
Sylvia van Os
6efe0f6c54 Merge pull request #752 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-01-17 20:41:05 +01:00
mondstern
00a78c6030 Translated using Weblate (Portuguese)
Currently translated at 87.8% (209 of 238 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/pt/
2022-01-16 14:55:06 +01:00
Oğuz Ersen
0db46614a8 Translated using Weblate (Turkish)
Currently translated at 55.5% (55 of 99 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2022-01-16 14:55:06 +01:00
Sylvia van Os
32d139f756 Merge pull request #750 from CatimaLoyalty/create-pull-request/patch-1642310230
Update contributors
2022-01-16 09:56:06 +01:00
TheLastProject
c2c8b780c8 Update contributors 2022-01-16 05:17:09 +00:00
Sylvia van Os
057a58a3d6 Add FUNDING.yml 2022-01-15 14:01:16 +01:00
Sylvia van Os
551fbed8ad Release Catima 2.14.1 2022-01-15 13:46:49 +01:00
Sylvia van Os
468c86b5ea Merge pull request #748 from CatimaLoyalty/create-pull-request/patch-1642250378
Update Fastlane changelogs
2022-01-15 13:40:17 +01:00
TheLastProject
50cb3146bf Update Fastlane changelogs 2022-01-15 12:39:37 +00:00
Sylvia van Os
0853bd88a4 Various theming fixes 2022-01-15 13:39:19 +01:00
Sylvia van Os
3bbe8e9524 Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2022-01-15 12:12:04 +01:00
Sylvia van Os
ebc2e07fc4 Use new URLs 2022-01-15 12:11:57 +01:00
Sylvia van Os
ad368e68eb Merge pull request #747 from CatimaLoyalty/create-pull-request/patch-1642244294
Update Fastlane changelogs
2022-01-15 11:59:07 +01:00
TheLastProject
a1d4bb746f Update Fastlane changelogs 2022-01-15 10:58:14 +00:00
Sylvia van Os
44473ae921 Hide search, expand and sort icons until there is at least one card 2022-01-15 11:57:52 +01:00
Sylvia van Os
2c3d9f714c Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2022-01-14 23:07:21 +01:00
Sylvia van Os
13121e9869 Also colour scaler with card colour 2022-01-14 23:07:14 +01:00
Sylvia van Os
14116324fb Merge pull request #743 from CatimaLoyalty/create-pull-request/patch-1642196358
Update Fastlane changelogs
2022-01-14 22:40:14 +01:00
TheLastProject
d207197055 Update Fastlane changelogs 2022-01-14 21:39:18 +00:00
391 changed files with 4186 additions and 1449 deletions

View File

@@ -17,7 +17,8 @@ jobs:
days-before-close: 90
close-issue-message: 'This issue is missing necessary information and cannot be worked on in its current state. It has therefore been closed to keep the issue tracker clean. If you have more information, feel free to reopen it.'
close-pr-message: 'This PR is missing necessary information and cannot be merged in its current state. It has therefore been closed to keep the issue tracker clean. If you have more information, feel free to reopen it.'
only-labels: 'needs info'
stale-issue-label: 'needs info'
stale-pr-label: 'needs info'
only-labels: 'state: needs info'
stale-issue-label: 'state: needs info'
stale-pr-label: 'state: needs info'
remove-stale-when-updated: false
enable-statistics: true

View File

@@ -1,5 +1,66 @@
# Changelog
## v2.18.1 - 111
- Arabic language support
- Display archived card count in group overview
- Fix balance parsing bugs (made cards not savable in Arabic and other language with non-Western numbers)
- Fix custom theme not applying to main screen correctly
- Improve display of selected cards
- Fix crash when leaving cardview in RTL layouts for cards with expiry or balance
- Fix back arrow in card view pointing the wrong way in RTL layouts
## v2.17.1 - 109
- Fix incorrect text colour on "No barcode" button
## v2.17.0 - 108
- Add card duplication feature
- Don't allow choosing expiry before 1970 (they never worked anyway)
- Add support for archiving cards
- Move delete from edit to view
- Remove rotation lock icon in favour of a new rotation lock setting
## v2.16.3 - 107 (2022-04-15)
- Stocard import fixes
## v2.16.2 - 106 (2022-03-31)
- Fix some character sequences being shown as a single character
## v2.16.1 - 105 (2022-03-25)
- Fix gray block appearing on invalid value for barcode
- Stocard import fixes
## v2.16.0 - 104 (2022-03-09)
- Save card detail expansion state
- Minor UI fixes
## v2.15.2 - 103 (2022-02-11)
- Fix manual language selection not applying everywhere
- Fix crash in edit view on regionless locale
## v2.15.1 - 102 (2022-02-10)
- Various minor fixes
- Fix crash when using Norwegian translation
## v2.15.0 - 101 (2022-02-06)
- Fix cropper not using theme colour
- Fix minor theming issues
- Add pure black dark theme for OLED screens
## v2.14.1 - 100 (2022-01-15)
- Hide search, expand and sort icons until there is at least 1 card
- Various theming fixes
## v2.14.0 - 99 (2022-01-14)
- Material You redesign

3
FUNDING.yml Normal file
View File

@@ -0,0 +1,3 @@
github: TheLastProject
custom:
- "https://paypal.me/sylviavanos"

View File

@@ -1,29 +1,30 @@
GEM
remote: https://rubygems.org/
specs:
CFPropertyList (3.0.3)
CFPropertyList (3.0.5)
rexml
addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
artifactory (3.0.15)
atomos (0.1.3)
aws-eventstream (1.2.0)
aws-partitions (1.501.0)
aws-sdk-core (3.121.0)
aws-partitions (1.597.0)
aws-sdk-core (3.131.1)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.239.0)
aws-partitions (~> 1, >= 1.525.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
aws-sdk-kms (1.48.0)
aws-sdk-core (~> 3, >= 3.120.0)
jmespath (~> 1, >= 1.6.1)
aws-sdk-kms (1.57.0)
aws-sdk-core (~> 3, >= 3.127.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.102.0)
aws-sdk-core (~> 3, >= 3.120.0)
aws-sdk-s3 (1.114.0)
aws-sdk-core (~> 3, >= 3.127.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.4)
aws-sigv4 (1.4.0)
aws-sigv4 (1.5.0)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.4)
claide (1.0.3)
claide (1.1.0)
colored (1.2)
colored2 (3.1.2)
commander (4.6.0)
@@ -34,18 +35,19 @@ GEM
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
dotenv (2.7.6)
emoji_regex (3.2.2)
excon (0.85.0)
faraday (1.7.2)
emoji_regex (3.2.3)
excon (0.92.3)
faraday (1.10.0)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
faraday-httpclient (~> 1.0.1)
faraday-httpclient (~> 1.0)
faraday-multipart (~> 1.0)
faraday-net_http (~> 1.0)
faraday-net_http_persistent (~> 1.1)
faraday-net_http_persistent (~> 1.0)
faraday-patron (~> 1.0)
faraday-rack (~> 1.0)
multipart-post (>= 1.2, < 3)
faraday-retry (~> 1.0)
ruby2_keywords (>= 0.0.4)
faraday-cookie_jar (0.0.7)
faraday (>= 0.8.0)
@@ -54,14 +56,17 @@ GEM
faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-multipart (1.0.4)
multipart-post (~> 2)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
faraday_middleware (1.1.0)
faraday-retry (1.0.3)
faraday_middleware (1.2.0)
faraday (~> 1.0)
fastimage (2.2.5)
fastlane (2.193.1)
fastimage (2.2.6)
fastlane (2.206.2)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.8, < 3.0.0)
artifactory (~> 3.0)
@@ -101,9 +106,9 @@ GEM
xcpretty (~> 0.3.0)
xcpretty-travis-formatter (>= 0.0.3)
gh_inspector (1.1.3)
google-apis-androidpublisher_v3 (0.11.0)
google-apis-androidpublisher_v3 (0.21.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-core (0.4.1)
google-apis-core (0.5.0)
addressable (~> 2.5, >= 2.5.1)
googleauth (>= 0.16.2, < 2.a)
httpclient (>= 2.8.1, < 3.a)
@@ -112,53 +117,53 @@ GEM
retriable (>= 2.0, < 4.a)
rexml
webrick
google-apis-iamcredentials_v1 (0.7.0)
google-apis-iamcredentials_v1 (0.10.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-playcustomapp_v1 (0.5.0)
google-apis-playcustomapp_v1 (0.7.0)
google-apis-core (>= 0.4, < 2.a)
google-apis-storage_v1 (0.6.0)
google-apis-storage_v1 (0.14.0)
google-apis-core (>= 0.4, < 2.a)
google-cloud-core (1.6.0)
google-cloud-env (~> 1.0)
google-cloud-errors (~> 1.0)
google-cloud-env (1.5.0)
faraday (>= 0.17.3, < 2.0)
google-cloud-errors (1.1.0)
google-cloud-storage (1.34.1)
addressable (~> 2.5)
google-cloud-env (1.6.0)
faraday (>= 0.17.3, < 3.0)
google-cloud-errors (1.2.0)
google-cloud-storage (1.36.2)
addressable (~> 2.8)
digest-crc (~> 0.4)
google-apis-iamcredentials_v1 (~> 0.1)
google-apis-storage_v1 (~> 0.1)
google-cloud-core (~> 1.6)
googleauth (>= 0.16.2, < 2.a)
mini_mime (~> 1.0)
googleauth (0.17.1)
faraday (>= 0.17.3, < 2.0)
googleauth (1.1.3)
faraday (>= 0.17.3, < 3.a)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
multi_json (~> 1.11)
os (>= 0.9, < 2.0)
signet (~> 0.15)
signet (>= 0.16, < 2.a)
highline (2.0.3)
http-cookie (1.0.4)
http-cookie (1.0.5)
domain_name (~> 0.5)
httpclient (2.8.3)
jmespath (1.4.0)
json (2.5.1)
jwt (2.2.3)
jmespath (1.6.1)
json (2.6.2)
jwt (2.4.1)
memoist (0.16.2)
mini_magick (4.11.0)
mini_mime (1.1.1)
mini_mime (1.1.2)
multi_json (1.15.0)
multipart-post (2.0.0)
nanaimo (0.3.0)
naturally (2.2.1)
optparse (0.1.1)
os (1.1.1)
os (1.1.4)
plist (3.6.0)
public_suffix (4.0.6)
public_suffix (4.0.7)
rake (13.0.6)
representable (3.1.1)
representable (3.2.0)
declarative (< 0.1.0)
trailblazer-option (>= 0.1.1, < 0.2.0)
uber (< 0.2.0)
@@ -168,9 +173,9 @@ GEM
ruby2_keywords (0.0.5)
rubyzip (2.3.2)
security (0.1.3)
signet (0.16.0)
signet (0.16.1)
addressable (~> 2.8)
faraday (>= 0.17.3, < 2.0)
faraday (>= 0.17.5, < 3.0)
jwt (>= 1.5, < 3.0)
multi_json (~> 1.10)
simctl (1.6.8)
@@ -179,7 +184,7 @@ GEM
terminal-notifier (2.0.0)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
trailblazer-option (0.1.1)
trailblazer-option (0.1.2)
tty-cursor (0.7.1)
tty-screen (0.8.1)
tty-spinner (0.9.3)
@@ -187,8 +192,8 @@ GEM
uber (0.1.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.8)
unicode-display_width (1.7.0)
unf_ext (0.0.8.2)
unicode-display_width (1.8.0)
webrick (1.7.0)
word_wrap (1.0.0)
xcodeproj (1.21.0)

View File

@@ -18,8 +18,8 @@ android {
applicationId "me.hackerchick.catima"
minSdkVersion 21
targetSdkVersion 31
versionCode 99
versionName "2.14.0"
versionCode 111
versionName "2.18.1"
vectorDrawables.useSupportLibrary true
multiDexEnabled true
@@ -80,25 +80,25 @@ android {
dependencies {
// AndroidX
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'androidx.appcompat:appcompat:1.4.2'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
implementation 'androidx.exifinterface:exifinterface:1.3.3'
implementation 'androidx.palette:palette:1.0.0'
implementation 'androidx.preference:preference:1.1.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'com.github.yalantis:ucrop:2.2.7'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
implementation 'androidx.preference:preference:1.2.0'
implementation 'com.google.android.material:material:1.6.1'
implementation 'com.github.yalantis:ucrop:2.2.8'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.6'
// Splash Screen
implementation 'androidx.core:core-splashscreen:1.0.0-beta01'
implementation 'androidx.core:core-splashscreen:1.0.0-rc01'
// Third-party
implementation 'com.journeyapps:zxing-android-embedded:4.3.0@aar'
implementation 'com.google.zxing:core:3.4.1'
implementation 'com.google.zxing:core:3.5.0'
implementation 'org.apache.commons:commons-csv:1.9.0'
implementation 'com.jaredrummler:colorpicker:1.1.0'
implementation 'com.github.invissvenska:NumberPickerPreference:1.0.4'
implementation 'net.lingala.zip4j:zip4j:2.9.1'
implementation 'net.lingala.zip4j:zip4j:2.11.1'
// SpotBugs
implementation 'io.wcm.tooling.spotbugs:io.wcm.tooling.spotbugs.annotations:1.0.0'
@@ -106,7 +106,7 @@ dependencies {
// Testing
testImplementation 'androidx.test:core:1.4.0'
testImplementation 'junit:junit:4.13.2'
testImplementation 'org.robolectric:robolectric:4.7.3'
testImplementation 'org.robolectric:robolectric:4.8.1'
}
tasks.withType(SpotBugsTask) {

View File

@@ -116,7 +116,7 @@
</activity>
<activity
android:name="com.yalantis.ucrop.UCropActivity"
android:name=".UCropWrapper"
android:theme="@style/AppTheme.NoActionBar" />
<provider
@@ -134,7 +134,5 @@
<action android:name="android.service.controls.ControlsProviderService" />
</intent-filter>
</service>
</application>
</manifest>

View File

@@ -151,13 +151,13 @@ public class AboutActivity extends CatimaAppCompatActivity implements View.OnCli
} else if (id == R.id.translate) {
url = "https://hosted.weblate.org/engage/catima/";
} else if (id == R.id.license) {
url = "https://github.com/TheLastProject/Catima/blob/master/LICENSE";
url = "https://github.com/CatimaLoyalty/Android/blob/master/LICENSE";
} else if (id == R.id.repo) {
url = "https://github.com/TheLastProject/Catima/";
url = "https://github.com/CatimaLoyalty/Android/";
} else if (id == R.id.privacy) {
url = "https://catima.app/privacy-policy/";
} else if (id == R.id.report_error) {
url = "https://github.com/TheLastProject/Catima/issues";
url = "https://github.com/CatimaLoyalty/Android/issues";
} else if (id == R.id.rate) {
url = "https://play.google.com/store/apps/details?id=me.hackerchick.catima";
} else {

View File

@@ -5,6 +5,7 @@ import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
@@ -46,7 +47,7 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
BarcodeImageWriterTask(
Context context, ImageView imageView, String cardIdString,
CatimaBarcode barcodeFormat, TextView textView,
boolean showFallback, Runnable callback
boolean showFallback, Runnable callback, boolean roundCornerPadding
) {
mContext = context;
@@ -60,18 +61,32 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
cardId = cardIdString;
format = barcodeFormat;
int padding = 0;
// Some barcodes already have internal whitespace and shouldn't get extra padding
// TODO: Get rid of this hack by somehow detecting this extra whitespace
if (roundCornerPadding && !barcodeFormat.hasInternalPadding()) {
padding = Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, context.getResources().getDisplayMetrics()));
}
final int MAX_WIDTH = getMaxWidth(format);
int tempImageHeight;
int tempImageWidth;
if (imageView.getWidth() < MAX_WIDTH) {
imageHeight = imageView.getHeight();
imageWidth = imageView.getWidth();
tempImageHeight = imageView.getHeight();
tempImageWidth = imageView.getWidth();
} else {
// Scale down the image to reduce the memory needed to produce it
imageWidth = MAX_WIDTH;
tempImageWidth = MAX_WIDTH;
double ratio = (double) MAX_WIDTH / (double) imageView.getWidth();
imageHeight = (int) (imageView.getHeight() * ratio);
tempImageHeight = (int) (imageView.getHeight() * ratio);
}
// Ensure space for padding if wanted
imageWidth = tempImageWidth;
imageHeight = tempImageHeight - padding;
this.showFallback = showFallback;
}

View File

@@ -76,6 +76,7 @@ public class BarcodeSelectorAdapter extends ArrayAdapter<CatimaBarcodeWithValue>
final CatimaBarcode format = CatimaBarcode.fromName(formatType);
image.setImageBitmap(null);
image.setClipToOutline(true);
if (image.getHeight() == 0) {
// The size of the ImageView is not yet available as it has not
@@ -89,13 +90,13 @@ public class BarcodeSelectorAdapter extends ArrayAdapter<CatimaBarcodeWithValue>
Log.d(TAG, "Generating barcode for type " + formatType);
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null);
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null, true);
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
}
});
} else {
Log.d(TAG, "Generating barcode for type " + formatType);
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null);
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null, true);
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
}
}

View File

@@ -4,9 +4,10 @@ import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.pm.ShortcutInfoCompat;
import androidx.core.content.pm.ShortcutManagerCompat;
@@ -16,9 +17,10 @@ import androidx.recyclerview.widget.RecyclerView;
/**
* The configuration screen for creating a shortcut.
*/
public class CardShortcutConfigure extends AppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener {
public class CardShortcutConfigure extends CatimaAppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener {
static final String TAG = "Catima";
private SQLiteDatabase mDatabase;
private LoyaltyCardCursorAdapter mAdapter;
@Override
public void onCreate(Bundle bundle) {
@@ -33,26 +35,34 @@ public class CardShortcutConfigure extends AppCompatActivity implements LoyaltyC
setContentView(R.layout.simple_toolbar_list_activity);
Toolbar toolbar = findViewById(R.id.toolbar);
toolbar.setTitle(R.string.shortcutSelectCard);
setSupportActionBar(toolbar);
// If there are no cards, bail
if (DBHelper.getLoyaltyCardCount(mDatabase) == 0) {
int cardCount = DBHelper.getLoyaltyCardCount(mDatabase);
if (cardCount == 0) {
Toast.makeText(this, R.string.noCardsMessage, Toast.LENGTH_LONG).show();
finish();
}
// If all cards are archived, bail
if (DBHelper.getArchivedCardsCount(mDatabase) == cardCount) {
Toast.makeText(this, R.string.noUnarchivedCardsMessage, Toast.LENGTH_LONG).show();
finish();
}
final RecyclerView cardList = findViewById(R.id.list);
GridLayoutManager layoutManager = (GridLayoutManager) cardList.getLayoutManager();
if (layoutManager != null) {
layoutManager.setSpanCount(getResources().getInteger(R.integer.main_view_card_columns));
}
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(mDatabase);
final LoyaltyCardCursorAdapter adapter = new LoyaltyCardCursorAdapter(this, cardCursor, this);
cardList.setAdapter(adapter);
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.Unarchived);
mAdapter = new LoyaltyCardCursorAdapter(this, cardCursor, this);
cardList.setAdapter(mAdapter);
}
private void onClickAction(int position) {
Cursor selected = DBHelper.getLoyaltyCardCursor(mDatabase);
Cursor selected = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.Unarchived);
selected.moveToPosition(position);
LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(selected);
@@ -65,6 +75,26 @@ public class CardShortcutConfigure extends AppCompatActivity implements LoyaltyC
finish();
}
@Override
public boolean onCreateOptionsMenu(Menu inputMenu) {
getMenuInflater().inflate(R.menu.card_details_menu, inputMenu);
Utils.updateMenuCardDetailsButtonState(inputMenu.findItem(R.id.action_unfold), mAdapter.showingDetails());
return super.onCreateOptionsMenu(inputMenu);
}
@Override
public boolean onOptionsItemSelected(MenuItem inputItem) {
int id = inputItem.getItemId();
if (id == R.id.action_unfold) {
mAdapter.showDetails(!mAdapter.showingDetails());
invalidateOptionsMenu();
return true;
}
return super.onOptionsItemSelected(inputItem);
}
@Override
public void onRowClicked(int inputPosition) {

View File

@@ -16,13 +16,13 @@ import android.service.controls.actions.ControlAction;
import android.service.controls.templates.StatelessTemplate;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import java.util.List;
import java.util.concurrent.Flow;
import java.util.function.Consumer;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
@RequiresApi(Build.VERSION_CODES.R)
public class CardsOnPowerScreenService extends ControlsProviderService {
@@ -40,7 +40,7 @@ public class CardsOnPowerScreenService extends ControlsProviderService {
@NonNull
@Override
public Flow.Publisher<Control> createPublisherForAllAvailable() {
Cursor loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(mDatabase);
Cursor loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.Unarchived);
return subscriber -> {
while (loyaltyCardCursor.moveToNext()) {
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(loyaltyCardCursor);

View File

@@ -1,7 +1,12 @@
package protect.card_locker;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
public class CatimaAppCompatActivity extends AppCompatActivity {
@@ -10,4 +15,27 @@ public class CatimaAppCompatActivity extends AppCompatActivity {
// Apply chosen language
super.attachBaseContext(Utils.updateBaseContextLocale(base));
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Utils.patchColors(this);
}
@Override
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
// material 3 designer does not consider status bar colors
// XXX changing this in onCreate causes issues with the splash screen activity, so doing this here
boolean darkMode = Utils.isDarkModeEnabled(this);
if (Build.VERSION.SDK_INT >= 23) {
getWindow().setStatusBarColor(Color.TRANSPARENT);
getWindow().getDecorView().setSystemUiVisibility(darkMode ? 0 : View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {
// icons are always white back then
getWindow().setStatusBarColor(darkMode ? Color.TRANSPARENT : Color.argb(127, 0, 0, 0));
}
// XXX android 9 and below has a nasty rendering bug if the theme was patched earlier
Utils.postPatchColors(this);
}
}

View File

@@ -72,6 +72,11 @@ public class CatimaBarcode {
|| mBarcodeFormat == BarcodeFormat.QR_CODE;
}
public boolean hasInternalPadding() {
return mBarcodeFormat == BarcodeFormat.PDF_417
|| mBarcodeFormat == BarcodeFormat.QR_CODE;
}
public BarcodeFormat format() {
return mBarcodeFormat;
}

View File

@@ -21,7 +21,7 @@ import java.util.List;
public class DBHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "Catima.db";
public static final int ORIGINAL_DATABASE_VERSION = 1;
public static final int DATABASE_VERSION = 14;
public static final int DATABASE_VERSION = 15;
public static class LoyaltyCardDbGroups {
public static final String TABLE = "groups";
@@ -45,6 +45,7 @@ public class DBHelper extends SQLiteOpenHelper {
public static final String STAR_STATUS = "starstatus";
public static final String LAST_USED = "lastused";
public static final String ZOOM_LEVEL = "zoomlevel";
public static final String ARCHIVE_STATUS = "archive";
}
public static class LoyaltyCardDbIdsGroups {
@@ -71,6 +72,12 @@ public class DBHelper extends SQLiteOpenHelper {
Descending
}
public enum LoyaltyCardArchiveFilter {
All,
Archived,
Unarchived
}
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@@ -97,7 +104,8 @@ public class DBHelper extends SQLiteOpenHelper {
LoyaltyCardDbIds.BARCODE_TYPE + " TEXT," +
LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0'," +
LoyaltyCardDbIds.LAST_USED + " INTEGER DEFAULT '0', " +
LoyaltyCardDbIds.ZOOM_LEVEL + " INTEGER DEFAULT '100' )");
LoyaltyCardDbIds.ZOOM_LEVEL + " INTEGER DEFAULT '100', " +
LoyaltyCardDbIds.ARCHIVE_STATUS + " INTEGER DEFAULT '0' )");
// create associative table for cards in groups
db.execSQL("CREATE TABLE " + LoyaltyCardDbIdsGroups.TABLE + "(" +
@@ -302,6 +310,10 @@ public class DBHelper extends SQLiteOpenHelper {
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
+ " ADD COLUMN " + LoyaltyCardDbIds.ZOOM_LEVEL + " INTEGER DEFAULT '100' ");
}
if (oldVersion < 15 && newVersion >= 15) {
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
+ " ADD COLUMN " + LoyaltyCardDbIds.ARCHIVE_STATUS + " INTEGER DEFAULT '0' ");
}
}
private static ContentValues generateFTSContentValues(final int id, final String store, final String note) {
@@ -349,7 +361,7 @@ public class DBHelper extends SQLiteOpenHelper {
final SQLiteDatabase database, final String store, final String note, final Date expiry,
final BigDecimal balance, final Currency balanceType, final String cardId,
final String barcodeId, final CatimaBarcode barcodeType, final Integer headerColor,
final int starStatus, final Long lastUsed) {
final int starStatus, final Long lastUsed,final int archiveStatus) {
database.beginTransaction();
// Card
@@ -365,6 +377,7 @@ public class DBHelper extends SQLiteOpenHelper {
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
contentValues.put(LoyaltyCardDbIds.ARCHIVE_STATUS, archiveStatus);
long id = database.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
// FTS
@@ -380,7 +393,7 @@ public class DBHelper extends SQLiteOpenHelper {
final SQLiteDatabase database, final int id, final String store, final String note,
final Date expiry, final BigDecimal balance, final Currency balanceType,
final String cardId, final String barcodeId, final CatimaBarcode barcodeType,
final Integer headerColor, final int starStatus, final Long lastUsed) {
final Integer headerColor, final int starStatus, final Long lastUsed, final int archiveStatus) {
database.beginTransaction();
// Card
@@ -397,6 +410,7 @@ public class DBHelper extends SQLiteOpenHelper {
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
contentValues.put(LoyaltyCardDbIds.ARCHIVE_STATUS, archiveStatus);
database.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
// FTS
@@ -438,6 +452,15 @@ public class DBHelper extends SQLiteOpenHelper {
return (rowsUpdated == 1);
}
public static boolean updateLoyaltyCardArchiveStatus(SQLiteDatabase database, final int id, final int archiveStatus) {
ContentValues contentValues = new ContentValues();
contentValues.put(LoyaltyCardDbIds.ARCHIVE_STATUS, archiveStatus);
int rowsUpdated = database.update(LoyaltyCardDbIds.TABLE, contentValues,
whereAttrs(LoyaltyCardDbIds.ID),
withArgs(id));
return (rowsUpdated == 1);
}
public static boolean updateLoyaltyCardStarStatus(SQLiteDatabase database, final int id, final int starStatus) {
ContentValues contentValues = new ContentValues();
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
@@ -549,9 +572,35 @@ public class DBHelper extends SQLiteOpenHelper {
return (rowsDeleted == 1);
}
public static int getArchivedCardsCount(SQLiteDatabase database) {
return (int) DatabaseUtils.queryNumEntries(database, LoyaltyCardDbIds.TABLE,
whereAttrs(LoyaltyCardDbIds.ARCHIVE_STATUS), withArgs(1));
}
public static int getArchivedCardsCount(SQLiteDatabase database, final String groupName) {
Cursor data = database.rawQuery(
"select * from " + LoyaltyCardDbIds.TABLE + " c " +
" LEFT JOIN " + LoyaltyCardDbIdsGroups.TABLE + " cg " +
" ON c." + LoyaltyCardDbIds.ID + " = cg." + LoyaltyCardDbIdsGroups.cardID +
" where " + LoyaltyCardDbIds.ARCHIVE_STATUS + " = 1" +
" AND " + LoyaltyCardDbIdsGroups.groupID + "= ?",
withArgs(groupName)
);
int count = data.getCount();
data.close();
return count;
}
public static Cursor getLoyaltyCardCursor(SQLiteDatabase database) {
// An empty string will match everything
return getLoyaltyCardCursor(database, "");
return getLoyaltyCardCursor(database, LoyaltyCardArchiveFilter.All);
}
public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, LoyaltyCardArchiveFilter archiveFilter) {
// An empty string will match everything
return getLoyaltyCardCursor(database, "", archiveFilter);
}
/**
@@ -560,8 +609,8 @@ public class DBHelper extends SQLiteOpenHelper {
* @param filter
* @return Cursor
*/
public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, final String filter) {
return getLoyaltyCardCursor(database, filter, null);
public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, final String filter, LoyaltyCardArchiveFilter archiveFilter) {
return getLoyaltyCardCursor(database, filter, null, archiveFilter);
}
/**
@@ -571,8 +620,8 @@ public class DBHelper extends SQLiteOpenHelper {
* @param group
* @return Cursor
*/
public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, final String filter, Group group) {
return getLoyaltyCardCursor(database, filter, group, LoyaltyCardOrder.Alpha, LoyaltyCardOrderDirection.Ascending);
public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, final String filter, Group group, LoyaltyCardArchiveFilter archiveFilter) {
return getLoyaltyCardCursor(database, filter, group, LoyaltyCardOrder.Alpha, LoyaltyCardOrderDirection.Ascending, archiveFilter);
}
/**
@@ -583,7 +632,7 @@ public class DBHelper extends SQLiteOpenHelper {
* @param order
* @return Cursor
*/
public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, String filter, Group group, LoyaltyCardOrder order, LoyaltyCardOrderDirection direction) {
public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, String filter, Group group, LoyaltyCardOrder order, LoyaltyCardOrderDirection direction, LoyaltyCardArchiveFilter archiveFilter) {
StringBuilder groupFilter = new StringBuilder();
String limitString = "";
@@ -606,6 +655,11 @@ public class DBHelper extends SQLiteOpenHelper {
}
}
String archiveFilterString = "";
if (archiveFilter != LoyaltyCardArchiveFilter.All) {
archiveFilterString = " AND " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ARCHIVE_STATUS + " = " + (archiveFilter.equals(LoyaltyCardArchiveFilter.Unarchived) ? 0 : 1);
}
String orderField = getFieldForOrder(order);
return database.rawQuery("SELECT " + LoyaltyCardDbIds.TABLE + ".* FROM " + LoyaltyCardDbIds.TABLE +
@@ -613,7 +667,9 @@ public class DBHelper extends SQLiteOpenHelper {
" ON " + LoyaltyCardDbFTS.TABLE + "." + LoyaltyCardDbFTS.ID + " = " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ID +
(filter.trim().isEmpty() ? " " : " AND " + LoyaltyCardDbFTS.TABLE + " MATCH ? ") +
groupFilter.toString() +
" ORDER BY " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STAR_STATUS + " DESC, " +
archiveFilterString +
" ORDER BY " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ARCHIVE_STATUS + " ASC, " +
LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STAR_STATUS + " DESC, " +
" (CASE WHEN " + LoyaltyCardDbIds.TABLE + "." + orderField + " IS NULL THEN 1 ELSE 0 END), " +
LoyaltyCardDbIds.TABLE + "." + orderField + " COLLATE NOCASE " + getDbDirection(order, direction) + ", " +
LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STORE + " COLLATE NOCASE ASC " +

View File

@@ -1,6 +1,7 @@
package protect.card_locker;
import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.view.LayoutInflater;
@@ -15,7 +16,7 @@ import protect.card_locker.preferences.Settings;
public class GroupCursorAdapter extends BaseCursorAdapter<GroupCursorAdapter.GroupListItemViewHolder> {
Settings mSettings;
private final Context mContext;
public final Context mContext;
private final GroupAdapterListener mListener;
SQLiteDatabase mDatabase;
@@ -23,7 +24,7 @@ public class GroupCursorAdapter extends BaseCursorAdapter<GroupCursorAdapter.Gro
super(inputCursor, DBHelper.LoyaltyCardDbGroups.ORDER);
setHasStableIds(true);
mSettings = new Settings(inputContext);
mContext = inputContext.getApplicationContext();
mContext = inputContext;
mListener = inputListener;
mDatabase = new DBHelper(inputContext).getReadableDatabase();
@@ -43,8 +44,18 @@ public class GroupCursorAdapter extends BaseCursorAdapter<GroupCursorAdapter.Gro
inputHolder.mName.setText(group._id);
int groupCardCount = DBHelper.getGroupCardCount(mDatabase, group._id);
inputHolder.mCardCount.setText(mContext.getResources().getQuantityString(R.plurals.groupCardCount, groupCardCount, groupCardCount));
int archivedCardCount = DBHelper.getArchivedCardsCount(mDatabase, group._id);
Resources resources = mContext.getResources();
String cardCountText;
if (archivedCardCount > 0) {
cardCountText = resources.getQuantityString(R.plurals.groupCardCountWithArchived, groupCardCount, groupCardCount, archivedCardCount);
} else {
cardCountText = resources.getQuantityString(R.plurals.groupCardCount, groupCardCount, groupCardCount);
}
inputHolder.mCardCount.setText(cardCountText);
inputHolder.mName.setTextSize(mSettings.getFontSizeMax(mSettings.getMediumFont()));
inputHolder.mCardCount.setTextSize(mSettings.getFontSizeMax(mSettings.getSmallFont()));

View File

@@ -16,6 +16,12 @@ import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.ActionBar;
@@ -23,18 +29,10 @@ import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import protect.card_locker.async.TaskHandler;
import protect.card_locker.importexport.DataFormat;
import protect.card_locker.importexport.ImportExportResult;
import protect.card_locker.importexport.ImportExportResultType;
public class ImportExportActivity extends CatimaAppCompatActivity {
private static final String TAG = "Catima";
@@ -97,7 +95,7 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
startExport(writer, uri, exportPassword.toCharArray(), true);
} catch (IOException e) {
Log.e(TAG, "Failed to export file: " + result.toString(), e);
onExportComplete(ImportExportResult.GenericFailure, uri);
onExportComplete(new ImportExportResult(ImportExportResultType.GenericFailure, result.toString()), uri);
}
});
@@ -175,7 +173,7 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
startImport(reader, uri, importDataFormat, password, true);
} catch (IOException e) {
Log.e(TAG, "Failed to import file: " + uri.toString(), e);
onImportComplete(ImportExportResult.GenericFailure, uri, importDataFormat);
onImportComplete(new ImportExportResult(ImportExportResultType.GenericFailure, e.toString()), uri, importDataFormat);
}
}
@@ -357,56 +355,51 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
builder.show();
}
private String buildResultDialogMessage(ImportExportResult result, boolean isImport) {
int messageId;
if (result.resultType() == ImportExportResultType.Success) {
messageId = isImport ? R.string.importSuccessful : R.string.exportSuccessful;
} else {
messageId = isImport ? R.string.importFailed : R.string.exportFailed;
}
StringBuilder messageBuilder = new StringBuilder(getResources().getString(messageId));
if (result.developerDetails() != null) {
messageBuilder.append("\n\n");
messageBuilder.append(getResources().getString(R.string.include_if_asking_support));
messageBuilder.append("\n\n");
messageBuilder.append(result.developerDetails());
}
return messageBuilder.toString();
}
private void onImportComplete(ImportExportResult result, Uri path, DataFormat dataFormat) {
if (result == ImportExportResult.BadPassword) {
ImportExportResultType resultType = result.resultType();
if (resultType == ImportExportResultType.BadPassword) {
retryWithPassword(dataFormat, path);
return;
}
AlertDialog.Builder builder = new AlertDialog.Builder(this);
int messageId;
if (result == ImportExportResult.Success) {
builder.setTitle(R.string.importSuccessfulTitle);
messageId = R.string.importSuccessful;
} else {
builder.setTitle(R.string.importFailedTitle);
messageId = R.string.importFailed;
}
final String message = getResources().getString(messageId);
builder.setMessage(message);
builder.setNeutralButton(R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.setTitle(resultType == ImportExportResultType.Success ? R.string.importSuccessfulTitle : R.string.importFailedTitle);
builder.setMessage(buildResultDialogMessage(result, true));
builder.setNeutralButton(R.string.ok, (dialog, which) -> dialog.dismiss());
builder.create().show();
}
private void onExportComplete(ImportExportResult result, final Uri path) {
ImportExportResultType resultType = result.resultType();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
int messageId;
if (result == ImportExportResult.Success) {
builder.setTitle(R.string.exportSuccessfulTitle);
messageId = R.string.exportSuccessful;
} else {
builder.setTitle(R.string.exportFailedTitle);
messageId = R.string.exportFailed;
}
final String message = getResources().getString(messageId);
builder.setMessage(message);
builder.setTitle(resultType == ImportExportResultType.Success ? R.string.exportSuccessfulTitle : R.string.exportFailedTitle);
builder.setMessage(buildResultDialogMessage(result, false));
builder.setNeutralButton(R.string.ok, (dialog, which) -> dialog.dismiss());
if (result == ImportExportResult.Success) {
if (resultType == ImportExportResultType.Success) {
final CharSequence sendLabel = ImportExportActivity.this.getResources().getText(R.string.sendLabel);
builder.setPositiveButton(sendLabel, (dialog, which) -> {

View File

@@ -16,6 +16,7 @@ import java.nio.charset.StandardCharsets;
import protect.card_locker.async.CompatCallable;
import protect.card_locker.importexport.DataFormat;
import protect.card_locker.importexport.ImportExportResult;
import protect.card_locker.importexport.ImportExportResultType;
import protect.card_locker.importexport.MultiFormatExporter;
import protect.card_locker.importexport.MultiFormatImporter;
@@ -63,19 +64,20 @@ public class ImportExportTask implements CompatCallable<ImportExportResult> {
private ImportExportResult performImport(Context context, InputStream stream, SQLiteDatabase database, char[] password) {
ImportExportResult importResult = MultiFormatImporter.importData(context, database, stream, format, password);
Log.i(TAG, "Import result: " + importResult.name());
Log.i(TAG, "Import result: " + importResult);
return importResult;
}
private ImportExportResult performExport(Context context, OutputStream stream, SQLiteDatabase database, char[] password) {
ImportExportResult result = ImportExportResult.GenericFailure;
ImportExportResult result;
try {
OutputStreamWriter writer = new OutputStreamWriter(stream, StandardCharsets.UTF_8);
result = MultiFormatExporter.exportData(context, database, stream, format, password);
writer.close();
} catch (IOException e) {
result = new ImportExportResult(ImportExportResultType.GenericFailure, e.toString());
Log.e(TAG, "Unable to export file", e);
}

View File

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

View File

@@ -10,6 +10,9 @@ import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.text.TextPaint;
import android.util.Log;
import androidx.core.graphics.PaintCompat;
/**
* Original from https://github.com/andOTP/andOTP/blob/master/app/src/main/java/org/shadowice/flocke/andotp/Utilities/LetterBitmap.java
@@ -48,7 +51,6 @@ class LetterBitmap {
public LetterBitmap(Context context, String displayName, String key, int tileLetterFontSize,
int width, int height, Integer backgroundColor, Integer textColor) {
TextPaint paint = new TextPaint();
paint.setTypeface(Typeface.create("sans-serif-light", Typeface.BOLD));
if (textColor != null) {
paint.setColor(textColor);
@@ -58,6 +60,8 @@ class LetterBitmap {
paint.setTextAlign(Paint.Align.CENTER);
paint.setAntiAlias(true);
paint.setTextSize(tileLetterFontSize);
paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
if (backgroundColor == null) {
mColor = getDefaultColor(context, key);
@@ -66,22 +70,31 @@ class LetterBitmap {
}
mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
String firstChar = displayName.substring(0, 1);
String firstChar = displayName.substring(0, 1).toUpperCase();
int firstCharEnd = 2;
while (firstCharEnd <= displayName.length()) {
// Test for the longest render-able string
// But ignore containing only a-Z0-9 to not render things like ffi as a single character
String test = displayName.substring(0, firstCharEnd);
if (!isAlphabetical(test) && PaintCompat.hasGlyph(paint, test)) {
firstChar = test;
}
firstCharEnd++;
}
Log.d("LetterBitmap", "using sequence " + firstChar + " to render first char which has length " + firstChar.length());
final Canvas c = new Canvas();
c.setBitmap(mBitmap);
c.drawColor(mColor);
char[] firstCharArray = new char[1];
firstCharArray[0] = firstChar.toUpperCase().charAt(0);
paint.setTextSize(tileLetterFontSize);
// The bounds that enclose the letter
Rect bounds = new Rect();
paint.getTextBounds(firstChar, 0, firstChar.length(), bounds);
c.drawText(firstChar,
0, firstChar.length(),
width / 2.0f, (height - (bounds.bottom + bounds.top)) / 2.0f
, paint);
paint.getTextBounds(firstCharArray, 0, 1, bounds);
c.drawText(firstCharArray, 0, 1, width / 2.0f, height / 2.0f
+ (bounds.bottom - bounds.top) / 2.0f, paint);
}
/**
@@ -112,6 +125,10 @@ class LetterBitmap {
return colors.getColor(color, Color.BLACK);
}
private static boolean isAlphabetical(String string) {
return string.matches("[a-zA-Z0-9]*");
}
/**
* Determine the color which the letter tile will use if no default
* color is provided.

View File

@@ -29,13 +29,14 @@ public class LoyaltyCard implements Parcelable {
public final Integer headerColor;
public final int starStatus;
public final int archiveStatus;
public final long lastUsed;
public int zoomLevel;
public LoyaltyCard(final int id, final String store, final String note, final Date expiry,
final BigDecimal balance, 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) {
@Nullable final Integer headerColor, final int starStatus, final long lastUsed, final int zoomLevel,final int archiveStatus) {
this.id = id;
this.store = store;
this.note = note;
@@ -49,6 +50,7 @@ public class LoyaltyCard implements Parcelable {
this.starStatus = starStatus;
this.lastUsed = lastUsed;
this.zoomLevel = zoomLevel;
this.archiveStatus = archiveStatus;
}
protected LoyaltyCard(Parcel in) {
@@ -68,6 +70,7 @@ public class LoyaltyCard implements Parcelable {
starStatus = in.readInt();
lastUsed = in.readLong();
zoomLevel = in.readInt();
archiveStatus = in.readInt();
}
@Override
@@ -85,6 +88,7 @@ public class LoyaltyCard implements Parcelable {
parcel.writeInt(starStatus);
parcel.writeLong(lastUsed);
parcel.writeInt(zoomLevel);
parcel.writeInt(archiveStatus);
}
public static LoyaltyCard toLoyaltyCard(Cursor cursor) {
@@ -98,6 +102,7 @@ public class LoyaltyCard implements Parcelable {
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);
int balanceTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE);
@@ -124,7 +129,7 @@ public class LoyaltyCard implements Parcelable {
headerColor = cursor.getInt(headerColorColumn);
}
return new LoyaltyCard(id, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starred, lastUsed, zoomLevel);
return new LoyaltyCard(id, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starred, lastUsed, zoomLevel,archived);
}
@Override

View File

@@ -1,6 +1,7 @@
package protect.card_locker;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap;
@@ -15,12 +16,6 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.BlendModeColorFilterCompat;
import androidx.core.graphics.BlendModeCompat;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.card.MaterialCardView;
import java.math.BigDecimal;
@@ -29,36 +24,58 @@ import java.util.ArrayList;
import java.util.Currency;
import java.util.Date;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.graphics.BlendModeColorFilterCompat;
import androidx.core.graphics.BlendModeCompat;
import androidx.recyclerview.widget.RecyclerView;
import protect.card_locker.preferences.Settings;
public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCursorAdapter.LoyaltyCardListItemViewHolder> {
private int mCurrentSelectedIndex = -1;
Settings mSettings;
boolean mDarkModeEnabled;
private final Context mContext;
public final Context mContext;
private final CardAdapterListener mListener;
protected SparseBooleanArray mSelectedItems;
protected SparseBooleanArray mAnimationItemsIndex;
private boolean mReverseAllAnimations = false;
private boolean mShowDetails = true;
private boolean mShowDetails;
public LoyaltyCardCursorAdapter(Context inputContext, Cursor inputCursor, CardAdapterListener inputListener) {
super(inputCursor, DBHelper.LoyaltyCardDbIds.ID);
setHasStableIds(true);
mSettings = new Settings(inputContext);
mContext = inputContext.getApplicationContext();
mContext = inputContext;
mListener = inputListener;
mSelectedItems = new SparseBooleanArray();
mAnimationItemsIndex = new SparseBooleanArray();
mDarkModeEnabled = Utils.isDarkModeEnabled(inputContext);
refreshState();
swapCursor(inputCursor);
}
public void refreshState() {
// Retrieve user details preference
SharedPreferences cardDetailsPref = mContext.getSharedPreferences(
mContext.getString(R.string.sharedpreference_card_details),
Context.MODE_PRIVATE);
mShowDetails = cardDetailsPref.getBoolean(mContext.getString(R.string.sharedpreference_card_details_show), true);
}
public void showDetails(boolean show) {
mShowDetails = show;
notifyDataSetChanged();
// Store in Shared Preference to restore next adapter launch
SharedPreferences cardDetailsPref = mContext.getSharedPreferences(
mContext.getString(R.string.sharedpreference_card_details),
Context.MODE_PRIVATE);
SharedPreferences.Editor cardDetailsPrefEditor = cardDetailsPref.edit();
cardDetailsPrefEditor.putBoolean(mContext.getString(R.string.sharedpreference_card_details_show), show);
cardDetailsPrefEditor.apply();
}
public boolean showingDetails() {
@@ -112,7 +129,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
}
inputHolder.setIconBackgroundColor(loyaltyCard.headerColor != null ? loyaltyCard.headerColor : R.attr.colorPrimary);
inputHolder.toggleStar(loyaltyCard.starStatus != 0, itemSelected(inputCursor.getPosition()));
inputHolder.toggleCardStateIcon(loyaltyCard.starStatus != 0, loyaltyCard.archiveStatus != 0, itemSelected(inputCursor.getPosition()));
inputHolder.itemView.setActivated(mSelectedItems.get(inputCursor.getPosition(), false));
applyIconAnimation(inputHolder, inputCursor.getPosition());
@@ -151,14 +168,12 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
private void applyIconAnimation(LoyaltyCardListItemViewHolder inputHolder, int inputPosition) {
if (itemSelected(inputPosition)) {
inputHolder.mCardIcon.setVisibility(View.GONE);
inputHolder.mTickIcon.setVisibility(View.VISIBLE);
if (mCurrentSelectedIndex == inputPosition) {
resetCurrentIndex();
}
} else {
inputHolder.mTickIcon.setVisibility(View.GONE);
inputHolder.mCardIcon.setVisibility(View.VISIBLE);
if ((mReverseAllAnimations && mAnimationItemsIndex.get(inputPosition, false)) || mCurrentSelectedIndex == inputPosition) {
resetCurrentIndex();
}
@@ -213,13 +228,15 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
public class LoyaltyCardListItemViewHolder extends RecyclerView.ViewHolder {
public TextView mStoreField, mNoteField, mBalanceField, mExpiryField;
public ImageView mCardIcon, mStarBackground, mStarBorder, mTickIcon;
public ImageView mCardIcon, mStarBackground, mStarBorder, mTickIcon, mArchivedBackground;
public MaterialCardView mRow, mIconLayout;
public ConstraintLayout mStar;
public ConstraintLayout mStar, mArchived;
public View mDivider;
private int mIconBackgroundColor;
protected LoyaltyCardListItemViewHolder(View inputView, CardAdapterListener inputListener) {
super(inputView);
mRow = inputView.findViewById(R.id.row);
@@ -228,12 +245,13 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
mNoteField = inputView.findViewById(R.id.note);
mBalanceField = inputView.findViewById(R.id.balance);
mExpiryField = inputView.findViewById(R.id.expiry);
mIconLayout = inputView.findViewById(R.id.icon_layout);
mCardIcon = inputView.findViewById(R.id.thumbnail);
mStar = inputView.findViewById(R.id.star);
mStarBackground = inputView.findViewById(R.id.star_background);
mStarBorder = inputView.findViewById(R.id.star_border);
mArchived = inputView.findViewById(R.id.archivedIcon);
mArchivedBackground = inputView.findViewById(R.id.archive_background);
mTickIcon = inputView.findViewById(R.id.selected_thumbnail);
inputView.setOnLongClickListener(view -> {
inputListener.onRowClicked(getAdapterPosition());
@@ -268,10 +286,12 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
mDivider.setVisibility(View.VISIBLE);
mBalanceField.setVisibility(View.VISIBLE);
Drawable balanceIcon = mBalanceField.getCompoundDrawables()[0];
balanceIcon.setBounds(0, 0, drawableSize, drawableSize);
mBalanceField.setCompoundDrawablesRelative(balanceIcon, null, null, null);
if (mDarkModeEnabled) {
balanceIcon.setColorFilter(BlendModeColorFilterCompat.createBlendModeColorFilterCompat(Color.WHITE, BlendModeCompat.SRC_ATOP));
if (balanceIcon != null) {
balanceIcon.setBounds(0, 0, drawableSize, drawableSize);
mBalanceField.setCompoundDrawablesRelative(balanceIcon, null, null, null);
if (mDarkModeEnabled) {
balanceIcon.setColorFilter(BlendModeColorFilterCompat.createBlendModeColorFilterCompat(Color.WHITE, BlendModeCompat.SRC_ATOP));
}
}
mBalanceField.setText(Utils.formatBalance(mContext, balance, balanceType));
mBalanceField.setTextSize(size);
@@ -288,21 +308,25 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
mDivider.setVisibility(View.VISIBLE);
mExpiryField.setVisibility(View.VISIBLE);
Drawable expiryIcon = mExpiryField.getCompoundDrawables()[0];
expiryIcon.setBounds(0, 0, drawableSize, drawableSize);
mExpiryField.setCompoundDrawablesRelative(expiryIcon, null, null, null);
if (Utils.hasExpired(expiry)) {
expiryIcon.setColorFilter(BlendModeColorFilterCompat.createBlendModeColorFilterCompat(Color.RED, BlendModeCompat.SRC_ATOP));
mExpiryField.setTextColor(Color.RED);
} else if (mDarkModeEnabled) {
expiryIcon.setColorFilter(BlendModeColorFilterCompat.createBlendModeColorFilterCompat(Color.WHITE, BlendModeCompat.SRC_ATOP));
if (expiryIcon != null) {
expiryIcon.setBounds(0, 0, drawableSize, drawableSize);
mExpiryField.setCompoundDrawablesRelative(expiryIcon, null, null, null);
if (Utils.hasExpired(expiry)) {
expiryIcon.setColorFilter(BlendModeColorFilterCompat.createBlendModeColorFilterCompat(Color.RED, BlendModeCompat.SRC_ATOP));
} else if (mDarkModeEnabled) {
expiryIcon.setColorFilter(BlendModeColorFilterCompat.createBlendModeColorFilterCompat(Color.WHITE, BlendModeCompat.SRC_ATOP));
}
}
mExpiryField.setText(DateFormat.getDateInstance(DateFormat.LONG).format(expiry));
if (Utils.hasExpired(expiry)) {
mExpiryField.setTextColor(Color.RED);
}
mExpiryField.setTextSize(size);
}
mExpiryField.requestLayout();
}
public void toggleStar(boolean enable, boolean colorByTheme) {
public void toggleCardStateIcon(boolean enableStar, boolean enableArchive, boolean colorByTheme) {
/* the below code does not work in android 5! hence the change of drawable instead
boolean needDarkForeground = Utils.needsDarkForeground(mIconBackgroundColor);
Drawable borderDrawable = mStarBorder.getDrawable().mutate();
@@ -316,20 +340,33 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
if (colorByTheme) {
dark = !mDarkModeEnabled;
}
if (dark) {
mStarBorder.setImageResource(R.drawable.ic_unstarred_white);
mStarBackground.setImageResource(R.drawable.ic_starred_black);
mArchivedBackground.setImageResource(R.drawable.ic_baseline_archive_24_black);
} else {
mStarBorder.setImageResource(R.drawable.ic_unstarred_black);
mStarBackground.setImageResource(R.drawable.ic_starred_white);
mArchivedBackground.setImageResource(R.drawable.ic_baseline_archive_24);
}
if (enable) {
if (enableStar) {
mStar.setVisibility(View.VISIBLE);
} else {
} else{
mStar.setVisibility(View.GONE);
}
if (enableArchive) {
mArchived.setVisibility(View.VISIBLE);
} else{
mArchived.setVisibility(View.GONE);
}
mStarBorder.invalidate();
mStarBackground.invalidate();
mArchivedBackground.invalidate();
}
public void setIconBackgroundColor(int color) {

View File

@@ -5,10 +5,10 @@ import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.res.TypedArray;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@@ -36,6 +36,7 @@ import android.widget.Toast;
import com.google.android.material.chip.Chip;
import com.google.android.material.chip.ChipGroup;
import com.google.android.material.color.MaterialColors;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.tabs.TabLayout;
@@ -50,6 +51,7 @@ import java.io.IOException;
import java.io.InvalidObjectException;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
@@ -68,13 +70,12 @@ import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.ContextCompat;
import androidx.core.content.FileProvider;
import androidx.exifinterface.media.ExifInterface;
import androidx.fragment.app.DialogFragment;
import androidx.palette.graphics.Palette;
import protect.card_locker.async.TaskHandler;
public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
@@ -106,6 +107,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
private static final int PERMISSION_REQUEST_CAMERA_IMAGE_ICON = 102;
public static final String BUNDLE_ID = "id";
public static final String BUNDLE_DUPLICATE_ID = "duplicateId";
public static final String BUNDLE_UPDATE = "update";
public static final String BUNDLE_CARDID = "cardId";
public static final String BUNDLE_BARCODEID = "barcodeId";
@@ -134,8 +136,11 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
Button enterButton;
Toolbar toolbar;
int loyaltyCardId;
boolean updateLoyaltyCard;
boolean duplicateFromLoyaltyCardId;
String cardId;
String barcodeId;
String barcodeType;
@@ -201,7 +206,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
(CatimaBarcode) (fieldName == LoyaltyCardField.barcodeType ? value : loyaltyCard.barcodeType),
(Integer) (fieldName == LoyaltyCardField.headerColor ? value : loyaltyCard.headerColor),
(int) (fieldName == LoyaltyCardField.starStatus ? value : loyaltyCard.starStatus),
Utils.getUnixTime(), 100
Utils.getUnixTime(), 100, (int) (fieldName == LoyaltyCardField.archiveStatus ? value : loyaltyCard.archiveStatus)
);
}
@@ -219,6 +224,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
final Bundle b = intent.getExtras();
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);
cardId = b != null ? b.getString(BUNDLE_CARDID) : null;
barcodeId = b != null ? b.getString(BUNDLE_BARCODEID) : null;
@@ -290,7 +296,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.loyalty_card_edit_activity);
Toolbar toolbar = findViewById(R.id.toolbar);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
@@ -319,6 +325,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
barcodeIdField = findViewById(R.id.barcodeIdField);
barcodeTypeField = findViewById(R.id.barcodeTypeField);
barcodeImage = findViewById(R.id.barcode);
barcodeImage.setClipToOutline(true);
barcodeImageLayout = findViewById(R.id.barcodeLayout);
barcodeCaptureLayout = findViewById(R.id.barcodeCaptureLayout);
cardImageFrontHolder = findViewById(R.id.frontImageHolder);
@@ -393,11 +400,10 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
try {
BigDecimal balance = Utils.parseCurrency(s.toString(), Utils.currencyHasDecimals(tempLoyaltyCard.balanceType));
BigDecimal balance = Utils.parseBalance(s.toString(), tempLoyaltyCard.balanceType);
updateTempState(LoyaltyCardField.balance, balance);
validBalance = true;
} catch (NumberFormatException e) {
} catch (ParseException e) {
validBalance = false;
e.printStackTrace();
}
@@ -444,14 +450,10 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
for (int i = locales.size() - 1; i >= 0; i--) {
Locale locale = locales.get(i);
String currencySymbol = Currency.getInstance(locale).getSymbol();
currencyList.remove(currencySymbol);
currencyList.add(0, currencySymbol);
currencyPrioritizeLocaleSymbols(currencyList, locale);
}
} else {
String currencySymbol = Currency.getInstance(mSystemLocale).getSymbol();
currencyList.remove(currencySymbol);
currencyList.add(0, currencySymbol);
currencyPrioritizeLocaleSymbols(currencyList, mSystemLocale);
}
currencyList.add(0, getString(R.string.points));
@@ -687,6 +689,24 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
new AspectRatio(getResources().getString(R.string.ucrop_label_original).toUpperCase(), sourceWidth, sourceHeight),
new AspectRatio(getResources().getString(R.string.card).toUpperCase(), 85.6f, 53.98f)
);
// Fix theming
int colorPrimary = MaterialColors.getColor(this, R.attr.colorPrimary, ContextCompat.getColor(this, R.color.md_theme_light_primary));
int colorOnPrimary = MaterialColors.getColor(this, R.attr.colorOnPrimary, ContextCompat.getColor(this, R.color.md_theme_light_onPrimary));
int colorSurface = MaterialColors.getColor(this, R.attr.colorSurface, ContextCompat.getColor(this, R.color.md_theme_light_surface));
int colorOnSurface = MaterialColors.getColor(this, R.attr.colorOnSurface, ContextCompat.getColor(this, R.color.md_theme_light_onSurface));
int colorBackground = MaterialColors.getColor(this, android.R.attr.colorBackground, ContextCompat.getColor(this, R.color.md_theme_light_onSurface));
mCropperOptions.setToolbarColor(colorSurface);
mCropperOptions.setStatusBarColor(colorSurface);
mCropperOptions.setToolbarWidgetColor(colorOnSurface);
mCropperOptions.setRootViewBackgroundColor(colorBackground);
// set tool tip to be the darker of primary color
if (Utils.isDarkModeEnabled(this)) {
mCropperOptions.setActiveControlsWidgetColor(colorOnPrimary);
} else {
mCropperOptions.setActiveControlsWidgetColor(colorPrimary);
}
}
@Override
@@ -730,9 +750,8 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
onResuming = true;
if (tempLoyaltyCard == null) {
if (updateLoyaltyCard) {
if (updateLoyaltyCard || duplicateFromLoyaltyCardId) {
tempLoyaltyCard = DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId);
if (tempLoyaltyCard == null) {
Log.w(TAG, "Could not lookup loyalty card " + loyaltyCardId);
@@ -750,7 +769,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
}
} else {
// New card, use default values
tempLoyaltyCard = new LoyaltyCard(-1, "", "", null, new BigDecimal("0"), null, "", null, null, null, 0, Utils.getUnixTime(), 100);
tempLoyaltyCard = new LoyaltyCard(-1, "", "", null, new BigDecimal("0"), null, "", null, null, null, 0, Utils.getUnixTime(), 100,0);
}
}
@@ -758,7 +777,11 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
if (!initDone) {
if (updateLoyaltyCard) {
setTitle(R.string.editCardTitle);
} else {
setTitle(R.string.addCardTitle);
}
if (updateLoyaltyCard || duplicateFromLoyaltyCardId) {
if (!mFrontImageUnsaved && !croppedFrontImage() && !mFrontImageRemoved) {
setCardImage(cardImageFront, Utils.retrieveCardImage(this, tempLoyaltyCard.id, ImageLocationType.front), true);
}
@@ -836,10 +859,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
// Generate random header color
if (tempLoyaltyCard.headerColor == null) {
// Select a random color to start out with.
TypedArray colors = getResources().obtainTypedArray(R.array.letter_tile_colors);
final int color = (int) (Math.random() * colors.length());
updateTempState(LoyaltyCardField.headerColor, colors.getColor(color, Color.BLACK));
colors.recycle();
updateTempState(LoyaltyCardField.headerColor, Utils.getRandomHeaderColor(this));
}
// It can't be null because we set it in updateTempState but SpotBugs insists it can be
@@ -900,7 +920,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
protected void setColorFromIcon() {
Object icon = thumbnail.getTag();
if (icon != null && (icon instanceof Bitmap)) {
updateTempState(LoyaltyCardField.headerColor, new Palette.Builder((Bitmap) icon).generate().getDominantColor(tempLoyaltyCard.headerColor != null ? tempLoyaltyCard.headerColor : R.attr.colorPrimary));
updateTempState(LoyaltyCardField.headerColor, Utils.getHeaderColorFromImage((Bitmap) icon, tempLoyaltyCard.headerColor != null ? tempLoyaltyCard.headerColor : R.attr.colorPrimary));
} else {
Log.d("setColorFromIcon", "attempting header color change from icon but icon does not exist");
}
@@ -1149,7 +1169,14 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
Intent i = new Intent(Intent.ACTION_PICK);
i.setType("image/*");
mPhotoPickerLauncher.launch(i);
try {
mPhotoPickerLauncher.launch(i);
} catch (ActivityNotFoundException e) {
Toast.makeText(getApplicationContext(), R.string.failedLaunchingPhotoPicker, Toast.LENGTH_LONG).show();
Log.e(TAG, "No activity found to handle intent", e);
}
return null;
});
@@ -1212,7 +1239,16 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), this, year, month, day);
datePickerDialog.getDatePicker().setMinDate(getMinDateOfDatePicker());
return datePickerDialog;
}
private long getMinDateOfDatePicker()
{
Calendar minDateCalendar = Calendar.getInstance();
minDateCalendar.set(1970, 0, 1);
return minDateCalendar.getTimeInMillis();
}
public void onDateSet(DatePicker view, int year, int month, int day) {
@@ -1277,7 +1313,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
}
Log.i(TAG, "Updated " + loyaltyCardId + " to " + cardId);
} else {
loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, tempLoyaltyCard.store, tempLoyaltyCard.note, tempLoyaltyCard.expiry, tempLoyaltyCard.balance, tempLoyaltyCard.balanceType, tempLoyaltyCard.cardId, tempLoyaltyCard.barcodeId, tempLoyaltyCard.barcodeType, tempLoyaltyCard.headerColor, 0, tempLoyaltyCard.lastUsed);
loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, tempLoyaltyCard.store, tempLoyaltyCard.note, tempLoyaltyCard.expiry, tempLoyaltyCard.balance, tempLoyaltyCard.balanceType, tempLoyaltyCard.cardId, tempLoyaltyCard.barcodeId, tempLoyaltyCard.barcodeType, tempLoyaltyCard.headerColor, 0, tempLoyaltyCard.lastUsed,0);
try {
Utils.saveCardImage(this, (Bitmap) cardImageFront.getTag(), loyaltyCardId, ImageLocationType.front);
Utils.saveCardImage(this, (Bitmap) cardImageBack.getTag(), loyaltyCardId, ImageLocationType.back);
@@ -1291,16 +1327,16 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
ShortcutHelper.updateShortcuts(this, DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId));
if(duplicateFromLoyaltyCardId){
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
}
finish();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (updateLoyaltyCard) {
getMenuInflater().inflate(R.menu.card_update_menu, menu);
} else {
getMenuInflater().inflate(R.menu.card_add_menu, menu);
}
getMenuInflater().inflate(R.menu.card_add_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@@ -1309,30 +1345,9 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case android.R.id.home:
askBeforeQuitIfChanged();
break;
case R.id.action_delete:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.deleteTitle);
builder.setMessage(R.string.deleteConfirmation);
builder.setPositiveButton(R.string.confirm, (dialog, which) -> {
Log.e(TAG, "Deleting card: " + loyaltyCardId);
DBHelper.deleteLoyaltyCard(mDatabase, LoyaltyCardEditActivity.this, loyaltyCardId);
ShortcutHelper.removeShortcut(LoyaltyCardEditActivity.this, loyaltyCardId);
finish();
dialog.dismiss();
});
builder.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
AlertDialog dialog = builder.create();
dialog.show();
return true;
if (id == android.R.id.home) {
askBeforeQuitIfChanged();
return true;
}
return super.onOptionsItemSelected(item);
@@ -1385,13 +1400,22 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
}
}
}
mCropperLauncher.launch(
UCrop.of(
sourceUri,
destUri
).withOptions(mCropperOptions)
.getIntent(this)
);
Intent ucropIntent = UCrop.of(
sourceUri,
destUri
).withOptions(mCropperOptions)
.getIntent(this);
ucropIntent.setClass(this, UCropWrapper.class);
for (int i = 0; i < toolbar.getChildCount(); i++) {
// send toolbar font details to ucrop wrapper
View child = toolbar.getChildAt(i);
if (child instanceof AppCompatTextView) {
AppCompatTextView childTextView = (AppCompatTextView) child;
ucropIntent.putExtra(UCropWrapper.UCROP_TOOLBAR_TYPEFACE_STYLE, childTextView.getTypeface().getStyle());
break;
}
}
mCropperLauncher.launch(ucropIntent);
}
private void generateBarcode() {
@@ -1422,13 +1446,13 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
barcodeImage.getViewTreeObserver().removeOnGlobalLayoutListener(this);
Log.d(TAG, "ImageView size now known");
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, barcodeImageGenerationFinishedCallback);
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, barcodeImageGenerationFinishedCallback, true);
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
}
});
} else {
Log.d(TAG, "ImageView size known known, creating barcode");
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, barcodeImageGenerationFinishedCallback);
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, barcodeImageGenerationFinishedCallback, true);
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
}
}
@@ -1482,4 +1506,14 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
throw new UnsupportedOperationException();
}
}
private void currencyPrioritizeLocaleSymbols(ArrayList<String> currencyList, Locale locale) {
try {
String currencySymbol = Currency.getInstance(locale).getSymbol();
currencyList.remove(currencySymbol);
currencyList.add(0, currencySymbol);
} catch (IllegalArgumentException e) {
Log.d(TAG, "Could not get currency data for locale info: " + e);
}
}
}

View File

@@ -11,5 +11,6 @@ public enum LoyaltyCardField {
barcodeId,
barcodeType,
headerColor,
starStatus
starStatus,
archiveStatus
}

View File

@@ -3,9 +3,6 @@ package protect.card_locker;
import android.app.Application;
import androidx.appcompat.app.AppCompatDelegate;
import com.google.android.material.color.DynamicColors;
import protect.card_locker.preferences.Settings;
public class LoyaltyCardLockerApplication extends Application {

View File

@@ -33,6 +33,7 @@ import android.widget.Toast;
import com.google.android.material.appbar.AppBarLayout;
import com.google.android.material.bottomsheet.BottomSheetBehavior;
import com.google.android.material.color.MaterialColors;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import java.io.UnsupportedEncodingException;
@@ -44,17 +45,18 @@ import java.util.List;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.content.res.AppCompatResources;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.appcompat.widget.Toolbar;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.constraintlayout.widget.Guideline;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.ColorUtils;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.core.widget.NestedScrollView;
import androidx.core.widget.TextViewCompat;
import protect.card_locker.async.TaskHandler;
import protect.card_locker.preferences.Settings;
@@ -120,6 +122,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
private final int HEADER_FILTER_ALPHA = 127;
final private TaskHandler mTasks = new TaskHandler();
Runnable barcodeImageGenerationFinishedCallback;
@Override
public boolean onDown(MotionEvent e) {
@@ -248,13 +251,25 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
settings = new Settings(this);
String cardOrientation = settings.getCardViewOrientation();
if (cardOrientation.equals(getString(R.string.settings_key_lock_on_opening_orientation))) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
} else if (cardOrientation.equals(getString(R.string.settings_key_portrait_orientation))) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else if (cardOrientation.equals(getString(R.string.settings_key_landscape_orientation))) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
if (savedInstanceState != null) {
mainImageIndex = savedInstanceState.getInt(STATE_IMAGEINDEX);
isFullscreen = savedInstanceState.getBoolean(STATE_FULLSCREEN);
bottomSheetState = savedInstanceState.getInt(STATE_BOTTOMSHEET);
}
settings = new Settings(this);
extractIntentFields(getIntent());
@@ -276,6 +291,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
storeName = findViewById(R.id.storeName);
maximizeButton = findViewById(R.id.maximizeButton);
mainImage = findViewById(R.id.mainImage);
mainImage.setClipToOutline(true);
dotIndicator = findViewById(R.id.dotIndicator);
minimizeButton = findViewById(R.id.minimizeButton);
collapsingToolbarLayout = findViewById(R.id.collapsingToolbarLayout);
@@ -283,6 +299,19 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
iconImage = findViewById(R.id.icon_image);
landscapeToolbar = findViewById(R.id.toolbar_landscape);
barcodeImageGenerationFinishedCallback = () -> {
if (!(boolean) mainImage.getTag()) {
mainImage.setVisibility(View.GONE);
imageTypes.remove(ImageType.BARCODE);
// Redraw UI
setDotIndicator(Utils.isDarkModeEnabled(LoyaltyCardViewActivity.this));
setFullscreen(isFullscreen);
Toast.makeText(LoyaltyCardViewActivity.this, getString(R.string.wrongValueForBarcodeType), Toast.LENGTH_LONG).show();
}
};
centerGuideline = findViewById(R.id.centerGuideline);
barcodeScaler = findViewById(R.id.barcodeScaler);
barcodeScaler.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@@ -302,7 +331,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
setCenterGuideline(loyaltyCard.zoomLevel);
drawMainImage(mainImageIndex, true);
drawMainImage(mainImageIndex, true, isFullscreen);
}
@Override
@@ -398,7 +427,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
private void adjustLayoutHeights() {
// use getLayoutParams instead of getHeight when heights are pre-determined in xml! getHeight could return 0 if a View is not inflated
if (iconImage.getLayoutParams().height != appBarLayout.getHeight()) {
if (appBarLayout.getHeight() != 0 && iconImage.getLayoutParams().height != appBarLayout.getHeight()) {
Log.d("adjustLayoutHeights", "setting imageIcon height from: " + iconImage.getLayoutParams().height + " to: " + appBarLayout.getHeight());
iconImage.setLayoutParams(new CoordinatorLayout.LayoutParams(
CoordinatorLayout.LayoutParams.MATCH_PARENT, appBarLayout.getHeight())
@@ -565,15 +594,29 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
storeName.setTextColor(textColor);
landscapeToolbar.setTitleTextColor(textColor);
// Also apply colours to buttons
// Also apply colours to UI elements
int darkenedColor = ColorUtils.blendARGB(backgroundHeaderColor, Color.BLACK, 0.1f);
barcodeScaler.setProgressTintList(ColorStateList.valueOf(darkenedColor));
barcodeScaler.setThumbTintList(ColorStateList.valueOf(darkenedColor));
maximizeButton.setBackgroundColor(darkenedColor);
minimizeButton.setBackgroundColor(darkenedColor);
bottomSheetButton.setBackgroundColor(darkenedColor);
maximizeButton.setColorFilter(textColor);
minimizeButton.setColorFilter(textColor);
bottomSheetButton.setColorFilter(textColor);
editButton.setBackgroundTintList(ColorStateList.valueOf(Utils.getComplementaryColor(darkenedColor)));
int complementaryColor = Utils.getComplementaryColor(darkenedColor);
editButton.setBackgroundTintList(ColorStateList.valueOf(complementaryColor));
Drawable editButtonIcon = editButton.getDrawable();
editButtonIcon.mutate();
int colorPrimary = MaterialColors.getColor(this, R.attr.colorPrimary, ContextCompat.getColor(this, R.color.md_theme_light_primary));
int colorOnPrimary = MaterialColors.getColor(this, R.attr.colorOnPrimary, ContextCompat.getColor(this, R.color.md_theme_light_onPrimary));
boolean darkMode = Utils.isDarkModeEnabled(this);
if (Utils.needsDarkForeground(complementaryColor)) {
editButtonIcon.setTint(darkMode ? colorOnPrimary : colorPrimary);
} else {
editButtonIcon.setTint(darkMode ? colorPrimary : colorOnPrimary);
}
editButton.setImageDrawable(editButtonIcon);
Bitmap icon = Utils.retrieveCardImage(this, loyaltyCard.id, ImageLocationType.icon);
if (icon != null) {
@@ -593,7 +636,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
backgroundNeedsDarkIcons = Utils.needsDarkForeground(backgroundHeaderColor);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setHomeAsUpIndicator(getIcon(R.drawable.ic_arrow_back_white, backgroundNeedsDarkIcons));
actionBar.setHomeAsUpIndicator(getIcon(R.drawable.home_arrow_back_white, backgroundNeedsDarkIcons));
}
// Make notification area light if dark icons are needed
@@ -632,23 +675,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
imageTypes.add(ImageType.IMAGE_BACK);
}
dotIndicator.removeAllViews();
if (imageTypes.size() >= 2) {
dots = new ImageView[imageTypes.size()];
boolean darkMode = Utils.isDarkModeEnabled(getApplicationContext());
for (int i = 0; i < imageTypes.size(); i++) {
dots[i] = new ImageView(this);
dots[i].setImageDrawable(getDotIcon(false, darkMode));
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(8, 0, 8, 0);
dotIndicator.addView(dots[i], params);
}
dotIndicator.setVisibility(View.VISIBLE);
}
setDotIndicator(darkMode);
setFullscreen(isFullscreen);
@@ -671,18 +698,19 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.card_view_menu, menu);
// Always calculate lockscreen icon, it may need a black color
boolean lockBarcodeScreenOrientation = settings.getLockBarcodeScreenOrientation();
MenuItem item = menu.findItem(R.id.action_lock_unlock);
setOrientatonLock(item, lockBarcodeScreenOrientation);
if (lockBarcodeScreenOrientation) {
item.setVisible(false);
}
loyaltyCard = DBHelper.getLoyaltyCard(database, loyaltyCardId);
starred = loyaltyCard.starStatus != 0;
if(loyaltyCard.archiveStatus != 0){
menu.findItem(R.id.action_unarchive).setVisible(true);
menu.findItem(R.id.action_archive).setVisible(false);
}
else{
menu.findItem(R.id.action_unarchive).setVisible(false);
menu.findItem(R.id.action_archive).setVisible(true);
}
menu.findItem(R.id.action_overflow).setIcon(getIcon(R.drawable.ic_overflow_menu, backgroundNeedsDarkIcons));
menu.findItem(R.id.action_share).setIcon(getIcon(R.drawable.ic_share_white, backgroundNeedsDarkIcons));
return super.onCreateOptionsMenu(menu);
@@ -720,13 +748,14 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
}
return true;
case R.id.action_lock_unlock:
if (rotationEnabled) {
setOrientatonLock(item, true);
} else {
setOrientatonLock(item, false);
}
rotationEnabled = !rotationEnabled;
case R.id.action_duplicate:
loyaltyCard = DBHelper.getLoyaltyCard(database, loyaltyCardId);
Intent intent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
Bundle bundle = new Bundle();
bundle.putInt("id", loyaltyCardId);
bundle.putBoolean("duplicateId", true);
intent.putExtras(bundle);
startActivity(intent);
return true;
case R.id.action_star_unstar:
@@ -734,6 +763,38 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
DBHelper.updateLoyaltyCardStarStatus(database, loyaltyCardId, starred ? 1 : 0);
invalidateOptionsMenu();
return true;
case R.id.action_archive:
DBHelper.updateLoyaltyCardArchiveStatus(database, loyaltyCardId, 1);
Toast.makeText(LoyaltyCardViewActivity.this, R.string.archived, Toast.LENGTH_LONG).show();
invalidateOptionsMenu();
return true;
case R.id.action_unarchive:
DBHelper.updateLoyaltyCardArchiveStatus(database, loyaltyCardId, 0);
Toast.makeText(LoyaltyCardViewActivity.this, R.string.unarchived, Toast.LENGTH_LONG).show();
invalidateOptionsMenu();
return true;
case R.id.action_delete:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.deleteTitle);
builder.setMessage(R.string.deleteConfirmation);
builder.setPositiveButton(R.string.confirm, (dialog, which) -> {
Log.e(TAG, "Deleting card: " + loyaltyCardId);
DBHelper.deleteLoyaltyCard(database, LoyaltyCardViewActivity.this, loyaltyCardId);
ShortcutHelper.removeShortcut(LoyaltyCardViewActivity.this, loyaltyCardId);
finish();
dialog.dismiss();
});
builder.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
AlertDialog dialog = builder.create();
dialog.show();
return true;
}
return super.onOptionsItemSelected(item);
@@ -745,7 +806,6 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
int orientation = getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
Log.d(TAG, "Detected landscape mode");
setTitle(loyaltyCard.store);
collapsingToolbarLayout.setVisibility(View.GONE);
@@ -771,19 +831,6 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
}
}
private void setOrientatonLock(MenuItem item, boolean lock) {
if (lock) {
item.setIcon(getIcon(R.drawable.ic_lock_outline_white_24dp, backgroundNeedsDarkIcons));
item.setTitle(R.string.unlockScreen);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
} else {
item.setIcon(getIcon(R.drawable.ic_lock_open_white_24dp, backgroundNeedsDarkIcons));
item.setTitle(R.string.lockScreen);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
}
private void makeBottomSheetVisibleIfUseful() {
if (noteView.getVisibility() == View.VISIBLE || groupsView.getVisibility() == View.VISIBLE || balanceView.getVisibility() == View.VISIBLE || expiryView.getVisibility() == View.VISIBLE) {
bottomSheet.setVisibility(View.VISIBLE);
@@ -792,7 +839,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
}
}
private void drawBarcode() {
private void drawBarcode(boolean addPadding) {
mTasks.flushTaskList(TaskHandler.TYPE.BARCODE, true, false, false);
if (format != null) {
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(
@@ -802,12 +849,13 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
format,
null,
false,
null);
barcodeImageGenerationFinishedCallback,
addPadding);
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
}
}
private void redrawBarcodeAfterResize() {
private void redrawBarcodeAfterResize(boolean addPadding) {
if (format != null) {
mainImage.getViewTreeObserver().addOnGlobalLayoutListener(
new ViewTreeObserver.OnGlobalLayoutListener() {
@@ -816,13 +864,13 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
mainImage.getViewTreeObserver().removeOnGlobalLayoutListener(this);
Log.d(TAG, "ImageView size now known");
drawBarcode();
drawBarcode(addPadding);
}
});
}
}
private void drawMainImage(int index, boolean waitForResize) {
private void drawMainImage(int index, boolean waitForResize, boolean isFullscreen) {
if (imageTypes.isEmpty()) {
mainImage.setVisibility(View.GONE);
return;
@@ -838,12 +886,19 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
ImageType wantedImageType = imageTypes.get(index);
if (wantedImageType == ImageType.BARCODE) {
if (waitForResize) {
redrawBarcodeAfterResize();
// Use border in non-fullscreen mode
if (!isFullscreen) {
mainImage.setBackground(AppCompatResources.getDrawable(this, R.drawable.round_outline));
} else {
drawBarcode();
mainImage.setBackgroundColor(Color.WHITE);
}
mainImage.setBackgroundColor(Color.WHITE);
if (waitForResize) {
redrawBarcodeAfterResize(!isFullscreen);
} else {
drawBarcode(!isFullscreen);
}
mainImage.setContentDescription(getString(R.string.barcodeImageDescriptionWithType, format.prettyName()));
} else if (wantedImageType == ImageType.IMAGE_FRONT) {
mainImage.setImageBitmap(frontImageBitmap);
@@ -873,7 +928,26 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
mainImageIndex = newIndex;
drawMainImage(newIndex, false);
drawMainImage(newIndex, false, isFullscreen);
}
private void setDotIndicator(boolean darkMode) {
dotIndicator.removeAllViews();
if (imageTypes.size() >= 2) {
dots = new ImageView[imageTypes.size()];
for (int i = 0; i < imageTypes.size(); i++) {
dots[i] = new ImageView(this);
dots[i].setImageDrawable(getDotIcon(false, darkMode));
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(8, 0, 8, 0);
dotIndicator.addView(dots[i], params);
}
dotIndicator.setVisibility(View.VISIBLE);
}
}
/**
@@ -889,7 +963,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
if (enabled && !imageTypes.isEmpty()) {
Log.d(TAG, "Move into fullscreen");
drawMainImage(mainImageIndex, true);
drawMainImage(mainImageIndex, true, isFullscreen);
barcodeScaler.setProgress(loyaltyCard.zoomLevel);
setCenterGuideline(loyaltyCard.zoomLevel);
@@ -910,6 +984,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
// Or the barcode will be centered instead of on top of the screen
// Don't ask me why...
appBarLayout.setVisibility(View.INVISIBLE);
iconImage.setVisibility(View.INVISIBLE);
collapsingToolbarLayout.setVisibility(View.GONE);
landscapeToolbar.setVisibility(View.GONE);
@@ -934,7 +1009,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
// Reset center guideline
setCenterGuideline(100);
drawMainImage(mainImageIndex, true);
drawMainImage(mainImageIndex, true, isFullscreen);
// Show maximize and hide minimize button and scaler
maximizeButton.setVisibility(imageTypes.isEmpty() ? View.GONE : View.VISIBLE);
@@ -951,6 +1026,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
// And restore 24dp paddingTop for appBarLayout
appBarLayout.setVisibility(View.VISIBLE);
setupOrientation();
iconImage.setVisibility(View.VISIBLE);
// Show other UI elements
cardIdFieldView.setVisibility(View.VISIBLE);

View File

@@ -19,15 +19,6 @@ import android.view.View;
import android.widget.CheckBox;
import android.widget.Toast;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.view.ActionMode;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar;
import androidx.core.splashscreen.SplashScreen;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.tabs.TabLayout;
@@ -36,6 +27,15 @@ import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.view.ActionMode;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar;
import androidx.core.splashscreen.SplashScreen;
import androidx.recyclerview.widget.RecyclerView;
import protect.card_locker.preferences.SettingsActivity;
public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener, GestureDetector.OnGestureListener {
@@ -47,6 +47,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
private ActionMode mCurrentActionMode;
private SearchView mSearchView;
private GestureDetector mGestureDetector;
private int mLoyaltyCardCount = 0;
protected String mFilter = "";
protected Object mGroup = null;
protected DBHelper.LoyaltyCardOrder mOrder = DBHelper.LoyaltyCardOrder.Alpha;
@@ -57,6 +58,9 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
private View mNoMatchingCardsText;
private View mNoGroupCardsText;
private boolean mArchiveMode;
public static final String BUNDLE_ARCHIVE_MODE = "archiveMode";
private ActivityResultLauncher<Intent> mBarcodeScannerLauncher;
private ActivityResultLauncher<Intent> mSettingsLauncher;
@@ -140,10 +144,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
}
builder.setPositiveButton(R.string.confirm, (dialog, which) -> {
DBHelper db = new DBHelper(MainActivity.this);
for (LoyaltyCard loyaltyCard : mAdapter.getSelectedItems()) {
Log.e(TAG, "Deleting card: " + loyaltyCard.id);
Log.d(TAG, "Deleting card: " + loyaltyCard.id);
DBHelper.deleteLoyaltyCard(mDatabase, MainActivity.this, loyaltyCard.id);
@@ -153,7 +155,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
TabLayout.Tab tab = ((TabLayout) findViewById(R.id.groups)).getTabAt(selectedTab);
mGroup = tab != null ? tab.getTag() : null;
updateLoyaltyCardList();
updateLoyaltyCardList(true);
dialog.dismiss();
});
@@ -163,6 +165,44 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
return true;
}
else if(inputItem.getItemId() == R.id.action_archive){
for (LoyaltyCard loyaltyCard : mAdapter.getSelectedItems()) {
Log.d(TAG, "Archiving card: " + loyaltyCard.id);
DBHelper.updateLoyaltyCardArchiveStatus(mDatabase, loyaltyCard.id,1);
updateLoyaltyCardList(false);
inputMode.finish();
invalidateOptionsMenu();
}
return true;
}
else if(inputItem.getItemId() == R.id.action_unarchive){
for (LoyaltyCard loyaltyCard : mAdapter.getSelectedItems()) {
Log.d(TAG, "Unarchiving card: " + loyaltyCard.id);
DBHelper.updateLoyaltyCardArchiveStatus(mDatabase, loyaltyCard.id,0);
updateLoyaltyCardList(false);
inputMode.finish();
invalidateOptionsMenu();
}
return true;
}
else if(inputItem.getItemId() == R.id.action_star){
for (LoyaltyCard loyaltyCard : mAdapter.getSelectedItems()) {
Log.d(TAG, "Starring card: " + loyaltyCard.id);
DBHelper.updateLoyaltyCardStarStatus(mDatabase, loyaltyCard.id, 1);
updateLoyaltyCardList(false);
inputMode.finish();
}
return true;
}
else if(inputItem.getItemId() == R.id.action_unstar){
for (LoyaltyCard loyaltyCard : mAdapter.getSelectedItems()) {
Log.d(TAG, "Unstarring card: " + loyaltyCard.id);
DBHelper.updateLoyaltyCardStarStatus(mDatabase, loyaltyCard.id, 0);
updateLoyaltyCardList(false);
inputMode.finish();
}
return true;
}
return false;
}
@@ -176,13 +216,28 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
@Override
protected void onCreate(Bundle inputSavedInstanceState) {
super.onCreate(inputSavedInstanceState);
extractIntentFields(getIntent());
SplashScreen.installSplashScreen(this);
setTitle(R.string.app_name);
setContentView(R.layout.main_activity);
super.onCreate(inputSavedInstanceState);
if(!mArchiveMode) {
setTitle(R.string.app_name);
setContentView(R.layout.main_activity);
}
else{
setTitle(R.string.archiveList);
setContentView(R.layout.archive_activity);
}
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
if(mArchiveMode){
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
mDatabase = new DBHelper(this).getWritableDatabase();
TabLayout groupsTabLayout = findViewById(R.id.groups);
@@ -192,7 +247,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
selectedTab = tab.getPosition();
Log.d("onTabSelected", "Tab Position " + tab.getPosition());
mGroup = tab.getTag();
updateLoyaltyCardList();
updateLoyaltyCardList(false);
// Store active tab in Shared Preference to restore next app launch
SharedPreferences activeTabPref = getApplicationContext().getSharedPreferences(
getString(R.string.sharedpreference_active_tab),
@@ -232,7 +287,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
registerForContextMenu(mCardList);
mGroup = null;
updateLoyaltyCardList();
updateLoyaltyCardList(true);
/*
* This was added for Huawei, but Huawei is just too much of a fucking pain.
@@ -297,6 +352,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
protected void onResume() {
super.onResume();
mAdapter.refreshState();
if (mCurrentActionMode != null) {
mAdapter.clearSelections();
mCurrentActionMode.finish();
@@ -336,24 +393,28 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
assert tab != null;
mGroup = tab.getTag();
}
updateLoyaltyCardList();
updateLoyaltyCardList(true);
// End of active tab logic
FloatingActionButton addButton = findViewById(R.id.fabAdd);
addButton.setOnClickListener(v -> {
Intent intent = new Intent(getApplicationContext(), ScanActivity.class);
Bundle bundle = new Bundle();
if (selectedTab != 0) {
bundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, groupsTabLayout.getTabAt(selectedTab).getText().toString());
}
intent.putExtras(bundle);
mBarcodeScannerLauncher.launch(intent);
});
addButton.bringToFront();
if (!mArchiveMode) {
FloatingActionButton addButton = findViewById(R.id.fabAdd);
addButton.setOnClickListener(v -> {
Intent intent = new Intent(getApplicationContext(), ScanActivity.class);
Bundle bundle = new Bundle();
if (selectedTab != 0) {
bundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, groupsTabLayout.getTabAt(selectedTab).getText().toString());
}
intent.putExtras(bundle);
mBarcodeScannerLauncher.launch(intent);
});
addButton.bringToFront();
}
}
@Override
public void onBackPressed() {
if (!mSearchView.isIconified()) {
mSearchView.setIconified(true);
return;
@@ -362,20 +423,37 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
super.onBackPressed();
}
private void updateLoyaltyCardList() {
private void displayCardSetupOptions(Menu menu, boolean shouldShow) {
for (int id : new int[]{R.id.action_search, R.id.action_unfold, R.id.action_sort}) {
menu.findItem(id).setVisible(shouldShow);
}
}
private void updateLoyaltyCardCount() {
mLoyaltyCardCount = DBHelper.getLoyaltyCardCount(mDatabase);
}
private void updateLoyaltyCardList(boolean updateCount) {
Group group = null;
if (mGroup != null) {
group = (Group) mGroup;
}
mAdapter.swapCursor(DBHelper.getLoyaltyCardCursor(mDatabase, mFilter, group, mOrder, mOrderDirection));
mAdapter.swapCursor(DBHelper.getLoyaltyCardCursor(mDatabase, mFilter, group, mOrder, mOrderDirection, mArchiveMode ? DBHelper.LoyaltyCardArchiveFilter.Archived : DBHelper.LoyaltyCardArchiveFilter.Unarchived));
if (DBHelper.getLoyaltyCardCount(mDatabase) > 0) {
if (updateCount) {
updateLoyaltyCardCount();
// Update menu icons if necessary
invalidateOptionsMenu();
}
if (mLoyaltyCardCount > 0) {
// We want the cardList to be visible regardless of the filtered match count
// to ensure that the noMatchingCardsText doesn't end up being shown below
// the keyboard
mHelpText.setVisibility(View.GONE);
mNoGroupCardsText.setVisibility(View.GONE);
if (mAdapter.getItemCount() > 0) {
mCardList.setVisibility(View.VISIBLE);
mNoMatchingCardsText.setVisibility(View.GONE);
@@ -394,6 +472,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
} else {
mCardList.setVisibility(View.GONE);
mHelpText.setVisibility(View.VISIBLE);
mNoMatchingCardsText.setVisibility(View.GONE);
mNoGroupCardsText.setVisibility(View.GONE);
}
@@ -403,6 +482,11 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
}
}
private void extractIntentFields(Intent intent) {
final Bundle b = intent.getExtras();
mArchiveMode = b != null && b.getBoolean(BUNDLE_ARCHIVE_MODE, false);
}
public void updateTabGroups(TabLayout groupsTabLayout) {
List<Group> newGroups = DBHelper.getGroups(mDatabase);
@@ -427,11 +511,19 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
}
groupsTabLayout.setVisibility(View.VISIBLE);
}
@Override
public boolean onCreateOptionsMenu(Menu inputMenu) {
getMenuInflater().inflate(R.menu.main_menu, inputMenu);
if(!mArchiveMode)
getMenuInflater().inflate(R.menu.main_menu, inputMenu);
else{
getMenuInflater().inflate(R.menu.archive_menu, inputMenu);
}
Utils.updateMenuCardDetailsButtonState(inputMenu.findItem(R.id.action_unfold), mAdapter.showingDetails());
displayCardSetupOptions(inputMenu, mLoyaltyCardCount > 0);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
if (searchManager != null) {
@@ -458,12 +550,20 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
TabLayout.Tab currentTab = groupsTabLayout.getTabAt(groupsTabLayout.getSelectedTabPosition());
mGroup = currentTab != null ? currentTab.getTag() : null;
updateLoyaltyCardList();
updateLoyaltyCardList(false);
return true;
}
});
}
if(!mArchiveMode) {
if (DBHelper.getArchivedCardsCount(mDatabase) == 0) {
inputMenu.findItem(R.id.action_archived).setVisible(false);
} else {
inputMenu.findItem(R.id.action_archived).setVisible(true);
}
}
return super.onCreateOptionsMenu(inputMenu);
}
@@ -471,24 +571,18 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
public boolean onOptionsItemSelected(MenuItem inputItem) {
int id = inputItem.getItemId();
if (id == android.R.id.home) {
onBackPressed();
}
if (id == R.id.action_unfold) {
boolean shouldShow = !mAdapter.showingDetails();
if (shouldShow) {
inputItem.setIcon(R.drawable.ic_baseline_unfold_less_24);
inputItem.setTitle(R.string.action_hide_details);
} else {
inputItem.setIcon(R.drawable.ic_baseline_unfold_more_24);
inputItem.setTitle(R.string.action_show_details);
}
mAdapter.showDetails(shouldShow);
mAdapter.showDetails(!mAdapter.showingDetails());
invalidateOptionsMenu();
return true;
}
if (id == R.id.action_sort) {
TabLayout.Tab tab = ((TabLayout) findViewById(R.id.groups)).getTabAt(selectedTab);
AtomicInteger currentIndex = new AtomicInteger();
List<DBHelper.LoyaltyCardOrder> loyaltyCardOrders = Arrays.asList(DBHelper.LoyaltyCardOrder.values());
for (int i = 0; i < loyaltyCardOrders.size(); i++) {
@@ -504,17 +598,21 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
final View customLayout = getLayoutInflater().inflate(R.layout.sorting_option, null);
builder.setView(customLayout);
CheckBox ch = (CheckBox) customLayout.findViewById(R.id.checkBox_reverse);
ch.setChecked(mOrderDirection == DBHelper.LoyaltyCardOrderDirection.Descending);
CheckBox showReversed = (CheckBox) customLayout.findViewById(R.id.checkBox_reverse);
showReversed.setChecked(mOrderDirection == DBHelper.LoyaltyCardOrderDirection.Descending);
builder.setSingleChoiceItems(R.array.sort_types_array, currentIndex.get(), (dialog, which) -> currentIndex.set(which));
builder.setPositiveButton(R.string.sort, (dialog, which) -> {
if (ch.isChecked()) {
setSort(loyaltyCardOrders.get(currentIndex.get()), DBHelper.LoyaltyCardOrderDirection.Descending);
} else {
setSort(loyaltyCardOrders.get(currentIndex.get()), DBHelper.LoyaltyCardOrderDirection.Ascending);
}
setSort(
loyaltyCardOrders.get(currentIndex.get()),
showReversed.isChecked() ? DBHelper.LoyaltyCardOrderDirection.Descending : DBHelper.LoyaltyCardOrderDirection.Ascending
);
dialog.dismiss();
});
@@ -550,6 +648,16 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
return true;
}
if(id == R.id.action_archived){
Intent i = new Intent(getApplicationContext(), MainActivity.class);
Bundle bundle = new Bundle();
bundle.putBoolean("archiveMode", true);
i.putExtras(bundle);
startActivity(i);
return true;
}
return super.onOptionsItemSelected(inputItem);
}
@@ -568,7 +676,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
sortPrefEditor.apply();
// Update card list
updateLoyaltyCardList();
updateLoyaltyCardList(false);
}
@Override
@@ -671,10 +779,47 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
mCurrentActionMode.setTitle(getResources().getQuantityString(R.plurals.selectedCardCount, count, count));
MenuItem editItem = mCurrentActionMode.getMenu().findItem(R.id.action_edit);
MenuItem archiveItem = mCurrentActionMode.getMenu().findItem(R.id.action_archive);
MenuItem unarchiveItem = mCurrentActionMode.getMenu().findItem(R.id.action_unarchive);
MenuItem starItem = mCurrentActionMode.getMenu().findItem(R.id.action_star);
MenuItem unstarItem = mCurrentActionMode.getMenu().findItem(R.id.action_unstar);
boolean hasStarred = false;
boolean hasUnstarred = false;
if(!mArchiveMode) {
unarchiveItem.setVisible(false);
archiveItem.setVisible(true);
}
else{
unarchiveItem.setVisible(true);
archiveItem.setVisible(false);
}
for (LoyaltyCard loyaltyCard : mAdapter.getSelectedItems()) {
if (loyaltyCard.starStatus == 1) {
hasStarred = true;
} else {
hasUnstarred = true;
}
if (hasStarred && hasUnstarred) {
hasStarred = true;
hasUnstarred = true;
break;
}
}
if (count == 1) {
starItem.setVisible(!hasStarred);
unstarItem.setVisible(!hasUnstarred);
editItem.setVisible(true);
editItem.setEnabled(true);
} else {
starItem.setVisible(hasUnstarred);
unstarItem.setVisible(hasStarred);
editItem.setVisible(false);
editItem.setEnabled(false);
}
@@ -683,6 +828,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
}
}
@Override
public void onRowClicked(int inputPosition) {
if (mAdapter.getSelectedItemCount() > 0) {

View File

@@ -1,12 +1,13 @@
package protect.card_locker;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
@@ -156,6 +157,26 @@ public class ManageGroupActivity extends CatimaAppCompatActivity implements Mana
return ret;
}
@Override
public boolean onCreateOptionsMenu(Menu inputMenu) {
getMenuInflater().inflate(R.menu.card_details_menu, inputMenu);
Utils.updateMenuCardDetailsButtonState(inputMenu.findItem(R.id.action_unfold), mAdapter.showingDetails());
return super.onCreateOptionsMenu(inputMenu);
}
@Override
public boolean onOptionsItemSelected(MenuItem inputItem) {
int id = inputItem.getItemId();
if (id == R.id.action_unfold) {
mAdapter.showDetails(!mAdapter.showingDetails());
invalidateOptionsMenu();
return true;
}
return super.onOptionsItemSelected(inputItem);
}
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {

View File

@@ -8,8 +8,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import androidx.recyclerview.widget.RecyclerView;
public class ManageGroupCursorAdapter extends LoyaltyCardCursorAdapter {
private HashMap<Integer, Integer> mIndexCardMap;
private HashMap<Integer, Boolean> mInGroupOverlay;

View File

@@ -1,6 +1,7 @@
package protect.card_locker;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
@@ -206,6 +207,11 @@ public class ScanActivity extends CatimaAppCompatActivity {
public void addFromImage(View view) {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
photoPickerLauncher.launch(photoPickerIntent);
try {
photoPickerLauncher.launch(photoPickerIntent);
} catch (ActivityNotFoundException e) {
Toast.makeText(getApplicationContext(), R.string.failedLaunchingPhotoPicker, Toast.LENGTH_LONG).show();
Log.e(TAG, "No activity found to handle intent", e);
}
}
}

View File

@@ -0,0 +1,79 @@
package protect.card_locker;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import com.google.android.material.color.MaterialColors;
import com.google.android.material.textview.MaterialTextView;
import com.yalantis.ucrop.UCropActivity;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatImageView;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.ColorUtils;
public class UCropWrapper extends UCropActivity {
public static final String UCROP_TOOLBAR_TYPEFACE_STYLE = "ucop_toolbar_typeface_style";
@Override
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
boolean darkMode = Utils.isDarkModeEnabled(this);
// setup status bar to look like the rest of the app
if (Build.VERSION.SDK_INT >= 23) {
getWindow().getDecorView().setSystemUiVisibility(darkMode ? 0 : View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {
// icons are always white back then
if (!darkMode) {
getWindow().setStatusBarColor(ColorUtils.compositeColors(Color.argb(127, 0, 0, 0), getWindow().getStatusBarColor()));
}
}
// find and check views that we wish to color modify
// for when we update ucrop or switch to another cropper
View check = findViewById(com.yalantis.ucrop.R.id.wrapper_controls);
if (check instanceof FrameLayout) {
FrameLayout controls = (FrameLayout) check;
check = findViewById(com.yalantis.ucrop.R.id.wrapper_states);
if (check instanceof LinearLayout) {
LinearLayout states = (LinearLayout) check;
for (int i = 0; i < controls.getChildCount(); i++) {
check = controls.getChildAt(i);
if (check instanceof AppCompatImageView) {
AppCompatImageView controlsBackgroundImage = (AppCompatImageView) check;
// everything gathered and are as expected, now perform color patching
Utils.patchColors(this);
int colorSurface = MaterialColors.getColor(this, R.attr.colorSurface, ContextCompat.getColor(this, R.color.md_theme_light_surface));
int colorOnSurface = MaterialColors.getColor(this, R.attr.colorOnSurface, ContextCompat.getColor(this, R.color.md_theme_light_onSurface));
Drawable controlsBackgroundImageDrawable = controlsBackgroundImage.getBackground();
controlsBackgroundImageDrawable.mutate();
controlsBackgroundImageDrawable.setTint(darkMode ? colorOnSurface : colorSurface);
controlsBackgroundImage.setBackgroundDrawable(controlsBackgroundImageDrawable);
states.setBackgroundColor(darkMode ? colorSurface : colorOnSurface);
break;
}
}
}
}
// change toolbar font
check = findViewById(com.yalantis.ucrop.R.id.toolbar_title);
if (check instanceof MaterialTextView) {
MaterialTextView toolbarTextview = (MaterialTextView) check;
Intent intent = getIntent();
int style = intent.getIntExtra(UCROP_TOOLBAR_TYPEFACE_STYLE, -1);
if (style != -1) {
toolbarTextview.setTypeface(Typeface.defaultFromStyle(style));
}
}
}
}

View File

@@ -5,6 +5,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
@@ -14,8 +15,11 @@ import android.os.Build;
import android.os.LocaleList;
import android.provider.MediaStore;
import android.util.Log;
import android.util.TypedValue;
import android.view.MenuItem;
import android.widget.Toast;
import com.google.android.material.color.DynamicColors;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
@@ -32,6 +36,7 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Currency;
import java.util.Date;
@@ -39,9 +44,11 @@ import java.util.GregorianCalendar;
import java.util.Locale;
import java.util.Map;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.app.AppCompatDelegate;
import androidx.core.graphics.ColorUtils;
import androidx.exifinterface.media.ExifInterface;
import androidx.palette.graphics.Palette;
import protect.card_locker.preferences.Settings;
public class Utils {
@@ -206,7 +213,7 @@ public class Utils {
if (currency == null) {
numberFormat.setMaximumFractionDigits(0);
return context.getString(R.string.balancePoints, numberFormat.format(value));
return context.getResources().getQuantityString(R.plurals.balancePoints, value.intValue(), numberFormat.format(value));
}
NumberFormat currencyFormat = NumberFormat.getCurrencyInstance();
@@ -231,32 +238,19 @@ public class Utils {
return numberFormat.format(value);
}
static public Boolean currencyHasDecimals(Currency currency) {
static public BigDecimal parseBalance(String value, Currency currency) throws ParseException {
NumberFormat numberFormat = NumberFormat.getInstance();
if (currency == null) {
return false;
numberFormat.setMaximumFractionDigits(0);
} else {
numberFormat.setMinimumFractionDigits(currency.getDefaultFractionDigits());
numberFormat.setMaximumFractionDigits(currency.getDefaultFractionDigits());
}
return currency.getDefaultFractionDigits() != 0;
}
Log.d(TAG, numberFormat.parse(value).toString());
static public BigDecimal parseCurrency(String value, Boolean hasDecimals) throws NumberFormatException {
// If there are no decimals expected, remove all separators before parsing
if (!hasDecimals) {
value = value.replaceAll("[^0-9]", "");
return new BigDecimal(value);
}
// There are many ways users can write a currency, so we fix it up a bit
// 1. Replace all non-numbers with dots
value = value.replaceAll("[^0-9]", ".");
// 2. Remove all but the last dot
while (value.split("\\.").length > 2) {
value = value.replaceFirst("\\.", "");
}
// Parse as BigDecimal
return new BigDecimal(value);
return new BigDecimal(numberFormat.parse(value).toString());
}
static public byte[] bitmapToByteArray(Bitmap bitmap) {
@@ -457,6 +451,73 @@ public class Utils {
R = 255 - R;
G = 255 - G;
B = 255 - B;
return R + (G << 8) + ( B << 16) + ( A << 24);
return R + (G << 8) + (B << 16) + (A << 24);
}
// replace colors in the current theme
public static void patchColors(AppCompatActivity activity) {
Settings settings = new Settings(activity);
String color = settings.getColor();
Resources.Theme theme = activity.getTheme();
Resources resources = activity.getResources();
if (color.equals(resources.getString(R.string.settings_key_pink_theme))) {
theme.applyStyle(R.style.pink, true);
} else if (color.equals(resources.getString(R.string.settings_key_magenta_theme))) {
theme.applyStyle(R.style.magenta, true);
} else if (color.equals(resources.getString(R.string.settings_key_violet_theme))) {
theme.applyStyle(R.style.violet, true);
} else if (color.equals(resources.getString(R.string.settings_key_blue_theme))) {
theme.applyStyle(R.style.blue, true);
} else if (color.equals(resources.getString(R.string.settings_key_sky_blue_theme))) {
theme.applyStyle(R.style.skyblue, true);
} else if (color.equals(resources.getString(R.string.settings_key_green_theme))) {
theme.applyStyle(R.style.green, true);
} else if (color.equals(resources.getString(R.string.settings_key_brown_theme))) {
theme.applyStyle(R.style.brown, true);
} else if (color.equals(resources.getString(R.string.settings_key_catima_theme))) {
// catima theme is AppTheme itself, no dynamic colors nor applyStyle
} else {
// final catch all in case of invalid theme value from older versions
// also handles R.string.settings_key_system_theme
DynamicColors.applyIfAvailable(activity);
}
if (isDarkModeEnabled(activity) && settings.getOledDark()) {
theme.applyStyle(R.style.DarkBackground, true);
}
}
// XXX android 9 and below has issues with patched theme where the background becomes a
// rendering mess
// use after views are inflated
public static void postPatchColors(AppCompatActivity activity) {
TypedValue typedValue = new TypedValue();
activity.getTheme().resolveAttribute(android.R.attr.colorBackground, typedValue, true);
activity.findViewById(android.R.id.content).setBackgroundColor(typedValue.data);
}
public static void updateMenuCardDetailsButtonState(MenuItem item, boolean currentlyExpanded) {
if (currentlyExpanded) {
item.setIcon(R.drawable.ic_baseline_unfold_less_24);
item.setTitle(R.string.action_hide_details);
} else {
item.setIcon(R.drawable.ic_baseline_unfold_more_24);
item.setTitle(R.string.action_show_details);
}
}
public static int getHeaderColorFromImage(Bitmap image, int fallback) {
if (image == null) {
return fallback;
}
return new Palette.Builder(image).generate().getDominantColor(R.attr.colorPrimary);
}
public static int getRandomHeaderColor(Context context) {
TypedArray colors = context.getResources().obtainTypedArray(R.array.letter_tile_colors);
final int color = (int) (Math.random() * colors.length());
return colors.getColor(color, Color.BLACK);
}
}

View File

@@ -135,7 +135,8 @@ public class CatimaExporter implements Exporter {
DBHelper.LoyaltyCardDbIds.BARCODE_TYPE,
DBHelper.LoyaltyCardDbIds.HEADER_COLOR,
DBHelper.LoyaltyCardDbIds.STAR_STATUS,
DBHelper.LoyaltyCardDbIds.LAST_USED);
DBHelper.LoyaltyCardDbIds.LAST_USED,
DBHelper.LoyaltyCardDbIds.ARCHIVE_STATUS);
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(database);
@@ -153,7 +154,8 @@ public class CatimaExporter implements Exporter {
card.barcodeType != null ? card.barcodeType.name() : "",
card.headerColor,
card.starStatus,
card.lastUsed);
card.lastUsed,
card.archiveStatus);
if (Thread.currentThread().isInterrupted()) {
throw new InterruptedException();

View File

@@ -321,6 +321,15 @@ public class CatimaImporter implements Importer {
}
if (starStatus != 1) starStatus = 0;
int archiveStatus = 0;
try {
archiveStatus = CSVHelpers.extractInt(DBHelper.LoyaltyCardDbIds.ARCHIVE_STATUS, record, false);
} catch (FormatException _e) {
// This field did not exist in versions 2.16.3 and before
// We catch this exception so we can still import old backups
}
if (archiveStatus != 1) archiveStatus = 0;
Long lastUsed = 0L;
try {
lastUsed = CSVHelpers.extractLong(DBHelper.LoyaltyCardDbIds.LAST_USED, record, false);
@@ -329,7 +338,7 @@ public class CatimaImporter implements Importer {
// We catch this exception so we can still import old backups
}
DBHelper.insertLoyaltyCard(database, id, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus, lastUsed);
DBHelper.insertLoyaltyCard(database, id, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus, lastUsed,archiveStatus);
}
/**

View File

@@ -21,6 +21,7 @@ import java.text.ParseException;
import protect.card_locker.CatimaBarcode;
import protect.card_locker.DBHelper;
import protect.card_locker.FormatException;
import protect.card_locker.Utils;
/**
* Class for importing a database from CSV (Comma Separate Values)
@@ -56,7 +57,7 @@ public class FidmeImporter implements Importer {
try {
for (CSVRecord record : fidmeParser) {
importLoyaltyCard(database, record);
importLoyaltyCard(context, database, record);
if (Thread.currentThread().isInterrupted()) {
throw new InterruptedException();
@@ -75,7 +76,7 @@ public class FidmeImporter implements Importer {
* Import a single loyalty card into the database using the given
* session.
*/
private void importLoyaltyCard(SQLiteDatabase database, CSVRecord record)
private void importLoyaltyCard(Context context, SQLiteDatabase database, CSVRecord record)
throws FormatException {
// A loyalty card export from Fidme contains the following fields:
// Retailer (store name)
@@ -117,11 +118,13 @@ public class FidmeImporter implements Importer {
// TODO: Hook this into our own loyalty card DB if we ever get one
CatimaBarcode barcodeType = null;
// No favourite data in the export either
// No favourite data or colour in the export either
int starStatus = 0;
int archiveStatus = 0;
int headerColor = Utils.getRandomHeaderColor(context);
// TODO: Front and back image
DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, null, starStatus, null);
DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, headerColor, starStatus, null,archiveStatus);
}
}

View File

@@ -1,7 +1,23 @@
package protect.card_locker.importexport;
public enum ImportExportResult {
Success,
GenericFailure,
BadPassword;
public class ImportExportResult {
private ImportExportResultType resultType;
private String developerDetails;
public ImportExportResult(ImportExportResultType resultType) {
this(resultType, null);
}
public ImportExportResult(ImportExportResultType resultType, String developerDetails) {
this.resultType = resultType;
this.developerDetails = developerDetails;
}
public ImportExportResultType resultType() {
return resultType;
}
public String developerDetails() {
return developerDetails;
}
}

View File

@@ -0,0 +1,7 @@
package protect.card_locker.importexport;
public enum ImportExportResultType {
Success,
GenericFailure,
BadPassword;
}

View File

@@ -4,7 +4,6 @@ import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import java.io.IOException;
import java.io.OutputStream;
public class MultiFormatExporter {
@@ -32,20 +31,20 @@ public class MultiFormatExporter {
break;
}
String error;
if (exporter != null) {
try {
exporter.exportData(context, database, output, password);
return ImportExportResult.Success;
} catch (IOException e) {
Log.e(TAG, "Failed to export data", e);
} catch (InterruptedException e) {
return new ImportExportResult(ImportExportResultType.Success);
} catch (Exception e) {
Log.e(TAG, "Failed to export data", e);
error = e.toString();
}
return ImportExportResult.GenericFailure;
} else {
Log.e(TAG, "Unsupported data format exported: " + format.name());
return ImportExportResult.GenericFailure;
error = "Unsupported data format exported: " + format.name();
Log.e(TAG, error);
}
return new ImportExportResult(ImportExportResultType.GenericFailure, error);
}
}

View File

@@ -6,13 +6,7 @@ import android.util.Log;
import net.lingala.zip4j.exception.ZipException;
import org.json.JSONException;
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import protect.card_locker.FormatException;
public class MultiFormatImporter {
private static final String TAG = "Catima";
@@ -46,23 +40,31 @@ public class MultiFormatImporter {
break;
}
String error = null;
if (importer != null) {
database.beginTransaction();
try {
importer.importData(context, database, input, password);
database.setTransactionSuccessful();
return ImportExportResult.Success;
return new ImportExportResult(ImportExportResultType.Success);
} catch (ZipException e) {
return ImportExportResult.BadPassword;
} catch (IOException | FormatException | InterruptedException | JSONException | ParseException | NullPointerException e) {
if (e.getType().equals(ZipException.Type.WRONG_PASSWORD)) {
return new ImportExportResult(ImportExportResultType.BadPassword);
} else {
Log.e(TAG, "Failed to import data", e);
error = e.toString();
}
} catch (Exception e) {
Log.e(TAG, "Failed to import data", e);
error = e.toString();
} finally {
database.endTransaction();
}
} else {
Log.e(TAG, "Unsupported data format imported: " + format.name());
error = "Unsupported data format imported: " + format.name();
Log.e(TAG, error);
}
return ImportExportResult.GenericFailure;
return new ImportExportResult(ImportExportResultType.GenericFailure, error);
}
}

View File

@@ -3,6 +3,7 @@ package protect.card_locker.importexport;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.util.Log;
import com.google.zxing.BarcodeFormat;
@@ -39,15 +40,17 @@ import protect.card_locker.ZipUtils;
* A header is expected for the each table showing the names of the columns.
*/
public class StocardImporter implements Importer {
private static final String TAG = "Catima";
public void importData(Context context, SQLiteDatabase database, InputStream input, char[] password) throws IOException, FormatException, JSONException, ParseException {
HashMap<String, HashMap<String, Object>> loyaltyCardHashMap = new HashMap<>();
HashMap<String, HashMap<String, String>> providers = new HashMap<>();
HashMap<String, HashMap<String, Object>> providers = new HashMap<>();
final CSVParser parser = new CSVParser(new InputStreamReader(context.getResources().openRawResource(R.raw.stocard_stores), StandardCharsets.UTF_8), CSVFormat.RFC4180.builder().setHeader().build());
try {
for (CSVRecord record : parser) {
HashMap<String, String> recordData = new HashMap<>();
HashMap<String, Object> recordData = new HashMap<>();
recordData.put("name", record.get("name"));
recordData.put("barcodeFormat", record.get("barcodeFormat"));
@@ -62,6 +65,8 @@ public class StocardImporter implements Importer {
ZipInputStream zipInputStream = new ZipInputStream(input, password);
String[] providersFileName = null;
String[] customProvidersBaseName = null;
String customProviderId = "";
String[] cardBaseName = null;
String cardName = "";
LocalFileHeader localFileHeader;
@@ -78,6 +83,14 @@ public class StocardImporter implements Importer {
nameParts[0],
"analytics-properties.json"
};
customProvidersBaseName = new String[]{
nameParts[0],
"sync",
"data",
"users",
nameParts[0],
"loyalty-card-custom-providers"
};
cardBaseName = new String[]{
nameParts[0],
"sync",
@@ -88,6 +101,33 @@ public class StocardImporter implements Importer {
};
}
if (startsWith(nameParts, customProvidersBaseName, 1)) {
// Extract providerId
customProviderId = nameParts[customProvidersBaseName.length].split("\\.", 2)[0];
// Name file
if (nameParts.length == customProvidersBaseName.length + 1) {
// Ignore the .txt file
if (fileName.endsWith(".json")) {
JSONObject jsonObject = ZipUtils.readJSON(zipInputStream);
providers = appendToHashMap(
providers,
customProviderId,
"name",
jsonObject.getString("name")
);
}
} else if (fileName.endsWith("logo.png")) {
providers = appendToHashMap(
providers,
customProviderId,
"logo",
ZipUtils.readImage(zipInputStream)
);
}
}
if (startsWith(nameParts, cardBaseName, 1)) {
// Extract cardName
cardName = nameParts[cardBaseName.length].split("\\.", 2)[0];
@@ -98,24 +138,33 @@ public class StocardImporter implements Importer {
if (fileName.endsWith(".json")) {
JSONObject jsonObject = ZipUtils.readJSON(zipInputStream);
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
loyaltyCardHashMap = appendToHashMap(
loyaltyCardHashMap,
cardName,
"cardId",
jsonObject.getString("input_id")
);
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
// Provider ID can be either custom or not, extract whatever version is relevant
String customProviderPrefix = "/users/" + nameParts[0] + "/loyalty-card-custom-providers/";
String providerId = jsonObject
.getJSONObject("input_provider_reference")
.getString("identifier");
if (providerId.startsWith(customProviderPrefix)) {
providerId = providerId.substring(customProviderPrefix.length());
} else {
providerId = providerId.substring("/loyalty-card-providers/".length());
}
loyaltyCardHashMap = appendToHashMap(
loyaltyCardHashMap,
cardName,
"_providerId",
jsonObject
.getJSONObject("input_provider_reference")
.getString("identifier")
.substring("/loyalty-card-providers/".length())
providerId
);
if (jsonObject.has("input_barcode_format")) {
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
loyaltyCardHashMap = appendToHashMap(
loyaltyCardHashMap,
cardName,
"barcodeType",
@@ -124,7 +173,7 @@ public class StocardImporter implements Importer {
}
}
} else if (fileName.endsWith("notes/default.json")) {
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
loyaltyCardHashMap = appendToHashMap(
loyaltyCardHashMap,
cardName,
"note",
@@ -132,14 +181,14 @@ public class StocardImporter implements Importer {
.getString("content")
);
} else if (fileName.endsWith("/images/front.png")) {
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
loyaltyCardHashMap = appendToHashMap(
loyaltyCardHashMap,
cardName,
"frontImage",
ZipUtils.readImage(zipInputStream)
);
} else if (fileName.endsWith("/images/back.png")) {
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
loyaltyCardHashMap = appendToHashMap(
loyaltyCardHashMap,
cardName,
"backImage",
@@ -155,22 +204,41 @@ public class StocardImporter implements Importer {
for (HashMap<String, Object> loyaltyCardData : loyaltyCardHashMap.values()) {
String providerId = (String) loyaltyCardData.get("_providerId");
HashMap<String, String> providerData = providers.get(providerId);
String store = providerData != null ? providerData.get("name") : providerId;
if (providerId == null) {
Log.d(TAG, "Missing providerId for card " + loyaltyCardData + ", ignoring...");
continue;
}
HashMap<String, Object> providerData = providers.get(providerId);
String store = providerData != null ? providerData.get("name").toString() : providerId;
String note = (String) Utils.mapGetOrDefault(loyaltyCardData, "note", "");
String cardId = (String) loyaltyCardData.get("cardId");
String barcodeTypeString = (String) Utils.mapGetOrDefault(loyaltyCardData, "barcodeType", providerData != null ? providerData.get("barcodeFormat") : null);
CatimaBarcode barcodeType = null;
if (barcodeTypeString != null) {
if (barcodeTypeString != null && !barcodeTypeString.isEmpty()) {
if (barcodeTypeString.equals("RSS_DATABAR_EXPANDED")) {
barcodeType = CatimaBarcode.fromBarcode(BarcodeFormat.RSS_EXPANDED);
} else if (barcodeTypeString.equals("GS1_128")) {
barcodeType = CatimaBarcode.fromBarcode(BarcodeFormat.CODE_128);
} else {
barcodeType = CatimaBarcode.fromName(barcodeTypeString);
}
}
long loyaltyCardInternalId = DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, null, 0, null);
int headerColor = Utils.getRandomHeaderColor(context);
Bitmap cardIcon = null;
if (providerData != null && providerData.containsKey("logo")) {
cardIcon = (Bitmap) providerData.get("logo");
headerColor = Utils.getHeaderColorFromImage(cardIcon, headerColor);
}
long loyaltyCardInternalId = DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, headerColor, 0, null,0);
if (cardIcon != null) {
Utils.saveCardImage(context, cardIcon, (int) loyaltyCardInternalId, ImageLocationType.icon);
}
if (loyaltyCardData.containsKey("frontImage")) {
Utils.saveCardImage(context, (Bitmap) loyaltyCardData.get("frontImage"), (int) loyaltyCardInternalId, ImageLocationType.front);
@@ -197,7 +265,7 @@ public class StocardImporter implements Importer {
return true;
}
private HashMap<String, HashMap<String, Object>> appendToLoyaltyCardHashMap(HashMap<String, HashMap<String, Object>> loyaltyCardHashMap, String cardID, String key, Object value) {
private HashMap<String, HashMap<String, Object>> appendToHashMap(HashMap<String, HashMap<String, Object>> loyaltyCardHashMap, String cardID, String key, Object value) {
HashMap<String, Object> loyaltyCardData = loyaltyCardHashMap.get(cardID);
if (loyaltyCardData == null) {
loyaltyCardData = new HashMap<>();

View File

@@ -126,7 +126,7 @@ public class VoucherVaultImporter implements Importer {
throw new FormatException("Unknown colour type found: " + colorFromJSON);
}
DBHelper.insertLoyaltyCard(database, store, "", expiry, balance, balanceType, cardId, null, barcodeType, headerColor, 0, Utils.getUnixTime());
DBHelper.insertLoyaltyCard(database, store, "", expiry, balance, balanceType, cardId, null, barcodeType, headerColor, 0, Utils.getUnixTime(),0);
}
bufferedReader.close();

View File

@@ -91,8 +91,8 @@ public class Settings {
return getBoolean(R.string.settings_key_display_barcode_max_brightness, true);
}
public boolean getLockBarcodeScreenOrientation() {
return getBoolean(R.string.settings_key_lock_barcode_orientation, false);
public String getCardViewOrientation() {
return getString(R.string.settings_key_card_orientation, getResString(R.string.settings_key_follow_system_orientation));
}
public boolean getKeepScreenOn() {
@@ -102,4 +102,12 @@ public class Settings {
public boolean getDisableLockscreenWhileViewingCard() {
return getBoolean(R.string.settings_key_disable_lockscreen_while_viewing_card, true);
}
public boolean getOledDark() {
return getBoolean(R.string.settings_key_oled_dark, false);
}
public String getColor() {
return getString(R.string.setting_key_theme_color, mContext.getResources().getString(R.string.settings_key_system_theme));
}
}

View File

@@ -6,6 +6,8 @@ import android.content.Intent;
import android.os.Bundle;
import android.view.MenuItem;
import com.google.android.material.color.DynamicColors;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
@@ -132,6 +134,24 @@ public class SettingsActivity extends CatimaAppCompatActivity {
refreshActivity(true);
return true;
});
Preference oledDarkPreference = findPreference(getResources().getString(R.string.settings_key_oled_dark));
assert oledDarkPreference != null;
oledDarkPreference.setOnPreferenceChangeListener((preference, newValue) -> {
refreshActivity(true);
return true;
});
ListPreference colorPreference = findPreference(getResources().getString(R.string.setting_key_theme_color));
assert colorPreference != null;
colorPreference.setOnPreferenceChangeListener((preference, o) -> {
refreshActivity(true);
return true;
});
if (!DynamicColors.isDynamicColorAvailable()) {
colorPreference.setEntryValues(R.array.color_values_no_dynamic);
colorPreference.setEntries(R.array.color_value_strings_no_dynamic);
}
}
private void refreshActivity(boolean reloadMain) {

View File

@@ -1,4 +1,4 @@
<vector android:height="24dp" android:tint="?attr/colorControlNormal"
<vector android:autoMirrored="true" android:height="24dp" android:tint="?attr/colorControlNormal"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z"/>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="@android:color/white">
<path
android:fillColor="@android:color/white"
android:pathData="M20.54,5.23l-1.39,-1.68C18.88,3.21 18.47,3 18,3H6c-0.47,0 -0.88,0.21 -1.16,0.55L3.46,5.23C3.17,5.57 3,6.02 3,6.5V19c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V6.5c0,-0.48 -0.17,-0.93 -0.46,-1.27zM12,17.5L6.5,12H10v-2h4v2h3.5L12,17.5zM5.12,5l0.81,-1h12l0.94,1H5.12z"/>
</vector>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="@android:color/black">
<path
android:fillColor="@android:color/black"
android:pathData="M20.54,5.23l-1.39,-1.68C18.88,3.21 18.47,3 18,3H6c-0.47,0 -0.88,0.21 -1.16,0.55L3.46,5.23C3.17,5.57 3,6.02 3,6.5V19c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V6.5c0,-0.48 -0.17,-0.93 -0.46,-1.27zM12,17.5L6.5,12H10v-2h4v2h3.5L12,17.5zM5.12,5l0.81,-1h12l0.94,1H5.12z"/>
</vector>

View File

@@ -2,8 +2,7 @@
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
android:viewportHeight="24">
<path
android:fillColor="#FFFFFF"
android:pathData="M9,16.2L4.8,12l-1.4,1.4L9,19 21,7l-1.4,-1.4L9,16.2z"/>

View File

@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/>
</vector>

View File

@@ -0,0 +1,5 @@
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FFFFFF" />
<corners android:radius="10dp" />
</shape>

View File

@@ -16,7 +16,7 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
style="@style/Widget.MaterialComponents.Toolbar.Primary" />
style="?attr/toolbarStyle" />
</com.google.android.material.appbar.AppBarLayout>

View File

@@ -28,7 +28,7 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
style="@style/Widget.MaterialComponents.Toolbar.Primary" />
style="?attr/toolbarStyle" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/groups"

View File

@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="protect.card_locker.MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
style="?attr/toolbarStyle" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/groups"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="scrollable"
android:visibility="gone"/>
</com.google.android.material.appbar.AppBarLayout>
<include layout="@layout/content_main"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -5,6 +5,7 @@
android:layout_height="wrap_content"
xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView
android:background="@drawable/round_outline"
android:importantForAccessibility="no"
android:layout_width="match_parent"
android:layout_height="@dimen/barcode_disp_height"

View File

@@ -14,7 +14,7 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
style="@style/Widget.MaterialComponents.Toolbar.Primary" />
style="?attr/toolbarStyle" />
</com.google.android.material.appbar.AppBarLayout>
<LinearLayout
@@ -74,7 +74,6 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:text="@string/barcodeNoBarcode"
android:textColor="#FFFFFF"
android:enabled="false" />
<ListView
android:id="@+id/barcodes"

View File

@@ -42,6 +42,8 @@
app:spanCount="@integer/main_view_card_columns"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="80dp"
android:clipToPadding="false"
android:scrollbars="vertical"
android:visibility="gone"/>

View File

@@ -21,6 +21,8 @@
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="80dp"
android:clipToPadding="false"
android:scrollbars="vertical"
android:visibility="gone" />
</RelativeLayout>

View File

@@ -13,7 +13,7 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
style="@style/Widget.MaterialComponents.Toolbar.Primary" />
style="?attr/toolbarStyle" />
</com.google.android.material.appbar.AppBarLayout>

View File

@@ -24,7 +24,7 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
style="@style/Widget.MaterialComponents.Toolbar.Primary" />
style="?attr/toolbarStyle" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabs"
@@ -73,8 +73,7 @@
app:cardCornerRadius="4dp"
android:paddingHorizontal="@dimen/inputPadding"
app:cardElevation="0dp"
app:cardBackgroundColor="@android:color/transparent"
android:outlineProvider="none">
app:cardBackgroundColor="@android:color/transparent">
<ImageView
android:id="@+id/thumbnail"
@@ -180,17 +179,18 @@
<!-- Barcode -->
<LinearLayout android:orientation="horizontal"
android:padding="10.0dip"
android:layout_marginTop="10.0dp"
android:layout_marginStart="10.0dp"
android:layout_marginEnd="10.0dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/barcodeLayout">
<ImageView
android:background="@drawable/round_outline"
android:importantForAccessibility="no"
android:layout_width="0dp"
android:layout_height="@dimen/barcode_disp_height"
android:layout_gravity="center_horizontal"
android:padding="10.0dp"
android:background="#ffffff"
android:id="@+id/barcode"
android:layout_weight="1.0"/>
</LinearLayout>

View File

@@ -47,13 +47,15 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_done" />
app:srcCompat="@drawable/ic_done"
android:background="@color/md_theme_dark_onSelected" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/star"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end">
android:layout_gravity="end"
tools:ignore="ExtraText">
<ImageView
android:id="@+id/star_background"
@@ -86,6 +88,33 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/archivedIcon"
android:layout_width="match_parent"
android:layout_height="149dp"
android:layout_gravity="end"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/thumbnail"
tools:layout_editor_absoluteX="355dp">
<ImageView
android:id="@+id/archive_background"
android:layout_width="41dp"
android:layout_height="44dp"
android:layout_gravity="end"
android:alpha="0.5"
android:contentDescription="@string/archived"
android:elevation="4dp"
android:rotationX="2"
android:visibility="visible"
app:srcCompat="@drawable/ic_baseline_archive_24"
tools:ignore="ImageContrastCheck,MissingConstraints"
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="-1dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>
<TextView
@@ -171,5 +200,6 @@
app:layout_constraintStart_toStartOf="parent"
tools:visibility="visible"
tools:text="Tomorrow"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>
</com.google.android.material.card.MaterialCardView>

View File

@@ -25,7 +25,7 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
style="@style/Widget.MaterialComponents.Toolbar.Primary" />
style="?attr/toolbarStyle" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/groups"

View File

@@ -25,7 +25,7 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
style="@style/Widget.MaterialComponents.Toolbar.Primary" />
style="?attr/toolbarStyle" />
</com.google.android.material.appbar.AppBarLayout>

View File

@@ -15,7 +15,7 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
style="@style/Widget.MaterialComponents.Toolbar.Primary" />
style="?attr/toolbarStyle" />
</com.google.android.material.appbar.AppBarLayout>

View File

@@ -1,9 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
android:fitsSystemWindows="true"
tools:context="protect.card_locker.preferences.SettingsActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
@@ -11,15 +13,16 @@
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
style="?attr/toolbarStyle"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
style="@style/Widget.MaterialComponents.Toolbar.Primary" />
android:layout_height="?attr/actionBarSize" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.fragment.app.FragmentContainerView
android:id="@+id/settings_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize" />
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -3,7 +3,8 @@
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
@@ -13,7 +14,7 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
style="@style/Widget.MaterialComponents.Toolbar.Primary" />
style="?attr/toolbarStyle" />
</com.google.android.material.appbar.AppBarLayout>

View File

@@ -0,0 +1,24 @@
<menu 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"
tools:context="protect.card_locker.MainActivity">
<item
android:id="@+id/action_search"
android:title="@string/action_search"
android:icon="@drawable/ic_search_white"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="always|collapseActionView"
android:visible="false"/>
<item
android:id="@+id/action_unfold"
android:title="@string/action_hide_details"
android:icon="@drawable/ic_baseline_unfold_less_24"
app:showAsAction="always"
android:visible="false"/>
<item
android:id="@+id/action_sort"
android:title="@string/sort"
android:icon="@drawable/ic_baseline_sort_24"
app:showAsAction="always"
android:visible="false"/>
</menu>

View File

@@ -0,0 +1,9 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_unfold"
android:title="@string/action_hide_details"
android:icon="@drawable/ic_baseline_unfold_less_24"
app:showAsAction="always"
android:visible="true"/>
</menu>

View File

@@ -2,20 +2,6 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_copy_to_clipboard"
android:title="@string/copy_to_clipboard"
android:icon="@drawable/ic_copy"
android:titleCondensed="@string/copy_to_clipboard"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/action_share"
android:title="@string/share"
android:icon="@drawable/ic_share"
android:titleCondensed="@string/share"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/action_edit"
android:icon="@drawable/ic_edit"
@@ -23,11 +9,48 @@
android:titleCondensed="@string/editCardTitle"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/action_copy_to_clipboard"
android:icon="@drawable/ic_copy"
android:title="@string/copy_to_clipboard"
android:titleCondensed="@string/copy_to_clipboard"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/action_share"
android:icon="@drawable/ic_share"
android:title="@string/share"
android:titleCondensed="@string/share"
app:showAsAction="ifRoom"/>
<item
android:id="@+id/action_star"
android:title="@string/star"
android:titleCondensed="@string/star"
app:showAsAction="never"/>
<item
android:id="@+id/action_unstar"
android:title="@string/unstar"
android:titleCondensed="@string/unstar"
app:showAsAction="never"/>
<item
android:id="@+id/action_archive"
android:title="@string/archive"
android:titleCondensed="@string/archive"
app:showAsAction="never"/>
<item
android:id="@+id/action_unarchive"
android:title="@string/unarchive"
android:titleCondensed="@string/unarchive"
app:showAsAction="never"/>
<item
android:id="@+id/action_delete"
android:icon="@drawable/ic_delete_white_24dp"
android:title="@string/delete"
android:titleCondensed="@string/delete"
app:showAsAction="ifRoom"/>
app:showAsAction="never"/>
</menu>

View File

@@ -2,19 +2,46 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_lock_unlock"
android:icon="@drawable/ic_lock_open_white_24dp"
android:title="@string/lockScreen"
app:showAsAction="always"/>
<item
android:id="@+id/action_share"
android:icon="@drawable/ic_share_white"
android:title="@string/share"
app:showAsAction="always"/>
<item
android:id="@+id/action_star_unstar"
android:icon="@drawable/ic_unstarred_white"
android:title="@string/star"
app:showAsAction="always" />
</menu>
<item
android:id="@+id/action_overflow"
android:title="@string/overflowMenu"
android:icon="@drawable/ic_overflow_menu"
app:showAsAction="always">
<menu>
<item
android:id="@+id/action_duplicate"
android:title="@string/duplicateCard"
app:showAsAction="never" />
<item
android:id="@+id/action_archive"
android:title="@string/archive"
app:showAsAction="never"/>
<item
android:id="@+id/action_unarchive"
android:title="@string/unarchive"
app:showAsAction="never"/>
<item
android:id="@+id/action_delete"
android:title="@string/delete"
app:showAsAction="never"/>
</menu>
</item>
</menu>

View File

@@ -7,22 +7,29 @@
android:title="@string/action_search"
android:icon="@drawable/ic_search_white"
app:actionViewClass="androidx.appcompat.widget.SearchView"
app:showAsAction="always|collapseActionView"/>
app:showAsAction="always|collapseActionView"
android:visible="false"/>
<item
android:id="@+id/action_unfold"
android:title="@string/action_hide_details"
android:icon="@drawable/ic_baseline_unfold_less_24"
app:showAsAction="always"/>
app:showAsAction="always"
android:visible="false"/>
<item
android:id="@+id/action_sort"
android:title="@string/sort"
android:icon="@drawable/ic_baseline_sort_24"
app:showAsAction="always"/>
app:showAsAction="always"
android:visible="false"/>
<item
android:id="@+id/action_manage_groups"
android:icon="@drawable/ic_folder_white"
android:title="@string/groups"
app:showAsAction="ifRoom"/>
app:showAsAction="never"/>
<item
android:id="@+id/action_archived"
android:title="@string/archiveList"
app:showAsAction="never"/>
<item
android:id="@+id/action_import_export"
android:icon="@drawable/ic_import_export_white_24dp"

View File

@@ -2,88 +2,106 @@ Sylvia van Os
Branden Archer
J. Lavoie
Allan Nordhøy
Heimen Stoffels
solokot
mondstern
Heimen Stoffels
Katharine Chui
Oğuz Ersen
IllusiveMan196
Petr Novák
Taco
Joel A
Gediminas Murauskas
mondstern
Altonss
IllusiveMan196
StoyanDimitrov
Petr Novák
Joel A
Taco
Gediminas Murauskas
Nyatsuki
Michael Moroni
Samantaz Fox
arno-github
Ankit Tiwari
Sergio Paredes
Michael Moroni
laralem
arshbeerSingh
SlavekB
huuhaa
arshbeerSingh
Quentin PAGÈS
Miha Frangež
sr093906
Freddo espresso
mdvhimself
Maciej Błędkowski
Olivia (Zoe)
betsythefc
Silvério Santos
waffshappen
ati3
Jane Kong
K. Herbert
Maciej Błędkowski
Quentin PAGÈS
Still Hsu
String E. Fighter
Yurical
Silvério Santos
rr-vesp
alajemba-vik
/usr/local/ΕΨΗΕΛΩΝ
Adolfo Jayme-Barrientos
Alessandro Mandelli
KovalevArtem
Artem M.
Astrohops1
Clonewayx
D. Domig
Diego
Jane Kong
Giovanni
Lukas Grassauer
Marnick L'Eau
Michalis
Rosdyana Kusuma
schirinowski
umoenks
Thomas Bertels
Runner
inesre
lgasp
phlostically
Aditya Das
Asier
Kevin Sicong Jiang
Airat
Andreas Blaser
sNiXx
BMN
Biren
Mylou53
Kasina Dheeraj
Eric
Flav
Franciszek Stefan
Grzegorz
Izzy
krkk
Karol Kosek
bittin
Marco
Mattia
Michael Gangolf
Moi Toi
pbeckmann
Peer Beckmann
Quang Nguyen
Ratnesh
Reza
Rohan Babbar
Ronak Upadhyay
Rose Liverman
Samarth Asthan
Simone Dotto
Still Hsu
Subhashish Anand
darkodo
Tymofii Lytvynenko
Tjipke van der Heide
Vancha March
Yevgeny M
avikkundu
Avik Kundu
opsik
pooyanazari
psa-jforestier
Robin
sergio
Marcus
techwebpd
rr-vesp

View File

@@ -440,7 +440,7 @@ _id,name,barcodeFormat
450,CAD,EAN_13
451,Camomilla,EAN_13
452,"Carpisa Yamamay",EAN_13
453,Carrefour,EAN_13
453,Carrefour,CODE_128
454,"Cisalfa Sport",EAN_13
455,Coin,ITF
456,Comet,EAN_13
1 _id name barcodeFormat
440 450 CAD EAN_13
441 451 Camomilla EAN_13
442 452 Carpisa Yamamay EAN_13
443 453 Carrefour EAN_13 CODE_128
444 454 Cisalfa Sport EAN_13
445 455 Coin ITF
446 456 Comet EAN_13

View File

@@ -0,0 +1,272 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="action_search">بحث</string>
<string name="action_add">اضف</string>
<string name="noGiftCards">اضغط علي زر + لاضافة بطاقة, او استورد بعض منهم من قائمة ال ⋮.</string>
<string name="noMatchingGiftCards">لا نتائج. حاول تغيير بحثك.</string>
<string name="storeName">اسم</string>
<string name="note">مذكرة</string>
<string name="cardId">بطاقة شخصية</string>
<string name="barcodeType">نوع الباركود</string>
<string name="barcodeNoBarcode">لا يوجد باركود</string>
<string name="noBarcode">لا يوجد باركود</string>
<string name="star">اضف الي المفضلة</string>
<string name="unstar">حذف من المفضلة</string>
<string name="cancel">الغاء</string>
<string name="save">حفظ</string>
<string name="edit">تعديل</string>
<string name="delete">مسح</string>
<string name="confirm">تأكيد</string>
<string name="deleteConfirmation">مسح هذة البطاقة نهائيا؟</string>
<string name="ok">حسنا</string>
<string name="copy_to_clipboard">نسخ البطاقة الشخصية الي الحافظة</string>
<string name="share">شارك</string>
<string name="sendLabel">ارسل…</string>
<string name="editCardTitle">عدل بطاقة</string>
<string name="addCardTitle">اضف بطاقة</string>
<string name="scanCardBarcode">مسح باركود</string>
<string name="cardShortcut">اختصار البطاقة</string>
<string name="noCardsMessage">اضف بطاقة أولا</string>
<string name="card_ids_copied">البطاقة(ات) الشخصية المنسوخة</string>
<string name="barcodeImageDescriptionWithType">صورة <xliff:g>%s</xliff:g> باركود</string>
<string name="noStoreError">لا يوجد اسم مدخل</string>
<string name="noCardIdError">لا يوجد بطاقة شخصية مدخلة</string>
<string name="noCardExistsError">لا يمكن العثور علي هذه البطاقة</string>
<string name="failedParsingImportUriError">لا يمكن تحليل الرابط المستورد</string>
<string name="importExport">استيراد/تصدير</string>
<string name="importExportHelp">عمل نسخ احتطياتي لبياناتك يسمح نقلها لجهاز اخر.</string>
<string name="importFailed">لا يمكن عمل الاستيراد</string>
<string name="exportSuccessfulTitle">متصدر</string>
<string name="exportFailedTitle">فشل التصدير</string>
<string name="exportFailed">لا يمكن عمل التصدير</string>
<string name="noExternalStoragePermissionError">امنح التخزين الخارجي اذن لاستيراد وتصدير البيانات</string>
<string name="exportOptionExplanation">ستتم كتابة البيانات في الموقع الذي تختاره.</string>
<string name="importOptionFilesystemButton">من نظام الملفات</string>
<string name="importOptionApplicationTitle">استخدم تطبيقًا آخر</string>
<string name="importOptionApplicationExplanation">استخدم أي تطبيق أو مدير الملفات المفضل لديك لفتح ملف.</string>
<string name="importOptionApplicationButton">استخدم تطبيقًا آخر</string>
<string name="about">حول</string>
<string name="app_copyright_old">بناء على Loyalty Card Keychain
\nحقوق النشر © 2016-2020 Branden Archer</string>
<string name="app_license">البرمجيات الحرة متروكة الحقوق, ترخيص +GPLv3</string>
<string name="app_revision_fmt">معلومات المراجعة: <xliff:g id="app_revision_url">%s</xliff:g></string>
<string name="app_libraries">مكتبات الطرف الثالث الحرة: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="selectBarcodeTitle">اختار الباركود</string>
<string name="enterBarcodeInstructions">أدخل بطاقة هوية ، واختر نوع الباركود أدناه ، أو \"لا يوجد باركود\".</string>
<string name="copy_to_clipboard_toast">تم نسخ بطاقة الهوية إلى الحافظة</string>
<string name="thumbnailDescription">صورة مصغرة</string>
<string name="starImage">نجم مفضل</string>
<string name="settings">اعدادات</string>
<string name="settings_category_title_ui">واجهة المستخدم</string>
<string name="settings_light_theme">فاتح</string>
<string name="settings_dark_theme">داكن</string>
<string name="settings_card_orientation">اتجاه الباركود</string>
<string name="settings_portrait_orientation">الوضع الرأسي</string>
<string name="settings_landscape_orientation">الوضع الأفقي</string>
<string name="settings_theme">مظهر</string>
<string name="settings_max_font_size_scale">اقصي. حجم الخط</string>
<string name="settings_display_barcode_max_brightness">عرض مشرق علي الباركود</string>
<string name="importSuccessful">تم استيراد البيانات</string>
<string name="exportSuccessful">تم تصدير البيانات</string>
<string name="enter_group_name">أدخل اسم المجموعة</string>
<string name="group_edit">تعديل المجموعة</string>
<string name="noGroups">اضغط زر + لإضافة مجموعات للتصنيف.</string>
<string name="noGroupCards">هذه المجموعة فارغة</string>
<string name="group_name_already_in_use">اسم المجموعة قيد الاستخدام بالفعل</string>
<string name="group_name_is_empty">لا يمكن أن يكون اسم المجموعة فارغًا</string>
<string name="group_updated">تم تحديث المجموعة</string>
<string name="all">الكل</string>
<string name="deleteConfirmationGroup">هل تريد حذف المجموعة؟</string>
<string name="failedOpeningFileManager">قم بتثبيت مدير الملفات أولاً.</string>
<string name="moveUp">تحرك لأعلى</string>
<string name="addFromImage">حدد صورة من المعرض</string>
<string name="balance">الرصيد</string>
<string name="currency">العملة</string>
<string name="points">نقاط</string>
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> لا يبدو أنه رصيد صالح.</string>
<string name="chooseImportType">استيراد البيانات من</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="privacy_policy">سياسة الخصوصية</string>
<string name="accept">قبول</string>
<string name="importCatima">الاستيراد من Catima</string>
<string name="importCatimaMessage">حدد ملفك <i>catima.zip</i> تصدير من Catima للاستيراد.
\nقم بإنشائه من قائمة الاستيراد / التصدير لتطبيق Catima آخر بالضغط على تصدير هناك أولاً.</string>
<string name="importFidme">الاستيراد من FidMe</string>
<string name="importFidmeMessage">حدد ملفك <i>fidme-export-request-xxxxxx.zip</i> تصدير من FidMe للاستيراد ، ثم حدد أنواع الباركود يدويًا بعد ذلك.
\nقم بإنشائه من ملف تعريف FidMe الخاص بك عن طريق اختيار حماية البيانات ثم الضغط على استخراج بياناتي أولاً.</string>
<string name="importStocardMessage">حدد ملفك <i>***-sync.zip</i> تصدير من Stocard للاستيراد.
\nاحصل عليه عن طريق إرسال بريد إلكتروني إلى support@stocardapp.com لطلب تصدير بياناتك.</string>
<string name="importVoucherVault">الاستيراد من Voucher Vault</string>
<string name="importVoucherVaultMessage">حدد ملفك <i>vouchervault.json</i> تصدير من Voucher Vault للاستيراد.
\nقم بإنشائه بالضغط على تصدير في Voucher Vault أولاً.</string>
<string name="barcodeId">قيمة الباركود</string>
<string name="sameAsCardId">نفس بطاقة الهوية</string>
<string name="setBarcodeId">قم بتعيين قيمة الباركود</string>
<string name="unsupportedBarcodeType">لا يمكن عرض نوع الباركود هذا. قد يكون مدعومًا في إصدار أحدث من التطبيق.</string>
<string name="wrongValueForBarcodeType">القيمة غير صالحة لنوع الباركود المحدد</string>
<string name="copy_to_clipboard_multiple_toast">تم نسخ بطاقات الهوية إلى الحافظة</string>
<string name="intent_import_card_from_url_share_multiple_text">أريد مشاركة بعض البطاقات معك</string>
<string name="frontImageDescription">الصورة الأمامية</string>
<string name="backImageDescription">الصورة الخلفية</string>
<string name="photos">الصور</string>
<string name="setFrontImage">تعيين الصورة الأمامية</string>
<string name="setBackImage">الصورة الخلفية</string>
<string name="removeImage">إزالة الصورة</string>
<string name="takePhoto">التقاط صورة</string>
<string name="updateBarcodeQuestionTitle">هل تريد تحديث قيمة الباركود؟</string>
<string name="updateBarcodeQuestionText">لقد قمت بتغيير بطاقة الهوية. هل تريد أيضًا تحديث الباركود لاستخدام نفس القيمة؟</string>
<string name="yes">نعم</string>
<string name="no">لا</string>
<string name="passwordRequired">الرجاء إدخال كلمة المرور</string>
<string name="exportPassword">قم بتعيين كلمة مرور لحماية التصدير (اختياري)</string>
<string name="exportPasswordHint">أدخل كلمة المرور</string>
<string name="turn_flashlight_on">قم بتشغيل المصباح</string>
<string name="turn_flashlight_off">أطفئ المصباح</string>
<string name="settings_locale">لغة</string>
<string name="settings_system_locale">النظام</string>
<string name="setIcon">تعيين رمز</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_pink_theme">زهري</string>
<string name="settings_magenta_theme">أرجواني</string>
<string name="settings_violet_theme">البنفسجي</string>
<string name="settings_blue_theme">أزرق</string>
<string name="settings_sky_blue_theme">أزرق سماوي</string>
<string name="settings_green_theme">أخضر</string>
<string name="settings_grey_theme">رمادي</string>
<string name="settings_brown_theme">بني</string>
<string name="app_contributors">أصبح ممكنًا بواسطة: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="sort">فرز</string>
<string name="showMoreInfo">اظهر المعلومات</string>
<string name="hideMoreInfo">إخفاء المعلومات</string>
<string name="swipeToSwitchImages">اسحب أو اضغط لفترة طويلة لتبديل الصور</string>
<string name="sort_by_balance">الرصيد</string>
<string name="reverse">... بترتيب معكوس</string>
<string name="sort_by">صنف حسب</string>
<string name="settings_oled_dark">خلفية سوداء نقية لمظهر داكن</string>
<string name="credits">الاعتمادات</string>
<string name="source_repository">مستودع المصدر</string>
<string name="and_data_usage">واستخدام البيانات</string>
<string name="rate_this_app">قيم هذا التطبيق</string>
<string name="translate_platform">على Weblate</string>
<string name="shortcutSelectCard">اختر بطاقة</string>
<string name="options">خيارات</string>
<string name="starred">مميز بنجمة</string>
<string name="set_scale">ضبط النطاق</string>
<string name="include_if_asking_support">إذا كنت ترغب في طلب الدعم ، فقم بتضمين المعلومات التالية:</string>
<string name="duplicateCard">كرر</string>
<string name="archive">ضع الي الأرشيف</string>
<string name="unarchive">أخرج من الأرشيف</string>
<string name="archived">تمت أرشفة البطاقة</string>
<string name="unarchived">البطاقة غير مؤرشفة</string>
<string name="archiveList">أرشيف</string>
<string name="failedLaunchingPhotoPicker">تعذر العثور على تطبيق معرض مدعوم</string>
<string name="noGiftCardsGroup">انشئ بعض من البطاقات, و عيينهم لهذة المجموعة.</string>
<string name="deleteTitle">مسح بطاقة</string>
<plurals name="selectedCardCount">
<item quantity="zero"><xliff:g>%d</xliff:g> محدد</item>
<item quantity="one"><xliff:g>%d</xliff:g> محددة</item>
<item quantity="two"><xliff:g>%d</xliff:g> محدد</item>
<item quantity="few"><xliff:g>%d</xliff:g> محدد</item>
<item quantity="many"><xliff:g>%d</xliff:g> محدد</item>
<item quantity="other"><xliff:g>%d</xliff:g> محدد</item>
</plurals>
<string name="importing">جار الاستيراد…</string>
<string name="exportName">تصدير</string>
<string name="exporting">جار التصدير…</string>
<string name="importSuccessfulTitle">مستورد</string>
<string name="importFailedTitle">فشل الاستيراد</string>
<string name="sort_by_most_recently_used">الأكثر أستعمالا مؤخرا</string>
<string name="license">رخصة</string>
<string name="sort_by_name">اسم</string>
<string name="version_history">تاريخ النسخة</string>
<string name="action_hide_details">أخف التفاصيل</string>
<plurals name="groupCardCountWithArchived">
<item quantity="zero"><xliff:g>%1$d</xliff:g> بطاقة ( <xliff:g id="archivedCount">%2$d</xliff:g> مؤرشفة)</item>
<item quantity="one"><xliff:g>%1$d</xliff:g> بطاقة ( <xliff:g id="archivedCount">%2$d</xliff:g> مؤرشفة)</item>
<item quantity="two"><xliff:g>%1$d</xliff:g> بطاقة ( <xliff:g id="archivedCount">%2$d</xliff:g> مؤرشفة)</item>
<item quantity="few"><xliff:g>%1$d</xliff:g> بطاقات ( <xliff:g id="archivedCount">%2$d</xliff:g> مؤرشفة)</item>
<item quantity="many"><xliff:g>%1$d</xliff:g> بطاقات ( <xliff:g id="archivedCount">%2$d</xliff:g> مؤرشفة)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> بطاقات ( <xliff:g id="archivedCount">%2$d</xliff:g> مؤرشفة)</item>
</plurals>
<plurals name="deleteCardsTitle">
<item quantity="zero">مسح <xliff:g>%d</xliff:g> بطاقة</item>
<item quantity="one">مسح <xliff:g>%d</xliff:g> بطاقة</item>
<item quantity="two">مسح <xliff:g>%d</xliff:g> بطاقة</item>
<item quantity="few">مسح <xliff:g>%d</xliff:g> بطاقات</item>
<item quantity="many">مسح <xliff:g>%d</xliff:g> بطاقات</item>
<item quantity="other">مسح <xliff:g>%d</xliff:g> بطاقات</item>
</plurals>
<plurals name="deleteCardsConfirmation">
<item quantity="zero">مسح هذه <xliff:g>%d</xliff:g> بطاقة نهائيا؟</item>
<item quantity="one">مسح هذه <xliff:g>%d</xliff:g> بطاقة نهائيا؟</item>
<item quantity="two">مسح هذه <xliff:g>%d</xliff:g> بطاقة نهائيا؟</item>
<item quantity="few">مسح هذه <xliff:g>%d</xliff:g> بطاقات نهائيا؟</item>
<item quantity="many">مسح هذه <xliff:g>%d</xliff:g> بطاقات نهائيا؟</item>
<item quantity="other">مسح هذه <xliff:g>%d</xliff:g> بطاقات نهائيا؟</item>
</plurals>
<string name="importOptionFilesystemTitle">الاستيراد من نظام الملفات</string>
<string name="importOptionFilesystemExplanation">اختر ملفًا محددًا من نظام الملفات.</string>
<string name="about_title_fmt">حول <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">نسخة: <xliff:g id="version">%s</xliff:g></string>
<string name="settings_system_theme">نظام</string>
<string name="settings_lock_on_opening_orientation">قفل على الاتجاه عند فتح البطاقة</string>
<string name="app_resources">موارد الطرف الثالث الحرة: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="settings_follow_system_orientation">نظام المتابعة</string>
<string name="groups">مجموعات</string>
<string name="barcode">باركود</string>
<string name="settings_keep_screen_on">حافظ على الشاشة قيد التشغيل</string>
<string name="intent_import_card_from_url_share_text">اريد مشاركة بطاقة معك</string>
<string name="groupsList">مجموعات: <xliff:g>%s</xliff:g></string>
<string name="settings_disable_lockscreen_while_viewing_card">منع قفل الشاشة</string>
<string name="leaveWithoutSaveTitle">خروج</string>
<string name="editGroup">مجموعة التعديل: <xliff:g>%s</xliff:g></string>
<plurals name="groupCardCount">
<item quantity="zero"><xliff:g>%d</xliff:g> بطاقة</item>
<item quantity="one"><xliff:g>%d</xliff:g> بطاقة</item>
<item quantity="two"><xliff:g>%d</xliff:g> بطاقة</item>
<item quantity="few"><xliff:g>%d</xliff:g> بطاقات</item>
<item quantity="many"><xliff:g>%d</xliff:g> بطاقات</item>
<item quantity="other"><xliff:g>%d</xliff:g> بطاقات</item>
</plurals>
<string name="moveDown">تحرك لأسفل</string>
<string name="leaveWithoutSaveConfirmation">المغادرة دون حفظ؟</string>
<string name="addManually">أدخل بطاقة الهوية يدويًا</string>
<string name="moveBarcodeToTopOfScreen">انقل الباركود إلى أعلى الشاشة</string>
<string name="balanceSentence">الرصيد: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">تنتهي: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">منتهي الصلاحية: <xliff:g>%s</xliff:g></string>
<string name="moveBarcodeToCenterOfScreen">قم بتوسيط الرمز الشريطي على الشاشة</string>
<plurals name="balancePoints">
<item quantity="zero"><xliff:g>%s</xliff:g> نقطة</item>
<item quantity="one"><xliff:g>%s</xliff:g> نقطة</item>
<item quantity="two"><xliff:g>%s</xliff:g> نقطة</item>
<item quantity="few"><xliff:g>%s</xliff:g> نقطات</item>
<item quantity="many"><xliff:g>%s</xliff:g> نقطات</item>
<item quantity="other"><xliff:g>%s</xliff:g> نقطات</item>
</plurals>
<string name="card">بطاقة</string>
<string name="selectColor">إختر لون</string>
<string name="editBarcode">تعديل الباركود</string>
<string name="expiryDate">تاريخ انتهاء الصلاحية</string>
<string name="never">أبداً</string>
<string name="chooseExpiryDate">اختر تاريخ انتهاء الصلاحية</string>
<string name="errorReadingImage">لا يمكن قراءة الصورة</string>
<string name="noBarcodeFound">لم يتم العثور على باركود</string>
<string name="on_github">على GitHub</string>
<string name="report_error">الإبلاغ عن خطأ</string>
<string name="sort_by_expiry">انقضاء</string>
<string name="noUnarchivedCardsMessage">لا توجد بطاقات غير مؤرشفة موجودة</string>
<string name="importLoyaltyCardKeychain">الاستيراد من Loyalty Card Keychain</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019<xliff:g>%d</xliff:g> Sylvia van Os</string>
<string name="importLoyaltyCardKeychainMessage">حدد ملفك <i>LoyaltyCardKeychain.csv</i> التصدير من Loyalty Card Keychain للاستيراد.
\nقم بإنشائه من قائمة الاستيراد / التصدير في Loyalty Card Keychain بالضغط على تصدير هناك أولاً.</string>
<string name="importStocard">الاستيراد من Stocard</string>
<string name="privacy_policy_popup_text">إشعار سياسة الخصوصية (مطلوب من قبل بعض متاجر التطبيقات):
\n
\nلا يتم جمع أي بيانات على الإطلاق ، والتي يمكن لأي شخص تأكيدها لأن تطبيقنا هو برنامج حر.</string>
<string name="failedGeneratingShareURL">تعذر إنشاء عنوان URL قابل للمشاركة. الرجاء الإبلاغ عن هذا.</string>
<string name="help_translate_this_app">ساعد في ترجمة هذا التطبيق</string>
<string name="action_show_details">اظهر التفاصيل</string>
<string name="on_google_play">على Google Play</string>
<string name="settings_theme_color">لون المظهر</string>
</resources>

View File

@@ -10,7 +10,7 @@
<string name="cancel">Отказ</string>
<string name="unstar">Премахва от любими</string>
<string name="star">Добавя към любими</string>
<string name="noBarcode">Без щрихкод</string>
<string name="noBarcode">Липсва щрихкод</string>
<string name="barcodeNoBarcode">Липсва щрихкод</string>
<string name="barcodeType">Вид на щрихкод</string>
<string name="cardId">Идентификатор на карта</string>
@@ -33,7 +33,7 @@
<string name="setBackImage">Снимка на задната страна</string>
<string name="setFrontImage">Снимка на предната страна</string>
<string name="photos">Снимки</string>
<string name="importOptionApplicationExplanation">Изберете файл чрез друго приложение.</string>
<string name="importOptionApplicationExplanation">Изберете файл на друго приложение.</string>
<string name="noExternalStoragePermissionError">Разрешете достъп до хранилището, за да работи внасянето и изнасянето</string>
<string name="noCardExistsError">Картата не е намерена</string>
<string name="updateBarcodeQuestionText">Идентификаторът е променен. Желаете ли с неговата стойност да бъде променен и щрихкодът\?</string>
@@ -80,7 +80,6 @@
<string name="groupsList">Списъци: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Валидност: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Изтекла: <xliff:g>%s</xliff:g></string>
<string name="balancePoints"><xliff:g>%s</xliff:g> точки</string>
<string name="balanceSentence">Наличност: <xliff:g>%s</xliff:g></string>
<string name="noGroups">Докоснете бутона +, за да добавите списък.</string>
<string name="noStoreError">Не е въведено наименование</string>
@@ -88,7 +87,6 @@
<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_lock_barcode_orientation">Без на завъртане на щрихкода</string>
<string name="settings_keep_screen_on">Поддържане на екрана включен</string>
<string name="settings_disable_lockscreen_while_viewing_card">Предотвратяване на заключване на екрана</string>
<string name="settings_max_font_size_scale">Максимален размер на шрифта</string>
@@ -122,10 +120,10 @@
<string name="copy_to_clipboard">Копира идентификатора в междинната памет</string>
<string name="ok">Добре</string>
<string name="importSuccessful">Данните са внесени</string>
<string name="chooseImportType">От къде ще внесете\?</string>
<string name="chooseImportType">Внасяне на данни на</string>
<string name="importCatimaMessage">Изберете файла <i>catima.zip</i>, предварително изнесен от Catima.
\nСъздайте такъв файл от меню Внасяне/изнасяне от друго устройство с Catima като изберете Изнасяне.</string>
<string name="importOptionApplicationTitle">От друго приложение</string>
<string name="importOptionApplicationTitle">Чрез друго приложение</string>
<string name="importOptionFilesystemButton">Избиране от файлова система</string>
<string name="importOptionFilesystemExplanation">Изберете определен файл от файловата система.</string>
<string name="app_resources">Свободни ресурси: <xliff:g id="app_resources_list">%s</xliff:g></string>
@@ -140,8 +138,6 @@
<string name="importOptionFilesystemTitle">Внасяне от файловата система</string>
<string name="importCatima">Внасяне от Catima</string>
<string name="exportSuccessful">Данните са изнесени</string>
<string name="unlockScreen">Разрешава автоматичното завъртане</string>
<string name="lockScreen">Спира автоматичното завъртане</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> избрана</item>
<item quantity="other"><xliff:g>%d</xliff:g> избрани</item>
@@ -162,14 +158,13 @@
<string name="importLoyaltyCardKeychainMessage">Изберете файла <i>LoyaltyCardKeychain.csv</i>, предварително изнесен от Loyalty Card Keychain.
\nСъздайте такъв файл от меню Внасяне/изнасяне от друго устройство с Loyalty Card Keychain като изберете Изнасяне.</string>
<string name="failedParsingImportUriError">Препратката не може да бъде анализирана за внасяне</string>
<string name="card_ids_copied">[не превеждайте този низ, https://github.com/TheLastProject/Catima/issues/278]</string>
<string name="failedGeneratingShareURL">Грешка при създаване на адрес за споделяне. Изпратете доклад за дефект.</string>
<string name="failedGeneratingShareURL">Не може да бъде генериран адрес за споделяне. Изпратете доклад за дефект.</string>
<string name="deleteTitle">Премахване на карта</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Изтриване на <xliff:g>%d</xliff:g> карта</item>
<item quantity="other">Изтриване на <xliff:g>%d</xliff:g> карти</item>
</plurals>
<string name="deleteConfirmation">Потвърдете премахване на картата.</string>
<string name="deleteConfirmation">Потвърждавате ли премахване на картата\?</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Желаете ли <xliff:g>%d</xliff:g> карта да бъде премахната\?</item>
<item quantity="other">Желаете ли тези <xliff:g>%d</xliff:g> карти да бъдат премахнати\?</item>
@@ -226,4 +221,28 @@
<string name="showMoreInfo">Показване на информация</string>
<string name="hideMoreInfo">Скриване на информация</string>
<string name="options">Настройки</string>
<string name="card_ids_copied">Идентификаторите са копирани</string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> точка</item>
<item quantity="other"><xliff:g>%s</xliff:g> точки</item>
</plurals>
<string name="settings_oled_dark">Чисто черен фон за тъмната тема</string>
<string name="include_if_asking_support">Ако искате да потърсите поддръжка, включете следната информация:</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>
<string name="settings_lock_on_opening_orientation">Използване на положението, използвано при отваряне на картата</string>
<string name="duplicateCard">Дублиране</string>
<string name="archive">Архивиране</string>
<string name="unarchive">Изваждане от архива</string>
<string name="archived">Картата е архивирана</string>
<string name="unarchived">Карта е извадена от архива</string>
<string name="archiveList">Архив</string>
<string name="noUnarchivedCardsMessage">Няма карти извън архива</string>
<string name="failedLaunchingPhotoPicker">Не е намерено поддържано приложение за галерия.</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> карта (<xliff:g id="archivedCount">%2$d</xliff:g> архивирана)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> карти (<xliff:g id="archivedCount">%2$d</xliff:g> архивирани)</item>
</plurals>
</resources>

View File

@@ -21,7 +21,6 @@
<string name="intent_import_card_from_url_share_text">url শেয়ার টেক্সট থেকে ইন্টেন্ট ইম্পোর্ট কার্ড</string>
<string name="settings_disable_lockscreen_while_viewing_card"> কার্ড দেখা কালিন লকস্ক্রিন নিষ্ক্রিয়</string>
<string name="settings_keep_screen_on">সেটিংস পর্দা খোলা রাখুন</string>
<string name="settings_lock_barcode_orientation"> তালাবদ্ধ বার কোড অভিযোজন</string>
<string name="settings_max_font_size_scale">সর্বোচ্চ হরফ আকার</string>
<string name="settings_light_theme">সাদাটে থিম</string>
<string name="settings_system_theme">যন্ত্রর থিম</string>
@@ -82,7 +81,6 @@
<string name="share">ভাগ</string>
<string name="copy_to_clipboard">নকল করুন ক্লিপবোর্ড এ</string>
<string name="deleteConfirmation">নিশ্চিতকরণ মুছে দিন</string>
<string name="unlockScreen">পর্দা আনলক করুন</string>
<string name="confirm">নিশ্চিত করুন</string>
<string name="delete">মুছে ফেলুন</string>
<string name="edit">সম্পাদনা</string>

View File

@@ -21,7 +21,6 @@
<string name="intent_import_card_from_url_share_text">Želim podijeliti čestitku s tobom</string>
<string name="settings_disable_lockscreen_while_viewing_card">Spriječi zaključavanje ekrana</string>
<string name="settings_keep_screen_on">Zadrži ekran</string>
<string name="settings_lock_barcode_orientation">Zaključaj barcode orjentacija</string>
<string name="settings_max_font_size_scale">Max. veliäťina fonta</string>
<string name="settings_light_theme">Svjetlo</string>
<string name="settings_system_theme">Sistem</string>
@@ -82,7 +81,6 @@
<string name="share">Podijeli</string>
<string name="copy_to_clipboard">Kopiraj ID u clipboard</string>
<string name="deleteConfirmation">Izbriši trajno ovu karticu\?</string>
<string name="unlockScreen">Odblokalna Rotacija</string>
<string name="confirm">Potvrdi</string>
<string name="delete">Obriši</string>
<string name="edit">Izmijeni</string>

View File

@@ -13,40 +13,40 @@
<string name="ok">Ano</string>
<string name="copy_to_clipboard">Kopírovat ID do schránky</string>
<string name="sendLabel">Odeslat…</string>
<string name="editCardTitle">Editovat věrnostní kartu</string>
<string name="addCardTitle">Přidat věrnostní kartu</string>
<string name="editCardTitle">Editovat kartu</string>
<string name="addCardTitle">Přidat kartu</string>
<string name="scanCardBarcode">Skenování čárového kódu</string>
<string name="noStoreError">Zadáno žádné jméno</string>
<string name="noCardIdError">ID nezadáno</string>
<string name="noStoreError">Nezadáno žádné jméno</string>
<string name="noCardIdError">Nezadáno ID</string>
<string name="importExport">Import/Export</string>
<string name="exportName">Export</string>
<string name="importExportHelp">Zálohování dat vám umožní přesunout je do jiného zařízení.</string>
<string name="importSuccessfulTitle">Importováno</string>
<string name="importFailedTitle">Import selhal</string>
<string name="importFailed">Nelze provést import</string>
<string name="exportSuccessfulTitle">Exportovat</string>
<string name="importFailed">Import nelze provést</string>
<string name="exportSuccessfulTitle">Exportováno</string>
<string name="exportFailedTitle">Export selhal</string>
<string name="exportFailed">Nelze provést export</string>
<string name="exportFailed">Export nelze provést</string>
<string name="importing">Importuji…</string>
<string name="exporting">Exportuji…</string>
<string name="noExternalStoragePermissionError">Udělit oprávnění přístupu k externímu úložišti pro import nebo export dat</string>
<string name="importOptionFilesystemTitle">Import ze souborového systému</string>
<string name="importOptionFilesystemExplanation">Vyberte konkrétní soubor v uložišti.</string>
<string name="importOptionFilesystemExplanation">Vyberte konkrétní soubor v úložišti.</string>
<string name="importOptionFilesystemButton">Ze souborového systému</string>
<string name="importOptionApplicationTitle">Použijte jinou aplikaci</string>
<string name="importOptionApplicationTitle">Použitím jiné aplikace</string>
<string name="importOptionApplicationExplanation">K otevření souboru použijte libovolnou aplikaci nebo svého oblíbeného správce souborů.</string>
<string name="importOptionApplicationButton">Použijte jinou aplikaci</string>
<string name="importOptionApplicationButton">Použít jinou aplikaci</string>
<string name="about">O aplikaci</string>
<string name="app_license">Copyleftovaný svobodný software s licencí GPLv3+</string>
<string name="about_title_fmt">O aplikaci <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Verze: <xliff:g id="version">%s</xliff:g></string>
<string name="app_revision_fmt">Informace o revizi: <xliff:g id="app_revision_url">%s</xliff:g></string>
<string name="selectBarcodeTitle">Vyberte čárový kód</string>
<string name="copy_to_clipboard_toast">ID zkopírované do schránky</string>
<string name="copy_to_clipboard_toast">ID zkopírováno do schránky</string>
<string name="deleteTitle">Smazat kartu</string>
<string name="deleteConfirmation">Opravdu chcete smazat tuto věrnostní kartu?</string>
<string name="moveBarcodeToCenterOfScreen">Střed čárového kódu na obrazovce</string>
<string name="moveBarcodeToTopOfScreen">Přesuňte čárový kód do horní části obrazovky</string>
<string name="deleteConfirmation">Opravdu chcete smazat tuto kartu\?</string>
<string name="moveBarcodeToCenterOfScreen">Vycentrovat čárový kód na obrazovce</string>
<string name="moveBarcodeToTopOfScreen">Přesunout čárový kód do horní části obrazovky</string>
<string name="chooseExpiryDate">Zvolte datum vypršení platnosti</string>
<string name="never">Nikdy</string>
<string name="expiryDate">Platnost</string>
@@ -58,12 +58,10 @@
\ncopyright © 20162020 Branden Archer</string>
<string name="exportOptionExplanation">Data budou zapsána na místo podle vašeho výběru.</string>
<string name="failedParsingImportUriError">Nelze analyzovat import URI</string>
<string name="noCardExistsError">Kartu nelze najít</string>
<string name="noCardExistsError">Takovou kartu nelze najít</string>
<string name="noCardsMessage">Nejprve přidejte kartu</string>
<string name="cardShortcut">Zástupce Karty</string>
<string name="cardShortcut">Zástupce karty</string>
<string name="share">Podíl</string>
<string name="unlockScreen">Odblokovat Rotaci</string>
<string name="lockScreen">Otáčení Bloku</string>
<string name="unstar">Odebrat z oblíbených</string>
<string name="star">Přidat do oblíbených</string>
<string name="noBarcode">Žádný čárový kód</string>
@@ -72,37 +70,35 @@
<string name="noMatchingGiftCards">Nic nenalezeno. Zkuste změnit vyhledávání.</string>
<string name="action_search">Vyhledávání</string>
<string name="thumbnailDescription">Miniatura</string>
<string name="card_ids_copied">Zkopírované ID</string>
<string name="card_ids_copied">ID zkopírováno</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Opravdu chcete kartu <xliff:g>%d</xliff:g> trvale odstranit\?</item>
<item quantity="few">Opravdu chcete karty <xliff:g>%d</xliff:g> trvale odstranit\?</item>
<item quantity="other">Opravdu chcete karty <xliff:g>%d</xliff:g> trvale odstranit\?</item>
<item quantity="one">Opravdu chcete <xliff:g>%d</xliff:g> kartu trvale odstranit\?</item>
<item quantity="few">Opravdu chcete <xliff:g>%d</xliff:g> karty trvale odstranit\?</item>
<item quantity="other">Opravdu chcete <xliff:g>%d</xliff:g> karet trvale odstranit\?</item>
</plurals>
<plurals name="deleteCardsTitle">
<item quantity="one">Odstranit kartu <xliff:g>%d</xliff:g></item>
<item quantity="few">Odstranit karty <xliff:g>%d</xliff:g></item>
<item quantity="other">Odstranit karty <xliff:g>%d</xliff:g></item>
<item quantity="one">Odstranit <xliff:g>%d</xliff:g> kartu</item>
<item quantity="few">Odstranit <xliff:g>%d</xliff:g> karty</item>
<item quantity="other">Odstranit <xliff:g>%d</xliff:g> karet</item>
</plurals>
<string name="importSuccessful">Data importována</string>
<string name="intent_import_card_from_url_share_text">Chci s Vámi sdílet kartu</string>
<string name="settings_disable_lockscreen_while_viewing_card">Bránit uzamykání obrazovky</string>
<string name="settings_keep_screen_on">Udržovat obrazovku zapnutou</string>
<string name="settings_lock_barcode_orientation">Zamknout orientaci čárového kódu</string>
<string name="settings_max_font_size_scale">Maximální velikost písma</string>
<string name="settings_dark_theme">Tmavý</string>
<string name="settings_light_theme">Světlý</string>
<string name="settings_system_theme">Systém</string>
<string name="settings_system_theme">Podle systému</string>
<string name="settings_theme">Vzhled</string>
<string name="settings_category_title_ui">Uživatelské rozhraní</string>
<string name="settings">Nastavení</string>
<string name="card">Karta</string>
<string name="balancePoints"><xliff:g>%s</xliff:g> bodů</string>
<string name="balanceSentence">Zůstatek: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Platnost vypršela: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Platí do: <xliff:g>%s</xliff:g></string>
<string name="moveDown">Přesunout dolů</string>
<string name="moveUp">Přesunout nahoru</string>
<string name="enterBarcodeInstructions">Zadejte ID a níže vyberte typ čárového kódu nebo \"Tato karta nemá čárový kód\".</string>
<string name="enterBarcodeInstructions">Zadejte ID a níže vyberte typ čárového kódu nebo Tato karta nemá čárový kód.</string>
<string name="settings_brown_theme">Hnědá</string>
<string name="settings_grey_theme">Šedá</string>
<string name="settings_green_theme">Zelená</string>
@@ -113,7 +109,7 @@
<string name="settings_pink_theme">Růžová</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_theme_color">Barva motivu</string>
<string name="settings_system_locale">Systém</string>
<string name="settings_system_locale">Podle systému</string>
<string name="settings_locale">Jazyk</string>
<string name="turn_flashlight_off">Vypnout světlo</string>
<string name="turn_flashlight_on">Zapnout světlo</string>
@@ -130,27 +126,27 @@
<string name="photos">Fotky</string>
<string name="backImageDescription">Obrázek zadní strany</string>
<string name="frontImageDescription">Obrázek přední strany</string>
<string name="intent_import_card_from_url_share_multiple_text">Chci s Vámi sdílet kartu</string>
<string name="copy_to_clipboard_multiple_toast">ID zkopírováno do schránky</string>
<string name="intent_import_card_from_url_share_multiple_text">Chci s vámi sdílet karty</string>
<string name="copy_to_clipboard_multiple_toast">ID zkopírována do schránky</string>
<string name="wrongValueForBarcodeType">Hodnota není platná pro vybraný typ čárového kódu</string>
<string name="unsupportedBarcodeType">Tento typ čárového kódu zatím nelze zobrazit. Možná bude podporován v pozdější verzi aplikace.</string>
<string name="barcodeId">Hodnota čárového kódu</string>
<string name="setBarcodeId">Nastavení hodnoty čárového kódu</string>
<string name="sameAsCardId">Stejné jako ID</string>
<string name="importVoucherVaultMessage">Vyberte svůj <i>vouchervault.json</i> export z Voucher Vault, který chcete importovat.
\nVytvořte jej tak, že nejprve stisknete tlačítko Exportovat v aplikaci Voucher Vault.</string>
<string name="importVoucherVaultMessage">Vyberte svůj <i>vouchervault.json</i> exportovaný z Voucher Vault, který chcete importovat.
\nVytvoříte jej tak, že nejprve stisknete tlačítko Exportovat v aplikaci Voucher Vault.</string>
<string name="importVoucherVault">Import z Voucher Vault</string>
<string name="importStocardMessage">Vyberte svůj <i>***-sync.zip</i> export z aplikace Stocard, který chcete importovat.
\nZískejte ji zasláním e-mailu na adresu support@stocardapp.com s žádostí o export vašich dat.</string>
<string name="importStocardMessage">Vyberte svůj <i>***-sync.zip</i> exportovaný z aplikace Stocard, který chcete importovat.
\nZískejte ji zasláním e-mailu na adresu support@stocardapp.com s žádostí o export vašich dat.</string>
<string name="importStocard">Import ze Stocard</string>
<string name="importLoyaltyCardKeychainMessage">Vyberte export <i>LoyaltyCardKeychain.csv</i> z klíčenky věrnostních karet, který chcete importovat.
\nVytvořte jej z nabídky Import/Export v Loyalty Card Keychain tak, že tam nejprve stisknete tlačítko Exportovat.</string>
<string name="importLoyaltyCardKeychainMessage">Vyberte <i>LoyaltyCardKeychain.csv</i> exportovaný z Loyalty Card Keychain, který chcete importovat.
\nVytvoříte jej z nabídky Import/Export v Loyalty Card Keychain tak, že tam nejprve stisknete tlačítko Exportovat.</string>
<string name="importLoyaltyCardKeychain">Import z Loyalty Card Keychain</string>
<string name="importFidmeMessage">Vyberte svůj <i>fidme-export-request-xxxxxx.zip</i> export z FidMe k importu a poté vyberte typy čárových kódů ručně.
\nVytvořte jej ze svého profilu FidMe tak, že nejprve zvolíte možnost Ochrana dat a poté stisknete tlačítko Extract moje data.</string>
<string name="importFidmeMessage">Vyberte svůj <i>fidme-export-request-xxxxxx.zip</i> exportovaný z FidMe k importu a poté vyberte typy čárových kódů ručně.
\nVytvoříte jej ze svého profilu FidMe tak, že nejprve zvolíte možnost Ochrana dat a poté stisknete tlačítko Extrahovat moje data.</string>
<string name="importFidme">Import z FidMe</string>
<string name="importCatimaMessage">Vyberte export <i>catima.zip</i> z programu Catima, který chcete importovat.
\nVytvořte jej z nabídky Import/Export jiné aplikace Catima tak, že v ní nejprve stisknete tlačítko Exportovat.</string>
<string name="importCatimaMessage">Vyberte <i>catima.zip</i> exportovaný z aplikace Catima, který chcete importovat.
\nVytvoříte jej z nabídky Import/Export jiné aplikace Catima tak, že v ní nejprve stisknete tlačítko Exportovat.</string>
<string name="importCatima">Import z Catima</string>
<string name="accept">Přijmout</string>
<string name="privacy_policy_popup_text">Oznámení o zásadách ochrany osobních údajů (vyžadováno některými obchody s aplikacemi):
@@ -158,13 +154,13 @@
\nNejsou shromažďovány žádné údaje, což může potvrdit každý, protože naše aplikace je svobodný software.</string>
<string name="privacy_policy">Zásady soukromí</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="chooseImportType">Importovat data z\?</string>
<string name="chooseImportType">Importovat data z</string>
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> se nezdá být platným zůstatkem.</string>
<string name="points">Body</string>
<string name="currency">Měna</string>
<string name="balance">Zůstatek</string>
<string name="errorReadingImage">Obrázek se nepodařilo přečíst</string>
<string name="noBarcodeFound">Čarový kód nenalezen</string>
<string name="noBarcodeFound">Čárový kód nenalezen</string>
<string name="groupsList">Skupiny: <xliff:g>%s</xliff:g></string>
<string name="addFromImage">Výběr obrázku z galerie</string>
<string name="addManually">Ruční zadání ID</string>
@@ -193,7 +189,7 @@
<string name="app_contributors">Přispěli: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="noGroupCards">Tato skupina je prázdná</string>
<string name="sort_by">Seřadit podle</string>
<string name="reverse">...v obráceném pořadí</string>
<string name="reverse">v obráceném pořadí</string>
<string name="sort_by_balance">Zůstatek</string>
<string name="sort_by_expiry">Vypršení</string>
<string name="sort_by_most_recently_used">Naposledy použité</string>
@@ -204,7 +200,7 @@
<string name="version_history">Historie verzí</string>
<string name="rate_this_app">Ohodnoťte tuto aplikaci</string>
<string name="and_data_usage">a využití dat</string>
<string name="credits">Kredity</string>
<string name="credits">Zásluhy</string>
<string name="on_github">na GitHubu</string>
<string name="source_repository">Úložiště zdrojů</string>
<string name="license">Licence</string>
@@ -213,10 +209,10 @@
<string name="on_google_play">na Google Play</string>
<string name="exportPassword">Nastavení hesla pro ochranu exportu (volitelné)</string>
<string name="exportPasswordHint">Zadejte heslo</string>
<string name="selectColor">Vyberte barvu</string>
<string name="selectColor">Vybrat barvu</string>
<string name="setIcon">Nastavit ikonu</string>
<string name="group_edit">Upravit skupinu</string>
<string name="group_name_already_in_use">Již použitý název skupiny</string>
<string name="group_name_already_in_use">Název skupiny je již použitý</string>
<string name="group_name_is_empty">Název skupiny nemůže být prázdný</string>
<string name="group_updated">Skupina aktualizována</string>
<string name="editGroup">Úprava skupiny: <xliff:g>%s</xliff:g></string>
@@ -230,4 +226,29 @@
<string name="starred">S hvězdičkou</string>
<string name="set_scale">Nastavení měřítka</string>
<string name="options">Volby</string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> bod</item>
<item quantity="few"><xliff:g>%s</xliff:g> body</item>
<item quantity="other"><xliff:g>%s</xliff:g> bodů</item>
</plurals>
<string name="settings_oled_dark">Čistě černé pozadí pro tmavý motiv</string>
<string name="include_if_asking_support">Pokud chcete požádat o podporu, uveďte následující informace:</string>
<string name="settings_follow_system_orientation">Následovat systém</string>
<string name="settings_portrait_orientation">Na výšku</string>
<string name="settings_lock_on_opening_orientation">Zamknout podle orientace použité při otevření karty</string>
<string name="archive">Archivovat</string>
<string name="unarchive">Vrátit z archivu</string>
<string name="archiveList">Archivovat</string>
<string name="noUnarchivedCardsMessage">Nejsou žádné karty vrácené z archivu</string>
<string name="unarchived">Karta vrácena z archivu</string>
<string name="settings_card_orientation">Orientace čárového kódu</string>
<string name="settings_landscape_orientation">Na šířku</string>
<string name="duplicateCard">Duplikovat</string>
<string name="archived">Karta archivována</string>
<string name="failedLaunchingPhotoPicker">Nepodařilo se najít podporovanou aplikaci galerie</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> karta (<xliff:g id="archivedCount">%2$d</xliff:g> archivovaná)</item>
<item quantity="few"><xliff:g>%1$d</xliff:g> karty (<xliff:g id="archivedCount">%2$d</xliff:g> archivované)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> karet (<xliff:g id="archivedCount">%2$d</xliff:g> archivovaných)</item>
</plurals>
</resources>

View File

@@ -13,8 +13,6 @@
<item quantity="other">Streichen <xliff:g>%d</xliff:g> korts</item>
</plurals>
<string name="deleteTitle">Karte streichen</string>
<string name="unlockScreen">Afbloker rotation</string>
<string name="lockScreen">Blokrotation</string>
<string name="confirm">Bekræft</string>
<string name="delete">Slet</string>
<string name="edit">Rediger</string>
@@ -85,7 +83,6 @@
<string name="intent_import_card_from_url_share_text">Jeg vil dele et kort med jer</string>
<string name="settings_disable_lockscreen_while_viewing_card">Forebyg låseskærm</string>
<string name="settings_keep_screen_on">LHold skærm tændt</string>
<string name="settings_lock_barcode_orientation">Lås stregkode-orientering</string>
<string name="moveUp">Bevæg dig opad</string>
<string name="leaveWithoutSaveConfirmation">Forlade uden at gemme\?</string>
<string name="settings_display_barcode_max_brightness">Lysere stregkodevisning</string>

View File

@@ -12,8 +12,6 @@
<string name="edit">Bearbeiten</string>
<string name="delete">Löschen</string>
<string name="confirm">Bestätigen</string>
<string name="lockScreen">Rotation sperren</string>
<string name="unlockScreen">Rotation erlauben</string>
<string name="star">Zu den Favoriten hinzufügen</string>
<string name="unstar">Aus den Favoriten entfernen</string>
<string name="ok">OK</string>
@@ -56,7 +54,6 @@
<string name="settings">Einstellungen</string>
<string name="settings_category_title_ui">Benutzeroberfläche</string>
<string name="settings_display_barcode_max_brightness">Barcodeansicht aufhellen</string>
<string name="settings_lock_barcode_orientation">Barcoderotation sperren</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>
@@ -92,7 +89,7 @@
</plurals>
<string name="groupsList">Gruppen: <xliff:g>%s</xliff:g></string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="chooseImportType">Daten importieren aus?</string>
<string name="chooseImportType">Daten importieren aus</string>
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> scheint kein gültiges Guthaben zu sein.</string>
<string name="points">Punkte</string>
<string name="currency">Währung</string>
@@ -105,7 +102,6 @@
<string name="editBarcode">Barcode ändern</string>
<string name="barcode">Strichcode</string>
<string name="card">Karte</string>
<string name="balancePoints"><xliff:g>%s</xliff:g> Punkte</string>
<string name="balanceSentence">Guthaben: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Abgelaufen: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Läuft ab: <xliff:g>%s</xliff:g></string>
@@ -226,4 +222,27 @@
<string name="set_scale">Größe festlegen</string>
<string name="showMoreInfo">Infos anzeigen</string>
<string name="starred">als Favorit</string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> Punkt</item>
<item quantity="other"><xliff:g>%s</xliff:g> Punkte</item>
</plurals>
<string name="settings_oled_dark">Rein schwarzer Hintergrund für dunkles Thema</string>
<string name="include_if_asking_support">Wenn Sie Unterstützung anfordern möchten, geben Sie bitte die folgenden Informationen an:</string>
<string name="settings_follow_system_orientation">System folgen</string>
<string name="settings_landscape_orientation">Landschaft</string>
<string name="archiveList">Archiv</string>
<string name="noUnarchivedCardsMessage">Es gibt keine nicht archivierten Karten</string>
<string name="settings_portrait_orientation">Porträt</string>
<string name="duplicateCard">Duplizieren</string>
<string name="unarchive">Archivierung aufheben</string>
<string name="settings_card_orientation">Barcode-Ausrichtung</string>
<string name="unarchived">Karte nicht archiviert</string>
<string name="archive">Archivieren</string>
<string name="archived">Karte archiviert</string>
<string name="settings_lock_on_opening_orientation">Kartenausrichtung nach dem Öffnen beibehalten</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> Karte (<xliff:g id="archivedCount">%2$d</xliff:g> archiviert)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> Karten (<xliff:g id="archivedCount">%2$d</xliff:g> archiviert)</item>
</plurals>
<string name="failedLaunchingPhotoPicker">Es konnte keine unterstützte Galerie-Anwendung gefunden werden</string>
</resources>

View File

@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="action_add">Προσθήκη</string>
<string name="noGiftCards">Δεν έχετε κάρτες προς το παρόν. Πατήστε το κουμπί \"+\" (συν) στο πάνω μέρος για να ξεκινήσετε.\n\nΤο Loyalty Card Keychain σας δίνει τη δυνατότητα να έχετε τις κάρτες σας στο τηλέφωνο σας, έτσι ώστε να τις έχετε πάντα μαζί σας.</string>
<string name="storeName">Κατάστημα</string>
<string name="noGiftCards">Κάντε κλικ στο + κουμπί για να προσθέσετε μία κάρτα ή εισάγετε κάρτες από το ⋮ μενού.</string>
<string name="storeName">Όνομα</string>
<string name="note">Σημείωση</string>
<string name="cardId">Κωδικός Κάρτας</string>
<string name="cancel">Άκυρο</string>
@@ -10,51 +10,239 @@
<string name="edit">Επεξεργασία</string>
<string name="delete">Διαγραφή</string>
<string name="confirm">Επιβεβαίωση</string>
<string name="lockScreen">Αποκλεισμός Περιστροφής</string>
<string name="unlockScreen">Περιστροφή</string>
<string name="ok">Εντάξει</string>
<string name="copy_to_clipboard">Αντιγραφή κωδικού στο πρόχειρο</string>
<string name="sendLabel">Αποστολή…</string>
<string name="editCardTitle">Επεξεργασία Κάρτας</string>
<string name="addCardTitle">Προσθήκη Κάρτας</string>
<string name="scanCardBarcode">Σαρώστε τον κωδικό της κάρτας</string>
<string name="scanCardBarcode">Σαρώστε τον γραμμοκώδικα (bardcode)</string>
<string name="cardShortcut">Συντόμευση Κάρτας</string>
<string name="noCardsMessage">Δεν υπάρχουν κάρτες. προσθέστε μία πρώτα</string>
<string name="noStoreError">Δεν δώσατε κατάστημα</string>
<string name="noCardIdError">Δεν δώσατε κωδικό κάρτας</string>
<string name="noCardExistsError">Δεν ήταν δυνατό να εντοπιστεί κάρτα</string>
<string name="noCardsMessage">Προσθέστε μία κάρτα πρώτα</string>
<string name="noStoreError">Δεν έχει εισαχθεί όνομα</string>
<string name="noCardIdError">Δεν έχει εισαχθεί κωδικός</string>
<string name="noCardExistsError">Δεν ήταν δυνατό να εντοπιστεί η κάρτα</string>
<string name="importExport">Εισαγωγή/Εξαγωγή</string>
<string name="exportName">Εξαγωγή</string>
<string name="importExportHelp">Τα εφεδρικά δεδομένα σας δίνουν την δυνατότητα να μεταφέρετε τις κάρτες σας σε μία άλλη συσκευή.</string>
<string name="importSuccessfulTitle">Εισαγωγή επιτυχής</string>
<string name="importExportHelp">Τα αντίγραφα ασφαλείας, σας επιτρέπουν να τα εισάγετε σε άλλη συσκευή.</string>
<string name="importSuccessfulTitle">Εισήχθησαν</string>
<string name="importFailedTitle">Εισαγωγή ανεπιτυχής</string>
<string name="importFailed">Δεν εισήχθει</string>
<string name="importFailed">Δεν ήταν δυνατή η εισαγωγή</string>
<string name="exportSuccessfulTitle">Εξαγωγή επιτυχής</string>
<string name="exportFailedTitle">Εξαγωγή ανεπιτυχής</string>
<string name="exportFailed">Δεν εξήχθη</string>
<string name="exportFailed">Δεν ήταν δυνατή η εξαγωγή</string>
<string name="importing">Γίνεται εισαγωγή του…</string>
<string name="exporting">Γίνεται εξαγωγή του…</string>
<string name="noExternalStoragePermissionError">Δεν είναι δυνατή η εισαγωγή ή εξαγωγή καρτών χωρίς την άδεια πρόσβασης στον εξωτερικό χώρο αποθήκευσης</string>
<string name="noExternalStoragePermissionError">Εγκρίνετε την άδεια εξωτερικής αποθήκευσης για να εισάγετε ή εξάγετε δεδομένα</string>
<string name="importOptionFilesystemTitle">Εισαγωγή από το σύστημα αρχείων</string>
<string name="importOptionFilesystemExplanation">Επιλέξτε ένα συγκεκριμένο αρχείο από το σύστημα αρχείων.</string>
<string name="importOptionFilesystemButton">Από το σύστημα αρχείων</string>
<string name="importOptionApplicationTitle">Χρήση εξωτερικής εφαρμογής</string>
<string name="importOptionApplicationExplanation">Κάντε χρήση μίας εξωτερικής εφαρμογής όπως είναι τα Dropbox, Google Drive ή ο αγαπημένος σας διαχειριστής αρχείων για να ανοίξετε ένα αρχείο.</string>
<string name="importOptionApplicationButton">Χρήση εξωτερικής εφαρμογής</string>
<string name="importOptionApplicationTitle">Χρήση άλλης εφαρμογής</string>
<string name="importOptionApplicationExplanation">Χρησιμοποιήστε οποιαδήποτε εφαρμογή ή τον αγαπημένο περιηγητή αρχείων σας, για να ανοίξετε ένα αρχείο.</string>
<string name="importOptionApplicationButton">Χρήσης άλλης εφαρμογής</string>
<string name="about">Σχετικά</string>
<string name="app_license">Άδεια χρήσης υπό το GPLv3.</string>
<string name="app_license">Άδεια χρήσης υπό GPLv3+</string>
<string name="about_title_fmt">Σχετικά με <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Έκδοση: <xliff:g id="version">%s</xliff:g></string>
<string name="app_revision_fmt">Πληροφορίες Αναθεώρησης: <xliff:g id="app_revision_url">%s</xliff:g></string>
<string name="selectBarcodeTitle">Επιλέξτε Barcode</string>
<string name="copy_to_clipboard_toast">Ο κωδικός της κάρτας αντιγράφτηκε στο πρόχειρο</string>
<string name="thumbnailDescription">Μικρογραφία κάρτας</string>
<string name="copy_to_clipboard_toast">Ο κωδικός αντιγράφτηκε στο πρόχειρο</string>
<string name="thumbnailDescription">Μικρογραφία</string>
<string name="settings">Ρυθμίσεις</string>
<string name="settings_category_title_ui">Διεπαφή χρήστη</string>
<string name="settings_dark_theme">Σκοτεινό</string>
<string name="settings_light_theme">Φωτεινό</string>
<string name="settings_system_theme">Σύστημα</string>
<string name="barcode">Γραμμικός κώδικας</string>
<string name="deleteTitle">Αφαίρεση Κάρτας</string>
<string name="deleteConfirmation">Παρακαλώ επιβεβαιώστε ότι θέλετε να διαγράψετε αυτή την κάρτα.</string>
<string name="deleteTitle">Διαγραφή Κάρτας</string>
<string name="deleteConfirmation">Μόνιμη διαγραφή της κάρτας;</string>
<string name="action_search">Αναζήτηση</string>
<string name="noMatchingGiftCards">Κανένα αποτέλεσμα. Δοκίμασε με διαφορετικές λέξεις.</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> επιλέγχθηκε</item>
<item quantity="other"><xliff:g>%d</xliff:g> επιλέγχθηκαν</item>
</plurals>
<string name="noGiftCardsGroup">Δημιούργησε κάρτες και βάλτες σε αυτή την ομάδα.</string>
<string name="barcodeNoBarcode">Δεν υπάρχει barcode</string>
<string name="addManually">Χειροκίνητη εισαγωγή κωδικού</string>
<string name="never">Ποτέ</string>
<string name="share">Κοινοποίηση</string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> πόντος</item>
<item quantity="other"><xliff:g>%s</xliff:g> πόντοι</item>
</plurals>
<string name="exportOptionExplanation">Τα δεδομένα θα μεταφερθούν σε τοποθεσία της επιλογής σας.</string>
<string name="settings_theme">Θέμα</string>
<string name="groupsList">Ομάδες: <xliff:g>%s</xliff:g></string>
<string name="barcodeId">Τιμή γραμμοκώδικα</string>
<string name="sort">Ταξινόμηση</string>
<string name="deleteConfirmationGroup">Διαγραφή ομάδας;</string>
<string name="moveDown">Προχώρα κάτω</string>
<string name="accept">Αποδοχή</string>
<string name="yes">Ναι</string>
<string name="no">Όχι</string>
<string name="addFromImage">Επιλογή εικόνας από την συλλογή</string>
<string name="expiryStateSentence">Λήγει: <xliff:g>%s</xliff:g></string>
<string name="expiryDate">Ημερομηνία λήξης</string>
<string name="settings_keep_screen_on">Κράτα την οθόνη ανοιχτή</string>
<string name="leaveWithoutSaveTitle">Έξοδος</string>
<string name="swipeToSwitchImages">Σύρετε ή πατήστε παρατεταμένα για να αλλάξετε εικόνες</string>
<string name="sort_by_balance">Υπόλοιπο</string>
<string name="reverse">... σε αντίθετη σειρά</string>
<string name="version_history">Ιστορικό έκδοσης</string>
<string name="sort_by">Ταξινόμηση κατά</string>
<string name="credits">Πιστώσεις</string>
<string name="help_translate_this_app">Βοηθήστε να μεταφραστεί η εφαρμογή</string>
<string name="source_repository">Αποθήκη κώδικα</string>
<string name="on_github">στο GitHub</string>
<string name="on_google_play">στο Google Play</string>
<string name="report_error">Αναφορά Σφάλματος</string>
<string name="starred">Αγαπημένα</string>
<string name="translate_platform">στο Weblate</string>
<string name="set_scale">Ορίστε κλίμακα</string>
<string name="importLoyaltyCardKeychain">Εισαγωγή από Loyalty Card Keychain</string>
<string name="importLoyaltyCardKeychainMessage">Επιλέξτε την <i>LoyaltyCardKeychain.csv</i> εξαγωγή από το Loyalty Card Keychain για εισαγωγή.
\nΔημιουργήστε το από το μενού Εισαγωγής/Εξαγωγής στο Loyalty Card Keychain επιλέγοντας Εξαγωγή.</string>
<string name="importFidme">Εισαγωγή από FidMe</string>
<string name="importFidmeMessage">Επιλέξτε την <i>fidme-export-request-xxxxxx.zip</i> εξαγωγή από το FidMe για εισαγωγή και επιλέξτε χειροκίνητα τους τύπους γραμμοκώδικα μετέπειτα.
\nΔημιουργήστε το από το FidMe προφίλ επιλέγοντας Προστασία Δεδομένων και διαλέγοντας εξαγωγή δεδομένων.</string>
<string name="setBarcodeId">Επιλέξτε τιμή γραμμοκώδικα</string>
<string name="wrongValueForBarcodeType">Η τιμή δεν είναι έγκυρη για αυτού του τύπου γραμμοκώδικα</string>
<string name="copy_to_clipboard_multiple_toast">Οι κωδικοί αντιγράφηκαν στο πρόχειρο</string>
<string name="setBackImage">Επιλογή οπίσθιας εικόνας</string>
<string name="removeImage">Αφαίρεση εικόνας</string>
<string name="takePhoto">Τραβήξτε μια φωτογραφία</string>
<string name="updateBarcodeQuestionText">Αλλάξατε τον κωδικό. Θέλετε να ενημερώσετε και τον γραμμοκώδικα στην ίδια τιμή;</string>
<string name="action_show_details">Εμφάνιση λεπτομερειών</string>
<string name="options">Επιλογές</string>
<string name="hideMoreInfo">Απόκρυψη πληροφοριών</string>
<string name="noGroupCards">Αυτή η ομάδα είναι άδεια</string>
<string name="settings_display_barcode_max_brightness">Επιπλέον φωτισμός γραμμοκώδικα</string>
<string name="group_name_is_empty">Το όνομα ομάδας δεν γίνεται να είναι κενό</string>
<string name="group_edit">Επεξεργασία ομάδας</string>
<string name="star">Προσθήκη στα αγαπημένα</string>
<string name="unstar">Αφαίρεση από τα αγαπημένα</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Διαγραφή <xliff:g>%d</xliff:g> κάρτας</item>
<item quantity="other">Διαγραφή <xliff:g>%d</xliff:g> καρτών</item>
</plurals>
<string name="card_ids_copied">Αντιγραμμένη/ες ταυτότητα/ες</string>
<string name="errorReadingImage">Δεν ήταν δυνατό να διαβαστεί η εικόνα</string>
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> δεν φαίνεται να είναι έγκυρο το υπόλοιπο.</string>
<string name="currency">Νόμισμα</string>
<string name="privacy_policy">Πολιτική απορρήτου</string>
<string name="chooseImportType">Εισαγωγή δεδομένων από</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="privacy_policy_popup_text">Σημείωμα πολιτικής απορρήτου ( υποχρεωτικό σε κάποια \"μαγαζιά\" εφαρμογών)
\n
\nΜΗΔΕΝΙΚΆ ΔΕΔΟΜΈΝΑ ΣΥΛΛΈΓΟΝΤΑΙ, ο οποιοσδήποτε μπορεί να το επιβεβαιώσει μιας και η εφαρμογή είναι ελεύθερο λογισμικό.</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> κάρτα ( <xliff:g id="archivedCount">%2$d</xliff:g> αρχειοθετήθηκε)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> κάρτες ( <xliff:g id="archivedCount">%2$d</xliff:g> αρχειοθετήθηκαν)</item>
</plurals>
<string name="importCatimaMessage">Επιλέξτε την <i>catima.zip</i> εξαγωγή από το Catima για εισαγωγή
\nΔημιουργήστε το από το μενού Εισαγωγής/Εξαγωγής μιας άλλης εφαρμογής Catima κάνοντας εξαγωγή εκεί πρώτα.</string>
<string name="importStocardMessage">Επιλέξτε την <i>***-sync.zip</i> εξαγωγή από το Stocard για εισαγωγή.
\nΠάρτε το στέλνοντας email στο: support@stocardapp.com ζητώντας μια εξαγωγή αρχείων των δεδομένων σας.</string>
<string name="intent_import_card_from_url_share_multiple_text">Θέλω να μοιραστώ μερικές κάρτες μαζί σου</string>
<string name="editGroup">Επεξεργασία Ομάδας: <xliff:g>%s</xliff:g></string>
<string name="setFrontImage">Επιλογή μπροστινής εικόνας</string>
<string name="importVoucherVaultMessage">Επιλέξτε την <i>vouchervault.json</i> εξαγωγή από το Voucher Vault για εισαγωγή.
\nΔημιουργήστε το επιλέγοντας Εξαγωγή στο Voucher Vault.</string>
<string name="unsupportedBarcodeType">Ο τύπος γραμμοκώδικα δεν γίνεται να εμφανιστεί ακόμα. Μπορεί να υποστηρίζεται σε μια μελλοντική έκδοση της εφαρμογής.</string>
<string name="frontImageDescription">Μπροστινή εικόνα</string>
<string name="photos">Φωτογραφίες</string>
<string name="backImageDescription">Οπίσθια εικόνα</string>
<string name="updateBarcodeQuestionTitle">Ενημέρωση τιμής γραμμοκώδικα;</string>
<string name="passwordRequired">Παρακαλώ εισάγετε τον κωδικό</string>
<string name="sort_by_most_recently_used">Χρησιμοποιήθηκαν πρόσφατα</string>
<string name="shortcutSelectCard">Επιλέξτε μία κάρτα</string>
<string name="barcodeImageDescriptionWithType">Εικόνα <xliff:g>%s</xliff:g> γραμμοκώδικα</string>
<string name="app_libraries">Ελεύθερες βιβλιοθήκες τρίτων: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="license">Άδεια</string>
<string name="include_if_asking_support">Αν θέλετε να ζητήσετε υποστήριξη, συμπεριλάβετε τις ακόλουθες πληροφορίες:</string>
<string name="action_hide_details">Απόκρυψη λεπτομερειών</string>
<string name="importSuccessful">Δεδομένα εισήχθησαν</string>
<string name="moveUp">Προχώρα πάνω</string>
<string name="barcodeType">Τύπος γραμμοκώδικα</string>
<string name="app_resources">Ελεύθερες πηγές τρίτων: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="selectColor">Επιλογή χρώματος</string>
<string name="setIcon">Ορισμός εικονιδίου</string>
<string name="settings_sky_blue_theme">Γαλάζιο</string>
<string name="settings_green_theme">Πράσινο</string>
<string name="settings_grey_theme">Γκρι</string>
<string name="settings_brown_theme">Καφέ</string>
<string name="sort_by_expiry">Λήξη</string>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> κάρτα</item>
<item quantity="other"><xliff:g>%d</xliff:g> κάρτες</item>
</plurals>
<string name="points">Πόντοι</string>
<string name="exportSuccessful">Δεδομένα εξήχθησαν</string>
<string name="settings_disable_lockscreen_while_viewing_card">Αποτροπή κλειδώματος οθόνης</string>
<string name="failedLaunchingPhotoPicker">Δεν βρέθηκε υποστηριζόμενη εφαρμογή συλλογής</string>
<string name="noBarcode">Χωρίς barcode</string>
<string name="starImage">Αγαπημένο αστέρι</string>
<string name="balanceSentence">Υπόλοιπο: <xliff:g>%s</xliff:g></string>
<string name="failedParsingImportUriError">Δεν ήταν δυνατή η ανάλυση του εισαγόμενου URL</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Διαγραφή της κάρτας <xliff:g>%d</xliff:g> μόνιμα;</item>
<item quantity="other">Διαγραφή των καρτρών <xliff:g>%d</xliff:g> μόνιμα;</item>
</plurals>
<string name="app_copyright_old">Βασισμένο στο Loyalty Card Keychain
\nπνευματικά δικαιώματα © 2016-2020 Branden Archer</string>
<string name="enterBarcodeInstructions">Εισάγετε τον κωδικό και διαλέξτε έναν είδος γραμμοκώδικα από κάτω ή \"Δεν υπάρχει γραμμοκώδικας\".</string>
<string name="settings_follow_system_orientation">Ακολούθηση συστήματος</string>
<string name="settings_card_orientation">Προσανατολισμός γραμμοκώδικα</string>
<string name="settings_portrait_orientation">Πορτραίτο</string>
<string name="settings_landscape_orientation">Οριζόντια</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Πνευματικά δικαιώματα © 2019-<xliff:g>%d</xliff:g> Sylvia van Os</string>
<string name="settings_lock_on_opening_orientation">Κλείδωμα τωρινού προσανατολισμού όταν ανοίγει μία κάρτα</string>
<string name="settings_max_font_size_scale">Μέγιστο μέγεθος γραμματοσειράς</string>
<string name="intent_import_card_from_url_share_text">Θέλω να μοιραστώ μία κάρτα μαζί σου</string>
<string name="enter_group_name">Εισάγετε όνομα ομάδας</string>
<string name="groups">Ομάδες</string>
<string name="noGroups">Κάντε κλικ στο + κουμπί ώστε να προσθέσετε ομάδες για κατηγοριοποίηση.</string>
<string name="group_name_already_in_use">Αυτό το όνομα υπάρχει ήδη</string>
<string name="group_updated">Η ομάδα ενημερώθηκε</string>
<string name="all">Όλες</string>
<string name="failedOpeningFileManager">Εγκαταστήστε έναν διαχειριστή αρχείων πρώτα.</string>
<string name="leaveWithoutSaveConfirmation">Έξοδος χωρίς αποθήκευση;</string>
<string name="expiryStateSentenceExpired">Έληξε: <xliff:g>%s</xliff:g></string>
<string name="card">Κάρτα</string>
<string name="editBarcode">Επεξεργασία γραμμοκώδικα</string>
<string name="chooseExpiryDate">Επιλέξτε ημερομηνία λήξης</string>
<string name="moveBarcodeToTopOfScreen">Μετακίνηση του γραμμοκώδικα στο πάνω μέρος της οθόνης</string>
<string name="moveBarcodeToCenterOfScreen">Κεντράρισμα του γραμμοκώδικα στην οθόνη</string>
<string name="noBarcodeFound">Δεν βρέθηκε γραμμοκώδικας</string>
<string name="balance">Υπόλοιπο</string>
<string name="importCatima">Εισαγωγή από Catima</string>
<string name="importStocard">Εισαγωγή από Stocard</string>
<string name="importVoucherVault">Εισαγωγή από Voucher Vault</string>
<string name="sameAsCardId">Ίδιος κωδικός</string>
<string name="exportPassword">Προσθέστε έναν κωδικό για προστασία της εξαγωγής (προαιρετικά)</string>
<string name="exportPasswordHint">Εισαγωγή κωδικού</string>
<string name="failedGeneratingShareURL">Δεν ήταν δυνατή η δημιουργία κοινοποιούμενου URL. Παρακαλώ αναφέρετε το.</string>
<string name="turn_flashlight_on">Ενεργοποίηση φακού</string>
<string name="turn_flashlight_off">Απενεργοποίηση φακού</string>
<string name="settings_locale">Γλώσσα</string>
<string name="settings_oled_dark">Απόλυτο μαύρο φόντο για το μαύρο θέμα</string>
<string name="settings_system_locale">Σύστημα</string>
<string name="settings_theme_color">Χρώμα θέματος</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_pink_theme">Ροζ</string>
<string name="settings_magenta_theme">Φούξια</string>
<string name="settings_violet_theme">Βιολετί</string>
<string name="settings_blue_theme">Μπλε</string>
<string name="app_contributors">Δημιουργήθηκε από: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="showMoreInfo">Εμφάνιση πληροφοριών</string>
<string name="sort_by_name">Όνομα</string>
<string name="and_data_usage">και δεδομένα χρήσης</string>
<string name="rate_this_app">Βαθμολογήστε την εφαρμογή</string>
<string name="duplicateCard">Αντίγραφο</string>
<string name="archive">Αρχειοθετήστε</string>
<string name="archived">Η κάρτα αρχειοθετήθηκε</string>
<string name="unarchived">Η κάρτα αφαιρέθηκε από το αρχείο</string>
<string name="unarchive">Αφαίρεση από το αρχείο</string>
<string name="archiveList">Αρχείο</string>
<string name="noUnarchivedCardsMessage">Δεν υπάρχουν αρχειοθετημένες κάρτες</string>
</resources>

View File

@@ -52,7 +52,6 @@
<string name="action_search">Serĉi</string>
<string name="deleteConfirmation">Ĉu forigi ĉi tiun karton\?</string>
<string name="deleteTitle">Forigi karton</string>
<string name="settings_lock_barcode_orientation">Seruro barcode orientiĝo</string>
<string name="settings_display_barcode_max_brightness">Heligi barcode vido</string>
<string name="settings_max_font_size_scale">Max. tiparo grandeco</string>
<string name="starImage">Preferata stelo</string>
@@ -76,8 +75,6 @@
<string name="cardShortcut">Karto Mallongirejo</string>
<string name="scanCardBarcode">Scintigrafio Barcode Card</string>
<string name="share">Interŝanĝado</string>
<string name="unlockScreen">Malbloki Rotacio</string>
<string name="lockScreen">Bloko Rotacio</string>
<string name="star">Aldoni al miaj plej ŝatataj</string>
<string name="copy_to_clipboard_toast">Card ID kopiita al la tondujo</string>
<string name="settings_keep_screen_on">Teni sur ekrano</string>

View File

@@ -10,8 +10,6 @@
<string name="edit">Editar</string>
<string name="delete">Eliminar</string>
<string name="confirm">Confirmar</string>
<string name="lockScreen">Bloquear giro</string>
<string name="unlockScreen">Desbloquear giro</string>
<string name="ok">Aceptar</string>
<string name="copy_to_clipboard">Copiar id. en portapapeles</string>
<string name="sendLabel">Enviar…</string>
@@ -51,7 +49,6 @@
<string name="exportSuccessful">Datos de las tarjetas exportados</string>
<string name="importSuccessful">Datos de las tarjetas importados</string>
<string name="intent_import_card_from_url_share_text">Quiero compartirte una tarjeta</string>
<string name="settings_lock_barcode_orientation">Bloquear giro en el código de barras</string>
<string name="settings_dark_theme">Oscuro</string>
<string name="settings_light_theme">Claro</string>
<string name="settings_system_theme">Sistema</string>
@@ -64,7 +61,7 @@
<string name="share">Compartir</string>
<string name="barcodeNoBarcode">Esta tarjeta no tiene código de barras</string>
<string name="barcodeType">Tipo de código de barras</string>
<string name="noMatchingGiftCards">No se ha encontrado nada. Pruebe a modificar su búsqueda.</string>
<string name="noMatchingGiftCards">Sin resultados. Pruebe modificando su búsqueda.</string>
<string name="action_search">Buscar</string>
<string name="app_revision_fmt">Información de la revisión: <xliff:g id="app_revision_url">%s</xliff:g></string>
<string name="noGroups">Primero pulse en el botón «+» para añadir grupos de categorización.</string>
@@ -99,7 +96,6 @@
<string name="editBarcode">Editar el código de barras</string>
<string name="barcode">Código de barras</string>
<string name="card">Tarjeta</string>
<string name="balancePoints"><xliff:g>%s</xliff:g> puntos</string>
<string name="expiryStateSentenceExpired">Expirado: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Expira: <xliff:g>%s</xliff:g></string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Derechos de autor © 2019-<xliff:g>%d</xliff:g> de Sylvia van Os.</string>

View File

@@ -1,28 +1,28 @@
<?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="noExternalStoragePermissionError">Salli käyttöoikeus ulkoisen tallennustilan käyttöön voidaksesi tuoda tai viedä kortteja</string>
<string name="noExternalStoragePermissionError">Salli käyttöoikeus ulkoisen tallennustilan käyttöön voidaksesi tuoda tai viedä tietoja</string>
<string name="no">Ei</string>
<string name="yes">Kyllä</string>
<string name="updateBarcodeQuestionText">Vaihdoit kortin ID-tunnuksen. Haluatko päivittää myös viivakoodin käyttämään samaa arvoa\?</string>
<string name="updateBarcodeQuestionText">Vaihdoit ID-tunnuksen. Haluatko päivittää myös viivakoodin käyttämään samaa arvoa\?</string>
<string name="updateBarcodeQuestionTitle">Päivitä viivakoodin arvo\?</string>
<string name="intent_import_card_from_url_share_multiple_text">Haluan jakaa joitain kortteja kanssasi</string>
<string name="copy_to_clipboard_multiple_toast">Kortin tunnukset kopioidaan leikepöydälle</string>
<string name="copy_to_clipboard_multiple_toast">ID-tunnukset kopioitu leikepöydälle</string>
<string name="wrongValueForBarcodeType">Arvo ei ole kelvollinen valitulle viivakoodityypille</string>
<string name="unsupportedBarcodeType">Tätä viivakoodityyppiä ei voi vielä näyttää. Sitä saatetaan tukea sovelluksen myöhemmässä versiossa.</string>
<string name="setBarcodeId">Aseta viivakoodin arvo</string>
<string name="sameAsCardId">Sama kuin kortin ID-tunnus</string>
<string name="sameAsCardId">Sama kuin ID-tunnus</string>
<string name="barcodeId">Viivakoodin arvo</string>
<string name="importVoucherVaultMessage">Valitse tuotava <i>vouchervault.json</i>-vienti Voucher Vaultista.
\nTai luo se painamalla ensin Vie Voucher Vaultissa.</string>
\nLuo se painamalla ensin Vie Voucher Vaultissa.</string>
<string name="importVoucherVault">Tuo Voucher Vault varmuuskopiotiedostosta</string>
<string name="importLoyaltyCardKeychainMessage">Valitse <i>LoyaltyCardKeychain.csv</i>-vientitietosi Loyalty Card Keychainista tuotavaksi.
<string name="importLoyaltyCardKeychainMessage">Valitse tuotava <i>LoyaltyCardKeychain.csv</i>-vientitiedostosi Loyalty Card Keychainista.
\nTai luo se Loyalty Card Keychainin Import/Export-valikosta painamalla ensin Export (Vie).</string>
<string name="importLoyaltyCardKeychain">Tuo Loyalty Card Keychain varmuuskopiotiedostosta</string>
<string name="importFidmeMessage">Valitse <i>fidme-export-request-xxxxxxxx.zip</i>-vienti FidMe:stä tuotavaksi ja valitse viivakoodityypit manuaalisesti sen jälkeen.
\nTai luo se FidMe-profiilistasi valitsemalla Tietosuoja ja painamalla ensin Extract my data.</string>
<string name="importFidmeMessage">Valitse tuotava <i>fidme-export-request-xxxxxxxx.zip</i>-vientitiedostosi FidMe:stä ja valitse viivakoodityypit manuaalisesti sen jälkeen.
\nLuo se FidMe-profiilistasi valitsemalla Tietosuoja ja painamalla ensin Extract my data.</string>
<string name="importFidme">Tuo FidMe varmuuskopiotiedostosta</string>
<string name="importCatimaMessage">Valitse tuotava <i>catima.zip</i>-vienti Catimasta.
\nTai luo se jonkin toisen Catima-sovelluksen Tuo/Vie-valikosta painamalla siellä ensin Vie.</string>
<string name="importCatimaMessage">Valitse tuotava <i>catima.zip</i>-vientitiedostosi Catimasta.
\nLuo se Catima-sovelluksen Tuo/Vie-valikosta painamalla siellä ensin Vie.</string>
<string name="importCatima">Tuo Catima varmuuskopiotiedostosta</string>
<string name="accept">Hyväksy</string>
<string name="privacy_policy_popup_text">Tietosuojaseloste (joidenkin sovelluskauppojen vaatimus):
@@ -30,7 +30,7 @@
\nMITÄÄN TIETOJA EI KERÄTÄ LAINKAAN, minkä kuka tahansa voi vahvistaa, koska sovelluksemma on vapaa ohjelmisto.</string>
<string name="privacy_policy">Tietosuojakäytäntö</string>
<string name="app_loyalty_card_keychain">Kanta-asiakaskortin avainnippu</string>
<string name="chooseImportType">Tuo tietoja kohteesta\?</string>
<string name="chooseImportType">Tuo tietoja kohteesta</string>
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> ei vaikuta olevan kelvollinen saldo.</string>
<string name="points">Pisteet</string>
<string name="currency">Valuutta</string>
@@ -45,13 +45,12 @@
<string name="editBarcode">Muokkaa viivakoodia</string>
<string name="barcode">Viivakoodi</string>
<string name="card">Kortti</string>
<string name="balancePoints"><xliff:g>%s</xliff:g> pistettä</string>
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Vanhentunut: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Vanhenee: <xliff:g>%s</xliff:g></string>
<string name="groupsList">Ryhmät: <xliff:g>%s</xliff:g></string>
<string name="addFromImage">Valitse kuva galleriasta</string>
<string name="addManually">Anna kortin ID-tunnus manuaalisesti</string>
<string name="addManually">Anna ID-tunnus manuaalisesti</string>
<string name="leaveWithoutSaveConfirmation">Poistu tallentamatta\?</string>
<string name="leaveWithoutSaveTitle">Poistu</string>
<string name="moveDown">Siirrä alaspäin</string>
@@ -63,15 +62,14 @@
<item quantity="one"><xliff:g>%d</xliff:g> kortti</item>
<item quantity="other"><xliff:g>%d</xliff:g> kortit</item>
</plurals>
<string name="noGroups">Napsauta + plus-painiketta lisätäksesi ensin ryhmät luokittelua varten.</string>
<string name="noGroups">Napsauta + plus-painiketta lisätäksesi ryhmät luokittelua varten.</string>
<string name="groups">Ryhmät</string>
<string name="enter_group_name">Anna ryhmän nimi</string>
<string name="exportSuccessful">Korttitietojen vienti valmis</string>
<string name="importSuccessful">Korttitietojen tuonti valmis</string>
<string name="exportSuccessful">Tiedot viety</string>
<string name="importSuccessful">Tiedot tuotu</string>
<string name="intent_import_card_from_url_share_text">Haluan jakaa kortin kanssasi</string>
<string name="settings_disable_lockscreen_while_viewing_card">Estä lukitusnäyttö</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_lock_barcode_orientation">Lukitse viivakoodin suunta</string>
<string name="settings_display_barcode_max_brightness">Kirkasta viivakoodinäkymää</string>
<string name="settings_max_font_size_scale">Fontin enimmäiskoko</string>
<string name="settings_dark_theme">Tumma</string>
@@ -81,19 +79,19 @@
<string name="settings_category_title_ui">Käyttöliittymä</string>
<string name="settings">Asetukset</string>
<string name="starImage">Suosikki tähti</string>
<string name="thumbnailDescription">Kortin pikkukuva</string>
<string name="copy_to_clipboard_toast">Kortin ID-tunnus kopioitu leikepöydälle</string>
<string name="enterBarcodeInstructions">Syötä kortin ID-tunnus ja valitse sen viivakoodityyppi, tai valitse \"Tällä kortilla ei ole viivakoodia\".</string>
<string name="thumbnailDescription">Pienoiskuva</string>
<string name="copy_to_clipboard_toast">ID-tunnus kopioitu leikepöydälle</string>
<string name="enterBarcodeInstructions">Syötä ID-tunnus ja valitse sen viivakoodityyppi, tai valitse \"Ei viivakoodia\".</string>
<string name="selectBarcodeTitle">Valitse viivakoodi</string>
<string name="app_resources">Vapaat kolmannen osapuolen resurssit: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_libraries">Kolmannen osapuolen Libre-kirjastot: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_revision_fmt">Muutostiedot: <xliff:g id="app_revision_url">%s</xliff:g></string>
<string name="debug_version_fmt">Versio: <xliff:g id="version">%s</xliff:g></string>
<string name="about_title_fmt">Tietoja <xliff:g id="app_name">%s</xliff:g></string>
<string name="app_license">Copyleft (käyttäjänoikeus) - vapaa ohjelmisto, lisenssi GPLv3+.</string>
<string name="app_license">Copyleft (käyttäjänoikeus) - vapaa ohjelmisto, lisenssi GPLv3+</string>
<string name="app_copyright_old">Perustuu Loyalty Card Keychain sovellukseen
\ntekijänoikeus © 20162020 Branden Archer.</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Tekijänoikeus © 2019<xliff:g>%d</xliff:g> Sylvia van Os.</string>
\ntekijänoikeus © 20162020 Branden Archer</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Tekijänoikeus © 2019<xliff:g>%d</xliff:g> Sylvia van Os</string>
<string name="about">Tietoja</string>
<string name="importOptionApplicationButton">Käytä toista sovellusta</string>
<string name="importOptionApplicationExplanation">Käytä mitä tahansa sovellusta tai suosikkitiedostonhallintaasi tiedoston avaamiseen.</string>
@@ -104,31 +102,29 @@
<string name="exportOptionExplanation">Tiedot kirjoitetaan valitsemaasi sijaintiin.</string>
<string name="exporting">Viedään…</string>
<string name="importing">Tuodaan…</string>
<string name="exportFailed">Kortteja ei voitu viedä</string>
<string name="exportFailed">Vienti epäonnistui</string>
<string name="exportFailedTitle">Vienti epäonnistui</string>
<string name="exportSuccessfulTitle">Vienti valmis</string>
<string name="importFailed">Kortteja ei voitu tuoda</string>
<string name="importFailed">Tuonti epäonnistui</string>
<string name="importFailedTitle">Tuonti epäonnistui</string>
<string name="importSuccessfulTitle">Tuonti valmis</string>
<string name="importExportHelp">Varmuuskopioimalla korttisi, voit siirtää ne toiseen laitteeseen.</string>
<string name="importExportHelp">Tietojesi varmuuskopiointi mahdollistaa niiden siirtämisen toiseen laitteeseen.</string>
<string name="exportName">Vie</string>
<string name="importExport">Tuo/Vie</string>
<string name="failedParsingImportUriError">Tuonnin URI: n jäsentäminen epäonnistui</string>
<string name="noCardExistsError">Korttia ei löytynyt</string>
<string name="noCardIdError">Kortin ID-tunnusta ei annettu</string>
<string name="noCardExistsError">Tätä korttia ei löytynyt</string>
<string name="noCardIdError">ID-tunnusta ei annettu</string>
<string name="noStoreError">Nimeä ei annettu</string>
<string name="card_ids_copied">Kopioidut korttitunnukset</string>
<string name="card_ids_copied">Kopioidut tunnukset</string>
<string name="noCardsMessage">Lisää ensin kortti</string>
<string name="cardShortcut">Kortin pikakuvake</string>
<string name="scanCardBarcode">Skannaa kortin viivakoodi</string>
<string name="scanCardBarcode">Skannaa viivakoodi</string>
<string name="addCardTitle">Lisää kortti</string>
<string name="editCardTitle">Muokkaa korttia</string>
<string name="sendLabel">Lähetä…</string>
<string name="share">Jaa</string>
<string name="copy_to_clipboard">Kopioi ID-tunnus leikepöydälle</string>
<string name="ok">OK</string>
<string name="unlockScreen">Poista kierron esto</string>
<string name="lockScreen">Estä kierto</string>
<string name="confirm">Vahvista</string>
<string name="delete">Poista</string>
<string name="edit">Muokkaa</string>
@@ -137,7 +133,7 @@
<string name="unstar">Poista suosikeista</string>
<string name="star">Lisää suosikkeihin</string>
<string name="noBarcode">Ei viivakoodia</string>
<string name="barcodeNoBarcode">Tällä kortilla ei ole viivakoodia</string>
<string name="barcodeNoBarcode">Viivakoodia ei ole</string>
<string name="barcodeType">Viivakoodin tyyppi</string>
<string name="cardId">Kortin ID-tunnus</string>
<string name="note">Lisätieto</string>
@@ -151,8 +147,8 @@
<string name="setBackImage">Aseta takakuva</string>
<string name="setFrontImage">Aseta etukuva</string>
<string name="photos">Valokuvat</string>
<string name="backImageDescription">Kortin takakuva</string>
<string name="frontImageDescription">Kortin etukuva</string>
<string name="backImageDescription">Takakuva</string>
<string name="frontImageDescription">Etukuva</string>
<string name="deleteConfirmation">Poista tämä kortti\?</string>
<string name="deleteTitle">Poista kortti</string>
<plurals name="deleteCardsConfirmation">
@@ -169,7 +165,7 @@
</plurals>
<string name="importStocard">Tuo Stocardista</string>
<string name="importStocardMessage">Valitse tuotava <i>***-sync.zip</i>-vienti Stocardista.
\nTai hanki se lähettämällä sähköpostia osoitteeseen support@stocardapp.com ja pyytämällä tietojesi vientiä.</string>
\nHanki se lähettämällä sähköpostia osoitteeseen support@stocardapp.com ja pyytämällä tietojesi vientiä.</string>
<string name="passwordRequired">Ole hyvä ja syötä salasana</string>
<string name="failedGeneratingShareURL">Ei pystynyt luomaan jaettavaa URL-osoitetta. Ilmoita tästä.</string>
<string name="turn_flashlight_on">Sytytä taskulamppu</string>
@@ -187,5 +183,64 @@
<string name="settings_catima_theme">Catima</string>
<string name="settings_system_locale">Järjestelmä</string>
<string name="settings_locale">Kieli</string>
<string name="noGroupCards">Tämä ryhmä ei sisällä kortteja</string>
<string name="noGroupCards">Tämä ryhmä on tyhjä</string>
<string name="group_edit">Muokkaa ryhmää</string>
<string name="group_name_already_in_use">Ryhmän nimi on jo käytössä</string>
<string name="group_name_is_empty">Ryhmän nimi ei voi olla tyhjä</string>
<string name="group_updated">Ryhmä päivitetty</string>
<string name="editGroup">Muokataan ryhmää: <xliff:g>%s</xliff:g></string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> piste</item>
<item quantity="other"><xliff:g>%s</xliff:g> pistettä</item>
</plurals>
<string name="settings_oled_dark">Musta tausta tummalle teemalle</string>
<string name="setIcon">Aseta kuvake</string>
<string name="swipeToSwitchImages">Vaihda kuvia pyyhkäisemällä tai painamalla pitkään</string>
<string name="sort_by_name">Nimi</string>
<string name="sort_by_most_recently_used">Viimeksi käytetyt</string>
<string name="sort_by_expiry">Viimeinen voimassaoloaika</string>
<string name="sort_by_balance">Saldo</string>
<string name="reverse">...käänteisessä järjestyksessä</string>
<string name="sort_by">Lajitteluperuste</string>
<string name="credits">Krediitit</string>
<string name="help_translate_this_app">Auta kääntämään tämä sovellus</string>
<string name="license">Lisenssi</string>
<string name="source_repository">Lähdekoodivarasto</string>
<string name="on_github">GitHubissa</string>
<string name="and_data_usage">ja datan käyttö</string>
<string name="on_google_play">Google Playssa</string>
<string name="report_error">Ilmoita virheestä</string>
<string name="action_show_details">Näytä tiedot</string>
<string name="action_hide_details">Piilota tiedot</string>
<string name="shortcutSelectCard">Valitse kortti</string>
<string name="starred">Tähdellä merkityt</string>
<string name="options">Vaihtoehdot</string>
<string name="set_scale">Säädä kokoa</string>
<string name="include_if_asking_support">Jos haluat pyytää tukea, ilmoita seuraavat tiedot:</string>
<string name="hideMoreInfo">Piilota tiedot</string>
<string name="exportPassword">Aseta salasana suojataksesi vientitiedostosi (valinnainen)</string>
<string name="exportPasswordHint">Syötä salasana</string>
<string name="showMoreInfo">Näytä tiedot</string>
<string name="version_history">Versiohistoria</string>
<string name="sort">Lajittele</string>
<string name="translate_platform">Weblatessa</string>
<string name="selectColor">Valitse väri</string>
<string name="rate_this_app">Arvostele tämä sovellus</string>
<string name="noGiftCardsGroup">Lisää kortteja ja lisää ne ryhmään täällä.</string>
<string name="barcodeImageDescriptionWithType">Image <xliff:g>%s</xliff:g> viivakoodi</string>
<string name="settings_follow_system_orientation">Seuraa järjestelmää</string>
<string name="settings_portrait_orientation">Muotokuva</string>
<string name="settings_landscape_orientation">Maisema</string>
<string name="unarchived">Kortti on poistettu arkistosta</string>
<string name="noUnarchivedCardsMessage">Arkistoimattomia kortteja ei ole olemassa</string>
<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="archiveList">Arkisto</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>
</plurals>
<string name="duplicateCard">Duplikaatti</string>
</resources>

View File

@@ -10,8 +10,6 @@
<string name="edit">Modifier</string>
<string name="delete">Supprimer</string>
<string name="confirm">Confirmer</string>
<string name="lockScreen">Désactiver la rotation</string>
<string name="unlockScreen">Activer la rotation</string>
<string name="ok">OK</string>
<string name="copy_to_clipboard">Copier le numéro dans le presse-papier</string>
<string name="sendLabel">Envoyer…</string>
@@ -52,7 +50,6 @@
<string name="settings">Paramètres</string>
<string name="settings_category_title_ui">Interface utilisateur</string>
<string name="settings_display_barcode_max_brightness">Augmenter la luminosité du code-barres</string>
<string name="settings_lock_barcode_orientation">Verrouiller lorientation du code-barres</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>
@@ -96,7 +93,7 @@
\nAUCUNE DONNÉE NEST COLLECTÉE, ce que tout le monde peut confirmer puisque notre application est un logiciel libre.</string>
<string name="privacy_policy">Politique de confidentialité</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="chooseImportType">Importer les données depuis \?</string>
<string name="chooseImportType">Importer les données depuis</string>
<string name="parsingBalanceFailed"><xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%s</xliff:g> ne semble pas être un solde valide.</string>
<string name="points">Points</string>
<string name="currency">Monnaie</string>
@@ -109,7 +106,6 @@
<string name="editBarcode">Modifier le code-barres</string>
<string name="barcode">Code-barres</string>
<string name="card">Carte</string>
<string name="balancePoints"><xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%s</xliff:g> points</string>
<string name="balanceSentence">Solde : <xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Expiré : <xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%s</xliff:g></string>
<string name="expiryStateSentence">Expire : <xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%s</xliff:g></string>
@@ -226,4 +222,27 @@
<string name="set_scale">Définir une échelle</string>
<string name="showMoreInfo">Afficher les infos</string>
<string name="hideMoreInfo">Masquer les infos</string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> point</item>
<item quantity="other"><xliff:g>%s</xliff:g> points</item>
</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_follow_system_orientation">Suivre le système</string>
<string name="settings_portrait_orientation">Portrait</string>
<string name="settings_landscape_orientation">Paysage</string>
<string name="settings_lock_on_opening_orientation">Garder l\'orientation utilisée pour ouvrir la carte</string>
<string name="duplicateCard">Dupliquer</string>
<string name="archive">Archiver</string>
<string name="unarchive">Désarchiver</string>
<string name="archived">Carte archivée</string>
<string name="unarchived">Carte désarchivée</string>
<string name="archiveList">Archives</string>
<string name="noUnarchivedCardsMessage">Il n\'existe aucune carte non archivée</string>
<string name="failedLaunchingPhotoPicker">Impossible de trouver une application de galerie prise en charge</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> carte (<xliff:g id="archivedCount">%2$d</xliff:g> archivée)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> cartes (<xliff:g id="archivedCount">%2$d</xliff:g> archivées)</item>
</plurals>
</resources>

View File

@@ -7,7 +7,6 @@
<string name="ok">אישור</string>
<string name="action_search">חיפוש</string>
<string name="noGiftCards">לחץ על לחצן ה + להוספת כרטיס, או ייבא מספר כרטיסים באמצעות התפריט ⋮.</string>
<string name="lockScreen">סיבוב</string>
<string name="share">שיתוף</string>
<string name="copy_to_clipboard">העתקת מזהה ללוח</string>
<string name="addCardTitle">הוספת כרטיס</string>

View File

@@ -6,8 +6,6 @@
<string name="edit">Uredi</string>
<string name="delete">Ukloni</string>
<string name="confirm">Potvrdi</string>
<string name="lockScreen">Rotacija bloka</string>
<string name="unlockScreen">Otključaj Rotaciju</string>
<string name="deleteTitle">Ukloni kartu</string>
<string name="deleteConfirmation">Izbrisati ovu karticu zauvijek\?</string>
<string name="copy_to_clipboard">Kopiraj ID u međuspremnik</string>
@@ -66,7 +64,6 @@
<string name="thumbnailDescription">Sličica za karticu</string>
<string name="starImage">Omiljena zvijezda</string>
<string name="settings_category_title_ui">Korisničko sučelje</string>
<string name="settings_lock_barcode_orientation">Zaključavanje orijentacije crtičnog koda</string>
<string name="exportSuccessful">Izvezeni podaci o karti</string>
<string name="settings_keep_screen_on">Držite zaslon uključen</string>
<string name="settings_disable_lockscreen_while_viewing_card">Spriječiti zaključavanje zaslona</string>

View File

@@ -0,0 +1,229 @@
<?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">Nyomja meg a + jelet a kártya hozzáadásához, vagy importáljon a ⋮ menüvel.</string>
<string name="action_add">Hozzáadás</string>
<string name="action_search">Keresés</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> kiválasztva</item>
<item quantity="other"><xliff:g>%d</xliff:g> kiválasztva</item>
</plurals>
<string name="noCardsMessage">Először adjon hozzá egy kártyát</string>
<string name="noGiftCardsGroup">Hozzon létre kártyákat, és rendelje hozzá a megfelelő csoporthoz.</string>
<string name="noMatchingGiftCards">Nincs eredmény. Próbálja módosítani a keresést.</string>
<string name="storeName">Név</string>
<string name="note">Feljegyzés</string>
<string name="cardId">Kártya azonosító</string>
<string name="barcodeType">Vonalkód típus</string>
<string name="barcodeNoBarcode">Nincs vonalkód</string>
<string name="noBarcode">Nincs vonalkód</string>
<string name="star">Kedvencekhez adás</string>
<string name="unstar">Kivétel a kedvencek közül</string>
<string name="cancel">Mégse</string>
<string name="save">Mentés</string>
<string name="edit">Szerkesztés</string>
<string name="delete">Törlés</string>
<string name="confirm">Alkalmaz</string>
<plurals name="deleteCardsTitle">
<item quantity="one"><xliff:g>%d</xliff:g> törlése</item>
<item quantity="other"><xliff:g>%d</xliff:g> törlése</item>
</plurals>
<string name="deleteConfirmation">Véglegesen törli a kártyát\?</string>
<string name="ok">Rendben</string>
<string name="copy_to_clipboard">Azonosító másolása a vágólapra</string>
<string name="share">Megosztás</string>
<string name="sendLabel">Küldés…</string>
<string name="editCardTitle">Kártya szerkesztése</string>
<string name="addCardTitle">Kártya hozzáadása</string>
<string name="scanCardBarcode">Vonalkód szkennelése</string>
<string name="cardShortcut">Kártya parancsikon</string>
<string name="noStoreError">Nincs név megadva</string>
<string name="failedParsingImportUriError">Nem elemezhető az importált URI</string>
<string name="importExport">Import/Export</string>
<string name="exportName">Export</string>
<string name="importExportHelp">Az adataid mentése lehetővé teszi, hogy egy másik eszközre feltöltsd.</string>
<string name="importSuccessfulTitle">Importálva</string>
<string name="importFailedTitle">Importálás meghiúsult</string>
<string name="importFailed">Importálás nem hajtható végre</string>
<string name="exportSuccessfulTitle">Exportálva</string>
<string name="exportFailedTitle">Exportálás meghiúsult</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Véglegesen törli a <xliff:g>%d</xliff:g> kártyát\?</item>
<item quantity="other">Véglegesen törli a <xliff:g>%d</xliff:g> kártyákat\?</item>
</plurals>
<string name="deleteTitle">Kártya törlése</string>
<string name="card_ids_copied">Azonosító(k) másolása</string>
<string name="barcodeImageDescriptionWithType"><xliff:g>%s</xliff:g> vonalkód képe</string>
<string name="noCardIdError">Nincs azonosító megadva</string>
<string name="noCardExistsError">Kártya nem található</string>
<string name="importStocardMessage">Válassza ki a <i>***-sync.zip</i> Stocard exportot.
\nAdatinak exportját kérheti e-mailben a support@stocardapp.com címre írva.</string>
<string name="importVoucherVault">Importálás Voucher Vault-ból</string>
<string name="wrongValueForBarcodeType">Ez az érték meg megfelelő a vonalkód típushoz</string>
<string name="settings_green_theme">Zöld</string>
<string name="setBackImage">Hátlapi kép beállítása</string>
<string name="no">Nem</string>
<string name="passwordRequired">Kérem írja be a kódot</string>
<string name="settings_catima_theme">Catima</string>
<string name="exportPasswordHint">Kód beírása</string>
<string name="failedGeneratingShareURL">Nem lehetett megosztható címet generálni. Kérem jelentse ezt.</string>
<string name="settings_theme_color">Téma színe</string>
<string name="settings_grey_theme">Szürke</string>
<string name="sort">Rendez</string>
<string name="on_google_play">Google Play-en</string>
<string name="action_show_details">Részletek mutatása</string>
<string name="action_hide_details">Részletek elrejtése</string>
<string name="and_data_usage">és adat használat</string>
<string name="translate_platform">Weblate-en</string>
<string name="sort_by_name">Név</string>
<string name="sort_by_most_recently_used">Legutóbb használt</string>
<string name="sort_by_expiry">Lejárat</string>
<string name="rate_this_app">Értékelje az appot</string>
<string name="exportFailed">Exportálás sikertelen</string>
<string name="importing">Importálás…</string>
<string name="exporting">Exportálás…</string>
<string name="noExternalStoragePermissionError">Külső háttértárhoz való hozzáférés engedélyezése adat import vagy export miatt</string>
<string name="exportOptionExplanation">Az adatokat a kiválasztott helyre fogjuk menteni.</string>
<string name="importOptionFilesystemTitle">Importálás fájlrendszerből</string>
<string name="importOptionFilesystemButton">A fájlrendszerből</string>
<string name="importOptionApplicationTitle">Másik app használata</string>
<string name="importOptionApplicationExplanation">Használjon egy tetszőleges appot, vagy kedvenc fájl menedzserét a fájl megnyitásához.</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Szerzői Jog © 2019<xliff:g>%d</xliff:g> Sylvia van Os</string>
<string name="app_license">Copyleft-elt gáttalan szoftver, GPLv3+ licenszelve</string>
<string name="about_title_fmt"><xliff:g id="app_name">%s</xliff:g> névjegye</string>
<string name="debug_version_fmt">Verzió: <xliff:g id="version">%s</xliff:g></string>
<string name="app_revision_fmt">Revíziós információ: <xliff:g id="app_revision_url">%s</xliff:g></string>
<string name="app_resources">Gáttalan külsős források: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="selectBarcodeTitle">Vonalkód kiválasztása</string>
<string name="enterBarcodeInstructions">Írja be az azonosítót, majd válasszon egy vonalkódot, vagy a \"Nincs vonalkód\" opciót.</string>
<string name="copy_to_clipboard_toast">Azonosító vágólapra másolva</string>
<string name="starImage">Kedvencek csillag</string>
<string name="settings">Beállítások</string>
<string name="settings_category_title_ui">Felhasználói felület</string>
<string name="settings_theme">Téma</string>
<string name="settings_system_theme">Rendszer</string>
<string name="settings_light_theme">Világos</string>
<string name="settings_max_font_size_scale">Max. betű méret</string>
<string name="settings_display_barcode_max_brightness">Fényes vonalkód nézet</string>
<string name="settings_keep_screen_on">Képernyő bekapcsolva marad</string>
<string name="settings_disable_lockscreen_while_viewing_card">Képernyő zárólás megakadályozása</string>
<string name="intent_import_card_from_url_share_text">Meg akarok veled osztani egy kártyát</string>
<string name="importSuccessful">Adat importálva</string>
<string name="exportSuccessful">Adat exportálva</string>
<string name="enter_group_name">Adja meg a csoport nevét</string>
<string name="groups">Csoportok</string>
<string name="group_edit">Csoport szerkesztése</string>
<string name="group_name_is_empty">Csoport név nem lehet üres</string>
<string name="failedOpeningFileManager">Telepítsen egy fájl menedzsert.</string>
<string name="moveUp">Felfelé mozgatás</string>
<string name="moveDown">Lefelé mozgatás</string>
<string name="leaveWithoutSaveTitle">Kilépés</string>
<string name="leaveWithoutSaveConfirmation">Kilépés mentés nélkül\?</string>
<string name="addManually">Azonosító manuális beírása</string>
<string name="addFromImage">Kép kiválasztása a galériából</string>
<string name="editGroup">Csoportok szerkesztése: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Érvényes: <xliff:g>%s</xliff:g></string>
<string name="balanceSentence">Egyenleg: <xliff:g>%s</xliff:g></string>
<string name="card">Kártya</string>
<string name="barcode">Vonalkód</string>
<string name="editBarcode">Vonalkód szerkesztése</string>
<string name="expiryDate">Lejárati dátum</string>
<string name="never">Soha</string>
<string name="chooseExpiryDate">Lejárati dátum kiválasztása</string>
<string name="moveBarcodeToTopOfScreen">Vonalkód feltolása a képernyő tetejére</string>
<string name="moveBarcodeToCenterOfScreen">Vonalkód középre igazítása</string>
<string name="noBarcodeFound">Nem található vonalkód</string>
<string name="errorReadingImage">Nem lehet olvasni a képet</string>
<string name="balance">Egyenleg</string>
<string name="currency">Valuta</string>
<string name="points">Pontok</string>
<string name="parsingBalanceFailed">A <xliff:g>%s</xliff:g> nem tűnik valós egyenlegnek.</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="privacy_policy">Adatvédelmi Szabályzat</string>
<string name="accept">Elfogad</string>
<string name="importCatima">Importálás Catimából</string>
<string name="importFidme">Importálás FidMe-ből</string>
<string name="importLoyaltyCardKeychain">Importálás a Loyalty Card Keychain-ből</string>
<string name="importLoyaltyCardKeychainMessage">Válassza ki a Loyalty Card Keychain-ból importálni kívánt <i>LoyaltyCardKeychain.csv</i> export fájlt.
\nLétrehozhatja az Import/Export menüből ha a Loyalty Card Keychain-ben rányom az Exportra.</string>
<string name="importStocard">Importálás Stocard-ból</string>
<string name="importVoucherVaultMessage">Válassza ki a <i>vouchervault.json</i> Voucher Vault exportját.
\nLétrehozhatja az Export-ra nyomva a Voucher Vault-ban.</string>
<string name="barcodeId">Vonalkód érték</string>
<string name="sameAsCardId">Ugyanaz, mint az azonosító</string>
<string name="setBarcodeId">Vonalkód érték beállítása</string>
<string name="unsupportedBarcodeType">Ez a vonalkód típus még nem megjeleníthető. Feltehetően támogatva lesz egy későbbi verzióban.</string>
<string name="copy_to_clipboard_multiple_toast">Azonosítók a vágólapra másolva</string>
<string name="intent_import_card_from_url_share_multiple_text">Meg akarok veled osztani pár kártyát</string>
<string name="frontImageDescription">Előlapi kép</string>
<string name="backImageDescription">Hátlapi kép</string>
<string name="photos">Fotók</string>
<string name="setFrontImage">Előlapi kép beállítása</string>
<string name="removeImage">Kép eltávolítása</string>
<string name="takePhoto">Fénykép készítése</string>
<string name="updateBarcodeQuestionTitle">Vonalkód érték frissítése\?</string>
<string name="updateBarcodeQuestionText">Megváltoztatta az azonosító. Meg akarja ennek megfelelően változtatni a vonalkód értéket is\?</string>
<string name="yes">Igen</string>
<string name="exportPassword">Írjon be egy jelszót az export védelme érdekében (opcionális)</string>
<string name="turn_flashlight_on">Zseblámpa bekapcsolása</string>
<string name="turn_flashlight_off">Zseblámpa kikapcsolása</string>
<string name="settings_locale">Nyelv</string>
<string name="settings_system_locale">Rendszer</string>
<string name="selectColor">Szín kiválasztása</string>
<string name="setIcon">Ikon beállítása</string>
<string name="settings_pink_theme">Rózsaszín</string>
<string name="settings_magenta_theme">Magenta</string>
<string name="settings_violet_theme">Ibolyaszínű</string>
<string name="settings_blue_theme">Kék</string>
<string name="settings_sky_blue_theme">Égszínkék</string>
<string name="settings_brown_theme">Barna</string>
<string name="app_contributors">Lehetővé tette: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="showMoreInfo">Infó mutatása</string>
<string name="hideMoreInfo">Infó elrejtése</string>
<string name="swipeToSwitchImages">Húzza oldalra vagy tartsa nyomva a kép megváltoztatásáért</string>
<string name="sort_by_balance">Egyenleg</string>
<string name="reverse">...fordított sorrendben</string>
<string name="sort_by">Rendezés mint</string>
<string name="version_history">Verzió történet</string>
<string name="credits">Köszönet</string>
<string name="help_translate_this_app">Segítsen lefordítani az appot</string>
<string name="license">Licensz</string>
<string name="source_repository">Forrás repó</string>
<string name="on_github">GitBub-on</string>
<string name="report_error">Hiba Jelentése</string>
<string name="shortcutSelectCard">Válasszon egy kártyát</string>
<string name="options">Beállítások</string>
<string name="starred">Csillagozva</string>
<string name="set_scale">Méret választása</string>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> kártya</item>
<item quantity="other"><xliff:g>%d</xliff:g> kártyák</item>
</plurals>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> pont</item>
<item quantity="other"><xliff:g>%s</xliff:g> pont</item>
</plurals>
<string name="chooseImportType">Adat importálása innen</string>
<string name="thumbnailDescription">Előkép</string>
<string name="importOptionFilesystemExplanation">Válassza ki a kívánt fájlt a fájlrendszerből.</string>
<string name="importOptionApplicationButton">Másik app használata</string>
<string name="about">Névjegy</string>
<string name="app_copyright_old">Készült a Loyalty Card Keychain alapján
\nszerzői jog © 20162020 Branden Archer</string>
<string name="app_libraries">Gáttalan külsős mappák: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="settings_dark_theme">Sötét</string>
<string name="deleteConfirmationGroup">Csoport törlése\?</string>
<string name="noGroups">Nyomja meg a + gombot a csoportok kategorizálásához.</string>
<string name="group_name_already_in_use">Csoport név már létezik</string>
<string name="all">Mind</string>
<string name="noGroupCards">Ez a csoport üres</string>
<string name="group_updated">Csoport frissítve</string>
<string name="expiryStateSentenceExpired">Lejárt: <xliff:g>%s</xliff:g></string>
<string name="groupsList">Csoportok: <xliff:g>%s</xliff:g></string>
<string name="importCatimaMessage">Válassza ki a <i>catima.zip</i>-jét az importáláshoz.
\nLétrehozhatja az Import/Export menüből az Exportálást megnyomva egy másik Catima appban.</string>
<string name="privacy_policy_popup_text">Adatvédelmi szabály értesítő (némely app bolt kéri):
\n
\nSEMMILYEN ADATGYŰJTÉS NINCS, amit bárki ellenőrizhet, lévén hogy az app gáttalan szoftver.</string>
<string name="importFidmeMessage">Válassza ki a <i>fidme-export-request-xxxxxx.zip</i> nevű FidMe exportot, majd importálja be és válassza a manuális vonalkód opciót utána.
\nEzt a FidMe-ben megtalálja a profiljában az Adat Védelem résznél ha rányom az Adataim Kivonata linkre.</string>
</resources>

View File

@@ -1,6 +1,6 @@
<?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="app_revision_url">https://github.com/TheLastProject/Catima/releases</string>
<string name="app_revision_url">https://github.com/CatimaLoyalty/Android/releases</string>
<string name="storeName">Nama</string>
<string name="note">Keterangan</string>
<string name="delete">Hapus</string>
@@ -122,7 +122,6 @@
<string name="settings_dark_theme">Gelap</string>
<string name="settings_max_font_size_scale">Ukuran maksimal huruf</string>
<string name="settings_display_barcode_max_brightness">Terangkan tampilan barcode</string>
<string name="settings_lock_barcode_orientation">Kunci orientasi barcode</string>
<string name="settings_keep_screen_on">Biarkan layar menyala</string>
<string name="settings_disable_lockscreen_while_viewing_card">Mencegah layar menyala</string>
<string name="intent_import_card_from_url_share_text">Saya ingin berbagi kartu dengan anda</string>
@@ -143,7 +142,6 @@
<string name="expiryStateSentence">Masa ber: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Kadaluwarsa: <xliff:g>%s</xliff:g></string>
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
<string name="balancePoints"><xliff:g>%s</xliff:g> poin</string>
<string name="editBarcode">Ubah barcode</string>
<string name="expiryDate">Tanggal masa berlaku</string>
<string name="never">Tidak pernah</string>
@@ -188,8 +186,6 @@
<string name="on_github">di GitHub</string>
<string name="and_data_usage">dan penggunaan data</string>
<string name="on_google_play">di Google Play</string>
<string name="lockScreen">Blokir rotasi</string>
<string name="unlockScreen">Buka blokir rotasi</string>
<string name="cardShortcut">Pintasan kartu</string>
<string name="card_ids_copied">ID kartu yang tersalin</string>
<string name="barcodeImageDescriptionWithType">Gambar dari jenis barcode <xliff:g>%s</xliff:g></string>

View File

@@ -4,7 +4,6 @@
<string name="noBarcode">Nei strikamerkið</string>
<string name="action_search">Leita að</string>
<string name="delete">Eyða</string>
<string name="unlockScreen">Opna Snúningur</string>
<string name="noGiftCards">Smelltu á + plús takka til að bæta kort, eða að flytja inn sumir frá ⋮ matseðill fyrst.</string>
<string name="note">Athugið</string>
<string name="barcodeType">Strikamerkið tegund</string>
@@ -17,7 +16,6 @@
<string name="save">Sparaðu</string>
<string name="edit">Breyta</string>
<string name="confirm">Staðfesta</string>
<string name="lockScreen">Blokk Snúningur</string>
<string name="ok">OK</string>
<string name="sendLabel">Sendu…</string>
<string name="deleteConfirmation">Eyða þetta kort til frambúðar\?</string>
@@ -49,7 +47,6 @@
<string name="about">Um</string>
<string name="settings">Stillingar</string>
<string name="settings_max_font_size_scale">Max. letrið</string>
<string name="settings_lock_barcode_orientation">Læsa strikamerkið stefnumörkun</string>
<string name="settings_keep_screen_on">Halda á skjánum</string>
<string name="settings_disable_lockscreen_while_viewing_card">Að koma í veg fyrir að læsa skjánum</string>
<string name="editBarcode">Breyta strikamerkið</string>

View File

@@ -13,8 +13,6 @@
<string name="edit">Modifica</string>
<string name="delete">Elimina</string>
<string name="confirm">Conferma</string>
<string name="lockScreen">Blocca rotazione</string>
<string name="unlockScreen">Sblocca rotazione</string>
<string name="ok">Ok</string>
<string name="copy_to_clipboard">Copia codice negli appunti</string>
<string name="share">Condividi</string>
@@ -62,7 +60,6 @@
<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_lock_barcode_orientation">Blocca orientamento del codice a barre</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>
@@ -102,7 +99,6 @@
<string name="editBarcode">Modifica il codice a barre</string>
<string name="barcode">Codice a barre</string>
<string name="card">Carta</string>
<string name="balancePoints"><xliff:g>%s</xliff:g> punti</string>
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Scaduta: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Scadenza: <xliff:g>%s</xliff:g></string>
@@ -226,4 +222,27 @@
<string name="set_scale">Imposta la scala</string>
<string name="showMoreInfo">Mostra info</string>
<string name="hideMoreInfo">Nascondi info</string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> punto</item>
<item quantity="other"><xliff:g>%s</xliff:g> punti</item>
</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_follow_system_orientation">Segui il sistema</string>
<string name="duplicateCard">Duplica</string>
<string name="archive">Archivia</string>
<string name="unarchive">Disarchivia</string>
<string name="archiveList">Archivio</string>
<string name="noUnarchivedCardsMessage">Non esistono schede non archiviate</string>
<string name="unarchived">Carta non archiviata</string>
<string name="archived">Carta archiviata</string>
<string name="settings_portrait_orientation">Ritratto</string>
<string name="settings_landscape_orientation">Paesaggio</string>
<string name="settings_lock_on_opening_orientation">Blocco da utilizzare per l\'apertura della carta</string>
<string name="failedLaunchingPhotoPicker">Impossibile trovare un\'app galleria supportata</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> scheda (<xliff:g id="archivedCount">%2$d</xliff:g> archiviata)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> schede (<xliff:g id="archivedCount">%2$d</xliff:g> archiviate)</item>
</plurals>
</resources>

View File

@@ -33,7 +33,6 @@
<string name="editBarcode">バーコードの編集</string>
<string name="barcode">バーコード</string>
<string name="card">カード</string>
<string name="balancePoints"><xliff:g>%s</xliff:g> ポイント</string>
<string name="balanceSentence">残高: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">期限切れ: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">期限: <xliff:g>%s</xliff:g></string>
@@ -58,7 +57,6 @@
<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_lock_barcode_orientation">バーコード表示画面を自動回転しない</string>
<string name="settings_display_barcode_max_brightness">バーコード表示画面を明るくする</string>
<string name="settings_max_font_size_scale">最大のフォントサイズ</string>
<string name="settings_dark_theme">ダーク</string>
@@ -119,8 +117,6 @@
<string name="share">共有</string>
<string name="copy_to_clipboard">カード番号をクリップボードにコピーする</string>
<string name="ok">確定</string>
<string name="unlockScreen">自動回転を無効にしない</string>
<string name="lockScreen">自動回転を無効にする</string>
<string name="confirm">確認</string>
<string name="delete">削除</string>
<string name="edit">編集</string>

View File

@@ -5,7 +5,6 @@
<string name="all">모두</string>
<string name="groups">그룹</string>
<string name="enter_group_name">그룹 이름 입력</string>
<string name="settings_lock_barcode_orientation">바코드 회전 잠금</string>
<string name="settings_dark_theme">어두움</string>
<string name="settings_light_theme">밝음</string>
<string name="debug_version_fmt">버전: <xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" id="version">%s</xliff:g></string>
@@ -31,8 +30,6 @@
<string name="share">공유</string>
<string name="copy_to_clipboard">ID를 클립보드에 복사</string>
<string name="ok">확인</string>
<string name="unlockScreen">회전 잠금 해제</string>
<string name="lockScreen">회전 잠금</string>
<string name="confirm">확인</string>
<string name="delete">삭제</string>
<string name="edit">편집</string>

View File

@@ -11,8 +11,6 @@
<string name="edit">Änneren</string>
<string name="delete">Läschen</string>
<string name="confirm">Bestätegen</string>
<string name="lockScreen">Blockrotation</string>
<string name="unlockScreen">Déblockéieren Rotatioun</string>
<string name="deleteConfirmation">Dës Kaart dauerhaft läschen\?</string>
<string name="ok">Okay</string>
<string name="share">Aktie</string>
@@ -73,7 +71,6 @@
<string name="copy_to_clipboard_multiple_toast">Kaarten-IDs an d \' Tëschentablag inspiréiere</string>
<string name="updateBarcodeQuestionText">Si hunn d \' Kaarten-ID geännert. Wëllt Dir och de Barcode aktualiséieren, fir deselwechte Wäert ze benotzen\?</string>
<string name="settings_dark_theme">Donkel</string>
<string name="settings_lock_barcode_orientation">Barcode-Ausriichtung spären</string>
<string name="settings_disable_lockscreen_while_viewing_card">Bildschierm spären verhënneren</string>
<string name="settings_light_theme">Liicht</string>
<string name="settings_max_font_size_scale">Max. Schrëftgréisst</string>

View File

@@ -34,8 +34,6 @@
<string name="card_ids_copied">Nukopijuotos kortelės ID</string>
<string name="noCardsMessage">Pirmiausia pridėkite kortelę</string>
<string name="sendLabel">Siųsti…</string>
<string name="unlockScreen">Atblokuoti pasukimą</string>
<string name="lockScreen">Blokuoti pasukimą</string>
<string name="unstar">Pašalinti iš mėgstamiausių</string>
<string name="star">Pridėti prie mėgstamiausių</string>
<string name="noBarcode">Nėra brūkšninio kodo</string>
@@ -104,7 +102,6 @@
<string name="editBarcode">Redaguoti brūkšninį kodą</string>
<string name="barcode">Brūkšninis kodas</string>
<string name="card">Kortelė</string>
<string name="balancePoints"><xliff:g>%s</xliff:g> taškai</string>
<string name="balanceSentence">Balansas: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Galiojimas baigėsi: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Nustoja galioti: <xliff:g>%s</xliff:g></string>
@@ -131,7 +128,6 @@
<string name="intent_import_card_from_url_share_text">Noriu pasidalyti su jumis kortele</string>
<string name="settings_disable_lockscreen_while_viewing_card">Neleisti užrakinti ekrano</string>
<string name="settings_keep_screen_on">Laikyti ekraną įjungtą</string>
<string name="settings_lock_barcode_orientation">Užrakinti brūkšninio kodo orientaciją</string>
<string name="settings_max_font_size_scale">Didžiausias šrifto dydis</string>
<string name="settings_dark_theme">Tamsi</string>
<string name="settings_light_theme">Šviesi</string>

View File

@@ -27,8 +27,6 @@
<string name="editCardTitle">Rediģēt Karti</string>
<string name="share">Daļa</string>
<string name="confirm">Apstiprināt</string>
<string name="lockScreen">Bloķēt Rotāciju</string>
<string name="unlockScreen">Atbloķēt Rotāciju</string>
<string name="deleteTitle">Dzēst karti</string>
<string name="deleteConfirmation">Dzēst šo karti pastāvīgi\?</string>
<string name="ok">LABI</string>
@@ -72,7 +70,6 @@
<string name="settings_dark_theme">Tumšs</string>
<string name="settings_max_font_size_scale">Max. fonts</string>
<string name="settings_display_barcode_max_brightness">Izgaismojiet svītrkoda skatu</string>
<string name="settings_lock_barcode_orientation">Lock svītrkoda orientācija</string>
<string name="settings_keep_screen_on">Saglabāt ekrānu</string>
<string name="settings_disable_lockscreen_while_viewing_card">Novērst bloķēšanas ekrānu</string>
<string name="intent_import_card_from_url_share_text">Es vēlos dalīties ar jums karti</string>

View File

@@ -11,8 +11,6 @@
<string name="edit">Rediger</string>
<string name="delete">Slett</string>
<string name="confirm">Bekreft</string>
<string name="lockScreen">Skru av rotering</string>
<string name="unlockScreen">Skru på rotering</string>
<string name="ok">OK</string>
<string name="copy_to_clipboard">Kopier ID til utklippstavle</string>
<string name="sendLabel">Send…</string>
@@ -55,7 +53,6 @@
<string name="settings">Innstillinger</string>
<string name="settings_category_title_ui">Brukergrensesnitt</string>
<string name="settings_display_barcode_max_brightness">Lysere strekkodevisning</string>
<string name="settings_lock_barcode_orientation">Lås strekkodesideretning</string>
<string name="exportSuccessful">Data eksportert</string>
<string name="importSuccessful">Data importert</string>
<string name="intent_import_card_from_url_share_text">Jeg ønsker å dele et kort med deg</string>
@@ -73,7 +70,7 @@
<string name="starImage">Favorittstjerne</string>
<string name="unstar">Fjern fra favoritter</string>
<string name="star">Legg til i favoritter</string>
<string name="noGroups">Klikk på «+»- (pluss)-tegnet for å legge til grupper for kategorisering først.</string>
<string name="noGroups">Klikk på «+»- (pluss)-tegnet for å legge til grupper for kategorisering.</string>
<string name="deleteConfirmationGroup">Slett gruppe?</string>
<string name="all">Alle</string>
<string name="groups">Grupper</string>
@@ -104,9 +101,8 @@
<string name="points">Poeng</string>
<string name="currency">Valuta</string>
<string name="balance">Saldo</string>
<string name="balancePoints"><xliff:g>%s</xliff:g> poeng</string>
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
<string name="chooseImportType">Importer data fra?</string>
<string name="chooseImportType">Importer data fra</string>
<string name="app_loyalty_card_keychain">Kundekortknippe</string>
<string name="settings_disable_lockscreen_while_viewing_card">Forhindre skjermlås</string>
<string name="settings_keep_screen_on">Behold skjerm påslått</string>
@@ -169,8 +165,8 @@
<string name="turn_flashlight_off">Skru av lommelykten</string>
<string name="deleteTitle">Slett kort</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Slett <xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%s</xliff:g> kort</item>
<item quantity="other">Slett <xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%s</xliff:g> kort</item>
<item quantity="one">Slett <xliff:g>%d</xliff:g> kort</item>
<item quantity="other">Slett <xliff:g>%d</xliff:g> kort</item>
</plurals>
<string name="settings_system_locale">System</string>
<string name="settings_locale">Språk</string>
@@ -188,7 +184,7 @@
<string name="noGroupCards">Denne gruppen er tom</string>
<string name="barcodeImageDescriptionWithType">Bilde av <xliff:g>%s</xliff:g>-strekkode</string>
<string name="swipeToSwitchImages">Dra eller hold lenge for å bygge bilder</string>
<string name="sort_by">Sorter etter</string>
<string name="sort_by">Sortering</string>
<string name="reverse">…i omvendt rekkefølge</string>
<string name="sort_by_balance">Saldo</string>
<string name="sort_by_expiry">Utløp</string>
@@ -224,6 +220,24 @@
<string name="options">Alternativer</string>
<string name="starred">Stjernemerket</string>
<string name="set_scale">Sett skalering</string>
<string name="showMoreInfo">Vis mer info</string>
<string name="hideMoreInfo">Skjul mer info</string>
<string name="showMoreInfo">Vis info</string>
<string name="hideMoreInfo">Skjul info</string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> poeng</item>
<item quantity="other"><xliff:g>%s</xliff:g> poeng</item>
</plurals>
<string name="settings_oled_dark">Svart bakgrunn for mørk drakt</string>
<string name="include_if_asking_support">Inkluder følgende info hvis du vil ha hjelp:</string>
<string name="settings_card_orientation">Strekkoderetning</string>
<string name="settings_landscape_orientation">Liggende</string>
<string name="settings_lock_on_opening_orientation">Lås til sideretning brukt ved åpning av kort</string>
<string name="duplicateCard">Dupliser</string>
<string name="archive">Arkiver</string>
<string name="unarchive">Opphev arkivering</string>
<string name="archived">Kort arkivert</string>
<string name="unarchived">Kort flyttet tilbake fra arkiv</string>
<string name="noUnarchivedCardsMessage">Ingen kort flyttet tilbake fra arkiv finnes</string>
<string name="archiveList">Arkiv</string>
<string name="settings_follow_system_orientation">Følg systemet</string>
<string name="settings_portrait_orientation">Stående</string>
</resources>

View File

@@ -30,4 +30,216 @@
<item name="windowActionModeOverlay">true</item>
</style>
<!-- note that this is not used directly, these are used to patch the active theme runtime with
theme.applyStyle
-->
<style name="DarkBackground">
<item name="android:colorBackground">#000000</item>
<item name="colorSurface">#000000</item>
</style>
<!-- color themes -->
<style name="pink">
<item name="colorPrimary">#FFB2C0</item>
<item name="colorOnPrimary">#670024</item>
<item name="colorPrimaryContainer">#900036</item>
<item name="colorOnPrimaryContainer">#FFD9DF</item>
<item name="colorSecondary">#E5BDC2</item>
<item name="colorOnSecondary">#43292D</item>
<item name="colorSecondaryContainer">#5C3F43</item>
<item name="colorOnSecondaryContainer">#FFD9DE</item>
<item name="colorTertiary">#EBBF90</item>
<item name="colorOnTertiary">#452B08</item>
<item name="colorTertiaryContainer">#5F411C</item>
<item name="colorOnTertiaryContainer">#FFDDB8</item>
<item name="colorError">#FFB4A9</item>
<item name="colorErrorContainer">#930006</item>
<item name="colorOnError">#680003</item>
<item name="colorOnErrorContainer">#FFDAD4</item>
<item name="android:colorBackground">#201A1B</item>
<item name="colorOnBackground">#ECE0E0</item>
<item name="colorSurface">#201A1B</item>
<item name="colorOnSurface">#ECE0E0</item>
<item name="colorSurfaceVariant">#524345</item>
<item name="colorOnSurfaceVariant">#D6C1C3</item>
<item name="colorOutline">#9F8C8E</item>
<item name="colorOnSurfaceInverse">#201A1B</item>
<item name="colorSurfaceInverse">#ECE0E0</item>
<item name="colorPrimaryInverse">#BC0049</item>
</style>
<style name="magenta">
<item name="colorPrimary">#FBAAFF</item>
<item name="colorOnPrimary">#570068</item>
<item name="colorPrimaryContainer">#7B0091</item>
<item name="colorOnPrimaryContainer">#FFD5FF</item>
<item name="colorSecondary">#D7BFD5</item>
<item name="colorOnSecondary">#3B2B3B</item>
<item name="colorSecondaryContainer">#534153</item>
<item name="colorOnSecondaryContainer">#F5DBF2</item>
<item name="colorTertiary">#F6B8AE</item>
<item name="colorOnTertiary">#4C251F</item>
<item name="colorTertiaryContainer">#663B34</item>
<item name="colorOnTertiaryContainer">#FFDAD2</item>
<item name="colorError">#FFB4A9</item>
<item name="colorErrorContainer">#930006</item>
<item name="colorOnError">#680003</item>
<item name="colorOnErrorContainer">#FFDAD4</item>
<item name="android:colorBackground">#1E1A1D</item>
<item name="colorOnBackground">#E9E0E5</item>
<item name="colorSurface">#1E1A1D</item>
<item name="colorOnSurface">#E9E0E5</item>
<item name="colorSurfaceVariant">#4D444C</item>
<item name="colorOnSurfaceVariant">#D0C3CC</item>
<item name="colorOutline">#998E96</item>
<item name="colorOnSurfaceInverse">#1E1A1D</item>
<item name="colorSurfaceInverse">#E9E0E5</item>
<item name="colorPrimaryInverse">#9A25AE</item>
</style>
<style name="violet">
<item name="colorPrimary">#D4BAFF</item>
<item name="colorOnPrimary">#3E008E</item>
<item name="colorPrimaryContainer">#5727A7</item>
<item name="colorOnPrimaryContainer">#ECDCFF</item>
<item name="colorSecondary">#CDC2DB</item>
<item name="colorOnSecondary">#342D41</item>
<item name="colorSecondaryContainer">#4B4358</item>
<item name="colorOnSecondaryContainer">#E9DEF7</item>
<item name="colorTertiary">#F0B8C5</item>
<item name="colorOnTertiary">#4A2530</item>
<item name="colorTertiaryContainer">#643A46</item>
<item name="colorOnTertiaryContainer">#FFD9E2</item>
<item name="colorError">#FFB4A9</item>
<item name="colorErrorContainer">#930006</item>
<item name="colorOnError">#680003</item>
<item name="colorOnErrorContainer">#FFDAD4</item>
<item name="android:colorBackground">#1D1B1F</item>
<item name="colorOnBackground">#E6E1E5</item>
<item name="colorSurface">#1D1B1F</item>
<item name="colorOnSurface">#E6E1E5</item>
<item name="colorSurfaceVariant">#49454E</item>
<item name="colorOnSurfaceVariant">#CBC4CF</item>
<item name="colorOutline">#948E99</item>
<item name="colorOnSurfaceInverse">#1D1B1F</item>
<item name="colorSurfaceInverse">#E6E1E5</item>
<item name="colorPrimaryInverse">#6F43BF</item>
</style>
<style name="blue">
<item name="colorPrimary">#B9C3FF</item>
<item name="colorOnPrimary">#08218A</item>
<item name="colorPrimaryContainer">#293CA0</item>
<item name="colorOnPrimaryContainer">#DDE0FF</item>
<item name="colorSecondary">#C4C5DD</item>
<item name="colorOnSecondary">#2D2F42</item>
<item name="colorSecondaryContainer">#43465A</item>
<item name="colorOnSecondaryContainer">#E0E1FA</item>
<item name="colorTertiary">#E5BAD7</item>
<item name="colorOnTertiary">#45263E</item>
<item name="colorTertiaryContainer">#5D3C55</item>
<item name="colorOnTertiaryContainer">#FFD7F3</item>
<item name="colorError">#FFB4A9</item>
<item name="colorErrorContainer">#930006</item>
<item name="colorOnError">#680003</item>
<item name="colorOnErrorContainer">#FFDAD4</item>
<item name="android:colorBackground">#1B1B1F</item>
<item name="colorOnBackground">#E4E1E6</item>
<item name="colorSurface">#1B1B1F</item>
<item name="colorOnSurface">#E4E1E6</item>
<item name="colorSurfaceVariant">#46464F</item>
<item name="colorOnSurfaceVariant">#C6C5D0</item>
<item name="colorOutline">#90909A</item>
<item name="colorOnSurfaceInverse">#1B1B1F</item>
<item name="colorSurfaceInverse">#E4E1E6</item>
<item name="colorPrimaryInverse">#4355B9</item>
</style>
<style name="skyblue">
<item name="colorPrimary">#8BCEFF</item>
<item name="colorOnPrimary">#003450</item>
<item name="colorPrimaryContainer">#004B71</item>
<item name="colorOnPrimaryContainer">#C8E6FF</item>
<item name="colorSecondary">#B7C8D8</item>
<item name="colorOnSecondary">#22323F</item>
<item name="colorSecondaryContainer">#384956</item>
<item name="colorOnSecondaryContainer">#D3E4F5</item>
<item name="colorTertiary">#CFBFE8</item>
<item name="colorOnTertiary">#362B4B</item>
<item name="colorTertiaryContainer">#4D4162</item>
<item name="colorOnTertiaryContainer">#ECDCFF</item>
<item name="colorError">#FFB4A9</item>
<item name="colorErrorContainer">#930006</item>
<item name="colorOnError">#680003</item>
<item name="colorOnErrorContainer">#FFDAD4</item>
<item name="android:colorBackground">#1A1C1E</item>
<item name="colorOnBackground">#E2E2E5</item>
<item name="colorSurface">#1A1C1E</item>
<item name="colorOnSurface">#E2E2E5</item>
<item name="colorSurfaceVariant">#41474D</item>
<item name="colorOnSurfaceVariant">#C1C7CE</item>
<item name="colorOutline">#8B9198</item>
<item name="colorOnSurfaceInverse">#1A1C1E</item>
<item name="colorSurfaceInverse">#E2E2E5</item>
<item name="colorPrimaryInverse">#006494</item>
</style>
<style name="green">
<item name="colorPrimary">#78DC77</item>
<item name="colorOnPrimary">#003907</item>
<item name="colorPrimaryContainer">#00530F</item>
<item name="colorOnPrimaryContainer">#93F990</item>
<item name="colorSecondary">#B9CCB3</item>
<item name="colorOnSecondary">#253423</item>
<item name="colorSecondaryContainer">#3B4B38</item>
<item name="colorOnSecondaryContainer">#D5E8CE</item>
<item name="colorTertiary">#A1CFD5</item>
<item name="colorOnTertiary">#00363B</item>
<item name="colorTertiaryContainer">#1E4D52</item>
<item name="colorOnTertiaryContainer">#BCEBF0</item>
<item name="colorError">#FFB4A9</item>
<item name="colorErrorContainer">#930006</item>
<item name="colorOnError">#680003</item>
<item name="colorOnErrorContainer">#FFDAD4</item>
<item name="android:colorBackground">#1A1C19</item>
<item name="colorOnBackground">#E2E3DD</item>
<item name="colorSurface">#1A1C19</item>
<item name="colorOnSurface">#E2E3DD</item>
<item name="colorSurfaceVariant">#424840</item>
<item name="colorOnSurfaceVariant">#C2C8BD</item>
<item name="colorOutline">#8C9288</item>
<item name="colorOnSurfaceInverse">#1A1C19</item>
<item name="colorSurfaceInverse">#E2E3DD</item>
<item name="colorPrimaryInverse">#006E17</item>
</style>
<style name="brown">
<item name="colorPrimary">#FFB598</item>
<item name="colorOnPrimary">#5C1A00</item>
<item name="colorPrimaryContainer">#7B2E0D</item>
<item name="colorOnPrimaryContainer">#FFDBCD</item>
<item name="colorSecondary">#E7BEB0</item>
<item name="colorOnSecondary">#442A20</item>
<item name="colorSecondaryContainer">#5D4035</item>
<item name="colorOnSecondaryContainer">#FFDBCD</item>
<item name="colorTertiary">#D5C78E</item>
<item name="colorOnTertiary">#383005</item>
<item name="colorTertiaryContainer">#50461A</item>
<item name="colorOnTertiaryContainer">#F1E2A7</item>
<item name="colorError">#FFB4A9</item>
<item name="colorErrorContainer">#930006</item>
<item name="colorOnError">#680003</item>
<item name="colorOnErrorContainer">#FFDAD4</item>
<item name="android:colorBackground">#201A18</item>
<item name="colorOnBackground">#EDE0DC</item>
<item name="colorSurface">#201A18</item>
<item name="colorOnSurface">#EDE0DC</item>
<item name="colorSurfaceVariant">#52433E</item>
<item name="colorOnSurfaceVariant">#D8C2BB</item>
<item name="colorOutline">#A08C86</item>
<item name="colorOnSurfaceInverse">#201A18</item>
<item name="colorSurfaceInverse">#EDE0DC</item>
<item name="colorPrimaryInverse">#9A4523</item>
</style>
</resources>

View File

@@ -14,8 +14,6 @@
<string name="edit">Bewerken</string>
<string name="delete">Verwijderen</string>
<string name="confirm">Bevestigen</string>
<string name="lockScreen">Draaien niet toestaan</string>
<string name="unlockScreen">Draaien toestaan</string>
<string name="ok">Oké</string>
<string name="copy_to_clipboard">Kaartnummer kopiëren naar klembord</string>
<string name="share">Delen</string>
@@ -64,7 +62,6 @@
<string name="settings_light_theme">Licht</string>
<string name="settings_dark_theme">Donker</string>
<string name="settings_display_barcode_max_brightness">Scherm helderder maken bij tonen van barcode</string>
<string name="settings_lock_barcode_orientation">Barcode-oriëntatie vergrendelen</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>
@@ -104,9 +101,8 @@
<string name="points">Aantal punten</string>
<string name="currency">Valuta</string>
<string name="balance">Saldo</string>
<string name="balancePoints"><xliff:g>%s</xliff:g> punten</string>
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
<string name="chooseImportType">Gegevens importeren uit…\?</string>
<string name="chooseImportType">Gegevens importeren uit</string>
<string name="app_loyalty_card_keychain">Klantenkaartkluis</string>
<string name="settings_disable_lockscreen_while_viewing_card">Schermvergrendeling uitschakelen</string>
<string name="settings_keep_screen_on">Scherm niet uitschakelen</string>
@@ -226,4 +222,27 @@
<string name="starred">Favoriet</string>
<string name="hideMoreInfo">Informatie verbergen</string>
<string name="set_scale">Schaal instellen</string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> punt</item>
<item quantity="other"><xliff:g>%s</xliff:g> punten</item>
</plurals>
<string name="settings_oled_dark">Zwarte achtergrond gebruiken bij donker thema</string>
<string name="include_if_asking_support">Als je ondersteuning wilt, voorzie je verzoek dan van de volgende informatie:</string>
<string name="settings_card_orientation">Barcode-oriëntatie</string>
<string name="settings_follow_system_orientation">Systeeminstellingen volgen</string>
<string name="settings_portrait_orientation">Verticaal</string>
<string name="settings_lock_on_opening_orientation">Oriëntatie vergrendelen na openen van kaart</string>
<string name="duplicateCard">Klonen</string>
<string name="archive">Archiveren</string>
<string name="unarchive">Dearchiveren</string>
<string name="archived">De kaart is gearchiveerd</string>
<string name="unarchived">De kaart is gedearchiveerd</string>
<string name="archiveList">Archief</string>
<string name="settings_landscape_orientation">Horizontaal</string>
<string name="noUnarchivedCardsMessage">Er zijn geen gedearchiveerde kaarten</string>
<string name="failedLaunchingPhotoPicker">Er is geen ondersteunde galerij-app aangetroffen</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> kaart (<xliff:g id="archivedCount">%2$d</xliff:g> gearchiveerd)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> kaarten (<xliff:g id="archivedCount">%2$d</xliff:g> gearchiveerd)</item>
</plurals>
</resources>

View File

@@ -4,17 +4,17 @@
<string name="importing">Importacion…</string>
<string name="exportFailed">Exportacion pas possibla</string>
<string name="exportSuccessfulTitle">Exportat</string>
<string name="importFailed">Importacion de vòstras cartas impossibla</string>
<string name="importFailed">Importacion impossibla</string>
<string name="importFailedTitle">Fracàs de limportacion</string>
<string name="importSuccessfulTitle">Importat</string>
<string name="importExportHelp">Exportar vòstras cartas vos permet de las recuperar sus un autre aparelh.</string>
<string name="importExportHelp">La salvagarda de vòstras cartas vos permet de las recuperar sus un autre aparelh.</string>
<string name="exportName">Exportar</string>
<string name="importExport">Importar/Exportar</string>
<string name="failedParsingImportUriError">Analisi impossibla lURI dimportacion</string>
<string name="noCardExistsError">Cap de carta pas trobada</string>
<string name="noCardIdError">Cap de numèro de carta pas picat</string>
<string name="noCardExistsError">Impossible de trobar aquesta carta</string>
<string name="noCardIdError">Cap didentificant pas picat</string>
<string name="noStoreError">Cap de nom pas picat</string>
<string name="card_ids_copied">Num. de la carta copiada</string>
<string name="card_ids_copied">ID copiat(s)</string>
<string name="noCardsMessage">Apondètz den primièr una carta</string>
<string name="cardShortcut">Acorchi de carta</string>
<string name="scanCardBarcode">Numerizar lo còdi de barras</string>
@@ -22,8 +22,6 @@
<string name="editCardTitle">Modificar la carta</string>
<string name="sendLabel">Enviar…</string>
<string name="share">Partejar</string>
<string name="unlockScreen">Activar la rotacion</string>
<string name="lockScreen">Desactivar la rotacion</string>
<string name="confirm">Confirmar</string>
<string name="delete">Suprimir</string>
<string name="edit">Modificar</string>
@@ -45,9 +43,27 @@
</plurals>
<string name="deleteTitle">Suprimir la carta</string>
<string name="noBarcode">Cap de còdi de barras</string>
<string name="barcodeNoBarcode">Aquesta carta a pas cap de còdi de barras</string>
<string name="barcodeNoBarcode">Cap de còdi de barras</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> carta seleccionada</item>
<item quantity="other"><xliff:g>%d</xliff:g> cartas seleccionadas</item>
<item quantity="one"><xliff:g>%d</xliff:g> seleccionada</item>
<item quantity="other"><xliff:g>%d</xliff:g> seleccionadas</item>
</plurals>
<string name="settings">Paramètres</string>
<string name="settings_category_title_ui">Interfàcia utilizaire</string>
<string name="settings_theme">Tèma</string>
<string name="noGiftCards">Clicatz lo boton + per apondre una carta o utilizatz lo menú ⋮ per nimportar una.</string>
<string name="noMatchingGiftCards">Cap de resultat. Ensajatz de modificar vòstra recèrca.</string>
<string name="settings_light_theme">Clar</string>
<string name="settings_dark_theme">Escur</string>
<string name="noGroups">Clicatz lo boton + per apondre de grops de categorizar.</string>
<string name="addManually">Picar lID a la man</string>
<string name="settings_system_theme">Sistèma</string>
<string name="about">A prepaus</string>
<string name="about_title_fmt">A prepaus de <xliff:g id="app_name">%s</xliff:g></string>
<string name="addFromImage">Causir a la galariá</string>
<string name="groups">Grops</string>
<string name="groupsList">Grops: <xliff:g>%s</xliff:g></string>
<string name="settings_max_font_size_scale">Talha max. de la poliça</string>
<string name="settings_theme_color">Color del tèma</string>
<string name="settings_locale">Lenga</string>
</resources>

View File

@@ -13,8 +13,6 @@
<string name="edit">Edytuj</string>
<string name="delete">Usuń</string>
<string name="confirm">Potwierdź</string>
<string name="lockScreen">Zablokuj autoobracanie ekranu</string>
<string name="unlockScreen">Odblokuj autoobracanie ekranu</string>
<string name="ok">OK</string>
<string name="copy_to_clipboard">Skopiuj identyfikator do schowka</string>
<string name="share">Udostępnij</string>
@@ -62,7 +60,6 @@
<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_lock_barcode_orientation">Zablokuj autoobracanie kodów kreskowych</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>
@@ -137,7 +134,7 @@
\nŻADNE DANE NIE SĄ ZBIERANE, co może potwierdzić każdy, gdyż nasza aplikacja jest wolnym oprogramowaniem.</string>
<string name="privacy_policy">Polityka prywatności</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="chooseImportType">Importuj dane z ...\?</string>
<string name="chooseImportType">Importuj dane z</string>
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> nie wydaje się być prawidłową wartością.</string>
<string name="points">Punkty</string>
<string name="currency">Waluta</string>
@@ -152,7 +149,6 @@
<string name="editBarcode">Edytuj kod kreskowy</string>
<string name="barcode">Kod kreskowy</string>
<string name="card">Karta</string>
<string name="balancePoints"><xliff:g>%s</xliff:g> punkty</string>
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Wygasło: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Wygasa: <xliff:g>%s</xliff:g></string>
@@ -230,4 +226,28 @@
<string name="exportPassword">Ustaw hasło, aby zabezpieczyć twoje wyeksportowane dane (opcjonalne)</string>
<string name="exportPasswordHint">Wpisz hasło</string>
<string name="options">Opcje</string>
</resources>
<string name="showMoreInfo">Pokaż informacje</string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> punkt</item>
<item quantity="few"><xliff:g>%s</xliff:g> punkty</item>
<item quantity="many"><xliff:g>%s</xliff:g> punkty</item>
<item quantity="other"><xliff:g>%s</xliff:g> punkty</item>
</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="hideMoreInfo">Ukryj informacje</string>
<string name="settings_card_orientation">Orientacja kodu kreskowego</string>
<string name="settings_follow_system_orientation">Śledź system</string>
<string name="set_scale">Ustaw skalę</string>
<string name="duplicateCard">Duplikuj</string>
<string name="starred">Oznaczone gwiazdką</string>
<string name="settings_landscape_orientation">Poziomowy</string>
<string name="settings_lock_on_opening_orientation">Blokuj do ustawionej orientacji przy otwieraniu karty</string>
<string name="settings_portrait_orientation">Portretowy</string>
<string name="archive">Archiwizować</string>
<string name="unarchive">Odarchiwizować</string>
<string name="archived">Karta archiwizowana</string>
<string name="unarchived">Karta odarchiwizowana</string>
<string name="archiveList">Archiwum</string>
<string name="noUnarchivedCardsMessage">Nie istnieją żadne niezarchiwizowane karty</string>
</resources>

View File

@@ -1,192 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="shortcutSelectCard">Selecione um cartão</string>
<string name="action_show_details">Mostrar detalhes</string>
<string name="action_hide_details">Ocultar detalhes</string>
<string name="lockScreen">Bloquear rotação</string>
<string name="unlockScreen">Desbloquear rotação</string>
<string name="deleteTitle">Eliminar cartão</string>
<string name="deleteConfirmation">Eliminar este cartão permanentemente\?</string>
<string name="ok">OK</string>
<string name="copy_to_clipboard">Copiar identificador para a área de transferência</string>
<string name="share">Partilhar</string>
<string name="sendLabel">Enviar…</string>
<string name="editCardTitle">Editar cartão</string>
<string name="addCardTitle">Adicionar cartão</string>
<string name="cardShortcut">Atalho do cartão</string>
<string name="noCardsMessage">Adicione primeiro um cartão</string>
<string name="noStoreError">Nenhum nome inserido</string>
<string name="failedParsingImportUriError">Não foi possível analisar o URI de importação</string>
<string name="importExport">Importar / exportar</string>
<string name="exportName">Exportar</string>
<string name="importSuccessfulTitle">Importado</string>
<string name="importFailedTitle">A importação falhou</string>
<string name="exportSuccessfulTitle">Exportado</string>
<string name="exportFailedTitle">A exportação falhou</string>
<string name="importOptionFilesystemExplanation">Escolha um ficheiro específico a partir do sistema de ficheiros.</string>
<string name="importOptionApplicationTitle">Usar outra aplicação</string>
<string name="importOptionApplicationExplanation">Utilize qualquer aplicação ou o seu gestor de ficheiros favorito para abrir um ficheiro.</string>
<string name="importOptionApplicationButton">Utilizar outra aplicação</string>
<string name="about">Sobre</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Direitos de autor © 2019<xliff:g>%d</xliff:g> Sylvia van Os</string>
<string name="app_copyright_old">Baseado no Loyalty Card Keychain
\ndireitos de autor © 20162020 Branden Archer</string>
<string name="app_license">Software livre de partilha sob a mesma licença e segundo a licença GPLv3+</string>
<string name="about_title_fmt">Sobre o <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Versão: <xliff:g id="version">%s</xliff:g></string>
<string name="app_revision_fmt">Informação da revisão: <xliff:g id="app_revision_url">%s</xliff:g></string>
<string name="app_libraries">Bibliotecas livres de terceiros: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_resources">Recursos livres de terceiros: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="selectBarcodeTitle">Selecionar código de barras</string>
<string name="starImage">Favorito</string>
<string name="settings">Configurações</string>
<string name="settings_category_title_ui">Interface do utilizador</string>
<string name="settings_theme">Tema</string>
<string name="settings_system_theme">Sistema</string>
<string name="settings_light_theme">Claro</string>
<string name="settings_dark_theme">Escuro</string>
<string name="settings_max_font_size_scale">Tamanho máximo da fonte</string>
<string name="settings_display_barcode_max_brightness">Iluminar o código de barras</string>
<string name="settings_lock_barcode_orientation">Bloquear orientação do código de barras</string>
<string name="settings_keep_screen_on">Manter ecrã ligado</string>
<string name="group_name_is_empty">O nome do grupo não pode estar vazio</string>
<string name="group_updated">Grupo atualizado</string>
<string name="all">Todos</string>
<string name="deleteConfirmationGroup">Eliminar o grupo\?</string>
<string name="failedOpeningFileManager">Instalar primeiro um gestor de ficheiros.</string>
<string name="moveUp">Subir</string>
<string name="moveDown">Descer</string>
<string name="leaveWithoutSaveTitle">Sair</string>
<string name="leaveWithoutSaveConfirmation">Sair sem guardar\?</string>
<string name="addFromImage">Selecionar imagem da galeria</string>
<string name="groupsList">Grupos: <xliff:g>%s</xliff:g></string>
<string name="editGroup">A editar grupo: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentence">Expiram: <xliff:g>%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Expirados: <xliff:g>%s</xliff:g></string>
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
<string name="balancePoints"><xliff:g>%s</xliff:g> pontos</string>
<string name="card">Cartão</string>
<string name="barcode">Código de barras</string>
<string name="editBarcode">Editar código de barras</string>
<string name="expiryDate">Validade</string>
<string name="never">Nunca</string>
<string name="chooseExpiryDate">Escolher validade</string>
<string name="moveBarcodeToTopOfScreen">Mover o código de barras para o topo do ecrã</string>
<string name="moveBarcodeToCenterOfScreen">Centrar o código de barras no ecrã</string>
<string name="noBarcodeFound">Não foi encontrado nenhum código de barras</string>
<string name="errorReadingImage">Não foi possível ler a imagem</string>
<string name="balance">Saldo</string>
<string name="currency">Moeda</string>
<string name="privacy_policy_popup_text">Aviso de política de privacidade (exigido por algumas lojas de aplicações):
\n
\nNENHUM DADO É RECOLHIDO DE FORMA ALGUMA, o que qualquer pessoa pode confirmar, já que a nossa aplicação é um software livre de código-fonte aberto.</string>
<string name="accept">Aceitar</string>
<string name="importCatima">Importar do Catima</string>
<string name="importFidme">Importar do FidMe</string>
<string name="importFidmeMessage">Selecione a exportação <i>fidme-export-request-xxxxxx.zip</i> do FidMe para importar e depois selecione os tipos de código de barras manualmente.
\nPrimeiro crie a exportação no seu perfil do FidMe escolhendo a opção \"Proteção de dados\" e em seguida pressionando \"Extrair os meus dados\".</string>
<string name="importLoyaltyCardKeychain">Importar do Loyalty Card Keychain</string>
<string name="importLoyaltyCardKeychainMessage">Selecione a exportação <i>LoyaltyCardKeychain.csv</i> do Loyalty Card Keychain para importar.
\nPrimeiro crie a exportação no menu \"Importar / exportar\" no Loyalty Card Keychain pressionando \"Exportar\".</string>
<string name="importStocard">Importar do Stocard</string>
<string name="importCatimaMessage">Selecione a exportação <i>catima.zip</i> do Catima a importar.
\nPrimeiro crie a exportação no menu \"Importar / exportar\" de outra aplicação Catima pressionando \"Exportar\" nesse menu.</string>
<string name="importStocardMessage">Selecione a exportação <i>***-sync.zip</i> do Stocard para importar.
\nObtenha-o através do e-mail support@stocardapp.com solicitando uma exportação dos seus dados.</string>
<string name="importVoucherVault">Importar do Voucher Vault</string>
<string name="importVoucherVaultMessage">Selecione a exportação <i>vouchervault.json</i> do Voucher Vault para importar.
\nCrie-a primeiro pressionando a opção \"Exportar\" no Voucher Vault.</string>
<string name="barcodeId">Valor do código de barras</string>
<string name="setBarcodeId">Definir o valor do código de barras</string>
<string name="unsupportedBarcodeType">Este tipo de código de barras ainda não pode ser mostrado. Pode vir a ser suportado numa versão posterior da aplicação.</string>
<string name="wrongValueForBarcodeType">O valor não é válido para o tipo de código de barras selecionado</string>
<string name="intent_import_card_from_url_share_multiple_text">Quero partilhar alguns cartões</string>
<string name="photos">Fotografias</string>
<string name="setFrontImage">Definir imagem frontal</string>
<string name="setBackImage">Definir imagem de trás</string>
<string name="removeImage">Remover imagem</string>
<string name="takePhoto">Tirar uma fotografia</string>
<string name="updateBarcodeQuestionTitle">Atualizar o valor do código de barras\?</string>
<string name="yes">Sim</string>
<string name="no">Não</string>
<string name="passwordRequired">Introduza a palavra-passe</string>
<string name="exportPassword">Defina uma palavra-passe para proteger a exportação (opcional)</string>
<string name="exportPasswordHint">Digite a palavra-passe</string>
<string name="failedGeneratingShareURL">Não foi possível gerar uma URL partilhável. Por favor reporte isto aos programadores.</string>
<string name="turn_flashlight_on">Ligar lanterna</string>
<string name="turn_flashlight_off">Desligar lanterna</string>
<string name="settings_locale">Idioma</string>
<string name="settings_system_locale">Sistema</string>
<string name="selectColor">Selecionar cor</string>
<string name="setIcon">Definir ícone</string>
<string name="settings_violet_theme">Violeta</string>
<string name="settings_blue_theme">Azul</string>
<string name="settings_sky_blue_theme">Azul céu</string>
<string name="settings_green_theme">Verde</string>
<string name="settings_grey_theme">Cinzento</string>
<string name="settings_brown_theme">Castanho</string>
<string name="app_contributors">Tornado possível por: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="sort">Ordenar</string>
<string name="swipeToSwitchImages">Deslize ou pressione prolongadamente para mudar as imagens</string>
<string name="sort_by_name">Nome</string>
<string name="sort_by_most_recently_used">Mais usados recentemente</string>
<string name="sort_by_expiry">Validade</string>
<string name="sort_by_balance">Saldo</string>
<string name="sort_by">Ordenar por</string>
<string name="version_history">Histórico de versões</string>
<string name="credits">Créditos</string>
<string name="help_translate_this_app">Ajude a traduzir esta aplicação</string>
<string name="license">Licença</string>
<string name="source_repository">Repositório do código-fonte</string>
<string name="on_github">no GitHub</string>
<string name="and_data_usage">e utilização de dados</string>
<string name="rate_this_app">Avalie esta aplicação</string>
<string name="on_google_play">no Google Play</string>
<string name="report_error">Reportar erro</string>
<string name="translate_platform">no Weblate</string>
<plurals name="deleteCardsTitle">
<item quantity="one">Eliminar <xliff:g>%d</xliff:g> cartão</item>
<item quantity="other">Eliminar <xliff:g>%d</xliff:g> cartões</item>
</plurals>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Eliminar o cartão <xliff:g>%d</xliff:g> permanentemente\?</item>
<item quantity="other">Eliminar os cartões <xliff:g>%d</xliff:g> permanentemente\?</item>
</plurals>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> cartão</item>
<item quantity="other"><xliff:g>%d</xliff:g> cartões</item>
</plurals>
<string name="action_search">Pesquisa</string>
<string name="action_add">Acrescentar</string>
<string name="storeName">Nome</string>
<string name="note">Nota</string>
<string name="cardId">Identificador do cartão</string>
<string name="barcodeType">Tipo de código de barras</string>
<string name="noBarcode">Sem código de barras</string>
<string name="star">Adicionar aos favoritos</string>
<string name="unstar">Retirar dos favoritos</string>
<string name="cancel">Cancelar</string>
<string name="save">Guardar</string>
<string name="edit">Editar</string>
<string name="delete">Eliminar</string>
<string name="confirm">Confirmar</string>
<string name="importing">A importar…</string>
<string name="exporting">A exportar…</string>
<string name="exportOptionExplanation">Os dados serão guardados num local à sua escolha.</string>
<string name="importOptionFilesystemTitle">Importar do sistema de ficheiros</string>
<string name="importOptionFilesystemButton">Do sistema de ficheiros</string>
<string name="intent_import_card_from_url_share_text">Quero partilhar um cartão</string>
<string name="enter_group_name">Introduza o nome do grupo</string>
<string name="groups">Grupos</string>
<string name="group_edit">Editar grupo</string>
<string name="group_name_already_in_use">O nome do grupo já está a ser usado</string>
<string name="points">Pontos</string>
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> não parece ser um saldo válido.</string>
<string name="chooseImportType">De onde importar os dados\?</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="privacy_policy">Política de privacidade</string>
<string name="settings_theme_color">Cor do tema</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_pink_theme">Rosa</string>
<string name="settings_magenta_theme">Magenta</string>
</resources>

View File

@@ -4,11 +4,11 @@
<string name="importOptionFilesystemExplanation">Escolha um ficheiro específico a partir do sistema de ficheiros.</string>
<string name="action_search">Pesquisa</string>
<string name="star">Adicionar aos favoritos</string>
<string name="noMatchingGiftCards">Não foi encontrado nada. Tente alterar a sua pesquisa.</string>
<string name="noMatchingGiftCards">Sem resultados. Tente alterar a sua pesquisa.</string>
<string name="storeName">Nome</string>
<string name="note">Nota</string>
<string name="barcodeType">Tipo de código de barras</string>
<string name="barcodeNoBarcode">Este cartão não tem código de barras</string>
<string name="barcodeNoBarcode">Sem código de barras</string>
<string name="cancel">Cancelar</string>
<string name="save">Guardar</string>
<string name="edit">Editar</string>
@@ -22,15 +22,13 @@
<string name="about">Sobre</string>
<string name="app_license">Software livre de partilha sob a mesma licença e segundo a licença GPLv3+</string>
<string name="addCardTitle">Adicionar cartão</string>
<string name="lockScreen">Bloquear rotação</string>
<string name="editCardTitle">Editar cartão</string>
<string name="unlockScreen">Desbloquear rotação</string>
<string name="deleteTitle">Eliminar cartão</string>
<string name="copy_to_clipboard">Copiar identificador para a área de transferência</string>
<string name="sendLabel">Enviar…</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> cartão selecionado</item>
<item quantity="other"><xliff:g>%d</xliff:g> cartões selecionados</item>
<item quantity="one"><xliff:g>%d</xliff:g> selecionado</item>
<item quantity="other"><xliff:g>%d</xliff:g> selecionados</item>
</plurals>
<string name="deleteConfirmation">Eliminar este cartão permanentemente\?</string>
<string name="share">Partilhar</string>
@@ -41,21 +39,20 @@
<string name="cardShortcut">Atalho do cartão</string>
<string name="noCardsMessage">Adicione primeiro um cartão</string>
<string name="noStoreError">Nenhum nome inserido</string>
<string name="noCardExistsError">Não foi possível encontrar o cartão</string>
<string name="noCardExistsError">Não foi possível encontrar esse cartão</string>
<string name="failedParsingImportUriError">Não foi possível analisar o URI de importação</string>
<string name="importExport">Importar / exportar</string>
<string name="exportName">Exportar</string>
<string name="importSuccessful">Dados do cartão importados</string>
<string name="noGroups">Primeiro clique no botão + para adicionar grupos para categorização.</string>
<string name="noGroupCards">Este grupo não contém cartões</string>
<string name="importSuccessful">Dados importados</string>
<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_keep_screen_on">Manter ecrã ligado</string>
<string name="enter_group_name">Introduza o nome do grupo</string>
<string name="groups">Grupos</string>
<string name="settings_lock_barcode_orientation">Bloquear orientação do código de barras</string>
<string name="settings_disable_lockscreen_while_viewing_card">Desativar bloqueio do ecrã</string>
<string name="exportSuccessful">Dados do cartão exportados</string>
<string name="exportSuccessful">Dados exportados</string>
<string name="all">Todos</string>
<string name="deleteConfirmationGroup">Eliminar o grupo\?</string>
<string name="settings">Configurações</string>
@@ -66,29 +63,28 @@
<string name="settings_dark_theme">Escuro</string>
<string name="settings_max_font_size_scale">Tamanho máximo da fonte</string>
<string name="selectBarcodeTitle">Selecionar código de barras</string>
<string name="enterBarcodeInstructions">Introduza o identificador do cartão e depois escolha o tipo de código de barras abaixo ou \"Este cartão não tem código de barras\".</string>
<string name="copy_to_clipboard_toast">Identificador do cartão copiado para a área de transferência</string>
<string name="thumbnailDescription">Miniatura do cartão</string>
<string name="enterBarcodeInstructions">Introduza o identificador e depois escolha o tipo de código de barras abaixo ou \"Sem código de barras\".</string>
<string name="copy_to_clipboard_toast">Identificador copiado para a área de transferência</string>
<string name="thumbnailDescription">Miniatura</string>
<string name="starImage">Favorito</string>
<string name="failedOpeningFileManager">Instalar primeiro um gestor de ficheiros.</string>
<string name="moveUp">Subir</string>
<string name="moveDown">Descer</string>
<string name="leaveWithoutSaveTitle">Sair</string>
<string name="noExternalStoragePermissionError">Conceda primeiro a autorização de acesso ao armazenamento externo para importar ou exportar cartões</string>
<string name="importExportHelp">A cópia de segurança dos seus cartões permite-lhe movê-los para outro dispositivo.</string>
<string name="noExternalStoragePermissionError">Conceda primeiro a autorização de acesso ao armazenamento externo para importar ou exportar dados</string>
<string name="importExportHelp">A cópia de segurança dos seus dados permite-lhe movê-los para outro dispositivo.</string>
<string name="importSuccessfulTitle">Importado</string>
<string name="importFailedTitle">A importação falhou</string>
<string name="importFailed">Não foi possível importar os cartões</string>
<string name="importFailed">Não foi possível importar</string>
<string name="exportSuccessfulTitle">Exportado</string>
<string name="exportFailedTitle">A exportação falhou</string>
<string name="exportFailed">Não foi possível exportar os cartões</string>
<string name="exportFailed">Não foi possível exportar</string>
<string name="importing">A importar…</string>
<string name="exporting">A exportar…</string>
<string name="settings_sky_blue_theme">Azul céu</string>
<string name="report_error">Reportar erro</string>
<string name="balancePoints"><xliff:g>%s</xliff:g> pontos</string>
<string name="barcode">Código de barras</string>
<string name="chooseImportType">De onde importar os dados\?</string>
<string name="chooseImportType">Importar dados de</string>
<string name="card">Cartão</string>
<string name="expiryStateSentence">Expiram: <xliff:g>%s</xliff:g></string>
<string name="app_resources">Recursos livres de terceiros: <xliff:g id="app_resources_list">%s</xliff:g></string>
@@ -98,7 +94,7 @@
<string name="exportPassword">Defina uma palavra-passe para proteger a exportação (opcional)</string>
<string name="exportPasswordHint">Digite a palavra-passe</string>
<string name="setBarcodeId">Definir o valor do código de barras</string>
<string name="sameAsCardId">Igual ao identificador do cartão</string>
<string name="sameAsCardId">Igual ao identificador</string>
<string name="importFidmeMessage">Selecione a exportação <i>fidme-export-request-xxxxxx.zip</i> do FidMe para importar e depois selecione os tipos de código de barras manualmente.
\nPrimeiro crie a exportação no seu perfil do FidMe escolhendo a opção \"Proteção de dados\" e em seguida pressionando \"Extrair os meus dados\".</string>
<string name="importStocardMessage">Selecione a exportação <i>***-sync.zip</i> do Stocard para importar.
@@ -107,15 +103,15 @@
<string name="wrongValueForBarcodeType">O valor não é válido para o tipo de código de barras selecionado</string>
<string name="intent_import_card_from_url_share_multiple_text">Quero partilhar alguns cartões</string>
<string name="removeImage">Remover imagem</string>
<string name="backImageDescription">Imagem de trás do cartão</string>
<string name="frontImageDescription">Imagem frontal do cartão</string>
<string name="backImageDescription">Imagem de trás</string>
<string name="frontImageDescription">Imagem frontal</string>
<string name="photos">Fotografias</string>
<string name="passwordRequired">Introduza a palavra-passe</string>
<string name="settings_green_theme">Verde</string>
<string name="settings_grey_theme">Cinzento</string>
<string name="settings_brown_theme">Castanho</string>
<string name="updateBarcodeQuestionTitle">Atualizar o valor do código de barras\?</string>
<string name="updateBarcodeQuestionText">Alterou a identificação do cartão. Também quer atualizar o código de barras para usar o mesmo valor\?</string>
<string name="updateBarcodeQuestionText">Alterou o identificador. Também quer atualizar o código de barras para usar o mesmo valor\?</string>
<string name="no">Não</string>
<plurals name="groupCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> cartão</item>
@@ -130,7 +126,7 @@
<string name="app_revision_fmt">Informação da revisão: <xliff:g id="app_revision_url">%s</xliff:g></string>
<string name="expiryStateSentenceExpired">Expirados: <xliff:g>%s</xliff:g></string>
<string name="leaveWithoutSaveConfirmation">Sair sem guardar\?</string>
<string name="addManually">Introduzir manualmente o identificador do cartão</string>
<string name="addManually">Introduzir manualmente o identificador</string>
<string name="addFromImage">Selecionar imagem da galeria</string>
<string name="groupsList">Grupos: <xliff:g>%s</xliff:g></string>
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
@@ -164,7 +160,7 @@
<string name="importVoucherVaultMessage">Selecione a exportação <i>vouchervault.json</i> do Voucher Vault para importar.
\nCrie-a primeiro pressionando a opção \"Exportar\" no Voucher Vault.</string>
<string name="unsupportedBarcodeType">Este tipo de código de barras ainda não pode ser mostrado. Pode vir a ser suportado numa versão posterior da aplicação.</string>
<string name="copy_to_clipboard_multiple_toast">Identificação do cartão copiado para a área de transferência</string>
<string name="copy_to_clipboard_multiple_toast">Identificação copiado para a área de transferência</string>
<string name="setFrontImage">Definir imagem frontal</string>
<string name="setBackImage">Definir imagem de trás</string>
<string name="failedGeneratingShareURL">Não foi possível gerar uma URL partilhável. Por favor reporte isto aos programadores.</string>
@@ -185,7 +181,7 @@
<string name="sort_by_most_recently_used">Mais usados recentemente</string>
<string name="sort_by_expiry">Validade</string>
<string name="sort_by_balance">Saldo</string>
<string name="reverse">Inverter</string>
<string name="reverse">…na ordem inversa</string>
<string name="sort_by">Ordenar por</string>
<string name="version_history">Histórico de versões</string>
<string name="credits">Créditos</string>
@@ -207,18 +203,46 @@
<item quantity="other">Eliminar os cartões <xliff:g>%d</xliff:g> permanentemente\?</item>
</plurals>
<string name="ok">OK</string>
<string name="card_ids_copied">Identificadores dos cartões copiados</string>
<string name="barcodeImageDescriptionWithType">Imagem do código de barras do cartão do tipo <xliff:g>%s</xliff:g></string>
<string name="card_ids_copied">Identificadores copiados</string>
<string name="barcodeImageDescriptionWithType">Imagem do código de barras <xliff:g>%s</xliff:g></string>
<string name="group_edit">Editar grupo</string>
<string name="group_name_already_in_use">O nome do grupo já está a ser usado</string>
<string name="group_name_is_empty">O nome do grupo não pode estar vazio</string>
<string name="group_updated">Grupo atualizado</string>
<string name="editGroup">A editar grupo: <xliff:g>%s</xliff:g></string>
<string name="noGiftCardsGroup">Ainda não tem nenhum cartão de fidelidade. Assim que tenha adicionado alguns, pode atribuí-los ao grupo aqui.</string>
<string name="noGiftCardsGroup">Crie alguns cartões e atribua-os depois ao grupo aqui.</string>
<string name="selectColor">Selecionar cor</string>
<string name="setIcon">Definir ícone</string>
<string name="action_show_details">Mostrar detalhes</string>
<string name="action_hide_details">Ocultar detalhes</string>
<string name="shortcutSelectCard">Selecione um cartão</string>
<string name="translate_platform">no Weblate</string>
<string name="starred">Estrela</string>
<string name="set_scale">Escala de set</string>
<string name="showMoreInfo">Mostrar info</string>
<string name="hideMoreInfo">Ocultar informação</string>
<string name="options">Opções</string>
<plurals name="balancePoints">
<item quantity="one"><xliff:g>%s</xliff:g> ponto</item>
<item quantity="other"><xliff:g>%s</xliff:g> pontos</item>
</plurals>
<string name="settings_oled_dark">Fundo preto puro para tema negro</string>
<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_follow_system_orientation">Definido no sistema</string>
<string name="settings_portrait_orientation">Retrato</string>
<string name="settings_landscape_orientation">Paisagem</string>
<string name="settings_lock_on_opening_orientation">Bloqueio da orientação usada ao abrir o cartão</string>
<string name="unarchive">Desarquivar</string>
<string name="archived">Cartão arquivado</string>
<string name="unarchived">Cartão desarquivado</string>
<string name="archiveList">Arquivar</string>
<string name="noUnarchivedCardsMessage">Não existem cartões desarquivados</string>
<plurals name="groupCardCountWithArchived">
<item quantity="one"><xliff:g>%1$d</xliff:g> cartão (<xliff:g id="archivedCount">%2$d</xliff:g> arquivado)</item>
<item quantity="other"><xliff:g>%1$d</xliff:g> cartões (<xliff:g id="archivedCount">%2$d</xliff:g> arquivados)</item>
</plurals>
<string name="failedLaunchingPhotoPicker">Não foi encontrada nenhuma aplicação de galeria de imagens</string>
</resources>

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