Compare commits

...

109 Commits

Author SHA1 Message Date
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
68 changed files with 589 additions and 370 deletions

View File

@@ -1,5 +1,24 @@
# Changelog
## 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

View File

@@ -18,8 +18,8 @@ android {
applicationId "me.hackerchick.catima"
minSdkVersion 21
targetSdkVersion 31
versionCode 102
versionName "2.15.1"
versionCode 106
versionName "2.16.2"
vectorDrawables.useSupportLibrary true
multiDexEnabled true
@@ -90,7 +90,7 @@ dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
// Splash Screen
implementation 'androidx.core:core-splashscreen:1.0.0-beta01'
implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
// Third-party
implementation 'com.journeyapps:zxing-android-embedded:4.3.0@aar'

View File

@@ -134,7 +134,5 @@
<action android:name="android.service.controls.ControlsProviderService" />
</intent-filter>
</service>
</application>
</manifest>

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,6 +4,8 @@ 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;
@@ -16,9 +18,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,6 +36,7 @@ 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) {
@@ -47,8 +51,8 @@ public class CardShortcutConfigure extends AppCompatActivity implements LoyaltyC
}
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(mDatabase);
final LoyaltyCardCursorAdapter adapter = new LoyaltyCardCursorAdapter(this, cardCursor, this);
cardList.setAdapter(adapter);
mAdapter = new LoyaltyCardCursorAdapter(this, cardCursor, this);
cardList.setAdapter(mAdapter);
}
private void onClickAction(int position) {
@@ -65,6 +69,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

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

@@ -15,7 +15,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 +23,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();

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

@@ -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;
@@ -35,30 +36,48 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
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() {

View File

@@ -323,6 +323,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);
@@ -448,14 +449,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));
@@ -858,10 +855,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
@@ -922,7 +916,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");
}
@@ -1453,13 +1447,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);
}
}
@@ -1513,4 +1507,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

