Compare commits

...

110 Commits

Author SHA1 Message Date
Sylvia van Os
2811a14627 Release Catima 2.7.0 2021-10-05 20:28:36 +02:00
Sylvia van Os
71bc304c51 Fix version upgrade 2021-10-05 20:27:11 +02:00
Sylvia van Os
7b0652ff11 Fix no results sometimes not correctly displayed 2021-10-05 20:15:10 +02:00
Sylvia van Os
61a3054655 Cleanup 2021-10-05 20:04:03 +02:00
Sylvia van Os
54c1cc3661 Merge pull request #457 from TheLastProject/create-pull-request/patch-1633455787
Update Fastlane changelogs
2021-10-05 19:45:20 +02:00
TheLastProject
ee0f9e04de Update Fastlane changelogs 2021-10-05 17:43:07 +00:00
Sylvia van Os
ebe5289d6e Implement FTS (#455)
This allows for unicode insensitive search and fast search over both
store and note data
2021-10-05 19:42:52 +02:00
Sylvia van Os
15ba15c602 Cleanup 2021-10-04 21:03:50 +02:00
Sylvia van Os
fd0448efc4 Merge pull request #454 from weblate/weblate-catima-catima
Translations update from Weblate
2021-10-04 19:28:39 +02:00
Oğuz Ersen
43fa2623d4 Translated using Weblate (Turkish)
Currently translated at 13.0% (11 of 84 strings)

Translation: Catima/Fastlane
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2021-10-04 19:08:55 +02:00
Oğuz Ersen
c1b9babf33 Translated using Weblate (Turkish)
Currently translated at 100.0% (220 of 220 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/tr/
2021-10-04 19:08:55 +02:00
Petr Novák
4c8edf9d9a Translated using Weblate (Czech)
Currently translated at 75.0% (63 of 84 strings)

Translation: Catima/Fastlane
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2021-10-04 19:08:55 +02:00
solokot
ff4271f51d Translated using Weblate (Russian)
Currently translated at 3.5% (3 of 84 strings)

Translation: Catima/Fastlane
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/ru/
2021-10-04 19:08:55 +02:00
IllusiveMan196
2424ab01cf Translated using Weblate (Ukrainian)
Currently translated at 95.9% (211 of 220 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2021-10-04 19:08:55 +02:00
solokot
b38dfeeed7 Translated using Weblate (Russian)
Currently translated at 100.0% (220 of 220 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2021-10-04 19:08:55 +02:00
Thomas Bertels
7912cd190f Translated using Weblate (French)
Currently translated at 100.0% (220 of 220 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2021-10-04 19:08:55 +02:00
Petr Novák
11962ad930 Translated using Weblate (Czech)
Currently translated at 97.7% (215 of 220 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2021-10-04 19:08:55 +02:00
Thomas Bertels
a8e2c65072 Translated using Weblate (English)
Currently translated at 100.0% (220 of 220 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/en/
2021-10-04 19:08:55 +02:00
Sylvia van Os
1b8ca5f467 Merge pull request #453 from LunarWatcher/master
Additional Norwegian translations
2021-10-04 19:08:46 +02:00
Olivia
46fff6da5b More changelogs 2021-10-04 18:40:45 +02:00
Olivia
47e75f64ed Import/Eksport is not an action in that form 2021-10-04 18:32:35 +02:00
Olivia
fb95c8c9d4 never seen that word used before, and we use copyleft
https://no.wikipedia.org/wiki/Copyleft
2021-10-04 18:27:21 +02:00
Olivia
66cc97214c Add translations 2021-10-04 18:21:36 +02:00
Biren
f52423ed70 Removed click listener from card icon (#452)
* Removed the unnecessary click listener in the card icon from LoyaltyCardCursorAdapter.java

* Removed declaration and assignment of mThumbnailContainer from LoyaltyCardCursorAdapter.java
2021-10-04 17:38:34 +02:00
Sylvia van Os
29bea052eb Merge pull request #451 from TheLastProject/create-pull-request/patch-1633349604
Update Fastlane changelogs
2021-10-04 14:15:35 +02:00
TheLastProject
b683f1fce4 Update Fastlane changelogs 2021-10-04 12:13:24 +00:00
Sylvia van Os
2ec55473a5 Add support expiration notice for Android 4.4 2021-10-04 14:13:09 +02:00
Sylvia van Os
2fe89ffcbc Merge pull request #448 from weblate/weblate-catima-catima
Translations update from Weblate
2021-10-04 07:38:09 +02:00
Allan Nordhøy
7e88a10884 Translated using Weblate (Russian)
Currently translated at 99.5% (219 of 220 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2021-10-04 07:32:30 +02:00
solokot
f260051160 Translated using Weblate (Russian)
Currently translated at 99.5% (219 of 220 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2021-10-04 07:24:49 +02:00
Allan Nordhøy
b8dacc2459 Translated using Weblate (English)
Currently translated at 100.0% (220 of 220 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/en/
2021-10-04 07:24:49 +02:00
Sylvia van Os
b311dd99dc Merge branch 'master' of https://hosted.weblate.org/git/catima/catima 2021-10-03 23:00:27 +02:00
Petr Novák
1d7a9843d8 Translated using Weblate (Czech)
Currently translated at 99.0% (218 of 220 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2021-10-03 22:57:01 +02:00
Sylvia van Os
03e59ad00f Make lint happy 2021-10-03 22:56:53 +02:00
Sylvia van Os
c083af1c76 Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2021-10-03 22:53:43 +02:00
Sylvia van Os
6abb0a2a75 Fix tests 2021-10-03 22:53:31 +02:00
Sylvia van Os
e672e7f1a6 Merge pull request #446 from weblate/weblate-catima-catima
Translations update from Weblate
2021-10-03 22:50:56 +02:00
Heimen Stoffels
852a638ea1 Translated using Weblate (Dutch)
Currently translated at 100.0% (220 of 220 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2021-10-03 22:50:04 +02:00
Petr Novák
ec1b642614 Translated using Weblate (Czech)
Currently translated at 22.8% (19 of 83 strings)

Translation: Catima/Fastlane
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2021-10-03 22:50:04 +02:00
solokot
145dac72af Translated using Weblate (Russian)
Currently translated at 95.9% (212 of 221 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ru/
2021-10-03 22:50:04 +02:00
Heimen Stoffels
7d2679b2a3 Translated using Weblate (Dutch)
Currently translated at 100.0% (221 of 221 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nl/
2021-10-03 22:50:04 +02:00
Petr Novák
ffbcd2183b Translated using Weblate (Czech)
Currently translated at 95.4% (211 of 221 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2021-10-03 22:50:04 +02:00
Sylvia van Os
b9d646868c Merge pull request #447 from TheLastProject/create-pull-request/patch-1633294115
Update Fastlane changelogs
2021-10-03 22:50:01 +02:00
TheLastProject
2ce530a644 Update Fastlane changelogs 2021-10-03 20:48:34 +00:00
Sylvia van Os
1c8e9ba1cf Fix CHANGELOG header 2021-10-03 22:48:15 +02:00
Sylvia van Os
9a2560dbc2 Fix translatable 2021-10-03 22:46:36 +02:00
Sylvia van Os
f900c4299d Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2021-10-03 22:44:05 +02:00
Sylvia van Os
f78494f882 Cleanups 2021-10-03 22:43:51 +02:00
Sylvia van Os
b55f10b59d Merge pull request #445 from weblate/weblate-catima-catima
Translations update from Weblate
2021-10-03 22:26:03 +02:00
Petr Novák
277ee90421 Translated using Weblate (Czech)
Currently translated at 20.4% (17 of 83 strings)

Translation: Catima/Fastlane
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2021-10-03 22:17:50 +02:00
Aditya Das
fcdde83038 feature/About-Page (#440) 2021-10-03 22:17:45 +02:00
Sylvia van Os
12fb29ecce Merge pull request #442 from TheLastProject/create-pull-request/patch-1633234512
Update contributors
2021-10-03 10:29:56 +02:00
TheLastProject
ae7dd63d6b Update contributors 2021-10-03 04:15:12 +00:00
Sylvia van Os
48f680f7bd Merge pull request #436 from TheLastProject/dependabot/gradle/com.journeyapps-zxing-android-embedded-4.2.0
Bump zxing-android-embedded from 4.1.0 to 4.2.0
2021-10-02 15:22:25 +02:00
dependabot[bot]
e3d4e393b3 Bump zxing-android-embedded from 4.1.0 to 4.2.0
Bumps [zxing-android-embedded](https://github.com/journeyapps/zxing-android-embedded) from 4.1.0 to 4.2.0.
- [Release notes](https://github.com/journeyapps/zxing-android-embedded/releases)
- [Changelog](https://github.com/journeyapps/zxing-android-embedded/blob/master/CHANGES.md)
- [Commits](https://github.com/journeyapps/zxing-android-embedded/commits)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-02 12:00:39 +00:00
Sylvia van Os
81f13c255a Merge pull request #435 from TheLastProject/dependabot/gradle/org.apache.commons-commons-csv-1.9.0
Bump commons-csv from 1.8 to 1.9.0
2021-10-02 13:59:50 +02:00
dependabot[bot]
97ce322d0c Bump commons-csv from 1.8 to 1.9.0
Bumps commons-csv from 1.8 to 1.9.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-csv
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-02 11:56:02 +00:00
Sylvia van Os
a3e876d9a2 Merge pull request #434 from TheLastProject/dependabot/gradle/net.lingala.zip4j-zip4j-2.9.0
Bump zip4j from 2.8.0 to 2.9.0
2021-10-02 13:55:22 +02:00
Rohan Babbar
234356f8f2 Modified to Android 12 Splash Screen (#430) 2021-10-02 13:44:41 +02:00
Sylvia van Os
d3222f7bdc Merge pull request #438 from weblate/weblate-catima-catima
Translations update from Weblate
2021-10-02 12:14:48 +02:00
Nyatsuki
a5658e72c7 Translated using Weblate (Japanese)
Currently translated at 98.5% (206 of 209 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ja/
2021-10-02 08:34:54 +02:00
dependabot[bot]
d1e1fcfabe Bump zip4j from 2.8.0 to 2.9.0
Bumps [zip4j](https://github.com/srikanth-lingala/zip4j) from 2.8.0 to 2.9.0.
- [Release notes](https://github.com/srikanth-lingala/zip4j/releases)
- [Commits](https://github.com/srikanth-lingala/zip4j/compare/v2.8.0...v2.9.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-01 22:24:58 +00:00
Sylvia van Os
9d6bd0770c Configure dependabot 2021-10-02 00:24:33 +02:00
Sylvia van Os
6f76ee389b Merge pull request #431 from weblate/weblate-catima-catima
Translations update from Weblate
2021-10-01 10:04:50 +02:00
mondstern
87aa74f231 Translated using Weblate (Danish)
Currently translated at 52.6% (110 of 209 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/da/
2021-09-30 23:35:10 +02:00
IllusiveMan196
a0dc80c1a5 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (209 of 209 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2021-09-30 23:35:09 +02:00
mondstern
d8dbe25a64 Translated using Weblate (Romanian)
Currently translated at 26.3% (55 of 209 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2021-09-30 23:35:08 +02:00
Sylvia van Os
e3bec085df Merge pull request #426 from weblate/weblate-catima-catima
Translations update from Weblate
2021-09-27 23:01:02 +02:00
mondstern
4d4b92b33f Translated using Weblate (Bosnian)
Currently translated at 21.6% (18 of 83 strings)

Translation: Catima/Fastlane
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/bs/
2021-09-27 22:39:12 +02:00
mondstern
cc58c769cc Translated using Weblate (Bosnian)
Currently translated at 56.4% (118 of 209 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bs/
2021-09-27 22:39:11 +02:00
IllusiveMan196
37f08f6fc4 Translated using Weblate (Ukrainian)
Currently translated at 100.0% (209 of 209 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/uk/
2021-09-27 22:39:10 +02:00
Sylvia van Os
73e02e7c06 Merge pull request #425 from weblate/weblate-catima-catima
Translations update from Weblate
2021-09-26 19:43:32 +02:00
mondstern
7a1b6fccc2 Translated using Weblate (Bosnian)
Currently translated at 20.0% (42 of 209 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bs/
2021-09-26 19:38:46 +02:00
Allan Nordhøy
2473e3f91a Translated using Weblate (Norwegian Bokmål)
Currently translated at 4.8% (4 of 83 strings)

Translation: Catima/Fastlane
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/nb_NO/
2021-09-26 19:38:45 +02:00
Allan Nordhøy
0a6bb2805c Translated using Weblate (Norwegian Bokmål)
Currently translated at 99.0% (207 of 209 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/nb_NO/
2021-09-26 19:38:45 +02:00
Sylvia van Os
1eecc6f065 Merge pull request #424 from TheLastProject/create-pull-request/patch-1632629697
Update contributors
2021-09-26 11:35:13 +02:00
TheLastProject
b8b4fe4958 Update contributors 2021-09-26 04:14:56 +00:00
Sylvia van Os
6dd8b6798b Merge pull request #423 from weblate/weblate-catima-catima
Translations update from Weblate
2021-09-25 23:50:30 +02:00
mondstern
69d0a3f4aa Added translation using Weblate (Bosnian) 2021-09-25 23:45:29 +02:00
Sylvia van Os
ce81934890 Merge pull request #422 from weblate/weblate-catima-catima
Translations update from Weblate
2021-09-25 22:58:07 +02:00
Oğuz Ersen
ba06f47e3e Translated using Weblate (Turkish)
Currently translated at 12.0% (10 of 83 strings)

Translation: Catima/Fastlane
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2021-09-25 16:38:09 +02:00
Sylvia van Os
cfc37d4af6 Merge pull request #419 from TheLastProject/create-pull-request/patch-1632573184
Update Fastlane changelogs
2021-09-25 14:33:36 +02:00
TheLastProject
43cd6edda2 Update Fastlane changelogs 2021-09-25 12:33:04 +00:00
Sylvia van Os
0bd262d82f Release Catima 2.6.1 2021-09-25 14:32:43 +02:00
Sylvia van Os
f09bafa104 Update contributors on schedule instead 2021-09-25 13:17:28 +02:00
Sylvia van Os
20e34ee365 Merge pull request #417 from TheLastProject/create-pull-request/patch-1632560906
Update contributors
2021-09-25 11:09:38 +02:00
TheLastProject
7a6bd8f661 Update contributors 2021-09-25 09:08:25 +00:00
Sylvia van Os
54c3765e36 Merge pull request #415 from weblate/weblate-catima-catima
Translations update from Weblate
2021-09-25 11:07:58 +02:00
J. Lavoie
4d7f563b0d Translated using Weblate (German)
Currently translated at 100.0% (209 of 209 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/de/
2021-09-25 11:06:49 +02:00
QuangDNguyen2211
4e0ecaa7be Changing Reverse button in sorting into a checkbox (#406) 2021-09-25 11:06:44 +02:00
Sylvia van Os
4f41d238eb Merge pull request #414 from weblate/weblate-catima-catima
Translations update from Weblate
2021-09-24 21:15:04 +02:00
mondstern
7c3d021427 Translated using Weblate (Romanian)
Currently translated at 18.6% (39 of 209 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/ro/
2021-09-24 20:35:55 +02:00
Sylvia van Os
bfde036484 Merge pull request #413 from TheLastProject/create-pull-request/patch-1632296753
Update contributors
2021-09-22 09:46:53 +02:00
TheLastProject
84ef4ad030 Update contributors 2021-09-22 07:45:52 +00:00
Sylvia van Os
3b85fccd60 Merge pull request #412 from weblate/weblate-catima-catima
Translations update from Weblate
2021-09-22 09:45:24 +02:00
Petr Novák
830d0f6e6a Translated using Weblate (Czech)
Currently translated at 6.0% (5 of 82 strings)

Translation: Catima/Fastlane
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/cs/
2021-09-22 09:35:00 +02:00
Petr Novák
1ceede27a3 Translated using Weblate (Czech)
Currently translated at 100.0% (209 of 209 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/cs/
2021-09-22 09:34:59 +02:00
Sylvia van Os
fa33cdaca4 Enable autoVerify for Android 12 on catima.app 2021-09-21 21:13:04 +02:00
Sylvia van Os
f39fbb55a1 Merge pull request #411 from TheLastProject/create-pull-request/patch-1632248508
Update contributors
2021-09-21 20:23:17 +02:00
TheLastProject
f3ffa0ab88 Update contributors 2021-09-21 18:21:48 +00:00
waffshappen
48e1fcc38e TargetSDK, Version Upgrades, Deprecations and XLint (#405)
* Updated TargetSdk, enabled showing Deprecations by default (Warn) and implement some replacements for deprecated Methods
2021-09-21 20:21:02 +02:00
Sylvia van Os
5b889c4c0c Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2021-09-20 23:00:31 +02:00
Sylvia van Os
616ca77c39 Fix possible crash
I don't think this should ever happen, unless someone manually edited
their import or DB, but this crash was logged in Google Play Console
anyway so...
2021-09-20 22:58:37 +02:00
Sylvia van Os
59bf064783 Merge pull request #404 from TheLastProject/create-pull-request/patch-1632167904
Update contributors
2021-09-20 21:59:46 +02:00
TheLastProject
220393c445 Update contributors 2021-09-20 19:58:24 +00:00
Sylvia van Os
b976c03fb0 Merge pull request #403 from weblate/weblate-catima-catima
Translations update from Weblate
2021-09-20 21:57:42 +02:00
mondstern
dad0493666 Translated using Weblate (Danish)
Currently translated at 34.4% (72 of 209 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/da/
2021-09-20 21:39:12 +02:00
109247019824
776613c507 Translated using Weblate (Bulgarian)
Currently translated at 3.6% (3 of 82 strings)

Translation: Catima/Fastlane
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/bg/
2021-09-20 21:39:11 +02:00
109247019824
7570d9d319 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (209 of 209 strings)

Translation: Catima/Catima
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2021-09-20 21:39:11 +02:00
Sylvia van Os
2e648d1062 Remove cat face everywhere 2021-09-19 15:46:00 +02:00
151 changed files with 1397 additions and 365 deletions

11
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,11 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "gradle" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "daily"

View File

@@ -1,11 +1,12 @@
name: Write contributors to file
on:
push:
branches: [ master ]
schedule:
- cron: '3 4 * * 0'
jobs:
contributors_to_file:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/master'
name: Write contributors to file
steps:
- name: Checkout repo

View File

@@ -1,5 +1,17 @@
# Changelog
## v2.7 - 85 (2021-10-05)
Android 4.4 is no longer supported starting with this release. If you want to use Catima on Android 4.4, please use version 2.6.1.
- Improved Android 12 support
- Improved about screen
- Search now ignores accents
## v2.6.1 - 84 (2021-09-25)
- Minor bugfixes and improvements
## v2.6.0 - 83 (2021-09-19)
- Support for changing the sorting order

View File

@@ -11,15 +11,15 @@ spotbugs {
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
compileSdkVersion 31
buildToolsVersion "31.0.0"
defaultConfig {
applicationId "me.hackerchick.catima"
minSdkVersion 19
targetSdkVersion 30
versionCode 83
versionName "2.6.0"
minSdkVersion 21
targetSdkVersion 31
versionCode 85
versionName "2.7.0"
vectorDrawables.useSupportLibrary true
multiDexEnabled true
@@ -80,21 +80,25 @@ android {
dependencies {
// AndroidX
implementation "androidx.multidex:multidex:2.0.1"
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.cardview:cardview:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
implementation 'androidx.exifinterface:exifinterface:1.3.3'
implementation 'androidx.preference:preference:1.1.1'
implementation 'com.google.android.material:material:1.4.0'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
// Splash Screen
implementation 'androidx.core:core-splashscreen:1.0.0-alpha02'
// Third-party
implementation 'com.journeyapps:zxing-android-embedded:4.1.0@aar'
implementation 'com.journeyapps:zxing-android-embedded:4.2.0@aar'
implementation 'com.google.zxing:core:3.4.1'
implementation 'org.apache.commons:commons-csv:1.8'
implementation 'org.apache.commons:commons-csv:1.9.0'
implementation 'com.jaredrummler:colorpicker:1.1.0'
implementation 'com.github.invissvenska:NumberPickerPreference:1.0.3'
implementation 'net.lingala.zip4j:zip4j:2.8.0'
implementation 'net.lingala.zip4j:zip4j:2.9.0'
// SpotBugs
implementation 'io.wcm.tooling.spotbugs:io.wcm.tooling.spotbugs.annotations:1.0.0'

View File

@@ -17,7 +17,7 @@
android:name="android.hardware.camera.autofocus"
android:required="false" />
<uses-sdk tools:overrideLibrary="com.google.zxing.client.android" />
<uses-sdk tools:overrideLibrary="com.google.zxing.client.android"/>
<application
android:name=".LoyaltyCardLockerApplication"
@@ -29,13 +29,15 @@
<activity
android:name="protect.card_locker.MainActivity"
android:label="@string/app_name"
android:theme="@style/SplashTheme">
android:theme="@style/Theme.App.Starting"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".AboutActivity"
android:label="@string/about"
@@ -56,19 +58,28 @@
android:theme="@style/AppTheme.NoActionBar"
android:windowSoftInputMode="stateHidden"
android:exported="true">
<intent-filter android:autoVerify="true" android:label="@string/app_name">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Main card sharing URIs -->
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="@string/intent_import_card_from_url_host_catima_app"
android:pathPrefix="@string/intent_import_card_from_url_path_prefix_catima_app" />
</intent-filter>
<intent-filter android:label="@string/app_name">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Listen to known card sharing URIs -->
<data android:scheme="https"
android:host="@string/intent_import_card_from_url_host_catima_app"
android:pathPrefix="@string/intent_import_card_from_url_path_prefix_catima_app" />
<data android:scheme="https"
android:host="@string/intent_import_card_from_url_host_thelastproject"
<!-- Old card sharing URIs -->
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="@string/intent_import_card_from_url_host_thelastproject"
android:pathPrefix="@string/intent_import_card_from_url_path_prefix_thelastproject" />
<data android:scheme="https"
android:host="@string/intent_import_card_from_url_host_brarcher"
<data android:host="@string/intent_import_card_from_url_host_brarcher"
android:pathPrefix="@string/intent_import_card_from_url_path_prefix_brarcher" />
</intent-filter>
</activity>
@@ -92,7 +103,8 @@
<activity
android:name=".CardShortcutConfigure"
android:label="@string/cardShortcut"
android:theme="@style/AppTheme.NoActionBar">
android:theme="@style/AppTheme.NoActionBar"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.CREATE_SHORTCUT"/>
<category android:name="android.intent.category.DEFAULT"/>

View File

@@ -1,11 +1,13 @@
package protect.card_locker;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import java.io.BufferedReader;
@@ -17,12 +19,15 @@ import java.util.Calendar;
import java.util.List;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.Toolbar;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.core.text.HtmlCompat;
public class AboutActivity extends CatimaAppCompatActivity
public class AboutActivity extends CatimaAppCompatActivity implements View.OnClickListener
{
private static final String TAG = "Catima";
ConstraintLayout version_history, translate, license, repo, privacy, error, credits, rate;
@Override
protected void onCreate(Bundle savedInstanceState)
@@ -93,39 +98,82 @@ public class AboutActivity extends CatimaAppCompatActivity
Log.w(TAG, "Package name not found", e);
}
TextView copyright = findViewById(R.id.credits_sub);
copyright.setText(String.format(getString(R.string.app_copyright_fmt), year));
TextView vHistory = findViewById(R.id.version_history_sub);
vHistory.setText(String.format(getString(R.string.debug_version_fmt), version));
setTitle(String.format(getString(R.string.about_title_fmt), appName));
TextView aboutTextView = findViewById(R.id.aboutText);
aboutTextView.setText(HtmlCompat.fromHtml(String.format(getString(R.string.debug_version_fmt), version) +
"<br/><br/>" +
String.format(getString(R.string.app_revision_fmt),
"<a href=\"" + getString(R.string.app_revision_url) + "\">" +
"GitHub" +
"</a>") +
"<br/><br/>" +
String.format(getString(R.string.app_copyright_fmt), year) +
"<br/><br/>" +
getString(R.string.app_copyright_old) +
"<br/><br/>" +
getString(R.string.app_license) +
"<br/><br/>" +
String.format(getString(R.string.app_contributors), contributors.toString()) +
"<br/><br/>" +
String.format(getString(R.string.app_libraries), libs.toString()) +
"<br/><br/>" +
String.format(getString(R.string.app_resources), resources.toString()), HtmlCompat.FROM_HTML_MODE_COMPACT));
aboutTextView.setMovementMethod(LinkMovementMethod.getInstance());
version_history = findViewById(R.id.version_history);
translate = findViewById(R.id.translate);
license = findViewById(R.id.license);
repo = findViewById(R.id.repo);
privacy = findViewById(R.id.privacy);
error = findViewById(R.id.report_error);
credits = findViewById(R.id.credits);
rate = findViewById(R.id.rate);
version_history.setOnClickListener(this);
translate.setOnClickListener(this);
license.setOnClickListener(this);
repo.setOnClickListener(this);
privacy.setOnClickListener(this);
error.setOnClickListener(this);
rate.setOnClickListener(this);
StringBuilder contributorInfo = new StringBuilder();
contributorInfo.append(HtmlCompat.fromHtml(String.format(getString(R.string.app_contributors), contributors.toString()), HtmlCompat.FROM_HTML_MODE_COMPACT));
contributorInfo.append("\n\n");
contributorInfo.append(getString(R.string.app_copyright_old));
contributorInfo.append("\n\n");
contributorInfo.append(HtmlCompat.fromHtml(String.format(getString(R.string.app_libraries), libs.toString()), HtmlCompat.FROM_HTML_MODE_COMPACT));
contributorInfo.append("\n\n");
contributorInfo.append(HtmlCompat.fromHtml(String.format(getString(R.string.app_resources), resources.toString()), HtmlCompat.FROM_HTML_MODE_COMPACT));
credits.setOnClickListener(view -> new AlertDialog.Builder(this)
.setTitle(R.string.credits)
.setMessage(contributorInfo.toString())
.setPositiveButton(R.string.ok, (dialogInterface, i) -> {})
.show());
}
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
int id = item.getItemId();
if (id == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onClick(View view) {
int id = view.getId();
String url;
if (id == R.id.version_history) {
url = "https://catima.app/changelog/";
} else if (id == R.id.translate) {
url = "https://hosted.weblate.org/engage/catima/";
} else if (id == R.id.license) {
url = "https://github.com/TheLastProject/Catima/blob/master/LICENSE";
} else if (id == R.id.repo) {
url = "https://github.com/TheLastProject/Catima/";
} else if (id == R.id.privacy) {
url = "https://catima.app/privacy-policy/";
} else if (id == R.id.report_error) {
url = "https://github.com/TheLastProject/Catima/issues";
} else if (id == R.id.rate) {
url = "https://play.google.com/store/apps/details?id=me.hackerchick.catima";
} else {
return;
}
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
}
}

View File

@@ -76,10 +76,6 @@ public class CardShortcutConfigure extends AppCompatActivity implements LoyaltyC
finish();
}
@Override
public void onIconClicked(int inputPosition) {
onClickAction(inputPosition);
}
@Override
public void onRowClicked(int inputPosition) {

View File

@@ -72,6 +72,12 @@ public class CatimaBarcode {
}
public String prettyName() {
return barcodePrettyNames.get(barcodeFormats.indexOf(mBarcodeFormat));
int index = barcodeFormats.indexOf(mBarcodeFormat);
if (index == -1 || index >= barcodePrettyNames.size()) {
return mBarcodeFormat.name();
}
return barcodePrettyNames.get(index);
}
}

View File

@@ -20,7 +20,7 @@ public class DBHelper extends SQLiteOpenHelper
{
public static final String DATABASE_NAME = "Catima.db";
public static final int ORIGINAL_DATABASE_VERSION = 1;
public static final int DATABASE_VERSION = 11;
public static final int DATABASE_VERSION = 12;
public static class LoyaltyCardDbGroups
{
@@ -54,6 +54,14 @@ public class DBHelper extends SQLiteOpenHelper
public static final String groupID = "groupId";
}
public static class LoyaltyCardDbFTS
{
public static final String TABLE = "fts";
public static final String ID = "rowid"; // This should NEVER be changed
public static final String STORE = "store";
public static final String NOTE = "note";
}
public enum LoyaltyCardOrder {
Alpha,
LastUsed,
@@ -78,13 +86,13 @@ public class DBHelper extends SQLiteOpenHelper
public void onCreate(SQLiteDatabase db)
{
// create table for card groups
db.execSQL("create table " + LoyaltyCardDbGroups.TABLE + "(" +
db.execSQL("CREATE TABLE " + LoyaltyCardDbGroups.TABLE + "(" +
LoyaltyCardDbGroups.ID + " TEXT primary key not null," +
LoyaltyCardDbGroups.ORDER + " INTEGER DEFAULT '0')");
// create table for cards
// Balance is TEXT and not REAL to be able to store a BigDecimal without precision loss
db.execSQL("create table " + LoyaltyCardDbIds.TABLE + "(" +
db.execSQL("CREATE TABLE " + LoyaltyCardDbIds.TABLE + "(" +
LoyaltyCardDbIds.ID + " INTEGER primary key autoincrement," +
LoyaltyCardDbIds.STORE + " TEXT not null," +
LoyaltyCardDbIds.NOTE + " TEXT not null," +
@@ -99,23 +107,26 @@ public class DBHelper extends SQLiteOpenHelper
LoyaltyCardDbIds.LAST_USED + " INTEGER DEFAULT '0')");
// create associative table for cards in groups
db.execSQL("create table " + LoyaltyCardDbIdsGroups.TABLE + "(" +
db.execSQL("CREATE TABLE " + LoyaltyCardDbIdsGroups.TABLE + "(" +
LoyaltyCardDbIdsGroups.cardID + " INTEGER," +
LoyaltyCardDbIdsGroups.groupID + " TEXT," +
"primary key (" + LoyaltyCardDbIdsGroups.cardID + "," + LoyaltyCardDbIdsGroups.groupID +"))");
// create FTS search table
db.execSQL("CREATE VIRTUAL TABLE " + LoyaltyCardDbFTS.TABLE + " USING fts4(" +
LoyaltyCardDbFTS.STORE + ", " + LoyaltyCardDbFTS.NOTE + ", " +
"tokenize=unicode61);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
// Upgrade from version 1 to version 2
if(oldVersion < 2 && newVersion >= 2)
{
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
+ " ADD COLUMN " + LoyaltyCardDbIds.NOTE + " TEXT not null default ''");
}
// Upgrade from version 2 to version 3
if(oldVersion < 3 && newVersion >= 3)
{
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
@@ -124,26 +135,23 @@ public class DBHelper extends SQLiteOpenHelper
+ " ADD COLUMN " + LoyaltyCardDbIds.HEADER_TEXT_COLOR + " INTEGER");
}
// Upgrade from version 3 to version 4
if(oldVersion < 4 && newVersion >= 4)
{
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
+ " ADD COLUMN " + LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0'");
}
// Upgrade from version 4 to version 5
if(oldVersion < 5 && newVersion >= 5)
{
db.execSQL("create table " + LoyaltyCardDbGroups.TABLE + "(" +
db.execSQL("CREATE TABLE " + LoyaltyCardDbGroups.TABLE + "(" +
LoyaltyCardDbGroups.ID + " TEXT primary key not null)");
db.execSQL("create table " + LoyaltyCardDbIdsGroups.TABLE + "(" +
db.execSQL("CREATE TABLE " + LoyaltyCardDbIdsGroups.TABLE + "(" +
LoyaltyCardDbIdsGroups.cardID + " INTEGER," +
LoyaltyCardDbIdsGroups.groupID + " TEXT," +
"primary key (" + LoyaltyCardDbIdsGroups.cardID + "," + LoyaltyCardDbIdsGroups.groupID +"))");
}
// Upgrade from version 5 to 6
if(oldVersion < 6 && newVersion >= 6)
{
db.execSQL("ALTER TABLE " + LoyaltyCardDbGroups.TABLE
@@ -219,7 +227,7 @@ public class DBHelper extends SQLiteOpenHelper
db.execSQL("DROP TABLE " + LoyaltyCardDbIds.TABLE);
db.execSQL("create table " + LoyaltyCardDbIds.TABLE + "(" +
db.execSQL("CREATE TABLE " + LoyaltyCardDbIds.TABLE + "(" +
LoyaltyCardDbIds.ID + " INTEGER primary key autoincrement," +
LoyaltyCardDbIds.STORE + " TEXT not null," +
LoyaltyCardDbIds.NOTE + " TEXT not null," +
@@ -269,6 +277,63 @@ public class DBHelper extends SQLiteOpenHelper
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
+ " ADD COLUMN " + LoyaltyCardDbIds.LAST_USED + " INTEGER DEFAULT '0'");
}
if(oldVersion < 12 && newVersion >= 12)
{
db.execSQL("CREATE VIRTUAL TABLE " + LoyaltyCardDbFTS.TABLE + " USING fts4(" +
LoyaltyCardDbFTS.STORE + ", " + LoyaltyCardDbFTS.NOTE + ", " +
"tokenize=unicode61);");
Cursor cursor = db.rawQuery("SELECT * FROM " + LoyaltyCardDbIds.TABLE + ";", null, null);
cursor.moveToFirst();
while (cursor.moveToNext()) {
LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(cursor);
insertFTS(db, loyaltyCard.id, loyaltyCard.store, loyaltyCard.note);
}
}
}
private ContentValues generateFTSContentValues(final int id, final String store, final String note) {
// FTS on Android is severely limited and can only search for word starting with a certain string
// So for each word, we grab every single substring
// This makes it possible to find Décathlon by searching both de and cat, for example
ContentValues ftsContentValues = new ContentValues();
StringBuilder storeString = new StringBuilder();
for (String word : store.split(" ")) {
for (int i = 0; i < word.length(); i++) {
storeString.append(word);
storeString.append(" ");
word = word.substring(1);
}
}
StringBuilder noteString = new StringBuilder();
for (String word : note.split(" ")) {
for (int i = 0; i < word.length(); i++) {
noteString.append(word);
noteString.append(" ");
word = word.substring(1);
}
}
ftsContentValues.put(LoyaltyCardDbFTS.ID, id);
ftsContentValues.put(LoyaltyCardDbFTS.STORE, storeString.toString());
ftsContentValues.put(LoyaltyCardDbFTS.NOTE, noteString.toString());
return ftsContentValues;
}
private void insertFTS(final SQLiteDatabase db, final int id, final String store, final String note) {
db.insert(LoyaltyCardDbFTS.TABLE, null, generateFTSContentValues(id, store, note));
}
private void updateFTS(final SQLiteDatabase db, final int id, final String store, final String note) {
db.update(LoyaltyCardDbFTS.TABLE, generateFTSContentValues(id, store, note),
whereAttrs(LoyaltyCardDbFTS.ID), withArgs(id));
}
public long insertLoyaltyCard(final String store, final String note, final Date expiry,
@@ -278,6 +343,9 @@ public class DBHelper extends SQLiteOpenHelper
final int starStatus, final Long lastUsed)
{
SQLiteDatabase db = getWritableDatabase();
db.beginTransaction();
// Card
ContentValues contentValues = new ContentValues();
contentValues.put(LoyaltyCardDbIds.STORE, store);
contentValues.put(LoyaltyCardDbIds.NOTE, note);
@@ -290,7 +358,15 @@ public class DBHelper extends SQLiteOpenHelper
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
return db.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
long id = db.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
// FTS
insertFTS(db, (int) id, store, note);
db.setTransactionSuccessful();
db.endTransaction();
return id;
}
public long insertLoyaltyCard(final SQLiteDatabase db, final String store,
@@ -300,6 +376,9 @@ public class DBHelper extends SQLiteOpenHelper
final Integer headerColor, final int starStatus,
final Long lastUsed)
{
db.beginTransaction();
// Card
ContentValues contentValues = new ContentValues();
contentValues.put(LoyaltyCardDbIds.STORE, store);
contentValues.put(LoyaltyCardDbIds.NOTE, note);
@@ -312,7 +391,15 @@ public class DBHelper extends SQLiteOpenHelper
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
return db.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
long id = db.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
// FTS
insertFTS(db, (int) id, store, note);
db.setTransactionSuccessful();
db.endTransaction();
return id;
}
public long insertLoyaltyCard(final SQLiteDatabase db, final int id, final String store,
@@ -322,6 +409,9 @@ public class DBHelper extends SQLiteOpenHelper
final Integer headerColor, final int starStatus,
final Long lastUsed)
{
db.beginTransaction();
// Card
ContentValues contentValues = new ContentValues();
contentValues.put(LoyaltyCardDbIds.ID, id);
contentValues.put(LoyaltyCardDbIds.STORE, store);
@@ -335,7 +425,15 @@ public class DBHelper extends SQLiteOpenHelper
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
return db.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
db.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
// FTS
insertFTS(db, id, store, note);
db.setTransactionSuccessful();
db.endTransaction();
return id;
}
public boolean updateLoyaltyCard(final int id, final String store, final String note,
@@ -345,6 +443,9 @@ public class DBHelper extends SQLiteOpenHelper
final Integer headerColor)
{
SQLiteDatabase db = getWritableDatabase();
db.beginTransaction();
// Card
ContentValues contentValues = new ContentValues();
contentValues.put(LoyaltyCardDbIds.STORE, store);
contentValues.put(LoyaltyCardDbIds.NOTE, note);
@@ -357,6 +458,13 @@ public class DBHelper extends SQLiteOpenHelper
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
int rowsUpdated = db.update(LoyaltyCardDbIds.TABLE, contentValues,
whereAttrs(LoyaltyCardDbIds.ID), withArgs(id));
// FTS
updateFTS(db, id, store, note);
db.setTransactionSuccessful();
db.endTransaction();
return (rowsUpdated == 1);
}
@@ -472,6 +580,11 @@ public class DBHelper extends SQLiteOpenHelper
whereAttrs(LoyaltyCardDbIdsGroups.cardID),
withArgs(id));
// Delete FTS table entries
db.delete(LoyaltyCardDbFTS.TABLE,
whereAttrs(LoyaltyCardDbFTS.ID),
withArgs(id));
// Also wipe card images associated with this card
try {
Utils.saveCardImage(mContext, null, id, true);
@@ -520,9 +633,7 @@ public class DBHelper extends SQLiteOpenHelper
* @param order
* @return Cursor
*/
public Cursor getLoyaltyCardCursor(final String filter, Group group, LoyaltyCardOrder order, LoyaltyCardOrderDirection direction) {
String actualFilter = String.format("%%%s%%", filter);
String[] selectionArgs = { actualFilter, actualFilter };
public Cursor getLoyaltyCardCursor(String filter, Group group, LoyaltyCardOrder order, LoyaltyCardOrderDirection direction) {
StringBuilder groupFilter = new StringBuilder();
String limitString = "";
@@ -536,7 +647,7 @@ public class DBHelper extends SQLiteOpenHelper
groupFilter.append("AND (");
for (int i = 0; i < allowedIds.size(); i++) {
groupFilter.append(LoyaltyCardDbIds.ID + " = ").append(allowedIds.get(i));
groupFilter.append(LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ID + " = ").append(allowedIds.get(i));
if (i != allowedIds.size() - 1) {
groupFilter.append(" OR ");
}
@@ -549,15 +660,16 @@ public class DBHelper extends SQLiteOpenHelper
String orderField = getFieldForOrder(order);
return db.rawQuery("select * from " + LoyaltyCardDbIds.TABLE +
" WHERE (" + LoyaltyCardDbIds.STORE + " LIKE ? " +
" OR " + LoyaltyCardDbIds.NOTE + " LIKE ? )" +
return db.rawQuery("SELECT " + LoyaltyCardDbIds.TABLE + ".* FROM " + LoyaltyCardDbIds.TABLE +
" JOIN " + LoyaltyCardDbFTS.TABLE +
" ON " + LoyaltyCardDbFTS.TABLE + "." + LoyaltyCardDbFTS.ID + " = " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ID +
(filter.isEmpty() ? " " : " AND " + LoyaltyCardDbFTS.TABLE + " MATCH ? ") +
groupFilter.toString() +
" ORDER BY " + LoyaltyCardDbIds.STAR_STATUS + " DESC, " +
" (CASE WHEN " + orderField + " IS NULL THEN 1 ELSE 0 END), " +
orderField + " COLLATE NOCASE " + getDbDirection(order, direction) + ", " +
LoyaltyCardDbIds.STORE + " COLLATE NOCASE ASC " +
limitString, selectionArgs, null);
" ORDER BY " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STAR_STATUS + " DESC, " +
" (CASE WHEN " + LoyaltyCardDbIds.TABLE + "." + orderField + " IS NULL THEN 1 ELSE 0 END), " +
LoyaltyCardDbIds.TABLE + "." + orderField + " COLLATE NOCASE " + getDbDirection(order, direction) + ", " +
LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STORE + " COLLATE NOCASE ASC " +
limitString, filter.isEmpty() ? null : new String[] { filter + '*' }, null);
}
public int getLoyaltyCardCount()
@@ -574,12 +686,13 @@ public class DBHelper extends SQLiteOpenHelper
*/
public int getLoyaltyCardCount(String filter)
{
String actualFilter = String.format("%%%s%%", filter);
if (filter.isEmpty()) {
return getLoyaltyCardCount();
}
SQLiteDatabase db = getReadableDatabase();
return (int) DatabaseUtils.queryNumEntries(db, LoyaltyCardDbIds.TABLE,
LoyaltyCardDbIds.STORE + " LIKE ? " +
" OR " + LoyaltyCardDbIds.NOTE + " LIKE ? ", withArgs(actualFilter, actualFilter));
return (int) DatabaseUtils.queryNumEntries(db, LoyaltyCardDbFTS.TABLE,
LoyaltyCardDbFTS.TABLE + " MATCH ? ", withArgs(filter + '*'));
}
/**

View File

@@ -128,7 +128,6 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
private void applyClickEvents(LoyaltyCardListItemViewHolder inputHolder, final int inputPosition)
{
inputHolder.mThumbnailContainer.setOnClickListener(inputView -> mListener.onIconClicked(inputPosition));
inputHolder.mRow.setOnClickListener(inputView -> mListener.onRowClicked(inputPosition));
inputHolder.mInformationContainer.setOnClickListener(inputView -> mListener.onRowClicked(inputPosition));
@@ -238,7 +237,6 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
public interface CardAdapterListener
{
void onIconClicked(int inputPosition);
void onRowClicked(int inputPosition);
void onRowLongClicked(int inputPosition);
}
@@ -249,7 +247,6 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
public TextView mStoreField, mNoteField, mBalanceField, mExpiryField;
public LinearLayout mInformationContainer;
public ImageView mCardIcon, mStarIcon;
public CardView mThumbnailContainer;
public MaterialCardView mRow;
public View mDivider;
public RelativeLayout mThumbnailFrontContainer, mThumbnailBackContainer;
@@ -257,7 +254,6 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
public LoyaltyCardListItemViewHolder(View inputView)
{
super(inputView);
mThumbnailContainer = inputView.findViewById(R.id.thumbnail_container);
mRow = inputView.findViewById(R.id.row);
mDivider = inputView.findViewById(R.id.info_divider);
mThumbnailFrontContainer = inputView.findViewById(R.id.thumbnail_front);

View File

@@ -12,6 +12,7 @@ import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.ImageDecoder;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
@@ -1087,7 +1088,12 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity
} else if (requestCode == Utils.CARD_IMAGE_FROM_FILE_FRONT || requestCode == Utils.CARD_IMAGE_FROM_FILE_BACK) {
Bitmap bitmap = null;
try {
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), intent.getData());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
ImageDecoder.Source image_source = ImageDecoder.createSource(getContentResolver(), intent.getData());
bitmap = ImageDecoder.decodeBitmap(image_source, (decoder, info, source) -> decoder.setMutableRequired(true));
} else {
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), intent.getData());
}
} catch (IOException e) {
Log.e(TAG, "Error getting data from image file");
e.printStackTrace();

View File

@@ -45,6 +45,7 @@ import androidx.appcompat.content.res.AppCompatResources;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.appcompat.widget.Toolbar;
import androidx.constraintlayout.widget.Guideline;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.core.widget.TextViewCompat;
import protect.card_locker.preferences.Settings;
@@ -192,7 +193,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
Drawable unwrappedIcon = AppCompatResources.getDrawable(this, active ? R.drawable.active_dot : R.drawable.inactive_dot);
assert unwrappedIcon != null;
Drawable wrappedIcon = DrawableCompat.wrap(unwrappedIcon);
DrawableCompat.setTint(wrappedIcon, getResources().getColor(R.color.iconColor));
DrawableCompat.setTint(wrappedIcon, ContextCompat.getColor(getApplicationContext(), R.color.iconColor));
return wrappedIcon;
}
@@ -468,7 +469,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
int expiryString = R.string.expiryStateSentence;
if(Utils.hasExpired(loyaltyCard.expiry)) {
expiryString = R.string.expiryStateSentenceExpired;
expiryView.setTextColor(getResources().getColor(R.color.alert));
expiryView.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.alert));
}
expiryView.setText(getString(expiryString, DateFormat.getDateInstance(DateFormat.LONG).format(loyaltyCard.expiry)));
expiryView.setTextSize(settings.getFontSizeMax(settings.getMediumFont()));
@@ -530,10 +531,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
{
window.getDecorView().setSystemUiVisibility(backgroundNeedsDarkIcons ? View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR : 0);
}
if(Build.VERSION.SDK_INT >= 21)
{
window.setStatusBarColor(Color.TRANSPARENT);
}
window.setStatusBarColor(Color.TRANSPARENT);
// Set shadow colour of store text so even same color on same color would be readable
storeName.setShadowLayer(1, 1, 1, backgroundNeedsDarkIcons ? Color.BLACK : Color.WHITE);

View File

@@ -16,6 +16,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.widget.CheckBox;
import android.widget.Toast;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
@@ -31,6 +32,7 @@ import androidx.appcompat.view.ActionMode;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat;
import androidx.core.splashscreen.SplashScreen;
import androidx.recyclerview.widget.RecyclerView;
import protect.card_locker.preferences.SettingsActivity;
@@ -181,8 +183,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
@Override
protected void onCreate(Bundle inputSavedInstanceState)
{
setTheme(R.style.AppTheme_NoActionBar);
super.onCreate(inputSavedInstanceState);
SplashScreen.installSplashScreen(this);
setTitle(R.string.app_name);
setContentView(R.layout.main_activity);
Toolbar toolbar = findViewById(R.id.toolbar);
@@ -396,16 +398,17 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
// We want the cardList to be visible regardless of the filtered match count
// to ensure that the noMatchingCardsText doesn't end up being shown below
// the keyboard
mCardList.setVisibility(View.VISIBLE);
mHelpText.setVisibility(View.GONE);
mNoGroupCardsText.setVisibility(View.GONE);
if(mAdapter.getItemCount() > 0)
{
mCardList.setVisibility(View.VISIBLE);
mNoMatchingCardsText.setVisibility(View.GONE);
}
else
{
if(!mFilter.isEmpty()) {
mCardList.setVisibility(View.GONE);
if (!mFilter.isEmpty()) {
// Actual Empty Search Result
mNoMatchingCardsText.setVisibility(View.VISIBLE);
mNoGroupCardsText.setVisibility(View.GONE);
@@ -458,14 +461,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
groupsTabLayout.setVisibility(View.VISIBLE);
}
private void openPrivacyPolicy() {
Intent browserIntent = new Intent(
Intent.ACTION_VIEW,
Uri.parse("https://catima.app/privacy-policy")
);
startActivity(browserIntent);
}
@Override
public boolean onCreateOptionsMenu(Menu inputMenu)
{
@@ -519,10 +514,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
if (id == R.id.action_sort)
{
TabLayout.Tab tab = ((TabLayout) findViewById(R.id.groups)).getTabAt(selectedTab);
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle(R.string.sort_by);
AtomicInteger currentIndex = new AtomicInteger();
List<DBHelper.LoyaltyCardOrder> loyaltyCardOrders = Arrays.asList(DBHelper.LoyaltyCardOrder.values());
for (int i = 0; i < loyaltyCardOrders.size(); i++) {
@@ -532,18 +523,29 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
}
}
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle(R.string.sort_by);
final View customLayout = getLayoutInflater().inflate(R.layout.sorting_option, null);
builder.setView(customLayout);
CheckBox ch = (CheckBox) customLayout.findViewById(R.id.checkBox_reverse);
ch.setChecked(mOrderDirection == DBHelper.LoyaltyCardOrderDirection.Descending);
builder.setSingleChoiceItems(R.array.sort_types_array, currentIndex.get(), (dialog, which) -> currentIndex.set(which));
builder.setPositiveButton(R.string.sort, (dialog, which) -> {
setSort(loyaltyCardOrders.get(currentIndex.get()), DBHelper.LoyaltyCardOrderDirection.Ascending);
if(ch.isChecked()) {
setSort(loyaltyCardOrders.get(currentIndex.get()), DBHelper.LoyaltyCardOrderDirection.Descending);
}
else {
setSort(loyaltyCardOrders.get(currentIndex.get()), DBHelper.LoyaltyCardOrderDirection.Ascending);
}
dialog.dismiss();
});
builder.setNeutralButton(R.string.reverse, (dialog, which) -> {
setSort(loyaltyCardOrders.get(currentIndex.get()), DBHelper.LoyaltyCardOrderDirection.Descending);
dialog.dismiss();
});
builder.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
AlertDialog dialog = builder.create();
dialog.show();
@@ -571,12 +573,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
return true;
}
if(id == R.id.action_privacy_policy)
{
openPrivacyPolicy();
return true;
}
if (id == R.id.action_about)
{
Intent i = new Intent(getApplicationContext(), AboutActivity.class);
@@ -720,16 +716,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
}
}
@Override
public void onIconClicked(int inputPosition)
{
if (mCurrentActionMode == null)
{
mCurrentActionMode = startSupportActionMode(mCurrentActionModeCallback);
}
toggleSelection(inputPosition);
}
@Override
public void onRowClicked(int inputPosition)

View File

@@ -8,6 +8,7 @@ import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.ImageDecoder;
import android.graphics.Matrix;
import android.os.Build;
import android.os.LocaleList;
@@ -105,7 +106,12 @@ public class Utils {
Bitmap bitmap;
try {
bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), intent.getData());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
ImageDecoder.Source image_source = ImageDecoder.createSource(context.getContentResolver(), intent.getData());
bitmap = ImageDecoder.decodeBitmap(image_source, (decoder, info, source) -> decoder.setMutableRequired(true));
} else {
bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), intent.getData());
}
} catch (IOException e) {
Log.e(TAG, "Error getting data from image file");
e.printStackTrace();

View File

@@ -1,7 +0,0 @@
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/ic_launcher_background"/>
<item android:gravity="center"
android:width="256dp"
android:height="256dp"
android:drawable="@drawable/ic_launcher_foreground" />
</layer-list>

View File

@@ -22,21 +22,333 @@
</com.google.android.material.appbar.AppBarLayout>
<LinearLayout
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="match_parent"
android:layout_marginTop="?attr/actionBarSize"
android:orientation="vertical"
android:padding="10dp">
<TextView
android:id="@+id/aboutText"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:linksClickable="true"
android:singleLine="false"
android:focusable="true" />
android:orientation="vertical">
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/version_history"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<TextView
android:id="@+id/version_history_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:padding="2dp"
android:text="@string/version_history"
android:textColor="@color/colorSecondaryText"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/version_history_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="2dp"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/version_history_main" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:fontFamily="sans-serif-medium"
android:text="@string/arrow"
android:textColor="@color/colorSecondaryText"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/credits"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<TextView
android:id="@+id/credits_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:padding="2dp"
android:text="@string/credits"
android:textColor="@color/colorSecondaryText"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/credits_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="2dp"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/credits_main" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:fontFamily="sans-serif-medium"
android:text="@string/arrow"
android:textColor="@color/colorSecondaryText"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/translate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<TextView
android:id="@+id/translate_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:padding="2dp"
android:text="@string/help_translate_this_app"
android:textColor="@color/colorSecondaryText"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:fontFamily="sans-serif-medium"
android:text="@string/arrow"
android:textColor="@color/colorSecondaryText"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/license"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<TextView
android:id="@+id/license_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:padding="2dp"
android:text="@string/license"
android:textColor="@color/colorSecondaryText"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/license_sub"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="2dp"
android:text="@string/app_license"
android:layout_marginEnd="20dp"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/license_main"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:fontFamily="sans-serif-medium"
android:text="@string/arrow"
android:textColor="@color/colorSecondaryText"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/repo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<TextView
android:id="@+id/repo_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:padding="2dp"
android:text="@string/source_repository"
android:textColor="@color/colorSecondaryText"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/repo_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="2dp"
android:text="@string/on_github"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/repo_main" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:fontFamily="sans-serif-medium"
android:text="@string/arrow"
android:textColor="@color/colorSecondaryText"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/privacy"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<TextView
android:id="@+id/privacy_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:padding="2dp"
android:text="@string/privacy_policy"
android:textColor="@color/colorSecondaryText"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/privacy_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="2dp"
android:text="@string/and_data_usage"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/privacy_main" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:fontFamily="sans-serif-medium"
android:text="@string/arrow"
android:textColor="@color/colorSecondaryText"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/rate"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<TextView
android:id="@+id/rate_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:padding="2dp"
android:text="@string/rate_this_app"
android:textColor="@color/colorSecondaryText"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/rate_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="2dp"
android:text="@string/on_google_play"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/rate_main" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:fontFamily="sans-serif-medium"
android:text="@string/arrow"
android:textColor="@color/colorSecondaryText"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:padding="8dp"
android:id="@+id/report_error"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/report_error_main"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-medium"
android:padding="2dp"
android:text="@string/report_error"
android:textColor="@color/colorSecondaryText"
android:textSize="18sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/report_error_sub"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/report_error_main"
app:layout_constraintStart_toStartOf="parent"
android:textSize="16sp"
android:text="@string/on_github"
android:padding="2dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:fontFamily="sans-serif-medium"
android:text="@string/arrow"
android:textColor="@color/colorSecondaryText"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</LinearLayout>
</ScrollView>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<CheckBox
android:id="@+id/checkBox_reverse"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:paddingLeft="20dp"
android:text="@string/reverse"
android:textSize="19sp"/>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -27,10 +27,6 @@
android:id="@+id/action_settings"
android:title="@string/settings"
app:showAsAction="never"/>
<item
android:id="@+id/action_privacy_policy"
android:title="@string/privacy_policy"
app:showAsAction="never"/>
<item
android:id="@+id/action_about"
android:title="@string/about"

View File

@@ -10,20 +10,21 @@ Gediminas Murauskas
IllusiveMan196
Joel A
Samantaz Fox
Nyatsuki
arno-github
Sergio Paredes
Nyatsuki
StoyanDimitrov
arshbeerSingh
Oğuz Ersen
Petr Novák
arshbeerSingh
huuhaa
Michael Moroni
Petr Novák
betsythefc
K. Herbert
Quentin PAGÈS
String E. Fighter
Yurical
waffshappen
Adolfo Jayme-Barrientos
Alessandro Mandelli
KovalevArtem
@@ -37,7 +38,6 @@ schirinowski
inesre
lgasp
phlostically
waffshappen
Kevin Sicong Jiang
Miha Frangež
Airat
@@ -51,6 +51,8 @@ Maciej Błędkowski
Mattia
pbeckmann
Peer Beckmann
QuangDNguyen2211
Rohan Babbar
Rose Liverman
Simone Dotto
Subhashish Anand

View File

@@ -190,4 +190,12 @@
<string name="noGroupCards">Тази група не съдържа карти</string>
<string name="toggleMoreInfo">Превключване на повече информация</string>
<string name="barcodeImageDescriptionWithType">Изображение на щрихкод на карта от вида <xliff:g>%s</xliff:g></string>
<string name="swipeToSwitchImages">Плъзване или задържане за смяна на изображения</string>
<string name="sort_by">Сортиране по</string>
<string name="reverse">Наобратно</string>
<string name="sort_by_balance">Наличност</string>
<string name="sort_by_expiry">Валидност</string>
<string name="sort_by_most_recently_used">Последно използване</string>
<string name="sort_by_name">Наименование</string>
<string name="sort">Сортиране</string>
</resources>

View File

@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="save">Snimi</string>
<string name="cancel">Odustani</string>
<string name="unstar">Ukloni sve omiljene</string>
<string name="star">Omiljene</string>
<string name="barcodeNoBarcode">Ova kartica nema barkode</string>
<string name="barcodeType">Barcode tip</string>
<string name="note">Bilježnica</string>
<string name="storeName">Ime</string>
<string name="noMatchingGiftCards">Nisam našao ništa. Pokušaj promijeniti pretragu.</string>
<string name="noGiftCards">Kliknite + Plus dugme da dodate kartu ili uvozite nešto iz menija prvo.</string>
<string name="action_add">Dodaj</string>
<string name="all">Sve</string>
<string name="noGroupCards">Ova grupa ne sadrži nikakve karte</string>
<string name="noGroups">Kliknite + Plus dugme da dodate grupe za kategorizaciju prvo.</string>
<string name="groups">Grupe</string>
<string name="enter_group_name">Unesite ime grupe</string>
<string name="exportSuccessful">Podaci o kartama izvožen</string>
<string name="importSuccessful">Uvezeni podaci o kartama</string>
<string name="intent_import_card_from_url_share_text">Želim podijeliti čestitku s tobom</string>
<string name="settings_disable_lockscreen_while_viewing_card">Spriječi zaključavanje ekrana</string>
<string name="settings_keep_screen_on">Zadrži ekran</string>
<string name="settings_lock_barcode_orientation">Zaključaj barcode orjentacija</string>
<string name="settings_max_font_size_scale">Max. veliäťina fonta</string>
<string name="settings_light_theme">Svjetlo</string>
<string name="settings_system_theme">Sistem</string>
<string name="settings_theme">Tema</string>
<string name="settings_category_title_ui">Korisničko okruženje</string>
<string name="starImage">Omiljena zvijezda</string>
<string name="importCatima">Uvezi iz Catima</string>
<string name="importLoyaltyCardKeychain">Uvezi iz Loyalty Card Keychain</string>
<string name="importStocard">Uvezi iz Stokarda</string>
<string name="importVoucherVault">Uvezi iz trezora vaučer</string>
<string name="barcodeId">Barcode vrijednost</string>
<string name="sameAsCardId">Isto kao i kartica</string>
<string name="setBarcodeId">Postavi vrijednost za bar kod</string>
<string name="unsupportedBarcodeType">Ovaj bar kod još nije prikazan. Ona može biti podržana u kasnijoj verziji app.</string>
<string name="wrongValueForBarcodeType">Izabrana vrijednost nije izvršna</string>
<string name="copy_to_clipboard_multiple_toast">IDs kartica kopiran u clipboard</string>
<string name="intent_import_card_from_url_share_multiple_text">Želim podijeliti karte s tobom</string>
<string name="frontImageDescription">Slika kartice</string>
<string name="backImageDescription">Slika pozadine kartice</string>
<string name="photos">Slike</string>
<string name="setFrontImage">Postavi naslovnu sliku</string>
<string name="setBackImage">Vrati sliku</string>
<string name="removeImage">Ukloni sliku</string>
<string name="takePhoto">Slikaj</string>
<string name="updateBarcodeQuestionTitle">Ažurirati bar kod vrijednost\?</string>
<string name="updateBarcodeQuestionText">Promijenio si auto. Da li želite ažurirati bar kod koristiti istu vrijednost\?</string>
<string name="yes">Da</string>
<string name="no">Ne.</string>
<string name="passwordRequired">Upišite šifru</string>
<string name="failedGeneratingShareURL">Ne mogu generisati oštriji URL. Molim vas, prijavite ovo.</string>
<string name="turn_flashlight_on">Upali lampu</string>
<string name="turn_flashlight_off">Ugasi lampu</string>
<string name="settings_locale">Jezik</string>
<string name="settings_system_locale">Sistem</string>
<string name="settings_theme_color">Boja teme</string>
<string name="settings_catima_theme">Catima</string>
<string name="settings_pink_theme">Ružičasto</string>
<string name="settings_magenta_theme">Ljubičasto</string>
<string name="settings_violet_theme">Ljubičasto</string>
<string name="settings_blue_theme">Plavo</string>
<string name="settings_sky_blue_theme">Nebo plavo</string>
<string name="settings_green_theme">Zeleno</string>
<string name="settings_brown_theme">Braun</string>
<string name="sort">Poništi sortiranje</string>
<string name="toggleMoreInfo">Uključi savjete</string>
<string name="swipeToSwitchImages">Swipe ili long press za prebacivanje slika</string>
<string name="sort_by_name">Ime</string>
<string name="sort_by_most_recently_used">Nedavno Korišten</string>
<string name="sort_by_expiry">Sajam</string>
<string name="reverse">Rikverc</string>
<string name="sort_by">Sortiraj</string>
<string name="noCardExistsError">Nisam mogao pronaći karticu</string>
<string name="noStoreError">Nije uneseno ime</string>
<string name="card_ids_copied">Kopiran ID kartice(s)</string>
<string name="noCardsMessage">Dodaj prvo kartu</string>
<string name="addCardTitle">Dodaj Kartu</string>
<string name="editCardTitle">Izmijeni Karticu</string>
<string name="sendLabel">Pošalji…</string>
<string name="share">Podijeli</string>
<string name="copy_to_clipboard">Kopiraj ID u clipboard</string>
<string name="deleteConfirmation">Izbriši trajno ovu karticu\?</string>
<string name="unlockScreen">Odblokalna Rotacija</string>
<string name="confirm">Potvrdi</string>
<string name="delete">Obriši</string>
<string name="edit">Izmijeni</string>
</resources>

View File

@@ -37,7 +37,7 @@
<string name="importOptionApplicationExplanation">K otevření souboru použijte libovolnou aplikaci nebo svého oblíbeného správce souborů.</string>
<string name="importOptionApplicationButton">Použijte jinou aplikaci</string>
<string name="about">O aplikaci</string>
<string name="app_license">Copylefted libre software, licencovaný GPLv3+.</string>
<string name="app_license">Copylefted libre software, licencovaný GPLv3+</string>
<string name="about_title_fmt">O aplikaci <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Verze: <xliff:g id="version">%s</xliff:g></string>
<string name="app_revision_fmt">Informace o revizi: <xliff:g id="app_revision_url">%s</xliff:g></string>
@@ -55,7 +55,7 @@
<string name="app_resources">Zdroje třetích stran Libre: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_libraries">Libre knihovny třetích stran: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_copyright_old">Na základě Loyalty Card Keychain
\ncopyright © 20162020 Branden Archer.</string>
\ncopyright © 20162020 Branden Archer</string>
<string name="exportOptionExplanation">Data budou zapsána na místo podle vašeho výběru.</string>
<string name="failedParsingImportUriError">Nelze analyzovat import URI</string>
<string name="noCardExistsError">Nelze najít kartu</string>
@@ -184,7 +184,7 @@
<string name="exportSuccessful">Data karty exportována</string>
<string name="settings_display_barcode_max_brightness">Rozjasněné zobrazení čárového kódu</string>
<string name="starImage">Oblíbená hvězda</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019<xliff:g>%d</xliff:g> Sylvia van Os.</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019<xliff:g>%d</xliff:g> Sylvia van Os</string>
<plurals name="selectedCardCount">
<item quantity="one">Vybrána <xliff:g>%d</xliff:g> karta</item>
<item quantity="few">Vybrány <xliff:g>%d</xliff:g> karty</item>
@@ -192,4 +192,24 @@
</plurals>
<string name="app_contributors">Přispěli: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="noGroupCards">Tato skupina neobsahuje žádné karty</string>
<string name="sort_by">Seřadit podle</string>
<string name="reverse">Obrátit</string>
<string name="sort_by_balance">Zůstatek</string>
<string name="sort_by_expiry">Vypršení</string>
<string name="sort_by_most_recently_used">Naposledy použité</string>
<string name="sort_by_name">Název</string>
<string name="swipeToSwitchImages">Přejetím nebo dlouhým stisknutím přepínáte obrázky</string>
<string name="toggleMoreInfo">Přepnout zobrazení dalších informací</string>
<string name="sort">Seřadit</string>
<string name="barcodeImageDescriptionWithType">Obrázek čárového kódu karty typu <xliff:g>%s</xliff:g></string>
<string name="version_history">Historie verzí</string>
<string name="rate_this_app">Ohodnoťte tuto aplikaci</string>
<string name="and_data_usage">a využití dat</string>
<string name="credits">Kredity</string>
<string name="on_github">na GitHubu</string>
<string name="source_repository">Úložiště zdrojů</string>
<string name="license">Licence</string>
<string name="help_translate_this_app">Pomozte s překladem této aplikace</string>
<string name="report_error">Nahlásit chybu</string>
<string name="on_google_play">na Google Play</string>
</resources>

View File

@@ -36,4 +36,54 @@
</plurals>
<string name="action_add">Tilføj</string>
<string name="action_search">Søg</string>
<string name="importExport">Import/eksport</string>
<string name="exportName">Eksport</string>
<string name="importExportHelp">Hvis du sikkerhedskopierer dine kort, kan du flytte dem til en anden enhed.</string>
<string name="importSuccessfulTitle">Importeret</string>
<string name="importFailedTitle">Import mislykkedes</string>
<string name="importFailed">Kunne ikke importere kort</string>
<string name="exportSuccessfulTitle">Eksporteret</string>
<string name="exportFailedTitle">Eksport mislykkedes</string>
<string name="exportFailed">Kunne ikke eksportere kort</string>
<string name="importing">Importere…</string>
<string name="exporting">Eksportere…</string>
<string name="settings_dark_theme">Mørk</string>
<string name="settings_light_theme">Lys</string>
<string name="settings_theme">Tema</string>
<string name="settings_category_title_ui">Brugergrænseflade</string>
<string name="settings">Indstillinger</string>
<string name="starImage">Favorit stjerne</string>
<string name="thumbnailDescription">Miniaturebillede til kort</string>
<string name="copy_to_clipboard_toast">Kort-ID kopieret til udklipsholderen</string>
<string name="enterBarcodeInstructions">Indtast kortets ID, og vælg enten kortets stregkodetype nedenfor, eller \"Dette kort har ingen stregkode\".</string>
<string name="selectBarcodeTitle">Vælg stregkode</string>
<string name="app_copyright_old">Baseret på Loyalty Card Keychain
\ncopyright © 2016-2020 Branden Archer.</string>
<string name="about">Om</string>
<string name="importOptionApplicationButton">Brug en anden app</string>
<string name="importOptionApplicationExplanation">Brug en hvilken som helst app eller din foretrukne filhåndtering til at åbne en fil.</string>
<string name="importOptionApplicationTitle">Brug en anden app</string>
<string name="noCardsMessage">Tilføj først et kort</string>
<string name="cardShortcut">Kort genvej</string>
<string name="importOptionFilesystemButton">Fra filsystemet</string>
<string name="importOptionFilesystemExplanation">Vælg en bestemt fil fra filsystemet.</string>
<string name="importOptionFilesystemTitle">Import fra filsystem</string>
<string name="exportOptionExplanation">Dataene skrives til en placering efter eget valg.</string>
<string name="noExternalStoragePermissionError">Giv først tilladelse til ekstern lagring til at importere eller eksportere kort</string>
<string name="failedParsingImportUriError">Kunne ikke analysere import-URI\'en</string>
<string name="noCardExistsError">Kunne ikke finde kort</string>
<string name="noCardIdError">Der er ikke angivet noget kort-ID</string>
<string name="noStoreError">Intet navn angivet</string>
<string name="deleteConfirmationGroup">Slet gruppe\?</string>
<string name="all">Alle</string>
<string name="noGroupCards">Denne gruppe indeholder ikke nogen kort</string>
<string name="noGroups">Klik på + plus-knappen for først at tilføje grupper til kategorisering.</string>
<string name="groups">Grupper</string>
<string name="enter_group_name">Indtast gruppenavn</string>
<string name="exportSuccessful">Eksporterede kortdata</string>
<string name="importSuccessful">Kortdata importeret</string>
<string name="intent_import_card_from_url_share_text">Jeg vil dele et kort med jer</string>
<string name="settings_disable_lockscreen_while_viewing_card">Forebyg låseskærm</string>
<string name="settings_keep_screen_on">LHold skærm tændt</string>
<string name="settings_lock_barcode_orientation">Lås stregkode-orientering</string>
</resources>

View File

@@ -63,7 +63,7 @@
<string name="settings_dark_theme">Dunkel</string>
<string name="settings_light_theme">Hell</string>
<string name="settings_system_theme">System</string>
<string name="settings_theme">Theme</string>
<string name="settings_theme">Farbschema</string>
<string name="enterBarcodeInstructions">Gib die Kartennummer ein und wähle entweder den Barcode-Typ unten oder wähle \"Diese Karte hat keinen Barcode\" aus.</string>
<string name="app_copyright_old">Basierend auf Loyalty Card Keychain
\nCopyright © 2016-2020 Branden Archer.</string>

View File

@@ -42,7 +42,7 @@
<string name="importOptionApplicationExplanation">Utilisez le gestionnaire de fichiers de votre choix pour importer un fichier.</string>
<string name="importOptionApplicationButton">Utiliser une autre application</string>
<string name="about">À propos</string>
<string name="app_license">Logiciel libre à copyleft, sous licence GPLv3+.</string>
<string name="app_license">Logiciel libre à copyleft, sous licence GPLv3+</string>
<string name="about_title_fmt">À propos de <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Version : <xliff:g id="version">%s</xliff:g></string>
<string name="app_revision_fmt">Notes de version : <xliff:g id="app_revision_url">%s</xliff:g></string>
@@ -62,7 +62,7 @@
<string name="settings_theme">Thème</string>
<string name="enterBarcodeInstructions">Entrez lidentifiant de la carte et choisissez le type de code-barres ci-dessous, ou « Cette carte na pas de code-barres ».</string>
<string name="app_copyright_old">Basé sur Loyalty Card Keychain
\ncopyright © 2016-2020 Branden Archer.</string>
\ncopyright © 2016-2020 Branden Archer</string>
<string name="exportOptionExplanation">Les données seront exportées vers l\'emplacement de votre choix.</string>
<string name="failedParsingImportUriError">Impossible d\'analyser l\'URI d\'importation</string>
<string name="share">Partager</string>
@@ -116,16 +116,16 @@
<string name="settings_disable_lockscreen_while_viewing_card">Empêcher le verrouillage de lécran</string>
<string name="settings_keep_screen_on">Garder lécran allumé</string>
<string name="importVoucherVaultMessage">Sélectionnez votre exportation <i>vouchervault.json</i> de Voucher Vault à importer.
\nOu créez-la en appuyant dabord sur Exporter dans Voucher Vault.</string>
\nCréez-la en appuyant dabord sur Exporter dans Voucher Vault.</string>
<string name="importVoucherVault">Importer depuis Voucher Vault</string>
<string name="importLoyaltyCardKeychainMessage">Sélectionnez votre exportation <i>LoyaltyCardKeychain.csv</i> à partir de Loyalty Card Keychain pour limporter.
\nOu créez-la à partir du menu Importer/Exporter du Loyalty Card Keychain en appuyant dabord sur Exporter.</string>
\nCréez-la à partir du menu Importer/Exporter du Loyalty Card Keychain en appuyant dabord sur Exporter.</string>
<string name="importLoyaltyCardKeychain">Importer depuis Loyalty Card Keychain</string>
<string name="importFidmeMessage">Sélectionnez votre exportation <i>fidme-export-request-xxxxxx.zip</i> de FidMe pour limporter, puis sélectionnez manuellement les types de codes-barres.
\nOu créez-la à partir de votre profil FidMe en choisissant Protection des données, puis en cliquant sur Extraire mes données dabord.</string>
\nCréez-la à partir de votre profil FidMe en choisissant Protection des données, puis en cliquant sur Extraire mes données dabord.</string>
<string name="importFidme">Importer depuis FidMe</string>
<string name="importCatimaMessage">Sélectionnez votre exportation <i>catima.zip</i> depuis Catima à importer.
\nOu créez-la à partir du menu Importer/Exporter dune autre application Catima en appuyant dabord sur Exporter.</string>
\nCréez-la à partir du menu Importer/Exporter dune autre application Catima en appuyant dabord sur Exporter.</string>
<string name="importCatima">Importer depuis Catima</string>
<string name="addFromImage">Sélectionner dans la galerie</string>
<string name="errorReadingImage">Impossible de lire l\'image</string>
@@ -138,7 +138,7 @@
<string name="wrongValueForBarcodeType">La valeur n\'est pas valide pour le type de code-barres sélectionné</string>
<string name="app_resources">Ressources tierces libres : <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_libraries">Bibliothèques tierces libres : <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019<xliff:g>%d</xliff:g> Sylvia van Os.</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019<xliff:g>%d</xliff:g> Sylvia van Os</string>
<string name="intent_import_card_from_url_share_multiple_text">Je veux partager des cartes avec vous</string>
<string name="copy_to_clipboard_multiple_toast">Identifiants des cartes copiés dans le presse-papiers</string>
<string name="card_ids_copied">Num. de la carte copié(s)</string>
@@ -155,7 +155,7 @@
<string name="frontImageDescription">Image recto de la carte</string>
<string name="passwordRequired">Veuillez entrer le mot de passe</string>
<string name="importStocardMessage">Sélectionnez votre exportation <i>***-sync.zip</i> de Stocard pour limporter.
\nVous pouvez aussi lobtenir en envoyant un courriel à support@stocardapp.com pour demander une exportation de vos données.</string>
\nVous pouvez lobtenir en envoyant un courriel à support@stocardapp.com pour demander une exportation de vos données.</string>
<string name="importStocard">Importer depuis Stocard</string>
<string name="turn_flashlight_off">Éteindre la lampe de poche</string>
<string name="turn_flashlight_on">Allumer la lampe de poche</string>
@@ -198,4 +198,14 @@
<string name="sort_by_most_recently_used">Les plus récemment utilisées</string>
<string name="sort_by_name">Nom</string>
<string name="sort_by_balance">Solde</string>
<string name="report_error">Signaler une erreur</string>
<string name="on_google_play">sur Google Play</string>
<string name="rate_this_app">Notez cette app</string>
<string name="and_data_usage">utilisation des données</string>
<string name="on_github">sur GitHub</string>
<string name="source_repository">Dépôt source</string>
<string name="license">Licence</string>
<string name="help_translate_this_app">Aidez à traduire cette app</string>
<string name="credits">Contributeurs</string>
<string name="version_history">Historique des versions</string>
</resources>

View File

@@ -187,4 +187,10 @@
<string name="settings_locale">言語</string>
<string name="noGroupCards">このグループにはカードがありません</string>
<string name="swipeToSwitchImages">画像を切り替えるには長押し、またはスワイプ</string>
<string name="sort_by">並び替え</string>
<string name="sort_by_balance">残高</string>
<string name="sort_by_expiry">期限</string>
<string name="sort_by_most_recently_used">最近使用したカード</string>
<string name="sort_by_name">名前</string>
<string name="sort">ソート</string>
</resources>

View File

@@ -11,7 +11,7 @@
<string name="edit">Rediger</string>
<string name="delete">Slett</string>
<string name="confirm">Bekreft</string>
<string name="lockScreen">Ingen rotering</string>
<string name="lockScreen">Skru av rotering</string>
<string name="unlockScreen">Skru på rotering</string>
<string name="ok">OK</string>
<string name="copy_to_clipboard">Kopier ID til utklippstavle</string>
@@ -24,7 +24,7 @@
<string name="noStoreError">Navn ikke angitt</string>
<string name="noCardIdError">Ingen kort-ID innskrevet</string>
<string name="noCardExistsError">Kunne ikke finne kort</string>
<string name="importExport">Import/eksport</string>
<string name="importExport">Importer/eksporter</string>
<string name="exportName">Eksporter</string>
<string name="importExportHelp">Sikkerhetskopiering av kort lar deg flytte dem til en annen enhet.</string>
<string name="importSuccessfulTitle">Importert</string>
@@ -40,11 +40,11 @@
<string name="importOptionFilesystemTitle">Importer fra filsystem</string>
<string name="importOptionFilesystemExplanation">Velg spesifikk fil fra filsystemet.</string>
<string name="importOptionFilesystemButton">Fra filsystem</string>
<string name="importOptionApplicationTitle">Bruk et annet program</string>
<string name="importOptionApplicationExplanation">Bruk hvilket som helst program, eller din favoritt-filutforsker for å åpne en fil.</string>
<string name="importOptionApplicationButton">Bruk et annet program</string>
<string name="importOptionApplicationTitle">Bruk en annen app</string>
<string name="importOptionApplicationExplanation">Bruk en hvilken som helst app, eller din favoritt-filutforsker for å åpne en fil.</string>
<string name="importOptionApplicationButton">Bruk en annen app</string>
<string name="about">Om</string>
<string name="app_license">Gemenhetslig fri programvare, lisensiert GPLv3+.</string>
<string name="app_license">Copyleft fri programvare, lisensiert under GPLv3+.</string>
<string name="about_title_fmt">Om <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Versjon: <xliff:g id="version">%s</xliff:g></string>
<string name="app_revision_fmt">Utgivelsesinfo: <xliff:g id="app_revision_url">%s</xliff:g></string>
@@ -74,13 +74,13 @@
<string name="unstar">Fjern fra favoritter</string>
<string name="star">Legg til i favoritter</string>
<string name="noGroups">Klikk på «+»- (pluss)-tegnet for å legge til grupper for kategorisering først.</string>
<string name="deleteConfirmationGroup">Slett gruppe\?</string>
<string name="deleteConfirmationGroup">Slett gruppe?</string>
<string name="all">Alle</string>
<string name="groups">Grupper</string>
<string name="enter_group_name">Skriv inn gruppenavn</string>
<string name="noBarcode">Ingen strekkode</string>
<string name="failedOpeningFileManager">Installer en filbehandler først.</string>
<string name="leaveWithoutSaveConfirmation">Forlat uten å lagre\?</string>
<string name="leaveWithoutSaveConfirmation">Forlat uten å lagre?</string>
<string name="leaveWithoutSaveTitle">Avslutt</string>
<string name="addManually">Skriv inn kort-ID manuelt</string>
<string name="moveDown">Flytt nedover</string>
@@ -106,13 +106,13 @@
<string name="balance">Saldo</string>
<string name="balancePoints"><xliff:g>%s</xliff:g> poeng</string>
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
<string name="chooseImportType">Importer data fra\?</string>
<string name="chooseImportType">Importer data fra?</string>
<string name="app_loyalty_card_keychain">Kundekortknippe</string>
<string name="settings_disable_lockscreen_while_viewing_card">Forhindre skjermlås</string>
<string name="settings_keep_screen_on">Behold skjerm påslått</string>
<string name="privacy_policy_popup_text">Personvernspraksis-notis (påkrevd av noen programbutikker):
\n
\nINGEN DATA SAMLES INN, noe alle kan bekreftes siden programmet vårt er fri programvare.</string>
\nINGEN DATA SAMLES INN I DET HELE TATT, noe alle kan bekreftes siden programmet vårt er fri programvare.</string>
<string name="accept">Godta</string>
<string name="privacy_policy">Personvernspraksis</string>
<string name="importFidme">Importer fra FidMe</string>
@@ -132,8 +132,6 @@
<string name="importLoyaltyCardKeychain">Importer fra Kundekortknippe</string>
<string name="importFidmeMessage">Velg din <i>fidme-eksport-be-xxxxxx.zip</i> eksporter fra FidMe til å importere, og velg strekkode typer manuelt etterpå.
\nEller lage den fra FidMe profil ved å velge Beskyttelse av Data og deretter trykke Trekke ut dataene mine første.</string>
<string name="importCatimaMessage">Finn en fil som antagelig heter <i>Catima.csv</i> å importere.
\nEller opprett den i Import/eksport-menyen i et annet Catima-program ved å trykke «Eksporter» der først.</string>
<string name="settings_max_font_size_scale">Maks. skriftstørrelse</string>
<string name="wrongValueForBarcodeType">Verdien er ikke gyldig for valgt strekkodetype</string>
<string name="intent_import_card_from_url_share_multiple_text">Jeg vil dele noen kort med deg</string>
@@ -142,10 +140,10 @@
<string name="app_libraries">Frie tredjepartsbibliotek: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="card_ids_copied">Kopierte kort-ID(er)</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Opphavsrett © 2019<xliff:g>%d</xliff:g> Sylvia van Os.</string>
<string name="updateBarcodeQuestionText">Du har endret kortets ID. Ønsker du å også oppdatere strekkoden til samme verdi\?</string>
<string name="updateBarcodeQuestionText">Du har endret kortets ID. Ønsker du å også oppdatere strekkoden til samme verdi?</string>
<string name="no">Nei</string>
<string name="yes">Ja</string>
<string name="updateBarcodeQuestionTitle">Oppdater strekkodeverdi\?</string>
<string name="updateBarcodeQuestionTitle">Oppdater strekkodeverdi?</string>
<string name="takePhoto">Ta et bilde</string>
<string name="removeImage">Fjern bilde</string>
<string name="setBackImage">Sett bakside</string>
@@ -162,10 +160,10 @@
<item quantity="one"><xliff:g>%d</xliff:g> kort valgt</item>
<item quantity="other"><xliff:g>%d</xliff:g> korten valgt</item>
</plurals>
<string name="deleteConfirmation">Slett dette kortet for godt\?</string>
<string name="deleteConfirmation">Slett dette kortet for godt?</string>
<plurals name="deleteCardsConfirmation">
<item quantity="one">Slett dette kortet for godt\?</item>
<item quantity="other">Slett disse <xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%s</xliff:g> kortene for godt\?</item>
<item quantity="one">Slett dette kortet for godt?</item>
<item quantity="other">Slett disse <xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%s</xliff:g> kortene for godt?</item>
</plurals>
<string name="turn_flashlight_on">Skru på lommelykten</string>
<string name="turn_flashlight_off">Skru av lommelykten</string>
@@ -191,4 +189,21 @@
<string name="toggleMoreInfo">Veksle visning av mer info</string>
<string name="barcodeImageDescriptionWithType">Bilde av kortstrekkode av typen <xliff:g>%s</xliff:g></string>
<string name="swipeToSwitchImages">Dra eller hold lenge for å bygge bilder</string>
</resources>
<string name="sort_by">Sorter etter</string>
<string name="reverse">Vend</string>
<string name="sort_by_balance">Saldo</string>
<string name="sort_by_expiry">Utløp</string>
<string name="sort_by_most_recently_used">Nyligst brukt</string>
<string name="sort_by_name">Navn</string>
<string name="sort">Sorter</string>
<string name="help_translate_this_app">Hjelp med å oversette denne appen</string>
<string name="license">Lisens</string>
<string name="version_history">Versjonshistorikk</string>
<string name="importCatimaMessage">Velg din <i>catima.zip</i> fra Catima å importere. Eller lag den fra Importer/Eksporter-menyen i en annen Catima-app ved å trykke på \"Eksporter\" der først</string>
<string name="source_repository">Kildekode</string>
<string name="on_github">på GitHub</string>
<string name="and_data_usage">og bruk av data</string>
<string name="rate_this_app">Vurder denne appen</string>
<string name="on_google_play">på Google Play</string>
<string name="report_error">Rapporter feil</string>
</resources>

View File

@@ -49,7 +49,7 @@
<string name="importOptionApplicationExplanation">Open een bestand middels een app of je favoriete bestandsbeheerder.</string>
<string name="importOptionApplicationButton">Andere app gebruiken</string>
<string name="about">Over</string>
<string name="app_license">Vrije software, uitgebracht onder de GPLv3-licentie.</string>
<string name="app_license">Vrije software, uitgebracht onder de GPLv3+-licentie</string>
<string name="about_title_fmt">Over <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Versie: <xliff:g id="version">%s</xliff:g></string>
<string name="app_revision_fmt">Versie-informatie: <xliff:g id="app_revision_url">%s</xliff:g></string>
@@ -74,8 +74,8 @@
<string name="groups">Groepen</string>
<string name="enter_group_name">Voer een groepsnaam in</string>
<string name="starImage">Favoriete ster</string>
<string name="app_copyright_old">Gebaseerd op Loyalty Card Keychain,
\ncopyright ©20162020 Branden Archer.</string>
<string name="app_copyright_old">Gebaseerd op Klantenkaartkluis,
\ncopyright ©20162020 Branden Archer</string>
<string name="unstar">Verwijderen uit favorieten</string>
<string name="star">Toevoegen aan favorieten</string>
<string name="addManually">Kaartnummer handmatig invoeren</string>
@@ -138,7 +138,7 @@
<string name="wrongValueForBarcodeType">Deze waarde komt niet overeen met het gekozen barcodetype</string>
<string name="app_resources">Vrije externe bronnen: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_libraries">Vrije externe bibliotheken: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Auteursrecht © 2019<xliff:g>%d</xliff:g> Sylvia van Os.</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Auteursrecht © 2019<xliff:g>%d</xliff:g> Sylvia van Os</string>
<string name="intent_import_card_from_url_share_multiple_text">Ik wil kaarten met je delen</string>
<string name="copy_to_clipboard_multiple_toast">De kaart-id\'s zijn gekopieerd naar het klembord</string>
<string name="card_ids_copied">De kaart-ids zijn gekopieerd</string>
@@ -198,4 +198,14 @@
<string name="sort_by_most_recently_used">Op onlangs gebruikt</string>
<string name="sort_by_name">Op naam</string>
<string name="sort">Sorteren</string>
</resources>
<string name="report_error">Fout melden</string>
<string name="on_google_play">in Google Play</string>
<string name="rate_this_app">Beoordeel deze app</string>
<string name="and_data_usage">en gegevensgebruik</string>
<string name="on_github">op GitHub</string>
<string name="source_repository">Broncode</string>
<string name="license">Licentie</string>
<string name="help_translate_this_app">Help deze app te vertalen</string>
<string name="credits">Met dank aan</string>
<string name="version_history">Versiegeschiedenis</string>
</resources>

View File

@@ -1,4 +1,27 @@
<resources
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="barcodeType">Tip cod de bare</string>
<string name="cardId">Cardului ID</string>
<string name="note">Notă</string>
<string name="storeName">Numele</string>
<string name="noMatchingGiftCards">Nu am găsit nimic. Încearcă să schimbi căutarea.</string>
<string name="noGiftCards">Faceți clic pe butonul + plus pentru a adăuga o carte sau importați mai întâi câteva din meniul ⋮.</string>
<string name="action_add">Adăugați</string>
<string name="action_search">Căutare</string>
<string name="sendLabel">Trimiteți…</string>
<string name="share">Împărtășiți</string>
<string name="copy_to_clipboard">Copiați ID-ul în clipboard</string>
<string name="deleteConfirmation">Să șterg definitiv acest card\?</string>
<string name="deleteTitle">Ștergeți cardul</string>
<string name="unlockScreen">Deblocarea rotației</string>
<string name="lockScreen">Rotația blocurilor</string>
<string name="confirm">Confirmați</string>
<string name="delete">Ștergeți</string>
<string name="edit">Editați</string>
<string name="save">Salvați</string>
<string name="cancel">Anulează</string>
<string name="unstar">Eliminați din favorite</string>
<string name="star">Adaugă la favorite</string>
<string name="noBarcode">Fără cod de bare</string>
<string name="barcodeNoBarcode">Acest card nu are cod de bare</string>
</resources>

View File

@@ -9,7 +9,7 @@
<string name="cardId">Номер карты</string>
<string name="barcodeType">Тип штрих-кода</string>
<string name="barcodeNoBarcode">Эта карта без штрих-кода</string>
<string name="cancel">Отменить</string>
<string name="cancel">Отмена</string>
<string name="save">Сохранить</string>
<string name="edit">Изменить</string>
<string name="delete">Удалить карту</string>
@@ -49,7 +49,7 @@
<string name="importOptionApplicationExplanation">Используйте любое приложение или ваш любимый файловый менеджер, чтобы открыть файл.</string>
<string name="importOptionApplicationButton">Использовать другое приложение</string>
<string name="about">О приложении</string>
<string name="app_license">Авторское лево свободного программного обеспечения, лицензия GPLv3+.</string>
<string name="app_license">Авторское лево свободного программного обеспечения, лицензия GPLv3+</string>
<string name="about_title_fmt">О приложении <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Версия: <xliff:g id="version">%s</xliff:g></string>
<string name="app_revision_fmt">Информация о версиях: <xliff:g id="app_revision_url">%s</xliff:g></string>
@@ -74,7 +74,7 @@
<string name="importSuccessful">Данные карт успешно импортированы</string>
<string name="starImage">Звезда избранного</string>
<string name="app_copyright_old">На основе Loyalty Card Keychain
\nавторские права © 20162020 Branden Archer.</string>
\nавторские права © 20162020 Branden Archer</string>
<string name="unstar">Удалить из избранного</string>
<string name="star">Добавить в избранное</string>
<string name="noBarcode">Нет штрих-кода</string>
@@ -117,16 +117,16 @@
<item quantity="other"><xliff:g>%d</xliff:g> карт</item>
</plurals>
<string name="accept">Принять</string>
<string name="importVoucherVaultMessage">Выберите файл для импортирования, именуемый <i>vouchervault.json</i>.
\nФайл экспорта можно создать в приложении Voucher Vault, нажав кнопку \"Экспорт\".</string>
<string name="importVoucherVaultMessage">Выберите для импортирования файл <i>vouchervault.json</i>.
\nФайл можно создать в приложении Voucher Vault, нажав кнопку \"Экспорт\".</string>
<string name="importVoucherVault">Импорт из Voucher Vault</string>
<string name="importFidmeMessage">Выберите файл для импортирования, именуемый <i>fidme-export-request-xxxxxx.zip</i>, а затем вручную укажите типы штрих-кодов.
\nФайл экспорта можно создать в приложении FidMe, перейдя в свой профиль, выбрав функцию \"Защита данных\", и затем нажав кнопку \"Извлечь мои данные\".</string>
<string name="importLoyaltyCardKeychainMessage">Выберите файл экспорта, именуемый <i>LoyaltyCardKeychain.csv</i>.
\nФайл экспорта можно создать в приложении Loyalty Card Keychain, перейдя в меню \"Импорт/Экспорт\" и нажав кнопку \"Экспорт\".</string>
<string name="importFidmeMessage">Выберите для импортирования файл <i>fidme-export-request-xxxxxx.zip</i>, а затем вручную укажите типы штрих-кодов.
\nФайл можно создать в приложении FidMe, перейдя в свой профиль, выбрав функцию \"Защита данных\", и затем нажав кнопку \"Извлечь мои данные\".</string>
<string name="importLoyaltyCardKeychainMessage">Выберите для импортирования файл <i>LoyaltyCardKeychain.csv</i>.
\nФайл можно создать в приложении Loyalty Card Keychain, перейдя в меню \"Импорт/Экспорт\" и нажав кнопку \"Экспорт\".</string>
<string name="importLoyaltyCardKeychain">Импорт из Loyalty Card Keychain</string>
<string name="importCatimaMessage">Выберите файл для импортирования, именуемый <i>Catima.zip</i>.
\nФайл экспорта можно создать в другой копии Catima, перейдя в меню \"Импорт/Экспорт\" и нажав кнопку \"Экспорт\".</string>
<string name="importCatimaMessage">Выберите для импортирования файл <i>Catima.zip</i>.
\nФайл можно создать в другой копии Catima, перейдя в меню \"Импорт/Экспорт\" и нажав кнопку \"Экспорт\".</string>
<string name="importFidme">Импорт из FidMe</string>
<string name="importCatima">Импорт из Catima</string>
<string name="errorReadingImage">Невозможно считать изображение</string>
@@ -140,7 +140,7 @@
<string name="wrongValueForBarcodeType">Недопустимое значение для выбранного типа штрих-кода</string>
<string name="app_resources">Свободные сторонние ресурсы: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="app_libraries">Свободные сторонние библиотеки: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Авторские права © 2019<xliff:g>%d</xliff:g> Sylvia van Os.</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Авторские права © 2019<xliff:g>%d</xliff:g> Sylvia van Os</string>
<string name="intent_import_card_from_url_share_multiple_text">Поделиться картами</string>
<string name="card_ids_copied">Скопированные номера карт</string>
<string name="copy_to_clipboard_multiple_toast">Номера карт скопированы в буфер обмена</string>
@@ -155,7 +155,7 @@
<string name="backImageDescription">Задняя сторона карты</string>
<string name="frontImageDescription">Лицевая сторона карты</string>
<string name="photos">Фотографии</string>
<string name="importStocardMessage">Выберите файл <i>***-sync.zip</i> для импортирования.
<string name="importStocardMessage">Выберите для импортирования файл <i>***-sync.zip</i>.
\nЭтот файл можно получить по электронной почте от support@stocardapp.com, предварительно запросив экспорт ваших данных.</string>
<string name="passwordRequired">Введите пароль</string>
<string name="importStocard">Импорт из Stocard</string>
@@ -206,4 +206,14 @@
<string name="sort_by_most_recently_used">Частота использования</string>
<string name="sort_by_name">Название</string>
<string name="sort">Сортировка</string>
<string name="credits">Благодарности</string>
<string name="version_history">История версий</string>
<string name="on_github">на GitHub</string>
<string name="rate_this_app">Оценить приложение</string>
<string name="and_data_usage">и использование данных</string>
<string name="report_error">Отчёт об ошибке</string>
<string name="on_google_play">в Google Play</string>
<string name="source_repository">Исходный код</string>
<string name="license">Лицензия</string>
<string name="help_translate_this_app">Помощь в переводе приложения</string>
</resources>

View File

@@ -38,19 +38,19 @@
<string name="sameAsCardId">Kart numarasıyla aynı</string>
<string name="barcodeId">Barkod değeri</string>
<string name="importVoucherVaultMessage">İçe aktarmak için Voucher Vault\'tan dışa aktardığınız <i>vouchervault.json</i> dosyasını seçin.
\nVeya önce Voucher Vault\'ta \"Dışa aktar\" düğmesine basarak bir tane oluşturun.</string>
\nÖnce Voucher Vault\'ta \"Dışa aktar\" düğmesine basarak bir tane oluşturun.</string>
<string name="importVoucherVault">Voucher Vault\'tan içe aktar</string>
<string name="importStocardMessage">İçe aktarmak için Stocard\'dan dışa aktardığınız <i>***-sync.zip</i> dosyasını seçin.
\nVeya support@stocardapp.com adresine e-posta göndererek verilerinizin dışa aktarılmasını isteyerek edinin.</string>
\nsupport@stocardapp.com adresine e-posta göndererek verilerinizin dışa aktarılmasını isteyerek edinin.</string>
<string name="importStocard">Stocard\'dan içe aktar</string>
<string name="importLoyaltyCardKeychainMessage">İçe aktarmak için Loyalty Card Keychain\'den dışa aktardığınız <i>LoyaltyCardKeychain.csv</i> dosyasını seçin.
\nVeya Loyalty Card Keychain uygulamasının İçe/Dışa aktar menüsündeki \"Dışa aktar\" düğmesine basarak bir tane oluşturun.</string>
\nLoyalty Card Keychain uygulamasının İçe/Dışa aktar menüsündeki \"Dışa aktar\" düğmesine basarak bir tane oluşturun.</string>
<string name="importLoyaltyCardKeychain">Loyalty Card Keychain\'den içe aktar</string>
<string name="importFidmeMessage">FidMe\'den içe aktarmak için dışa aktardığınız <i>fidme-export-request-xxxxxx.zip</i> dosyasını seçin ve ardından barkod türlerini elle seçin.
\nVeya FidMe profilinizden Veri Koruma seçeneğini seçip ardından \"Verilerimi çıkar\" düğmesine basarak bir tane oluşturun.</string>
\nFidMe profilinizden Veri Koruma seçeneğini seçip ardından \"Verilerimi çıkar\" düğmesine basarak bir tane oluşturun.</string>
<string name="importFidme">FidMe\'den içe aktar</string>
<string name="importCatimaMessage">İçe aktarmak için Catima\'dan dışa aktardığınız <i>catima.zip</i> dosyasını seçin.
\nVeya başka bir Catima uygulamasının İçe/Dışa aktar menüsündeki \"Dışa aktar\" düğmesine basarak bir tane oluşturun.</string>
\nBaşka bir Catima uygulamasının İçe/Dışa aktar menüsündeki \"Dışa aktar\" düğmesine basarak bir tane oluşturun.</string>
<string name="importCatima">Catima\'dan içe aktar</string>
<string name="accept">Kabul et</string>
<string name="privacy_policy_popup_text">Gizlilik politikası bildirimi (bazı uygulama mağazaları için gerekli):
@@ -119,10 +119,10 @@
<string name="app_revision_fmt">Değişiklik Bilgileri: <xliff:g id="app_revision_url">%s</xliff:g></string>
<string name="debug_version_fmt">Sürüm: <xliff:g id="version">%s</xliff:g></string>
<string name="about_title_fmt"><xliff:g id="app_name">%s</xliff:g> hakkında</string>
<string name="app_license">GPLv3+ altında lisanslanan copyleft özgür yazılım.</string>
<string name="app_license">GPLv3+ altında lisanslanan copyleft özgür yazılım</string>
<string name="app_copyright_old">Loyalty Card Keychain temel alınmıştır
\nTelif Hakkı © 20162020 Branden Archer.</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Telif Hakkı © 2019<xliff:g>%d</xliff:g> Sylvia van Os.</string>
\nTelif Hakkı © 20162020 Branden Archer</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Telif Hakkı © 2019<xliff:g>%d</xliff:g> Sylvia van Os</string>
<string name="about">Hakkında</string>
<string name="importOptionApplicationButton">Başka bir uygulama kullan</string>
<string name="importOptionApplicationExplanation">Bir dosyayı açmak için herhangi bir uygulamayı veya en sevdiğiniz dosya yöneticisini kullanın.</string>
@@ -198,4 +198,14 @@
<string name="sort_by_most_recently_used">En Son Kullanılan</string>
<string name="sort_by_name">Ad</string>
<string name="sort">Sırala</string>
<string name="report_error">Hata Bildir</string>
<string name="on_google_play">Google Play\'de</string>
<string name="rate_this_app">Bu uygulamayı değerlendir</string>
<string name="and_data_usage">ve veri kullanımı</string>
<string name="on_github">GitHub\'da</string>
<string name="source_repository">Kaynak Deposu</string>
<string name="license">Lisans</string>
<string name="help_translate_this_app">Bu uygulamayı çevirmeye yardımcı olun</string>
<string name="credits">Emeği Geçenler</string>
<string name="version_history">Sürüm Geçmişi</string>
</resources>

View File

@@ -27,20 +27,20 @@
<string name="sameAsCardId">Таке ж як ID картки</string>
<string name="barcodeId">Значення штрих-коду</string>
<string name="importVoucherVaultMessage">Оберіть Voucher Vault експорт-файл названий <i>vouchervault.json</i> для імпортування.
\nЧи створіть його натиснувши \"Експорт\" у Voucher Vault.</string>
\nСтворіть його натиснувши \"Експорт\" у Voucher Vault.</string>
<string name="importVoucherVault">Імпорт з Voucher Vault</string>
<string name="importLoyaltyCardKeychainMessage">Знайдіть файл названий <i>LoyaltyCardKeychain.csv</i> для імпортування.
\nЧи створіть його у меню імпорту/експорту Loyalty Card Keychain натиснувши \"Експорт\".</string>
\nСтворіть його у меню імпорту/експорту Loyalty Card Keychain натиснувши \"Експорт\".</string>
<string name="importCatimaMessage">Оберіть експорт-файл названий <i>catima.zip</i> для імпортування.
\nЧи створіть його з меню імпорту/експорту у іншій Catima, натиснувши \"Експорт\".</string>
\nСтворіть його з меню імпорту/експорту у іншій Catima, натиснувши \"Експорт\".</string>
<string name="importLoyaltyCardKeychain">Імпорт з Loyalty Card Keychain</string>
<string name="importFidmeMessage">Оберіть FidMe експорт-файл названий <i>fidme-export-request-xxxxxx.zip</i> для імпортування і оберіть типи штрих-кодів вручну пізніше.
\nЧи створіть його у вашому FidMe профілі обравши \"Захист даних -&gt; Витяг даних\".</string>
\nСтворіть його у вашому FidMe профілі обравши \"Захист даних -&gt; Витяг даних\".</string>
<string name="importFidme">Імпорт з FidMe</string>
<string name="importCatima">Імпорт з Catima</string>
<string name="accept">Прийняти</string>
<string name="privacy_policy">Політика конфіденційності</string>
<string name="app_loyalty_card_keychain">Брелок картки лояльності</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="chooseImportType">Імпортувати дані з\?</string>
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> здається, не є дійсним залишком.</string>
<string name="points">Бали</string>
@@ -82,7 +82,7 @@
<string name="settings_max_font_size_scale">Макс. розмір шрифту</string>
<string name="settings_dark_theme">Темна</string>
<string name="settings_light_theme">Світла</string>
<string name="settings_system_theme">Система</string>
<string name="settings_system_theme">Системна</string>
<string name="settings_theme">Тема</string>
<string name="settings_category_title_ui">Інтерфейс користувача</string>
<string name="settings">Налаштування</string>
@@ -96,17 +96,17 @@
<string name="app_revision_fmt">Інформація про випуск: <xliff:g id="app_revision_url">%s</xliff:g></string>
<string name="debug_version_fmt">Версія: <xliff:g id="version">%s</xliff:g></string>
<string name="about_title_fmt">Про <xliff:g id="app_name">%s</xliff:g></string>
<string name="app_license">Копілефт вільне програмне забезпечення, ліцензоване під GPLv3+.</string>
<string name="app_license">Копілефт вільне програмне забезпечення, ліцензоване під GPLv3+</string>
<string name="app_copyright_old">Створено на основі Loyalty Card Keychain
\nавторські права © 20162020 Branden Archer.</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Авторські права © 2019<xliff:g>%d</xliff:g> Sylvia van Os.</string>
\nавторські права © 20162020 Branden Archer</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Авторські права © 2019<xliff:g>%d</xliff:g> Sylvia van Os</string>
<string name="about">Про програму</string>
<string name="importOptionApplicationButton">Використайте іншу програму</string>
<string name="importOptionApplicationExplanation">Використайте іншу програму чи ваш улюблений файл-менеджер для відкриття файлу.</string>
<string name="importOptionApplicationTitle">Використати іншу програму</string>
<string name="importOptionFilesystemButton">З провідника</string>
<string name="importOptionApplicationTitle">З іншої програми</string>
<string name="importOptionFilesystemButton">Обрати файл</string>
<string name="importOptionFilesystemExplanation">Оберіть файл у провіднику.</string>
<string name="importOptionFilesystemTitle">Імпорт з провідника</string>
<string name="importOptionFilesystemTitle">Імпорт з файлу</string>
<string name="exportOptionExplanation">Дані буде записано до локації обраної вами.</string>
<string name="noExternalStoragePermissionError">Надайте дозвіл на доступ до пам\'яті пристрою для імпорту чи експорту карток</string>
<string name="exporting">Експортуємо…</string>
@@ -156,11 +156,11 @@
<string name="removeImage">Видалити зображення</string>
<string name="setBackImage">Встановити зображення тильної сторони</string>
<string name="setFrontImage">Встановити зображення лицьової сторони</string>
<string name="photos">Фотографії</string>
<string name="photos">Фото</string>
<string name="backImageDescription">Тильна сторона карти</string>
<string name="frontImageDescription">Лицьова сторона карти</string>
<string name="importStocardMessage">Виберіть експорт <i> ***-sync.zip </i> зі Stocard для імпорту.
\nАбо отримайте його, надіславши електронною поштою support@stocardapp.com з проханням експортувати ваші дані.</string>
\nОтримайте його, надіславши електронною поштою support@stocardapp.com з проханням експортувати ваші дані.</string>
<string name="importStocard">Імпорт із Stocard</string>
<plurals name="selectedCardCount">
<item quantity="one">Обрано: <xliff:g>%d</xliff:g> карта</item>
@@ -199,4 +199,12 @@
<string name="toggleMoreInfo">Показувати додаткову інформацію</string>
<string name="barcodeImageDescriptionWithType">Зображення штрих-коду карти типу <xliff:g>%s</xliff:g></string>
<string name="swipeToSwitchImages">Свайп чи довге натискання для зміни зображень</string>
<string name="sort_by">Сортувати за</string>
<string name="reverse">Зворотній порядок</string>
<string name="sort_by_balance">Баланс</string>
<string name="sort_by_expiry">Термін дії</string>
<string name="sort_by_most_recently_used">Часто використовувані</string>
<string name="sort_by_name">Назва</string>
<string name="sort">Сортування</string>
<string name="version_history">Історія версій</string>
</resources>

View File

@@ -1,27 +1,21 @@
<resources
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"
xmlns:tools="http://schemas.android.com/tools">
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
<string name="action_search">Search</string>
<string name="action_add">Add</string>
<plurals name="selectedCardCount">
<item quantity="one"><xliff:g>%d</xliff:g> card selected</item>
<item quantity="other"><xliff:g>%d</xliff:g> cards selected</item>
</plurals>
<string name="noGiftCards">Click the + plus button to add a card, or import some from the ⋮ menu first.</string>
<string name="noMatchingGiftCards">Didn\'t find anything. Try changing your search.</string>
<string name="storeName">Name</string>
<string name="note">Note</string>
<string name="cardId">Card ID</string>
<string name="barcodeType">Barcode type</string>
<string name="barcodeNoBarcode">This card has no barcode</string>
<string name="noBarcode">No barcode</string>
<string name="star">Add to favorites</string>
<string name="unstar">Remove from favorites</string>
<string name="cancel">Cancel</string>
<string name="save">Save</string>
<string name="edit">Edit</string>
@@ -48,16 +42,14 @@
<string name="ok">OK</string>
<string name="copy_to_clipboard">Copy ID to clipboard</string>
<string name="share">Share</string>
<string name="sendLabel">Send&#8230;</string>
<string name="sendLabel">Send</string>
<string name="editCardTitle">Edit Card</string>
<string name="addCardTitle">Add Card</string>
<string name="scanCardBarcode">Scan Card Barcode</string>
<string name="cardShortcut">Card Shortcut</string>
<string name="noCardsMessage">Add a card first</string>
<string name="card_ids_copied">Copied Card ID(s)</string>
<string name="barcodeImageDescriptionWithType">Image of card barcode of type <xliff:g>%s</xliff:g></string>
<string name="noStoreError">No name entered</string>
<string name="noCardIdError">No card ID entered</string>
<string name="noCardExistsError">Could not find card</string>
@@ -71,8 +63,8 @@
<string name="exportSuccessfulTitle">Exported</string>
<string name="exportFailedTitle">Export failed</string>
<string name="exportFailed">Could not export cards</string>
<string name="importing">Importing&#8230;</string>
<string name="exporting">Exporting&#8230;</string>
<string name="importing">Importing</string>
<string name="exporting">Exporting</string>
<string name="noExternalStoragePermissionError">Grant external storage permission to import or export cards first</string>
<string name="exportOptionExplanation">The data will be written to a location of your choice.</string>
<string name="importOptionFilesystemTitle">Import from filesystem</string>
@@ -81,25 +73,20 @@
<string name="importOptionApplicationTitle">Use another app</string>
<string name="importOptionApplicationExplanation">Use any app or your favorite file manager to open a file.</string>
<string name="importOptionApplicationButton">Use another app</string>
<string name="about">About</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019<xliff:g>%d</xliff:g> Sylvia van Os.</string>
<string name="app_copyright_old">Based on Loyalty Card Keychain\ncopyright © 20162020 Branden Archer.</string>
<string name="app_license">Copylefted libre software, licensed GPLv3+.</string>
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019<xliff:g>%d</xliff:g> Sylvia van Os</string>
<string name="app_copyright_old">Based on Loyalty Card Keychain\ncopyright © 20162020 Branden Archer</string>
<string name="app_license">Copylefted libre software, licensed GPLv3+</string>
<string name="about_title_fmt">About <xliff:g id="app_name">%s</xliff:g></string>
<string name="debug_version_fmt">Version: <xliff:g id="version">%s</xliff:g></string>
<string name="app_revision_fmt">Revision Info: <xliff:g id="app_revision_url">%s</xliff:g></string>
<string name="app_libraries">Libre third-party libraries: <xliff:g id="app_libraries_list">%s</xliff:g></string>
<string name="app_resources">Libre third-party resources: <xliff:g id="app_resources_list">%s</xliff:g></string>
<string name="selectBarcodeTitle">Select Barcode</string>
<string name="enterBarcodeInstructions">Enter the card ID, and either pick its barcode type below, or &#8220;This card has no barcode&#8221;.</string>
<string name="enterBarcodeInstructions">Enter the card ID, and either pick its barcode type below, or This card has no barcode.</string>
<string name="copy_to_clipboard_toast">Card ID copied to clipboard</string>
<string name="thumbnailDescription">Thumbnail for card</string>
<string name="starImage">Favorite star</string>
<string name="settings">Settings</string>
<string name="settings_category_title_ui">User interface</string>
<string name="settings_theme">Theme</string>
@@ -112,7 +99,6 @@
<string name="settings_key_dark_theme" translatable="false">dark</string>
<string name="settings_key_max_font_size_scale" translatable="false">pref_max_font_size_scale</string>
<string name="settings_max_font_size_scale">Max. font size</string>
<string name="settings_display_barcode_max_brightness">Brighten barcode view</string>
<string name="settings_key_display_barcode_max_brightness" translatable="false">pref_display_card_max_brightness</string>
<string name="settings_lock_barcode_orientation">Lock barcode orientation</string>
@@ -121,13 +107,11 @@
<string name="settings_key_keep_screen_on" translatable="false">pref_keep_screen_on</string>
<string name="settings_disable_lockscreen_while_viewing_card">Prevent lock screen</string>
<string name="settings_key_disable_lockscreen_while_viewing_card" translatable="false">pref_disable_lockscreen_while_viewing_card</string>
<string name="sharedpreference_active_tab" translatable="false">sharedpreference_active_tab</string>
<string name="sharedpreference_privacy_policy_shown" translatable="false">sharedpreference_privacy_policy_shown</string>
<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="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>
@@ -137,7 +121,6 @@
<string name="intent_import_card_from_url_path_prefix_brarcher" translatable="false">/loyalty-card-locker/share</string>
<string name="importSuccessful">Card data imported</string>
<string name="exportSuccessful">Card data exported</string>
<string name="enter_group_name">Enter group name</string>
<string name="groups">Groups</string>
<string name="noGroups">Click the + plus button to add groups for categorization first.</string>
@@ -146,7 +129,6 @@
<item quantity="one"><xliff:g>%d</xliff:g> card</item>
<item quantity="other"><xliff:g>%d</xliff:g> cards</item>
</plurals>
<string name="all">All</string>
<string name="deleteConfirmationGroup">Delete group?</string>
<string name="failedOpeningFileManager">Install a file manager first.</string>
@@ -161,7 +143,6 @@
<string name="expiryStateSentenceExpired">Expired: <xliff:g>%s</xliff:g></string>
<string name="balanceSentence">Balance: <xliff:g>%s</xliff:g></string>
<string name="balancePoints"><xliff:g>%s</xliff:g> points</string>
<string name="card">Card</string>
<string name="barcode">Barcode</string>
<string name="editBarcode">Edit barcode</string>
@@ -170,31 +151,32 @@
<string name="chooseExpiryDate">Choose expiry date</string>
<string name="moveBarcodeToTopOfScreen">Move the barcode to the top of the screen</string>
<string name="moveBarcodeToCenterOfScreen">Center the barcode on the screen</string>
<string name="noBarcodeFound">No barcode was found</string>
<string name="errorReadingImage">Could not read the image</string>
<string name="balance">Balance</string>
<string name="currency">Currency</string>
<string name="points">Points</string>
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> does not seem to be a valid balance.</string>
<string name="chooseImportType">Import data from?</string>
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
<string name="privacy_policy">Privacy Policy</string>
<string name="privacy_policy_popup_text">Privacy policy notice (required by some app stores):\n\nNO DATA IS COLLECTED AT ALL, which anyone can confirm since our app is libre software.</string>
<string name="accept">Accept</string>
<string name="importCatima">Import from Catima</string>
<string name="importCatimaMessage">Select your <i>catima.zip</i> export from Catima to import.\nOr create it from the "Import/Export" menu of another Catima app by pressing "Export" there first.</string>
<string name="importCatimaMessage">Select your <i>catima.zip</i> export from Catima to import.
\nCreate it from the Import/Export menu of another Catima app by pressing Export there first.</string>
<string name="importFidme">Import from FidMe</string>
<string name="importFidmeMessage">Select your <i>fidme-export-request-xxxxxx.zip</i> export from FidMe to import, and select the barcode types manually afterwards.\nOr create it from your FidMe profile by choosing "Data Protection" and then pressing "Extract my data" first.</string>
<string name="importFidmeMessage">Select your <i>fidme-export-request-xxxxxx.zip</i> export from FidMe to import, and select the barcode types manually afterwards.
\nCreate it from your FidMe profile by choosing Data Protection and then pressing Extract my data first.</string>
<string name="importLoyaltyCardKeychain">Import from Loyalty Card Keychain</string>
<string name="importLoyaltyCardKeychainMessage">Select your <i>LoyaltyCardKeychain.csv</i> export from Loyalty Card Keychain to import.\nOr create it from the "Import/Export" menu in Loyalty Card Keychain by pressing "Export" there first.</string>
<string name="importLoyaltyCardKeychainMessage">Select your <i>LoyaltyCardKeychain.csv</i> export from Loyalty Card Keychain to import.
\nCreate it from the Import/Export menu in Loyalty Card Keychain by pressing Export there first.</string>
<string name="importStocard">Import from Stocard</string>
<string name="importStocardMessage">Select your <i>***-sync.zip</i> export from Stocard to import.\nOr get it by e-mailing support@stocardapp.com asking for an export of your data.</string>
<string name="importStocardMessage">Select your <i>***-sync.zip</i> export from Stocard to import.
\nGet it by e-mailing support@stocardapp.com asking for an export of your data.</string>
<string name="importVoucherVault">Import from Voucher Vault</string>
<string name="importVoucherVaultMessage">Select your <i>vouchervault.json</i> export from Voucher Vault to import.\nOr create it by pressing "Export" in Voucher Vault first.</string>
<string name="importVoucherVaultMessage">Select your <i>vouchervault.json</i> export from Voucher Vault to import.
\nCreate it by pressing Export in Voucher Vault first.</string>
<string name="barcodeId">Barcode value</string>
<string name="sameAsCardId">Same as card ID</string>
<string name="setBarcodeId">Set barcode value</string>
@@ -220,7 +202,6 @@
<string name="settings_locale">Language</string>
<string name="settings_key_locale" translatable="false">pref_locale</string>
<string name="settings_system_locale">System</string>
<string name="setting_key_theme_color" translatable="false">pref_theme_color</string>
<string name="settings_theme_color">Theme color</string>
<string name="settings_catima_theme">Catima</string>
@@ -243,7 +224,6 @@
<string name="settings_key_brown_theme" translatable="false">brown_theme</string>
<string name="app_contributors">Made possible by: <xliff:g id="app_contributors">%s</xliff:g></string>
<string name="sort">Sort</string>
<string name="toggleMoreInfo">Toggle showing more info</string>
<string name="swipeToSwitchImages">Swipe or long press to switch images</string>
<string name="sort_by_name">Name</string>
@@ -252,4 +232,15 @@
<string name="sort_by_balance">Balance</string>
<string name="reverse">Reverse</string>
<string name="sort_by">Sort by</string>
</resources>
<string name="version_history">Version History</string>
<string name="arrow" translatable="false"><![CDATA[>]]></string>
<string name="credits">Credits</string>
<string name="help_translate_this_app">Help translate this app</string>
<string name="license">License</string>
<string name="source_repository">Source Repository</string>
<string name="on_github">on GitHub</string>
<string name="and_data_usage">and data usage</string>
<string name="rate_this_app">Rate this app</string>
<string name="on_google_play">on Google Play</string>
<string name="report_error">Report Error</string>
</resources>

View File

@@ -82,8 +82,14 @@
<item name="windowNoTitle">true</item>
</style>
<style name="SplashTheme" parent="@style/AppTheme">
<item name="android:windowBackground">@drawable/background_splash</item>
<!-- Splash Screen Theme-->
<style name="Theme.App.Starting" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">@color/ic_launcher_background</item>
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_launcher_foreground</item>
<item name="postSplashScreenTheme">@style/AppTheme</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.MaterialComponents.Dark.ActionBar"/>

View File

@@ -270,6 +270,7 @@ public class DatabaseTest
database.execSQL("drop table " + DBHelper.LoyaltyCardDbIds.TABLE);
database.execSQL("drop table " + DBHelper.LoyaltyCardDbGroups.TABLE);
database.execSQL("drop table " + DBHelper.LoyaltyCardDbIdsGroups.TABLE);
database.execSQL("drop table " + DBHelper.LoyaltyCardDbFTS.TABLE);
// Create the table as it existed in revision 1
database.execSQL("create table " + DBHelper.LoyaltyCardDbIds.TABLE + "(" +

View File

@@ -59,12 +59,11 @@ public class MainActivityTest
assertNotNull(menu);
// The settings, import/export, groups, search and add button should be present
assertEquals(menu.size(), 7);
assertEquals(menu.size(), 6);
assertEquals("Search", menu.findItem(R.id.action_search).getTitle().toString());
assertEquals("Sort", menu.findItem(R.id.action_sort).getTitle().toString());
assertEquals("Groups", menu.findItem(R.id.action_manage_groups).getTitle().toString());
assertEquals("Import/Export", menu.findItem(R.id.action_import_export).getTitle().toString());
assertEquals("Privacy Policy", menu.findItem(R.id.action_privacy_policy).getTitle().toString());
assertEquals("About", menu.findItem(R.id.action_about).getTitle().toString());
assertEquals("Settings", menu.findItem(R.id.action_settings).getTitle().toString());
}
@@ -361,7 +360,7 @@ public class MainActivityTest
assertEquals(View.GONE, helpText.getVisibility());
assertEquals(View.VISIBLE, noMatchingCardsText.getVisibility());
assertEquals(View.VISIBLE, list.getVisibility());
assertEquals(View.GONE, list.getVisibility());
assertEquals(0, list.getAdapter().getItemCount());
@@ -383,7 +382,7 @@ public class MainActivityTest
assertEquals(View.GONE, helpText.getVisibility());
assertEquals(View.VISIBLE, noMatchingCardsText.getVisibility());
assertEquals(View.VISIBLE, list.getVisibility());
assertEquals(View.GONE, list.getVisibility());
assertEquals(0, list.getAdapter().getItemCount());
@@ -397,7 +396,7 @@ public class MainActivityTest
assertEquals(View.GONE, helpText.getVisibility());
assertEquals(View.VISIBLE, noMatchingCardsText.getVisibility());
assertEquals(View.VISIBLE, list.getVisibility());
assertEquals(View.GONE, list.getVisibility());
assertEquals(0, list.getAdapter().getItemCount());
@@ -406,7 +405,7 @@ public class MainActivityTest
assertEquals(View.GONE, helpText.getVisibility());
assertEquals(View.VISIBLE, noMatchingCardsText.getVisibility());
assertEquals(View.VISIBLE, list.getVisibility());
assertEquals(View.GONE, list.getVisibility());
assertEquals(0, list.getAdapter().getItemCount());

View File

@@ -9,7 +9,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:7.0.1'
classpath 'com.android.tools.build:gradle:7.0.2'
classpath 'gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:4.7.0'
// NOTE: Do not place your application dependencies here; they belong
@@ -24,6 +24,9 @@ allprojects {
maven { url "https://jitpack.io" }
gradlePluginPortal()
}
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:deprecation"
}
}
task clean(type: Delete) {

View File

@@ -1,23 +1,22 @@
Спрете да търсите пластмасови карти за възнаграждение по време на плащане в магазин или в интернет магазин.
<b>Сканирайте баркодовете на устройството си с помощта на неговата камера и забравете за картите.</b>
😺
Забравете за портфейла си или го запазете ултралек за ценни вещи.
😺
Спрете да търсите пластмасови карти за възнаграждение докато плащате в магазина или в мрежата.
<b>Сканирайте щрихкодовете на устройството си с помощта на камерата и забравете за пластмасовите карти.</b>
Забравете за портфейла си или го запазете лек за ценни вещи.
С този основен инструмент за ежедневно носене (EDC) можете да замените безполезната пластмаса с пари в брой.
😺
- Избягвайте шпионирането с много малко разрешения. Без достъп до интернет и без реклами.
- Добавете карти или кодове с имена и цветове, които можете да персонализирате.
- Ръчно въвеждане на код, ако няма баркод за съхранение или той не може да се използва.
- Импортиране на карти и кодове от файлове, Catima, FidMe, Loyalty Card Keychain, Stocard и Voucher Vault.
- Направете резервно копие на всичките си карти и ги прехвърлете на ново устройство, ако искате.
- Споделяйте купони, ексклузивни оферти, промоционални кодове или карти и кодове, като използвате всяко приложение.
- Тъмна тема и опции за достъпност за потребители с увредено зрение.
- Добавяйте карти или кодове с имена и цветове, които можете да настройвате по желание.
- Въвеждайте кодове, ако картата е без щрихкод или той не може да се използва.
- Внасяйте карти и кодове от файлове на Catima, FidMe, Loyalty Card Keychain, Stocard и Voucher Vault.
- Изнасяйте резервни копия на всичките си карти и при желание ги прехвърлете на други устройства.
- Споделяйте купони, специални оферти, промоционални кодове или карти и кодове, като използвате всяко приложение.
- Тъмна тема и настройки за достъпност за потребители с намалено зрение.
- Направено за всички от общността на свободния софтуер.
- Локализирани ръчно направени преводи за над 20 езика.
- Локализирани, ръчно направени преводи на над 20 езика.
- Безвъзмездно, подкрепено от приноса на общността.
- Използвайте, изучавайте, променяйте и споделяйте, както желаете; <i>с всички</i>.
- Не само свободен софтуер / отворен код. <i>Copylefted</i> либре софтуер (GPLv3+) за управление на карти.
😺
Опростете живота и пазаруването си и никога повече не губете хартиена касова бележка, карта за подарък за плащане в магазина или самолетен билет.
Вземете всичките си награди и бонуси със себе си и спестявайте, докато пътувате.
😺

View File

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

View File

@@ -0,0 +1,6 @@
- Dodaj opciju da se postavi posebna barcode vrijednost od ID kartice
- Pojednostavi konfiguraciju fonta
- Nekoliko lakših korisničkih funkcija
- Koristi ikonu slova za prečice
- Uvijek Prikaži sve barkode vrste u manuelnom ulazu
- Ukloni Politiku privatnosti prvog početka

View File

@@ -0,0 +1,4 @@
- Podržite novi PDF417 export iz Voucher trezora
- Podržite za kopiranje više barkodova odjednom.
- Podržite dijeljenje više kartica odanosti odjednom
- Pitaj da ažuriraš vrijednost za barcode ako se promijeni ID kartica

View File

@@ -0,0 +1,3 @@
- Dodaj nestali barkod za izvoz
- Nemoj prikazati dijalog o barcodeu ako je vrijednost kao ID kartice
- Dodaj Finski prevod

View File

@@ -0,0 +1,2 @@
- Long-click of a card donosi opciju da kopira ID karticu u clipboard. (vuci broj 49 (https://github.com/brarcher/loyalty-card-locker/issues/49))
- Back button na ulaz/izvoz pogled sada radi, prebacujem korisnika Na main view

View File

@@ -0,0 +1,2 @@
- Nekoliko manjih prijevoda i korisničke funkcije
- Popravi crash u uvoz/dijeljenje lojalnost karticu na Android 6

View File

@@ -0,0 +1 @@
- Popraviti nesposobnost konfiguriranja slika u novoj kartici lojalnosti

View File

@@ -0,0 +1 @@
- Popravi učitavanje slika pri uređivanju postojeće kartice

View File

@@ -0,0 +1,3 @@
- Napravi kraticu
- Generiši kraticu kartice
- Popravi boju kartice

View File

@@ -0,0 +1,4 @@
- Izmijeni izabrani boju u dijalogu za mijenjanje boja
- Podrška za brisanje više kartica odjednom
- Popravi moguću Aritmeticexcepciju pri mijenjanju slike
- Fiksiraj cijeli ekran je zatvoren kada rotirajući uređaj

View File

@@ -0,0 +1,4 @@
- Napravi linkove u bilješkama koje se mogu kliknuti
- Pre-odaberite grupu u kojoj je korisnik trenutno pri kreiranju nove kartice
- Zarez-odvojena grupna imena u lojalnost card view
- Fiksiraj maksimiziraj dugme koje se pojavljuje na barkodeu

View File

@@ -0,0 +1,4 @@
- Poboljšaj uvoznika
- Fix uvoznik Catia export sa više nota
- Titula skale u prihvatljivom opsegu
- Poboljšanja u animaciji

View File

@@ -0,0 +1 @@
- Fix crash na rotaciju u lojalnost kartice editovanje aktivnosti

View File

@@ -0,0 +1,2 @@
- Popravi Kratica tastature za biranje grafičkog elementa
- Zamijeni uobičajeni Android crni ekran prskanjem ekrana

View File

@@ -0,0 +1,2 @@
- Fix slike nisu uvezene iz sigurnosne kopije
- Opcija za prevazilaženje jezika

View File

@@ -0,0 +1,4 @@
- Poboljšaj listu karata za pejzaž i tablicu
- Dodaj mi boju za kosu (hvala, Subhashish Anand!)
- Ne zatvarajte aktivnost na grešci kamere (tako ručni unos je i dalje moguć)
- Dodaj sve doprinosioce dijalogu s obavještenjima

View File

@@ -0,0 +1,4 @@
- Poboljšana podrška čitaocima ekrana
- Nemoj da se slupaš dok pokušavaš da otvoriš video iz galerije
- Provuci podršku na zaslonu sa kartica
- Ne Resetuj grupu na pritiskom dugmeta

View File

@@ -0,0 +1,2 @@
- Podrška za mijenjanje redoslijeda sortiranja
- Sprecite da ne gledate velike slike za barkodeom

View File

@@ -0,0 +1 @@
- Male greške i poboljšanja

View File

@@ -0,0 +1,3 @@
- Změna výchozího názvu importního/exportního souboru. (pull #84 (https://github.com/brarcher/loyalty-card-locker/pull/84))
- Opraven řetězec na stránce import/export. (pull #87 (https://github.com/brarcher/loyalty-card-locker/pull/87))
- Vylepšeno rozvržení stránky se zobrazením karet. Text by měl být lépe čitelný a je možné jej vybrat dlouhým kliknutím. (pull #91 (https://github.com/brarcher/loyalty-card-locker/pull/91))

View File

@@ -0,0 +1 @@
- Zabránění pádu při otáčení obrazovky v úvodním průvodci prvního spuštění.

View File

@@ -0,0 +1,2 @@
- Změna ve verzi v0.11 snížila využití paměti při kreslení čárových kódů, ale ovlivnila rozměry čárových kódů. Nyní je tato změna provedena tak, aby byly rozměry čárového kódu zachovány a zároveň se snížilo využití paměti. (pull #126)
- Aktualizace překladů do němčiny a francouzštiny. (pull #122, pull #124, pull #125))

View File

@@ -0,0 +1,3 @@
- Přidání možnosti nabídky zámku otáčení obrazovky při zobrazení karty. Pokud je uzamčeno, obrazovka přejde do své "přirozené" orientace a další otáčení obrazovky bude zablokováno. (pull #128)
- Pokud je karta vybrána na hlavní obrazovce, ale nelze ji načíst, aplikace elegantně selže a vypíše zprávu. (pull #132)
- Oprava případu, kdy nebylo možné najít ID rozvržení pro úvodního průvodce. (pull #128)

View File

@@ -0,0 +1,2 @@
- Přidání podpory zástupců aplikací (Android 7.1+), kdy se jako zástupci zobrazí naposledy použité karty. (pull #145 (https://github.com/brarcher/loyalty-card-locker/pull/145))
- Přidání widgetu, který funguje jako připnutý zástupce aplikace, pro podporu zařízení, která běží pod systémem Android 7.1. (pull #142 (https://github.com/brarcher/loyalty-card-locker/pull/142))

View File

@@ -0,0 +1,5 @@
- Přidání podpory pro přidávání zástupců na domovskou obrazovku při přidávání nebo úpravách karty. (pull #155)
- Odstranit widget, protože byl špatnou náhradou za zástupce. (pull #155)
- Oprava exportu záloh v systému Android 7+. (pull #153)
- Přesnější hlášení typu mime při exportu zálohovaných dat. (pull #156)
- Oprava chyby, kdy nebylo možné upravit kartu. (pull #155)

View File

@@ -0,0 +1,2 @@
- Přidání podpory pro přidávání zástupců věrnostních karet ze spouštěče/domácí obrazovky. (pull #161 (https://github.com/brarcher/loyalty-card-locker/pull/161))
- Odstranění podpory pro přidávání zástupců věrnostních karet ze samotné aplikace. Tím se odstraní potřeba oprávnění k přidávání zkratek. (pull #163 (https://github.com/brarcher/loyalty-card-locker/pull/163))

View File

@@ -0,0 +1,2 @@
- Oprava problému na Android SDK 24+, kdy použití možnosti importu výběru souboru způsobovalo pád. (pull #170 (https://github.com/brarcher/loyalty-card-locker/pull/170))
- Nová ikona a barevné schéma. (pull #171 (https://github.com/brarcher/loyalty-card-locker/pull/171))

View File

@@ -0,0 +1,3 @@
- Oprava pádu při importu některých typů poškozených souborů CSV. (pull #177 (https://github.com/brarcher/loyalty-card-locker/pull/177))
- Oprava importu záloh přímo ze souborového systému. (pull #180 (https://github.com/brarcher/loyalty-card-locker/pull/180))
- Oprava importu záloh z některých typů poskytovatelů obsahu. (pull #179 (https://github.com/brarcher/loyalty-card-locker/pull/179))

View File

@@ -0,0 +1,3 @@
- Překlad do italštiny.
- Podpora všech typů čárových kódů 1D. (Původně byly podporovány pouze 1D čárové kódy produktů)
- Přidání požadovaného oprávnění pro fotoaparát, které původně chybělo.

View File

@@ -0,0 +1 @@
- Dočasné řešení pádu při instalaci na některých verzích systému Android (pravděpodobně Android 5 a nižší). (pull #184 (https://github.com/brarcher/loyalty-card-locker/pull/184))

View File

@@ -0,0 +1,2 @@
- Vylepšené rozvržení seznamu karet. (pull #188 (https://github.com/brarcher/loyalty-card-locker/pull/188))
- Vylepšeno rozvržení při zobrazení karty. (pull #190 (https://github.com/brarcher/loyalty-card-locker/pull/190))

View File

@@ -0,0 +1 @@
- Změny v zobrazení karty, které zobrazují poznámku, umožňují, aby ID karty zabíralo více řádků, a zobrazují název obchodu. (pull #197 (https://github.com/brarcher/loyalty-card-locker/pull/197))

View File

@@ -0,0 +1,3 @@
- Přidejte tichou mezeru na začátek/konec čárových kódů. (pull #200 (https://github.com/brarcher/loyalty-card-locker/pull/200))
- Přidání možností konfigurace barev použitých pro písmo a pozadí názvu obchodu. (pull #203 (https://github.com/brarcher/loyalty-card-locker/pull/203))
- Přidání možností nastavení velikosti písma na stránce s výpisem karet a na stránce s jednotlivými kartami. (pull #204 (https://github.com/brarcher/loyalty-card-locker/pull/204))

View File

@@ -0,0 +1,4 @@
- Aktualizace překladů. (pull #208 (https://github.com/brarcher/loyalty-card-locker/pull/208))
- Aktualizace vykreslování čárových kódů: (pull #209 (https://github.com/brarcher/loyalty-card-locker/pull/209))
- Při otočení obrazovky znovu načtěte aktivitu zobrazení karty, aby měl obrázek čárového kódu správnou velikost.
- Vykreslování 1D čárových kódů ve větším prostoru, což umožní lépe vyplnit obrazovku.

View File

@@ -0,0 +1,2 @@
- Zmenšení prostoru v záhlaví při zobrazení karty. (pull #213 (https://github.com/brarcher/loyalty-card-locker/pull/213))
- Zakázat pípání při skenování čárového kódu. (pull #216 (https://github.com/brarcher/loyalty-card-locker/pull/216))

View File

@@ -0,0 +1,6 @@
- Změna jména na Catima
- Odstraněno intro
- Přidání plovoucích akčních tlačítek
- Oprava pádu systému Android 5 při otevření obrazovky O systému
- Přidána podpora oblíbených položek
- Oprava ignorování zakázaného automatického otáčení

View File

@@ -0,0 +1,2 @@
- Přidání zaoblených okrajů na ikony karet v hlavním přehledu
- Přidána podpora pro seskupování záznamů

View File

@@ -0,0 +1 @@
- Oprava pádu při vyhledávání bez skupin

View File

@@ -0,0 +1,3 @@
- Vylepšené uživatelské rozhraní pro úpravy
- Odstraněna možnost barvy textu záhlaví (nyní se automaticky generuje na základě jasu).
- Aktualizované překlady

View File

@@ -0,0 +1,2 @@
- Přidání přejetí mezi skupinami na domovské obrazovce
- Oprava pádu u karet bez barvy záhlaví

View File

@@ -0,0 +1 @@
- Oprava spouštění přejetí domovské obrazovky i při svislém přejetí prstem

View File

@@ -0,0 +1 @@
- Zapamatování aktivní karty skupiny mezi obrazovkami a relacemi

View File

@@ -0,0 +1,2 @@
- Vždy zobrazit všechny možnosti importu/exportu a zobrazit přípitek na aktuální problémy (zlepšuje kompatibilitu s XPrivacyLua)
- Požádat o potvrzení při opuštění zobrazení úprav po provedení změn bez uložení

View File

@@ -0,0 +1,3 @@
- Přesunutí obrazovky Informace do vlastní aktivity
- Zeptat se uživatele, zda chce použít svůj fotoaparát, nebo ručně zadat ID na přidání/úpravu karty.
- Vytvořit ruční řazení skupin namísto nuceného abecedního řazení

View File

@@ -0,0 +1,2 @@
- Vylepšené překlady
- Drobné opravy uživatelského rozhraní

View File

@@ -0,0 +1,2 @@
- Z hlavní obrazovky lze otevřít dialogové okno o aplikaci, které poskytuje podrobnosti o aplikaci a projektu na GitHubu (issue #19 (https://github.com/brarcher/loyalty-card-locker/issues/19)).
- Umožnění importu informací o věrnostních kartách z/do souboru CSV v externím úložišti (issue #36 (https://github.com/brarcher/loyalty-card-locker/issues/36), issue #20 (https://github.com/brarcher/loyalty-card-locker/issues/20))

View File

@@ -0,0 +1,2 @@
- Zlepšete kontrast tím, že na červených tlačítkách vždy použijete bílý text.
- Přetahovací spodní list v zobrazení věrnostní karty

View File

@@ -0,0 +1 @@
- Oprava průhledného pozadí spodního listu

View File

@@ -0,0 +1,3 @@
- Automatické zaostření textového pole při vytváření nebo úpravě skupiny
- Oprava rozmazaných ikon (všude používejte SVG)
- Vždy otevřít fotoaparát, ale přidat tlačítko ručního skenování do zobrazení fotoaparátu

View File

@@ -0,0 +1 @@
- Oprava tlačítka pro úpravu nebo více informací na spodním listu nad ID čárového kódu

View File

@@ -0,0 +1,2 @@
- Oddělení uživatelského rozhraní pro úpravy na kartách, aby bylo prostornější.
- Přidání podpory polí s vypršením platnosti

View File

@@ -0,0 +1 @@
- Oprava pádu při přepnutí na kartu s čárovým kódem v zobrazení úprav, pokud není k dispozici žádný čárový kód

View File

@@ -0,0 +1,4 @@
- Přidání podpory pro škálování čárového kódu při přesunu na horní stranu, aby se vešel i do menších skenerů
- Oprava přeskakování spodního listu po přepnutí na celou obrazovku
- Zmenšit záhlaví v zobrazení věrnostních karet v režimu na šířku
- Oprava karet, které nezůstávají ve skupině, když se skupina přejmenuje

View File

@@ -0,0 +1 @@
- Oprava pádu na verzích před Androidem 7

View File

@@ -0,0 +1,2 @@
- Přidání podpory rovnováhy
- Reorganizace karty čárového kódu v zobrazení úprav

View File

@@ -0,0 +1,2 @@
- Umožnit uživateli zadat čárový kód ručně. Pokud se uživatel rozhodne zadat čárový kód ručně, zobrazí se seznam všech platných a podporovaných obrázků čárových kódů. Uživatel pak může vybrat obrázek čárového kódu, který odpovídá tomu, co chce. (issue #33, pull #44)
- Vyřešení problému, kdy byly některé zobrazené čárové kódy rozmazané. (issue #37)

View File

@@ -0,0 +1,2 @@
- Zlepšení logiky rozboru vyvážení
- Oprava zobrazení desetinných míst měny na hlavní obrazovce

View File

@@ -0,0 +1 @@
- Oprava vyváženosti parsování pro země používající mezeru jako oddělovač

View File

@@ -0,0 +1,3 @@
- Podpora importu exportů z Voucher Vault (https://github.com/tim-smart/vouchervault/)
- Možnost ponechat obrazovku zapnutou při prohlížení věrnostní karty
- Možnost pozastavit uzamčenou obrazovku při prohlížení věrnostní karty

View File

@@ -0,0 +1 @@
- Oprava regrese způsobující neukládání ručního zadání čárového kódu

View File

@@ -0,0 +1,4 @@
- Podpora importu exportů Fidme (https://play.google.com/store/apps/details?id=fr.snapp.fidme)
- Umožňuje importovat kartu z obrázku uloženého v galerii systému Android uživatele.
- Oprava odříznutí víceřádkové poznámky
- Změnit text "Děkuji" v dialogu o ochraně osobních údajů na "Přijímám", protože Huawei je příliš pedantský

View File

@@ -0,0 +1,6 @@
- Přidání možnosti nastavit hodnotu čárového kódu odděleně od ID karty
- Zjednodušení konfigurace velikosti písma
- Několik drobných oprav uživatelského rozhraní
- Použití ikony písmene i pro klávesové zkratky
- Při ručním zadávání vždy zobrazit všechny typy čárových kódů
- Odstranit dialogové okno prvního spuštění zásad ochrany osobních údajů

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