mirror of
https://github.com/CatimaLoyalty/Android.git
synced 2025-12-24 15:47:53 -05:00
Compare commits
326 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8dfbc0b5e6 | ||
|
|
0a9b292d12 | ||
|
|
e7d4228c0c | ||
|
|
a1836e5433 | ||
|
|
52e0496e36 | ||
|
|
50e6e28277 | ||
|
|
4cf770837b | ||
|
|
38fb9f7fb8 | ||
|
|
7a6232c8b6 | ||
|
|
13e62f3b38 | ||
|
|
d5590d37e3 | ||
|
|
fd21806456 | ||
|
|
34bbfffdaf | ||
|
|
56bbb4a786 | ||
|
|
2b92d200ca | ||
|
|
d4154e51d3 | ||
|
|
7d69e63dc9 | ||
|
|
0189f13ee6 | ||
|
|
11e32712f3 | ||
|
|
d124894d34 | ||
|
|
84bfcf2b3f | ||
|
|
8e96096353 | ||
|
|
a4739b2001 | ||
|
|
d3f5f33b53 | ||
|
|
11bb1aa126 | ||
|
|
688010cae4 | ||
|
|
150482eb56 | ||
|
|
c5e98c62ec | ||
|
|
7b2f8885b1 | ||
|
|
d4a7c33787 | ||
|
|
0cd245cafc | ||
|
|
7487993537 | ||
|
|
33b7829b88 | ||
|
|
7531853548 | ||
|
|
3b77cf6f8a | ||
|
|
7b0f459337 | ||
|
|
b498ffd66e | ||
|
|
6c8440a95f | ||
|
|
6bb8cc8bc9 | ||
|
|
dad531876a | ||
|
|
205a629071 | ||
|
|
b7704cc55e | ||
|
|
84ddbef585 | ||
|
|
3bed947ba9 | ||
|
|
23d2faf107 | ||
|
|
b1d06a0be1 | ||
|
|
83ad3e2200 | ||
|
|
84dcce6018 | ||
|
|
d447ea7ff8 | ||
|
|
91f8856efe | ||
|
|
77e45626bb | ||
|
|
a61304a72a | ||
|
|
7336075860 | ||
|
|
6dbd70fced | ||
|
|
81c7d8a259 | ||
|
|
a6a899e696 | ||
|
|
4ae314b3a0 | ||
|
|
16ac55fd67 | ||
|
|
c659065986 | ||
|
|
f1a6b5a7a8 | ||
|
|
036de26e2a | ||
|
|
5ca0919546 | ||
|
|
4430df50fe | ||
|
|
4ff7913283 | ||
|
|
0376245dbc | ||
|
|
3052c40359 | ||
|
|
64af34ca71 | ||
|
|
aba95bbd8a | ||
|
|
5de2a40a54 | ||
|
|
c12c5a6cc4 | ||
|
|
8674520d46 | ||
|
|
06d3a5fe54 | ||
|
|
6c485af249 | ||
|
|
f0ed989463 | ||
|
|
05de9d6941 | ||
|
|
2ddebc5970 | ||
|
|
f1265bf84e | ||
|
|
dc4c4be4c7 | ||
|
|
d5100b97f3 | ||
|
|
31dc05f6b2 | ||
|
|
ca7ee9e694 | ||
|
|
7acc2e28cd | ||
|
|
7eff64bf26 | ||
|
|
d5d3cfa4e8 | ||
|
|
2b937eda7c | ||
|
|
118b5a90b6 | ||
|
|
d9c9295220 | ||
|
|
eb4b6f276e | ||
|
|
52e68df515 | ||
|
|
c23973086c | ||
|
|
34be79f3d2 | ||
|
|
a8082748ad | ||
|
|
08a4de919f | ||
|
|
7ce54ec0d3 | ||
|
|
ce7dad0c8e | ||
|
|
e059ed361d | ||
|
|
d12d641913 | ||
|
|
5336b37133 | ||
|
|
1819476a71 | ||
|
|
e2c621ec1f | ||
|
|
854bca27ae | ||
|
|
b1dd9fa38a | ||
|
|
8776ed61e9 | ||
|
|
c35fe166ed | ||
|
|
0126b6d6da | ||
|
|
4ecb877e27 | ||
|
|
1c2e810319 | ||
|
|
4f7f72f213 | ||
|
|
88d27c0385 | ||
|
|
2f1f6ed452 | ||
|
|
1ac816000d | ||
|
|
aa069e93b1 | ||
|
|
2f0084a73b | ||
|
|
68624f8911 | ||
|
|
5d7c503465 | ||
|
|
9015b17de6 | ||
|
|
a5f7265bd6 | ||
|
|
b03d579ee7 | ||
|
|
f4511aa82e | ||
|
|
69da7e1e2c | ||
|
|
b3de8428f8 | ||
|
|
7edf97774b | ||
|
|
fddad366d6 | ||
|
|
fcb03791b1 | ||
|
|
e25b0ee251 | ||
|
|
c5b5b0e979 | ||
|
|
347e975d9b | ||
|
|
8890788c3d | ||
|
|
9f9da82e18 | ||
|
|
ab8490798b | ||
|
|
c4b9bf77d9 | ||
|
|
a1a653b939 | ||
|
|
f9cf64a2ea | ||
|
|
83e9a01b8d | ||
|
|
1d776914ee | ||
|
|
bfc103dca9 | ||
|
|
0281f15b36 | ||
|
|
e1929de4b3 | ||
|
|
81699dbed9 | ||
|
|
5c42342070 | ||
|
|
f1c21fc7fe | ||
|
|
7c418dc416 | ||
|
|
3610e9dfb2 | ||
|
|
c5793da52c | ||
|
|
deef5ced0c | ||
|
|
7861f6cd8c | ||
|
|
4ad73a754e | ||
|
|
d3487cc535 | ||
|
|
677283c872 | ||
|
|
d39b732b77 | ||
|
|
5242290a8f | ||
|
|
9d07c1a29c | ||
|
|
548b1b1e8e | ||
|
|
8318d2e7c3 | ||
|
|
99e836a8f1 | ||
|
|
3586d27249 | ||
|
|
5904ba2af7 | ||
|
|
48b89af11a | ||
|
|
0b0a5cc5fa | ||
|
|
098f987d66 | ||
|
|
0083150fa9 | ||
|
|
1c4b4f1f25 | ||
|
|
b7f596568d | ||
|
|
2df7b9e8c6 | ||
|
|
c37e5f4076 | ||
|
|
8840390b3a | ||
|
|
a8a8ac59b0 | ||
|
|
a2e37a82b7 | ||
|
|
1b52cafea6 | ||
|
|
706bf36584 | ||
|
|
05f3b77a73 | ||
|
|
00b0502a6a | ||
|
|
ed755c35b4 | ||
|
|
3101688abb | ||
|
|
98c9c9ce15 | ||
|
|
3040cbf7a7 | ||
|
|
806b232d60 | ||
|
|
982e012940 | ||
|
|
e2cff0f11e | ||
|
|
e678bae95c | ||
|
|
c3758f2a23 | ||
|
|
4852e61c99 | ||
|
|
74d55c8b73 | ||
|
|
89670b5176 | ||
|
|
6840f39e35 | ||
|
|
635fb0105b | ||
|
|
9ad50041b5 | ||
|
|
0887a16555 | ||
|
|
ea690d19dc | ||
|
|
40f7b6e417 | ||
|
|
25b3e18618 | ||
|
|
aa28a52855 | ||
|
|
fe87fe1981 | ||
|
|
6f66b95506 | ||
|
|
a80ab32f07 | ||
|
|
de6248a5d6 | ||
|
|
cfbaeb1ffc | ||
|
|
749a4ddb29 | ||
|
|
4c070c3137 | ||
|
|
5cb8cf3a14 | ||
|
|
a1410a588e | ||
|
|
b2b40809ad | ||
|
|
c092a04e9c | ||
|
|
5bd3a309cc | ||
|
|
4bf6f6cd5f | ||
|
|
1872bea0c3 | ||
|
|
665ef5f712 | ||
|
|
9fbcb23465 | ||
|
|
25c35acd6d | ||
|
|
35747b7d9f | ||
|
|
eea5cdfdd0 | ||
|
|
e0c28830ab | ||
|
|
e714d98ae6 | ||
|
|
bbfba92de0 | ||
|
|
efda8f9f10 | ||
|
|
041472b44b | ||
|
|
92f79e9d3e | ||
|
|
f932d8f6e4 | ||
|
|
5e3399cd32 | ||
|
|
b736f31dc2 | ||
|
|
ff285430c0 | ||
|
|
504c1ac516 | ||
|
|
c4746fe2b9 | ||
|
|
99383d4fc6 | ||
|
|
71cd16caac | ||
|
|
6a04077cec | ||
|
|
5664ff5631 | ||
|
|
48764e266e | ||
|
|
435cfd2839 | ||
|
|
34639f2a2e | ||
|
|
ce9c3bffe6 | ||
|
|
d0d15393f6 | ||
|
|
e9eaf51e40 | ||
|
|
de8a843414 | ||
|
|
0ad4c683b7 | ||
|
|
fdbff0f942 | ||
|
|
a02d9fd995 | ||
|
|
d7f43f8a2b | ||
|
|
3cbd69c6c7 | ||
|
|
1cff0e29e4 | ||
|
|
e718ffb77d | ||
|
|
c2d711650f | ||
|
|
f205045916 | ||
|
|
6ed6e683b5 | ||
|
|
1612bed309 | ||
|
|
ac8a2c445c | ||
|
|
f98203fc5d | ||
|
|
82298d0d50 | ||
|
|
916515f8b2 | ||
|
|
b5e6d40857 | ||
|
|
efef397870 | ||
|
|
377438b6ae | ||
|
|
27443db945 | ||
|
|
420886bc3f | ||
|
|
86a01d36db | ||
|
|
329293fa7c | ||
|
|
26bbea7377 | ||
|
|
50385c6e0e | ||
|
|
43c45c9c0c | ||
|
|
17cdc58b19 | ||
|
|
4960b77ca3 | ||
|
|
a7c6ac695e | ||
|
|
63dfe27b25 | ||
|
|
2ec44046a8 | ||
|
|
0363bc67e4 | ||
|
|
affa434679 | ||
|
|
ded151830e | ||
|
|
e1b604c1d2 | ||
|
|
45d9353b54 | ||
|
|
ceceda560a | ||
|
|
088c25dbad | ||
|
|
54fc1e9106 | ||
|
|
1ce4216584 | ||
|
|
78d0bc7bb7 | ||
|
|
fc4bb134a9 | ||
|
|
cecfcd4714 | ||
|
|
c3364d4592 | ||
|
|
df29abbebd | ||
|
|
d4f30f798b | ||
|
|
61578a6016 | ||
|
|
13695b5c37 | ||
|
|
97d1dcc7eb | ||
|
|
5efea8c1e8 | ||
|
|
c2607cc6a2 | ||
|
|
6c70e77a75 | ||
|
|
d67c896ffe | ||
|
|
c821040c25 | ||
|
|
946a56e921 | ||
|
|
b1ea2c4687 | ||
|
|
745dd109fb | ||
|
|
9f047f3dbd | ||
|
|
68afe746eb | ||
|
|
ebd3b0f7f5 | ||
|
|
163de3653e | ||
|
|
1507694bae | ||
|
|
6d134009be | ||
|
|
c1d2a30931 | ||
|
|
e5cb6fa1a7 | ||
|
|
2188280ada | ||
|
|
fdc8cb0adf | ||
|
|
b79286d1a6 | ||
|
|
d9f0ea8346 | ||
|
|
a262120bc3 | ||
|
|
446131a87d | ||
|
|
3466ba6591 | ||
|
|
5b3c6559b4 | ||
|
|
4680b53f86 | ||
|
|
8423ea9b59 | ||
|
|
1d8b2d82ed | ||
|
|
784bd299e8 | ||
|
|
c8df7a7a2e | ||
|
|
cec2058f49 | ||
|
|
c910a96005 | ||
|
|
f3c7a75963 | ||
|
|
04e0b9ba34 | ||
|
|
1b8e9e4d7c | ||
|
|
7a556e320b | ||
|
|
db706a02d3 | ||
|
|
8e452ed6bd | ||
|
|
a9e574a9b4 | ||
|
|
f24d11403c | ||
|
|
e1c658ac2a | ||
|
|
a5901700b4 | ||
|
|
bf4cd7a961 | ||
|
|
79ca5196d0 | ||
|
|
b24d641aa6 |
49
CHANGELOG.md
49
CHANGELOG.md
@@ -1,5 +1,54 @@
|
||||
# Changelog
|
||||
|
||||
## v2.18.2 - 112
|
||||
|
||||
- Make the possibility to set a custom header more visible
|
||||
|
||||
## v2.18.1 - 111
|
||||
|
||||
- Arabic language support
|
||||
- Display archived card count in group overview
|
||||
- Fix balance parsing bugs (made cards not savable in Arabic and other language with non-Western numbers)
|
||||
- Fix custom theme not applying to main screen correctly
|
||||
- Improve display of selected cards
|
||||
- Fix crash when leaving cardview in RTL layouts for cards with expiry or balance
|
||||
- Fix back arrow in card view pointing the wrong way in RTL layouts
|
||||
|
||||
## v2.17.1 - 109
|
||||
|
||||
- Fix incorrect text colour on "No barcode" button
|
||||
|
||||
## v2.17.0 - 108
|
||||
|
||||
- Add card duplication feature
|
||||
- Don't allow choosing expiry before 1970 (they never worked anyway)
|
||||
- Add support for archiving cards
|
||||
- Move delete from edit to view
|
||||
- Remove rotation lock icon in favour of a new rotation lock setting
|
||||
|
||||
## v2.16.3 - 107 (2022-04-15)
|
||||
|
||||
- Stocard import fixes
|
||||
|
||||
## v2.16.2 - 106 (2022-03-31)
|
||||
|
||||
- Fix some character sequences being shown as a single character
|
||||
|
||||
## v2.16.1 - 105 (2022-03-25)
|
||||
|
||||
- Fix gray block appearing on invalid value for barcode
|
||||
- Stocard import fixes
|
||||
|
||||
## v2.16.0 - 104 (2022-03-09)
|
||||
|
||||
- Save card detail expansion state
|
||||
- Minor UI fixes
|
||||
|
||||
## v2.15.2 - 103 (2022-02-11)
|
||||
|
||||
- Fix manual language selection not applying everywhere
|
||||
- Fix crash in edit view on regionless locale
|
||||
|
||||
## v2.15.1 - 102 (2022-02-10)
|
||||
|
||||
- Various minor fixes
|
||||
|
||||
97
Gemfile.lock
97
Gemfile.lock
@@ -1,29 +1,30 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
CFPropertyList (3.0.3)
|
||||
CFPropertyList (3.0.5)
|
||||
rexml
|
||||
addressable (2.8.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
artifactory (3.0.15)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.2.0)
|
||||
aws-partitions (1.501.0)
|
||||
aws-sdk-core (3.121.0)
|
||||
aws-partitions (1.597.0)
|
||||
aws-sdk-core (3.131.1)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
aws-partitions (~> 1, >= 1.239.0)
|
||||
aws-partitions (~> 1, >= 1.525.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
jmespath (~> 1.0)
|
||||
aws-sdk-kms (1.48.0)
|
||||
aws-sdk-core (~> 3, >= 3.120.0)
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-kms (1.57.0)
|
||||
aws-sdk-core (~> 3, >= 3.127.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.102.0)
|
||||
aws-sdk-core (~> 3, >= 3.120.0)
|
||||
aws-sdk-s3 (1.114.0)
|
||||
aws-sdk-core (~> 3, >= 3.127.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.4)
|
||||
aws-sigv4 (1.4.0)
|
||||
aws-sigv4 (1.5.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
claide (1.0.3)
|
||||
claide (1.1.0)
|
||||
colored (1.2)
|
||||
colored2 (3.1.2)
|
||||
commander (4.6.0)
|
||||
@@ -34,18 +35,19 @@ GEM
|
||||
domain_name (0.5.20190701)
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
dotenv (2.7.6)
|
||||
emoji_regex (3.2.2)
|
||||
excon (0.85.0)
|
||||
faraday (1.7.2)
|
||||
emoji_regex (3.2.3)
|
||||
excon (0.92.3)
|
||||
faraday (1.10.0)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
faraday-excon (~> 1.1)
|
||||
faraday-httpclient (~> 1.0.1)
|
||||
faraday-httpclient (~> 1.0)
|
||||
faraday-multipart (~> 1.0)
|
||||
faraday-net_http (~> 1.0)
|
||||
faraday-net_http_persistent (~> 1.1)
|
||||
faraday-net_http_persistent (~> 1.0)
|
||||
faraday-patron (~> 1.0)
|
||||
faraday-rack (~> 1.0)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
faraday-retry (~> 1.0)
|
||||
ruby2_keywords (>= 0.0.4)
|
||||
faraday-cookie_jar (0.0.7)
|
||||
faraday (>= 0.8.0)
|
||||
@@ -54,14 +56,17 @@ GEM
|
||||
faraday-em_synchrony (1.0.0)
|
||||
faraday-excon (1.1.0)
|
||||
faraday-httpclient (1.0.1)
|
||||
faraday-multipart (1.0.4)
|
||||
multipart-post (~> 2)
|
||||
faraday-net_http (1.0.1)
|
||||
faraday-net_http_persistent (1.2.0)
|
||||
faraday-patron (1.0.0)
|
||||
faraday-rack (1.0.0)
|
||||
faraday_middleware (1.1.0)
|
||||
faraday-retry (1.0.3)
|
||||
faraday_middleware (1.2.0)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.2.5)
|
||||
fastlane (2.193.1)
|
||||
fastimage (2.2.6)
|
||||
fastlane (2.206.2)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
@@ -101,9 +106,9 @@ GEM
|
||||
xcpretty (~> 0.3.0)
|
||||
xcpretty-travis-formatter (>= 0.0.3)
|
||||
gh_inspector (1.1.3)
|
||||
google-apis-androidpublisher_v3 (0.11.0)
|
||||
google-apis-androidpublisher_v3 (0.21.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-core (0.4.1)
|
||||
google-apis-core (0.5.0)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
httpclient (>= 2.8.1, < 3.a)
|
||||
@@ -112,53 +117,53 @@ GEM
|
||||
retriable (>= 2.0, < 4.a)
|
||||
rexml
|
||||
webrick
|
||||
google-apis-iamcredentials_v1 (0.7.0)
|
||||
google-apis-iamcredentials_v1 (0.10.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.5.0)
|
||||
google-apis-playcustomapp_v1 (0.7.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-storage_v1 (0.6.0)
|
||||
google-apis-storage_v1 (0.14.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-cloud-core (1.6.0)
|
||||
google-cloud-env (~> 1.0)
|
||||
google-cloud-errors (~> 1.0)
|
||||
google-cloud-env (1.5.0)
|
||||
faraday (>= 0.17.3, < 2.0)
|
||||
google-cloud-errors (1.1.0)
|
||||
google-cloud-storage (1.34.1)
|
||||
addressable (~> 2.5)
|
||||
google-cloud-env (1.6.0)
|
||||
faraday (>= 0.17.3, < 3.0)
|
||||
google-cloud-errors (1.2.0)
|
||||
google-cloud-storage (1.36.2)
|
||||
addressable (~> 2.8)
|
||||
digest-crc (~> 0.4)
|
||||
google-apis-iamcredentials_v1 (~> 0.1)
|
||||
google-apis-storage_v1 (~> 0.1)
|
||||
google-cloud-core (~> 1.6)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
mini_mime (~> 1.0)
|
||||
googleauth (0.17.1)
|
||||
faraday (>= 0.17.3, < 2.0)
|
||||
googleauth (1.1.3)
|
||||
faraday (>= 0.17.3, < 3.a)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
memoist (~> 0.16)
|
||||
multi_json (~> 1.11)
|
||||
os (>= 0.9, < 2.0)
|
||||
signet (~> 0.15)
|
||||
signet (>= 0.16, < 2.a)
|
||||
highline (2.0.3)
|
||||
http-cookie (1.0.4)
|
||||
http-cookie (1.0.5)
|
||||
domain_name (~> 0.5)
|
||||
httpclient (2.8.3)
|
||||
jmespath (1.4.0)
|
||||
json (2.5.1)
|
||||
jwt (2.2.3)
|
||||
jmespath (1.6.1)
|
||||
json (2.6.2)
|
||||
jwt (2.4.1)
|
||||
memoist (0.16.2)
|
||||
mini_magick (4.11.0)
|
||||
mini_mime (1.1.1)
|
||||
mini_mime (1.1.2)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.0.0)
|
||||
nanaimo (0.3.0)
|
||||
naturally (2.2.1)
|
||||
optparse (0.1.1)
|
||||
os (1.1.1)
|
||||
os (1.1.4)
|
||||
plist (3.6.0)
|
||||
public_suffix (4.0.6)
|
||||
public_suffix (4.0.7)
|
||||
rake (13.0.6)
|
||||
representable (3.1.1)
|
||||
representable (3.2.0)
|
||||
declarative (< 0.1.0)
|
||||
trailblazer-option (>= 0.1.1, < 0.2.0)
|
||||
uber (< 0.2.0)
|
||||
@@ -168,9 +173,9 @@ GEM
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.3.2)
|
||||
security (0.1.3)
|
||||
signet (0.16.0)
|
||||
signet (0.16.1)
|
||||
addressable (~> 2.8)
|
||||
faraday (>= 0.17.3, < 2.0)
|
||||
faraday (>= 0.17.5, < 3.0)
|
||||
jwt (>= 1.5, < 3.0)
|
||||
multi_json (~> 1.10)
|
||||
simctl (1.6.8)
|
||||
@@ -179,7 +184,7 @@ GEM
|
||||
terminal-notifier (2.0.0)
|
||||
terminal-table (1.8.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
trailblazer-option (0.1.1)
|
||||
trailblazer-option (0.1.2)
|
||||
tty-cursor (0.7.1)
|
||||
tty-screen (0.8.1)
|
||||
tty-spinner (0.9.3)
|
||||
@@ -187,8 +192,8 @@ GEM
|
||||
uber (0.1.0)
|
||||
unf (0.1.4)
|
||||
unf_ext
|
||||
unf_ext (0.0.8)
|
||||
unicode-display_width (1.7.0)
|
||||
unf_ext (0.0.8.2)
|
||||
unicode-display_width (1.8.0)
|
||||
webrick (1.7.0)
|
||||
word_wrap (1.0.0)
|
||||
xcodeproj (1.21.0)
|
||||
|
||||
@@ -18,8 +18,8 @@ android {
|
||||
applicationId "me.hackerchick.catima"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 31
|
||||
versionCode 102
|
||||
versionName "2.15.1"
|
||||
versionCode 112
|
||||
versionName "2.18.2"
|
||||
|
||||
vectorDrawables.useSupportLibrary true
|
||||
multiDexEnabled true
|
||||
@@ -80,25 +80,25 @@ android {
|
||||
|
||||
dependencies {
|
||||
// AndroidX
|
||||
implementation 'androidx.appcompat:appcompat:1.4.1'
|
||||
implementation 'androidx.appcompat:appcompat:1.4.2'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
|
||||
implementation 'androidx.exifinterface:exifinterface:1.3.3'
|
||||
implementation 'androidx.palette:palette:1.0.0'
|
||||
implementation 'androidx.preference:preference:1.2.0'
|
||||
implementation 'com.google.android.material:material:1.5.0'
|
||||
implementation 'com.google.android.material:material:1.6.1'
|
||||
implementation 'com.github.yalantis:ucrop:2.2.8'
|
||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
|
||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.6'
|
||||
|
||||
// Splash Screen
|
||||
implementation 'androidx.core:core-splashscreen:1.0.0-beta01'
|
||||
implementation 'androidx.core:core-splashscreen:1.0.0'
|
||||
|
||||
// Third-party
|
||||
implementation 'com.journeyapps:zxing-android-embedded:4.3.0@aar'
|
||||
implementation 'com.google.zxing:core:3.4.1'
|
||||
implementation 'com.google.zxing:core:3.5.0'
|
||||
implementation 'org.apache.commons:commons-csv:1.9.0'
|
||||
implementation 'com.jaredrummler:colorpicker:1.1.0'
|
||||
implementation 'com.github.invissvenska:NumberPickerPreference:1.0.4'
|
||||
implementation 'net.lingala.zip4j:zip4j:2.9.1'
|
||||
implementation 'net.lingala.zip4j:zip4j:2.11.1'
|
||||
|
||||
// SpotBugs
|
||||
implementation 'io.wcm.tooling.spotbugs:io.wcm.tooling.spotbugs.annotations:1.0.0'
|
||||
@@ -106,7 +106,7 @@ dependencies {
|
||||
// Testing
|
||||
testImplementation 'androidx.test:core:1.4.0'
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
testImplementation 'org.robolectric:robolectric:4.7.3'
|
||||
testImplementation 'org.robolectric:robolectric:4.8.1'
|
||||
}
|
||||
|
||||
tasks.withType(SpotBugsTask) {
|
||||
|
||||
@@ -134,7 +134,5 @@
|
||||
<action android:name="android.service.controls.ControlsProviderService" />
|
||||
</intent-filter>
|
||||
</service>
|
||||
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
@@ -5,6 +5,7 @@ import android.graphics.Bitmap;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.PorterDuff;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
@@ -46,7 +47,7 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
|
||||
BarcodeImageWriterTask(
|
||||
Context context, ImageView imageView, String cardIdString,
|
||||
CatimaBarcode barcodeFormat, TextView textView,
|
||||
boolean showFallback, Runnable callback
|
||||
boolean showFallback, Runnable callback, boolean roundCornerPadding
|
||||
) {
|
||||
mContext = context;
|
||||
|
||||
@@ -60,18 +61,32 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
|
||||
cardId = cardIdString;
|
||||
format = barcodeFormat;
|
||||
|
||||
int padding = 0;
|
||||
// Some barcodes already have internal whitespace and shouldn't get extra padding
|
||||
// TODO: Get rid of this hack by somehow detecting this extra whitespace
|
||||
if (roundCornerPadding && !barcodeFormat.hasInternalPadding()) {
|
||||
padding = Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, context.getResources().getDisplayMetrics()));
|
||||
}
|
||||
|
||||
final int MAX_WIDTH = getMaxWidth(format);
|
||||
|
||||
int tempImageHeight;
|
||||
int tempImageWidth;
|
||||
|
||||
if (imageView.getWidth() < MAX_WIDTH) {
|
||||
imageHeight = imageView.getHeight();
|
||||
imageWidth = imageView.getWidth();
|
||||
tempImageHeight = imageView.getHeight();
|
||||
tempImageWidth = imageView.getWidth();
|
||||
} else {
|
||||
// Scale down the image to reduce the memory needed to produce it
|
||||
imageWidth = MAX_WIDTH;
|
||||
tempImageWidth = MAX_WIDTH;
|
||||
double ratio = (double) MAX_WIDTH / (double) imageView.getWidth();
|
||||
imageHeight = (int) (imageView.getHeight() * ratio);
|
||||
tempImageHeight = (int) (imageView.getHeight() * ratio);
|
||||
}
|
||||
|
||||
// Ensure space for padding if wanted
|
||||
imageWidth = tempImageWidth;
|
||||
imageHeight = tempImageHeight - padding;
|
||||
|
||||
this.showFallback = showFallback;
|
||||
}
|
||||
|
||||
|
||||
@@ -76,6 +76,7 @@ public class BarcodeSelectorAdapter extends ArrayAdapter<CatimaBarcodeWithValue>
|
||||
final CatimaBarcode format = CatimaBarcode.fromName(formatType);
|
||||
|
||||
image.setImageBitmap(null);
|
||||
image.setClipToOutline(true);
|
||||
|
||||
if (image.getHeight() == 0) {
|
||||
// The size of the ImageView is not yet available as it has not
|
||||
@@ -89,13 +90,13 @@ public class BarcodeSelectorAdapter extends ArrayAdapter<CatimaBarcodeWithValue>
|
||||
|
||||
Log.d(TAG, "Generating barcode for type " + formatType);
|
||||
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null);
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null, true);
|
||||
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Log.d(TAG, "Generating barcode for type " + formatType);
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null);
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, text, true, null, true);
|
||||
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,9 +4,10 @@ import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.content.pm.ShortcutInfoCompat;
|
||||
import androidx.core.content.pm.ShortcutManagerCompat;
|
||||
@@ -16,9 +17,10 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
/**
|
||||
* The configuration screen for creating a shortcut.
|
||||
*/
|
||||
public class CardShortcutConfigure extends AppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener {
|
||||
public class CardShortcutConfigure extends CatimaAppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener {
|
||||
static final String TAG = "Catima";
|
||||
private SQLiteDatabase mDatabase;
|
||||
private LoyaltyCardCursorAdapter mAdapter;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle bundle) {
|
||||
@@ -33,26 +35,34 @@ public class CardShortcutConfigure extends AppCompatActivity implements LoyaltyC
|
||||
setContentView(R.layout.simple_toolbar_list_activity);
|
||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||
toolbar.setTitle(R.string.shortcutSelectCard);
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
// If there are no cards, bail
|
||||
if (DBHelper.getLoyaltyCardCount(mDatabase) == 0) {
|
||||
int cardCount = DBHelper.getLoyaltyCardCount(mDatabase);
|
||||
if (cardCount == 0) {
|
||||
Toast.makeText(this, R.string.noCardsMessage, Toast.LENGTH_LONG).show();
|
||||
finish();
|
||||
}
|
||||
|
||||
// If all cards are archived, bail
|
||||
if (DBHelper.getArchivedCardsCount(mDatabase) == cardCount) {
|
||||
Toast.makeText(this, R.string.noUnarchivedCardsMessage, Toast.LENGTH_LONG).show();
|
||||
finish();
|
||||
}
|
||||
|
||||
final RecyclerView cardList = findViewById(R.id.list);
|
||||
GridLayoutManager layoutManager = (GridLayoutManager) cardList.getLayoutManager();
|
||||
if (layoutManager != null) {
|
||||
layoutManager.setSpanCount(getResources().getInteger(R.integer.main_view_card_columns));
|
||||
}
|
||||
|
||||
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(mDatabase);
|
||||
final LoyaltyCardCursorAdapter adapter = new LoyaltyCardCursorAdapter(this, cardCursor, this);
|
||||
cardList.setAdapter(adapter);
|
||||
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.Unarchived);
|
||||
mAdapter = new LoyaltyCardCursorAdapter(this, cardCursor, this);
|
||||
cardList.setAdapter(mAdapter);
|
||||
}
|
||||
|
||||
private void onClickAction(int position) {
|
||||
Cursor selected = DBHelper.getLoyaltyCardCursor(mDatabase);
|
||||
Cursor selected = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.Unarchived);
|
||||
selected.moveToPosition(position);
|
||||
LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(selected);
|
||||
|
||||
@@ -65,6 +75,26 @@ public class CardShortcutConfigure extends AppCompatActivity implements LoyaltyC
|
||||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu inputMenu) {
|
||||
getMenuInflater().inflate(R.menu.card_details_menu, inputMenu);
|
||||
Utils.updateMenuCardDetailsButtonState(inputMenu.findItem(R.id.action_unfold), mAdapter.showingDetails());
|
||||
return super.onCreateOptionsMenu(inputMenu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem inputItem) {
|
||||
int id = inputItem.getItemId();
|
||||
|
||||
if (id == R.id.action_unfold) {
|
||||
mAdapter.showDetails(!mAdapter.showingDetails());
|
||||
invalidateOptionsMenu();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onOptionsItemSelected(inputItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRowClicked(int inputPosition) {
|
||||
|
||||
@@ -16,13 +16,13 @@ import android.service.controls.actions.ControlAction;
|
||||
import android.service.controls.templates.StatelessTemplate;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Flow;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.R)
|
||||
public class CardsOnPowerScreenService extends ControlsProviderService {
|
||||
|
||||
@@ -40,7 +40,7 @@ public class CardsOnPowerScreenService extends ControlsProviderService {
|
||||
@NonNull
|
||||
@Override
|
||||
public Flow.Publisher<Control> createPublisherForAllAvailable() {
|
||||
Cursor loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(mDatabase);
|
||||
Cursor loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.Unarchived);
|
||||
return subscriber -> {
|
||||
while (loyaltyCardCursor.moveToNext()) {
|
||||
LoyaltyCard card = LoyaltyCard.toLoyaltyCard(loyaltyCardCursor);
|
||||
|
||||
@@ -19,10 +19,7 @@ public class CatimaAppCompatActivity extends AppCompatActivity {
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
// XXX splash screen activity has to do this after installing splash screen before view inflate
|
||||
if (!this.getClass().getSimpleName().equals(MainActivity.class.getSimpleName())) {
|
||||
Utils.patchColors(this);
|
||||
}
|
||||
Utils.patchColors(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -72,6 +72,11 @@ public class CatimaBarcode {
|
||||
|| mBarcodeFormat == BarcodeFormat.QR_CODE;
|
||||
}
|
||||
|
||||
public boolean hasInternalPadding() {
|
||||
return mBarcodeFormat == BarcodeFormat.PDF_417
|
||||
|| mBarcodeFormat == BarcodeFormat.QR_CODE;
|
||||
}
|
||||
|
||||
public BarcodeFormat format() {
|
||||
return mBarcodeFormat;
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ import java.util.List;
|
||||
public class DBHelper extends SQLiteOpenHelper {
|
||||
public static final String DATABASE_NAME = "Catima.db";
|
||||
public static final int ORIGINAL_DATABASE_VERSION = 1;
|
||||
public static final int DATABASE_VERSION = 14;
|
||||
public static final int DATABASE_VERSION = 15;
|
||||
|
||||
public static class LoyaltyCardDbGroups {
|
||||
public static final String TABLE = "groups";
|
||||
@@ -45,6 +45,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
public static final String STAR_STATUS = "starstatus";
|
||||
public static final String LAST_USED = "lastused";
|
||||
public static final String ZOOM_LEVEL = "zoomlevel";
|
||||
public static final String ARCHIVE_STATUS = "archive";
|
||||
}
|
||||
|
||||
public static class LoyaltyCardDbIdsGroups {
|
||||
@@ -71,6 +72,12 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
Descending
|
||||
}
|
||||
|
||||
public enum LoyaltyCardArchiveFilter {
|
||||
All,
|
||||
Archived,
|
||||
Unarchived
|
||||
}
|
||||
|
||||
public DBHelper(Context context) {
|
||||
super(context, DATABASE_NAME, null, DATABASE_VERSION);
|
||||
}
|
||||
@@ -97,7 +104,8 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
LoyaltyCardDbIds.BARCODE_TYPE + " TEXT," +
|
||||
LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0'," +
|
||||
LoyaltyCardDbIds.LAST_USED + " INTEGER DEFAULT '0', " +
|
||||
LoyaltyCardDbIds.ZOOM_LEVEL + " INTEGER DEFAULT '100' )");
|
||||
LoyaltyCardDbIds.ZOOM_LEVEL + " INTEGER DEFAULT '100', " +
|
||||
LoyaltyCardDbIds.ARCHIVE_STATUS + " INTEGER DEFAULT '0' )");
|
||||
|
||||
// create associative table for cards in groups
|
||||
db.execSQL("CREATE TABLE " + LoyaltyCardDbIdsGroups.TABLE + "(" +
|
||||
@@ -302,6 +310,10 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
|
||||
+ " ADD COLUMN " + LoyaltyCardDbIds.ZOOM_LEVEL + " INTEGER DEFAULT '100' ");
|
||||
}
|
||||
if (oldVersion < 15 && newVersion >= 15) {
|
||||
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
|
||||
+ " ADD COLUMN " + LoyaltyCardDbIds.ARCHIVE_STATUS + " INTEGER DEFAULT '0' ");
|
||||
}
|
||||
}
|
||||
|
||||
private static ContentValues generateFTSContentValues(final int id, final String store, final String note) {
|
||||
@@ -349,7 +361,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
final SQLiteDatabase database, final String store, final String note, final Date expiry,
|
||||
final BigDecimal balance, final Currency balanceType, final String cardId,
|
||||
final String barcodeId, final CatimaBarcode barcodeType, final Integer headerColor,
|
||||
final int starStatus, final Long lastUsed) {
|
||||
final int starStatus, final Long lastUsed,final int archiveStatus) {
|
||||
database.beginTransaction();
|
||||
|
||||
// Card
|
||||
@@ -365,6 +377,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
|
||||
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
|
||||
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
|
||||
contentValues.put(LoyaltyCardDbIds.ARCHIVE_STATUS, archiveStatus);
|
||||
long id = database.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
|
||||
|
||||
// FTS
|
||||
@@ -380,7 +393,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
final SQLiteDatabase database, final int id, final String store, final String note,
|
||||
final Date expiry, final BigDecimal balance, final Currency balanceType,
|
||||
final String cardId, final String barcodeId, final CatimaBarcode barcodeType,
|
||||
final Integer headerColor, final int starStatus, final Long lastUsed) {
|
||||
final Integer headerColor, final int starStatus, final Long lastUsed, final int archiveStatus) {
|
||||
database.beginTransaction();
|
||||
|
||||
// Card
|
||||
@@ -397,6 +410,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
|
||||
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
|
||||
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
|
||||
contentValues.put(LoyaltyCardDbIds.ARCHIVE_STATUS, archiveStatus);
|
||||
database.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
|
||||
|
||||
// FTS
|
||||
@@ -438,6 +452,15 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
return (rowsUpdated == 1);
|
||||
}
|
||||
|
||||
public static boolean updateLoyaltyCardArchiveStatus(SQLiteDatabase database, final int id, final int archiveStatus) {
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(LoyaltyCardDbIds.ARCHIVE_STATUS, archiveStatus);
|
||||
int rowsUpdated = database.update(LoyaltyCardDbIds.TABLE, contentValues,
|
||||
whereAttrs(LoyaltyCardDbIds.ID),
|
||||
withArgs(id));
|
||||
return (rowsUpdated == 1);
|
||||
}
|
||||
|
||||
public static boolean updateLoyaltyCardStarStatus(SQLiteDatabase database, final int id, final int starStatus) {
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
|
||||
@@ -549,9 +572,35 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
return (rowsDeleted == 1);
|
||||
}
|
||||
|
||||
public static int getArchivedCardsCount(SQLiteDatabase database) {
|
||||
return (int) DatabaseUtils.queryNumEntries(database, LoyaltyCardDbIds.TABLE,
|
||||
whereAttrs(LoyaltyCardDbIds.ARCHIVE_STATUS), withArgs(1));
|
||||
}
|
||||
|
||||
public static int getArchivedCardsCount(SQLiteDatabase database, final String groupName) {
|
||||
Cursor data = database.rawQuery(
|
||||
"select * from " + LoyaltyCardDbIds.TABLE + " c " +
|
||||
" LEFT JOIN " + LoyaltyCardDbIdsGroups.TABLE + " cg " +
|
||||
" ON c." + LoyaltyCardDbIds.ID + " = cg." + LoyaltyCardDbIdsGroups.cardID +
|
||||
" where " + LoyaltyCardDbIds.ARCHIVE_STATUS + " = 1" +
|
||||
" AND " + LoyaltyCardDbIdsGroups.groupID + "= ?",
|
||||
withArgs(groupName)
|
||||
);
|
||||
|
||||
int count = data.getCount();
|
||||
|
||||
data.close();
|
||||
return count;
|
||||
}
|
||||
|
||||
public static Cursor getLoyaltyCardCursor(SQLiteDatabase database) {
|
||||
// An empty string will match everything
|
||||
return getLoyaltyCardCursor(database, "");
|
||||
return getLoyaltyCardCursor(database, LoyaltyCardArchiveFilter.All);
|
||||
}
|
||||
|
||||
public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, LoyaltyCardArchiveFilter archiveFilter) {
|
||||
// An empty string will match everything
|
||||
return getLoyaltyCardCursor(database, "", archiveFilter);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -560,8 +609,8 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
* @param filter
|
||||
* @return Cursor
|
||||
*/
|
||||
public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, final String filter) {
|
||||
return getLoyaltyCardCursor(database, filter, null);
|
||||
public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, final String filter, LoyaltyCardArchiveFilter archiveFilter) {
|
||||
return getLoyaltyCardCursor(database, filter, null, archiveFilter);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -571,8 +620,8 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
* @param group
|
||||
* @return Cursor
|
||||
*/
|
||||
public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, final String filter, Group group) {
|
||||
return getLoyaltyCardCursor(database, filter, group, LoyaltyCardOrder.Alpha, LoyaltyCardOrderDirection.Ascending);
|
||||
public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, final String filter, Group group, LoyaltyCardArchiveFilter archiveFilter) {
|
||||
return getLoyaltyCardCursor(database, filter, group, LoyaltyCardOrder.Alpha, LoyaltyCardOrderDirection.Ascending, archiveFilter);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -583,7 +632,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
* @param order
|
||||
* @return Cursor
|
||||
*/
|
||||
public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, String filter, Group group, LoyaltyCardOrder order, LoyaltyCardOrderDirection direction) {
|
||||
public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, String filter, Group group, LoyaltyCardOrder order, LoyaltyCardOrderDirection direction, LoyaltyCardArchiveFilter archiveFilter) {
|
||||
StringBuilder groupFilter = new StringBuilder();
|
||||
String limitString = "";
|
||||
|
||||
@@ -606,6 +655,11 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
}
|
||||
}
|
||||
|
||||
String archiveFilterString = "";
|
||||
if (archiveFilter != LoyaltyCardArchiveFilter.All) {
|
||||
archiveFilterString = " AND " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ARCHIVE_STATUS + " = " + (archiveFilter.equals(LoyaltyCardArchiveFilter.Unarchived) ? 0 : 1);
|
||||
}
|
||||
|
||||
String orderField = getFieldForOrder(order);
|
||||
|
||||
return database.rawQuery("SELECT " + LoyaltyCardDbIds.TABLE + ".* FROM " + LoyaltyCardDbIds.TABLE +
|
||||
@@ -613,7 +667,9 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
" ON " + LoyaltyCardDbFTS.TABLE + "." + LoyaltyCardDbFTS.ID + " = " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ID +
|
||||
(filter.trim().isEmpty() ? " " : " AND " + LoyaltyCardDbFTS.TABLE + " MATCH ? ") +
|
||||
groupFilter.toString() +
|
||||
" ORDER BY " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STAR_STATUS + " DESC, " +
|
||||
archiveFilterString +
|
||||
" ORDER BY " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ARCHIVE_STATUS + " ASC, " +
|
||||
LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STAR_STATUS + " DESC, " +
|
||||
" (CASE WHEN " + LoyaltyCardDbIds.TABLE + "." + orderField + " IS NULL THEN 1 ELSE 0 END), " +
|
||||
LoyaltyCardDbIds.TABLE + "." + orderField + " COLLATE NOCASE " + getDbDirection(order, direction) + ", " +
|
||||
LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STORE + " COLLATE NOCASE ASC " +
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package protect.card_locker;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.view.LayoutInflater;
|
||||
@@ -15,7 +16,7 @@ import protect.card_locker.preferences.Settings;
|
||||
|
||||
public class GroupCursorAdapter extends BaseCursorAdapter<GroupCursorAdapter.GroupListItemViewHolder> {
|
||||
Settings mSettings;
|
||||
private final Context mContext;
|
||||
public final Context mContext;
|
||||
private final GroupAdapterListener mListener;
|
||||
SQLiteDatabase mDatabase;
|
||||
|
||||
@@ -23,7 +24,7 @@ public class GroupCursorAdapter extends BaseCursorAdapter<GroupCursorAdapter.Gro
|
||||
super(inputCursor, DBHelper.LoyaltyCardDbGroups.ORDER);
|
||||
setHasStableIds(true);
|
||||
mSettings = new Settings(inputContext);
|
||||
mContext = inputContext.getApplicationContext();
|
||||
mContext = inputContext;
|
||||
mListener = inputListener;
|
||||
mDatabase = new DBHelper(inputContext).getReadableDatabase();
|
||||
|
||||
@@ -43,8 +44,18 @@ public class GroupCursorAdapter extends BaseCursorAdapter<GroupCursorAdapter.Gro
|
||||
inputHolder.mName.setText(group._id);
|
||||
|
||||
int groupCardCount = DBHelper.getGroupCardCount(mDatabase, group._id);
|
||||
inputHolder.mCardCount.setText(mContext.getResources().getQuantityString(R.plurals.groupCardCount, groupCardCount, groupCardCount));
|
||||
int archivedCardCount = DBHelper.getArchivedCardsCount(mDatabase, group._id);
|
||||
|
||||
Resources resources = mContext.getResources();
|
||||
|
||||
String cardCountText;
|
||||
if (archivedCardCount > 0) {
|
||||
cardCountText = resources.getQuantityString(R.plurals.groupCardCountWithArchived, groupCardCount, groupCardCount, archivedCardCount);
|
||||
} else {
|
||||
cardCountText = resources.getQuantityString(R.plurals.groupCardCount, groupCardCount, groupCardCount);
|
||||
}
|
||||
|
||||
inputHolder.mCardCount.setText(cardCountText);
|
||||
inputHolder.mName.setTextSize(mSettings.getFontSizeMax(mSettings.getMediumFont()));
|
||||
inputHolder.mCardCount.setTextSize(mSettings.getFontSizeMax(mSettings.getSmallFont()));
|
||||
|
||||
|
||||
@@ -16,6 +16,12 @@ import android.widget.EditText;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
@@ -23,15 +29,6 @@ import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import protect.card_locker.async.TaskHandler;
|
||||
import protect.card_locker.importexport.DataFormat;
|
||||
import protect.card_locker.importexport.ImportExportResult;
|
||||
|
||||
@@ -116,7 +116,7 @@ public class ImportURIHelper {
|
||||
headerColor = Integer.parseInt(unparsedHeaderColor);
|
||||
}
|
||||
|
||||
return new LoyaltyCard(-1, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, 0, Utils.getUnixTime(), 100);
|
||||
return new LoyaltyCard(-1, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, 0, Utils.getUnixTime(), 100,0);
|
||||
} catch (NullPointerException | NumberFormatException | UnsupportedEncodingException ex) {
|
||||
throw new InvalidObjectException("Not a valid import URI");
|
||||
}
|
||||
|
||||
@@ -10,6 +10,9 @@ import android.graphics.Paint;
|
||||
import android.graphics.Rect;
|
||||
import android.graphics.Typeface;
|
||||
import android.text.TextPaint;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.core.graphics.PaintCompat;
|
||||
|
||||
/**
|
||||
* Original from https://github.com/andOTP/andOTP/blob/master/app/src/main/java/org/shadowice/flocke/andotp/Utilities/LetterBitmap.java
|
||||
@@ -48,7 +51,6 @@ class LetterBitmap {
|
||||
public LetterBitmap(Context context, String displayName, String key, int tileLetterFontSize,
|
||||
int width, int height, Integer backgroundColor, Integer textColor) {
|
||||
TextPaint paint = new TextPaint();
|
||||
paint.setTypeface(Typeface.create("sans-serif-light", Typeface.BOLD));
|
||||
|
||||
if (textColor != null) {
|
||||
paint.setColor(textColor);
|
||||
@@ -58,6 +60,8 @@ class LetterBitmap {
|
||||
|
||||
paint.setTextAlign(Paint.Align.CENTER);
|
||||
paint.setAntiAlias(true);
|
||||
paint.setTextSize(tileLetterFontSize);
|
||||
paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));
|
||||
|
||||
if (backgroundColor == null) {
|
||||
mColor = getDefaultColor(context, key);
|
||||
@@ -66,22 +70,31 @@ class LetterBitmap {
|
||||
}
|
||||
|
||||
mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
|
||||
String firstChar = displayName.substring(0, 1);
|
||||
String firstChar = displayName.substring(0, 1).toUpperCase();
|
||||
int firstCharEnd = 2;
|
||||
while (firstCharEnd <= displayName.length()) {
|
||||
// Test for the longest render-able string
|
||||
// But ignore containing only a-Z0-9 to not render things like ffi as a single character
|
||||
String test = displayName.substring(0, firstCharEnd);
|
||||
if (!isAlphabetical(test) && PaintCompat.hasGlyph(paint, test)) {
|
||||
firstChar = test;
|
||||
}
|
||||
firstCharEnd++;
|
||||
}
|
||||
|
||||
Log.d("LetterBitmap", "using sequence " + firstChar + " to render first char which has length " + firstChar.length());
|
||||
|
||||
final Canvas c = new Canvas();
|
||||
c.setBitmap(mBitmap);
|
||||
c.drawColor(mColor);
|
||||
|
||||
char[] firstCharArray = new char[1];
|
||||
firstCharArray[0] = firstChar.toUpperCase().charAt(0);
|
||||
paint.setTextSize(tileLetterFontSize);
|
||||
|
||||
// The bounds that enclose the letter
|
||||
Rect bounds = new Rect();
|
||||
paint.getTextBounds(firstChar, 0, firstChar.length(), bounds);
|
||||
c.drawText(firstChar,
|
||||
0, firstChar.length(),
|
||||
width / 2.0f, (height - (bounds.bottom + bounds.top)) / 2.0f
|
||||
, paint);
|
||||
|
||||
paint.getTextBounds(firstCharArray, 0, 1, bounds);
|
||||
c.drawText(firstCharArray, 0, 1, width / 2.0f, height / 2.0f
|
||||
+ (bounds.bottom - bounds.top) / 2.0f, paint);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -112,6 +125,10 @@ class LetterBitmap {
|
||||
return colors.getColor(color, Color.BLACK);
|
||||
}
|
||||
|
||||
private static boolean isAlphabetical(String string) {
|
||||
return string.matches("[a-zA-Z0-9]*");
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine the color which the letter tile will use if no default
|
||||
* color is provided.
|
||||
|
||||
@@ -29,13 +29,14 @@ public class LoyaltyCard implements Parcelable {
|
||||
public final Integer headerColor;
|
||||
|
||||
public final int starStatus;
|
||||
public final int archiveStatus;
|
||||
public final long lastUsed;
|
||||
public int zoomLevel;
|
||||
|
||||
public LoyaltyCard(final int id, final String store, final String note, final Date expiry,
|
||||
final BigDecimal balance, final Currency balanceType, final String cardId,
|
||||
@Nullable final String barcodeId, @Nullable final CatimaBarcode barcodeType,
|
||||
@Nullable final Integer headerColor, final int starStatus, final long lastUsed, final int zoomLevel) {
|
||||
@Nullable final Integer headerColor, final int starStatus, final long lastUsed, final int zoomLevel,final int archiveStatus) {
|
||||
this.id = id;
|
||||
this.store = store;
|
||||
this.note = note;
|
||||
@@ -49,6 +50,7 @@ public class LoyaltyCard implements Parcelable {
|
||||
this.starStatus = starStatus;
|
||||
this.lastUsed = lastUsed;
|
||||
this.zoomLevel = zoomLevel;
|
||||
this.archiveStatus = archiveStatus;
|
||||
}
|
||||
|
||||
protected LoyaltyCard(Parcel in) {
|
||||
@@ -68,6 +70,7 @@ public class LoyaltyCard implements Parcelable {
|
||||
starStatus = in.readInt();
|
||||
lastUsed = in.readLong();
|
||||
zoomLevel = in.readInt();
|
||||
archiveStatus = in.readInt();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -85,6 +88,7 @@ public class LoyaltyCard implements Parcelable {
|
||||
parcel.writeInt(starStatus);
|
||||
parcel.writeLong(lastUsed);
|
||||
parcel.writeInt(zoomLevel);
|
||||
parcel.writeInt(archiveStatus);
|
||||
}
|
||||
|
||||
public static LoyaltyCard toLoyaltyCard(Cursor cursor) {
|
||||
@@ -98,6 +102,7 @@ public class LoyaltyCard implements Parcelable {
|
||||
int starred = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STAR_STATUS));
|
||||
long lastUsed = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.LAST_USED));
|
||||
int zoomLevel = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ZOOM_LEVEL));
|
||||
int archived = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ARCHIVE_STATUS));
|
||||
|
||||
int barcodeTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE);
|
||||
int balanceTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE);
|
||||
@@ -124,7 +129,7 @@ public class LoyaltyCard implements Parcelable {
|
||||
headerColor = cursor.getInt(headerColorColumn);
|
||||
}
|
||||
|
||||
return new LoyaltyCard(id, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starred, lastUsed, zoomLevel);
|
||||
return new LoyaltyCard(id, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starred, lastUsed, zoomLevel,archived);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package protect.card_locker;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Resources;
|
||||
import android.database.Cursor;
|
||||
import android.graphics.Bitmap;
|
||||
@@ -15,12 +16,6 @@ import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.graphics.BlendModeColorFilterCompat;
|
||||
import androidx.core.graphics.BlendModeCompat;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.card.MaterialCardView;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
@@ -29,36 +24,58 @@ import java.util.ArrayList;
|
||||
import java.util.Currency;
|
||||
import java.util.Date;
|
||||
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.core.graphics.BlendModeColorFilterCompat;
|
||||
import androidx.core.graphics.BlendModeCompat;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import protect.card_locker.preferences.Settings;
|
||||
|
||||
public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCursorAdapter.LoyaltyCardListItemViewHolder> {
|
||||
private int mCurrentSelectedIndex = -1;
|
||||
Settings mSettings;
|
||||
boolean mDarkModeEnabled;
|
||||
private final Context mContext;
|
||||
public final Context mContext;
|
||||
private final CardAdapterListener mListener;
|
||||
protected SparseBooleanArray mSelectedItems;
|
||||
protected SparseBooleanArray mAnimationItemsIndex;
|
||||
private boolean mReverseAllAnimations = false;
|
||||
private boolean mShowDetails = true;
|
||||
private boolean mShowDetails;
|
||||
|
||||
public LoyaltyCardCursorAdapter(Context inputContext, Cursor inputCursor, CardAdapterListener inputListener) {
|
||||
super(inputCursor, DBHelper.LoyaltyCardDbIds.ID);
|
||||
setHasStableIds(true);
|
||||
mSettings = new Settings(inputContext);
|
||||
mContext = inputContext.getApplicationContext();
|
||||
mContext = inputContext;
|
||||
mListener = inputListener;
|
||||
mSelectedItems = new SparseBooleanArray();
|
||||
mAnimationItemsIndex = new SparseBooleanArray();
|
||||
|
||||
mDarkModeEnabled = Utils.isDarkModeEnabled(inputContext);
|
||||
|
||||
refreshState();
|
||||
|
||||
swapCursor(inputCursor);
|
||||
}
|
||||
|
||||
public void refreshState() {
|
||||
// Retrieve user details preference
|
||||
SharedPreferences cardDetailsPref = mContext.getSharedPreferences(
|
||||
mContext.getString(R.string.sharedpreference_card_details),
|
||||
Context.MODE_PRIVATE);
|
||||
mShowDetails = cardDetailsPref.getBoolean(mContext.getString(R.string.sharedpreference_card_details_show), true);
|
||||
}
|
||||
|
||||
public void showDetails(boolean show) {
|
||||
mShowDetails = show;
|
||||
notifyDataSetChanged();
|
||||
|
||||
// Store in Shared Preference to restore next adapter launch
|
||||
SharedPreferences cardDetailsPref = mContext.getSharedPreferences(
|
||||
mContext.getString(R.string.sharedpreference_card_details),
|
||||
Context.MODE_PRIVATE);
|
||||
SharedPreferences.Editor cardDetailsPrefEditor = cardDetailsPref.edit();
|
||||
cardDetailsPrefEditor.putBoolean(mContext.getString(R.string.sharedpreference_card_details_show), show);
|
||||
cardDetailsPrefEditor.apply();
|
||||
}
|
||||
|
||||
public boolean showingDetails() {
|
||||
@@ -112,7 +129,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
}
|
||||
inputHolder.setIconBackgroundColor(loyaltyCard.headerColor != null ? loyaltyCard.headerColor : R.attr.colorPrimary);
|
||||
|
||||
inputHolder.toggleStar(loyaltyCard.starStatus != 0, itemSelected(inputCursor.getPosition()));
|
||||
inputHolder.toggleCardStateIcon(loyaltyCard.starStatus != 0, loyaltyCard.archiveStatus != 0, itemSelected(inputCursor.getPosition()));
|
||||
|
||||
inputHolder.itemView.setActivated(mSelectedItems.get(inputCursor.getPosition(), false));
|
||||
applyIconAnimation(inputHolder, inputCursor.getPosition());
|
||||
@@ -151,14 +168,12 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
|
||||
private void applyIconAnimation(LoyaltyCardListItemViewHolder inputHolder, int inputPosition) {
|
||||
if (itemSelected(inputPosition)) {
|
||||
inputHolder.mCardIcon.setVisibility(View.GONE);
|
||||
inputHolder.mTickIcon.setVisibility(View.VISIBLE);
|
||||
if (mCurrentSelectedIndex == inputPosition) {
|
||||
resetCurrentIndex();
|
||||
}
|
||||
} else {
|
||||
inputHolder.mTickIcon.setVisibility(View.GONE);
|
||||
inputHolder.mCardIcon.setVisibility(View.VISIBLE);
|
||||
if ((mReverseAllAnimations && mAnimationItemsIndex.get(inputPosition, false)) || mCurrentSelectedIndex == inputPosition) {
|
||||
resetCurrentIndex();
|
||||
}
|
||||
@@ -213,13 +228,15 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
public class LoyaltyCardListItemViewHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
public TextView mStoreField, mNoteField, mBalanceField, mExpiryField;
|
||||
public ImageView mCardIcon, mStarBackground, mStarBorder, mTickIcon;
|
||||
public ImageView mCardIcon, mStarBackground, mStarBorder, mTickIcon, mArchivedBackground;
|
||||
public MaterialCardView mRow, mIconLayout;
|
||||
public ConstraintLayout mStar;
|
||||
public ConstraintLayout mStar, mArchived;
|
||||
public View mDivider;
|
||||
|
||||
private int mIconBackgroundColor;
|
||||
|
||||
|
||||
|
||||
protected LoyaltyCardListItemViewHolder(View inputView, CardAdapterListener inputListener) {
|
||||
super(inputView);
|
||||
mRow = inputView.findViewById(R.id.row);
|
||||
@@ -228,12 +245,13 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
mNoteField = inputView.findViewById(R.id.note);
|
||||
mBalanceField = inputView.findViewById(R.id.balance);
|
||||
mExpiryField = inputView.findViewById(R.id.expiry);
|
||||
|
||||
mIconLayout = inputView.findViewById(R.id.icon_layout);
|
||||
mCardIcon = inputView.findViewById(R.id.thumbnail);
|
||||
mStar = inputView.findViewById(R.id.star);
|
||||
mStarBackground = inputView.findViewById(R.id.star_background);
|
||||
mStarBorder = inputView.findViewById(R.id.star_border);
|
||||
mArchived = inputView.findViewById(R.id.archivedIcon);
|
||||
mArchivedBackground = inputView.findViewById(R.id.archive_background);
|
||||
mTickIcon = inputView.findViewById(R.id.selected_thumbnail);
|
||||
inputView.setOnLongClickListener(view -> {
|
||||
inputListener.onRowClicked(getAdapterPosition());
|
||||
@@ -268,10 +286,12 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
mDivider.setVisibility(View.VISIBLE);
|
||||
mBalanceField.setVisibility(View.VISIBLE);
|
||||
Drawable balanceIcon = mBalanceField.getCompoundDrawables()[0];
|
||||
balanceIcon.setBounds(0, 0, drawableSize, drawableSize);
|
||||
mBalanceField.setCompoundDrawablesRelative(balanceIcon, null, null, null);
|
||||
if (mDarkModeEnabled) {
|
||||
balanceIcon.setColorFilter(BlendModeColorFilterCompat.createBlendModeColorFilterCompat(Color.WHITE, BlendModeCompat.SRC_ATOP));
|
||||
if (balanceIcon != null) {
|
||||
balanceIcon.setBounds(0, 0, drawableSize, drawableSize);
|
||||
mBalanceField.setCompoundDrawablesRelative(balanceIcon, null, null, null);
|
||||
if (mDarkModeEnabled) {
|
||||
balanceIcon.setColorFilter(BlendModeColorFilterCompat.createBlendModeColorFilterCompat(Color.WHITE, BlendModeCompat.SRC_ATOP));
|
||||
}
|
||||
}
|
||||
mBalanceField.setText(Utils.formatBalance(mContext, balance, balanceType));
|
||||
mBalanceField.setTextSize(size);
|
||||
@@ -288,21 +308,25 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
mDivider.setVisibility(View.VISIBLE);
|
||||
mExpiryField.setVisibility(View.VISIBLE);
|
||||
Drawable expiryIcon = mExpiryField.getCompoundDrawables()[0];
|
||||
expiryIcon.setBounds(0, 0, drawableSize, drawableSize);
|
||||
mExpiryField.setCompoundDrawablesRelative(expiryIcon, null, null, null);
|
||||
if (Utils.hasExpired(expiry)) {
|
||||
expiryIcon.setColorFilter(BlendModeColorFilterCompat.createBlendModeColorFilterCompat(Color.RED, BlendModeCompat.SRC_ATOP));
|
||||
mExpiryField.setTextColor(Color.RED);
|
||||
} else if (mDarkModeEnabled) {
|
||||
expiryIcon.setColorFilter(BlendModeColorFilterCompat.createBlendModeColorFilterCompat(Color.WHITE, BlendModeCompat.SRC_ATOP));
|
||||
if (expiryIcon != null) {
|
||||
expiryIcon.setBounds(0, 0, drawableSize, drawableSize);
|
||||
mExpiryField.setCompoundDrawablesRelative(expiryIcon, null, null, null);
|
||||
if (Utils.hasExpired(expiry)) {
|
||||
expiryIcon.setColorFilter(BlendModeColorFilterCompat.createBlendModeColorFilterCompat(Color.RED, BlendModeCompat.SRC_ATOP));
|
||||
} else if (mDarkModeEnabled) {
|
||||
expiryIcon.setColorFilter(BlendModeColorFilterCompat.createBlendModeColorFilterCompat(Color.WHITE, BlendModeCompat.SRC_ATOP));
|
||||
}
|
||||
}
|
||||
mExpiryField.setText(DateFormat.getDateInstance(DateFormat.LONG).format(expiry));
|
||||
if (Utils.hasExpired(expiry)) {
|
||||
mExpiryField.setTextColor(Color.RED);
|
||||
}
|
||||
mExpiryField.setTextSize(size);
|
||||
}
|
||||
mExpiryField.requestLayout();
|
||||
}
|
||||
|
||||
public void toggleStar(boolean enable, boolean colorByTheme) {
|
||||
public void toggleCardStateIcon(boolean enableStar, boolean enableArchive, boolean colorByTheme) {
|
||||
/* the below code does not work in android 5! hence the change of drawable instead
|
||||
boolean needDarkForeground = Utils.needsDarkForeground(mIconBackgroundColor);
|
||||
Drawable borderDrawable = mStarBorder.getDrawable().mutate();
|
||||
@@ -316,20 +340,33 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
if (colorByTheme) {
|
||||
dark = !mDarkModeEnabled;
|
||||
}
|
||||
|
||||
if (dark) {
|
||||
mStarBorder.setImageResource(R.drawable.ic_unstarred_white);
|
||||
mStarBackground.setImageResource(R.drawable.ic_starred_black);
|
||||
mArchivedBackground.setImageResource(R.drawable.ic_baseline_archive_24_black);
|
||||
} else {
|
||||
mStarBorder.setImageResource(R.drawable.ic_unstarred_black);
|
||||
mStarBackground.setImageResource(R.drawable.ic_starred_white);
|
||||
mArchivedBackground.setImageResource(R.drawable.ic_baseline_archive_24);
|
||||
}
|
||||
if (enable) {
|
||||
|
||||
if (enableStar) {
|
||||
mStar.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
} else{
|
||||
mStar.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
if (enableArchive) {
|
||||
mArchived.setVisibility(View.VISIBLE);
|
||||
} else{
|
||||
mArchived.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
mStarBorder.invalidate();
|
||||
mStarBackground.invalidate();
|
||||
mArchivedBackground.invalidate();
|
||||
|
||||
}
|
||||
|
||||
public void setIconBackgroundColor(int color) {
|
||||
|
||||
@@ -5,10 +5,10 @@ import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.app.DatePickerDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.TypedArray;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
@@ -51,6 +51,7 @@ import java.io.IOException;
|
||||
import java.io.InvalidObjectException;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Collections;
|
||||
@@ -75,8 +76,6 @@ import androidx.core.content.ContextCompat;
|
||||
import androidx.core.content.FileProvider;
|
||||
import androidx.exifinterface.media.ExifInterface;
|
||||
import androidx.fragment.app.DialogFragment;
|
||||
import androidx.palette.graphics.Palette;
|
||||
|
||||
import protect.card_locker.async.TaskHandler;
|
||||
|
||||
public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
@@ -108,6 +107,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
private static final int PERMISSION_REQUEST_CAMERA_IMAGE_ICON = 102;
|
||||
|
||||
public static final String BUNDLE_ID = "id";
|
||||
public static final String BUNDLE_DUPLICATE_ID = "duplicateId";
|
||||
public static final String BUNDLE_UPDATE = "update";
|
||||
public static final String BUNDLE_CARDID = "cardId";
|
||||
public static final String BUNDLE_BARCODEID = "barcodeId";
|
||||
@@ -117,6 +117,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
TabLayout tabs;
|
||||
|
||||
ImageView thumbnail;
|
||||
ImageView thumbnailEditIcon;
|
||||
EditText storeFieldEdit;
|
||||
EditText noteFieldEdit;
|
||||
ChipGroup groupsChips;
|
||||
@@ -140,6 +141,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
|
||||
int loyaltyCardId;
|
||||
boolean updateLoyaltyCard;
|
||||
boolean duplicateFromLoyaltyCardId;
|
||||
String cardId;
|
||||
String barcodeId;
|
||||
String barcodeType;
|
||||
@@ -205,7 +207,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
(CatimaBarcode) (fieldName == LoyaltyCardField.barcodeType ? value : loyaltyCard.barcodeType),
|
||||
(Integer) (fieldName == LoyaltyCardField.headerColor ? value : loyaltyCard.headerColor),
|
||||
(int) (fieldName == LoyaltyCardField.starStatus ? value : loyaltyCard.starStatus),
|
||||
Utils.getUnixTime(), 100
|
||||
Utils.getUnixTime(), 100, (int) (fieldName == LoyaltyCardField.archiveStatus ? value : loyaltyCard.archiveStatus)
|
||||
);
|
||||
}
|
||||
|
||||
@@ -223,6 +225,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
final Bundle b = intent.getExtras();
|
||||
loyaltyCardId = b != null ? b.getInt(BUNDLE_ID) : 0;
|
||||
updateLoyaltyCard = b != null && b.getBoolean(BUNDLE_UPDATE, false);
|
||||
duplicateFromLoyaltyCardId = b != null && b.getBoolean(BUNDLE_DUPLICATE_ID, false);
|
||||
|
||||
cardId = b != null ? b.getString(BUNDLE_CARDID) : null;
|
||||
barcodeId = b != null ? b.getString(BUNDLE_BARCODEID) : null;
|
||||
@@ -313,6 +316,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
|
||||
tabs = findViewById(R.id.tabs);
|
||||
thumbnail = findViewById(R.id.thumbnail);
|
||||
thumbnailEditIcon = findViewById(R.id.thumbnailEditIcon);
|
||||
storeFieldEdit = findViewById(R.id.storeNameEdit);
|
||||
noteFieldEdit = findViewById(R.id.noteEdit);
|
||||
groupsChips = findViewById(R.id.groupChips);
|
||||
@@ -323,6 +327,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
barcodeIdField = findViewById(R.id.barcodeIdField);
|
||||
barcodeTypeField = findViewById(R.id.barcodeTypeField);
|
||||
barcodeImage = findViewById(R.id.barcode);
|
||||
barcodeImage.setClipToOutline(true);
|
||||
barcodeImageLayout = findViewById(R.id.barcodeLayout);
|
||||
barcodeCaptureLayout = findViewById(R.id.barcodeCaptureLayout);
|
||||
cardImageFrontHolder = findViewById(R.id.frontImageHolder);
|
||||
@@ -397,11 +402,10 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
try {
|
||||
BigDecimal balance = Utils.parseCurrency(s.toString(), Utils.currencyHasDecimals(tempLoyaltyCard.balanceType));
|
||||
BigDecimal balance = Utils.parseBalance(s.toString(), tempLoyaltyCard.balanceType);
|
||||
updateTempState(LoyaltyCardField.balance, balance);
|
||||
validBalance = true;
|
||||
|
||||
} catch (NumberFormatException e) {
|
||||
} catch (ParseException e) {
|
||||
validBalance = false;
|
||||
e.printStackTrace();
|
||||
}
|
||||
@@ -448,14 +452,10 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
|
||||
for (int i = locales.size() - 1; i >= 0; i--) {
|
||||
Locale locale = locales.get(i);
|
||||
String currencySymbol = Currency.getInstance(locale).getSymbol();
|
||||
currencyList.remove(currencySymbol);
|
||||
currencyList.add(0, currencySymbol);
|
||||
currencyPrioritizeLocaleSymbols(currencyList, locale);
|
||||
}
|
||||
} else {
|
||||
String currencySymbol = Currency.getInstance(mSystemLocale).getSymbol();
|
||||
currencyList.remove(currencySymbol);
|
||||
currencyList.add(0, currencySymbol);
|
||||
currencyPrioritizeLocaleSymbols(currencyList, mSystemLocale);
|
||||
}
|
||||
|
||||
currencyList.add(0, getString(R.string.points));
|
||||
@@ -752,9 +752,8 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
|
||||
onResuming = true;
|
||||
|
||||
|
||||
if (tempLoyaltyCard == null) {
|
||||
if (updateLoyaltyCard) {
|
||||
if (updateLoyaltyCard || duplicateFromLoyaltyCardId) {
|
||||
tempLoyaltyCard = DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId);
|
||||
if (tempLoyaltyCard == null) {
|
||||
Log.w(TAG, "Could not lookup loyalty card " + loyaltyCardId);
|
||||
@@ -772,7 +771,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
}
|
||||
} else {
|
||||
// New card, use default values
|
||||
tempLoyaltyCard = new LoyaltyCard(-1, "", "", null, new BigDecimal("0"), null, "", null, null, null, 0, Utils.getUnixTime(), 100);
|
||||
tempLoyaltyCard = new LoyaltyCard(-1, "", "", null, new BigDecimal("0"), null, "", null, null, null, 0, Utils.getUnixTime(), 100,0);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -780,7 +779,11 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
if (!initDone) {
|
||||
if (updateLoyaltyCard) {
|
||||
setTitle(R.string.editCardTitle);
|
||||
} else {
|
||||
setTitle(R.string.addCardTitle);
|
||||
}
|
||||
|
||||
if (updateLoyaltyCard || duplicateFromLoyaltyCardId) {
|
||||
if (!mFrontImageUnsaved && !croppedFrontImage() && !mFrontImageRemoved) {
|
||||
setCardImage(cardImageFront, Utils.retrieveCardImage(this, tempLoyaltyCard.id, ImageLocationType.front), true);
|
||||
}
|
||||
@@ -858,16 +861,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
// Generate random header color
|
||||
if (tempLoyaltyCard.headerColor == null) {
|
||||
// Select a random color to start out with.
|
||||
TypedArray colors = getResources().obtainTypedArray(R.array.letter_tile_colors);
|
||||
final int color = (int) (Math.random() * colors.length());
|
||||
updateTempState(LoyaltyCardField.headerColor, colors.getColor(color, Color.BLACK));
|
||||
colors.recycle();
|
||||
}
|
||||
|
||||
// It can't be null because we set it in updateTempState but SpotBugs insists it can be
|
||||
// NP_NULL_ON_SOME_PATH: Possible null pointer dereference
|
||||
if (tempLoyaltyCard.headerColor != null) {
|
||||
thumbnail.setOnClickListener(new ChooseCardImage());
|
||||
updateTempState(LoyaltyCardField.headerColor, Utils.getRandomHeaderColor(this));
|
||||
}
|
||||
|
||||
// Update from intent
|
||||
@@ -916,13 +910,28 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
|
||||
generateIcon(storeFieldEdit.getText().toString());
|
||||
|
||||
// It can't be null because we set it in updateTempState but SpotBugs insists it can be
|
||||
// NP_NULL_ON_SOME_PATH: Possible null pointer dereference and
|
||||
// NP_NULL_PARAM_DEREF: Method call passes null for non-null parameter
|
||||
Integer headerColor = tempLoyaltyCard.headerColor;
|
||||
if (headerColor != null) {
|
||||
thumbnail.setOnClickListener(new ChooseCardImage());
|
||||
thumbnailEditIcon.setBackgroundColor(Utils.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
|
||||
thumbnailEditIcon.setColorFilter(Utils.needsDarkForeground(headerColor) ? Color.WHITE : Color.BLACK);
|
||||
}
|
||||
|
||||
onResuming = false;
|
||||
}
|
||||
|
||||
protected void setColorFromIcon() {
|
||||
Object icon = thumbnail.getTag();
|
||||
if (icon != null && (icon instanceof Bitmap)) {
|
||||
updateTempState(LoyaltyCardField.headerColor, new Palette.Builder((Bitmap) icon).generate().getDominantColor(tempLoyaltyCard.headerColor != null ? tempLoyaltyCard.headerColor : R.attr.colorPrimary));
|
||||
int headerColor = Utils.getHeaderColorFromImage((Bitmap) icon, tempLoyaltyCard.headerColor != null ? tempLoyaltyCard.headerColor : R.attr.colorPrimary);
|
||||
|
||||
updateTempState(LoyaltyCardField.headerColor, headerColor);
|
||||
|
||||
thumbnailEditIcon.setBackgroundColor(Utils.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE);
|
||||
thumbnailEditIcon.setColorFilter(Utils.needsDarkForeground(headerColor) ? Color.WHITE : Color.BLACK);
|
||||
} else {
|
||||
Log.d("setColorFromIcon", "attempting header color change from icon but icon does not exist");
|
||||
}
|
||||
@@ -1104,6 +1113,9 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
public void onColorSelected(int dialogId, int color) {
|
||||
updateTempState(LoyaltyCardField.headerColor, color);
|
||||
|
||||
thumbnailEditIcon.setBackgroundColor(Utils.needsDarkForeground(color) ? Color.BLACK : Color.WHITE);
|
||||
thumbnailEditIcon.setColorFilter(Utils.needsDarkForeground(color) ? Color.WHITE : Color.BLACK);
|
||||
|
||||
// Unset image if set
|
||||
thumbnail.setTag(null);
|
||||
|
||||
@@ -1171,7 +1183,14 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
|
||||
Intent i = new Intent(Intent.ACTION_PICK);
|
||||
i.setType("image/*");
|
||||
mPhotoPickerLauncher.launch(i);
|
||||
|
||||
try {
|
||||
mPhotoPickerLauncher.launch(i);
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(getApplicationContext(), R.string.failedLaunchingPhotoPicker, Toast.LENGTH_LONG).show();
|
||||
Log.e(TAG, "No activity found to handle intent", e);
|
||||
}
|
||||
|
||||
return null;
|
||||
});
|
||||
|
||||
@@ -1234,7 +1253,16 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
int day = c.get(Calendar.DAY_OF_MONTH);
|
||||
|
||||
// Create a new instance of DatePickerDialog and return it
|
||||
return new DatePickerDialog(getActivity(), this, year, month, day);
|
||||
DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), this, year, month, day);
|
||||
datePickerDialog.getDatePicker().setMinDate(getMinDateOfDatePicker());
|
||||
return datePickerDialog;
|
||||
}
|
||||
|
||||
private long getMinDateOfDatePicker()
|
||||
{
|
||||
Calendar minDateCalendar = Calendar.getInstance();
|
||||
minDateCalendar.set(1970, 0, 1);
|
||||
return minDateCalendar.getTimeInMillis();
|
||||
}
|
||||
|
||||
public void onDateSet(DatePicker view, int year, int month, int day) {
|
||||
@@ -1299,7 +1327,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
}
|
||||
Log.i(TAG, "Updated " + loyaltyCardId + " to " + cardId);
|
||||
} else {
|
||||
loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, tempLoyaltyCard.store, tempLoyaltyCard.note, tempLoyaltyCard.expiry, tempLoyaltyCard.balance, tempLoyaltyCard.balanceType, tempLoyaltyCard.cardId, tempLoyaltyCard.barcodeId, tempLoyaltyCard.barcodeType, tempLoyaltyCard.headerColor, 0, tempLoyaltyCard.lastUsed);
|
||||
loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, tempLoyaltyCard.store, tempLoyaltyCard.note, tempLoyaltyCard.expiry, tempLoyaltyCard.balance, tempLoyaltyCard.balanceType, tempLoyaltyCard.cardId, tempLoyaltyCard.barcodeId, tempLoyaltyCard.barcodeType, tempLoyaltyCard.headerColor, 0, tempLoyaltyCard.lastUsed,0);
|
||||
try {
|
||||
Utils.saveCardImage(this, (Bitmap) cardImageFront.getTag(), loyaltyCardId, ImageLocationType.front);
|
||||
Utils.saveCardImage(this, (Bitmap) cardImageBack.getTag(), loyaltyCardId, ImageLocationType.back);
|
||||
@@ -1313,16 +1341,16 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
|
||||
ShortcutHelper.updateShortcuts(this, DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId));
|
||||
|
||||
if(duplicateFromLoyaltyCardId){
|
||||
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
|
||||
startActivity(intent);
|
||||
}
|
||||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
if (updateLoyaltyCard) {
|
||||
getMenuInflater().inflate(R.menu.card_update_menu, menu);
|
||||
} else {
|
||||
getMenuInflater().inflate(R.menu.card_add_menu, menu);
|
||||
}
|
||||
getMenuInflater().inflate(R.menu.card_add_menu, menu);
|
||||
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
}
|
||||
@@ -1331,30 +1359,9 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
int id = item.getItemId();
|
||||
|
||||
switch (id) {
|
||||
case android.R.id.home:
|
||||
askBeforeQuitIfChanged();
|
||||
break;
|
||||
|
||||
case R.id.action_delete:
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setTitle(R.string.deleteTitle);
|
||||
builder.setMessage(R.string.deleteConfirmation);
|
||||
builder.setPositiveButton(R.string.confirm, (dialog, which) -> {
|
||||
Log.e(TAG, "Deleting card: " + loyaltyCardId);
|
||||
|
||||
DBHelper.deleteLoyaltyCard(mDatabase, LoyaltyCardEditActivity.this, loyaltyCardId);
|
||||
|
||||
ShortcutHelper.removeShortcut(LoyaltyCardEditActivity.this, loyaltyCardId);
|
||||
|
||||
finish();
|
||||
dialog.dismiss();
|
||||
});
|
||||
builder.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
|
||||
AlertDialog dialog = builder.create();
|
||||
dialog.show();
|
||||
|
||||
return true;
|
||||
if (id == android.R.id.home) {
|
||||
askBeforeQuitIfChanged();
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onOptionsItemSelected(item);
|
||||
@@ -1453,13 +1460,13 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
barcodeImage.getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
||||
|
||||
Log.d(TAG, "ImageView size now known");
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, barcodeImageGenerationFinishedCallback);
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, barcodeImageGenerationFinishedCallback, true);
|
||||
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Log.d(TAG, "ImageView size known known, creating barcode");
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, barcodeImageGenerationFinishedCallback);
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getApplicationContext(), barcodeImage, cardIdString, barcodeFormat, null, false, barcodeImageGenerationFinishedCallback, true);
|
||||
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
|
||||
}
|
||||
}
|
||||
@@ -1513,4 +1520,14 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
}
|
||||
|
||||
private void currencyPrioritizeLocaleSymbols(ArrayList<String> currencyList, Locale locale) {
|
||||
try {
|
||||
String currencySymbol = Currency.getInstance(locale).getSymbol();
|
||||
currencyList.remove(currencySymbol);
|
||||
currencyList.add(0, currencySymbol);
|
||||
} catch (IllegalArgumentException e) {
|
||||
Log.d(TAG, "Could not get currency data for locale info: " + e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,5 +11,6 @@ public enum LoyaltyCardField {
|
||||
barcodeId,
|
||||
barcodeType,
|
||||
headerColor,
|
||||
starStatus
|
||||
starStatus,
|
||||
archiveStatus
|
||||
}
|
||||
|
||||
@@ -3,9 +3,6 @@ package protect.card_locker;
|
||||
import android.app.Application;
|
||||
|
||||
import androidx.appcompat.app.AppCompatDelegate;
|
||||
|
||||
import com.google.android.material.color.DynamicColors;
|
||||
|
||||
import protect.card_locker.preferences.Settings;
|
||||
|
||||
public class LoyaltyCardLockerApplication extends Application {
|
||||
|
||||
@@ -45,6 +45,7 @@ import java.util.List;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.content.res.AppCompatResources;
|
||||
import androidx.appcompat.widget.AppCompatTextView;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
@@ -56,7 +57,6 @@ import androidx.core.graphics.ColorUtils;
|
||||
import androidx.core.graphics.drawable.DrawableCompat;
|
||||
import androidx.core.widget.NestedScrollView;
|
||||
import androidx.core.widget.TextViewCompat;
|
||||
|
||||
import protect.card_locker.async.TaskHandler;
|
||||
import protect.card_locker.preferences.Settings;
|
||||
|
||||
@@ -122,6 +122,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
private final int HEADER_FILTER_ALPHA = 127;
|
||||
|
||||
final private TaskHandler mTasks = new TaskHandler();
|
||||
Runnable barcodeImageGenerationFinishedCallback;
|
||||
|
||||
@Override
|
||||
public boolean onDown(MotionEvent e) {
|
||||
@@ -250,13 +251,25 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
settings = new Settings(this);
|
||||
|
||||
String cardOrientation = settings.getCardViewOrientation();
|
||||
if (cardOrientation.equals(getString(R.string.settings_key_lock_on_opening_orientation))) {
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
|
||||
} else if (cardOrientation.equals(getString(R.string.settings_key_portrait_orientation))) {
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||
} else if (cardOrientation.equals(getString(R.string.settings_key_landscape_orientation))) {
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||
} else {
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
|
||||
}
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
mainImageIndex = savedInstanceState.getInt(STATE_IMAGEINDEX);
|
||||
isFullscreen = savedInstanceState.getBoolean(STATE_FULLSCREEN);
|
||||
bottomSheetState = savedInstanceState.getInt(STATE_BOTTOMSHEET);
|
||||
}
|
||||
|
||||
settings = new Settings(this);
|
||||
|
||||
extractIntentFields(getIntent());
|
||||
|
||||
@@ -278,6 +291,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
storeName = findViewById(R.id.storeName);
|
||||
maximizeButton = findViewById(R.id.maximizeButton);
|
||||
mainImage = findViewById(R.id.mainImage);
|
||||
mainImage.setClipToOutline(true);
|
||||
dotIndicator = findViewById(R.id.dotIndicator);
|
||||
minimizeButton = findViewById(R.id.minimizeButton);
|
||||
collapsingToolbarLayout = findViewById(R.id.collapsingToolbarLayout);
|
||||
@@ -285,6 +299,19 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
iconImage = findViewById(R.id.icon_image);
|
||||
landscapeToolbar = findViewById(R.id.toolbar_landscape);
|
||||
|
||||
barcodeImageGenerationFinishedCallback = () -> {
|
||||
if (!(boolean) mainImage.getTag()) {
|
||||
mainImage.setVisibility(View.GONE);
|
||||
imageTypes.remove(ImageType.BARCODE);
|
||||
|
||||
// Redraw UI
|
||||
setDotIndicator(Utils.isDarkModeEnabled(LoyaltyCardViewActivity.this));
|
||||
setFullscreen(isFullscreen);
|
||||
|
||||
Toast.makeText(LoyaltyCardViewActivity.this, getString(R.string.wrongValueForBarcodeType), Toast.LENGTH_LONG).show();
|
||||
}
|
||||
};
|
||||
|
||||
centerGuideline = findViewById(R.id.centerGuideline);
|
||||
barcodeScaler = findViewById(R.id.barcodeScaler);
|
||||
barcodeScaler.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
|
||||
@@ -304,7 +331,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
setCenterGuideline(loyaltyCard.zoomLevel);
|
||||
|
||||
drawMainImage(mainImageIndex, true);
|
||||
drawMainImage(mainImageIndex, true, isFullscreen);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -400,7 +427,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
private void adjustLayoutHeights() {
|
||||
// use getLayoutParams instead of getHeight when heights are pre-determined in xml! getHeight could return 0 if a View is not inflated
|
||||
if (iconImage.getLayoutParams().height != appBarLayout.getHeight()) {
|
||||
if (appBarLayout.getHeight() != 0 && iconImage.getLayoutParams().height != appBarLayout.getHeight()) {
|
||||
Log.d("adjustLayoutHeights", "setting imageIcon height from: " + iconImage.getLayoutParams().height + " to: " + appBarLayout.getHeight());
|
||||
iconImage.setLayoutParams(new CoordinatorLayout.LayoutParams(
|
||||
CoordinatorLayout.LayoutParams.MATCH_PARENT, appBarLayout.getHeight())
|
||||
@@ -609,7 +636,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
backgroundNeedsDarkIcons = Utils.needsDarkForeground(backgroundHeaderColor);
|
||||
ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar != null) {
|
||||
actionBar.setHomeAsUpIndicator(getIcon(R.drawable.ic_arrow_back_white, backgroundNeedsDarkIcons));
|
||||
actionBar.setHomeAsUpIndicator(getIcon(R.drawable.home_arrow_back_white, backgroundNeedsDarkIcons));
|
||||
}
|
||||
|
||||
// Make notification area light if dark icons are needed
|
||||
@@ -648,22 +675,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
imageTypes.add(ImageType.IMAGE_BACK);
|
||||
}
|
||||
|
||||
dotIndicator.removeAllViews();
|
||||
if (imageTypes.size() >= 2) {
|
||||
dots = new ImageView[imageTypes.size()];
|
||||
|
||||
for (int i = 0; i < imageTypes.size(); i++) {
|
||||
dots[i] = new ImageView(this);
|
||||
dots[i].setImageDrawable(getDotIcon(false, darkMode));
|
||||
|
||||
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||
params.setMargins(8, 0, 8, 0);
|
||||
|
||||
dotIndicator.addView(dots[i], params);
|
||||
}
|
||||
|
||||
dotIndicator.setVisibility(View.VISIBLE);
|
||||
}
|
||||
setDotIndicator(darkMode);
|
||||
|
||||
setFullscreen(isFullscreen);
|
||||
|
||||
@@ -686,18 +698,19 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.card_view_menu, menu);
|
||||
|
||||
// Always calculate lockscreen icon, it may need a black color
|
||||
boolean lockBarcodeScreenOrientation = settings.getLockBarcodeScreenOrientation();
|
||||
MenuItem item = menu.findItem(R.id.action_lock_unlock);
|
||||
setOrientatonLock(item, lockBarcodeScreenOrientation);
|
||||
if (lockBarcodeScreenOrientation) {
|
||||
item.setVisible(false);
|
||||
}
|
||||
|
||||
loyaltyCard = DBHelper.getLoyaltyCard(database, loyaltyCardId);
|
||||
starred = loyaltyCard.starStatus != 0;
|
||||
|
||||
if(loyaltyCard.archiveStatus != 0){
|
||||
menu.findItem(R.id.action_unarchive).setVisible(true);
|
||||
menu.findItem(R.id.action_archive).setVisible(false);
|
||||
}
|
||||
else{
|
||||
menu.findItem(R.id.action_unarchive).setVisible(false);
|
||||
menu.findItem(R.id.action_archive).setVisible(true);
|
||||
}
|
||||
|
||||
menu.findItem(R.id.action_overflow).setIcon(getIcon(R.drawable.ic_overflow_menu, backgroundNeedsDarkIcons));
|
||||
menu.findItem(R.id.action_share).setIcon(getIcon(R.drawable.ic_share_white, backgroundNeedsDarkIcons));
|
||||
|
||||
return super.onCreateOptionsMenu(menu);
|
||||
@@ -735,13 +748,14 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
}
|
||||
return true;
|
||||
|
||||
case R.id.action_lock_unlock:
|
||||
if (rotationEnabled) {
|
||||
setOrientatonLock(item, true);
|
||||
} else {
|
||||
setOrientatonLock(item, false);
|
||||
}
|
||||
rotationEnabled = !rotationEnabled;
|
||||
case R.id.action_duplicate:
|
||||
loyaltyCard = DBHelper.getLoyaltyCard(database, loyaltyCardId);
|
||||
Intent intent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putInt("id", loyaltyCardId);
|
||||
bundle.putBoolean("duplicateId", true);
|
||||
intent.putExtras(bundle);
|
||||
startActivity(intent);
|
||||
return true;
|
||||
|
||||
case R.id.action_star_unstar:
|
||||
@@ -749,6 +763,38 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
DBHelper.updateLoyaltyCardStarStatus(database, loyaltyCardId, starred ? 1 : 0);
|
||||
invalidateOptionsMenu();
|
||||
return true;
|
||||
|
||||
case R.id.action_archive:
|
||||
DBHelper.updateLoyaltyCardArchiveStatus(database, loyaltyCardId, 1);
|
||||
Toast.makeText(LoyaltyCardViewActivity.this, R.string.archived, Toast.LENGTH_LONG).show();
|
||||
invalidateOptionsMenu();
|
||||
return true;
|
||||
|
||||
case R.id.action_unarchive:
|
||||
DBHelper.updateLoyaltyCardArchiveStatus(database, loyaltyCardId, 0);
|
||||
Toast.makeText(LoyaltyCardViewActivity.this, R.string.unarchived, Toast.LENGTH_LONG).show();
|
||||
invalidateOptionsMenu();
|
||||
return true;
|
||||
|
||||
case R.id.action_delete:
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||
builder.setTitle(R.string.deleteTitle);
|
||||
builder.setMessage(R.string.deleteConfirmation);
|
||||
builder.setPositiveButton(R.string.confirm, (dialog, which) -> {
|
||||
Log.e(TAG, "Deleting card: " + loyaltyCardId);
|
||||
|
||||
DBHelper.deleteLoyaltyCard(database, LoyaltyCardViewActivity.this, loyaltyCardId);
|
||||
|
||||
ShortcutHelper.removeShortcut(LoyaltyCardViewActivity.this, loyaltyCardId);
|
||||
|
||||
finish();
|
||||
dialog.dismiss();
|
||||
});
|
||||
builder.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
|
||||
AlertDialog dialog = builder.create();
|
||||
dialog.show();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onOptionsItemSelected(item);
|
||||
@@ -760,7 +806,6 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
int orientation = getResources().getConfiguration().orientation;
|
||||
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
|
||||
Log.d(TAG, "Detected landscape mode");
|
||||
|
||||
setTitle(loyaltyCard.store);
|
||||
|
||||
collapsingToolbarLayout.setVisibility(View.GONE);
|
||||
@@ -786,19 +831,6 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
}
|
||||
}
|
||||
|
||||
private void setOrientatonLock(MenuItem item, boolean lock) {
|
||||
if (lock) {
|
||||
|
||||
item.setIcon(getIcon(R.drawable.ic_lock_outline_white_24dp, backgroundNeedsDarkIcons));
|
||||
item.setTitle(R.string.unlockScreen);
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
|
||||
} else {
|
||||
item.setIcon(getIcon(R.drawable.ic_lock_open_white_24dp, backgroundNeedsDarkIcons));
|
||||
item.setTitle(R.string.lockScreen);
|
||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
|
||||
}
|
||||
}
|
||||
|
||||
private void makeBottomSheetVisibleIfUseful() {
|
||||
if (noteView.getVisibility() == View.VISIBLE || groupsView.getVisibility() == View.VISIBLE || balanceView.getVisibility() == View.VISIBLE || expiryView.getVisibility() == View.VISIBLE) {
|
||||
bottomSheet.setVisibility(View.VISIBLE);
|
||||
@@ -807,7 +839,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
}
|
||||
}
|
||||
|
||||
private void drawBarcode() {
|
||||
private void drawBarcode(boolean addPadding) {
|
||||
mTasks.flushTaskList(TaskHandler.TYPE.BARCODE, true, false, false);
|
||||
if (format != null) {
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(
|
||||
@@ -817,12 +849,13 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
format,
|
||||
null,
|
||||
false,
|
||||
null);
|
||||
barcodeImageGenerationFinishedCallback,
|
||||
addPadding);
|
||||
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
|
||||
}
|
||||
}
|
||||
|
||||
private void redrawBarcodeAfterResize() {
|
||||
private void redrawBarcodeAfterResize(boolean addPadding) {
|
||||
if (format != null) {
|
||||
mainImage.getViewTreeObserver().addOnGlobalLayoutListener(
|
||||
new ViewTreeObserver.OnGlobalLayoutListener() {
|
||||
@@ -831,13 +864,13 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
mainImage.getViewTreeObserver().removeOnGlobalLayoutListener(this);
|
||||
|
||||
Log.d(TAG, "ImageView size now known");
|
||||
drawBarcode();
|
||||
drawBarcode(addPadding);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private void drawMainImage(int index, boolean waitForResize) {
|
||||
private void drawMainImage(int index, boolean waitForResize, boolean isFullscreen) {
|
||||
if (imageTypes.isEmpty()) {
|
||||
mainImage.setVisibility(View.GONE);
|
||||
return;
|
||||
@@ -853,12 +886,19 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
ImageType wantedImageType = imageTypes.get(index);
|
||||
|
||||
if (wantedImageType == ImageType.BARCODE) {
|
||||
if (waitForResize) {
|
||||
redrawBarcodeAfterResize();
|
||||
// Use border in non-fullscreen mode
|
||||
if (!isFullscreen) {
|
||||
mainImage.setBackground(AppCompatResources.getDrawable(this, R.drawable.round_outline));
|
||||
} else {
|
||||
drawBarcode();
|
||||
mainImage.setBackgroundColor(Color.WHITE);
|
||||
}
|
||||
mainImage.setBackgroundColor(Color.WHITE);
|
||||
|
||||
if (waitForResize) {
|
||||
redrawBarcodeAfterResize(!isFullscreen);
|
||||
} else {
|
||||
drawBarcode(!isFullscreen);
|
||||
}
|
||||
|
||||
mainImage.setContentDescription(getString(R.string.barcodeImageDescriptionWithType, format.prettyName()));
|
||||
} else if (wantedImageType == ImageType.IMAGE_FRONT) {
|
||||
mainImage.setImageBitmap(frontImageBitmap);
|
||||
@@ -888,7 +928,26 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
mainImageIndex = newIndex;
|
||||
|
||||
drawMainImage(newIndex, false);
|
||||
drawMainImage(newIndex, false, isFullscreen);
|
||||
}
|
||||
|
||||
private void setDotIndicator(boolean darkMode) {
|
||||
dotIndicator.removeAllViews();
|
||||
if (imageTypes.size() >= 2) {
|
||||
dots = new ImageView[imageTypes.size()];
|
||||
|
||||
for (int i = 0; i < imageTypes.size(); i++) {
|
||||
dots[i] = new ImageView(this);
|
||||
dots[i].setImageDrawable(getDotIcon(false, darkMode));
|
||||
|
||||
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||
params.setMargins(8, 0, 8, 0);
|
||||
|
||||
dotIndicator.addView(dots[i], params);
|
||||
}
|
||||
|
||||
dotIndicator.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -904,7 +963,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
if (enabled && !imageTypes.isEmpty()) {
|
||||
Log.d(TAG, "Move into fullscreen");
|
||||
|
||||
drawMainImage(mainImageIndex, true);
|
||||
drawMainImage(mainImageIndex, true, isFullscreen);
|
||||
|
||||
barcodeScaler.setProgress(loyaltyCard.zoomLevel);
|
||||
setCenterGuideline(loyaltyCard.zoomLevel);
|
||||
@@ -925,6 +984,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
// Or the barcode will be centered instead of on top of the screen
|
||||
// Don't ask me why...
|
||||
appBarLayout.setVisibility(View.INVISIBLE);
|
||||
iconImage.setVisibility(View.INVISIBLE);
|
||||
collapsingToolbarLayout.setVisibility(View.GONE);
|
||||
landscapeToolbar.setVisibility(View.GONE);
|
||||
|
||||
@@ -949,7 +1009,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
// Reset center guideline
|
||||
setCenterGuideline(100);
|
||||
|
||||
drawMainImage(mainImageIndex, true);
|
||||
drawMainImage(mainImageIndex, true, isFullscreen);
|
||||
|
||||
// Show maximize and hide minimize button and scaler
|
||||
maximizeButton.setVisibility(imageTypes.isEmpty() ? View.GONE : View.VISIBLE);
|
||||
@@ -966,6 +1026,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
// And restore 24dp paddingTop for appBarLayout
|
||||
appBarLayout.setVisibility(View.VISIBLE);
|
||||
setupOrientation();
|
||||
iconImage.setVisibility(View.VISIBLE);
|
||||
|
||||
// Show other UI elements
|
||||
cardIdFieldView.setVisibility(View.VISIBLE);
|
||||
|
||||
@@ -19,15 +19,6 @@ import android.view.View;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.view.ActionMode;
|
||||
import androidx.appcompat.widget.SearchView;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.splashscreen.SplashScreen;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
import com.google.android.material.tabs.TabLayout;
|
||||
|
||||
@@ -36,6 +27,15 @@ import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.view.ActionMode;
|
||||
import androidx.appcompat.widget.SearchView;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.splashscreen.SplashScreen;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import protect.card_locker.preferences.SettingsActivity;
|
||||
|
||||
public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener, GestureDetector.OnGestureListener {
|
||||
@@ -58,6 +58,9 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
private View mNoMatchingCardsText;
|
||||
private View mNoGroupCardsText;
|
||||
|
||||
private boolean mArchiveMode;
|
||||
public static final String BUNDLE_ARCHIVE_MODE = "archiveMode";
|
||||
|
||||
private ActivityResultLauncher<Intent> mBarcodeScannerLauncher;
|
||||
private ActivityResultLauncher<Intent> mSettingsLauncher;
|
||||
|
||||
@@ -142,7 +145,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
|
||||
builder.setPositiveButton(R.string.confirm, (dialog, which) -> {
|
||||
for (LoyaltyCard loyaltyCard : mAdapter.getSelectedItems()) {
|
||||
Log.e(TAG, "Deleting card: " + loyaltyCard.id);
|
||||
Log.d(TAG, "Deleting card: " + loyaltyCard.id);
|
||||
|
||||
DBHelper.deleteLoyaltyCard(mDatabase, MainActivity.this, loyaltyCard.id);
|
||||
|
||||
@@ -162,6 +165,44 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
|
||||
return true;
|
||||
}
|
||||
else if(inputItem.getItemId() == R.id.action_archive){
|
||||
for (LoyaltyCard loyaltyCard : mAdapter.getSelectedItems()) {
|
||||
Log.d(TAG, "Archiving card: " + loyaltyCard.id);
|
||||
DBHelper.updateLoyaltyCardArchiveStatus(mDatabase, loyaltyCard.id,1);
|
||||
updateLoyaltyCardList(false);
|
||||
inputMode.finish();
|
||||
invalidateOptionsMenu();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else if(inputItem.getItemId() == R.id.action_unarchive){
|
||||
for (LoyaltyCard loyaltyCard : mAdapter.getSelectedItems()) {
|
||||
Log.d(TAG, "Unarchiving card: " + loyaltyCard.id);
|
||||
DBHelper.updateLoyaltyCardArchiveStatus(mDatabase, loyaltyCard.id,0);
|
||||
updateLoyaltyCardList(false);
|
||||
inputMode.finish();
|
||||
invalidateOptionsMenu();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else if(inputItem.getItemId() == R.id.action_star){
|
||||
for (LoyaltyCard loyaltyCard : mAdapter.getSelectedItems()) {
|
||||
Log.d(TAG, "Starring card: " + loyaltyCard.id);
|
||||
DBHelper.updateLoyaltyCardStarStatus(mDatabase, loyaltyCard.id, 1);
|
||||
updateLoyaltyCardList(false);
|
||||
inputMode.finish();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else if(inputItem.getItemId() == R.id.action_unstar){
|
||||
for (LoyaltyCard loyaltyCard : mAdapter.getSelectedItems()) {
|
||||
Log.d(TAG, "Unstarring card: " + loyaltyCard.id);
|
||||
DBHelper.updateLoyaltyCardStarStatus(mDatabase, loyaltyCard.id, 0);
|
||||
updateLoyaltyCardList(false);
|
||||
inputMode.finish();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -175,15 +216,28 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle inputSavedInstanceState) {
|
||||
super.onCreate(inputSavedInstanceState);
|
||||
extractIntentFields(getIntent());
|
||||
SplashScreen.installSplashScreen(this);
|
||||
setTitle(R.string.app_name);
|
||||
// XXX color patching has to be done again after setting splash screen
|
||||
Utils.patchColors(this);
|
||||
setContentView(R.layout.main_activity);
|
||||
super.onCreate(inputSavedInstanceState);
|
||||
if(!mArchiveMode) {
|
||||
setTitle(R.string.app_name);
|
||||
setContentView(R.layout.main_activity);
|
||||
}
|
||||
else{
|
||||
setTitle(R.string.archiveList);
|
||||
setContentView(R.layout.archive_activity);
|
||||
}
|
||||
|
||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
if(mArchiveMode){
|
||||
ActionBar actionBar = getSupportActionBar();
|
||||
if (actionBar != null) {
|
||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
mDatabase = new DBHelper(this).getWritableDatabase();
|
||||
|
||||
TabLayout groupsTabLayout = findViewById(R.id.groups);
|
||||
@@ -298,6 +352,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
||||
mAdapter.refreshState();
|
||||
|
||||
if (mCurrentActionMode != null) {
|
||||
mAdapter.clearSelections();
|
||||
mCurrentActionMode.finish();
|
||||
@@ -340,21 +396,25 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
updateLoyaltyCardList(true);
|
||||
// End of active tab logic
|
||||
|
||||
FloatingActionButton addButton = findViewById(R.id.fabAdd);
|
||||
addButton.setOnClickListener(v -> {
|
||||
Intent intent = new Intent(getApplicationContext(), ScanActivity.class);
|
||||
Bundle bundle = new Bundle();
|
||||
if (selectedTab != 0) {
|
||||
bundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, groupsTabLayout.getTabAt(selectedTab).getText().toString());
|
||||
}
|
||||
intent.putExtras(bundle);
|
||||
mBarcodeScannerLauncher.launch(intent);
|
||||
});
|
||||
addButton.bringToFront();
|
||||
if (!mArchiveMode) {
|
||||
FloatingActionButton addButton = findViewById(R.id.fabAdd);
|
||||
|
||||
addButton.setOnClickListener(v -> {
|
||||
Intent intent = new Intent(getApplicationContext(), ScanActivity.class);
|
||||
Bundle bundle = new Bundle();
|
||||
if (selectedTab != 0) {
|
||||
bundle.putString(LoyaltyCardEditActivity.BUNDLE_ADDGROUP, groupsTabLayout.getTabAt(selectedTab).getText().toString());
|
||||
}
|
||||
intent.putExtras(bundle);
|
||||
mBarcodeScannerLauncher.launch(intent);
|
||||
});
|
||||
addButton.bringToFront();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
|
||||
if (!mSearchView.isIconified()) {
|
||||
mSearchView.setIconified(true);
|
||||
return;
|
||||
@@ -379,7 +439,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
group = (Group) mGroup;
|
||||
}
|
||||
|
||||
mAdapter.swapCursor(DBHelper.getLoyaltyCardCursor(mDatabase, mFilter, group, mOrder, mOrderDirection));
|
||||
mAdapter.swapCursor(DBHelper.getLoyaltyCardCursor(mDatabase, mFilter, group, mOrder, mOrderDirection, mArchiveMode ? DBHelper.LoyaltyCardArchiveFilter.Archived : DBHelper.LoyaltyCardArchiveFilter.Unarchived));
|
||||
|
||||
if (updateCount) {
|
||||
updateLoyaltyCardCount();
|
||||
@@ -422,6 +482,11 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
}
|
||||
}
|
||||
|
||||
private void extractIntentFields(Intent intent) {
|
||||
final Bundle b = intent.getExtras();
|
||||
mArchiveMode = b != null && b.getBoolean(BUNDLE_ARCHIVE_MODE, false);
|
||||
}
|
||||
|
||||
public void updateTabGroups(TabLayout groupsTabLayout) {
|
||||
List<Group> newGroups = DBHelper.getGroups(mDatabase);
|
||||
|
||||
@@ -446,12 +511,18 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
}
|
||||
|
||||
groupsTabLayout.setVisibility(View.VISIBLE);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu inputMenu) {
|
||||
getMenuInflater().inflate(R.menu.main_menu, inputMenu);
|
||||
if(!mArchiveMode)
|
||||
getMenuInflater().inflate(R.menu.main_menu, inputMenu);
|
||||
else{
|
||||
getMenuInflater().inflate(R.menu.archive_menu, inputMenu);
|
||||
}
|
||||
|
||||
Utils.updateMenuCardDetailsButtonState(inputMenu.findItem(R.id.action_unfold), mAdapter.showingDetails());
|
||||
displayCardSetupOptions(inputMenu, mLoyaltyCardCount > 0);
|
||||
|
||||
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
|
||||
@@ -485,6 +556,14 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
}
|
||||
});
|
||||
}
|
||||
if(!mArchiveMode) {
|
||||
if (DBHelper.getArchivedCardsCount(mDatabase) == 0) {
|
||||
inputMenu.findItem(R.id.action_archived).setVisible(false);
|
||||
} else {
|
||||
inputMenu.findItem(R.id.action_archived).setVisible(true);
|
||||
}
|
||||
}
|
||||
|
||||
return super.onCreateOptionsMenu(inputMenu);
|
||||
}
|
||||
|
||||
@@ -492,18 +571,13 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
public boolean onOptionsItemSelected(MenuItem inputItem) {
|
||||
int id = inputItem.getItemId();
|
||||
|
||||
if (id == android.R.id.home) {
|
||||
onBackPressed();
|
||||
}
|
||||
|
||||
if (id == R.id.action_unfold) {
|
||||
boolean shouldShow = !mAdapter.showingDetails();
|
||||
|
||||
if (shouldShow) {
|
||||
inputItem.setIcon(R.drawable.ic_baseline_unfold_less_24);
|
||||
inputItem.setTitle(R.string.action_hide_details);
|
||||
} else {
|
||||
inputItem.setIcon(R.drawable.ic_baseline_unfold_more_24);
|
||||
inputItem.setTitle(R.string.action_show_details);
|
||||
}
|
||||
|
||||
mAdapter.showDetails(shouldShow);
|
||||
mAdapter.showDetails(!mAdapter.showingDetails());
|
||||
invalidateOptionsMenu();
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -524,17 +598,21 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
final View customLayout = getLayoutInflater().inflate(R.layout.sorting_option, null);
|
||||
builder.setView(customLayout);
|
||||
|
||||
CheckBox ch = (CheckBox) customLayout.findViewById(R.id.checkBox_reverse);
|
||||
ch.setChecked(mOrderDirection == DBHelper.LoyaltyCardOrderDirection.Descending);
|
||||
CheckBox showReversed = (CheckBox) customLayout.findViewById(R.id.checkBox_reverse);
|
||||
|
||||
|
||||
showReversed.setChecked(mOrderDirection == DBHelper.LoyaltyCardOrderDirection.Descending);
|
||||
|
||||
|
||||
builder.setSingleChoiceItems(R.array.sort_types_array, currentIndex.get(), (dialog, which) -> currentIndex.set(which));
|
||||
|
||||
builder.setPositiveButton(R.string.sort, (dialog, which) -> {
|
||||
if (ch.isChecked()) {
|
||||
setSort(loyaltyCardOrders.get(currentIndex.get()), DBHelper.LoyaltyCardOrderDirection.Descending);
|
||||
} else {
|
||||
setSort(loyaltyCardOrders.get(currentIndex.get()), DBHelper.LoyaltyCardOrderDirection.Ascending);
|
||||
}
|
||||
|
||||
setSort(
|
||||
loyaltyCardOrders.get(currentIndex.get()),
|
||||
showReversed.isChecked() ? DBHelper.LoyaltyCardOrderDirection.Descending : DBHelper.LoyaltyCardOrderDirection.Ascending
|
||||
);
|
||||
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
@@ -570,6 +648,16 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
return true;
|
||||
}
|
||||
|
||||
if(id == R.id.action_archived){
|
||||
Intent i = new Intent(getApplicationContext(), MainActivity.class);
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putBoolean("archiveMode", true);
|
||||
i.putExtras(bundle);
|
||||
startActivity(i);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
return super.onOptionsItemSelected(inputItem);
|
||||
}
|
||||
|
||||
@@ -691,10 +779,47 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
mCurrentActionMode.setTitle(getResources().getQuantityString(R.plurals.selectedCardCount, count, count));
|
||||
|
||||
MenuItem editItem = mCurrentActionMode.getMenu().findItem(R.id.action_edit);
|
||||
MenuItem archiveItem = mCurrentActionMode.getMenu().findItem(R.id.action_archive);
|
||||
MenuItem unarchiveItem = mCurrentActionMode.getMenu().findItem(R.id.action_unarchive);
|
||||
MenuItem starItem = mCurrentActionMode.getMenu().findItem(R.id.action_star);
|
||||
MenuItem unstarItem = mCurrentActionMode.getMenu().findItem(R.id.action_unstar);
|
||||
|
||||
boolean hasStarred = false;
|
||||
boolean hasUnstarred = false;
|
||||
|
||||
if(!mArchiveMode) {
|
||||
unarchiveItem.setVisible(false);
|
||||
archiveItem.setVisible(true);
|
||||
}
|
||||
else{
|
||||
unarchiveItem.setVisible(true);
|
||||
archiveItem.setVisible(false);
|
||||
}
|
||||
|
||||
for (LoyaltyCard loyaltyCard : mAdapter.getSelectedItems()) {
|
||||
|
||||
if (loyaltyCard.starStatus == 1) {
|
||||
hasStarred = true;
|
||||
} else {
|
||||
hasUnstarred = true;
|
||||
}
|
||||
|
||||
if (hasStarred && hasUnstarred) {
|
||||
hasStarred = true;
|
||||
hasUnstarred = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (count == 1) {
|
||||
starItem.setVisible(!hasStarred);
|
||||
unstarItem.setVisible(!hasUnstarred);
|
||||
editItem.setVisible(true);
|
||||
editItem.setEnabled(true);
|
||||
} else {
|
||||
starItem.setVisible(hasUnstarred);
|
||||
unstarItem.setVisible(hasStarred);
|
||||
|
||||
editItem.setVisible(false);
|
||||
editItem.setEnabled(false);
|
||||
}
|
||||
@@ -703,6 +828,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onRowClicked(int inputPosition) {
|
||||
if (mAdapter.getSelectedItemCount() > 0) {
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
package protect.card_locker;
|
||||
|
||||
|
||||
import android.content.Intent;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.os.Bundle;
|
||||
import android.text.Editable;
|
||||
import android.text.TextWatcher;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.TextView;
|
||||
@@ -156,6 +157,26 @@ public class ManageGroupActivity extends CatimaAppCompatActivity implements Mana
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu inputMenu) {
|
||||
getMenuInflater().inflate(R.menu.card_details_menu, inputMenu);
|
||||
Utils.updateMenuCardDetailsButtonState(inputMenu.findItem(R.id.action_unfold), mAdapter.showingDetails());
|
||||
return super.onCreateOptionsMenu(inputMenu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem inputItem) {
|
||||
int id = inputItem.getItemId();
|
||||
|
||||
if (id == R.id.action_unfold) {
|
||||
mAdapter.showDetails(!mAdapter.showingDetails());
|
||||
invalidateOptionsMenu();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onOptionsItemSelected(inputItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
||||
|
||||
@@ -8,8 +8,6 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
public class ManageGroupCursorAdapter extends LoyaltyCardCursorAdapter {
|
||||
private HashMap<Integer, Integer> mIndexCardMap;
|
||||
private HashMap<Integer, Boolean> mInGroupOverlay;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package protect.card_locker;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Bundle;
|
||||
@@ -206,6 +207,11 @@ public class ScanActivity extends CatimaAppCompatActivity {
|
||||
public void addFromImage(View view) {
|
||||
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
|
||||
photoPickerIntent.setType("image/*");
|
||||
photoPickerLauncher.launch(photoPickerIntent);
|
||||
try {
|
||||
photoPickerLauncher.launch(photoPickerIntent);
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(getApplicationContext(), R.string.failedLaunchingPhotoPicker, Toast.LENGTH_LONG).show();
|
||||
Log.e(TAG, "No activity found to handle intent", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,15 +10,15 @@ import android.view.View;
|
||||
import android.widget.FrameLayout;
|
||||
import android.widget.LinearLayout;
|
||||
|
||||
import com.google.android.material.color.MaterialColors;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
import com.yalantis.ucrop.UCropActivity;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.widget.AppCompatImageView;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.graphics.ColorUtils;
|
||||
|
||||
import com.google.android.material.color.MaterialColors;
|
||||
import com.google.android.material.textview.MaterialTextView;
|
||||
import com.yalantis.ucrop.UCropActivity;
|
||||
|
||||
public class UCropWrapper extends UCropActivity {
|
||||
public static final String UCROP_TOOLBAR_TYPEFACE_STYLE = "ucop_toolbar_typeface_style";
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.TypedArray;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Color;
|
||||
@@ -15,6 +16,7 @@ import android.os.LocaleList;
|
||||
import android.provider.MediaStore;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.android.material.color.DynamicColors;
|
||||
@@ -34,6 +36,7 @@ import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.NumberFormat;
|
||||
import java.text.ParseException;
|
||||
import java.util.Calendar;
|
||||
import java.util.Currency;
|
||||
import java.util.Date;
|
||||
@@ -45,7 +48,7 @@ import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.appcompat.app.AppCompatDelegate;
|
||||
import androidx.core.graphics.ColorUtils;
|
||||
import androidx.exifinterface.media.ExifInterface;
|
||||
|
||||
import androidx.palette.graphics.Palette;
|
||||
import protect.card_locker.preferences.Settings;
|
||||
|
||||
public class Utils {
|
||||
@@ -235,32 +238,19 @@ public class Utils {
|
||||
return numberFormat.format(value);
|
||||
}
|
||||
|
||||
static public Boolean currencyHasDecimals(Currency currency) {
|
||||
static public BigDecimal parseBalance(String value, Currency currency) throws ParseException {
|
||||
NumberFormat numberFormat = NumberFormat.getInstance();
|
||||
|
||||
if (currency == null) {
|
||||
return false;
|
||||
numberFormat.setMaximumFractionDigits(0);
|
||||
} else {
|
||||
numberFormat.setMinimumFractionDigits(currency.getDefaultFractionDigits());
|
||||
numberFormat.setMaximumFractionDigits(currency.getDefaultFractionDigits());
|
||||
}
|
||||
|
||||
return currency.getDefaultFractionDigits() != 0;
|
||||
}
|
||||
Log.d(TAG, numberFormat.parse(value).toString());
|
||||
|
||||
static public BigDecimal parseCurrency(String value, Boolean hasDecimals) throws NumberFormatException {
|
||||
// If there are no decimals expected, remove all separators before parsing
|
||||
if (!hasDecimals) {
|
||||
value = value.replaceAll("[^0-9]", "");
|
||||
return new BigDecimal(value);
|
||||
}
|
||||
|
||||
// There are many ways users can write a currency, so we fix it up a bit
|
||||
// 1. Replace all non-numbers with dots
|
||||
value = value.replaceAll("[^0-9]", ".");
|
||||
|
||||
// 2. Remove all but the last dot
|
||||
while (value.split("\\.").length > 2) {
|
||||
value = value.replaceFirst("\\.", "");
|
||||
}
|
||||
|
||||
// Parse as BigDecimal
|
||||
return new BigDecimal(value);
|
||||
return new BigDecimal(numberFormat.parse(value).toString());
|
||||
}
|
||||
|
||||
static public byte[] bitmapToByteArray(Bitmap bitmap) {
|
||||
@@ -506,4 +496,28 @@ public class Utils {
|
||||
activity.getTheme().resolveAttribute(android.R.attr.colorBackground, typedValue, true);
|
||||
activity.findViewById(android.R.id.content).setBackgroundColor(typedValue.data);
|
||||
}
|
||||
|
||||
public static void updateMenuCardDetailsButtonState(MenuItem item, boolean currentlyExpanded) {
|
||||
if (currentlyExpanded) {
|
||||
item.setIcon(R.drawable.ic_baseline_unfold_less_24);
|
||||
item.setTitle(R.string.action_hide_details);
|
||||
} else {
|
||||
item.setIcon(R.drawable.ic_baseline_unfold_more_24);
|
||||
item.setTitle(R.string.action_show_details);
|
||||
}
|
||||
}
|
||||
|
||||
public static int getHeaderColorFromImage(Bitmap image, int fallback) {
|
||||
if (image == null) {
|
||||
return fallback;
|
||||
}
|
||||
|
||||
return new Palette.Builder(image).generate().getDominantColor(R.attr.colorPrimary);
|
||||
}
|
||||
|
||||
public static int getRandomHeaderColor(Context context) {
|
||||
TypedArray colors = context.getResources().obtainTypedArray(R.array.letter_tile_colors);
|
||||
final int color = (int) (Math.random() * colors.length());
|
||||
return colors.getColor(color, Color.BLACK);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -135,7 +135,8 @@ public class CatimaExporter implements Exporter {
|
||||
DBHelper.LoyaltyCardDbIds.BARCODE_TYPE,
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_COLOR,
|
||||
DBHelper.LoyaltyCardDbIds.STAR_STATUS,
|
||||
DBHelper.LoyaltyCardDbIds.LAST_USED);
|
||||
DBHelper.LoyaltyCardDbIds.LAST_USED,
|
||||
DBHelper.LoyaltyCardDbIds.ARCHIVE_STATUS);
|
||||
|
||||
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(database);
|
||||
|
||||
@@ -153,7 +154,8 @@ public class CatimaExporter implements Exporter {
|
||||
card.barcodeType != null ? card.barcodeType.name() : "",
|
||||
card.headerColor,
|
||||
card.starStatus,
|
||||
card.lastUsed);
|
||||
card.lastUsed,
|
||||
card.archiveStatus);
|
||||
|
||||
if (Thread.currentThread().isInterrupted()) {
|
||||
throw new InterruptedException();
|
||||
|
||||
@@ -321,6 +321,15 @@ public class CatimaImporter implements Importer {
|
||||
}
|
||||
if (starStatus != 1) starStatus = 0;
|
||||
|
||||
int archiveStatus = 0;
|
||||
try {
|
||||
archiveStatus = CSVHelpers.extractInt(DBHelper.LoyaltyCardDbIds.ARCHIVE_STATUS, record, false);
|
||||
} catch (FormatException _e) {
|
||||
// This field did not exist in versions 2.16.3 and before
|
||||
// We catch this exception so we can still import old backups
|
||||
}
|
||||
if (archiveStatus != 1) archiveStatus = 0;
|
||||
|
||||
Long lastUsed = 0L;
|
||||
try {
|
||||
lastUsed = CSVHelpers.extractLong(DBHelper.LoyaltyCardDbIds.LAST_USED, record, false);
|
||||
@@ -329,7 +338,7 @@ public class CatimaImporter implements Importer {
|
||||
// We catch this exception so we can still import old backups
|
||||
}
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, id, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus, lastUsed);
|
||||
DBHelper.insertLoyaltyCard(database, id, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus, lastUsed,archiveStatus);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -21,6 +21,7 @@ import java.text.ParseException;
|
||||
import protect.card_locker.CatimaBarcode;
|
||||
import protect.card_locker.DBHelper;
|
||||
import protect.card_locker.FormatException;
|
||||
import protect.card_locker.Utils;
|
||||
|
||||
/**
|
||||
* Class for importing a database from CSV (Comma Separate Values)
|
||||
@@ -56,7 +57,7 @@ public class FidmeImporter implements Importer {
|
||||
|
||||
try {
|
||||
for (CSVRecord record : fidmeParser) {
|
||||
importLoyaltyCard(database, record);
|
||||
importLoyaltyCard(context, database, record);
|
||||
|
||||
if (Thread.currentThread().isInterrupted()) {
|
||||
throw new InterruptedException();
|
||||
@@ -75,7 +76,7 @@ public class FidmeImporter implements Importer {
|
||||
* Import a single loyalty card into the database using the given
|
||||
* session.
|
||||
*/
|
||||
private void importLoyaltyCard(SQLiteDatabase database, CSVRecord record)
|
||||
private void importLoyaltyCard(Context context, SQLiteDatabase database, CSVRecord record)
|
||||
throws FormatException {
|
||||
// A loyalty card export from Fidme contains the following fields:
|
||||
// Retailer (store name)
|
||||
@@ -117,11 +118,13 @@ public class FidmeImporter implements Importer {
|
||||
// TODO: Hook this into our own loyalty card DB if we ever get one
|
||||
CatimaBarcode barcodeType = null;
|
||||
|
||||
// No favourite data in the export either
|
||||
// No favourite data or colour in the export either
|
||||
int starStatus = 0;
|
||||
int archiveStatus = 0;
|
||||
int headerColor = Utils.getRandomHeaderColor(context);
|
||||
|
||||
// TODO: Front and back image
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, null, starStatus, null);
|
||||
DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, headerColor, starStatus, null,archiveStatus);
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,6 @@ import android.content.Context;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
|
||||
public class MultiFormatExporter {
|
||||
|
||||
@@ -6,13 +6,7 @@ import android.util.Log;
|
||||
|
||||
import net.lingala.zip4j.exception.ZipException;
|
||||
|
||||
import org.json.JSONException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.text.ParseException;
|
||||
|
||||
import protect.card_locker.FormatException;
|
||||
|
||||
public class MultiFormatImporter {
|
||||
private static final String TAG = "Catima";
|
||||
@@ -54,8 +48,13 @@ public class MultiFormatImporter {
|
||||
database.setTransactionSuccessful();
|
||||
return new ImportExportResult(ImportExportResultType.Success);
|
||||
} catch (ZipException e) {
|
||||
return new ImportExportResult(ImportExportResultType.BadPassword);
|
||||
} catch (IOException | FormatException | InterruptedException | JSONException | ParseException | NullPointerException e) {
|
||||
if (e.getType().equals(ZipException.Type.WRONG_PASSWORD)) {
|
||||
return new ImportExportResult(ImportExportResultType.BadPassword);
|
||||
} else {
|
||||
Log.e(TAG, "Failed to import data", e);
|
||||
error = e.toString();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Failed to import data", e);
|
||||
error = e.toString();
|
||||
} finally {
|
||||
|
||||
@@ -3,6 +3,7 @@ package protect.card_locker.importexport;
|
||||
import android.content.Context;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.graphics.Bitmap;
|
||||
import android.util.Log;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
@@ -39,15 +40,17 @@ import protect.card_locker.ZipUtils;
|
||||
* A header is expected for the each table showing the names of the columns.
|
||||
*/
|
||||
public class StocardImporter implements Importer {
|
||||
private static final String TAG = "Catima";
|
||||
|
||||
public void importData(Context context, SQLiteDatabase database, InputStream input, char[] password) throws IOException, FormatException, JSONException, ParseException {
|
||||
HashMap<String, HashMap<String, Object>> loyaltyCardHashMap = new HashMap<>();
|
||||
HashMap<String, HashMap<String, String>> providers = new HashMap<>();
|
||||
HashMap<String, HashMap<String, Object>> providers = new HashMap<>();
|
||||
|
||||
final CSVParser parser = new CSVParser(new InputStreamReader(context.getResources().openRawResource(R.raw.stocard_stores), StandardCharsets.UTF_8), CSVFormat.RFC4180.builder().setHeader().build());
|
||||
|
||||
try {
|
||||
for (CSVRecord record : parser) {
|
||||
HashMap<String, String> recordData = new HashMap<>();
|
||||
HashMap<String, Object> recordData = new HashMap<>();
|
||||
recordData.put("name", record.get("name"));
|
||||
recordData.put("barcodeFormat", record.get("barcodeFormat"));
|
||||
|
||||
@@ -62,6 +65,8 @@ public class StocardImporter implements Importer {
|
||||
ZipInputStream zipInputStream = new ZipInputStream(input, password);
|
||||
|
||||
String[] providersFileName = null;
|
||||
String[] customProvidersBaseName = null;
|
||||
String customProviderId = "";
|
||||
String[] cardBaseName = null;
|
||||
String cardName = "";
|
||||
LocalFileHeader localFileHeader;
|
||||
@@ -78,6 +83,14 @@ public class StocardImporter implements Importer {
|
||||
nameParts[0],
|
||||
"analytics-properties.json"
|
||||
};
|
||||
customProvidersBaseName = new String[]{
|
||||
nameParts[0],
|
||||
"sync",
|
||||
"data",
|
||||
"users",
|
||||
nameParts[0],
|
||||
"loyalty-card-custom-providers"
|
||||
};
|
||||
cardBaseName = new String[]{
|
||||
nameParts[0],
|
||||
"sync",
|
||||
@@ -88,6 +101,33 @@ public class StocardImporter implements Importer {
|
||||
};
|
||||
}
|
||||
|
||||
if (startsWith(nameParts, customProvidersBaseName, 1)) {
|
||||
// Extract providerId
|
||||
customProviderId = nameParts[customProvidersBaseName.length].split("\\.", 2)[0];
|
||||
|
||||
// Name file
|
||||
if (nameParts.length == customProvidersBaseName.length + 1) {
|
||||
// Ignore the .txt file
|
||||
if (fileName.endsWith(".json")) {
|
||||
JSONObject jsonObject = ZipUtils.readJSON(zipInputStream);
|
||||
|
||||
providers = appendToHashMap(
|
||||
providers,
|
||||
customProviderId,
|
||||
"name",
|
||||
jsonObject.getString("name")
|
||||
);
|
||||
}
|
||||
} else if (fileName.endsWith("logo.png")) {
|
||||
providers = appendToHashMap(
|
||||
providers,
|
||||
customProviderId,
|
||||
"logo",
|
||||
ZipUtils.readImage(zipInputStream)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (startsWith(nameParts, cardBaseName, 1)) {
|
||||
// Extract cardName
|
||||
cardName = nameParts[cardBaseName.length].split("\\.", 2)[0];
|
||||
@@ -98,24 +138,33 @@ public class StocardImporter implements Importer {
|
||||
if (fileName.endsWith(".json")) {
|
||||
JSONObject jsonObject = ZipUtils.readJSON(zipInputStream);
|
||||
|
||||
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
|
||||
loyaltyCardHashMap = appendToHashMap(
|
||||
loyaltyCardHashMap,
|
||||
cardName,
|
||||
"cardId",
|
||||
jsonObject.getString("input_id")
|
||||
);
|
||||
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
|
||||
|
||||
// Provider ID can be either custom or not, extract whatever version is relevant
|
||||
String customProviderPrefix = "/users/" + nameParts[0] + "/loyalty-card-custom-providers/";
|
||||
String providerId = jsonObject
|
||||
.getJSONObject("input_provider_reference")
|
||||
.getString("identifier");
|
||||
if (providerId.startsWith(customProviderPrefix)) {
|
||||
providerId = providerId.substring(customProviderPrefix.length());
|
||||
} else {
|
||||
providerId = providerId.substring("/loyalty-card-providers/".length());
|
||||
}
|
||||
|
||||
loyaltyCardHashMap = appendToHashMap(
|
||||
loyaltyCardHashMap,
|
||||
cardName,
|
||||
"_providerId",
|
||||
jsonObject
|
||||
.getJSONObject("input_provider_reference")
|
||||
.getString("identifier")
|
||||
.substring("/loyalty-card-providers/".length())
|
||||
providerId
|
||||
);
|
||||
|
||||
if (jsonObject.has("input_barcode_format")) {
|
||||
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
|
||||
loyaltyCardHashMap = appendToHashMap(
|
||||
loyaltyCardHashMap,
|
||||
cardName,
|
||||
"barcodeType",
|
||||
@@ -124,7 +173,7 @@ public class StocardImporter implements Importer {
|
||||
}
|
||||
}
|
||||
} else if (fileName.endsWith("notes/default.json")) {
|
||||
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
|
||||
loyaltyCardHashMap = appendToHashMap(
|
||||
loyaltyCardHashMap,
|
||||
cardName,
|
||||
"note",
|
||||
@@ -132,14 +181,14 @@ public class StocardImporter implements Importer {
|
||||
.getString("content")
|
||||
);
|
||||
} else if (fileName.endsWith("/images/front.png")) {
|
||||
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
|
||||
loyaltyCardHashMap = appendToHashMap(
|
||||
loyaltyCardHashMap,
|
||||
cardName,
|
||||
"frontImage",
|
||||
ZipUtils.readImage(zipInputStream)
|
||||
);
|
||||
} else if (fileName.endsWith("/images/back.png")) {
|
||||
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
|
||||
loyaltyCardHashMap = appendToHashMap(
|
||||
loyaltyCardHashMap,
|
||||
cardName,
|
||||
"backImage",
|
||||
@@ -155,22 +204,41 @@ public class StocardImporter implements Importer {
|
||||
|
||||
for (HashMap<String, Object> loyaltyCardData : loyaltyCardHashMap.values()) {
|
||||
String providerId = (String) loyaltyCardData.get("_providerId");
|
||||
HashMap<String, String> providerData = providers.get(providerId);
|
||||
|
||||
String store = providerData != null ? providerData.get("name") : providerId;
|
||||
if (providerId == null) {
|
||||
Log.d(TAG, "Missing providerId for card " + loyaltyCardData + ", ignoring...");
|
||||
continue;
|
||||
}
|
||||
|
||||
HashMap<String, Object> providerData = providers.get(providerId);
|
||||
|
||||
String store = providerData != null ? providerData.get("name").toString() : providerId;
|
||||
String note = (String) Utils.mapGetOrDefault(loyaltyCardData, "note", "");
|
||||
String cardId = (String) loyaltyCardData.get("cardId");
|
||||
String barcodeTypeString = (String) Utils.mapGetOrDefault(loyaltyCardData, "barcodeType", providerData != null ? providerData.get("barcodeFormat") : null);
|
||||
CatimaBarcode barcodeType = null;
|
||||
if (barcodeTypeString != null) {
|
||||
if (barcodeTypeString != null && !barcodeTypeString.isEmpty()) {
|
||||
if (barcodeTypeString.equals("RSS_DATABAR_EXPANDED")) {
|
||||
barcodeType = CatimaBarcode.fromBarcode(BarcodeFormat.RSS_EXPANDED);
|
||||
} else if (barcodeTypeString.equals("GS1_128")) {
|
||||
barcodeType = CatimaBarcode.fromBarcode(BarcodeFormat.CODE_128);
|
||||
} else {
|
||||
barcodeType = CatimaBarcode.fromName(barcodeTypeString);
|
||||
}
|
||||
}
|
||||
|
||||
long loyaltyCardInternalId = DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, null, 0, null);
|
||||
int headerColor = Utils.getRandomHeaderColor(context);
|
||||
Bitmap cardIcon = null;
|
||||
if (providerData != null && providerData.containsKey("logo")) {
|
||||
cardIcon = (Bitmap) providerData.get("logo");
|
||||
headerColor = Utils.getHeaderColorFromImage(cardIcon, headerColor);
|
||||
}
|
||||
|
||||
long loyaltyCardInternalId = DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, headerColor, 0, null,0);
|
||||
|
||||
if (cardIcon != null) {
|
||||
Utils.saveCardImage(context, cardIcon, (int) loyaltyCardInternalId, ImageLocationType.icon);
|
||||
}
|
||||
|
||||
if (loyaltyCardData.containsKey("frontImage")) {
|
||||
Utils.saveCardImage(context, (Bitmap) loyaltyCardData.get("frontImage"), (int) loyaltyCardInternalId, ImageLocationType.front);
|
||||
@@ -197,7 +265,7 @@ public class StocardImporter implements Importer {
|
||||
return true;
|
||||
}
|
||||
|
||||
private HashMap<String, HashMap<String, Object>> appendToLoyaltyCardHashMap(HashMap<String, HashMap<String, Object>> loyaltyCardHashMap, String cardID, String key, Object value) {
|
||||
private HashMap<String, HashMap<String, Object>> appendToHashMap(HashMap<String, HashMap<String, Object>> loyaltyCardHashMap, String cardID, String key, Object value) {
|
||||
HashMap<String, Object> loyaltyCardData = loyaltyCardHashMap.get(cardID);
|
||||
if (loyaltyCardData == null) {
|
||||
loyaltyCardData = new HashMap<>();
|
||||
|
||||
@@ -126,7 +126,7 @@ public class VoucherVaultImporter implements Importer {
|
||||
throw new FormatException("Unknown colour type found: " + colorFromJSON);
|
||||
}
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, store, "", expiry, balance, balanceType, cardId, null, barcodeType, headerColor, 0, Utils.getUnixTime());
|
||||
DBHelper.insertLoyaltyCard(database, store, "", expiry, balance, balanceType, cardId, null, barcodeType, headerColor, 0, Utils.getUnixTime(),0);
|
||||
}
|
||||
|
||||
bufferedReader.close();
|
||||
|
||||
@@ -9,7 +9,6 @@ import androidx.annotation.IntegerRes;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.appcompat.app.AppCompatDelegate;
|
||||
import androidx.preference.PreferenceManager;
|
||||
|
||||
import protect.card_locker.R;
|
||||
import protect.card_locker.Utils;
|
||||
|
||||
@@ -92,8 +91,8 @@ public class Settings {
|
||||
return getBoolean(R.string.settings_key_display_barcode_max_brightness, true);
|
||||
}
|
||||
|
||||
public boolean getLockBarcodeScreenOrientation() {
|
||||
return getBoolean(R.string.settings_key_lock_barcode_orientation, false);
|
||||
public String getCardViewOrientation() {
|
||||
return getString(R.string.settings_key_card_orientation, getResString(R.string.settings_key_follow_system_orientation));
|
||||
}
|
||||
|
||||
public boolean getKeepScreenOn() {
|
||||
|
||||
@@ -6,6 +6,8 @@ import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.MenuItem;
|
||||
|
||||
import com.google.android.material.color.DynamicColors;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
@@ -18,9 +20,6 @@ import androidx.fragment.app.DialogFragment;
|
||||
import androidx.preference.ListPreference;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceFragmentCompat;
|
||||
|
||||
import com.google.android.material.color.DynamicColors;
|
||||
|
||||
import nl.invissvenska.numberpickerpreference.NumberDialogPreference;
|
||||
import nl.invissvenska.numberpickerpreference.NumberPickerPreferenceDialogFragment;
|
||||
import protect.card_locker.CatimaAppCompatActivity;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<vector android:height="24dp" android:tint="?attr/colorControlNormal"
|
||||
<vector android:autoMirrored="true" android:height="24dp" android:tint="?attr/colorControlNormal"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z"/>
|
||||
10
app/src/main/res/drawable/ic_baseline_archive_24.xml
Normal file
10
app/src/main/res/drawable/ic_baseline_archive_24.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="@android:color/white">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M20.54,5.23l-1.39,-1.68C18.88,3.21 18.47,3 18,3H6c-0.47,0 -0.88,0.21 -1.16,0.55L3.46,5.23C3.17,5.57 3,6.02 3,6.5V19c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V6.5c0,-0.48 -0.17,-0.93 -0.46,-1.27zM12,17.5L6.5,12H10v-2h4v2h3.5L12,17.5zM5.12,5l0.81,-1h12l0.94,1H5.12z"/>
|
||||
</vector>
|
||||
10
app/src/main/res/drawable/ic_baseline_archive_24_black.xml
Normal file
10
app/src/main/res/drawable/ic_baseline_archive_24_black.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="@android:color/black">
|
||||
<path
|
||||
android:fillColor="@android:color/black"
|
||||
android:pathData="M20.54,5.23l-1.39,-1.68C18.88,3.21 18.47,3 18,3H6c-0.47,0 -0.88,0.21 -1.16,0.55L3.46,5.23C3.17,5.57 3,6.02 3,6.5V19c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V6.5c0,-0.48 -0.17,-0.93 -0.46,-1.27zM12,17.5L6.5,12H10v-2h4v2h3.5L12,17.5zM5.12,5l0.81,-1h12l0.94,1H5.12z"/>
|
||||
</vector>
|
||||
@@ -2,8 +2,7 @@
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:pathData="M9,16.2L4.8,12l-1.4,1.4L9,19 21,7l-1.4,-1.4L9,16.2z"/>
|
||||
|
||||
10
app/src/main/res/drawable/ic_overflow_menu.xml
Normal file
10
app/src/main/res/drawable/ic_overflow_menu.xml
Normal file
@@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/>
|
||||
</vector>
|
||||
5
app/src/main/res/drawable/round_outline.xml
Normal file
5
app/src/main/res/drawable/round_outline.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:shape="rectangle">
|
||||
<solid android:color="#FFFFFF" />
|
||||
<corners android:radius="10dp" />
|
||||
</shape>
|
||||
32
app/src/main/res/layout/archive_activity.xml
Normal file
32
app/src/main/res/layout/archive_activity.xml
Normal file
@@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="true"
|
||||
tools:context="protect.card_locker.MainActivity">
|
||||
|
||||
<com.google.android.material.appbar.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<com.google.android.material.appbar.MaterialToolbar
|
||||
android:id="@+id/toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="?attr/actionBarSize"
|
||||
style="?attr/toolbarStyle" />
|
||||
|
||||
<com.google.android.material.tabs.TabLayout
|
||||
android:id="@+id/groups"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:tabMode="scrollable"
|
||||
android:visibility="gone"/>
|
||||
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
<include layout="@layout/content_main"/>
|
||||
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
@@ -5,6 +5,7 @@
|
||||
android:layout_height="wrap_content"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<ImageView
|
||||
android:background="@drawable/round_outline"
|
||||
android:importantForAccessibility="no"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/barcode_disp_height"
|
||||
|
||||
@@ -74,7 +74,6 @@
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:text="@string/barcodeNoBarcode"
|
||||
android:textColor="#FFFFFF"
|
||||
android:enabled="false" />
|
||||
<ListView
|
||||
android:id="@+id/barcodes"
|
||||
|
||||
@@ -73,8 +73,7 @@
|
||||
app:cardCornerRadius="4dp"
|
||||
android:paddingHorizontal="@dimen/inputPadding"
|
||||
app:cardElevation="0dp"
|
||||
app:cardBackgroundColor="@android:color/transparent"
|
||||
android:outlineProvider="none">
|
||||
app:cardBackgroundColor="@android:color/transparent">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/thumbnail"
|
||||
@@ -83,6 +82,17 @@
|
||||
android:contentDescription="@string/thumbnailDescription"
|
||||
android:src="@mipmap/ic_launcher"/>
|
||||
|
||||
<com.google.android.material.imageview.ShapeableImageView
|
||||
android:id="@+id/thumbnailEditIcon"
|
||||
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.Material3.FloatingActionButton"
|
||||
android:layout_width="@dimen/cardThumbnailEditOverlaySize"
|
||||
android:layout_height="@dimen/cardThumbnailEditOverlaySize"
|
||||
android:layout_gravity="bottom|end"
|
||||
android:layout_margin="4dp"
|
||||
app:contentPadding="4dp"
|
||||
android:alpha="0.8"
|
||||
android:src="@drawable/ic_mode_edit_white_24dp"/>
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
@@ -180,17 +190,18 @@
|
||||
|
||||
<!-- Barcode -->
|
||||
<LinearLayout android:orientation="horizontal"
|
||||
android:padding="10.0dip"
|
||||
android:layout_marginTop="10.0dp"
|
||||
android:layout_marginStart="10.0dp"
|
||||
android:layout_marginEnd="10.0dp"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:id="@+id/barcodeLayout">
|
||||
<ImageView
|
||||
android:background="@drawable/round_outline"
|
||||
android:importantForAccessibility="no"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="@dimen/barcode_disp_height"
|
||||
android:layout_gravity="center_horizontal"
|
||||
android:padding="10.0dp"
|
||||
android:background="#ffffff"
|
||||
android:id="@+id/barcode"
|
||||
android:layout_weight="1.0"/>
|
||||
</LinearLayout>
|
||||
|
||||
@@ -47,13 +47,15 @@
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:srcCompat="@drawable/ic_done" />
|
||||
app:srcCompat="@drawable/ic_done"
|
||||
android:background="@color/md_theme_dark_onSelected" />
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/star"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="end">
|
||||
android:layout_gravity="end"
|
||||
tools:ignore="ExtraText">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/star_background"
|
||||
@@ -86,6 +88,33 @@
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/archivedIcon"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="149dp"
|
||||
android:layout_gravity="end"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.5"
|
||||
app:layout_constraintStart_toEndOf="@+id/thumbnail"
|
||||
tools:layout_editor_absoluteX="355dp">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/archive_background"
|
||||
android:layout_width="41dp"
|
||||
android:layout_height="44dp"
|
||||
android:layout_gravity="end"
|
||||
android:alpha="0.5"
|
||||
android:contentDescription="@string/archived"
|
||||
android:elevation="4dp"
|
||||
android:rotationX="2"
|
||||
android:visibility="visible"
|
||||
app:srcCompat="@drawable/ic_baseline_archive_24"
|
||||
tools:ignore="ImageContrastCheck,MissingConstraints"
|
||||
tools:layout_editor_absoluteX="0dp"
|
||||
tools:layout_editor_absoluteY="-1dp" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
<TextView
|
||||
@@ -171,5 +200,6 @@
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
tools:visibility="visible"
|
||||
tools:text="Tomorrow"/>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
android:layout_height="match_parent"
|
||||
android:fitsSystemWindows="true">
|
||||
|
||||
<com.google.android.material.appbar.AppBarLayout
|
||||
android:layout_width="match_parent"
|
||||
|
||||
24
app/src/main/res/menu/archive_menu.xml
Normal file
24
app/src/main/res/menu/archive_menu.xml
Normal file
@@ -0,0 +1,24 @@
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:context="protect.card_locker.MainActivity">
|
||||
<item
|
||||
android:id="@+id/action_search"
|
||||
android:title="@string/action_search"
|
||||
android:icon="@drawable/ic_search_white"
|
||||
app:actionViewClass="androidx.appcompat.widget.SearchView"
|
||||
app:showAsAction="always|collapseActionView"
|
||||
android:visible="false"/>
|
||||
<item
|
||||
android:id="@+id/action_unfold"
|
||||
android:title="@string/action_hide_details"
|
||||
android:icon="@drawable/ic_baseline_unfold_less_24"
|
||||
app:showAsAction="always"
|
||||
android:visible="false"/>
|
||||
<item
|
||||
android:id="@+id/action_sort"
|
||||
android:title="@string/sort"
|
||||
android:icon="@drawable/ic_baseline_sort_24"
|
||||
app:showAsAction="always"
|
||||
android:visible="false"/>
|
||||
</menu>
|
||||
9
app/src/main/res/menu/card_details_menu.xml
Normal file
9
app/src/main/res/menu/card_details_menu.xml
Normal file
@@ -0,0 +1,9 @@
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<item
|
||||
android:id="@+id/action_unfold"
|
||||
android:title="@string/action_hide_details"
|
||||
android:icon="@drawable/ic_baseline_unfold_less_24"
|
||||
app:showAsAction="always"
|
||||
android:visible="true"/>
|
||||
</menu>
|
||||
@@ -2,20 +2,6 @@
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item
|
||||
android:id="@+id/action_copy_to_clipboard"
|
||||
android:title="@string/copy_to_clipboard"
|
||||
android:icon="@drawable/ic_copy"
|
||||
android:titleCondensed="@string/copy_to_clipboard"
|
||||
app:showAsAction="ifRoom"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_share"
|
||||
android:title="@string/share"
|
||||
android:icon="@drawable/ic_share"
|
||||
android:titleCondensed="@string/share"
|
||||
app:showAsAction="ifRoom"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_edit"
|
||||
android:icon="@drawable/ic_edit"
|
||||
@@ -23,11 +9,48 @@
|
||||
android:titleCondensed="@string/editCardTitle"
|
||||
app:showAsAction="ifRoom"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_copy_to_clipboard"
|
||||
android:icon="@drawable/ic_copy"
|
||||
android:title="@string/copy_to_clipboard"
|
||||
android:titleCondensed="@string/copy_to_clipboard"
|
||||
app:showAsAction="ifRoom"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_share"
|
||||
android:icon="@drawable/ic_share"
|
||||
android:title="@string/share"
|
||||
android:titleCondensed="@string/share"
|
||||
app:showAsAction="ifRoom"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_star"
|
||||
android:title="@string/star"
|
||||
android:titleCondensed="@string/star"
|
||||
app:showAsAction="never"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_unstar"
|
||||
android:title="@string/unstar"
|
||||
android:titleCondensed="@string/unstar"
|
||||
app:showAsAction="never"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_archive"
|
||||
android:title="@string/archive"
|
||||
android:titleCondensed="@string/archive"
|
||||
app:showAsAction="never"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_unarchive"
|
||||
android:title="@string/unarchive"
|
||||
android:titleCondensed="@string/unarchive"
|
||||
app:showAsAction="never"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_delete"
|
||||
android:icon="@drawable/ic_delete_white_24dp"
|
||||
android:title="@string/delete"
|
||||
android:titleCondensed="@string/delete"
|
||||
app:showAsAction="ifRoom"/>
|
||||
|
||||
app:showAsAction="never"/>
|
||||
</menu>
|
||||
@@ -2,19 +2,46 @@
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item
|
||||
android:id="@+id/action_lock_unlock"
|
||||
android:icon="@drawable/ic_lock_open_white_24dp"
|
||||
android:title="@string/lockScreen"
|
||||
app:showAsAction="always"/>
|
||||
<item
|
||||
android:id="@+id/action_share"
|
||||
android:icon="@drawable/ic_share_white"
|
||||
android:title="@string/share"
|
||||
app:showAsAction="always"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_star_unstar"
|
||||
android:icon="@drawable/ic_unstarred_white"
|
||||
android:title="@string/star"
|
||||
app:showAsAction="always" />
|
||||
</menu>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_overflow"
|
||||
android:title="@string/overflowMenu"
|
||||
android:icon="@drawable/ic_overflow_menu"
|
||||
app:showAsAction="always">
|
||||
|
||||
<menu>
|
||||
|
||||
<item
|
||||
android:id="@+id/action_duplicate"
|
||||
android:title="@string/duplicateCard"
|
||||
app:showAsAction="never" />
|
||||
|
||||
<item
|
||||
android:id="@+id/action_archive"
|
||||
android:title="@string/archive"
|
||||
app:showAsAction="never"/>
|
||||
<item
|
||||
android:id="@+id/action_unarchive"
|
||||
android:title="@string/unarchive"
|
||||
app:showAsAction="never"/>
|
||||
<item
|
||||
android:id="@+id/action_delete"
|
||||
android:title="@string/delete"
|
||||
app:showAsAction="never"/>
|
||||
|
||||
</menu>
|
||||
|
||||
</item>
|
||||
|
||||
</menu>
|
||||
|
||||
@@ -26,6 +26,10 @@
|
||||
android:icon="@drawable/ic_folder_white"
|
||||
android:title="@string/groups"
|
||||
app:showAsAction="never"/>
|
||||
<item
|
||||
android:id="@+id/action_archived"
|
||||
android:title="@string/archiveList"
|
||||
app:showAsAction="never"/>
|
||||
<item
|
||||
android:id="@+id/action_import_export"
|
||||
android:icon="@drawable/ic_import_export_white_24dp"
|
||||
|
||||
@@ -2,18 +2,18 @@ Sylvia van Os
|
||||
Branden Archer
|
||||
J. Lavoie
|
||||
Allan Nordhøy
|
||||
Heimen Stoffels
|
||||
solokot
|
||||
mondstern
|
||||
Heimen Stoffels
|
||||
Katharine Chui
|
||||
Oğuz Ersen
|
||||
IllusiveMan196
|
||||
mondstern
|
||||
Altonss
|
||||
IllusiveMan196
|
||||
StoyanDimitrov
|
||||
Petr Novák
|
||||
Joel A
|
||||
Taco
|
||||
Gediminas Murauskas
|
||||
StoyanDimitrov
|
||||
Nyatsuki
|
||||
Michael Moroni
|
||||
Samantaz Fox
|
||||
@@ -21,43 +21,52 @@ arno-github
|
||||
Ankit Tiwari
|
||||
Sergio Paredes
|
||||
laralem
|
||||
arshbeerSingh
|
||||
SlavekB
|
||||
huuhaa
|
||||
arshbeerSingh
|
||||
Quentin PAGÈS
|
||||
Miha Frangež
|
||||
sr093906
|
||||
Freddo espresso
|
||||
mdvhimself
|
||||
Maciej Błędkowski
|
||||
Olivia (Zoe)
|
||||
Quentin PAGÈS
|
||||
betsythefc
|
||||
Silvério Santos
|
||||
waffshappen
|
||||
ati3
|
||||
Jane Kong
|
||||
K. Herbert
|
||||
Still Hsu
|
||||
String E. Fighter
|
||||
Yurical
|
||||
Silvério Santos
|
||||
rr-vesp
|
||||
alajemba-vik
|
||||
/usr/local/ΕΨΗΕΛΩΝ
|
||||
Adolfo Jayme-Barrientos
|
||||
Alessandro Mandelli
|
||||
KovalevArtem
|
||||
Artem M.
|
||||
Astrohops1
|
||||
Clonewayx
|
||||
D. Domig
|
||||
Diego
|
||||
Jane Kong
|
||||
Giovanni
|
||||
Lukas Grassauer
|
||||
Marnick L'Eau
|
||||
Michalis
|
||||
Rosdyana Kusuma
|
||||
schirinowski
|
||||
umoenks
|
||||
Thomas Bertels
|
||||
Runner
|
||||
inesre
|
||||
lgasp
|
||||
phlostically
|
||||
Aditya Das
|
||||
Asier
|
||||
Kevin Sicong Jiang
|
||||
Airat
|
||||
Andreas Blaser
|
||||
sNiXx
|
||||
BMN
|
||||
Biren
|
||||
Mylou53
|
||||
@@ -65,12 +74,14 @@ Kasina Dheeraj
|
||||
Eric
|
||||
Flav
|
||||
Franciszek Stefan
|
||||
Grzegorz
|
||||
Izzy
|
||||
krkk
|
||||
Karol Kosek
|
||||
bittin
|
||||
Marco
|
||||
Mattia
|
||||
Michael Gangolf
|
||||
Moi Toi
|
||||
pbeckmann
|
||||
Peer Beckmann
|
||||
Quang Nguyen
|
||||
@@ -79,14 +90,16 @@ Reza
|
||||
Rohan Babbar
|
||||
Ronak Upadhyay
|
||||
Rose Liverman
|
||||
Samarth Asthan
|
||||
Simone Dotto
|
||||
Still Hsu
|
||||
Subhashish Anand
|
||||
darkodo
|
||||
Tymofii Lytvynenko
|
||||
Tjipke van der Heide
|
||||
Vancha March
|
||||
Yevgeny M
|
||||
avikkundu
|
||||
Avik Kundu
|
||||
opsik
|
||||
pooyanazari
|
||||
psa-jforestier
|
||||
Robin
|
||||
sergio
|
||||
|
||||
@@ -440,7 +440,7 @@ _id,name,barcodeFormat
|
||||
450,CAD,EAN_13
|
||||
451,Camomilla,EAN_13
|
||||
452,"Carpisa Yamamay",EAN_13
|
||||
453,Carrefour,EAN_13
|
||||
453,Carrefour,CODE_128
|
||||
454,"Cisalfa Sport",EAN_13
|
||||
455,Coin,ITF
|
||||
456,Comet,EAN_13
|
||||
|
||||
|
272
app/src/main/res/values-ar/strings.xml
Normal file
272
app/src/main/res/values-ar/strings.xml
Normal file
@@ -0,0 +1,272 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="action_search">بحث</string>
|
||||
<string name="action_add">اضف</string>
|
||||
<string name="noGiftCards">اضغط علي زر + لاضافة بطاقة, او استورد بعض منهم من قائمة ال ⋮.</string>
|
||||
<string name="noMatchingGiftCards">لا نتائج. حاول تغيير بحثك.</string>
|
||||
<string name="storeName">اسم</string>
|
||||
<string name="note">مذكرة</string>
|
||||
<string name="cardId">بطاقة شخصية</string>
|
||||
<string name="barcodeType">نوع الباركود</string>
|
||||
<string name="barcodeNoBarcode">لا يوجد باركود</string>
|
||||
<string name="noBarcode">لا يوجد باركود</string>
|
||||
<string name="star">اضف الي المفضلة</string>
|
||||
<string name="unstar">حذف من المفضلة</string>
|
||||
<string name="cancel">الغاء</string>
|
||||
<string name="save">حفظ</string>
|
||||
<string name="edit">تعديل</string>
|
||||
<string name="delete">مسح</string>
|
||||
<string name="confirm">تأكيد</string>
|
||||
<string name="deleteConfirmation">مسح هذة البطاقة نهائيا؟</string>
|
||||
<string name="ok">حسنا</string>
|
||||
<string name="copy_to_clipboard">نسخ البطاقة الشخصية الي الحافظة</string>
|
||||
<string name="share">شارك</string>
|
||||
<string name="sendLabel">ارسل…</string>
|
||||
<string name="editCardTitle">عدل بطاقة</string>
|
||||
<string name="addCardTitle">اضف بطاقة</string>
|
||||
<string name="scanCardBarcode">مسح باركود</string>
|
||||
<string name="cardShortcut">اختصار البطاقة</string>
|
||||
<string name="noCardsMessage">اضف بطاقة أولا</string>
|
||||
<string name="card_ids_copied">البطاقة(ات) الشخصية المنسوخة</string>
|
||||
<string name="barcodeImageDescriptionWithType">صورة <xliff:g>%s</xliff:g> باركود</string>
|
||||
<string name="noStoreError">لا يوجد اسم مدخل</string>
|
||||
<string name="noCardIdError">لا يوجد بطاقة شخصية مدخلة</string>
|
||||
<string name="noCardExistsError">لا يمكن العثور علي هذه البطاقة</string>
|
||||
<string name="failedParsingImportUriError">لا يمكن تحليل الرابط المستورد</string>
|
||||
<string name="importExport">استيراد/تصدير</string>
|
||||
<string name="importExportHelp">عمل نسخ احتطياتي لبياناتك يسمح نقلها لجهاز اخر.</string>
|
||||
<string name="importFailed">لا يمكن عمل الاستيراد</string>
|
||||
<string name="exportSuccessfulTitle">متصدر</string>
|
||||
<string name="exportFailedTitle">فشل التصدير</string>
|
||||
<string name="exportFailed">لا يمكن عمل التصدير</string>
|
||||
<string name="noExternalStoragePermissionError">امنح التخزين الخارجي اذن لاستيراد وتصدير البيانات</string>
|
||||
<string name="exportOptionExplanation">ستتم كتابة البيانات في الموقع الذي تختاره.</string>
|
||||
<string name="importOptionFilesystemButton">من نظام الملفات</string>
|
||||
<string name="importOptionApplicationTitle">استخدم تطبيقًا آخر</string>
|
||||
<string name="importOptionApplicationExplanation">استخدم أي تطبيق أو مدير الملفات المفضل لديك لفتح ملف.</string>
|
||||
<string name="importOptionApplicationButton">استخدم تطبيقًا آخر</string>
|
||||
<string name="about">حول</string>
|
||||
<string name="app_copyright_old">بناء على Loyalty Card Keychain
|
||||
\nحقوق النشر © 2016-2020 Branden Archer</string>
|
||||
<string name="app_license">البرمجيات الحرة متروكة الحقوق, ترخيص +GPLv3</string>
|
||||
<string name="app_revision_fmt">معلومات المراجعة: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="app_libraries">مكتبات الطرف الثالث الحرة: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="selectBarcodeTitle">اختار الباركود</string>
|
||||
<string name="enterBarcodeInstructions">أدخل بطاقة هوية ، واختر نوع الباركود أدناه ، أو \"لا يوجد باركود\".</string>
|
||||
<string name="copy_to_clipboard_toast">تم نسخ بطاقة الهوية إلى الحافظة</string>
|
||||
<string name="thumbnailDescription">صورة مصغرة</string>
|
||||
<string name="starImage">نجم مفضل</string>
|
||||
<string name="settings">اعدادات</string>
|
||||
<string name="settings_category_title_ui">واجهة المستخدم</string>
|
||||
<string name="settings_light_theme">فاتح</string>
|
||||
<string name="settings_dark_theme">داكن</string>
|
||||
<string name="settings_card_orientation">اتجاه الباركود</string>
|
||||
<string name="settings_portrait_orientation">الوضع الرأسي</string>
|
||||
<string name="settings_landscape_orientation">الوضع الأفقي</string>
|
||||
<string name="settings_theme">مظهر</string>
|
||||
<string name="settings_max_font_size_scale">اقصي. حجم الخط</string>
|
||||
<string name="settings_display_barcode_max_brightness">عرض مشرق علي الباركود</string>
|
||||
<string name="importSuccessful">تم استيراد البيانات</string>
|
||||
<string name="exportSuccessful">تم تصدير البيانات</string>
|
||||
<string name="enter_group_name">أدخل اسم المجموعة</string>
|
||||
<string name="group_edit">تعديل المجموعة</string>
|
||||
<string name="noGroups">اضغط زر + لإضافة مجموعات للتصنيف.</string>
|
||||
<string name="noGroupCards">هذه المجموعة فارغة</string>
|
||||
<string name="group_name_already_in_use">اسم المجموعة قيد الاستخدام بالفعل</string>
|
||||
<string name="group_name_is_empty">لا يمكن أن يكون اسم المجموعة فارغًا</string>
|
||||
<string name="group_updated">تم تحديث المجموعة</string>
|
||||
<string name="all">الكل</string>
|
||||
<string name="deleteConfirmationGroup">هل تريد حذف المجموعة؟</string>
|
||||
<string name="failedOpeningFileManager">قم بتثبيت مدير الملفات أولاً.</string>
|
||||
<string name="moveUp">تحرك لأعلى</string>
|
||||
<string name="addFromImage">حدد صورة من المعرض</string>
|
||||
<string name="balance">الرصيد</string>
|
||||
<string name="currency">العملة</string>
|
||||
<string name="points">نقاط</string>
|
||||
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> لا يبدو أنه رصيد صالح.</string>
|
||||
<string name="chooseImportType">استيراد البيانات من</string>
|
||||
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
|
||||
<string name="privacy_policy">سياسة الخصوصية</string>
|
||||
<string name="accept">قبول</string>
|
||||
<string name="importCatima">الاستيراد من Catima</string>
|
||||
<string name="importCatimaMessage">حدد ملفك <i>catima.zip</i> تصدير من Catima للاستيراد.
|
||||
\nقم بإنشائه من قائمة الاستيراد / التصدير لتطبيق Catima آخر بالضغط على تصدير هناك أولاً.</string>
|
||||
<string name="importFidme">الاستيراد من FidMe</string>
|
||||
<string name="importFidmeMessage">حدد ملفك <i>fidme-export-request-xxxxxx.zip</i> تصدير من FidMe للاستيراد ، ثم حدد أنواع الباركود يدويًا بعد ذلك.
|
||||
\nقم بإنشائه من ملف تعريف FidMe الخاص بك عن طريق اختيار حماية البيانات ثم الضغط على استخراج بياناتي أولاً.</string>
|
||||
<string name="importStocardMessage">حدد ملفك <i>***-sync.zip</i> تصدير من Stocard للاستيراد.
|
||||
\nاحصل عليه عن طريق إرسال بريد إلكتروني إلى support@stocardapp.com لطلب تصدير بياناتك.</string>
|
||||
<string name="importVoucherVault">الاستيراد من Voucher Vault</string>
|
||||
<string name="importVoucherVaultMessage">حدد ملفك <i>vouchervault.json</i> تصدير من Voucher Vault للاستيراد.
|
||||
\nقم بإنشائه بالضغط على تصدير في Voucher Vault أولاً.</string>
|
||||
<string name="barcodeId">قيمة الباركود</string>
|
||||
<string name="sameAsCardId">نفس بطاقة الهوية</string>
|
||||
<string name="setBarcodeId">قم بتعيين قيمة الباركود</string>
|
||||
<string name="unsupportedBarcodeType">لا يمكن عرض نوع الباركود هذا. قد يكون مدعومًا في إصدار أحدث من التطبيق.</string>
|
||||
<string name="wrongValueForBarcodeType">القيمة غير صالحة لنوع الباركود المحدد</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">تم نسخ بطاقات الهوية إلى الحافظة</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">أريد مشاركة بعض البطاقات معك</string>
|
||||
<string name="frontImageDescription">الصورة الأمامية</string>
|
||||
<string name="backImageDescription">الصورة الخلفية</string>
|
||||
<string name="photos">الصور</string>
|
||||
<string name="setFrontImage">تعيين الصورة الأمامية</string>
|
||||
<string name="setBackImage">الصورة الخلفية</string>
|
||||
<string name="removeImage">إزالة الصورة</string>
|
||||
<string name="takePhoto">التقاط صورة</string>
|
||||
<string name="updateBarcodeQuestionTitle">هل تريد تحديث قيمة الباركود؟</string>
|
||||
<string name="updateBarcodeQuestionText">لقد قمت بتغيير بطاقة الهوية. هل تريد أيضًا تحديث الباركود لاستخدام نفس القيمة؟</string>
|
||||
<string name="yes">نعم</string>
|
||||
<string name="no">لا</string>
|
||||
<string name="passwordRequired">الرجاء إدخال كلمة المرور</string>
|
||||
<string name="exportPassword">قم بتعيين كلمة مرور لحماية التصدير (اختياري)</string>
|
||||
<string name="exportPasswordHint">أدخل كلمة المرور</string>
|
||||
<string name="turn_flashlight_on">قم بتشغيل المصباح</string>
|
||||
<string name="turn_flashlight_off">أطفئ المصباح</string>
|
||||
<string name="settings_locale">لغة</string>
|
||||
<string name="settings_system_locale">النظام</string>
|
||||
<string name="setIcon">تعيين رمز</string>
|
||||
<string name="settings_catima_theme">Catima</string>
|
||||
<string name="settings_pink_theme">زهري</string>
|
||||
<string name="settings_magenta_theme">أرجواني</string>
|
||||
<string name="settings_violet_theme">البنفسجي</string>
|
||||
<string name="settings_blue_theme">أزرق</string>
|
||||
<string name="settings_sky_blue_theme">أزرق سماوي</string>
|
||||
<string name="settings_green_theme">أخضر</string>
|
||||
<string name="settings_grey_theme">رمادي</string>
|
||||
<string name="settings_brown_theme">بني</string>
|
||||
<string name="app_contributors">أصبح ممكنًا بواسطة: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="sort">فرز</string>
|
||||
<string name="showMoreInfo">اظهر المعلومات</string>
|
||||
<string name="hideMoreInfo">إخفاء المعلومات</string>
|
||||
<string name="swipeToSwitchImages">اسحب أو اضغط لفترة طويلة لتبديل الصور</string>
|
||||
<string name="sort_by_balance">الرصيد</string>
|
||||
<string name="reverse">... بترتيب معكوس</string>
|
||||
<string name="sort_by">صنف حسب</string>
|
||||
<string name="settings_oled_dark">خلفية سوداء نقية لمظهر داكن</string>
|
||||
<string name="credits">الاعتمادات</string>
|
||||
<string name="source_repository">مستودع المصدر</string>
|
||||
<string name="and_data_usage">واستخدام البيانات</string>
|
||||
<string name="rate_this_app">قيم هذا التطبيق</string>
|
||||
<string name="translate_platform">على Weblate</string>
|
||||
<string name="shortcutSelectCard">اختر بطاقة</string>
|
||||
<string name="options">خيارات</string>
|
||||
<string name="starred">مميز بنجمة</string>
|
||||
<string name="set_scale">ضبط النطاق</string>
|
||||
<string name="include_if_asking_support">إذا كنت ترغب في طلب الدعم ، فقم بتضمين المعلومات التالية:</string>
|
||||
<string name="duplicateCard">كرر</string>
|
||||
<string name="archive">ضع الي الأرشيف</string>
|
||||
<string name="unarchive">أخرج من الأرشيف</string>
|
||||
<string name="archived">تمت أرشفة البطاقة</string>
|
||||
<string name="unarchived">البطاقة غير مؤرشفة</string>
|
||||
<string name="archiveList">أرشيف</string>
|
||||
<string name="failedLaunchingPhotoPicker">تعذر العثور على تطبيق معرض مدعوم</string>
|
||||
<string name="noGiftCardsGroup">انشئ بعض من البطاقات, و عيينهم لهذة المجموعة.</string>
|
||||
<string name="deleteTitle">مسح بطاقة</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="zero"><xliff:g>%d</xliff:g> محدد</item>
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> محددة</item>
|
||||
<item quantity="two"><xliff:g>%d</xliff:g> محدد</item>
|
||||
<item quantity="few"><xliff:g>%d</xliff:g> محدد</item>
|
||||
<item quantity="many"><xliff:g>%d</xliff:g> محدد</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> محدد</item>
|
||||
</plurals>
|
||||
<string name="importing">جار الاستيراد…</string>
|
||||
<string name="exportName">تصدير</string>
|
||||
<string name="exporting">جار التصدير…</string>
|
||||
<string name="importSuccessfulTitle">مستورد</string>
|
||||
<string name="importFailedTitle">فشل الاستيراد</string>
|
||||
<string name="sort_by_most_recently_used">الأكثر أستعمالا مؤخرا</string>
|
||||
<string name="license">رخصة</string>
|
||||
<string name="sort_by_name">اسم</string>
|
||||
<string name="version_history">تاريخ النسخة</string>
|
||||
<string name="action_hide_details">أخف التفاصيل</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="zero"><xliff:g>%1$d</xliff:g> بطاقة ( <xliff:g id="archivedCount">%2$d</xliff:g> مؤرشفة)</item>
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> بطاقة ( <xliff:g id="archivedCount">%2$d</xliff:g> مؤرشفة)</item>
|
||||
<item quantity="two"><xliff:g>%1$d</xliff:g> بطاقة ( <xliff:g id="archivedCount">%2$d</xliff:g> مؤرشفة)</item>
|
||||
<item quantity="few"><xliff:g>%1$d</xliff:g> بطاقات ( <xliff:g id="archivedCount">%2$d</xliff:g> مؤرشفة)</item>
|
||||
<item quantity="many"><xliff:g>%1$d</xliff:g> بطاقات ( <xliff:g id="archivedCount">%2$d</xliff:g> مؤرشفة)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> بطاقات ( <xliff:g id="archivedCount">%2$d</xliff:g> مؤرشفة)</item>
|
||||
</plurals>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="zero">مسح <xliff:g>%d</xliff:g> بطاقة</item>
|
||||
<item quantity="one">مسح <xliff:g>%d</xliff:g> بطاقة</item>
|
||||
<item quantity="two">مسح <xliff:g>%d</xliff:g> بطاقة</item>
|
||||
<item quantity="few">مسح <xliff:g>%d</xliff:g> بطاقات</item>
|
||||
<item quantity="many">مسح <xliff:g>%d</xliff:g> بطاقات</item>
|
||||
<item quantity="other">مسح <xliff:g>%d</xliff:g> بطاقات</item>
|
||||
</plurals>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="zero">مسح هذه <xliff:g>%d</xliff:g> بطاقة نهائيا؟</item>
|
||||
<item quantity="one">مسح هذه <xliff:g>%d</xliff:g> بطاقة نهائيا؟</item>
|
||||
<item quantity="two">مسح هذه <xliff:g>%d</xliff:g> بطاقة نهائيا؟</item>
|
||||
<item quantity="few">مسح هذه <xliff:g>%d</xliff:g> بطاقات نهائيا؟</item>
|
||||
<item quantity="many">مسح هذه <xliff:g>%d</xliff:g> بطاقات نهائيا؟</item>
|
||||
<item quantity="other">مسح هذه <xliff:g>%d</xliff:g> بطاقات نهائيا؟</item>
|
||||
</plurals>
|
||||
<string name="importOptionFilesystemTitle">الاستيراد من نظام الملفات</string>
|
||||
<string name="importOptionFilesystemExplanation">اختر ملفًا محددًا من نظام الملفات.</string>
|
||||
<string name="about_title_fmt">حول <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">نسخة: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="settings_system_theme">نظام</string>
|
||||
<string name="settings_lock_on_opening_orientation">قفل على الاتجاه عند فتح البطاقة</string>
|
||||
<string name="app_resources">موارد الطرف الثالث الحرة: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="settings_follow_system_orientation">نظام المتابعة</string>
|
||||
<string name="groups">مجموعات</string>
|
||||
<string name="barcode">باركود</string>
|
||||
<string name="settings_keep_screen_on">حافظ على الشاشة قيد التشغيل</string>
|
||||
<string name="intent_import_card_from_url_share_text">اريد مشاركة بطاقة معك</string>
|
||||
<string name="groupsList">مجموعات: <xliff:g>%s</xliff:g></string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">منع قفل الشاشة</string>
|
||||
<string name="leaveWithoutSaveTitle">خروج</string>
|
||||
<string name="editGroup">مجموعة التعديل: <xliff:g>%s</xliff:g></string>
|
||||
<plurals name="groupCardCount">
|
||||
<item quantity="zero"><xliff:g>%d</xliff:g> بطاقة</item>
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> بطاقة</item>
|
||||
<item quantity="two"><xliff:g>%d</xliff:g> بطاقة</item>
|
||||
<item quantity="few"><xliff:g>%d</xliff:g> بطاقات</item>
|
||||
<item quantity="many"><xliff:g>%d</xliff:g> بطاقات</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> بطاقات</item>
|
||||
</plurals>
|
||||
<string name="moveDown">تحرك لأسفل</string>
|
||||
<string name="leaveWithoutSaveConfirmation">المغادرة دون حفظ؟</string>
|
||||
<string name="addManually">أدخل بطاقة الهوية يدويًا</string>
|
||||
<string name="moveBarcodeToTopOfScreen">انقل الباركود إلى أعلى الشاشة</string>
|
||||
<string name="balanceSentence">الرصيد: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryStateSentence">تنتهي: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryStateSentenceExpired">منتهي الصلاحية: <xliff:g>%s</xliff:g></string>
|
||||
<string name="moveBarcodeToCenterOfScreen">قم بتوسيط الرمز الشريطي على الشاشة</string>
|
||||
<plurals name="balancePoints">
|
||||
<item quantity="zero"><xliff:g>%s</xliff:g> نقطة</item>
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> نقطة</item>
|
||||
<item quantity="two"><xliff:g>%s</xliff:g> نقطة</item>
|
||||
<item quantity="few"><xliff:g>%s</xliff:g> نقطات</item>
|
||||
<item quantity="many"><xliff:g>%s</xliff:g> نقطات</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> نقطات</item>
|
||||
</plurals>
|
||||
<string name="card">بطاقة</string>
|
||||
<string name="selectColor">إختر لون</string>
|
||||
<string name="editBarcode">تعديل الباركود</string>
|
||||
<string name="expiryDate">تاريخ انتهاء الصلاحية</string>
|
||||
<string name="never">أبداً</string>
|
||||
<string name="chooseExpiryDate">اختر تاريخ انتهاء الصلاحية</string>
|
||||
<string name="errorReadingImage">لا يمكن قراءة الصورة</string>
|
||||
<string name="noBarcodeFound">لم يتم العثور على باركود</string>
|
||||
<string name="on_github">على GitHub</string>
|
||||
<string name="report_error">الإبلاغ عن خطأ</string>
|
||||
<string name="sort_by_expiry">انقضاء</string>
|
||||
<string name="noUnarchivedCardsMessage">لا توجد بطاقات غير مؤرشفة موجودة</string>
|
||||
<string name="importLoyaltyCardKeychain">الاستيراد من Loyalty Card Keychain</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019–<xliff:g>%d</xliff:g> Sylvia van Os</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">حدد ملفك <i>LoyaltyCardKeychain.csv</i> التصدير من Loyalty Card Keychain للاستيراد.
|
||||
\nقم بإنشائه من قائمة الاستيراد / التصدير في Loyalty Card Keychain بالضغط على تصدير هناك أولاً.</string>
|
||||
<string name="importStocard">الاستيراد من Stocard</string>
|
||||
<string name="privacy_policy_popup_text">إشعار سياسة الخصوصية (مطلوب من قبل بعض متاجر التطبيقات):
|
||||
\n
|
||||
\nلا يتم جمع أي بيانات على الإطلاق ، والتي يمكن لأي شخص تأكيدها لأن تطبيقنا هو برنامج حر.</string>
|
||||
<string name="failedGeneratingShareURL">تعذر إنشاء عنوان URL قابل للمشاركة. الرجاء الإبلاغ عن هذا.</string>
|
||||
<string name="help_translate_this_app">ساعد في ترجمة هذا التطبيق</string>
|
||||
<string name="action_show_details">اظهر التفاصيل</string>
|
||||
<string name="on_google_play">على Google Play</string>
|
||||
<string name="settings_theme_color">لون المظهر</string>
|
||||
</resources>
|
||||
@@ -10,7 +10,7 @@
|
||||
<string name="cancel">Отказ</string>
|
||||
<string name="unstar">Премахва от любими</string>
|
||||
<string name="star">Добавя към любими</string>
|
||||
<string name="noBarcode">Без щрихкод</string>
|
||||
<string name="noBarcode">Липсва щрихкод</string>
|
||||
<string name="barcodeNoBarcode">Липсва щрихкод</string>
|
||||
<string name="barcodeType">Вид на щрихкод</string>
|
||||
<string name="cardId">Идентификатор на карта</string>
|
||||
@@ -87,7 +87,6 @@
|
||||
<string name="enter_group_name">Въведете име на списъка</string>
|
||||
<string name="intent_import_card_from_url_share_text">Искам да споделя тази карта с вас</string>
|
||||
<string name="settings_display_barcode_max_brightness">Увеличаване на яркостта при видим щрихкод</string>
|
||||
<string name="settings_lock_barcode_orientation">Без на завъртане на щрихкода</string>
|
||||
<string name="settings_keep_screen_on">Поддържане на екрана включен</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Предотвратяване на заключване на екрана</string>
|
||||
<string name="settings_max_font_size_scale">Максимален размер на шрифта</string>
|
||||
@@ -139,8 +138,6 @@
|
||||
<string name="importOptionFilesystemTitle">Внасяне от файловата система</string>
|
||||
<string name="importCatima">Внасяне от Catima</string>
|
||||
<string name="exportSuccessful">Данните са изнесени</string>
|
||||
<string name="unlockScreen">Разрешава автоматичното завъртане</string>
|
||||
<string name="lockScreen">Спира автоматичното завъртане</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> избрана</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> избрани</item>
|
||||
@@ -161,7 +158,7 @@
|
||||
<string name="importLoyaltyCardKeychainMessage">Изберете файла <i>LoyaltyCardKeychain.csv</i>, предварително изнесен от Loyalty Card Keychain.
|
||||
\nСъздайте такъв файл от меню Внасяне/изнасяне от друго устройство с Loyalty Card Keychain като изберете Изнасяне.</string>
|
||||
<string name="failedParsingImportUriError">Препратката не може да бъде анализирана за внасяне</string>
|
||||
<string name="failedGeneratingShareURL">Грешка при създаване на адрес за споделяне. Изпратете доклад за дефект.</string>
|
||||
<string name="failedGeneratingShareURL">Не може да бъде генериран адрес за споделяне. Изпратете доклад за дефект.</string>
|
||||
<string name="deleteTitle">Премахване на карта</string>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="one">Изтриване на <xliff:g>%d</xliff:g> карта</item>
|
||||
@@ -230,4 +227,22 @@
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> точки</item>
|
||||
</plurals>
|
||||
<string name="settings_oled_dark">Чисто черен фон за тъмната тема</string>
|
||||
<string name="include_if_asking_support">Ако искате да потърсите поддръжка, включете следната информация:</string>
|
||||
<string name="settings_card_orientation">Положение на щрихкода</string>
|
||||
<string name="settings_follow_system_orientation">Според системата</string>
|
||||
<string name="settings_portrait_orientation">Портретно</string>
|
||||
<string name="settings_landscape_orientation">Пейзажно</string>
|
||||
<string name="settings_lock_on_opening_orientation">Използване на положението, използвано при отваряне на картата</string>
|
||||
<string name="duplicateCard">Дублиране</string>
|
||||
<string name="archive">Архивиране</string>
|
||||
<string name="unarchive">Изваждане от архива</string>
|
||||
<string name="archived">Картата е архивирана</string>
|
||||
<string name="unarchived">Карта е извадена от архива</string>
|
||||
<string name="archiveList">Архив</string>
|
||||
<string name="noUnarchivedCardsMessage">Няма карти извън архива</string>
|
||||
<string name="failedLaunchingPhotoPicker">Не е намерено поддържано приложение за галерия.</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> карта (<xliff:g id="archivedCount">%2$d</xliff:g> архивирана)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> карти (<xliff:g id="archivedCount">%2$d</xliff:g> архивирани)</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -21,7 +21,6 @@
|
||||
<string name="intent_import_card_from_url_share_text">url শেয়ার টেক্সট থেকে ইন্টেন্ট ইম্পোর্ট কার্ড</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card"> কার্ড দেখা কালিন লকস্ক্রিন নিষ্ক্রিয়</string>
|
||||
<string name="settings_keep_screen_on">সেটিংস পর্দা খোলা রাখুন</string>
|
||||
<string name="settings_lock_barcode_orientation"> তালাবদ্ধ বার কোড অভিযোজন</string>
|
||||
<string name="settings_max_font_size_scale">সর্বোচ্চ হরফ আকার</string>
|
||||
<string name="settings_light_theme">সাদাটে থিম</string>
|
||||
<string name="settings_system_theme">যন্ত্রর থিম</string>
|
||||
@@ -82,7 +81,6 @@
|
||||
<string name="share">ভাগ</string>
|
||||
<string name="copy_to_clipboard">নকল করুন ক্লিপবোর্ড এ</string>
|
||||
<string name="deleteConfirmation">নিশ্চিতকরণ মুছে দিন</string>
|
||||
<string name="unlockScreen">পর্দা আনলক করুন</string>
|
||||
<string name="confirm">নিশ্চিত করুন</string>
|
||||
<string name="delete">মুছে ফেলুন</string>
|
||||
<string name="edit">সম্পাদনা</string>
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
<string name="intent_import_card_from_url_share_text">Želim podijeliti čestitku s tobom</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Spriječi zaključavanje ekrana</string>
|
||||
<string name="settings_keep_screen_on">Zadrži ekran</string>
|
||||
<string name="settings_lock_barcode_orientation">Zaključaj barcode orjentacija</string>
|
||||
<string name="settings_max_font_size_scale">Max. veliäťina fonta</string>
|
||||
<string name="settings_light_theme">Svjetlo</string>
|
||||
<string name="settings_system_theme">Sistem</string>
|
||||
@@ -82,7 +81,6 @@
|
||||
<string name="share">Podijeli</string>
|
||||
<string name="copy_to_clipboard">Kopiraj ID u clipboard</string>
|
||||
<string name="deleteConfirmation">Izbriši trajno ovu karticu\?</string>
|
||||
<string name="unlockScreen">Odblokalna Rotacija</string>
|
||||
<string name="confirm">Potvrdi</string>
|
||||
<string name="delete">Obriši</string>
|
||||
<string name="edit">Izmijeni</string>
|
||||
|
||||
@@ -13,40 +13,40 @@
|
||||
<string name="ok">Ano</string>
|
||||
<string name="copy_to_clipboard">Kopírovat ID do schránky</string>
|
||||
<string name="sendLabel">Odeslat…</string>
|
||||
<string name="editCardTitle">Editovat věrnostní kartu</string>
|
||||
<string name="addCardTitle">Přidat věrnostní kartu</string>
|
||||
<string name="editCardTitle">Editovat kartu</string>
|
||||
<string name="addCardTitle">Přidat kartu</string>
|
||||
<string name="scanCardBarcode">Skenování čárového kódu</string>
|
||||
<string name="noStoreError">Zadáno žádné jméno</string>
|
||||
<string name="noCardIdError">ID nezadáno</string>
|
||||
<string name="noStoreError">Nezadáno žádné jméno</string>
|
||||
<string name="noCardIdError">Nezadáno ID</string>
|
||||
<string name="importExport">Import/Export</string>
|
||||
<string name="exportName">Export</string>
|
||||
<string name="importExportHelp">Zálohování dat vám umožní přesunout je do jiného zařízení.</string>
|
||||
<string name="importSuccessfulTitle">Importováno</string>
|
||||
<string name="importFailedTitle">Import selhal</string>
|
||||
<string name="importFailed">Nelze provést import</string>
|
||||
<string name="importFailed">Import nelze provést</string>
|
||||
<string name="exportSuccessfulTitle">Exportováno</string>
|
||||
<string name="exportFailedTitle">Export selhal</string>
|
||||
<string name="exportFailed">Nelze provést export</string>
|
||||
<string name="exportFailed">Export nelze provést</string>
|
||||
<string name="importing">Importuji…</string>
|
||||
<string name="exporting">Exportuji…</string>
|
||||
<string name="noExternalStoragePermissionError">Udělit oprávnění přístupu k externímu úložišti pro import nebo export dat</string>
|
||||
<string name="importOptionFilesystemTitle">Import ze souborového systému</string>
|
||||
<string name="importOptionFilesystemExplanation">Vyberte konkrétní soubor v uložišti.</string>
|
||||
<string name="importOptionFilesystemExplanation">Vyberte konkrétní soubor v úložišti.</string>
|
||||
<string name="importOptionFilesystemButton">Ze souborového systému</string>
|
||||
<string name="importOptionApplicationTitle">Použijte jinou aplikaci</string>
|
||||
<string name="importOptionApplicationTitle">Použitím jiné aplikace</string>
|
||||
<string name="importOptionApplicationExplanation">K otevření souboru použijte libovolnou aplikaci nebo svého oblíbeného správce souborů.</string>
|
||||
<string name="importOptionApplicationButton">Použijte jinou aplikaci</string>
|
||||
<string name="importOptionApplicationButton">Použít jinou aplikaci</string>
|
||||
<string name="about">O aplikaci</string>
|
||||
<string name="app_license">Copyleftovaný svobodný software s licencí GPLv3+</string>
|
||||
<string name="about_title_fmt">O aplikaci <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Verze: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Informace o revizi: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="selectBarcodeTitle">Vyberte čárový kód</string>
|
||||
<string name="copy_to_clipboard_toast">ID zkopírované do schránky</string>
|
||||
<string name="copy_to_clipboard_toast">ID zkopírováno do schránky</string>
|
||||
<string name="deleteTitle">Smazat kartu</string>
|
||||
<string name="deleteConfirmation">Opravdu chcete smazat tuto věrnostní kartu?</string>
|
||||
<string name="moveBarcodeToCenterOfScreen">Střed čárového kódu na obrazovce</string>
|
||||
<string name="moveBarcodeToTopOfScreen">Přesuňte čárový kód do horní části obrazovky</string>
|
||||
<string name="deleteConfirmation">Opravdu chcete smazat tuto kartu\?</string>
|
||||
<string name="moveBarcodeToCenterOfScreen">Vycentrovat čárový kód na obrazovce</string>
|
||||
<string name="moveBarcodeToTopOfScreen">Přesunout čárový kód do horní části obrazovky</string>
|
||||
<string name="chooseExpiryDate">Zvolte datum vypršení platnosti</string>
|
||||
<string name="never">Nikdy</string>
|
||||
<string name="expiryDate">Platnost</string>
|
||||
@@ -58,12 +58,10 @@
|
||||
\ncopyright © 2016–2020 Branden Archer</string>
|
||||
<string name="exportOptionExplanation">Data budou zapsána na místo podle vašeho výběru.</string>
|
||||
<string name="failedParsingImportUriError">Nelze analyzovat import URI</string>
|
||||
<string name="noCardExistsError">Kartu nelze najít</string>
|
||||
<string name="noCardExistsError">Takovou kartu nelze najít</string>
|
||||
<string name="noCardsMessage">Nejprve přidejte kartu</string>
|
||||
<string name="cardShortcut">Zástupce Karty</string>
|
||||
<string name="cardShortcut">Zástupce karty</string>
|
||||
<string name="share">Podíl</string>
|
||||
<string name="unlockScreen">Odblokovat Rotaci</string>
|
||||
<string name="lockScreen">Otáčení Bloku</string>
|
||||
<string name="unstar">Odebrat z oblíbených</string>
|
||||
<string name="star">Přidat do oblíbených</string>
|
||||
<string name="noBarcode">Žádný čárový kód</string>
|
||||
@@ -72,26 +70,25 @@
|
||||
<string name="noMatchingGiftCards">Nic nenalezeno. Zkuste změnit vyhledávání.</string>
|
||||
<string name="action_search">Vyhledávání</string>
|
||||
<string name="thumbnailDescription">Miniatura</string>
|
||||
<string name="card_ids_copied">Zkopírované ID</string>
|
||||
<string name="card_ids_copied">ID zkopírováno</string>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="one">Opravdu chcete kartu <xliff:g>%d</xliff:g> trvale odstranit\?</item>
|
||||
<item quantity="few">Opravdu chcete karty <xliff:g>%d</xliff:g> trvale odstranit\?</item>
|
||||
<item quantity="other">Opravdu chcete karty <xliff:g>%d</xliff:g> trvale odstranit\?</item>
|
||||
<item quantity="one">Opravdu chcete <xliff:g>%d</xliff:g> kartu trvale odstranit\?</item>
|
||||
<item quantity="few">Opravdu chcete <xliff:g>%d</xliff:g> karty trvale odstranit\?</item>
|
||||
<item quantity="other">Opravdu chcete <xliff:g>%d</xliff:g> karet trvale odstranit\?</item>
|
||||
</plurals>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="one">Odstranit kartu <xliff:g>%d</xliff:g></item>
|
||||
<item quantity="few">Odstranit karty <xliff:g>%d</xliff:g></item>
|
||||
<item quantity="other">Odstranit karty <xliff:g>%d</xliff:g></item>
|
||||
<item quantity="one">Odstranit <xliff:g>%d</xliff:g> kartu</item>
|
||||
<item quantity="few">Odstranit <xliff:g>%d</xliff:g> karty</item>
|
||||
<item quantity="other">Odstranit <xliff:g>%d</xliff:g> karet</item>
|
||||
</plurals>
|
||||
<string name="importSuccessful">Data importována</string>
|
||||
<string name="intent_import_card_from_url_share_text">Chci s Vámi sdílet kartu</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Bránit uzamykání obrazovky</string>
|
||||
<string name="settings_keep_screen_on">Udržovat obrazovku zapnutou</string>
|
||||
<string name="settings_lock_barcode_orientation">Zamknout orientaci čárového kódu</string>
|
||||
<string name="settings_max_font_size_scale">Maximální velikost písma</string>
|
||||
<string name="settings_dark_theme">Tmavý</string>
|
||||
<string name="settings_light_theme">Světlý</string>
|
||||
<string name="settings_system_theme">Systém</string>
|
||||
<string name="settings_system_theme">Podle systému</string>
|
||||
<string name="settings_theme">Vzhled</string>
|
||||
<string name="settings_category_title_ui">Uživatelské rozhraní</string>
|
||||
<string name="settings">Nastavení</string>
|
||||
@@ -101,7 +98,7 @@
|
||||
<string name="expiryStateSentence">Platí do: <xliff:g>%s</xliff:g></string>
|
||||
<string name="moveDown">Přesunout dolů</string>
|
||||
<string name="moveUp">Přesunout nahoru</string>
|
||||
<string name="enterBarcodeInstructions">Zadejte ID a níže vyberte typ čárového kódu nebo \"Tato karta nemá čárový kód\".</string>
|
||||
<string name="enterBarcodeInstructions">Zadejte ID a níže vyberte typ čárového kódu nebo „Tato karta nemá čárový kód“.</string>
|
||||
<string name="settings_brown_theme">Hnědá</string>
|
||||
<string name="settings_grey_theme">Šedá</string>
|
||||
<string name="settings_green_theme">Zelená</string>
|
||||
@@ -112,7 +109,7 @@
|
||||
<string name="settings_pink_theme">Růžová</string>
|
||||
<string name="settings_catima_theme">Catima</string>
|
||||
<string name="settings_theme_color">Barva motivu</string>
|
||||
<string name="settings_system_locale">Systém</string>
|
||||
<string name="settings_system_locale">Podle systému</string>
|
||||
<string name="settings_locale">Jazyk</string>
|
||||
<string name="turn_flashlight_off">Vypnout světlo</string>
|
||||
<string name="turn_flashlight_on">Zapnout světlo</string>
|
||||
@@ -129,27 +126,27 @@
|
||||
<string name="photos">Fotky</string>
|
||||
<string name="backImageDescription">Obrázek zadní strany</string>
|
||||
<string name="frontImageDescription">Obrázek přední strany</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Chci s Vámi sdílet kartu</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">ID zkopírováno do schránky</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Chci s vámi sdílet karty</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">ID zkopírována do schránky</string>
|
||||
<string name="wrongValueForBarcodeType">Hodnota není platná pro vybraný typ čárového kódu</string>
|
||||
<string name="unsupportedBarcodeType">Tento typ čárového kódu zatím nelze zobrazit. Možná bude podporován v pozdější verzi aplikace.</string>
|
||||
<string name="barcodeId">Hodnota čárového kódu</string>
|
||||
<string name="setBarcodeId">Nastavení hodnoty čárového kódu</string>
|
||||
<string name="sameAsCardId">Stejné jako ID</string>
|
||||
<string name="importVoucherVaultMessage">Vyberte svůj <i>vouchervault.json</i> export z Voucher Vault, který chcete importovat.
|
||||
\nVytvořte jej tak, že nejprve stisknete tlačítko Exportovat v aplikaci Voucher Vault.</string>
|
||||
<string name="importVoucherVaultMessage">Vyberte svůj <i>vouchervault.json</i> exportovaný z Voucher Vault, který chcete importovat.
|
||||
\nVytvoříte jej tak, že nejprve stisknete tlačítko Exportovat v aplikaci Voucher Vault.</string>
|
||||
<string name="importVoucherVault">Import z Voucher Vault</string>
|
||||
<string name="importStocardMessage">Vyberte svůj <i>***-sync.zip</i> export z aplikace Stocard, který chcete importovat.
|
||||
\nZískejte ji zasláním e-mailu na adresu support@stocardapp.com s žádostí o export vašich dat.</string>
|
||||
<string name="importStocardMessage">Vyberte svůj <i>***-sync.zip</i> exportovaný z aplikace Stocard, který chcete importovat.
|
||||
\nZískejte ji zasláním e-mailu na adresu support@stocardapp.com s žádostí o export vašich dat.</string>
|
||||
<string name="importStocard">Import ze Stocard</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Vyberte export <i>LoyaltyCardKeychain.csv</i> z klíčenky věrnostních karet, který chcete importovat.
|
||||
\nVytvořte jej z nabídky Import/Export v Loyalty Card Keychain tak, že tam nejprve stisknete tlačítko Exportovat.</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Vyberte <i>LoyaltyCardKeychain.csv</i> exportovaný z Loyalty Card Keychain, který chcete importovat.
|
||||
\nVytvoříte jej z nabídky Import/Export v Loyalty Card Keychain tak, že tam nejprve stisknete tlačítko Exportovat.</string>
|
||||
<string name="importLoyaltyCardKeychain">Import z Loyalty Card Keychain</string>
|
||||
<string name="importFidmeMessage">Vyberte svůj <i>fidme-export-request-xxxxxx.zip</i> export z FidMe k importu a poté vyberte typy čárových kódů ručně.
|
||||
\nVytvořte jej ze svého profilu FidMe tak, že nejprve zvolíte možnost Ochrana dat a poté stisknete tlačítko Extract moje data.</string>
|
||||
<string name="importFidmeMessage">Vyberte svůj <i>fidme-export-request-xxxxxx.zip</i> exportovaný z FidMe k importu a poté vyberte typy čárových kódů ručně.
|
||||
\nVytvoříte jej ze svého profilu FidMe tak, že nejprve zvolíte možnost Ochrana dat a poté stisknete tlačítko Extrahovat moje data.</string>
|
||||
<string name="importFidme">Import z FidMe</string>
|
||||
<string name="importCatimaMessage">Vyberte export <i>catima.zip</i> z programu Catima, který chcete importovat.
|
||||
\nVytvořte jej z nabídky Import/Export jiné aplikace Catima tak, že v ní nejprve stisknete tlačítko Exportovat.</string>
|
||||
<string name="importCatimaMessage">Vyberte <i>catima.zip</i> exportovaný z aplikace Catima, který chcete importovat.
|
||||
\nVytvoříte jej z nabídky Import/Export jiné aplikace Catima tak, že v ní nejprve stisknete tlačítko Exportovat.</string>
|
||||
<string name="importCatima">Import z Catima</string>
|
||||
<string name="accept">Přijmout</string>
|
||||
<string name="privacy_policy_popup_text">Oznámení o zásadách ochrany osobních údajů (vyžadováno některými obchody s aplikacemi):
|
||||
@@ -163,7 +160,7 @@
|
||||
<string name="currency">Měna</string>
|
||||
<string name="balance">Zůstatek</string>
|
||||
<string name="errorReadingImage">Obrázek se nepodařilo přečíst</string>
|
||||
<string name="noBarcodeFound">Čarový kód nenalezen</string>
|
||||
<string name="noBarcodeFound">Čárový kód nenalezen</string>
|
||||
<string name="groupsList">Skupiny: <xliff:g>%s</xliff:g></string>
|
||||
<string name="addFromImage">Výběr obrázku z galerie</string>
|
||||
<string name="addManually">Ruční zadání ID</string>
|
||||
@@ -203,7 +200,7 @@
|
||||
<string name="version_history">Historie verzí</string>
|
||||
<string name="rate_this_app">Ohodnoťte tuto aplikaci</string>
|
||||
<string name="and_data_usage">a využití dat</string>
|
||||
<string name="credits">Kredity</string>
|
||||
<string name="credits">Zásluhy</string>
|
||||
<string name="on_github">na GitHubu</string>
|
||||
<string name="source_repository">Úložiště zdrojů</string>
|
||||
<string name="license">Licence</string>
|
||||
@@ -212,10 +209,10 @@
|
||||
<string name="on_google_play">na Google Play</string>
|
||||
<string name="exportPassword">Nastavení hesla pro ochranu exportu (volitelné)</string>
|
||||
<string name="exportPasswordHint">Zadejte heslo</string>
|
||||
<string name="selectColor">Vyberte barvu</string>
|
||||
<string name="selectColor">Vybrat barvu</string>
|
||||
<string name="setIcon">Nastavit ikonu</string>
|
||||
<string name="group_edit">Upravit skupinu</string>
|
||||
<string name="group_name_already_in_use">Již použitý název skupiny</string>
|
||||
<string name="group_name_already_in_use">Název skupiny je již použitý</string>
|
||||
<string name="group_name_is_empty">Název skupiny nemůže být prázdný</string>
|
||||
<string name="group_updated">Skupina aktualizována</string>
|
||||
<string name="editGroup">Úprava skupiny: <xliff:g>%s</xliff:g></string>
|
||||
@@ -234,4 +231,24 @@
|
||||
<item quantity="few"><xliff:g>%s</xliff:g> body</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> bodů</item>
|
||||
</plurals>
|
||||
<string name="settings_oled_dark">Čistě černé pozadí pro tmavý motiv</string>
|
||||
<string name="include_if_asking_support">Pokud chcete požádat o podporu, uveďte následující informace:</string>
|
||||
<string name="settings_follow_system_orientation">Následovat systém</string>
|
||||
<string name="settings_portrait_orientation">Na výšku</string>
|
||||
<string name="settings_lock_on_opening_orientation">Zamknout podle orientace použité při otevření karty</string>
|
||||
<string name="archive">Archivovat</string>
|
||||
<string name="unarchive">Vrátit z archivu</string>
|
||||
<string name="archiveList">Archivovat</string>
|
||||
<string name="noUnarchivedCardsMessage">Nejsou žádné karty vrácené z archivu</string>
|
||||
<string name="unarchived">Karta vrácena z archivu</string>
|
||||
<string name="settings_card_orientation">Orientace čárového kódu</string>
|
||||
<string name="settings_landscape_orientation">Na šířku</string>
|
||||
<string name="duplicateCard">Duplikovat</string>
|
||||
<string name="archived">Karta archivována</string>
|
||||
<string name="failedLaunchingPhotoPicker">Nepodařilo se najít podporovanou aplikaci galerie</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> karta (<xliff:g id="archivedCount">%2$d</xliff:g> archivovaná)</item>
|
||||
<item quantity="few"><xliff:g>%1$d</xliff:g> karty (<xliff:g id="archivedCount">%2$d</xliff:g> archivované)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> karet (<xliff:g id="archivedCount">%2$d</xliff:g> archivovaných)</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -13,8 +13,6 @@
|
||||
<item quantity="other">Streichen <xliff:g>%d</xliff:g> korts</item>
|
||||
</plurals>
|
||||
<string name="deleteTitle">Karte streichen</string>
|
||||
<string name="unlockScreen">Afbloker rotation</string>
|
||||
<string name="lockScreen">Blokrotation</string>
|
||||
<string name="confirm">Bekræft</string>
|
||||
<string name="delete">Slet</string>
|
||||
<string name="edit">Rediger</string>
|
||||
@@ -85,7 +83,6 @@
|
||||
<string name="intent_import_card_from_url_share_text">Jeg vil dele et kort med jer</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Forebyg låseskærm</string>
|
||||
<string name="settings_keep_screen_on">LHold skærm tændt</string>
|
||||
<string name="settings_lock_barcode_orientation">Lås stregkode-orientering</string>
|
||||
<string name="moveUp">Bevæg dig opad</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Forlade uden at gemme\?</string>
|
||||
<string name="settings_display_barcode_max_brightness">Lysere stregkodevisning</string>
|
||||
|
||||
@@ -12,8 +12,6 @@
|
||||
<string name="edit">Bearbeiten</string>
|
||||
<string name="delete">Löschen</string>
|
||||
<string name="confirm">Bestätigen</string>
|
||||
<string name="lockScreen">Rotation sperren</string>
|
||||
<string name="unlockScreen">Rotation erlauben</string>
|
||||
<string name="star">Zu den Favoriten hinzufügen</string>
|
||||
<string name="unstar">Aus den Favoriten entfernen</string>
|
||||
<string name="ok">OK</string>
|
||||
@@ -56,7 +54,6 @@
|
||||
<string name="settings">Einstellungen</string>
|
||||
<string name="settings_category_title_ui">Benutzeroberfläche</string>
|
||||
<string name="settings_display_barcode_max_brightness">Barcodeansicht aufhellen</string>
|
||||
<string name="settings_lock_barcode_orientation">Barcoderotation sperren</string>
|
||||
<string name="exportSuccessful">Daten exportiert</string>
|
||||
<string name="importSuccessful">Daten importiert</string>
|
||||
<string name="intent_import_card_from_url_share_text">Ich würde gerne diese Karte mit dir teilen</string>
|
||||
@@ -231,4 +228,21 @@
|
||||
</plurals>
|
||||
<string name="settings_oled_dark">Rein schwarzer Hintergrund für dunkles Thema</string>
|
||||
<string name="include_if_asking_support">Wenn Sie Unterstützung anfordern möchten, geben Sie bitte die folgenden Informationen an:</string>
|
||||
<string name="settings_follow_system_orientation">System folgen</string>
|
||||
<string name="settings_landscape_orientation">Landschaft</string>
|
||||
<string name="archiveList">Archiv</string>
|
||||
<string name="noUnarchivedCardsMessage">Es gibt keine nicht archivierten Karten</string>
|
||||
<string name="settings_portrait_orientation">Porträt</string>
|
||||
<string name="duplicateCard">Duplizieren</string>
|
||||
<string name="unarchive">Archivierung aufheben</string>
|
||||
<string name="settings_card_orientation">Barcode-Ausrichtung</string>
|
||||
<string name="unarchived">Karte nicht archiviert</string>
|
||||
<string name="archive">Archivieren</string>
|
||||
<string name="archived">Karte archiviert</string>
|
||||
<string name="settings_lock_on_opening_orientation">Kartenausrichtung nach dem Öffnen beibehalten</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> Karte (<xliff:g id="archivedCount">%2$d</xliff:g> archiviert)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> Karten (<xliff:g id="archivedCount">%2$d</xliff:g> archiviert)</item>
|
||||
</plurals>
|
||||
<string name="failedLaunchingPhotoPicker">Es konnte keine unterstützte Galerie-Anwendung gefunden werden</string>
|
||||
</resources>
|
||||
@@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="action_add">Προσθήκη</string>
|
||||
<string name="noGiftCards">Δεν έχετε κάρτες προς το παρόν. Πατήστε το κουμπί \"+\" (συν) στο πάνω μέρος για να ξεκινήσετε.\n\nΤο Loyalty Card Keychain σας δίνει τη δυνατότητα να έχετε τις κάρτες σας στο τηλέφωνο σας, έτσι ώστε να τις έχετε πάντα μαζί σας.</string>
|
||||
<string name="storeName">Κατάστημα</string>
|
||||
<string name="noGiftCards">Κάντε κλικ στο + κουμπί για να προσθέσετε μία κάρτα ή εισάγετε κάρτες από το ⋮ μενού.</string>
|
||||
<string name="storeName">Όνομα</string>
|
||||
<string name="note">Σημείωση</string>
|
||||
<string name="cardId">Κωδικός Κάρτας</string>
|
||||
<string name="cancel">Άκυρο</string>
|
||||
@@ -10,51 +10,239 @@
|
||||
<string name="edit">Επεξεργασία</string>
|
||||
<string name="delete">Διαγραφή</string>
|
||||
<string name="confirm">Επιβεβαίωση</string>
|
||||
<string name="lockScreen">Αποκλεισμός Περιστροφής</string>
|
||||
<string name="unlockScreen">Περιστροφή</string>
|
||||
<string name="ok">Εντάξει</string>
|
||||
<string name="copy_to_clipboard">Αντιγραφή κωδικού στο πρόχειρο</string>
|
||||
<string name="sendLabel">Αποστολή…</string>
|
||||
<string name="editCardTitle">Επεξεργασία Κάρτας</string>
|
||||
<string name="addCardTitle">Προσθήκη Κάρτας</string>
|
||||
<string name="scanCardBarcode">Σαρώστε τον κωδικό της κάρτας</string>
|
||||
<string name="scanCardBarcode">Σαρώστε τον γραμμοκώδικα (bardcode)</string>
|
||||
<string name="cardShortcut">Συντόμευση Κάρτας</string>
|
||||
<string name="noCardsMessage">Δεν υπάρχουν κάρτες. προσθέστε μία πρώτα</string>
|
||||
<string name="noStoreError">Δεν δώσατε κατάστημα</string>
|
||||
<string name="noCardIdError">Δεν δώσατε κωδικό κάρτας</string>
|
||||
<string name="noCardExistsError">Δεν ήταν δυνατό να εντοπιστεί κάρτα</string>
|
||||
<string name="noCardsMessage">Προσθέστε μία κάρτα πρώτα</string>
|
||||
<string name="noStoreError">Δεν έχει εισαχθεί όνομα</string>
|
||||
<string name="noCardIdError">Δεν έχει εισαχθεί κωδικός</string>
|
||||
<string name="noCardExistsError">Δεν ήταν δυνατό να εντοπιστεί η κάρτα</string>
|
||||
<string name="importExport">Εισαγωγή/Εξαγωγή</string>
|
||||
<string name="exportName">Εξαγωγή</string>
|
||||
<string name="importExportHelp">Τα εφεδρικά δεδομένα σας δίνουν την δυνατότητα να μεταφέρετε τις κάρτες σας σε μία άλλη συσκευή.</string>
|
||||
<string name="importSuccessfulTitle">Εισαγωγή επιτυχής</string>
|
||||
<string name="importExportHelp">Τα αντίγραφα ασφαλείας, σας επιτρέπουν να τα εισάγετε σε άλλη συσκευή.</string>
|
||||
<string name="importSuccessfulTitle">Εισήχθησαν</string>
|
||||
<string name="importFailedTitle">Εισαγωγή ανεπιτυχής</string>
|
||||
<string name="importFailed">Δεν εισήχθει</string>
|
||||
<string name="importFailed">Δεν ήταν δυνατή η εισαγωγή</string>
|
||||
<string name="exportSuccessfulTitle">Εξαγωγή επιτυχής</string>
|
||||
<string name="exportFailedTitle">Εξαγωγή ανεπιτυχής</string>
|
||||
<string name="exportFailed">Δεν εξήχθη</string>
|
||||
<string name="exportFailed">Δεν ήταν δυνατή η εξαγωγή</string>
|
||||
<string name="importing">Γίνεται εισαγωγή του…</string>
|
||||
<string name="exporting">Γίνεται εξαγωγή του…</string>
|
||||
<string name="noExternalStoragePermissionError">Δεν είναι δυνατή η εισαγωγή ή εξαγωγή καρτών χωρίς την άδεια πρόσβασης στον εξωτερικό χώρο αποθήκευσης</string>
|
||||
<string name="noExternalStoragePermissionError">Εγκρίνετε την άδεια εξωτερικής αποθήκευσης για να εισάγετε ή εξάγετε δεδομένα</string>
|
||||
<string name="importOptionFilesystemTitle">Εισαγωγή από το σύστημα αρχείων</string>
|
||||
<string name="importOptionFilesystemExplanation">Επιλέξτε ένα συγκεκριμένο αρχείο από το σύστημα αρχείων.</string>
|
||||
<string name="importOptionFilesystemButton">Από το σύστημα αρχείων</string>
|
||||
<string name="importOptionApplicationTitle">Χρήση εξωτερικής εφαρμογής</string>
|
||||
<string name="importOptionApplicationExplanation">Κάντε χρήση μίας εξωτερικής εφαρμογής όπως είναι τα Dropbox, Google Drive ή ο αγαπημένος σας διαχειριστής αρχείων για να ανοίξετε ένα αρχείο.</string>
|
||||
<string name="importOptionApplicationButton">Χρήση εξωτερικής εφαρμογής</string>
|
||||
<string name="importOptionApplicationTitle">Χρήση άλλης εφαρμογής</string>
|
||||
<string name="importOptionApplicationExplanation">Χρησιμοποιήστε οποιαδήποτε εφαρμογή ή τον αγαπημένο περιηγητή αρχείων σας, για να ανοίξετε ένα αρχείο.</string>
|
||||
<string name="importOptionApplicationButton">Χρήσης άλλης εφαρμογής</string>
|
||||
<string name="about">Σχετικά</string>
|
||||
<string name="app_license">Άδεια χρήσης υπό το GPLv3.</string>
|
||||
<string name="app_license">Άδεια χρήσης υπό GPLv3+</string>
|
||||
<string name="about_title_fmt">Σχετικά με <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Έκδοση: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Πληροφορίες Αναθεώρησης: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="selectBarcodeTitle">Επιλέξτε Barcode</string>
|
||||
<string name="copy_to_clipboard_toast">Ο κωδικός της κάρτας αντιγράφτηκε στο πρόχειρο</string>
|
||||
<string name="thumbnailDescription">Μικρογραφία κάρτας</string>
|
||||
<string name="copy_to_clipboard_toast">Ο κωδικός αντιγράφτηκε στο πρόχειρο</string>
|
||||
<string name="thumbnailDescription">Μικρογραφία</string>
|
||||
<string name="settings">Ρυθμίσεις</string>
|
||||
<string name="settings_category_title_ui">Διεπαφή χρήστη</string>
|
||||
<string name="settings_dark_theme">Σκοτεινό</string>
|
||||
<string name="settings_light_theme">Φωτεινό</string>
|
||||
<string name="settings_system_theme">Σύστημα</string>
|
||||
<string name="barcode">Γραμμικός κώδικας</string>
|
||||
<string name="deleteTitle">Αφαίρεση Κάρτας</string>
|
||||
<string name="deleteConfirmation">Παρακαλώ επιβεβαιώστε ότι θέλετε να διαγράψετε αυτή την κάρτα.</string>
|
||||
<string name="deleteTitle">Διαγραφή Κάρτας</string>
|
||||
<string name="deleteConfirmation">Μόνιμη διαγραφή της κάρτας;</string>
|
||||
<string name="action_search">Αναζήτηση</string>
|
||||
<string name="noMatchingGiftCards">Κανένα αποτέλεσμα. Δοκίμασε με διαφορετικές λέξεις.</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> επιλέγχθηκε</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> επιλέγχθηκαν</item>
|
||||
</plurals>
|
||||
<string name="noGiftCardsGroup">Δημιούργησε κάρτες και βάλτες σε αυτή την ομάδα.</string>
|
||||
<string name="barcodeNoBarcode">Δεν υπάρχει barcode</string>
|
||||
<string name="addManually">Χειροκίνητη εισαγωγή κωδικού</string>
|
||||
<string name="never">Ποτέ</string>
|
||||
<string name="share">Κοινοποίηση</string>
|
||||
<plurals name="balancePoints">
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> πόντος</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> πόντοι</item>
|
||||
</plurals>
|
||||
<string name="exportOptionExplanation">Τα δεδομένα θα μεταφερθούν σε τοποθεσία της επιλογής σας.</string>
|
||||
<string name="settings_theme">Θέμα</string>
|
||||
<string name="groupsList">Ομάδες: <xliff:g>%s</xliff:g></string>
|
||||
<string name="barcodeId">Τιμή γραμμοκώδικα</string>
|
||||
<string name="sort">Ταξινόμηση</string>
|
||||
<string name="deleteConfirmationGroup">Διαγραφή ομάδας;</string>
|
||||
<string name="moveDown">Προχώρα κάτω</string>
|
||||
<string name="accept">Αποδοχή</string>
|
||||
<string name="yes">Ναι</string>
|
||||
<string name="no">Όχι</string>
|
||||
<string name="addFromImage">Επιλογή εικόνας από την συλλογή</string>
|
||||
<string name="expiryStateSentence">Λήγει: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryDate">Ημερομηνία λήξης</string>
|
||||
<string name="settings_keep_screen_on">Κράτα την οθόνη ανοιχτή</string>
|
||||
<string name="leaveWithoutSaveTitle">Έξοδος</string>
|
||||
<string name="swipeToSwitchImages">Σύρετε ή πατήστε παρατεταμένα για να αλλάξετε εικόνες</string>
|
||||
<string name="sort_by_balance">Υπόλοιπο</string>
|
||||
<string name="reverse">... σε αντίθετη σειρά</string>
|
||||
<string name="version_history">Ιστορικό έκδοσης</string>
|
||||
<string name="sort_by">Ταξινόμηση κατά</string>
|
||||
<string name="credits">Πιστώσεις</string>
|
||||
<string name="help_translate_this_app">Βοηθήστε να μεταφραστεί η εφαρμογή</string>
|
||||
<string name="source_repository">Αποθήκη κώδικα</string>
|
||||
<string name="on_github">στο GitHub</string>
|
||||
<string name="on_google_play">στο Google Play</string>
|
||||
<string name="report_error">Αναφορά Σφάλματος</string>
|
||||
<string name="starred">Αγαπημένα</string>
|
||||
<string name="translate_platform">στο Weblate</string>
|
||||
<string name="set_scale">Ορίστε κλίμακα</string>
|
||||
<string name="importLoyaltyCardKeychain">Εισαγωγή από Loyalty Card Keychain</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Επιλέξτε την <i>LoyaltyCardKeychain.csv</i> εξαγωγή από το Loyalty Card Keychain για εισαγωγή.
|
||||
\nΔημιουργήστε το από το μενού Εισαγωγής/Εξαγωγής στο Loyalty Card Keychain επιλέγοντας Εξαγωγή.</string>
|
||||
<string name="importFidme">Εισαγωγή από FidMe</string>
|
||||
<string name="importFidmeMessage">Επιλέξτε την <i>fidme-export-request-xxxxxx.zip</i> εξαγωγή από το FidMe για εισαγωγή και επιλέξτε χειροκίνητα τους τύπους γραμμοκώδικα μετέπειτα.
|
||||
\nΔημιουργήστε το από το FidMe προφίλ επιλέγοντας Προστασία Δεδομένων και διαλέγοντας εξαγωγή δεδομένων.</string>
|
||||
<string name="setBarcodeId">Επιλέξτε τιμή γραμμοκώδικα</string>
|
||||
<string name="wrongValueForBarcodeType">Η τιμή δεν είναι έγκυρη για αυτού του τύπου γραμμοκώδικα</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">Οι κωδικοί αντιγράφηκαν στο πρόχειρο</string>
|
||||
<string name="setBackImage">Επιλογή οπίσθιας εικόνας</string>
|
||||
<string name="removeImage">Αφαίρεση εικόνας</string>
|
||||
<string name="takePhoto">Τραβήξτε μια φωτογραφία</string>
|
||||
<string name="updateBarcodeQuestionText">Αλλάξατε τον κωδικό. Θέλετε να ενημερώσετε και τον γραμμοκώδικα στην ίδια τιμή;</string>
|
||||
<string name="action_show_details">Εμφάνιση λεπτομερειών</string>
|
||||
<string name="options">Επιλογές</string>
|
||||
<string name="hideMoreInfo">Απόκρυψη πληροφοριών</string>
|
||||
<string name="noGroupCards">Αυτή η ομάδα είναι άδεια</string>
|
||||
<string name="settings_display_barcode_max_brightness">Επιπλέον φωτισμός γραμμοκώδικα</string>
|
||||
<string name="group_name_is_empty">Το όνομα ομάδας δεν γίνεται να είναι κενό</string>
|
||||
<string name="group_edit">Επεξεργασία ομάδας</string>
|
||||
<string name="star">Προσθήκη στα αγαπημένα</string>
|
||||
<string name="unstar">Αφαίρεση από τα αγαπημένα</string>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="one">Διαγραφή <xliff:g>%d</xliff:g> κάρτας</item>
|
||||
<item quantity="other">Διαγραφή <xliff:g>%d</xliff:g> καρτών</item>
|
||||
</plurals>
|
||||
<string name="card_ids_copied">Αντιγραμμένη/ες ταυτότητα/ες</string>
|
||||
<string name="errorReadingImage">Δεν ήταν δυνατό να διαβαστεί η εικόνα</string>
|
||||
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> δεν φαίνεται να είναι έγκυρο το υπόλοιπο.</string>
|
||||
<string name="currency">Νόμισμα</string>
|
||||
<string name="privacy_policy">Πολιτική απορρήτου</string>
|
||||
<string name="chooseImportType">Εισαγωγή δεδομένων από</string>
|
||||
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
|
||||
<string name="privacy_policy_popup_text">Σημείωμα πολιτικής απορρήτου ( υποχρεωτικό σε κάποια \"μαγαζιά\" εφαρμογών)
|
||||
\n
|
||||
\nΜΗΔΕΝΙΚΆ ΔΕΔΟΜΈΝΑ ΣΥΛΛΈΓΟΝΤΑΙ, ο οποιοσδήποτε μπορεί να το επιβεβαιώσει μιας και η εφαρμογή είναι ελεύθερο λογισμικό.</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> κάρτα ( <xliff:g id="archivedCount">%2$d</xliff:g> αρχειοθετήθηκε)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> κάρτες ( <xliff:g id="archivedCount">%2$d</xliff:g> αρχειοθετήθηκαν)</item>
|
||||
</plurals>
|
||||
<string name="importCatimaMessage">Επιλέξτε την <i>catima.zip</i> εξαγωγή από το Catima για εισαγωγή
|
||||
\nΔημιουργήστε το από το μενού Εισαγωγής/Εξαγωγής μιας άλλης εφαρμογής Catima κάνοντας εξαγωγή εκεί πρώτα.</string>
|
||||
<string name="importStocardMessage">Επιλέξτε την <i>***-sync.zip</i> εξαγωγή από το Stocard για εισαγωγή.
|
||||
\nΠάρτε το στέλνοντας email στο: support@stocardapp.com ζητώντας μια εξαγωγή αρχείων των δεδομένων σας.</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Θέλω να μοιραστώ μερικές κάρτες μαζί σου</string>
|
||||
<string name="editGroup">Επεξεργασία Ομάδας: <xliff:g>%s</xliff:g></string>
|
||||
<string name="setFrontImage">Επιλογή μπροστινής εικόνας</string>
|
||||
<string name="importVoucherVaultMessage">Επιλέξτε την <i>vouchervault.json</i> εξαγωγή από το Voucher Vault για εισαγωγή.
|
||||
\nΔημιουργήστε το επιλέγοντας Εξαγωγή στο Voucher Vault.</string>
|
||||
<string name="unsupportedBarcodeType">Ο τύπος γραμμοκώδικα δεν γίνεται να εμφανιστεί ακόμα. Μπορεί να υποστηρίζεται σε μια μελλοντική έκδοση της εφαρμογής.</string>
|
||||
<string name="frontImageDescription">Μπροστινή εικόνα</string>
|
||||
<string name="photos">Φωτογραφίες</string>
|
||||
<string name="backImageDescription">Οπίσθια εικόνα</string>
|
||||
<string name="updateBarcodeQuestionTitle">Ενημέρωση τιμής γραμμοκώδικα;</string>
|
||||
<string name="passwordRequired">Παρακαλώ εισάγετε τον κωδικό</string>
|
||||
<string name="sort_by_most_recently_used">Χρησιμοποιήθηκαν πρόσφατα</string>
|
||||
<string name="shortcutSelectCard">Επιλέξτε μία κάρτα</string>
|
||||
<string name="barcodeImageDescriptionWithType">Εικόνα <xliff:g>%s</xliff:g> γραμμοκώδικα</string>
|
||||
<string name="app_libraries">Ελεύθερες βιβλιοθήκες τρίτων: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="license">Άδεια</string>
|
||||
<string name="include_if_asking_support">Αν θέλετε να ζητήσετε υποστήριξη, συμπεριλάβετε τις ακόλουθες πληροφορίες:</string>
|
||||
<string name="action_hide_details">Απόκρυψη λεπτομερειών</string>
|
||||
<string name="importSuccessful">Δεδομένα εισήχθησαν</string>
|
||||
<string name="moveUp">Προχώρα πάνω</string>
|
||||
<string name="barcodeType">Τύπος γραμμοκώδικα</string>
|
||||
<string name="app_resources">Ελεύθερες πηγές τρίτων: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="selectColor">Επιλογή χρώματος</string>
|
||||
<string name="setIcon">Ορισμός εικονιδίου</string>
|
||||
<string name="settings_sky_blue_theme">Γαλάζιο</string>
|
||||
<string name="settings_green_theme">Πράσινο</string>
|
||||
<string name="settings_grey_theme">Γκρι</string>
|
||||
<string name="settings_brown_theme">Καφέ</string>
|
||||
<string name="sort_by_expiry">Λήξη</string>
|
||||
<plurals name="groupCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> κάρτα</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> κάρτες</item>
|
||||
</plurals>
|
||||
<string name="points">Πόντοι</string>
|
||||
<string name="exportSuccessful">Δεδομένα εξήχθησαν</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Αποτροπή κλειδώματος οθόνης</string>
|
||||
<string name="failedLaunchingPhotoPicker">Δεν βρέθηκε υποστηριζόμενη εφαρμογή συλλογής</string>
|
||||
<string name="noBarcode">Χωρίς barcode</string>
|
||||
<string name="starImage">Αγαπημένο αστέρι</string>
|
||||
<string name="balanceSentence">Υπόλοιπο: <xliff:g>%s</xliff:g></string>
|
||||
<string name="failedParsingImportUriError">Δεν ήταν δυνατή η ανάλυση του εισαγόμενου URL</string>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="one">Διαγραφή της κάρτας <xliff:g>%d</xliff:g> μόνιμα;</item>
|
||||
<item quantity="other">Διαγραφή των καρτρών <xliff:g>%d</xliff:g> μόνιμα;</item>
|
||||
</plurals>
|
||||
<string name="app_copyright_old">Βασισμένο στο Loyalty Card Keychain
|
||||
\nπνευματικά δικαιώματα © 2016-2020 Branden Archer</string>
|
||||
<string name="enterBarcodeInstructions">Εισάγετε τον κωδικό και διαλέξτε έναν είδος γραμμοκώδικα από κάτω ή \"Δεν υπάρχει γραμμοκώδικας\".</string>
|
||||
<string name="settings_follow_system_orientation">Ακολούθηση συστήματος</string>
|
||||
<string name="settings_card_orientation">Προσανατολισμός γραμμοκώδικα</string>
|
||||
<string name="settings_portrait_orientation">Πορτραίτο</string>
|
||||
<string name="settings_landscape_orientation">Οριζόντια</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Πνευματικά δικαιώματα © 2019-<xliff:g>%d</xliff:g> Sylvia van Os</string>
|
||||
<string name="settings_lock_on_opening_orientation">Κλείδωμα τωρινού προσανατολισμού όταν ανοίγει μία κάρτα</string>
|
||||
<string name="settings_max_font_size_scale">Μέγιστο μέγεθος γραμματοσειράς</string>
|
||||
<string name="intent_import_card_from_url_share_text">Θέλω να μοιραστώ μία κάρτα μαζί σου</string>
|
||||
<string name="enter_group_name">Εισάγετε όνομα ομάδας</string>
|
||||
<string name="groups">Ομάδες</string>
|
||||
<string name="noGroups">Κάντε κλικ στο + κουμπί ώστε να προσθέσετε ομάδες για κατηγοριοποίηση.</string>
|
||||
<string name="group_name_already_in_use">Αυτό το όνομα υπάρχει ήδη</string>
|
||||
<string name="group_updated">Η ομάδα ενημερώθηκε</string>
|
||||
<string name="all">Όλες</string>
|
||||
<string name="failedOpeningFileManager">Εγκαταστήστε έναν διαχειριστή αρχείων πρώτα.</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Έξοδος χωρίς αποθήκευση;</string>
|
||||
<string name="expiryStateSentenceExpired">Έληξε: <xliff:g>%s</xliff:g></string>
|
||||
<string name="card">Κάρτα</string>
|
||||
<string name="editBarcode">Επεξεργασία γραμμοκώδικα</string>
|
||||
<string name="chooseExpiryDate">Επιλέξτε ημερομηνία λήξης</string>
|
||||
<string name="moveBarcodeToTopOfScreen">Μετακίνηση του γραμμοκώδικα στο πάνω μέρος της οθόνης</string>
|
||||
<string name="moveBarcodeToCenterOfScreen">Κεντράρισμα του γραμμοκώδικα στην οθόνη</string>
|
||||
<string name="noBarcodeFound">Δεν βρέθηκε γραμμοκώδικας</string>
|
||||
<string name="balance">Υπόλοιπο</string>
|
||||
<string name="importCatima">Εισαγωγή από Catima</string>
|
||||
<string name="importStocard">Εισαγωγή από Stocard</string>
|
||||
<string name="importVoucherVault">Εισαγωγή από Voucher Vault</string>
|
||||
<string name="sameAsCardId">Ίδιος κωδικός</string>
|
||||
<string name="exportPassword">Προσθέστε έναν κωδικό για προστασία της εξαγωγής (προαιρετικά)</string>
|
||||
<string name="exportPasswordHint">Εισαγωγή κωδικού</string>
|
||||
<string name="failedGeneratingShareURL">Δεν ήταν δυνατή η δημιουργία κοινοποιούμενου URL. Παρακαλώ αναφέρετε το.</string>
|
||||
<string name="turn_flashlight_on">Ενεργοποίηση φακού</string>
|
||||
<string name="turn_flashlight_off">Απενεργοποίηση φακού</string>
|
||||
<string name="settings_locale">Γλώσσα</string>
|
||||
<string name="settings_oled_dark">Απόλυτο μαύρο φόντο για το μαύρο θέμα</string>
|
||||
<string name="settings_system_locale">Σύστημα</string>
|
||||
<string name="settings_theme_color">Χρώμα θέματος</string>
|
||||
<string name="settings_catima_theme">Catima</string>
|
||||
<string name="settings_pink_theme">Ροζ</string>
|
||||
<string name="settings_magenta_theme">Φούξια</string>
|
||||
<string name="settings_violet_theme">Βιολετί</string>
|
||||
<string name="settings_blue_theme">Μπλε</string>
|
||||
<string name="app_contributors">Δημιουργήθηκε από: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="showMoreInfo">Εμφάνιση πληροφοριών</string>
|
||||
<string name="sort_by_name">Όνομα</string>
|
||||
<string name="and_data_usage">και δεδομένα χρήσης</string>
|
||||
<string name="rate_this_app">Βαθμολογήστε την εφαρμογή</string>
|
||||
<string name="duplicateCard">Αντίγραφο</string>
|
||||
<string name="archive">Αρχειοθετήστε</string>
|
||||
<string name="archived">Η κάρτα αρχειοθετήθηκε</string>
|
||||
<string name="unarchived">Η κάρτα αφαιρέθηκε από το αρχείο</string>
|
||||
<string name="unarchive">Αφαίρεση από το αρχείο</string>
|
||||
<string name="archiveList">Αρχείο</string>
|
||||
<string name="noUnarchivedCardsMessage">Δεν υπάρχουν αρχειοθετημένες κάρτες</string>
|
||||
</resources>
|
||||
@@ -52,7 +52,6 @@
|
||||
<string name="action_search">Serĉi</string>
|
||||
<string name="deleteConfirmation">Ĉu forigi ĉi tiun karton\?</string>
|
||||
<string name="deleteTitle">Forigi karton</string>
|
||||
<string name="settings_lock_barcode_orientation">Seruro barcode orientiĝo</string>
|
||||
<string name="settings_display_barcode_max_brightness">Heligi barcode vido</string>
|
||||
<string name="settings_max_font_size_scale">Max. tiparo grandeco</string>
|
||||
<string name="starImage">Preferata stelo</string>
|
||||
@@ -76,8 +75,6 @@
|
||||
<string name="cardShortcut">Karto Mallongirejo</string>
|
||||
<string name="scanCardBarcode">Scintigrafio Barcode Card</string>
|
||||
<string name="share">Interŝanĝado</string>
|
||||
<string name="unlockScreen">Malbloki Rotacio</string>
|
||||
<string name="lockScreen">Bloko Rotacio</string>
|
||||
<string name="star">Aldoni al miaj plej ŝatataj</string>
|
||||
<string name="copy_to_clipboard_toast">Card ID kopiita al la tondujo</string>
|
||||
<string name="settings_keep_screen_on">Teni sur ekrano</string>
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
<string name="edit">Editar</string>
|
||||
<string name="delete">Eliminar</string>
|
||||
<string name="confirm">Confirmar</string>
|
||||
<string name="lockScreen">Bloquear giro</string>
|
||||
<string name="unlockScreen">Desbloquear giro</string>
|
||||
<string name="ok">Aceptar</string>
|
||||
<string name="copy_to_clipboard">Copiar id. en portapapeles</string>
|
||||
<string name="sendLabel">Enviar…</string>
|
||||
@@ -51,7 +49,6 @@
|
||||
<string name="exportSuccessful">Datos de las tarjetas exportados</string>
|
||||
<string name="importSuccessful">Datos de las tarjetas importados</string>
|
||||
<string name="intent_import_card_from_url_share_text">Quiero compartirte una tarjeta</string>
|
||||
<string name="settings_lock_barcode_orientation">Bloquear giro en el código de barras</string>
|
||||
<string name="settings_dark_theme">Oscuro</string>
|
||||
<string name="settings_light_theme">Claro</string>
|
||||
<string name="settings_system_theme">Sistema</string>
|
||||
@@ -64,7 +61,7 @@
|
||||
<string name="share">Compartir</string>
|
||||
<string name="barcodeNoBarcode">Esta tarjeta no tiene código de barras</string>
|
||||
<string name="barcodeType">Tipo de código de barras</string>
|
||||
<string name="noMatchingGiftCards">No se ha encontrado nada. Pruebe a modificar su búsqueda.</string>
|
||||
<string name="noMatchingGiftCards">Sin resultados. Pruebe modificando su búsqueda.</string>
|
||||
<string name="action_search">Buscar</string>
|
||||
<string name="app_revision_fmt">Información de la revisión: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="noGroups">Primero pulse en el botón «+» para añadir grupos de categorización.</string>
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="noExternalStoragePermissionError">Salli käyttöoikeus ulkoisen tallennustilan käyttöön voidaksesi tuoda tai viedä kortteja</string>
|
||||
<string name="noExternalStoragePermissionError">Salli käyttöoikeus ulkoisen tallennustilan käyttöön voidaksesi tuoda tai viedä tietoja</string>
|
||||
<string name="no">Ei</string>
|
||||
<string name="yes">Kyllä</string>
|
||||
<string name="updateBarcodeQuestionText">Vaihdoit kortin ID-tunnuksen. Haluatko päivittää myös viivakoodin käyttämään samaa arvoa\?</string>
|
||||
<string name="updateBarcodeQuestionText">Vaihdoit ID-tunnuksen. Haluatko päivittää myös viivakoodin käyttämään samaa arvoa\?</string>
|
||||
<string name="updateBarcodeQuestionTitle">Päivitä viivakoodin arvo\?</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Haluan jakaa joitain kortteja kanssasi</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">Kortin tunnukset kopioidaan leikepöydälle</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">ID-tunnukset kopioitu leikepöydälle</string>
|
||||
<string name="wrongValueForBarcodeType">Arvo ei ole kelvollinen valitulle viivakoodityypille</string>
|
||||
<string name="unsupportedBarcodeType">Tätä viivakoodityyppiä ei voi vielä näyttää. Sitä saatetaan tukea sovelluksen myöhemmässä versiossa.</string>
|
||||
<string name="setBarcodeId">Aseta viivakoodin arvo</string>
|
||||
<string name="sameAsCardId">Sama kuin kortin ID-tunnus</string>
|
||||
<string name="sameAsCardId">Sama kuin ID-tunnus</string>
|
||||
<string name="barcodeId">Viivakoodin arvo</string>
|
||||
<string name="importVoucherVaultMessage">Valitse tuotava <i>vouchervault.json</i>-vienti Voucher Vaultista.
|
||||
\nTai luo se painamalla ensin Vie Voucher Vaultissa.</string>
|
||||
\nLuo se painamalla ensin Vie Voucher Vaultissa.</string>
|
||||
<string name="importVoucherVault">Tuo Voucher Vault varmuuskopiotiedostosta</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Valitse <i>LoyaltyCardKeychain.csv</i>-vientitietosi Loyalty Card Keychainista tuotavaksi.
|
||||
<string name="importLoyaltyCardKeychainMessage">Valitse tuotava <i>LoyaltyCardKeychain.csv</i>-vientitiedostosi Loyalty Card Keychainista.
|
||||
\nTai luo se Loyalty Card Keychainin Import/Export-valikosta painamalla ensin Export (Vie).</string>
|
||||
<string name="importLoyaltyCardKeychain">Tuo Loyalty Card Keychain varmuuskopiotiedostosta</string>
|
||||
<string name="importFidmeMessage">Valitse <i>fidme-export-request-xxxxxxxx.zip</i>-vienti FidMe:stä tuotavaksi ja valitse viivakoodityypit manuaalisesti sen jälkeen.
|
||||
\nTai luo se FidMe-profiilistasi valitsemalla Tietosuoja ja painamalla ensin Extract my data.</string>
|
||||
<string name="importFidmeMessage">Valitse tuotava <i>fidme-export-request-xxxxxxxx.zip</i>-vientitiedostosi FidMe:stä ja valitse viivakoodityypit manuaalisesti sen jälkeen.
|
||||
\nLuo se FidMe-profiilistasi valitsemalla Tietosuoja ja painamalla ensin Extract my data.</string>
|
||||
<string name="importFidme">Tuo FidMe varmuuskopiotiedostosta</string>
|
||||
<string name="importCatimaMessage">Valitse tuotava <i>catima.zip</i>-vienti Catimasta.
|
||||
\nTai luo se jonkin toisen Catima-sovelluksen Tuo/Vie-valikosta painamalla siellä ensin Vie.</string>
|
||||
<string name="importCatimaMessage">Valitse tuotava <i>catima.zip</i>-vientitiedostosi Catimasta.
|
||||
\nLuo se Catima-sovelluksen Tuo/Vie-valikosta painamalla siellä ensin Vie.</string>
|
||||
<string name="importCatima">Tuo Catima varmuuskopiotiedostosta</string>
|
||||
<string name="accept">Hyväksy</string>
|
||||
<string name="privacy_policy_popup_text">Tietosuojaseloste (joidenkin sovelluskauppojen vaatimus):
|
||||
@@ -30,7 +30,7 @@
|
||||
\nMITÄÄN TIETOJA EI KERÄTÄ LAINKAAN, minkä kuka tahansa voi vahvistaa, koska sovelluksemma on vapaa ohjelmisto.</string>
|
||||
<string name="privacy_policy">Tietosuojakäytäntö</string>
|
||||
<string name="app_loyalty_card_keychain">Kanta-asiakaskortin avainnippu</string>
|
||||
<string name="chooseImportType">Tuo tietoja kohteesta\?</string>
|
||||
<string name="chooseImportType">Tuo tietoja kohteesta</string>
|
||||
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> ei vaikuta olevan kelvollinen saldo.</string>
|
||||
<string name="points">Pisteet</string>
|
||||
<string name="currency">Valuutta</string>
|
||||
@@ -50,7 +50,7 @@
|
||||
<string name="expiryStateSentence">Vanhenee: <xliff:g>%s</xliff:g></string>
|
||||
<string name="groupsList">Ryhmät: <xliff:g>%s</xliff:g></string>
|
||||
<string name="addFromImage">Valitse kuva galleriasta</string>
|
||||
<string name="addManually">Anna kortin ID-tunnus manuaalisesti</string>
|
||||
<string name="addManually">Anna ID-tunnus manuaalisesti</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Poistu tallentamatta\?</string>
|
||||
<string name="leaveWithoutSaveTitle">Poistu</string>
|
||||
<string name="moveDown">Siirrä alaspäin</string>
|
||||
@@ -62,15 +62,14 @@
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> kortti</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> kortit</item>
|
||||
</plurals>
|
||||
<string name="noGroups">Napsauta + plus-painiketta lisätäksesi ensin ryhmät luokittelua varten.</string>
|
||||
<string name="noGroups">Napsauta + plus-painiketta lisätäksesi ryhmät luokittelua varten.</string>
|
||||
<string name="groups">Ryhmät</string>
|
||||
<string name="enter_group_name">Anna ryhmän nimi</string>
|
||||
<string name="exportSuccessful">Korttitietojen vienti valmis</string>
|
||||
<string name="importSuccessful">Korttitietojen tuonti valmis</string>
|
||||
<string name="exportSuccessful">Tiedot viety</string>
|
||||
<string name="importSuccessful">Tiedot tuotu</string>
|
||||
<string name="intent_import_card_from_url_share_text">Haluan jakaa kortin kanssasi</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Estä lukitusnäyttö</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Estä näytön lukitus</string>
|
||||
<string name="settings_keep_screen_on">Pidä näyttö päällä</string>
|
||||
<string name="settings_lock_barcode_orientation">Lukitse viivakoodin suunta</string>
|
||||
<string name="settings_display_barcode_max_brightness">Kirkasta viivakoodinäkymää</string>
|
||||
<string name="settings_max_font_size_scale">Fontin enimmäiskoko</string>
|
||||
<string name="settings_dark_theme">Tumma</string>
|
||||
@@ -80,19 +79,19 @@
|
||||
<string name="settings_category_title_ui">Käyttöliittymä</string>
|
||||
<string name="settings">Asetukset</string>
|
||||
<string name="starImage">Suosikki tähti</string>
|
||||
<string name="thumbnailDescription">Kortin pikkukuva</string>
|
||||
<string name="copy_to_clipboard_toast">Kortin ID-tunnus kopioitu leikepöydälle</string>
|
||||
<string name="enterBarcodeInstructions">Syötä kortin ID-tunnus ja valitse sen viivakoodityyppi, tai valitse \"Tällä kortilla ei ole viivakoodia\".</string>
|
||||
<string name="thumbnailDescription">Pienoiskuva</string>
|
||||
<string name="copy_to_clipboard_toast">ID-tunnus kopioitu leikepöydälle</string>
|
||||
<string name="enterBarcodeInstructions">Syötä ID-tunnus ja valitse sen viivakoodityyppi, tai valitse \"Ei viivakoodia\".</string>
|
||||
<string name="selectBarcodeTitle">Valitse viivakoodi</string>
|
||||
<string name="app_resources">Vapaat kolmannen osapuolen resurssit: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="app_libraries">Kolmannen osapuolen Libre-kirjastot: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Muutostiedot: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Versio: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="about_title_fmt">Tietoja <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="app_license">Copyleft (käyttäjänoikeus) - vapaa ohjelmisto, lisenssi GPLv3+.</string>
|
||||
<string name="app_license">Copyleft (käyttäjänoikeus) - vapaa ohjelmisto, lisenssi GPLv3+</string>
|
||||
<string name="app_copyright_old">Perustuu Loyalty Card Keychain sovellukseen
|
||||
\ntekijänoikeus © 2016–2020 Branden Archer.</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Tekijänoikeus © 2019–<xliff:g>%d</xliff:g> Sylvia van Os.</string>
|
||||
\ntekijänoikeus © 2016–2020 Branden Archer</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Tekijänoikeus © 2019–<xliff:g>%d</xliff:g> Sylvia van Os</string>
|
||||
<string name="about">Tietoja</string>
|
||||
<string name="importOptionApplicationButton">Käytä toista sovellusta</string>
|
||||
<string name="importOptionApplicationExplanation">Käytä mitä tahansa sovellusta tai suosikkitiedostonhallintaasi tiedoston avaamiseen.</string>
|
||||
@@ -103,31 +102,29 @@
|
||||
<string name="exportOptionExplanation">Tiedot kirjoitetaan valitsemaasi sijaintiin.</string>
|
||||
<string name="exporting">Viedään…</string>
|
||||
<string name="importing">Tuodaan…</string>
|
||||
<string name="exportFailed">Kortteja ei voitu viedä</string>
|
||||
<string name="exportFailed">Vienti epäonnistui</string>
|
||||
<string name="exportFailedTitle">Vienti epäonnistui</string>
|
||||
<string name="exportSuccessfulTitle">Vienti valmis</string>
|
||||
<string name="importFailed">Kortteja ei voitu tuoda</string>
|
||||
<string name="importFailed">Tuonti epäonnistui</string>
|
||||
<string name="importFailedTitle">Tuonti epäonnistui</string>
|
||||
<string name="importSuccessfulTitle">Tuonti valmis</string>
|
||||
<string name="importExportHelp">Varmuuskopioimalla korttisi, voit siirtää ne toiseen laitteeseen.</string>
|
||||
<string name="importExportHelp">Tietojesi varmuuskopiointi mahdollistaa niiden siirtämisen toiseen laitteeseen.</string>
|
||||
<string name="exportName">Vie</string>
|
||||
<string name="importExport">Tuo/Vie</string>
|
||||
<string name="failedParsingImportUriError">Tuonnin URI: n jäsentäminen epäonnistui</string>
|
||||
<string name="noCardExistsError">Korttia ei löytynyt</string>
|
||||
<string name="noCardIdError">Kortin ID-tunnusta ei annettu</string>
|
||||
<string name="noCardExistsError">Tätä korttia ei löytynyt</string>
|
||||
<string name="noCardIdError">ID-tunnusta ei annettu</string>
|
||||
<string name="noStoreError">Nimeä ei annettu</string>
|
||||
<string name="card_ids_copied">Kopioidut korttitunnukset</string>
|
||||
<string name="card_ids_copied">Kopioidut tunnukset</string>
|
||||
<string name="noCardsMessage">Lisää ensin kortti</string>
|
||||
<string name="cardShortcut">Kortin pikakuvake</string>
|
||||
<string name="scanCardBarcode">Skannaa kortin viivakoodi</string>
|
||||
<string name="scanCardBarcode">Skannaa viivakoodi</string>
|
||||
<string name="addCardTitle">Lisää kortti</string>
|
||||
<string name="editCardTitle">Muokkaa korttia</string>
|
||||
<string name="sendLabel">Lähetä…</string>
|
||||
<string name="share">Jaa</string>
|
||||
<string name="copy_to_clipboard">Kopioi ID-tunnus leikepöydälle</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="unlockScreen">Poista kierron esto</string>
|
||||
<string name="lockScreen">Estä kierto</string>
|
||||
<string name="confirm">Vahvista</string>
|
||||
<string name="delete">Poista</string>
|
||||
<string name="edit">Muokkaa</string>
|
||||
@@ -136,7 +133,7 @@
|
||||
<string name="unstar">Poista suosikeista</string>
|
||||
<string name="star">Lisää suosikkeihin</string>
|
||||
<string name="noBarcode">Ei viivakoodia</string>
|
||||
<string name="barcodeNoBarcode">Tällä kortilla ei ole viivakoodia</string>
|
||||
<string name="barcodeNoBarcode">Viivakoodia ei ole</string>
|
||||
<string name="barcodeType">Viivakoodin tyyppi</string>
|
||||
<string name="cardId">Kortin ID-tunnus</string>
|
||||
<string name="note">Lisätieto</string>
|
||||
@@ -150,8 +147,8 @@
|
||||
<string name="setBackImage">Aseta takakuva</string>
|
||||
<string name="setFrontImage">Aseta etukuva</string>
|
||||
<string name="photos">Valokuvat</string>
|
||||
<string name="backImageDescription">Kortin takakuva</string>
|
||||
<string name="frontImageDescription">Kortin etukuva</string>
|
||||
<string name="backImageDescription">Takakuva</string>
|
||||
<string name="frontImageDescription">Etukuva</string>
|
||||
<string name="deleteConfirmation">Poista tämä kortti\?</string>
|
||||
<string name="deleteTitle">Poista kortti</string>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
@@ -168,7 +165,7 @@
|
||||
</plurals>
|
||||
<string name="importStocard">Tuo Stocardista</string>
|
||||
<string name="importStocardMessage">Valitse tuotava <i>***-sync.zip</i>-vienti Stocardista.
|
||||
\nTai hanki se lähettämällä sähköpostia osoitteeseen support@stocardapp.com ja pyytämällä tietojesi vientiä.</string>
|
||||
\nHanki se lähettämällä sähköpostia osoitteeseen support@stocardapp.com ja pyytämällä tietojesi vientiä.</string>
|
||||
<string name="passwordRequired">Ole hyvä ja syötä salasana</string>
|
||||
<string name="failedGeneratingShareURL">Ei pystynyt luomaan jaettavaa URL-osoitetta. Ilmoita tästä.</string>
|
||||
<string name="turn_flashlight_on">Sytytä taskulamppu</string>
|
||||
@@ -186,5 +183,64 @@
|
||||
<string name="settings_catima_theme">Catima</string>
|
||||
<string name="settings_system_locale">Järjestelmä</string>
|
||||
<string name="settings_locale">Kieli</string>
|
||||
<string name="noGroupCards">Tämä ryhmä ei sisällä kortteja</string>
|
||||
<string name="noGroupCards">Tämä ryhmä on tyhjä</string>
|
||||
<string name="group_edit">Muokkaa ryhmää</string>
|
||||
<string name="group_name_already_in_use">Ryhmän nimi on jo käytössä</string>
|
||||
<string name="group_name_is_empty">Ryhmän nimi ei voi olla tyhjä</string>
|
||||
<string name="group_updated">Ryhmä päivitetty</string>
|
||||
<string name="editGroup">Muokataan ryhmää: <xliff:g>%s</xliff:g></string>
|
||||
<plurals name="balancePoints">
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> piste</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> pistettä</item>
|
||||
</plurals>
|
||||
<string name="settings_oled_dark">Musta tausta tummalle teemalle</string>
|
||||
<string name="setIcon">Aseta kuvake</string>
|
||||
<string name="swipeToSwitchImages">Vaihda kuvia pyyhkäisemällä tai painamalla pitkään</string>
|
||||
<string name="sort_by_name">Nimi</string>
|
||||
<string name="sort_by_most_recently_used">Viimeksi käytetyt</string>
|
||||
<string name="sort_by_expiry">Viimeinen voimassaoloaika</string>
|
||||
<string name="sort_by_balance">Saldo</string>
|
||||
<string name="reverse">...käänteisessä järjestyksessä</string>
|
||||
<string name="sort_by">Lajitteluperuste</string>
|
||||
<string name="credits">Krediitit</string>
|
||||
<string name="help_translate_this_app">Auta kääntämään tämä sovellus</string>
|
||||
<string name="license">Lisenssi</string>
|
||||
<string name="source_repository">Lähdekoodivarasto</string>
|
||||
<string name="on_github">GitHubissa</string>
|
||||
<string name="and_data_usage">ja datan käyttö</string>
|
||||
<string name="on_google_play">Google Playssa</string>
|
||||
<string name="report_error">Ilmoita virheestä</string>
|
||||
<string name="action_show_details">Näytä tiedot</string>
|
||||
<string name="action_hide_details">Piilota tiedot</string>
|
||||
<string name="shortcutSelectCard">Valitse kortti</string>
|
||||
<string name="starred">Tähdellä merkityt</string>
|
||||
<string name="options">Vaihtoehdot</string>
|
||||
<string name="set_scale">Säädä kokoa</string>
|
||||
<string name="include_if_asking_support">Jos haluat pyytää tukea, ilmoita seuraavat tiedot:</string>
|
||||
<string name="hideMoreInfo">Piilota tiedot</string>
|
||||
<string name="exportPassword">Aseta salasana suojataksesi vientitiedostosi (valinnainen)</string>
|
||||
<string name="exportPasswordHint">Syötä salasana</string>
|
||||
<string name="showMoreInfo">Näytä tiedot</string>
|
||||
<string name="version_history">Versiohistoria</string>
|
||||
<string name="sort">Lajittele</string>
|
||||
<string name="translate_platform">Weblatessa</string>
|
||||
<string name="selectColor">Valitse väri</string>
|
||||
<string name="rate_this_app">Arvostele tämä sovellus</string>
|
||||
<string name="noGiftCardsGroup">Lisää kortteja ja lisää ne ryhmään täällä.</string>
|
||||
<string name="barcodeImageDescriptionWithType">Image <xliff:g>%s</xliff:g> viivakoodi</string>
|
||||
<string name="settings_follow_system_orientation">Seuraa järjestelmää</string>
|
||||
<string name="settings_portrait_orientation">Muotokuva</string>
|
||||
<string name="settings_landscape_orientation">Maisema</string>
|
||||
<string name="unarchived">Kortti on poistettu arkistosta</string>
|
||||
<string name="noUnarchivedCardsMessage">Arkistoimattomia kortteja ei ole olemassa</string>
|
||||
<string name="unarchive">Poista arkistosta</string>
|
||||
<string name="archived">Kortti arkistoitu</string>
|
||||
<string name="failedLaunchingPhotoPicker">Tuettua galleriasovellusta ei löytynyt</string>
|
||||
<string name="settings_card_orientation">Viivakoodin suuntaus</string>
|
||||
<string name="archiveList">Arkisto</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> kortti (<xliff:g id="archivedCount">%2$d</xliff:g> arkistoitu)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> korttia (<xliff:g id="archivedCount">%2$d</xliff:g> arkistoitu)</item>
|
||||
</plurals>
|
||||
<string name="duplicateCard">Duplikaatti</string>
|
||||
</resources>
|
||||
@@ -10,8 +10,6 @@
|
||||
<string name="edit">Modifier</string>
|
||||
<string name="delete">Supprimer</string>
|
||||
<string name="confirm">Confirmer</string>
|
||||
<string name="lockScreen">Désactiver la rotation</string>
|
||||
<string name="unlockScreen">Activer la rotation</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="copy_to_clipboard">Copier le numéro dans le presse-papier</string>
|
||||
<string name="sendLabel">Envoyer…</string>
|
||||
@@ -52,7 +50,6 @@
|
||||
<string name="settings">Paramètres</string>
|
||||
<string name="settings_category_title_ui">Interface utilisateur</string>
|
||||
<string name="settings_display_barcode_max_brightness">Augmenter la luminosité du code-barres</string>
|
||||
<string name="settings_lock_barcode_orientation">Verrouiller l’orientation du code-barres</string>
|
||||
<string name="exportSuccessful">Données exportées</string>
|
||||
<string name="importSuccessful">Données importées</string>
|
||||
<string name="intent_import_card_from_url_share_text">Je veux partager une carte avec toi</string>
|
||||
@@ -229,6 +226,23 @@
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> point</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> points</item>
|
||||
</plurals>
|
||||
<string name="settings_oled_dark">Fond noir pur pour le thème sombre</string>
|
||||
<string name="settings_oled_dark">Fond noir pour le thème sombre</string>
|
||||
<string name="include_if_asking_support">Si vous voulez demander de l\'aide, incluez les informations suivantes :</string>
|
||||
<string name="settings_card_orientation">Orientation du code-barres</string>
|
||||
<string name="settings_follow_system_orientation">Suivre le système</string>
|
||||
<string name="settings_portrait_orientation">Portrait</string>
|
||||
<string name="settings_landscape_orientation">Paysage</string>
|
||||
<string name="settings_lock_on_opening_orientation">Garder l\'orientation utilisée pour ouvrir la carte</string>
|
||||
<string name="duplicateCard">Dupliquer</string>
|
||||
<string name="archive">Archiver</string>
|
||||
<string name="unarchive">Désarchiver</string>
|
||||
<string name="archived">Carte archivée</string>
|
||||
<string name="unarchived">Carte désarchivée</string>
|
||||
<string name="archiveList">Archives</string>
|
||||
<string name="noUnarchivedCardsMessage">Il n\'existe aucune carte non archivée</string>
|
||||
<string name="failedLaunchingPhotoPicker">Impossible de trouver une application de galerie prise en charge</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> carte (<xliff:g id="archivedCount">%2$d</xliff:g> archivée)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> cartes (<xliff:g id="archivedCount">%2$d</xliff:g> archivées)</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -7,7 +7,6 @@
|
||||
<string name="ok">אישור</string>
|
||||
<string name="action_search">חיפוש</string>
|
||||
<string name="noGiftCards">לחץ על לחצן ה + להוספת כרטיס, או ייבא מספר כרטיסים באמצעות התפריט ⋮.</string>
|
||||
<string name="lockScreen">סיבוב</string>
|
||||
<string name="share">שיתוף</string>
|
||||
<string name="copy_to_clipboard">העתקת מזהה ללוח</string>
|
||||
<string name="addCardTitle">הוספת כרטיס</string>
|
||||
|
||||
@@ -6,8 +6,6 @@
|
||||
<string name="edit">Uredi</string>
|
||||
<string name="delete">Ukloni</string>
|
||||
<string name="confirm">Potvrdi</string>
|
||||
<string name="lockScreen">Rotacija bloka</string>
|
||||
<string name="unlockScreen">Otključaj Rotaciju</string>
|
||||
<string name="deleteTitle">Ukloni kartu</string>
|
||||
<string name="deleteConfirmation">Izbrisati ovu karticu zauvijek\?</string>
|
||||
<string name="copy_to_clipboard">Kopiraj ID u međuspremnik</string>
|
||||
@@ -66,7 +64,6 @@
|
||||
<string name="thumbnailDescription">Sličica za karticu</string>
|
||||
<string name="starImage">Omiljena zvijezda</string>
|
||||
<string name="settings_category_title_ui">Korisničko sučelje</string>
|
||||
<string name="settings_lock_barcode_orientation">Zaključavanje orijentacije crtičnog koda</string>
|
||||
<string name="exportSuccessful">Izvezeni podaci o karti</string>
|
||||
<string name="settings_keep_screen_on">Držite zaslon uključen</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Spriječiti zaključavanje zaslona</string>
|
||||
|
||||
@@ -23,8 +23,6 @@
|
||||
<string name="edit">Szerkesztés</string>
|
||||
<string name="delete">Törlés</string>
|
||||
<string name="confirm">Alkalmaz</string>
|
||||
<string name="lockScreen">Forgatás blokkolása</string>
|
||||
<string name="unlockScreen">Blokkolás engedélyezése</string>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> törlése</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> törlése</item>
|
||||
@@ -106,7 +104,6 @@
|
||||
<string name="settings_light_theme">Világos</string>
|
||||
<string name="settings_max_font_size_scale">Max. betű méret</string>
|
||||
<string name="settings_display_barcode_max_brightness">Fényes vonalkód nézet</string>
|
||||
<string name="settings_lock_barcode_orientation">Vonalkód tájolás zárolása</string>
|
||||
<string name="settings_keep_screen_on">Képernyő bekapcsolva marad</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Képernyő zárólás megakadályozása</string>
|
||||
<string name="intent_import_card_from_url_share_text">Meg akarok veled osztani egy kártyát</string>
|
||||
|
||||
@@ -122,7 +122,6 @@
|
||||
<string name="settings_dark_theme">Gelap</string>
|
||||
<string name="settings_max_font_size_scale">Ukuran maksimal huruf</string>
|
||||
<string name="settings_display_barcode_max_brightness">Terangkan tampilan barcode</string>
|
||||
<string name="settings_lock_barcode_orientation">Kunci orientasi barcode</string>
|
||||
<string name="settings_keep_screen_on">Biarkan layar menyala</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Mencegah layar menyala</string>
|
||||
<string name="intent_import_card_from_url_share_text">Saya ingin berbagi kartu dengan anda</string>
|
||||
@@ -187,8 +186,6 @@
|
||||
<string name="on_github">di GitHub</string>
|
||||
<string name="and_data_usage">dan penggunaan data</string>
|
||||
<string name="on_google_play">di Google Play</string>
|
||||
<string name="lockScreen">Blokir rotasi</string>
|
||||
<string name="unlockScreen">Buka blokir rotasi</string>
|
||||
<string name="cardShortcut">Pintasan kartu</string>
|
||||
<string name="card_ids_copied">ID kartu yang tersalin</string>
|
||||
<string name="barcodeImageDescriptionWithType">Gambar dari jenis barcode <xliff:g>%s</xliff:g></string>
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
<string name="noBarcode">Nei strikamerkið</string>
|
||||
<string name="action_search">Leita að</string>
|
||||
<string name="delete">Eyða</string>
|
||||
<string name="unlockScreen">Opna Snúningur</string>
|
||||
<string name="noGiftCards">Smelltu á + plús takka til að bæta kort, eða að flytja inn sumir frá ⋮ matseðill fyrst.</string>
|
||||
<string name="note">Athugið</string>
|
||||
<string name="barcodeType">Strikamerkið tegund</string>
|
||||
@@ -17,7 +16,6 @@
|
||||
<string name="save">Sparaðu</string>
|
||||
<string name="edit">Breyta</string>
|
||||
<string name="confirm">Staðfesta</string>
|
||||
<string name="lockScreen">Blokk Snúningur</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="sendLabel">Sendu…</string>
|
||||
<string name="deleteConfirmation">Eyða þetta kort til frambúðar\?</string>
|
||||
@@ -49,7 +47,6 @@
|
||||
<string name="about">Um</string>
|
||||
<string name="settings">Stillingar</string>
|
||||
<string name="settings_max_font_size_scale">Max. letrið</string>
|
||||
<string name="settings_lock_barcode_orientation">Læsa strikamerkið stefnumörkun</string>
|
||||
<string name="settings_keep_screen_on">Halda á skjánum</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Að koma í veg fyrir að læsa skjánum</string>
|
||||
<string name="editBarcode">Breyta strikamerkið</string>
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
<string name="edit">Modifica</string>
|
||||
<string name="delete">Elimina</string>
|
||||
<string name="confirm">Conferma</string>
|
||||
<string name="lockScreen">Blocca rotazione</string>
|
||||
<string name="unlockScreen">Sblocca rotazione</string>
|
||||
<string name="ok">Ok</string>
|
||||
<string name="copy_to_clipboard">Copia codice negli appunti</string>
|
||||
<string name="share">Condividi</string>
|
||||
@@ -62,7 +60,6 @@
|
||||
<string name="settings_light_theme">Chiaro</string>
|
||||
<string name="settings_dark_theme">Scuro</string>
|
||||
<string name="settings_display_barcode_max_brightness">Aumenta luminosità dello schermo quando viene aperto un codice a barre</string>
|
||||
<string name="settings_lock_barcode_orientation">Blocca orientamento del codice a barre</string>
|
||||
<string name="intent_import_card_from_url_share_text">Voglio condividere una carta fedeltà con te</string>
|
||||
<string name="exportSuccessful">Dati della carta esportati</string>
|
||||
<string name="importSuccessful">Dati importati</string>
|
||||
@@ -230,4 +227,22 @@
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> punti</item>
|
||||
</plurals>
|
||||
<string name="settings_oled_dark">Sfondo nero puro per il tema scuro</string>
|
||||
<string name="include_if_asking_support">Se vuoi richiedere supporto, includi le seguenti informazioni:</string>
|
||||
<string name="settings_card_orientation">Orientamento del codice a barre</string>
|
||||
<string name="settings_follow_system_orientation">Segui il sistema</string>
|
||||
<string name="duplicateCard">Duplica</string>
|
||||
<string name="archive">Archivia</string>
|
||||
<string name="unarchive">Disarchivia</string>
|
||||
<string name="archiveList">Archivio</string>
|
||||
<string name="noUnarchivedCardsMessage">Non esistono schede non archiviate</string>
|
||||
<string name="unarchived">Carta non archiviata</string>
|
||||
<string name="archived">Carta archiviata</string>
|
||||
<string name="settings_portrait_orientation">Ritratto</string>
|
||||
<string name="settings_landscape_orientation">Paesaggio</string>
|
||||
<string name="settings_lock_on_opening_orientation">Blocco da utilizzare per l\'apertura della carta</string>
|
||||
<string name="failedLaunchingPhotoPicker">Impossibile trovare un\'app galleria supportata</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> scheda (<xliff:g id="archivedCount">%2$d</xliff:g> archiviata)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> schede (<xliff:g id="archivedCount">%2$d</xliff:g> archiviate)</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -57,7 +57,6 @@
|
||||
<string name="intent_import_card_from_url_share_text">カード共有をしましょう</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">バーコード表示中は画面をロックしない</string>
|
||||
<string name="settings_keep_screen_on">バーコード表示中は画面を消灯しない</string>
|
||||
<string name="settings_lock_barcode_orientation">バーコード表示画面を自動回転しない</string>
|
||||
<string name="settings_display_barcode_max_brightness">バーコード表示画面を明るくする</string>
|
||||
<string name="settings_max_font_size_scale">最大のフォントサイズ</string>
|
||||
<string name="settings_dark_theme">ダーク</string>
|
||||
@@ -118,8 +117,6 @@
|
||||
<string name="share">共有</string>
|
||||
<string name="copy_to_clipboard">カード番号をクリップボードにコピーする</string>
|
||||
<string name="ok">確定</string>
|
||||
<string name="unlockScreen">自動回転を無効にしない</string>
|
||||
<string name="lockScreen">自動回転を無効にする</string>
|
||||
<string name="confirm">確認</string>
|
||||
<string name="delete">削除</string>
|
||||
<string name="edit">編集</string>
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
<string name="all">모두</string>
|
||||
<string name="groups">그룹</string>
|
||||
<string name="enter_group_name">그룹 이름 입력</string>
|
||||
<string name="settings_lock_barcode_orientation">바코드 회전 잠금</string>
|
||||
<string name="settings_dark_theme">어두움</string>
|
||||
<string name="settings_light_theme">밝음</string>
|
||||
<string name="debug_version_fmt">버전: <xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" id="version">%s</xliff:g></string>
|
||||
@@ -31,8 +30,6 @@
|
||||
<string name="share">공유</string>
|
||||
<string name="copy_to_clipboard">ID를 클립보드에 복사</string>
|
||||
<string name="ok">확인</string>
|
||||
<string name="unlockScreen">회전 잠금 해제</string>
|
||||
<string name="lockScreen">회전 잠금</string>
|
||||
<string name="confirm">확인</string>
|
||||
<string name="delete">삭제</string>
|
||||
<string name="edit">편집</string>
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
<string name="edit">Änneren</string>
|
||||
<string name="delete">Läschen</string>
|
||||
<string name="confirm">Bestätegen</string>
|
||||
<string name="lockScreen">Blockrotation</string>
|
||||
<string name="unlockScreen">Déblockéieren Rotatioun</string>
|
||||
<string name="deleteConfirmation">Dës Kaart dauerhaft läschen\?</string>
|
||||
<string name="ok">Okay</string>
|
||||
<string name="share">Aktie</string>
|
||||
@@ -73,7 +71,6 @@
|
||||
<string name="copy_to_clipboard_multiple_toast">Kaarten-IDs an d \' Tëschentablag inspiréiere</string>
|
||||
<string name="updateBarcodeQuestionText">Si hunn d \' Kaarten-ID geännert. Wëllt Dir och de Barcode aktualiséieren, fir deselwechte Wäert ze benotzen\?</string>
|
||||
<string name="settings_dark_theme">Donkel</string>
|
||||
<string name="settings_lock_barcode_orientation">Barcode-Ausriichtung spären</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Bildschierm spären verhënneren</string>
|
||||
<string name="settings_light_theme">Liicht</string>
|
||||
<string name="settings_max_font_size_scale">Max. Schrëftgréisst</string>
|
||||
|
||||
@@ -34,8 +34,6 @@
|
||||
<string name="card_ids_copied">Nukopijuotos kortelės ID</string>
|
||||
<string name="noCardsMessage">Pirmiausia pridėkite kortelę</string>
|
||||
<string name="sendLabel">Siųsti…</string>
|
||||
<string name="unlockScreen">Atblokuoti pasukimą</string>
|
||||
<string name="lockScreen">Blokuoti pasukimą</string>
|
||||
<string name="unstar">Pašalinti iš mėgstamiausių</string>
|
||||
<string name="star">Pridėti prie mėgstamiausių</string>
|
||||
<string name="noBarcode">Nėra brūkšninio kodo</string>
|
||||
@@ -130,7 +128,6 @@
|
||||
<string name="intent_import_card_from_url_share_text">Noriu pasidalyti su jumis kortele</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Neleisti užrakinti ekrano</string>
|
||||
<string name="settings_keep_screen_on">Laikyti ekraną įjungtą</string>
|
||||
<string name="settings_lock_barcode_orientation">Užrakinti brūkšninio kodo orientaciją</string>
|
||||
<string name="settings_max_font_size_scale">Didžiausias šrifto dydis</string>
|
||||
<string name="settings_dark_theme">Tamsi</string>
|
||||
<string name="settings_light_theme">Šviesi</string>
|
||||
|
||||
@@ -27,8 +27,6 @@
|
||||
<string name="editCardTitle">Rediģēt Karti</string>
|
||||
<string name="share">Daļa</string>
|
||||
<string name="confirm">Apstiprināt</string>
|
||||
<string name="lockScreen">Bloķēt Rotāciju</string>
|
||||
<string name="unlockScreen">Atbloķēt Rotāciju</string>
|
||||
<string name="deleteTitle">Dzēst karti</string>
|
||||
<string name="deleteConfirmation">Dzēst šo karti pastāvīgi\?</string>
|
||||
<string name="ok">LABI</string>
|
||||
@@ -72,7 +70,6 @@
|
||||
<string name="settings_dark_theme">Tumšs</string>
|
||||
<string name="settings_max_font_size_scale">Max. fonts</string>
|
||||
<string name="settings_display_barcode_max_brightness">Izgaismojiet svītrkoda skatu</string>
|
||||
<string name="settings_lock_barcode_orientation">Lock svītrkoda orientācija</string>
|
||||
<string name="settings_keep_screen_on">Saglabāt ekrānu</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Novērst bloķēšanas ekrānu</string>
|
||||
<string name="intent_import_card_from_url_share_text">Es vēlos dalīties ar jums karti</string>
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
<string name="edit">Rediger</string>
|
||||
<string name="delete">Slett</string>
|
||||
<string name="confirm">Bekreft</string>
|
||||
<string name="lockScreen">Skru av rotering</string>
|
||||
<string name="unlockScreen">Skru på rotering</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="copy_to_clipboard">Kopier ID til utklippstavle</string>
|
||||
<string name="sendLabel">Send…</string>
|
||||
@@ -55,7 +53,6 @@
|
||||
<string name="settings">Innstillinger</string>
|
||||
<string name="settings_category_title_ui">Brukergrensesnitt</string>
|
||||
<string name="settings_display_barcode_max_brightness">Lysere strekkodevisning</string>
|
||||
<string name="settings_lock_barcode_orientation">Lås strekkodesideretning</string>
|
||||
<string name="exportSuccessful">Data eksportert</string>
|
||||
<string name="importSuccessful">Data importert</string>
|
||||
<string name="intent_import_card_from_url_share_text">Jeg ønsker å dele et kort med deg</string>
|
||||
@@ -168,8 +165,8 @@
|
||||
<string name="turn_flashlight_off">Skru av lommelykten</string>
|
||||
<string name="deleteTitle">Slett kort</string>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="one">Slett <xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%s</xliff:g> kort</item>
|
||||
<item quantity="other">Slett <xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%s</xliff:g> kort</item>
|
||||
<item quantity="one">Slett <xliff:g>%d</xliff:g> kort</item>
|
||||
<item quantity="other">Slett <xliff:g>%d</xliff:g> kort</item>
|
||||
</plurals>
|
||||
<string name="settings_system_locale">System</string>
|
||||
<string name="settings_locale">Språk</string>
|
||||
@@ -231,4 +228,16 @@
|
||||
</plurals>
|
||||
<string name="settings_oled_dark">Svart bakgrunn for mørk drakt</string>
|
||||
<string name="include_if_asking_support">Inkluder følgende info hvis du vil ha hjelp:</string>
|
||||
<string name="settings_card_orientation">Strekkoderetning</string>
|
||||
<string name="settings_landscape_orientation">Liggende</string>
|
||||
<string name="settings_lock_on_opening_orientation">Lås til sideretning brukt ved åpning av kort</string>
|
||||
<string name="duplicateCard">Dupliser</string>
|
||||
<string name="archive">Arkiver</string>
|
||||
<string name="unarchive">Opphev arkivering</string>
|
||||
<string name="archived">Kort arkivert</string>
|
||||
<string name="unarchived">Kort flyttet tilbake fra arkiv</string>
|
||||
<string name="noUnarchivedCardsMessage">Ingen kort flyttet tilbake fra arkiv finnes</string>
|
||||
<string name="archiveList">Arkiv</string>
|
||||
<string name="settings_follow_system_orientation">Følg systemet</string>
|
||||
<string name="settings_portrait_orientation">Stående</string>
|
||||
</resources>
|
||||
@@ -14,8 +14,6 @@
|
||||
<string name="edit">Bewerken</string>
|
||||
<string name="delete">Verwijderen</string>
|
||||
<string name="confirm">Bevestigen</string>
|
||||
<string name="lockScreen">Draaien niet toestaan</string>
|
||||
<string name="unlockScreen">Draaien toestaan</string>
|
||||
<string name="ok">Oké</string>
|
||||
<string name="copy_to_clipboard">Kaartnummer kopiëren naar klembord</string>
|
||||
<string name="share">Delen</string>
|
||||
@@ -64,7 +62,6 @@
|
||||
<string name="settings_light_theme">Licht</string>
|
||||
<string name="settings_dark_theme">Donker</string>
|
||||
<string name="settings_display_barcode_max_brightness">Scherm helderder maken bij tonen van barcode</string>
|
||||
<string name="settings_lock_barcode_orientation">Barcode-oriëntatie vergrendelen</string>
|
||||
<string name="intent_import_card_from_url_share_text">Ik wil een klantenkaart met je delen</string>
|
||||
<string name="all">Alles</string>
|
||||
<string name="importSuccessful">De gegevens zijn geïmporteerd</string>
|
||||
@@ -231,4 +228,21 @@
|
||||
</plurals>
|
||||
<string name="settings_oled_dark">Zwarte achtergrond gebruiken bij donker thema</string>
|
||||
<string name="include_if_asking_support">Als je ondersteuning wilt, voorzie je verzoek dan van de volgende informatie:</string>
|
||||
<string name="settings_card_orientation">Barcode-oriëntatie</string>
|
||||
<string name="settings_follow_system_orientation">Systeeminstellingen volgen</string>
|
||||
<string name="settings_portrait_orientation">Verticaal</string>
|
||||
<string name="settings_lock_on_opening_orientation">Oriëntatie vergrendelen na openen van kaart</string>
|
||||
<string name="duplicateCard">Klonen</string>
|
||||
<string name="archive">Archiveren</string>
|
||||
<string name="unarchive">Dearchiveren</string>
|
||||
<string name="archived">De kaart is gearchiveerd</string>
|
||||
<string name="unarchived">De kaart is gedearchiveerd</string>
|
||||
<string name="archiveList">Archief</string>
|
||||
<string name="settings_landscape_orientation">Horizontaal</string>
|
||||
<string name="noUnarchivedCardsMessage">Er zijn geen gedearchiveerde kaarten</string>
|
||||
<string name="failedLaunchingPhotoPicker">Er is geen ondersteunde galerij-app aangetroffen</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> kaart (<xliff:g id="archivedCount">%2$d</xliff:g> gearchiveerd)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> kaarten (<xliff:g id="archivedCount">%2$d</xliff:g> gearchiveerd)</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -22,8 +22,6 @@
|
||||
<string name="editCardTitle">Modificar la carta</string>
|
||||
<string name="sendLabel">Enviar…</string>
|
||||
<string name="share">Partejar</string>
|
||||
<string name="unlockScreen">Activar la rotacion</string>
|
||||
<string name="lockScreen">Desactivar la rotacion</string>
|
||||
<string name="confirm">Confirmar</string>
|
||||
<string name="delete">Suprimir</string>
|
||||
<string name="edit">Modificar</string>
|
||||
@@ -66,4 +64,6 @@
|
||||
<string name="groups">Grops</string>
|
||||
<string name="groupsList">Grops : <xliff:g>%s</xliff:g></string>
|
||||
<string name="settings_max_font_size_scale">Talha max. de la poliça</string>
|
||||
<string name="settings_theme_color">Color del tèma</string>
|
||||
<string name="settings_locale">Lenga</string>
|
||||
</resources>
|
||||
@@ -13,8 +13,6 @@
|
||||
<string name="edit">Edytuj</string>
|
||||
<string name="delete">Usuń</string>
|
||||
<string name="confirm">Potwierdź</string>
|
||||
<string name="lockScreen">Zablokuj autoobracanie ekranu</string>
|
||||
<string name="unlockScreen">Odblokuj autoobracanie ekranu</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="copy_to_clipboard">Skopiuj identyfikator do schowka</string>
|
||||
<string name="share">Udostępnij</string>
|
||||
@@ -62,7 +60,6 @@
|
||||
<string name="settings_light_theme">Jasny</string>
|
||||
<string name="settings_dark_theme">Ciemny</string>
|
||||
<string name="settings_display_barcode_max_brightness">Rozjaśnij widok kodu kreskowego</string>
|
||||
<string name="settings_lock_barcode_orientation">Zablokuj autoobracanie kodów kreskowych</string>
|
||||
<string name="intent_import_card_from_url_share_text">Chcę udostępnić Ci kartę lojalnościową</string>
|
||||
<string name="deleteConfirmationGroup">Usunąć grupę\?</string>
|
||||
<string name="all">Wszystko</string>
|
||||
@@ -137,7 +134,7 @@
|
||||
\nŻADNE DANE NIE SĄ ZBIERANE, co może potwierdzić każdy, gdyż nasza aplikacja jest wolnym oprogramowaniem.</string>
|
||||
<string name="privacy_policy">Polityka prywatności</string>
|
||||
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
|
||||
<string name="chooseImportType">Importuj dane z ...\?</string>
|
||||
<string name="chooseImportType">Importuj dane z</string>
|
||||
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> nie wydaje się być prawidłową wartością.</string>
|
||||
<string name="points">Punkty</string>
|
||||
<string name="currency">Waluta</string>
|
||||
@@ -229,4 +226,28 @@
|
||||
<string name="exportPassword">Ustaw hasło, aby zabezpieczyć twoje wyeksportowane dane (opcjonalne)</string>
|
||||
<string name="exportPasswordHint">Wpisz hasło</string>
|
||||
<string name="options">Opcje</string>
|
||||
</resources>
|
||||
<string name="showMoreInfo">Pokaż informacje</string>
|
||||
<plurals name="balancePoints">
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> punkt</item>
|
||||
<item quantity="few"><xliff:g>%s</xliff:g> punkty</item>
|
||||
<item quantity="many"><xliff:g>%s</xliff:g> punkty</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> punkty</item>
|
||||
</plurals>
|
||||
<string name="include_if_asking_support">Jeśli chcesz poprosić o pomoc, podaj następujące informacje:</string>
|
||||
<string name="settings_oled_dark">Całkowicie czarne tło dla ciemnego motywu</string>
|
||||
<string name="hideMoreInfo">Ukryj informacje</string>
|
||||
<string name="settings_card_orientation">Orientacja kodu kreskowego</string>
|
||||
<string name="settings_follow_system_orientation">Śledź system</string>
|
||||
<string name="set_scale">Ustaw skalę</string>
|
||||
<string name="duplicateCard">Duplikuj</string>
|
||||
<string name="starred">Oznaczone gwiazdką</string>
|
||||
<string name="settings_landscape_orientation">Poziomowy</string>
|
||||
<string name="settings_lock_on_opening_orientation">Blokuj do ustawionej orientacji przy otwieraniu karty</string>
|
||||
<string name="settings_portrait_orientation">Portretowy</string>
|
||||
<string name="archive">Archiwizować</string>
|
||||
<string name="unarchive">Odarchiwizować</string>
|
||||
<string name="archived">Karta archiwizowana</string>
|
||||
<string name="unarchived">Karta odarchiwizowana</string>
|
||||
<string name="archiveList">Archiwum</string>
|
||||
<string name="noUnarchivedCardsMessage">Nie istnieją żadne niezarchiwizowane karty</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,191 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="shortcutSelectCard">Selecione um cartão</string>
|
||||
<string name="action_show_details">Mostrar detalhes</string>
|
||||
<string name="action_hide_details">Ocultar detalhes</string>
|
||||
<string name="lockScreen">Bloquear rotação</string>
|
||||
<string name="unlockScreen">Desbloquear rotação</string>
|
||||
<string name="deleteTitle">Eliminar cartão</string>
|
||||
<string name="deleteConfirmation">Eliminar este cartão permanentemente\?</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="copy_to_clipboard">Copiar identificador para a área de transferência</string>
|
||||
<string name="share">Partilhar</string>
|
||||
<string name="sendLabel">Enviar…</string>
|
||||
<string name="editCardTitle">Editar cartão</string>
|
||||
<string name="addCardTitle">Adicionar cartão</string>
|
||||
<string name="cardShortcut">Atalho do cartão</string>
|
||||
<string name="noCardsMessage">Adicione primeiro um cartão</string>
|
||||
<string name="noStoreError">Nenhum nome inserido</string>
|
||||
<string name="failedParsingImportUriError">Não foi possível analisar o URI de importação</string>
|
||||
<string name="importExport">Importar / exportar</string>
|
||||
<string name="exportName">Exportar</string>
|
||||
<string name="importSuccessfulTitle">Importado</string>
|
||||
<string name="importFailedTitle">A importação falhou</string>
|
||||
<string name="exportSuccessfulTitle">Exportado</string>
|
||||
<string name="exportFailedTitle">A exportação falhou</string>
|
||||
<string name="importOptionFilesystemExplanation">Escolha um ficheiro específico a partir do sistema de ficheiros.</string>
|
||||
<string name="importOptionApplicationTitle">Usar outra aplicação</string>
|
||||
<string name="importOptionApplicationExplanation">Utilize qualquer aplicação ou o seu gestor de ficheiros favorito para abrir um ficheiro.</string>
|
||||
<string name="importOptionApplicationButton">Utilizar outra aplicação</string>
|
||||
<string name="about">Sobre</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Direitos de autor © 2019–<xliff:g>%d</xliff:g> Sylvia van Os</string>
|
||||
<string name="app_copyright_old">Baseado no Loyalty Card Keychain
|
||||
\ndireitos de autor © 2016–2020 Branden Archer</string>
|
||||
<string name="app_license">Software livre de partilha sob a mesma licença e segundo a licença GPLv3+</string>
|
||||
<string name="about_title_fmt">Sobre o <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Versão: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Informação da revisão: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="app_libraries">Bibliotecas livres de terceiros: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_resources">Recursos livres de terceiros: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="selectBarcodeTitle">Selecionar código de barras</string>
|
||||
<string name="starImage">Favorito</string>
|
||||
<string name="settings">Configurações</string>
|
||||
<string name="settings_category_title_ui">Interface do utilizador</string>
|
||||
<string name="settings_theme">Tema</string>
|
||||
<string name="settings_system_theme">Sistema</string>
|
||||
<string name="settings_light_theme">Claro</string>
|
||||
<string name="settings_dark_theme">Escuro</string>
|
||||
<string name="settings_max_font_size_scale">Tamanho máximo da fonte</string>
|
||||
<string name="settings_display_barcode_max_brightness">Iluminar o código de barras</string>
|
||||
<string name="settings_lock_barcode_orientation">Bloquear orientação do código de barras</string>
|
||||
<string name="settings_keep_screen_on">Manter ecrã ligado</string>
|
||||
<string name="group_name_is_empty">O nome do grupo não pode estar vazio</string>
|
||||
<string name="group_updated">Grupo atualizado</string>
|
||||
<string name="all">Todos</string>
|
||||
<string name="deleteConfirmationGroup">Eliminar o grupo\?</string>
|
||||
<string name="failedOpeningFileManager">Instalar primeiro um gestor de ficheiros.</string>
|
||||
<string name="moveUp">Subir</string>
|
||||
<string name="moveDown">Descer</string>
|
||||
<string name="leaveWithoutSaveTitle">Sair</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Sair sem guardar\?</string>
|
||||
<string name="addFromImage">Selecionar imagem da galeria</string>
|
||||
<string name="groupsList">Grupos: <xliff:g>%s</xliff:g></string>
|
||||
<string name="editGroup">A editar grupo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryStateSentence">Expiram: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryStateSentenceExpired">Expirados: <xliff:g>%s</xliff:g></string>
|
||||
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="card">Cartão</string>
|
||||
<string name="barcode">Código de barras</string>
|
||||
<string name="editBarcode">Editar código de barras</string>
|
||||
<string name="expiryDate">Validade</string>
|
||||
<string name="never">Nunca</string>
|
||||
<string name="chooseExpiryDate">Escolher validade</string>
|
||||
<string name="moveBarcodeToTopOfScreen">Mover o código de barras para o topo do ecrã</string>
|
||||
<string name="moveBarcodeToCenterOfScreen">Centrar o código de barras no ecrã</string>
|
||||
<string name="noBarcodeFound">Não foi encontrado nenhum código de barras</string>
|
||||
<string name="errorReadingImage">Não foi possível ler a imagem</string>
|
||||
<string name="balance">Saldo</string>
|
||||
<string name="currency">Moeda</string>
|
||||
<string name="privacy_policy_popup_text">Aviso de política de privacidade (exigido por algumas lojas de aplicações):
|
||||
\n
|
||||
\nNENHUM DADO É RECOLHIDO DE FORMA ALGUMA, o que qualquer pessoa pode confirmar, já que a nossa aplicação é um software livre de código-fonte aberto.</string>
|
||||
<string name="accept">Aceitar</string>
|
||||
<string name="importCatima">Importar do Catima</string>
|
||||
<string name="importFidme">Importar do FidMe</string>
|
||||
<string name="importFidmeMessage">Selecione a exportação <i>fidme-export-request-xxxxxx.zip</i> do FidMe para importar e depois selecione os tipos de código de barras manualmente.
|
||||
\nPrimeiro crie a exportação no seu perfil do FidMe escolhendo a opção \"Proteção de dados\" e em seguida pressionando \"Extrair os meus dados\".</string>
|
||||
<string name="importLoyaltyCardKeychain">Importar do Loyalty Card Keychain</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Selecione a exportação <i>LoyaltyCardKeychain.csv</i> do Loyalty Card Keychain para importar.
|
||||
\nPrimeiro crie a exportação no menu \"Importar / exportar\" no Loyalty Card Keychain pressionando \"Exportar\".</string>
|
||||
<string name="importStocard">Importar do Stocard</string>
|
||||
<string name="importCatimaMessage">Selecione a exportação <i>catima.zip</i> do Catima a importar.
|
||||
\nPrimeiro crie a exportação no menu \"Importar / exportar\" de outra aplicação Catima pressionando \"Exportar\" nesse menu.</string>
|
||||
<string name="importStocardMessage">Selecione a exportação <i>***-sync.zip</i> do Stocard para importar.
|
||||
\nObtenha-o através do e-mail support@stocardapp.com solicitando uma exportação dos seus dados.</string>
|
||||
<string name="importVoucherVault">Importar do Voucher Vault</string>
|
||||
<string name="importVoucherVaultMessage">Selecione a exportação <i>vouchervault.json</i> do Voucher Vault para importar.
|
||||
\nCrie-a primeiro pressionando a opção \"Exportar\" no Voucher Vault.</string>
|
||||
<string name="barcodeId">Valor do código de barras</string>
|
||||
<string name="setBarcodeId">Definir o valor do código de barras</string>
|
||||
<string name="unsupportedBarcodeType">Este tipo de código de barras ainda não pode ser mostrado. Pode vir a ser suportado numa versão posterior da aplicação.</string>
|
||||
<string name="wrongValueForBarcodeType">O valor não é válido para o tipo de código de barras selecionado</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Quero partilhar alguns cartões</string>
|
||||
<string name="photos">Fotografias</string>
|
||||
<string name="setFrontImage">Definir imagem frontal</string>
|
||||
<string name="setBackImage">Definir imagem de trás</string>
|
||||
<string name="removeImage">Remover imagem</string>
|
||||
<string name="takePhoto">Tirar uma fotografia</string>
|
||||
<string name="updateBarcodeQuestionTitle">Atualizar o valor do código de barras\?</string>
|
||||
<string name="yes">Sim</string>
|
||||
<string name="no">Não</string>
|
||||
<string name="passwordRequired">Introduza a palavra-passe</string>
|
||||
<string name="exportPassword">Defina uma palavra-passe para proteger a exportação (opcional)</string>
|
||||
<string name="exportPasswordHint">Digite a palavra-passe</string>
|
||||
<string name="failedGeneratingShareURL">Não foi possível gerar uma URL partilhável. Por favor reporte isto aos programadores.</string>
|
||||
<string name="turn_flashlight_on">Ligar lanterna</string>
|
||||
<string name="turn_flashlight_off">Desligar lanterna</string>
|
||||
<string name="settings_locale">Idioma</string>
|
||||
<string name="settings_system_locale">Sistema</string>
|
||||
<string name="selectColor">Selecionar cor</string>
|
||||
<string name="setIcon">Definir ícone</string>
|
||||
<string name="settings_violet_theme">Violeta</string>
|
||||
<string name="settings_blue_theme">Azul</string>
|
||||
<string name="settings_sky_blue_theme">Azul céu</string>
|
||||
<string name="settings_green_theme">Verde</string>
|
||||
<string name="settings_grey_theme">Cinzento</string>
|
||||
<string name="settings_brown_theme">Castanho</string>
|
||||
<string name="app_contributors">Tornado possível por: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="sort">Ordenar</string>
|
||||
<string name="swipeToSwitchImages">Deslize ou pressione prolongadamente para mudar as imagens</string>
|
||||
<string name="sort_by_name">Nome</string>
|
||||
<string name="sort_by_most_recently_used">Mais usados recentemente</string>
|
||||
<string name="sort_by_expiry">Validade</string>
|
||||
<string name="sort_by_balance">Saldo</string>
|
||||
<string name="sort_by">Ordenar por</string>
|
||||
<string name="version_history">Histórico de versões</string>
|
||||
<string name="credits">Créditos</string>
|
||||
<string name="help_translate_this_app">Ajude a traduzir esta aplicação</string>
|
||||
<string name="license">Licença</string>
|
||||
<string name="source_repository">Repositório do código-fonte</string>
|
||||
<string name="on_github">no GitHub</string>
|
||||
<string name="and_data_usage">e utilização de dados</string>
|
||||
<string name="rate_this_app">Avalie esta aplicação</string>
|
||||
<string name="on_google_play">no Google Play</string>
|
||||
<string name="report_error">Reportar erro</string>
|
||||
<string name="translate_platform">no Weblate</string>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="one">Eliminar <xliff:g>%d</xliff:g> cartão</item>
|
||||
<item quantity="other">Eliminar <xliff:g>%d</xliff:g> cartões</item>
|
||||
</plurals>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="one">Eliminar o cartão <xliff:g>%d</xliff:g> permanentemente\?</item>
|
||||
<item quantity="other">Eliminar os cartões <xliff:g>%d</xliff:g> permanentemente\?</item>
|
||||
</plurals>
|
||||
<plurals name="groupCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> cartão</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> cartões</item>
|
||||
</plurals>
|
||||
<string name="action_search">Pesquisa</string>
|
||||
<string name="action_add">Acrescentar</string>
|
||||
<string name="storeName">Nome</string>
|
||||
<string name="note">Nota</string>
|
||||
<string name="cardId">Identificador do cartão</string>
|
||||
<string name="barcodeType">Tipo de código de barras</string>
|
||||
<string name="noBarcode">Sem código de barras</string>
|
||||
<string name="star">Adicionar aos favoritos</string>
|
||||
<string name="unstar">Retirar dos favoritos</string>
|
||||
<string name="cancel">Cancelar</string>
|
||||
<string name="save">Guardar</string>
|
||||
<string name="edit">Editar</string>
|
||||
<string name="delete">Eliminar</string>
|
||||
<string name="confirm">Confirmar</string>
|
||||
<string name="importing">A importar…</string>
|
||||
<string name="exporting">A exportar…</string>
|
||||
<string name="exportOptionExplanation">Os dados serão guardados num local à sua escolha.</string>
|
||||
<string name="importOptionFilesystemTitle">Importar do sistema de ficheiros</string>
|
||||
<string name="importOptionFilesystemButton">Do sistema de ficheiros</string>
|
||||
<string name="intent_import_card_from_url_share_text">Quero partilhar um cartão</string>
|
||||
<string name="enter_group_name">Introduza o nome do grupo</string>
|
||||
<string name="groups">Grupos</string>
|
||||
<string name="group_edit">Editar grupo</string>
|
||||
<string name="group_name_already_in_use">O nome do grupo já está a ser usado</string>
|
||||
<string name="points">Pontos</string>
|
||||
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> não parece ser um saldo válido.</string>
|
||||
<string name="chooseImportType">De onde importar os dados\?</string>
|
||||
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
|
||||
<string name="privacy_policy">Política de privacidade</string>
|
||||
<string name="settings_theme_color">Cor do tema</string>
|
||||
<string name="settings_catima_theme">Catima</string>
|
||||
<string name="settings_pink_theme">Rosa</string>
|
||||
<string name="settings_magenta_theme">Magenta</string>
|
||||
</resources>
|
||||
@@ -22,9 +22,7 @@
|
||||
<string name="about">Sobre</string>
|
||||
<string name="app_license">Software livre de partilha sob a mesma licença e segundo a licença GPLv3+</string>
|
||||
<string name="addCardTitle">Adicionar cartão</string>
|
||||
<string name="lockScreen">Bloquear rotação</string>
|
||||
<string name="editCardTitle">Editar cartão</string>
|
||||
<string name="unlockScreen">Desbloquear rotação</string>
|
||||
<string name="deleteTitle">Eliminar cartão</string>
|
||||
<string name="copy_to_clipboard">Copiar identificador para a área de transferência</string>
|
||||
<string name="sendLabel">Enviar…</string>
|
||||
@@ -53,7 +51,6 @@
|
||||
<string name="settings_keep_screen_on">Manter ecrã ligado</string>
|
||||
<string name="enter_group_name">Introduza o nome do grupo</string>
|
||||
<string name="groups">Grupos</string>
|
||||
<string name="settings_lock_barcode_orientation">Bloquear orientação do código de barras</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Desativar bloqueio do ecrã</string>
|
||||
<string name="exportSuccessful">Dados exportados</string>
|
||||
<string name="all">Todos</string>
|
||||
@@ -231,4 +228,21 @@
|
||||
</plurals>
|
||||
<string name="settings_oled_dark">Fundo preto puro para tema negro</string>
|
||||
<string name="include_if_asking_support">Se quiser pedir ajuda, inclua as seguintes informações:</string>
|
||||
<string name="duplicateCard">Duplicar</string>
|
||||
<string name="archive">Arquivar</string>
|
||||
<string name="settings_card_orientation">Orientação do código de barras</string>
|
||||
<string name="settings_follow_system_orientation">Definido no sistema</string>
|
||||
<string name="settings_portrait_orientation">Retrato</string>
|
||||
<string name="settings_landscape_orientation">Paisagem</string>
|
||||
<string name="settings_lock_on_opening_orientation">Bloqueio da orientação usada ao abrir o cartão</string>
|
||||
<string name="unarchive">Desarquivar</string>
|
||||
<string name="archived">Cartão arquivado</string>
|
||||
<string name="unarchived">Cartão desarquivado</string>
|
||||
<string name="archiveList">Arquivar</string>
|
||||
<string name="noUnarchivedCardsMessage">Não existem cartões desarquivados</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> cartão (<xliff:g id="archivedCount">%2$d</xliff:g> arquivado)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> cartões (<xliff:g id="archivedCount">%2$d</xliff:g> arquivados)</item>
|
||||
</plurals>
|
||||
<string name="failedLaunchingPhotoPicker">Não foi encontrada nenhuma aplicação de galeria de imagens</string>
|
||||
</resources>
|
||||
@@ -13,8 +13,6 @@
|
||||
<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>
|
||||
@@ -62,7 +60,6 @@
|
||||
<string name="noBarcodeFound">Nu a fost găsit niciun cod de bare</string>
|
||||
<string name="settings_max_font_size_scale">Mărimea maximă a fontului</string>
|
||||
<string name="settings_display_barcode_max_brightness">Luminați vizualizarea codurilor de bare</string>
|
||||
<string name="settings_lock_barcode_orientation">Blocare orientare cod de bare</string>
|
||||
<string name="settings_keep_screen_on">Păstrați ecranul pornit</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Evitați ecranul de blocare</string>
|
||||
<string name="balance">Balanță</string>
|
||||
|
||||
@@ -12,10 +12,8 @@
|
||||
<string name="cancel">Отмена</string>
|
||||
<string name="save">Сохранить</string>
|
||||
<string name="edit">Изменить</string>
|
||||
<string name="delete">Удалить карту</string>
|
||||
<string name="delete">Удалить</string>
|
||||
<string name="confirm">Подтвердить</string>
|
||||
<string name="lockScreen">Блокировать поворот экрана</string>
|
||||
<string name="unlockScreen">Автоповорот экрана</string>
|
||||
<string name="ok">ОК</string>
|
||||
<string name="copy_to_clipboard">Копировать номер карты</string>
|
||||
<string name="share">Переслать</string>
|
||||
@@ -64,7 +62,6 @@
|
||||
<string name="settings_light_theme">Светлая</string>
|
||||
<string name="settings_dark_theme">Тёмная</string>
|
||||
<string name="settings_display_barcode_max_brightness">Максимальная яркость при отображении карты</string>
|
||||
<string name="settings_lock_barcode_orientation">Портретная ориентация экрана при отображении карты</string>
|
||||
<string name="intent_import_card_from_url_share_text">Я хочу поделиться с вами картой</string>
|
||||
<string name="exportSuccessful">Данные успешно экспортированы</string>
|
||||
<string name="all">Все</string>
|
||||
@@ -241,4 +238,23 @@
|
||||
</plurals>
|
||||
<string name="settings_oled_dark">Чёрный фон для тёмной темы</string>
|
||||
<string name="include_if_asking_support">Если вы хотите запросить поддержку, укажите следующую информацию:</string>
|
||||
<string name="settings_portrait_orientation">Портретная</string>
|
||||
<string name="settings_landscape_orientation">Альбомная</string>
|
||||
<string name="settings_lock_on_opening_orientation">Фиксировать ориентацию при открытии карты</string>
|
||||
<string name="archive">Архивировать</string>
|
||||
<string name="unarchive">Разархивировать</string>
|
||||
<string name="archiveList">Архив</string>
|
||||
<string name="noUnarchivedCardsMessage">Нет карт вне архива</string>
|
||||
<string name="settings_follow_system_orientation">Как в системе</string>
|
||||
<string name="duplicateCard">Дублировать</string>
|
||||
<string name="settings_card_orientation">Ориентация штрих-кода</string>
|
||||
<string name="archived">Карта архивирована</string>
|
||||
<string name="unarchived">Карта разархивирована</string>
|
||||
<string name="failedLaunchingPhotoPicker">Не найдено поддерживаемое приложение галереи</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> карта (<xliff:g id="archivedCount">%2$d</xliff:g> архивирована)</item>
|
||||
<item quantity="few"><xliff:g>%1$d</xliff:g> карты (<xliff:g id="archivedCount">%2$d</xliff:g> архивированы)</item>
|
||||
<item quantity="many"><xliff:g>%1$d</xliff:g> карт (<xliff:g id="archivedCount">%2$d</xliff:g> архивировано)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> карт (<xliff:g id="archivedCount">%2$d</xliff:g> архивировано)</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -10,8 +10,6 @@
|
||||
<string name="edit">Upraviť</string>
|
||||
<string name="delete">Vymazať</string>
|
||||
<string name="confirm">Potvrdiť</string>
|
||||
<string name="lockScreen">Zakázať rotáciu</string>
|
||||
<string name="unlockScreen">Povoliť rotáciu</string>
|
||||
<string name="ok">Áno</string>
|
||||
<string name="copy_to_clipboard">Kopírovať ID do schránky</string>
|
||||
<string name="sendLabel">Odoslať…</string>
|
||||
@@ -52,7 +50,6 @@
|
||||
<string name="settings">Nastavenia</string>
|
||||
<string name="settings_category_title_ui">Používateľské prostredie</string>
|
||||
<string name="settings_display_barcode_max_brightness">Zvýšiť jas pri zobrazení čiarového kódu </string>
|
||||
<string name="settings_lock_barcode_orientation">Uzamkni orientáciu čiarového kódu</string>
|
||||
<string name="deleteTitle">Odstrániť kartu</string>
|
||||
<string name="deleteConfirmation">Naozaj chcete túto kartu odstrániť?</string>
|
||||
<string name="star">Pridať k obľúbeným</string>
|
||||
@@ -207,5 +204,5 @@
|
||||
<string name="no">Nie</string>
|
||||
<string name="passwordRequired">Zadajte prosím heslo</string>
|
||||
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> sa nezdá byť platným zostatkom.</string>
|
||||
<string name="noGiftCardsGroup">Vytvorte niekoľko kariet a potom ich priraďte k tejto skupine.</string>
|
||||
</resources>
|
||||
<string name="noGiftCardsGroup">Zatiaľ nemáte žiadne vernostné karty. Keď nejaké pridáte, môžete ich priradiť ku skupine tu.</string>
|
||||
</resources>
|
||||
@@ -10,8 +10,6 @@
|
||||
<string name="edit">Uredi</string>
|
||||
<string name="delete">Izbriši</string>
|
||||
<string name="confirm">Potrdi</string>
|
||||
<string name="lockScreen">Onemogoči obračanje zaslona</string>
|
||||
<string name="unlockScreen">Omogoči obračanje zaslona</string>
|
||||
<string name="ok">Vredu</string>
|
||||
<string name="copy_to_clipboard">Kopirajte številko kartice</string>
|
||||
<string name="sendLabel">Pošlji…</string>
|
||||
@@ -52,7 +50,6 @@
|
||||
<string name="settings">Nastavitve</string>
|
||||
<string name="settings_category_title_ui">Uporabniški vmesnik</string>
|
||||
<string name="settings_display_barcode_max_brightness">Povečaj osvetljenost prikaza črtne kode</string>
|
||||
<string name="settings_lock_barcode_orientation">Zakleni orientacijo črtne kode</string>
|
||||
<string name="deleteTitle">Odstrani kartico zvestobe</string>
|
||||
<string name="deleteConfirmation">Prosim potrdite, če želite izbrisati to kartico\?</string>
|
||||
<string name="card">Kartica</string>
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?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="settings_lock_barcode_orientation">Lås streckkodens riktning</string>
|
||||
<string name="settings_display_barcode_max_brightness">Gör streckkodsvyn ljusare</string>
|
||||
<string name="settings_max_font_size_scale">Max. teckenstorlek</string>
|
||||
<string name="settings_keep_screen_on">Håll skärmen påslagen</string>
|
||||
@@ -151,7 +150,6 @@
|
||||
<string name="privacy_policy_popup_text">Notis rörande integritetspolicy (krävs av vissa appbutiker):
|
||||
\n
|
||||
\nINGEN DATA ALLS SAMLAS IN, vilket vem som helst kan bekräfta eftersom vår app är fri programvara.</string>
|
||||
<string name="unlockScreen">Tillåt rotation</string>
|
||||
<string name="privacy_policy">Integritetspolicy</string>
|
||||
<string name="expiryStateSentenceExpired">Förföll: <xliff:g>%s</xliff:g></string>
|
||||
<string name="chooseExpiryDate">Välj förfallodatum</string>
|
||||
@@ -164,7 +162,6 @@
|
||||
<string name="balance">Saldo</string>
|
||||
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Förhindra skärmlåsning</string>
|
||||
<string name="lockScreen">Förhindra rotation</string>
|
||||
<string name="importCatimaMessage">Välj den exporterade <i>catima.zip</i> från Catima som du vill importera.
|
||||
\nSkapa den från Import/Export-menyn i en annan Catima-app genom att trycka på Exportera där först.</string>
|
||||
<string name="expiryStateSentence">Giltigt till: <xliff:g>%s</xliff:g></string>
|
||||
@@ -228,4 +225,7 @@
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> poäng</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> poäng</item>
|
||||
</plurals>
|
||||
<string name="set_scale">Justera skala</string>
|
||||
<string name="include_if_asking_support">Om du vill be om hjälp, inkludera då följande information:</string>
|
||||
<string name="settings_oled_dark">Helsvart bakgrund för mörkt tema</string>
|
||||
</resources>
|
||||
@@ -98,7 +98,6 @@
|
||||
<string name="intent_import_card_from_url_share_text">Seninle bir kart paylaşmak istiyorum</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Ekran kilidini engelle</string>
|
||||
<string name="settings_keep_screen_on">Ekranı açık tut</string>
|
||||
<string name="settings_lock_barcode_orientation">Barkod yönünü kilitle</string>
|
||||
<string name="settings_display_barcode_max_brightness">Barkod görünümünü aydınlat</string>
|
||||
<string name="settings_max_font_size_scale">Azami yazı tipi boyutu</string>
|
||||
<string name="settings_dark_theme">Koyu</string>
|
||||
@@ -167,8 +166,6 @@
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> kartı sil</item>
|
||||
</plurals>
|
||||
<string name="deleteTitle">Kartı sil</string>
|
||||
<string name="unlockScreen">Döndürme Engelini Kaldır</string>
|
||||
<string name="lockScreen">Döndürmeyi Engelle</string>
|
||||
<string name="confirm">Doğrula</string>
|
||||
<string name="delete">Sil</string>
|
||||
<string name="edit">Düzenle</string>
|
||||
@@ -231,4 +228,21 @@
|
||||
</plurals>
|
||||
<string name="settings_oled_dark">Koyu tema için saf siyah arka plan</string>
|
||||
<string name="include_if_asking_support">Destek talep etmek istiyorsanız, aşağıdaki bilgileri ekleyin:</string>
|
||||
<string name="settings_follow_system_orientation">Sistemi takip et</string>
|
||||
<string name="settings_portrait_orientation">Dikey</string>
|
||||
<string name="settings_landscape_orientation">Yatay</string>
|
||||
<string name="duplicateCard">Çoğalt</string>
|
||||
<string name="unarchive">Arşivden çıkar</string>
|
||||
<string name="archived">Kart arşivlendi</string>
|
||||
<string name="archiveList">Arşiv</string>
|
||||
<string name="noUnarchivedCardsMessage">Arşivden çıkarılan kart yok</string>
|
||||
<string name="settings_card_orientation">Barkod yönü</string>
|
||||
<string name="settings_lock_on_opening_orientation">Kartı açarken kullanılan yönü kilitle</string>
|
||||
<string name="unarchived">Kart arşivden çıkarıldı</string>
|
||||
<string name="archive">Arşivle</string>
|
||||
<string name="failedLaunchingPhotoPicker">Desteklenen bir galeri uygulaması bulunamadı</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> kart (<xliff:g id="archivedCount">%2$d</xliff:g> tane arşivlendi)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> kart (<xliff:g id="archivedCount">%2$d</xliff:g> tane arşivlendi)</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -41,7 +41,7 @@
|
||||
<string name="accept">Прийняти</string>
|
||||
<string name="privacy_policy">Політика конфіденційності</string>
|
||||
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
|
||||
<string name="chooseImportType">Імпортувати дані з\?</string>
|
||||
<string name="chooseImportType">Імпортувати дані з</string>
|
||||
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> здається, не є дійсним залишком.</string>
|
||||
<string name="points">Бали</string>
|
||||
<string name="currency">Валюта</string>
|
||||
@@ -77,7 +77,6 @@
|
||||
<string name="intent_import_card_from_url_share_text">Я хочу поділитися з тобою картою</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Не блокувати екран</string>
|
||||
<string name="settings_keep_screen_on">Не вимикати екран</string>
|
||||
<string name="settings_lock_barcode_orientation">Заблокувати орієнтацію штрих-коду</string>
|
||||
<string name="settings_max_font_size_scale">Макс. розмір шрифту</string>
|
||||
<string name="settings_dark_theme">Темна</string>
|
||||
<string name="settings_light_theme">Світла</string>
|
||||
@@ -132,8 +131,6 @@
|
||||
<string name="share">Поділитися</string>
|
||||
<string name="copy_to_clipboard">Копіювати ID до буферу обміну</string>
|
||||
<string name="ok">ОК</string>
|
||||
<string name="unlockScreen">Розблокувати обертання</string>
|
||||
<string name="lockScreen">Блокувати обертання</string>
|
||||
<string name="confirm">Підтвердити</string>
|
||||
<string name="delete">Видалити</string>
|
||||
<string name="edit">Редагувати</string>
|
||||
@@ -151,11 +148,11 @@
|
||||
<string name="turn_flashlight_on">Увімкнути спалах</string>
|
||||
<string name="failedGeneratingShareURL">Збій створення URL обміну. Будь ласка повідомте про цю помилку.</string>
|
||||
<string name="passwordRequired">Будь ласка введіть пароль</string>
|
||||
<string name="takePhoto">Зробити фото</string>
|
||||
<string name="takePhoto">Зробити світлину</string>
|
||||
<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 для імпорту.
|
||||
@@ -203,11 +200,11 @@
|
||||
<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="sort">Сортувати</string>
|
||||
<string name="version_history">Історія версій</string>
|
||||
<string name="help_translate_this_app">Допомогти з перекладом програми</string>
|
||||
<string name="license">Ліцензія</string>
|
||||
<string name="source_repository">Вихідний код</string>
|
||||
<string name="source_repository">Початковий код</string>
|
||||
<string name="on_github">на GitHub</string>
|
||||
<string name="and_data_usage">та використання даних</string>
|
||||
<string name="credits">Подяки</string>
|
||||
@@ -233,4 +230,31 @@
|
||||
<string name="starred">Обране</string>
|
||||
<string name="set_scale">Зміна масштабу</string>
|
||||
<string name="hideMoreInfo">Сховати дані</string>
|
||||
<string name="settings_oled_dark">Повністю чорний фон для темної теми</string>
|
||||
<plurals name="balancePoints">
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> бал</item>
|
||||
<item quantity="few"><xliff:g>%s</xliff:g> бали</item>
|
||||
<item quantity="many"><xliff:g>%s</xliff:g> балів</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> балів</item>
|
||||
</plurals>
|
||||
<string name="include_if_asking_support">Якщо ви хочете отримати техпідтримку, додайте цю інформацію:</string>
|
||||
<string name="unarchive">Розархівувати</string>
|
||||
<string name="settings_card_orientation">Орієнтація штрих-коду</string>
|
||||
<string name="settings_follow_system_orientation">Як у системі</string>
|
||||
<string name="duplicateCard">Дублювати</string>
|
||||
<string name="archive">Архівувати</string>
|
||||
<string name="settings_portrait_orientation">Поличчя</string>
|
||||
<string name="settings_landscape_orientation">Краєвид</string>
|
||||
<string name="settings_lock_on_opening_orientation">Блокування орієнтації при відкритті картки</string>
|
||||
<string name="archived">Картка архівована</string>
|
||||
<string name="unarchived">Картка розархівована</string>
|
||||
<string name="archiveList">Архів</string>
|
||||
<string name="noUnarchivedCardsMessage">Немає не архівованих карток</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> карту (<xliff:g id="archivedCount">%2$d</xliff:g> заархівовано)</item>
|
||||
<item quantity="few"><xliff:g>%1$d</xliff:g> карти (<xliff:g id="archivedCount">%2$d</xliff:g> заархівовано)</item>
|
||||
<item quantity="many"><xliff:g>%1$d</xliff:g> карт (<xliff:g id="archivedCount">%2$d</xliff:g> заархівовано)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> карт (<xliff:g id="archivedCount">%2$d</xliff:g> заархівовано)</item>
|
||||
</plurals>
|
||||
<string name="failedLaunchingPhotoPicker">Підтримувану програму галереї не знайдено</string>
|
||||
</resources>
|
||||
@@ -73,7 +73,6 @@
|
||||
<string name="intent_import_card_from_url_share_text">我想和你分享一张卡</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">防止锁屏</string>
|
||||
<string name="settings_keep_screen_on">保持屏幕常亮</string>
|
||||
<string name="settings_lock_barcode_orientation">锁定条码方向</string>
|
||||
<string name="settings_display_barcode_max_brightness">提高条码界面亮度</string>
|
||||
<string name="settings_max_font_size_scale">最大字体大小</string>
|
||||
<string name="settings_dark_theme">暗色</string>
|
||||
@@ -121,8 +120,6 @@
|
||||
<string name="share">分享</string>
|
||||
<string name="copy_to_clipboard">复制卡号到剪贴板</string>
|
||||
<string name="ok">确定</string>
|
||||
<string name="unlockScreen">解除旋转锁定</string>
|
||||
<string name="lockScreen">锁定旋转</string>
|
||||
<string name="confirm">确认</string>
|
||||
<string name="delete">删除</string>
|
||||
<string name="edit">编辑</string>
|
||||
@@ -175,4 +172,47 @@
|
||||
<plurals name="balancePoints">
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> 点</item>
|
||||
</plurals>
|
||||
<string name="settings_locale">语言</string>
|
||||
<string name="setIcon">设置图标</string>
|
||||
<string name="settings_pink_theme">粉色</string>
|
||||
<string name="settings_oled_dark">纯黑色背景的深色主题</string>
|
||||
<string name="hideMoreInfo">隐藏信息</string>
|
||||
<string name="translate_platform">在Weblate上</string>
|
||||
<string name="settings_sky_blue_theme">天蓝</string>
|
||||
<string name="showMoreInfo">显示信息</string>
|
||||
<string name="options">选项</string>
|
||||
<string name="source_repository">源码库</string>
|
||||
<string name="include_if_asking_support">请求帮助时,请填写下列信息:</string>
|
||||
<string name="exportPasswordHint">输入密码</string>
|
||||
<string name="settings_grey_theme">灰色</string>
|
||||
<string name="sort">排序</string>
|
||||
<string name="version_history">历史版本</string>
|
||||
<string name="rate_this_app">给这个应用评分</string>
|
||||
<string name="on_google_play">在Google Play上</string>
|
||||
<string name="report_error">报告错误</string>
|
||||
<string name="shortcutSelectCard">选择一张卡片</string>
|
||||
<string name="group_name_already_in_use">组名已在使用中</string>
|
||||
<string name="group_name_is_empty">组名不可为空</string>
|
||||
<string name="settings_brown_theme">棕色</string>
|
||||
<string name="settings_green_theme">绿色</string>
|
||||
<string name="sort_by_most_recently_used">最近使用</string>
|
||||
<string name="sort_by_name">名称</string>
|
||||
<string name="help_translate_this_app">帮助翻译此应用</string>
|
||||
<string name="sort_by_balance">余额</string>
|
||||
<string name="swipeToSwitchImages">滑动或长按来切换图片</string>
|
||||
<string name="reverse">倒序</string>
|
||||
<string name="sort_by">排序方式</string>
|
||||
<string name="selectColor">选择颜色</string>
|
||||
<string name="settings_theme_color">主题色</string>
|
||||
<string name="settings_blue_theme">蓝色</string>
|
||||
<string name="sort_by_expiry">到期日</string>
|
||||
<string name="settings_catima_theme">Catima</string>
|
||||
<string name="noGroupCards">该组是空的</string>
|
||||
<string name="on_github">在GitHub上</string>
|
||||
<string name="group_updated">群组已更新</string>
|
||||
<string name="editGroup">编辑组:<xliff:g>%s</xliff:g></string>
|
||||
<string name="settings_system_locale">系统</string>
|
||||
<string name="exportPassword">设置密码来保护导出的内容(可选)</string>
|
||||
<string name="settings_magenta_theme">紫红</string>
|
||||
<string name="settings_violet_theme">紫色</string>
|
||||
</resources>
|
||||
@@ -151,14 +151,11 @@
|
||||
<string name="settings_light_theme">淺色</string>
|
||||
<string name="settings_dark_theme">深色</string>
|
||||
<string name="settings_display_barcode_max_brightness">調高條碼介面螢幕亮度</string>
|
||||
<string name="settings_lock_barcode_orientation">鎖定條碼螢幕方向</string>
|
||||
<string name="settings_keep_screen_on">螢幕恆亮</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">防止螢幕鎖定</string>
|
||||
<string name="importSuccessful">已匯入資料</string>
|
||||
<string name="moveUp">往上移動</string>
|
||||
<string name="moveDown">往下移動</string>
|
||||
<string name="lockScreen">禁止旋轉</string>
|
||||
<string name="unlockScreen">允許旋轉</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="sendLabel">送出…</string>
|
||||
<string name="scanCardBarcode">掃描條碼</string>
|
||||
|
||||
@@ -51,6 +51,7 @@
|
||||
<color name="md_theme_dark_inverseOnSurface">#201A1A</color>
|
||||
<color name="md_theme_dark_inverseSurface">#ECDFDE</color>
|
||||
<color name="md_theme_dark_primaryInverse">#A83536</color>
|
||||
<color name="md_theme_dark_onSelected">#80201A1A</color>
|
||||
<color name="seed">#B53F3F</color>
|
||||
<color name="error">#BA1B1B</color>
|
||||
</resources>
|
||||
@@ -28,6 +28,7 @@
|
||||
|
||||
<dimen name="cardThumbnailSize">46dp</dimen>
|
||||
<dimen name="cardThumbnailSizeLarge">200dp</dimen>
|
||||
<dimen name="cardThumbnailEditOverlaySize">21dp</dimen>
|
||||
|
||||
<dimen name="activity_margin_small">8dp</dimen>
|
||||
<dimen name="activity_margin">16dp</dimen>
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
|
||||
<string-array name="locale_values">
|
||||
<item />
|
||||
<item>ar</item>
|
||||
<item>bg</item>
|
||||
<item>bn-rIN</item>
|
||||
<item>bs</item>
|
||||
@@ -98,6 +99,20 @@
|
||||
<item>zh-rCN</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="card_orientation_values">
|
||||
<item>@string/settings_key_follow_system_orientation</item>
|
||||
<item>@string/settings_key_lock_on_opening_orientation</item>
|
||||
<item>@string/settings_key_portrait_orientation</item>
|
||||
<item>@string/settings_key_landscape_orientation</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="card_orientation_values_strings">
|
||||
<item>@string/settings_follow_system_orientation</item>
|
||||
<item>@string/settings_lock_on_opening_orientation</item>
|
||||
<item>@string/settings_portrait_orientation</item>
|
||||
<item>@string/settings_landscape_orientation</item>
|
||||
</string-array>
|
||||
|
||||
<array name="letter_tile_colors">
|
||||
<item>#f16364</item>
|
||||
<item>#f58559</item>
|
||||
|
||||
@@ -22,8 +22,6 @@
|
||||
<string name="edit">Edit</string>
|
||||
<string name="delete">Delete</string>
|
||||
<string name="confirm">Confirm</string>
|
||||
<string name="lockScreen">Block Rotation</string>
|
||||
<string name="unlockScreen">Unblock Rotation</string>
|
||||
<!-- START NOTE: i18n oddness -->
|
||||
<!-- The following may seem weird, but it is necessary to give translators enough flexibility.
|
||||
For example, in Russian, Android's plural quantity "one" actually refers to "any number ending on 1 but not ending in 11".
|
||||
@@ -99,12 +97,20 @@
|
||||
<string name="settings_key_light_theme" translatable="false">light</string>
|
||||
<string name="settings_dark_theme">Dark</string>
|
||||
<string name="settings_key_dark_theme" translatable="false">dark</string>
|
||||
<string name="settings_card_orientation">Barcode orientation</string>
|
||||
<string name="settings_key_card_orientation" translatable="false">pref_card_orientation</string>
|
||||
<string name="settings_follow_system_orientation">Follow system</string>
|
||||
<string name="settings_key_follow_system_orientation" translatable="false">follow_system</string>
|
||||
<string name="settings_portrait_orientation">Portrait</string>
|
||||
<string name="settings_key_portrait_orientation" translatable="false">portrait</string>
|
||||
<string name="settings_landscape_orientation">Landscape</string>
|
||||
<string name="settings_key_landscape_orientation" translatable="false">landscape</string>
|
||||
<string name="settings_lock_on_opening_orientation">Lock to orientation used when opening the card</string>
|
||||
<string name="settings_key_lock_on_opening_orientation" translatable="false">lock_on_opening</string>
|
||||
<string name="settings_key_max_font_size_scale" translatable="false">pref_max_font_size_scale</string>
|
||||
<string name="settings_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>
|
||||
<string name="settings_key_lock_barcode_orientation" translatable="false">pref_lock_barcode_orientation</string>
|
||||
<string name="settings_keep_screen_on">Keep screen on</string>
|
||||
<string name="settings_key_keep_screen_on" translatable="false">pref_keep_screen_on</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Prevent screen lock</string>
|
||||
@@ -115,6 +121,8 @@
|
||||
<string name="sharedpreference_sort" translatable="false">sharedpreference_sort</string>
|
||||
<string name="sharedpreference_sort_order" translatable="false">sharedpreference_sort_order</string>
|
||||
<string name="sharedpreference_sort_direction" translatable="false">sharedpreference_sort_direction</string>
|
||||
<string name="sharedpreference_card_details" translatable="false">sharedpreference_card_details</string>
|
||||
<string name="sharedpreference_card_details_show" translatable="false">sharedpreference_card_details_show</string>
|
||||
<string name="intent_import_card_from_url_share_text">I want to share a card with you</string>
|
||||
<string name="intent_import_card_from_url_host_catima_app" translatable="false">catima.app</string>
|
||||
<string name="intent_import_card_from_url_path_prefix_catima_app" translatable="false">/share</string>
|
||||
@@ -269,4 +277,17 @@
|
||||
<string name="starred">Starred</string>
|
||||
<string name="set_scale">Set scale</string>
|
||||
<string name="include_if_asking_support">If you want to request support, include the following info:</string>
|
||||
<string name="duplicateCard">Duplicate</string>
|
||||
<string name="archive">Archive</string>
|
||||
<string name="unarchive">Unarchive</string>
|
||||
<string name="archived">Card archived</string>
|
||||
<string name="unarchived">Card unarchived</string>
|
||||
<string name="archiveList">Archive</string>
|
||||
<string name="overflowMenu" translatable="false">Overflow menu</string>
|
||||
<string name="noUnarchivedCardsMessage">No unarchived cards exist</string>
|
||||
<string name="failedLaunchingPhotoPicker">Could not find a supported gallery app</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> card (<xliff:g id="archivedCount">%2$d</xliff:g> archived)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> cards (<xliff:g id="archivedCount">%2$d</xliff:g> archived)</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
@@ -58,10 +58,12 @@
|
||||
app:iconSpaceReserved="false"
|
||||
app:singleLineTitle="false" />
|
||||
|
||||
<SwitchPreferenceCompat
|
||||
android:defaultValue="false"
|
||||
android:key="@string/settings_key_lock_barcode_orientation"
|
||||
android:title="@string/settings_lock_barcode_orientation"
|
||||
<ListPreference
|
||||
android:defaultValue="@string/settings_key_follow_system_orientation"
|
||||
android:entries="@array/card_orientation_values_strings"
|
||||
android:entryValues="@array/card_orientation_values"
|
||||
android:key="@string/settings_key_card_orientation"
|
||||
android:title="@string/settings_card_orientation"
|
||||
app:iconSpaceReserved="false"
|
||||
app:singleLineTitle="false" />
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ public class DatabaseTest {
|
||||
@Test
|
||||
public void addRemoveOneGiftCard() {
|
||||
assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
@@ -60,6 +60,7 @@ public class DatabaseTest {
|
||||
assertEquals(BarcodeFormat.UPC_A, loyaltyCard.barcodeType.format());
|
||||
assertEquals(DEFAULT_HEADER_COLOR, loyaltyCard.headerColor);
|
||||
assertEquals(0, loyaltyCard.starStatus);
|
||||
assertEquals(0, loyaltyCard.archiveStatus);
|
||||
|
||||
result = DBHelper.deleteLoyaltyCard(mDatabase, mActivity, 1);
|
||||
assertTrue(result);
|
||||
@@ -69,7 +70,7 @@ public class DatabaseTest {
|
||||
|
||||
@Test
|
||||
public void updateGiftCard() {
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
@@ -90,11 +91,12 @@ public class DatabaseTest {
|
||||
assertEquals(BarcodeFormat.AZTEC, loyaltyCard.barcodeType.format());
|
||||
assertEquals(DEFAULT_HEADER_COLOR, loyaltyCard.headerColor);
|
||||
assertEquals(0, loyaltyCard.starStatus);
|
||||
assertEquals(0, loyaltyCard.archiveStatus);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateGiftCardOnlyStar() {
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
@@ -115,6 +117,7 @@ public class DatabaseTest {
|
||||
assertEquals(BarcodeFormat.UPC_A, loyaltyCard.barcodeType.format());
|
||||
assertEquals(DEFAULT_HEADER_COLOR, loyaltyCard.headerColor);
|
||||
assertEquals(1, loyaltyCard.starStatus);
|
||||
assertEquals(0, loyaltyCard.archiveStatus);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -129,7 +132,7 @@ public class DatabaseTest {
|
||||
|
||||
@Test
|
||||
public void emptyGiftCardValues() {
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "", "", null, new BigDecimal("0"), null, "", null, null, null, 0, null);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "", "", null, new BigDecimal("0"), null, "", null, null, null, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
@@ -146,6 +149,7 @@ public class DatabaseTest {
|
||||
assertEquals(null, loyaltyCard.barcodeType);
|
||||
// headerColor is randomly generated when not given, so skip
|
||||
assertEquals(0, loyaltyCard.starStatus);
|
||||
assertEquals(0, loyaltyCard.archiveStatus);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -156,7 +160,7 @@ public class DatabaseTest {
|
||||
// that they are sorted
|
||||
for (int index = CARDS_TO_ADD - 1; index >= 0; index--) {
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, new BigDecimal("0"), null, "cardId" + index,
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 0, null);
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
}
|
||||
@@ -181,6 +185,7 @@ public class DatabaseTest {
|
||||
assertEquals(BarcodeFormat.UPC_A.toString(), cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE)));
|
||||
assertEquals(index, cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_COLOR)));
|
||||
assertEquals(0, cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STAR_STATUS)));
|
||||
assertEquals(0, cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ARCHIVE_STATUS)));
|
||||
|
||||
cursor.moveToNext();
|
||||
}
|
||||
@@ -200,10 +205,10 @@ public class DatabaseTest {
|
||||
for (int index = CARDS_TO_ADD - 1; index >= 0; index--) {
|
||||
if (index == CARDS_TO_ADD - 1) {
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, new BigDecimal("0"), null, "cardId" + index,
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 1, null);
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 1, null,0);
|
||||
} else {
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, new BigDecimal("0"), null, "cardId" + index,
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 0, null);
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 0, null,0);
|
||||
}
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
@@ -300,7 +305,7 @@ public class DatabaseTest {
|
||||
public void updateGroup() {
|
||||
// Create card
|
||||
assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
@@ -412,7 +417,7 @@ public class DatabaseTest {
|
||||
public void cardAddAndRemoveGroups() {
|
||||
// Create card
|
||||
assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
|
||||
@@ -39,7 +39,6 @@ import java.text.ParseException;
|
||||
import java.time.Duration;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
import java.util.Currency;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
@@ -64,9 +63,6 @@ import static org.robolectric.Shadows.shadowOf;
|
||||
public class ImportExportTest {
|
||||
private Activity activity;
|
||||
private SQLiteDatabase mDatabase;
|
||||
private long nowMs;
|
||||
private long lastYearMs;
|
||||
private final int MONTHS_PER_YEAR = 12;
|
||||
|
||||
private final String BARCODE_DATA = "428311627547";
|
||||
private final CatimaBarcode BARCODE_TYPE = CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A);
|
||||
@@ -77,11 +73,6 @@ public class ImportExportTest {
|
||||
|
||||
activity = Robolectric.setupActivity(MainActivity.class);
|
||||
mDatabase = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
nowMs = System.currentTimeMillis();
|
||||
|
||||
Calendar lastYear = Calendar.getInstance();
|
||||
lastYear.set(Calendar.YEAR, lastYear.get(Calendar.YEAR) - 1);
|
||||
lastYearMs = lastYear.getTimeInMillis();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -95,7 +86,7 @@ public class ImportExportTest {
|
||||
for (int index = cardsToAdd; index > 0; index--) {
|
||||
String storeName = String.format("store, \"%4d", index);
|
||||
String note = String.format("note, \"%4d", index);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0, null);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
}
|
||||
@@ -109,7 +100,7 @@ public class ImportExportTest {
|
||||
for (int index = cardsToAdd; index > 4; index--) {
|
||||
String storeName = String.format("store, \"%4d", index);
|
||||
String note = String.format("note, \"%4d", index);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 1, null);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 1, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
}
|
||||
@@ -117,7 +108,7 @@ public class ImportExportTest {
|
||||
String storeName = String.format("store, \"%4d", index);
|
||||
String note = String.format("note, \"%4d", index);
|
||||
//if index is even
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0, null);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
}
|
||||
@@ -126,7 +117,7 @@ public class ImportExportTest {
|
||||
|
||||
@Test
|
||||
public void addLoyaltyCardsWithExpiryNeverPastTodayFuture() {
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "No Expiry", "", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "No Expiry", "", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
|
||||
@@ -142,7 +133,7 @@ public class ImportExportTest {
|
||||
assertEquals(Integer.valueOf(0), card.headerColor);
|
||||
assertEquals(0, card.starStatus);
|
||||
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "Past", "", new Date((long) 1), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null);
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "Past", "", new Date((long) 1), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null,0);
|
||||
result = (id != -1);
|
||||
assertTrue(result);
|
||||
|
||||
@@ -158,7 +149,7 @@ public class ImportExportTest {
|
||||
assertEquals(Integer.valueOf(0), card.headerColor);
|
||||
assertEquals(0, card.starStatus);
|
||||
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "Today", "", new Date(), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null);
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "Today", "", new Date(), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null,0);
|
||||
result = (id != -1);
|
||||
assertTrue(result);
|
||||
|
||||
@@ -177,7 +168,7 @@ public class ImportExportTest {
|
||||
|
||||
// This will break after 19 January 2038
|
||||
// If someone is still maintaining this code base by then: I love you
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "Future", "", new Date(2147483648000L), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null);
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "Future", "", new Date(2147483648000L), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null,0);
|
||||
result = (id != -1);
|
||||
assertTrue(result);
|
||||
|
||||
@@ -898,7 +889,7 @@ public class ImportExportTest {
|
||||
HashMap<Integer, Bitmap> loyaltyCardIconImages = new HashMap<>();
|
||||
|
||||
// Create card 1
|
||||
int loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 1", "Note 1", new Date(1618053234), new BigDecimal("100"), Currency.getInstance("USD"), "1234", "5432", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), 1, 0, null);
|
||||
int loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 1", "Note 1", new Date(1618053234), new BigDecimal("100"), Currency.getInstance("USD"), "1234", "5432", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), 1, 0, null,0);
|
||||
loyaltyCardHashMap.put(loyaltyCardId, DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId));
|
||||
DBHelper.insertGroup(mDatabase, "One");
|
||||
List<Group> groups = Arrays.asList(DBHelper.getGroup(mDatabase, "One"));
|
||||
@@ -912,7 +903,7 @@ public class ImportExportTest {
|
||||
loyaltyCardIconImages.put(loyaltyCardId, launcherBitmap);
|
||||
|
||||
// Create card 2
|
||||
loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 2", "", null, new BigDecimal(0), null, "123456", null, null, 2, 1, null);
|
||||
loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 2", "", null, new BigDecimal(0), null, "123456", null, null, 2, 1, null,0);
|
||||
loyaltyCardHashMap.put(loyaltyCardId, DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId));
|
||||
|
||||
// Export everything
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user