@@ -122,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) {
@@ -278,6 +279,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);
@@ -285,6 +287,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() {
@@ -304,7 +319,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
setCenterGuideline(loyaltyCard.zoomLevel);
drawMainImage(mainImageIndex, true);
drawMainImage(mainImageIndex, true, isFullscreen);
}
@Override
@@ -400,7 +415,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())
@@ -648,22 +663,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
imageTypes.add(ImageType.IMAGE_BACK);
}
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);
}
setDotIndicator(darkMode);
setFullscreen(isFullscreen);
@@ -807,7 +807,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(
@@ -817,12 +817,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() {
@@ -831,13 +832,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;
@@ -853,12 +854,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);
@@ -888,7 +896,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);
}
}
/**
@@ -904,7 +931,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);
@@ -925,6 +952,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);
@@ -949,7 +977,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);
@@ -966,6 +994,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

@@ -298,6 +298,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
protected void onResume() {
super.onResume();
mAdapter.refreshState();
if (mCurrentActionMode != null) {
mAdapter.clearSelections();
mCurrentActionMode.finish();
@@ -452,6 +454,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
public boolean onCreateOptionsMenu(Menu inputMenu) {
getMenuInflater().inflate(R.menu.main_menu, inputMenu);
Utils.updateMenuCardDetailsButtonState(inputMenu.findItem(R.id.action_unfold), mAdapter.showingDetails());
displayCardSetupOptions(inputMenu, mLoyaltyCardCount > 0);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
@@ -493,17 +496,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
int id = inputItem.getItemId();
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;
}

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

@@ -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;
@@ -15,6 +16,8 @@ import android.os.LocaleList;
import android.provider.MediaStore;
import android.util.Log;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
import com.google.android.material.color.DynamicColors;
@@ -46,6 +49,7 @@ 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 {
@@ -506,4 +510,28 @@ public class Utils {
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

@@ -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,12 @@ 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 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);
}
}

View File

@@ -41,13 +41,13 @@ import protect.card_locker.ZipUtils;
public class StocardImporter implements Importer {
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 +62,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 +80,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 +98,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 +135,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 +170,7 @@ public class StocardImporter implements Importer {
}
}
} else if (fileName.endsWith("notes/default.json")) {
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
loyaltyCardHashMap = appendToHashMap(
loyaltyCardHashMap,
cardName,
"note",
@@ -132,14 +178,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,14 +201,14 @@ 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);
HashMap<String, Object> providerData = providers.get(providerId);
String store = providerData != null ? providerData.get("name") : 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 {
@@ -170,7 +216,18 @@ public class StocardImporter implements Importer {
}
}
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);
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 +254,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

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

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

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

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

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

@@ -4,25 +4,25 @@ J. Lavoie
Allan Nordhøy
Heimen Stoffels
solokot
mondstern
Katharine Chui
mondstern
Oğuz Ersen
IllusiveMan196
Altonss
IllusiveMan196
Petr Novák
StoyanDimitrov
Joel A
Taco
Gediminas Murauskas
StoyanDimitrov
Nyatsuki
Michael Moroni
Samantaz Fox
arno-github
Ankit Tiwari
Sergio Paredes
huuhaa
laralem
arshbeerSingh
huuhaa
Miha Frangež
sr093906
mdvhimself
@@ -30,12 +30,14 @@ Maciej Błędkowski
Olivia (Zoe)
Quentin PAGÈS
betsythefc
Silvério Santos
waffshappen
ati3
Jane Kong
K. Herbert
Still Hsu
String E. Fighter
Yurical
Silvério Santos
rr-vesp
/usr/local/ΕΨΗΕΛΩΝ
Adolfo Jayme-Barrientos
@@ -44,12 +46,11 @@ KovalevArtem
Clonewayx
D. Domig
Diego
Jane Kong
Lukas Grassauer
Marnick L'Eau
Michalis
Rosdyana Kusuma
schirinowski
umoenks
Thomas Bertels
inesre
lgasp
@@ -65,8 +66,9 @@ Kasina Dheeraj
Eric
Flav
Franciszek Stefan
Giovanni
Izzy
krkk
Karol Kosek
bittin
Marco
Mattia
@@ -80,7 +82,6 @@ Rohan Babbar
Ronak Upadhyay
Rose Liverman
Simone Dotto
Still Hsu
Subhashish Anand
Tymofii Lytvynenko
Tjipke van der Heide

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

@@ -230,4 +230,5 @@
<item quantity="other"><xliff:g>%s</xliff:g> точки</item>
</plurals>
<string name="settings_oled_dark">Чисто черен фон за тъмната тема</string>
<string name="include_if_asking_support">Ако искате да потърсите поддръжка, включете следната информация:</string>
</resources>

View File

@@ -64,7 +64,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>

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>
@@ -50,7 +50,7 @@
<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>
@@ -62,13 +62,13 @@
<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>
@@ -80,19 +80,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>
@@ -103,23 +103,23 @@
<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>
@@ -136,7 +136,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>
@@ -150,8 +150,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">
@@ -168,7 +168,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>
@@ -186,5 +186,49 @@
<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>
</resources>

View File

@@ -229,6 +229,6 @@
<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 pur pour le thème sombre</string>
<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>
</resources>

View File

@@ -230,4 +230,5 @@
<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>
</resources>

View File

@@ -1,191 +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="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

@@ -207,5 +207,5 @@
<string name="no">Nie</string>
<string name="passwordRequired">Zadajte prosím heslo</string>
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> sa nezdá byť platným zostatkom.</string>
<string name="noGiftCardsGroup">Vytvorte niekoľko kariet a potom ich priraďte k tejto skupine.</string>
</resources>
<string name="noGiftCardsGroup">Zatiaľ nemáte žiadne vernostné karty. Keď nejaké pridáte, môžete ich priradiť ku skupine tu.</string>
</resources>

View File

@@ -228,4 +228,7 @@
<item quantity="one"><xliff:g>%s</xliff:g> poäng</item>
<item quantity="other"><xliff:g>%s</xliff:g> poäng</item>
</plurals>
<string name="set_scale">Justera skala</string>
<string name="include_if_asking_support">Om du vill be om hjälp, inkludera då följande information:</string>
<string name="settings_oled_dark">Helsvart bakgrund för mörkt tema</string>
</resources>

View File

@@ -41,7 +41,7 @@
<string name="accept">Прийняти</string>
<string name="privacy_policy">Політика конфіденційності</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="chooseImportType">Імпортувати дані з\?</string>
<string name="chooseImportType">Імпортувати дані з</string>
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> здається, не є дійсним залишком.</string>
<string name="points">Бали</string>
<string name="currency">Валюта</string>
@@ -233,4 +233,12 @@
<string name="starred">Обране</string>
<string name="set_scale">Зміна масштабу</string>
<string name="hideMoreInfo">Сховати дані</string>
<string name="settings_oled_dark">Повністю чорний фон для темної теми</string>
<plurals name="balancePoints">
<item quantity="one"><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="include_if_asking_support">Якщо ви хочете отримати техпідтримку, додайте цю інформацію:</string>
</resources>

View File

@@ -175,4 +175,47 @@
<plurals name="balancePoints">
<item quantity="other"><xliff:g>%s</xliff:g></item>
</plurals>
<string name="settings_locale">语言</string>
<string name="setIcon">设置图标</string>
<string name="settings_pink_theme">粉色</string>
<string name="settings_oled_dark">纯黑色背景的深色主题</string>
<string name="hideMoreInfo">隐藏信息</string>
<string name="translate_platform">在Weblate上</string>
<string name="settings_sky_blue_theme">天蓝</string>
<string name="showMoreInfo">显示信息</string>
<string name="options">选项</string>
<string name="source_repository">源码库</string>
<string name="include_if_asking_support">请求帮助时,请填写下列信息:</string>
<string name="exportPasswordHint">输入密码</string>
<string name="settings_grey_theme">灰色</string>
<string name="sort">排序</string>
<string name="version_history">历史版本</string>
<string name="rate_this_app">给这个应用评分</string>
<string name="on_google_play">在Google Play上</string>
<string name="report_error">报告错误</string>
<string name="shortcutSelectCard">选择一张卡片</string>
<string name="group_name_already_in_use">组名已在使用中</string>
<string name="group_name_is_empty">组名不可为空</string>
<string name="settings_brown_theme">棕色</string>
<string name="settings_green_theme">绿色</string>
<string name="sort_by_most_recently_used">最近使用</string>
<string name="sort_by_name">名称</string>
<string name="help_translate_this_app">帮助翻译此应用</string>
<string name="sort_by_balance">余额</string>
<string name="swipeToSwitchImages">滑动或长按来切换图片</string>
<string name="reverse">倒序</string>
<string name="sort_by">排序方式</string>
<string name="selectColor">选择颜色</string>
<string name="settings_theme_color">主题色</string>
<string name="settings_blue_theme">蓝色</string>
<string name="sort_by_expiry">到期日</string>
<string name="settings_catima_theme">Catima</string>
<string name="noGroupCards">该组是空的</string>
<string name="on_github">在GitHub上</string>
<string name="group_updated">群组已更新</string>
<string name="editGroup">编辑组:<xliff:g>%s</xliff:g></string>
<string name="settings_system_locale">系统</string>
<string name="exportPassword">设置密码来保护导出的内容(可选)</string>
<string name="settings_magenta_theme">紫红</string>
<string name="settings_violet_theme">紫色</string>
</resources>

View File

@@ -115,6 +115,8 @@
<string name="sharedpreference_sort" translatable="false">sharedpreference_sort</string>
<string name="sharedpreference_sort_order" translatable="false">sharedpreference_sort_order</string>
<string name="sharedpreference_sort_direction" translatable="false">sharedpreference_sort_direction</string>
<string name="sharedpreference_card_details" translatable="false">sharedpreference_card_details</string>
<string name="sharedpreference_card_details_show" translatable="false">sharedpreference_card_details_show</string>
<string name="intent_import_card_from_url_share_text">I want to share a card with you</string>
<string name="intent_import_card_from_url_host_catima_app" translatable="false">catima.app</string>
<string name="intent_import_card_from_url_path_prefix_catima_app" translatable="false">/share</string>

View File

@@ -64,9 +64,6 @@ import static org.robolectric.Shadows.shadowOf;
public class ImportExportTest {
private Activity activity;
private SQLiteDatabase mDatabase;
private long nowMs;
private long lastYearMs;
private final int MONTHS_PER_YEAR = 12;
private final String BARCODE_DATA = "428311627547";
private final CatimaBarcode BARCODE_TYPE = CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A);
@@ -77,11 +74,6 @@ public class ImportExportTest {
activity = Robolectric.setupActivity(MainActivity.class);
mDatabase = TestHelpers.getEmptyDb(activity).getWritableDatabase();
nowMs = System.currentTimeMillis();
Calendar lastYear = Calendar.getInstance();
lastYear.set(Calendar.YEAR, lastYear.get(Calendar.YEAR) - 1);
lastYearMs = lastYear.getTimeInMillis();
}
/**

View File

@@ -313,6 +313,24 @@ public class LoyaltyCardViewActivityTest {
}
}
@Test
@Config(qualifiers="de")
public void noCrashOnRegionlessLocale() {
ActivityController activityController = Robolectric.buildActivity(LoyaltyCardEditActivity.class).create();
LoyaltyCardEditActivity activity = (LoyaltyCardEditActivity) activityController.get();
final Context context = activity.getApplicationContext();
activityController.start();
activityController.visible();
activityController.resume();
shadowOf(getMainLooper()).idle();
// Check default settings
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), null, null);
}
@Test
public void noDataLossOnResumeOrRotate() {
registerMediaStoreIntentHandler();

View File

@@ -0,0 +1 @@
- Нов дизайн с Material You

View File

@@ -1 +1 @@
За вашите щрихкодове, членства, програми за лоялност, талони и билети.
За щрихкодове, членства, програми за лоялност, талони и билети.

View File

@@ -0,0 +1,2 @@
- Grauer Block bei ungültigem Wert für Barcode behoben
- Korrekturen beim Stocard-Import

View File

@@ -0,0 +1,2 @@
- Fix manual language selection not applying everywhere
- Fix crash in edit view on regionless locale

View File

@@ -0,0 +1,2 @@
- Save card detail expansion state
- Minor UI fixes

View File

@@ -0,0 +1,2 @@
- Fix gray block appearing on invalid value for barcode
- Stocard import fixes

View File

@@ -0,0 +1 @@
- Fix some character sequences being shown as a single character

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 74 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

After

Width:  |  Height:  |  Size: 60 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 75 KiB

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 59 KiB

View File

@@ -1,9 +1,9 @@
Lopeta muovisten palkintokorttien etsiminen kaupan tai verkkokaupan kassalla.
Lopeta muovisten bonuskorttien etsiminen kaupan tai verkkokaupan kassalla.
<b>Skannaa viivakoodit laitteeseesi sen kameran avulla, unohda kortit.</b>
Unohda lompakko tai pidä se ultrakevyesti arvoesineitä varten.
Unohda lompakko tai pidä se ultrakevye arvoesineitä varten.
Tämän välttämättömän jokapäiväisen kantamisen (EDC) välineen avulla voit korvata turhan muovin käteisellä.
Tämän päivittäiseen käyttöön suunnitellun sovelluksen avulla voit korvata turhan muovin käteisellä.
- Vältä vakoilu hyvin vähillä luvilla. Ei Internet-yhteyttä eikä mainoksia.
- Lisää kortteja tai koodeja nimillä ja muokattavilla väreillä.
@@ -14,10 +14,9 @@ Tämän välttämättömän jokapäiväisen kantamisen (EDC) välineen avulla vo
- Tumma teema ja saavutettavuusvaihtoehdot näkövammaisille käyttäjille.
- Libre-ohjelmistoyhteisön kaikille tekemä.
- Lokalisoidut käsintehdyt käännökset yli 20 kielelle.
- Gratis, yhteisön panoksilla tuettu.
- Ilmainen, yhteisön panoksilla tuettu.
- Käytä, tutki, muuta ja jaa sitä haluamallasi tavalla; <i>kaikkien</i> kanssa.
- Ei vain vapaat ohjelmistot / avoin lähdekoodi. <i>Copylefted</i> libre-ohjelmisto (GPLv3+) kortinhallinta.
Yksinkertaista elämääsi ja shoppailuasi, äläkä enää koskaan hukkaa paperikuittia, kaupassa maksettavaa lahjakorttia tai lentolippua.
Ota kaikki palkintosi ja bonuksesi mukaasi ja säästä matkan aikana.

View File

@@ -1 +1 @@
Viivakoodeillesi, jäsenyyksillesi, kanta-asiakkkuuksillesi ja lipuillesi.
Viivakoodeja, jäsenyyksiä, kanta-asiakasohjelmia, kuponkeja ja lippuja varten.

View File

@@ -1 +1 @@
Catima
Catima — Kanta-asiakaskortit

View File

@@ -0,0 +1,2 @@
- Plusieurs corrections mineures
- Correction des plantages en langue norvégienne

View File

@@ -0,0 +1,2 @@
- Sauvegarde de l'état d'expansion du détail de carte
- Corrections mineures de l'interface utilisateur

View File

@@ -0,0 +1,2 @@
- Correction du bloc gris apparaissant sur une valeur invalide pour un code-barres
- Corrections pour l'importation de Stocard

View File

@@ -0,0 +1,14 @@
- Est désormais officiellement compatible avec les codes-barres à une et deux dimensions suivants :
- AZTEC
- CODABAR
- CODE_39
- CODE_128
- DATA_MATRIX
- EAN_8
- EAN_13
- ITF
- PDF_417
- QR_CODE
- UPC_A
- Les codes-barres sont maintenant affichés plus grand, afin d'en faciliter la lecture

View File

@@ -0,0 +1,2 @@
- Vari errori minori sistemati
- Sistemata la chiusura inaspettata dell'app quando si usa la lingua norvegese

View File

@@ -0,0 +1,2 @@
- Sistemata la selezione manuale della lingua che non veniva applicata dappertutto
- Sistemata la chiusura inaspettata dell'app quando si facevano delle modifiche con una lingua priva di differenze regionali

View File

@@ -2,4 +2,4 @@
- Limitada a largura dos códigos de barras gerados para reduzir o uso de memória e erros.
- Alterado o botão "Introduzir cartão" para "Editar cartão" se já existir um identificador.
- Alterado o esquema de cores para ser mais suave e compatível com o ícone da aplicação e disposição alterada ao visualizar um cartão.
- Acrescentado um assistente de introdução que será lançado no primeiro lançamento da aplicação.
- Acrescentado um assistente de introdução que será lançado no primeiro lançamento da aplicação

View File

@@ -0,0 +1 @@
Pre vaše čiarové kódy, členstvá, vernostné programy, kupóny a vstupenky.

View File

@@ -0,0 +1 @@
Catima - Vernostné karty

View File

@@ -1 +1 @@
Catima
Catima — Kundklubbsplånboken

View File

@@ -1 +1,2 @@
- Çeşitli küçük düzeltmeler
- Norveççe çeviri kullanılırken oluşan çökme düzeltildi

View File

@@ -0,0 +1,2 @@
- Elle dil seçiminin her yere uygulanmaması düzeltildi
- Bölgesiz yerel ayarda düzenleme görünümündeki çökme düzeltildi

View File

@@ -0,0 +1,2 @@
- Kart ayrıntısı genişletme durumunu kaydet
- Küçük kullanıcı arayüzü düzeltmeleri

View File

@@ -0,0 +1,2 @@
- Barkod için geçersiz değerde görünen gri blok düzeltildi
- Stocard içe aktarma düzeltmeleri

View File

@@ -0,0 +1 @@
- Bazı karakter dizilerinin tek karakter olarak gösterilmesi düzeltildi

View File

@@ -0,0 +1,2 @@
- Кнопки пошуку та сортування карт приховано доки не з'явиться хоч одна карта
- Різні правки тем

View File

@@ -0,0 +1,3 @@
- Тепер редактор зображень використовує колір теми
- Виправлено незначні баги тем
- Додано монотонно-чорну тему для OLED екранів