mirror of
https://github.com/CatimaLoyalty/Android.git
synced 2025-12-25 08:07:56 -05:00
Compare commits
196 Commits
v2.21.1
...
group_db_i
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
70cdb18c51 | ||
|
|
a74e17db10 | ||
|
|
96335d3ee8 | ||
|
|
fb3d945f51 | ||
|
|
843ffbb87e | ||
|
|
99e19321f0 | ||
|
|
4e5a90eb93 | ||
|
|
9745ea671e | ||
|
|
94a63d6e0c | ||
|
|
725ca3b9ca | ||
|
|
46a2164143 | ||
|
|
5304be6f54 | ||
|
|
8321e796f5 | ||
|
|
c1f82e90be | ||
|
|
758f265638 | ||
|
|
590020bb6f | ||
|
|
f18c2a2d0c | ||
|
|
3a17ee83e0 | ||
|
|
f36d4aebb6 | ||
|
|
71cb1cace4 | ||
|
|
1e4e035281 | ||
|
|
7da4eb6587 | ||
|
|
d454864fa7 | ||
|
|
f5e6d7be71 | ||
|
|
967a17242d | ||
|
|
6c5dd7a713 | ||
|
|
139b144cb3 | ||
|
|
5deacf7ecc | ||
|
|
6e49aea713 | ||
|
|
68257ce3ad | ||
|
|
149a1caeff | ||
|
|
07e5788cb2 | ||
|
|
c072e2e70d | ||
|
|
0701b9b3de | ||
|
|
f84242d97c | ||
|
|
79f35ed715 | ||
|
|
eff4f3f8df | ||
|
|
ee405f670d | ||
|
|
7dcb9b336d | ||
|
|
923e6dc062 | ||
|
|
2ea04e8715 | ||
|
|
f264941ae4 | ||
|
|
e6ef5c9bb2 | ||
|
|
024cc2d50e | ||
|
|
48b62f6aea | ||
|
|
ff07fe71cc | ||
|
|
402cf57c29 | ||
|
|
e19ac0d0c2 | ||
|
|
fc5d4a6435 | ||
|
|
50754a3430 | ||
|
|
0375f6dbe5 | ||
|
|
deb808ffb6 | ||
|
|
166c1e7bc6 | ||
|
|
bfa19d0166 | ||
|
|
f92805ec64 | ||
|
|
73e6e9f34a | ||
|
|
6a76681412 | ||
|
|
f05a5dde1e | ||
|
|
4a93ba3478 | ||
|
|
af43138ae9 | ||
|
|
dcd6e4b9a9 | ||
|
|
0ce2395605 | ||
|
|
89dbc9e9aa | ||
|
|
788a8f0efe | ||
|
|
d0c9ae2a4a | ||
|
|
c000a8129c | ||
|
|
bfb4fdb61c | ||
|
|
1929401d3e | ||
|
|
eef13a1a91 | ||
|
|
64f340d798 | ||
|
|
f12422fc07 | ||
|
|
d78315ef12 | ||
|
|
af8c3eeb54 | ||
|
|
16e4205028 | ||
|
|
399aa767d2 | ||
|
|
96c735cf80 | ||
|
|
50a8395ec6 | ||
|
|
c720ca1085 | ||
|
|
d82088f66a | ||
|
|
1fce3e17f6 | ||
|
|
569db96f81 | ||
|
|
b7cb1dffc1 | ||
|
|
e17fc66d35 | ||
|
|
8dac7ae9d1 | ||
|
|
28a0417fa8 | ||
|
|
58d4bd7f47 | ||
|
|
1779aef162 | ||
|
|
557ec68428 | ||
|
|
96a7c8ee36 | ||
|
|
3a9b92231e | ||
|
|
f1753ea943 | ||
|
|
36ab78ec6e | ||
|
|
8a3a782558 | ||
|
|
2c5606bf0a | ||
|
|
5eb36aad5b | ||
|
|
b028d32e2c | ||
|
|
dfefdda9f9 | ||
|
|
bc1cc68f27 | ||
|
|
386a5f75b0 | ||
|
|
d30a9fd1e5 | ||
|
|
0c8e5576b8 | ||
|
|
93e40c08aa | ||
|
|
24eb1e9627 | ||
|
|
19e6b8bea9 | ||
|
|
87f844943e | ||
|
|
718738ff78 | ||
|
|
d7bb019068 | ||
|
|
f925404ab7 | ||
|
|
38495546e0 | ||
|
|
36e7ea5b20 | ||
|
|
85d53ae3c7 | ||
|
|
e9b6b5682e | ||
|
|
0abc583d10 | ||
|
|
8c91d30b4c | ||
|
|
76e8715ab2 | ||
|
|
f5f2edca75 | ||
|
|
e648e22ecc | ||
|
|
02b020e9e5 | ||
|
|
e7dc3cd511 | ||
|
|
eb3ac53e46 | ||
|
|
dd683b4a8c | ||
|
|
e90ba5d2db | ||
|
|
07cff7eac4 | ||
|
|
3eea18fc82 | ||
|
|
5d3ceb6d49 | ||
|
|
3dc7a25d88 | ||
|
|
95e02d1646 | ||
|
|
81ecf8ba92 | ||
|
|
bf0e1a2e77 | ||
|
|
4d1c9244fd | ||
|
|
1f1e523100 | ||
|
|
cb32cf9e52 | ||
|
|
af812d8cda | ||
|
|
c8a7addc52 | ||
|
|
3e64d7c5ad | ||
|
|
277462a939 | ||
|
|
24623d5c58 | ||
|
|
4b25b7ad39 | ||
|
|
4016d5499b | ||
|
|
d8b96a8c5f | ||
|
|
614753303f | ||
|
|
50a344b97f | ||
|
|
2cd6da6ffc | ||
|
|
c03fba133f | ||
|
|
f3cba588f6 | ||
|
|
ad364ad0ac | ||
|
|
f4cff85d93 | ||
|
|
cbc86ff131 | ||
|
|
5f733474a9 | ||
|
|
89a13cecf5 | ||
|
|
fd2400eaf5 | ||
|
|
9598f2f4ff | ||
|
|
acca53787c | ||
|
|
060e360344 | ||
|
|
9ef014e05c | ||
|
|
4cb27d3bd5 | ||
|
|
95e21cc112 | ||
|
|
d5f915a290 | ||
|
|
42e89bb5cc | ||
|
|
048fb48300 | ||
|
|
b1c82dbae0 | ||
|
|
ea8c6f96f7 | ||
|
|
201ec78694 | ||
|
|
05a03455c1 | ||
|
|
63f4cbb8ca | ||
|
|
a444607476 | ||
|
|
89102ad0bf | ||
|
|
d2623b8690 | ||
|
|
80ddd48184 | ||
|
|
410a619a70 | ||
|
|
1771f42860 | ||
|
|
1e7af7ab4e | ||
|
|
f4c5af04e3 | ||
|
|
5bcd2cdc32 | ||
|
|
c69a5ae4d2 | ||
|
|
6bd750a60b | ||
|
|
8d77cc3565 | ||
|
|
7a99e0056d | ||
|
|
03e07bc48d | ||
|
|
460d6c2b71 | ||
|
|
9f946094db | ||
|
|
4e92f82176 | ||
|
|
7b905ac120 | ||
|
|
55c5ec929c | ||
|
|
5441231f03 | ||
|
|
1818d24bc0 | ||
|
|
ca88c070c3 | ||
|
|
1be387c4ec | ||
|
|
fa3a956d69 | ||
|
|
8fd244e3a3 | ||
|
|
a0e2fe11dd | ||
|
|
893f34e72a | ||
|
|
cf13a9fc60 | ||
|
|
c6e6d96313 | ||
|
|
20ed9cac88 | ||
|
|
ae6bd937a9 |
4
.github/workflows/android.yml
vendored
4
.github/workflows/android.yml
vendored
@@ -3,12 +3,12 @@ name: Android CI
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
- staging
|
||||
- trying
|
||||
pull_request:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
name: Compress Images on Push to Master
|
||||
name: Compress Images on Push to Main
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
paths:
|
||||
- '**.jpg'
|
||||
- '**.jpeg'
|
||||
|
||||
2
.github/workflows/changelog-to-fastlane.yml
vendored
2
.github/workflows/changelog-to-fastlane.yml
vendored
@@ -2,7 +2,7 @@ name: Convert CHANGELOG to Fastlane
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
- main
|
||||
|
||||
jobs:
|
||||
convert_changelog_to_fastlane:
|
||||
|
||||
2
.github/workflows/contributors-to-file.yml
vendored
2
.github/workflows/contributors-to-file.yml
vendored
@@ -6,7 +6,7 @@ on:
|
||||
jobs:
|
||||
contributors_to_file:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.ref == 'refs/heads/master'
|
||||
if: github.ref == 'refs/heads/main'
|
||||
name: Write contributors to file
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
|
||||
10
.github/workflows/gradle-wrapper-validation.yml
vendored
Normal file
10
.github/workflows/gradle-wrapper-validation.yml
vendored
Normal file
@@ -0,0 +1,10 @@
|
||||
name: "Validate Gradle Wrapper"
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
validation:
|
||||
name: "Validation"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: gradle/wrapper-validation-action@v1
|
||||
5
.gitignore
vendored
5
.gitignore
vendored
@@ -8,3 +8,8 @@ captures/
|
||||
**/release
|
||||
**/debug
|
||||
app/*.log
|
||||
|
||||
# Bundle
|
||||
/.bundle/
|
||||
/vendor/bundle
|
||||
/lib/bundler/man/
|
||||
|
||||
11
CHANGELOG.md
11
CHANGELOG.md
@@ -1,5 +1,14 @@
|
||||
# Changelog
|
||||
|
||||
## Unreleased - 118
|
||||
|
||||
- Support setting start of card validity
|
||||
|
||||
## v2.21.2 - 117
|
||||
|
||||
- Remove unnecessary permissions
|
||||
- Target Android 13
|
||||
|
||||
## v2.21.1 - 116
|
||||
|
||||
- Fix quick spend dialog not allowing , separator
|
||||
@@ -604,7 +613,7 @@ Additional features/improvements:
|
||||
## v0.7 - 7 (2016-07-14)
|
||||
|
||||
- Long-click of a card brings up option to copy card ID to the clipboard. ([pull #49](https://github.com/brarcher/loyalty-card-locker/issues/49))
|
||||
- Back button on Input/Export view now works, moving user to main view
|
||||
- Back button on Import/Export view now works, moving user to main view
|
||||
|
||||
## v0.6 - 6 (2016-05-23)
|
||||
|
||||
|
||||
@@ -100,5 +100,5 @@ your real name, saying:
|
||||
Finally, you will need to submit your patches so that they can be reviewed
|
||||
and potentially merged into the main Catima repository. The preferred
|
||||
way to do this is to submit a Pull Request to the Catima project.
|
||||
Changes need to apply cleanly onto the master branch and pass all
|
||||
Changes need to apply cleanly onto the main branch and pass all
|
||||
unit tests and produce no errors during static analysis.
|
||||
|
||||
80
Gemfile.lock
80
Gemfile.lock
@@ -1,27 +1,27 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
CFPropertyList (3.0.5)
|
||||
CFPropertyList (3.0.6)
|
||||
rexml
|
||||
addressable (2.8.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
addressable (2.8.1)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
artifactory (3.0.15)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.2.0)
|
||||
aws-partitions (1.597.0)
|
||||
aws-sdk-core (3.131.1)
|
||||
aws-partitions (1.701.0)
|
||||
aws-sdk-core (3.170.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
aws-partitions (~> 1, >= 1.525.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-partitions (~> 1, >= 1.651.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-kms (1.57.0)
|
||||
aws-sdk-core (~> 3, >= 3.127.0)
|
||||
aws-sdk-kms (1.62.0)
|
||||
aws-sdk-core (~> 3, >= 3.165.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.114.0)
|
||||
aws-sdk-core (~> 3, >= 3.127.0)
|
||||
aws-sdk-s3 (1.119.0)
|
||||
aws-sdk-core (~> 3, >= 3.165.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.4)
|
||||
aws-sigv4 (1.5.0)
|
||||
aws-sigv4 (1.5.2)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
claide (1.1.0)
|
||||
@@ -34,10 +34,10 @@ GEM
|
||||
rake (>= 12.0.0, < 14.0.0)
|
||||
domain_name (0.5.20190701)
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
dotenv (2.7.6)
|
||||
dotenv (2.8.1)
|
||||
emoji_regex (3.2.3)
|
||||
excon (0.92.3)
|
||||
faraday (1.10.0)
|
||||
excon (0.98.0)
|
||||
faraday (1.10.3)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
faraday-excon (~> 1.1)
|
||||
@@ -66,7 +66,7 @@ GEM
|
||||
faraday_middleware (1.2.0)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.2.6)
|
||||
fastlane (2.206.2)
|
||||
fastlane (2.211.0)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
@@ -106,9 +106,9 @@ GEM
|
||||
xcpretty (~> 0.3.0)
|
||||
xcpretty-travis-formatter (>= 0.0.3)
|
||||
gh_inspector (1.1.3)
|
||||
google-apis-androidpublisher_v3 (0.21.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-core (0.5.0)
|
||||
google-apis-androidpublisher_v3 (0.32.0)
|
||||
google-apis-core (>= 0.9.1, < 2.a)
|
||||
google-apis-core (0.10.0)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
httpclient (>= 2.8.1, < 3.a)
|
||||
@@ -117,27 +117,27 @@ GEM
|
||||
retriable (>= 2.0, < 4.a)
|
||||
rexml
|
||||
webrick
|
||||
google-apis-iamcredentials_v1 (0.10.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.7.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-storage_v1 (0.14.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-iamcredentials_v1 (0.16.0)
|
||||
google-apis-core (>= 0.9.1, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.12.0)
|
||||
google-apis-core (>= 0.9.1, < 2.a)
|
||||
google-apis-storage_v1 (0.19.0)
|
||||
google-apis-core (>= 0.9.0, < 2.a)
|
||||
google-cloud-core (1.6.0)
|
||||
google-cloud-env (~> 1.0)
|
||||
google-cloud-errors (~> 1.0)
|
||||
google-cloud-env (1.6.0)
|
||||
faraday (>= 0.17.3, < 3.0)
|
||||
google-cloud-errors (1.2.0)
|
||||
google-cloud-storage (1.36.2)
|
||||
google-cloud-errors (1.3.0)
|
||||
google-cloud-storage (1.44.0)
|
||||
addressable (~> 2.8)
|
||||
digest-crc (~> 0.4)
|
||||
google-apis-iamcredentials_v1 (~> 0.1)
|
||||
google-apis-storage_v1 (~> 0.1)
|
||||
google-apis-storage_v1 (~> 0.19.0)
|
||||
google-cloud-core (~> 1.6)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
mini_mime (~> 1.0)
|
||||
googleauth (1.1.3)
|
||||
googleauth (1.3.0)
|
||||
faraday (>= 0.17.3, < 3.a)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
memoist (~> 0.16)
|
||||
@@ -148,11 +148,11 @@ GEM
|
||||
http-cookie (1.0.5)
|
||||
domain_name (~> 0.5)
|
||||
httpclient (2.8.3)
|
||||
jmespath (1.6.1)
|
||||
json (2.6.2)
|
||||
jwt (2.4.1)
|
||||
jmespath (1.6.2)
|
||||
json (2.6.3)
|
||||
jwt (2.6.0)
|
||||
memoist (0.16.2)
|
||||
mini_magick (4.11.0)
|
||||
mini_magick (4.12.0)
|
||||
mini_mime (1.1.2)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.0.0)
|
||||
@@ -161,7 +161,7 @@ GEM
|
||||
optparse (0.1.1)
|
||||
os (1.1.4)
|
||||
plist (3.6.0)
|
||||
public_suffix (4.0.7)
|
||||
public_suffix (5.0.1)
|
||||
rake (13.0.6)
|
||||
representable (3.2.0)
|
||||
declarative (< 0.1.0)
|
||||
@@ -173,12 +173,12 @@ GEM
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.3.2)
|
||||
security (0.1.3)
|
||||
signet (0.16.1)
|
||||
signet (0.17.0)
|
||||
addressable (~> 2.8)
|
||||
faraday (>= 0.17.5, < 3.0)
|
||||
faraday (>= 0.17.5, < 3.a)
|
||||
jwt (>= 1.5, < 3.0)
|
||||
multi_json (~> 1.10)
|
||||
simctl (1.6.8)
|
||||
simctl (1.6.10)
|
||||
CFPropertyList
|
||||
naturally
|
||||
terminal-notifier (2.0.0)
|
||||
@@ -194,9 +194,9 @@ GEM
|
||||
unf_ext
|
||||
unf_ext (0.0.8.2)
|
||||
unicode-display_width (1.8.0)
|
||||
webrick (1.7.0)
|
||||
webrick (1.8.1)
|
||||
word_wrap (1.0.0)
|
||||
xcodeproj (1.21.0)
|
||||
xcodeproj (1.22.0)
|
||||
CFPropertyList (>= 2.3.3, < 4.0)
|
||||
atomos (~> 0.1.3)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
@@ -215,4 +215,4 @@ DEPENDENCIES
|
||||
fastlane
|
||||
|
||||
BUNDLED WITH
|
||||
2.1.4
|
||||
2.3.26
|
||||
|
||||
@@ -13,14 +13,14 @@ spotbugs {
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdk 31
|
||||
compileSdk 33
|
||||
|
||||
defaultConfig {
|
||||
applicationId "me.hackerchick.catima"
|
||||
minSdk 21
|
||||
targetSdk 31
|
||||
versionCode 116
|
||||
versionName "2.21.1"
|
||||
targetSdk 33
|
||||
versionCode 117
|
||||
versionName "2.21.2"
|
||||
|
||||
vectorDrawables.useSupportLibrary true
|
||||
multiDexEnabled true
|
||||
@@ -84,9 +84,9 @@ android {
|
||||
|
||||
dependencies {
|
||||
// AndroidX
|
||||
implementation 'androidx.appcompat:appcompat:1.4.2'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
|
||||
implementation 'androidx.exifinterface:exifinterface:1.3.3'
|
||||
implementation 'androidx.appcompat:appcompat:1.6.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
implementation 'androidx.exifinterface:exifinterface:1.3.5'
|
||||
implementation 'androidx.palette:palette:1.0.0'
|
||||
implementation 'androidx.preference:preference:1.2.0'
|
||||
implementation 'com.google.android.material:material:1.6.1'
|
||||
@@ -102,15 +102,15 @@ dependencies {
|
||||
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.11.2'
|
||||
implementation 'net.lingala.zip4j:zip4j:2.11.5'
|
||||
|
||||
// SpotBugs
|
||||
implementation 'io.wcm.tooling.spotbugs:io.wcm.tooling.spotbugs.annotations:1.0.0'
|
||||
|
||||
// Testing
|
||||
testImplementation 'androidx.test:core:1.4.0'
|
||||
testImplementation 'androidx.test:core:1.5.0'
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
testImplementation 'org.robolectric:robolectric:4.9'
|
||||
testImplementation 'org.robolectric:robolectric:4.9.2'
|
||||
}
|
||||
|
||||
tasks.withType(SpotBugsTask) {
|
||||
|
||||
@@ -6,8 +6,7 @@
|
||||
<uses-sdk tools:overrideLibrary="com.google.zxing.client.android" />
|
||||
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="23" />
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
|
||||
@@ -34,7 +34,7 @@ public class AboutActivity extends CatimaAppCompatActivity {
|
||||
|
||||
binding.versionHistory.setTag("https://catima.app/changelog/");
|
||||
binding.translate.setTag("https://hosted.weblate.org/engage/catima/");
|
||||
binding.license.setTag("https://github.com/CatimaLoyalty/Android/blob/master/LICENSE");
|
||||
binding.license.setTag("https://github.com/CatimaLoyalty/Android/blob/main/LICENSE");
|
||||
binding.repo.setTag("https://github.com/CatimaLoyalty/Android/");
|
||||
binding.privacy.setTag("https://catima.app/privacy-policy/");
|
||||
binding.reportError.setTag("https://github.com/CatimaLoyalty/Android/issues");
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
@@ -49,4 +50,7 @@ public class CatimaAppCompatActivity extends AppCompatActivity {
|
||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void onMockedRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,11 +21,12 @@ 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 = 15;
|
||||
public static final int DATABASE_VERSION = 17;
|
||||
|
||||
public static class LoyaltyCardDbGroups {
|
||||
public static final String TABLE = "groups";
|
||||
public static final String ID = "_id";
|
||||
public static final String NAME = "name";
|
||||
public static final String ORDER = "orderId";
|
||||
}
|
||||
|
||||
@@ -33,6 +34,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
public static final String TABLE = "cards";
|
||||
public static final String ID = "_id";
|
||||
public static final String STORE = "store";
|
||||
public static final String VALID_FROM = "validfrom";
|
||||
public static final String EXPIRY = "expiry";
|
||||
public static final String BALANCE = "balance";
|
||||
public static final String BALANCE_TYPE = "balancetype";
|
||||
@@ -86,7 +88,8 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
public void onCreate(SQLiteDatabase db) {
|
||||
// create table for card groups
|
||||
db.execSQL("CREATE TABLE " + LoyaltyCardDbGroups.TABLE + "(" +
|
||||
LoyaltyCardDbGroups.ID + " TEXT primary key not null," +
|
||||
LoyaltyCardDbGroups.ID + " INTEGER primary key autoincrement," +
|
||||
LoyaltyCardDbGroups.NAME + " TEXT not null," +
|
||||
LoyaltyCardDbGroups.ORDER + " INTEGER DEFAULT '0')");
|
||||
|
||||
// create table for cards
|
||||
@@ -95,6 +98,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
LoyaltyCardDbIds.ID + " INTEGER primary key autoincrement," +
|
||||
LoyaltyCardDbIds.STORE + " TEXT not null," +
|
||||
LoyaltyCardDbIds.NOTE + " TEXT not null," +
|
||||
LoyaltyCardDbIds.VALID_FROM + " INTEGER," +
|
||||
LoyaltyCardDbIds.EXPIRY + " INTEGER," +
|
||||
LoyaltyCardDbIds.BALANCE + " TEXT not null DEFAULT '0'," +
|
||||
LoyaltyCardDbIds.BALANCE_TYPE + " TEXT," +
|
||||
@@ -110,7 +114,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
// create associative table for cards in groups
|
||||
db.execSQL("CREATE TABLE " + LoyaltyCardDbIdsGroups.TABLE + "(" +
|
||||
LoyaltyCardDbIdsGroups.cardID + " INTEGER," +
|
||||
LoyaltyCardDbIdsGroups.groupID + " TEXT," +
|
||||
LoyaltyCardDbIdsGroups.groupID + " INTEGER," +
|
||||
"primary key (" + LoyaltyCardDbIdsGroups.cardID + "," + LoyaltyCardDbIdsGroups.groupID + "))");
|
||||
|
||||
// create FTS search table
|
||||
@@ -314,6 +318,75 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
|
||||
+ " ADD COLUMN " + LoyaltyCardDbIds.ARCHIVE_STATUS + " INTEGER DEFAULT '0' ");
|
||||
}
|
||||
|
||||
if (oldVersion < 16 && newVersion >= 16) {
|
||||
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
|
||||
+ " ADD COLUMN " + LoyaltyCardDbIds.VALID_FROM + " INTEGER");
|
||||
}
|
||||
|
||||
if (oldVersion < 17 && newVersion >= 17) {
|
||||
// SQLite doesn't support modify column
|
||||
// So we need to create a temp column to change the key of the group table
|
||||
// https://www.sqlite.org/faq.html#q11
|
||||
db.beginTransaction();
|
||||
|
||||
// Step 1: Migrate LoyaltyCardDbGroups to contain integer ID
|
||||
db.execSQL("CREATE TEMPORARY TABLE tmp (" +
|
||||
LoyaltyCardDbGroups.ID + " INTEGER primary key autoincrement," +
|
||||
LoyaltyCardDbGroups.NAME + " TEXT not null," +
|
||||
LoyaltyCardDbGroups.ORDER + " INTEGER DEFAULT '0')");
|
||||
|
||||
db.execSQL("INSERT INTO tmp (" +
|
||||
LoyaltyCardDbGroups.NAME + " ," +
|
||||
LoyaltyCardDbGroups.ORDER + ")" +
|
||||
" SELECT " +
|
||||
LoyaltyCardDbGroups.NAME + " ," +
|
||||
LoyaltyCardDbGroups.ORDER +
|
||||
" FROM " + LoyaltyCardDbGroups.TABLE);
|
||||
|
||||
db.execSQL("DROP TABLE " + LoyaltyCardDbGroups.TABLE);
|
||||
|
||||
db.execSQL("CREATE TABLE " + LoyaltyCardDbGroups.TABLE + "(" +
|
||||
LoyaltyCardDbGroups.ID + " INTEGER primary key autoincrement," +
|
||||
LoyaltyCardDbGroups.NAME + " TEXT not null," +
|
||||
LoyaltyCardDbGroups.ORDER + " INTEGER DEFAULT '0')");
|
||||
|
||||
db.execSQL("INSERT INTO " + LoyaltyCardDbGroups.TABLE + "(" +
|
||||
LoyaltyCardDbGroups.ID + " ," +
|
||||
LoyaltyCardDbGroups.NAME + " ," +
|
||||
LoyaltyCardDbGroups.ORDER + ")" +
|
||||
" SELECT " +
|
||||
LoyaltyCardDbGroups.ID + " ," +
|
||||
LoyaltyCardDbGroups.NAME + " ," +
|
||||
LoyaltyCardDbGroups.ORDER +
|
||||
" FROM tmp");
|
||||
|
||||
db.execSQL("DROP TABLE tmp");
|
||||
|
||||
// Step 2: Migrate LoyaltyCardDbIdsGroups to link to ID
|
||||
db.execSQL("CREATE TEMPORARY TABLE tmp (" +
|
||||
LoyaltyCardDbIdsGroups.cardID + " INTEGER," +
|
||||
LoyaltyCardDbIdsGroups.groupID + " INTEGER," +
|
||||
"primary key (" + LoyaltyCardDbIdsGroups.cardID + "," + LoyaltyCardDbIdsGroups.groupID + "))");
|
||||
|
||||
|
||||
db.execSQL("INSERT INTO tmp (" +
|
||||
LoyaltyCardDbIdsGroups.cardID + " ," +
|
||||
LoyaltyCardDbIdsGroups.groupID + ")" +
|
||||
" SELECT " +
|
||||
LoyaltyCardDbGroups.NAME + " ," +
|
||||
LoyaltyCardDbGroups.ORDER +
|
||||
" FROM " + LoyaltyCardDbGroups.TABLE);
|
||||
|
||||
//////////
|
||||
db.execSQL("CREATE TABLE " + LoyaltyCardDbIdsGroups.TABLE + "(" +
|
||||
LoyaltyCardDbIdsGroups.cardID + " INTEGER," +
|
||||
LoyaltyCardDbIdsGroups.groupID + " INTEGER," +
|
||||
"primary key (" + LoyaltyCardDbIdsGroups.cardID + "," + LoyaltyCardDbIdsGroups.groupID + "))");
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
db.endTransaction();
|
||||
}
|
||||
}
|
||||
|
||||
private static ContentValues generateFTSContentValues(final int id, final String store, final String note) {
|
||||
@@ -358,8 +431,8 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
}
|
||||
|
||||
public static long insertLoyaltyCard(
|
||||
final SQLiteDatabase database, final String store, final String note, final Date expiry,
|
||||
final BigDecimal balance, final Currency balanceType, final String cardId,
|
||||
final SQLiteDatabase database, final String store, final String note, final Date validFrom,
|
||||
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 archiveStatus) {
|
||||
database.beginTransaction();
|
||||
@@ -368,6 +441,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(LoyaltyCardDbIds.STORE, store);
|
||||
contentValues.put(LoyaltyCardDbIds.NOTE, note);
|
||||
contentValues.put(LoyaltyCardDbIds.VALID_FROM, validFrom != null ? validFrom.getTime() : null);
|
||||
contentValues.put(LoyaltyCardDbIds.EXPIRY, expiry != null ? expiry.getTime() : null);
|
||||
contentValues.put(LoyaltyCardDbIds.BALANCE, balance.toString());
|
||||
contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType != null ? balanceType.getCurrencyCode() : null);
|
||||
@@ -391,9 +465,10 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
|
||||
public static long insertLoyaltyCard(
|
||||
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 int archiveStatus) {
|
||||
final Date validFrom, 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 archiveStatus) {
|
||||
database.beginTransaction();
|
||||
|
||||
// Card
|
||||
@@ -401,6 +476,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
contentValues.put(LoyaltyCardDbIds.ID, id);
|
||||
contentValues.put(LoyaltyCardDbIds.STORE, store);
|
||||
contentValues.put(LoyaltyCardDbIds.NOTE, note);
|
||||
contentValues.put(LoyaltyCardDbIds.VALID_FROM, validFrom != null ? validFrom.getTime() : null);
|
||||
contentValues.put(LoyaltyCardDbIds.EXPIRY, expiry != null ? expiry.getTime() : null);
|
||||
contentValues.put(LoyaltyCardDbIds.BALANCE, balance.toString());
|
||||
contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType != null ? balanceType.getCurrencyCode() : null);
|
||||
@@ -424,15 +500,17 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
|
||||
public static boolean updateLoyaltyCard(
|
||||
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 int archiveStatus) {
|
||||
final Date validFrom, 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 archiveStatus) {
|
||||
database.beginTransaction();
|
||||
|
||||
// Card
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(LoyaltyCardDbIds.STORE, store);
|
||||
contentValues.put(LoyaltyCardDbIds.NOTE, note);
|
||||
contentValues.put(LoyaltyCardDbIds.VALID_FROM, validFrom != null ? validFrom.getTime() : null);
|
||||
contentValues.put(LoyaltyCardDbIds.EXPIRY, expiry != null ? expiry.getTime() : null);
|
||||
contentValues.put(LoyaltyCardDbIds.BALANCE, balance.toString());
|
||||
contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType != null ? balanceType.getCurrencyCode() : null);
|
||||
|
||||
@@ -43,8 +43,6 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
|
||||
private ImportExportActivityBinding binding;
|
||||
private static final String TAG = "Catima";
|
||||
|
||||
private static final int PERMISSIONS_EXTERNAL_STORAGE = 1;
|
||||
|
||||
private ImportExportTask importExporter;
|
||||
|
||||
private String importAlertTitle;
|
||||
@@ -68,19 +66,6 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
|
||||
setSupportActionBar(toolbar);
|
||||
enableToolbarBackButton();
|
||||
|
||||
// If the application does not have permissions to external
|
||||
// storage, ask for it now
|
||||
|
||||
if (ContextCompat.checkSelfPermission(ImportExportActivity.this,
|
||||
Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED ||
|
||||
ContextCompat.checkSelfPermission(ImportExportActivity.this,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
|
||||
ActivityCompat.requestPermissions(ImportExportActivity.this,
|
||||
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
|
||||
Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||||
PERMISSIONS_EXTERNAL_STORAGE);
|
||||
}
|
||||
|
||||
Intent fileIntent = getIntent();
|
||||
if (fileIntent != null && fileIntent.getType() != null) {
|
||||
chooseImportType(false, fileIntent.getData());
|
||||
@@ -312,30 +297,6 @@ public class ImportExportActivity extends CatimaAppCompatActivity {
|
||||
mTasks.executeTask(TaskHandler.TYPE.EXPORT, importExporter);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
|
||||
if (requestCode == PERMISSIONS_EXTERNAL_STORAGE) {
|
||||
// If request is cancelled, the result arrays are empty.
|
||||
boolean success = grantResults.length > 0;
|
||||
|
||||
for (int grant : grantResults) {
|
||||
if (grant != PackageManager.PERMISSION_GRANTED) {
|
||||
success = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!success) {
|
||||
// External storage permission rejected, inform user that
|
||||
// import/export is prevented
|
||||
Toast.makeText(getApplicationContext(), R.string.noExternalStoragePermissionError,
|
||||
Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
mTasks.flushTaskList(TaskHandler.TYPE.IMPORT, true, false, false);
|
||||
|
||||
@@ -18,6 +18,7 @@ import java.util.List;
|
||||
public class ImportURIHelper {
|
||||
private static final String STORE = DBHelper.LoyaltyCardDbIds.STORE;
|
||||
private static final String NOTE = DBHelper.LoyaltyCardDbIds.NOTE;
|
||||
private static final String VALID_FROM = DBHelper.LoyaltyCardDbIds.VALID_FROM;
|
||||
private static final String EXPIRY = DBHelper.LoyaltyCardDbIds.EXPIRY;
|
||||
private static final String BALANCE = DBHelper.LoyaltyCardDbIds.BALANCE;
|
||||
private static final String BALANCE_TYPE = DBHelper.LoyaltyCardDbIds.BALANCE_TYPE;
|
||||
@@ -62,6 +63,7 @@ public class ImportURIHelper {
|
||||
try {
|
||||
// These values are allowed to be null
|
||||
CatimaBarcode barcodeType = null;
|
||||
Date validFrom = null;
|
||||
Date expiry = null;
|
||||
BigDecimal balance = new BigDecimal("0");
|
||||
Currency balanceType = null;
|
||||
@@ -106,6 +108,10 @@ public class ImportURIHelper {
|
||||
if (unparsedBalanceType != null && !unparsedBalanceType.equals("")) {
|
||||
balanceType = Currency.getInstance(unparsedBalanceType);
|
||||
}
|
||||
String unparsedValidFrom = kv.get(VALID_FROM);
|
||||
if (unparsedValidFrom != null && !unparsedValidFrom.equals("")) {
|
||||
validFrom = new Date(Long.parseLong(unparsedValidFrom));
|
||||
}
|
||||
String unparsedExpiry = kv.get(EXPIRY);
|
||||
if (unparsedExpiry != null && !unparsedExpiry.equals("")) {
|
||||
expiry = new Date(Long.parseLong(unparsedExpiry));
|
||||
@@ -116,8 +122,8 @@ public class ImportURIHelper {
|
||||
headerColor = Integer.parseInt(unparsedHeaderColor);
|
||||
}
|
||||
|
||||
return new LoyaltyCard(-1, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, 0, Utils.getUnixTime(), 100,0);
|
||||
} catch (NullPointerException | NumberFormatException | UnsupportedEncodingException ex) {
|
||||
return new LoyaltyCard(-1, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, 0, Utils.getUnixTime(), 100, 0);
|
||||
} catch (NullPointerException | NumberFormatException | UnsupportedEncodingException | ArrayIndexOutOfBoundsException ex) {
|
||||
throw new InvalidObjectException("Not a valid import URI");
|
||||
}
|
||||
}
|
||||
@@ -149,6 +155,9 @@ public class ImportURIHelper {
|
||||
if (loyaltyCard.balanceType != null) {
|
||||
fragment = appendFragment(fragment, BALANCE_TYPE, loyaltyCard.balanceType.getCurrencyCode());
|
||||
}
|
||||
if (loyaltyCard.validFrom != null) {
|
||||
fragment = appendFragment(fragment, VALID_FROM, String.valueOf(loyaltyCard.validFrom.getTime()));
|
||||
}
|
||||
if (loyaltyCard.expiry != null) {
|
||||
fragment = appendFragment(fragment, EXPIRY, String.valueOf(loyaltyCard.expiry.getTime()));
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ public class LoyaltyCard implements Parcelable {
|
||||
public final int id;
|
||||
public final String store;
|
||||
public final String note;
|
||||
public final Date validFrom;
|
||||
public final Date expiry;
|
||||
public final BigDecimal balance;
|
||||
public final Currency balanceType;
|
||||
@@ -33,14 +34,16 @@ public class LoyaltyCard implements Parcelable {
|
||||
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,
|
||||
public LoyaltyCard(final int id, final String store, final String note, final Date validFrom,
|
||||
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, final int archiveStatus) {
|
||||
this.id = id;
|
||||
this.store = store;
|
||||
this.note = note;
|
||||
this.validFrom = validFrom;
|
||||
this.expiry = expiry;
|
||||
this.balance = balance;
|
||||
this.balanceType = balanceType;
|
||||
@@ -58,6 +61,8 @@ public class LoyaltyCard implements Parcelable {
|
||||
id = in.readInt();
|
||||
store = in.readString();
|
||||
note = in.readString();
|
||||
long tmpValidFrom = in.readLong();
|
||||
validFrom = tmpValidFrom != -1 ? new Date(tmpValidFrom) : null;
|
||||
long tmpExpiry = in.readLong();
|
||||
expiry = tmpExpiry != -1 ? new Date(tmpExpiry) : null;
|
||||
balance = (BigDecimal) in.readValue(BigDecimal.class.getClassLoader());
|
||||
@@ -79,6 +84,7 @@ public class LoyaltyCard implements Parcelable {
|
||||
parcel.writeInt(id);
|
||||
parcel.writeString(store);
|
||||
parcel.writeString(note);
|
||||
parcel.writeLong(validFrom != null ? validFrom.getTime() : -1);
|
||||
parcel.writeLong(expiry != null ? expiry.getTime() : -1);
|
||||
parcel.writeValue(balance);
|
||||
parcel.writeValue(balanceType);
|
||||
@@ -96,6 +102,7 @@ public class LoyaltyCard implements Parcelable {
|
||||
int id = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ID));
|
||||
String store = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STORE));
|
||||
String note = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.NOTE));
|
||||
long validFromLong = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.VALID_FROM));
|
||||
long expiryLong = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.EXPIRY));
|
||||
BigDecimal balance = new BigDecimal(cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE)));
|
||||
String cardId = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID));
|
||||
@@ -111,6 +118,7 @@ public class LoyaltyCard implements Parcelable {
|
||||
|
||||
CatimaBarcode barcodeType = null;
|
||||
Currency balanceType = null;
|
||||
Date validFrom = null;
|
||||
Date expiry = null;
|
||||
Integer headerColor = null;
|
||||
|
||||
@@ -122,6 +130,10 @@ public class LoyaltyCard implements Parcelable {
|
||||
balanceType = Currency.getInstance(cursor.getString(balanceTypeColumn));
|
||||
}
|
||||
|
||||
if (validFromLong > 0) {
|
||||
validFrom = new Date(validFromLong);
|
||||
}
|
||||
|
||||
if (expiryLong > 0) {
|
||||
expiry = new Date(expiryLong);
|
||||
}
|
||||
@@ -130,7 +142,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,archived);
|
||||
return new LoyaltyCard(id, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starred, lastUsed, zoomLevel, archived);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -120,6 +120,12 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
inputHolder.setExtraField(inputHolder.mBalanceField, null, null);
|
||||
}
|
||||
|
||||
if (mShowDetails && loyaltyCard.validFrom != null) {
|
||||
inputHolder.setExtraField(inputHolder.mValidFromField, DateFormat.getDateInstance(DateFormat.LONG).format(loyaltyCard.validFrom), Utils.isNotYetValid(loyaltyCard.validFrom) ? Color.RED : null);
|
||||
} else {
|
||||
inputHolder.setExtraField(inputHolder.mValidFromField, null, null);
|
||||
}
|
||||
|
||||
if (mShowDetails && loyaltyCard.expiry != null) {
|
||||
inputHolder.setExtraField(inputHolder.mExpiryField, DateFormat.getDateInstance(DateFormat.LONG).format(loyaltyCard.expiry), Utils.hasExpired(loyaltyCard.expiry) ? Color.RED : null);
|
||||
} else {
|
||||
@@ -235,7 +241,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
|
||||
public class LoyaltyCardListItemViewHolder extends RecyclerView.ViewHolder {
|
||||
|
||||
public TextView mStoreField, mNoteField, mBalanceField, mExpiryField;
|
||||
public TextView mStoreField, mNoteField, mBalanceField, mValidFromField, mExpiryField;
|
||||
public ImageView mCardIcon, mStarBackground, mStarBorder, mTickIcon, mArchivedBackground;
|
||||
public MaterialCardView mRow, mIconLayout;
|
||||
public ConstraintLayout mStar, mArchived;
|
||||
@@ -253,6 +259,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
mStoreField = loyaltyCardLayoutBinding.store;
|
||||
mNoteField = loyaltyCardLayoutBinding.note;
|
||||
mBalanceField = loyaltyCardLayoutBinding.balance;
|
||||
mValidFromField = loyaltyCardLayoutBinding.validFrom;
|
||||
mExpiryField = loyaltyCardLayoutBinding.expiry;
|
||||
mIconLayout = loyaltyCardLayoutBinding.iconLayout;
|
||||
mCardIcon = loyaltyCardLayoutBinding.thumbnail;
|
||||
|
||||
@@ -71,6 +71,8 @@ import java.util.concurrent.Callable;
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.widget.AppCompatTextView;
|
||||
@@ -111,6 +113,9 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
private static final int PERMISSION_REQUEST_CAMERA_IMAGE_FRONT = 100;
|
||||
private static final int PERMISSION_REQUEST_CAMERA_IMAGE_BACK = 101;
|
||||
private static final int PERMISSION_REQUEST_CAMERA_IMAGE_ICON = 102;
|
||||
private static final int PERMISSION_REQUEST_STORAGE_IMAGE_FRONT = 103;
|
||||
private static final int PERMISSION_REQUEST_STORAGE_IMAGE_BACK = 104;
|
||||
private static final int PERMISSION_REQUEST_STORAGE_IMAGE_ICON = 105;
|
||||
|
||||
public static final String BUNDLE_ID = "id";
|
||||
public static final String BUNDLE_DUPLICATE_ID = "duplicateId";
|
||||
@@ -127,6 +132,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
EditText storeFieldEdit;
|
||||
EditText noteFieldEdit;
|
||||
ChipGroup groupsChips;
|
||||
AutoCompleteTextView validFromField;
|
||||
AutoCompleteTextView expiryField;
|
||||
EditText balanceField;
|
||||
AutoCompleteTextView balanceCurrencyField;
|
||||
@@ -205,6 +211,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
(int) (fieldName == LoyaltyCardField.id ? value : loyaltyCard.id),
|
||||
(String) (fieldName == LoyaltyCardField.store ? value : loyaltyCard.store),
|
||||
(String) (fieldName == LoyaltyCardField.note ? value : loyaltyCard.note),
|
||||
(Date) (fieldName == LoyaltyCardField.validFrom ? value : loyaltyCard.validFrom),
|
||||
(Date) (fieldName == LoyaltyCardField.expiry ? value : loyaltyCard.expiry),
|
||||
(BigDecimal) (fieldName == LoyaltyCardField.balance ? value : loyaltyCard.balance),
|
||||
(Currency) (fieldName == LoyaltyCardField.balanceType ? value : loyaltyCard.balanceType),
|
||||
@@ -325,6 +332,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
storeFieldEdit = binding.storeNameEdit;
|
||||
noteFieldEdit = binding.noteEdit;
|
||||
groupsChips = binding.groupChips;
|
||||
validFromField = binding.validFromField;
|
||||
expiryField = binding.expiryField;
|
||||
balanceField = binding.balanceField;
|
||||
balanceCurrencyField = binding.balanceCurrencyField;
|
||||
@@ -364,38 +372,9 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
}
|
||||
});
|
||||
|
||||
expiryField.addTextChangedListener(new SimpleTextWatcher() {
|
||||
CharSequence lastValue;
|
||||
addDateFieldTextChangedListener(validFromField, R.string.anyDate, R.string.chooseValidFromDate, LoyaltyCardField.validFrom);
|
||||
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
lastValue = s;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
if (s.toString().equals(getString(R.string.never))) {
|
||||
expiryField.setTag(null);
|
||||
} else if (s.toString().equals(getString(R.string.chooseExpiryDate))) {
|
||||
if (!lastValue.toString().equals(getString(R.string.chooseExpiryDate))) {
|
||||
expiryField.setText(lastValue);
|
||||
}
|
||||
DialogFragment datePickerFragment = new DatePickerFragment(LoyaltyCardEditActivity.this, expiryField);
|
||||
datePickerFragment.show(getSupportFragmentManager(), "datePicker");
|
||||
}
|
||||
|
||||
updateTempState(LoyaltyCardField.expiry, expiryField.getTag());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
ArrayList<String> expiryList = new ArrayList<>();
|
||||
expiryList.add(0, getString(R.string.never));
|
||||
expiryList.add(1, getString(R.string.chooseExpiryDate));
|
||||
ArrayAdapter<String> expiryAdapter = new ArrayAdapter<>(LoyaltyCardEditActivity.this, android.R.layout.select_dialog_item, expiryList);
|
||||
expiryField.setAdapter(expiryAdapter);
|
||||
}
|
||||
});
|
||||
addDateFieldTextChangedListener(expiryField, R.string.never, R.string.chooseExpiryDate, LoyaltyCardField.expiry);
|
||||
|
||||
balanceField.setOnFocusChangeListener((v, hasFocus) -> {
|
||||
if (!hasFocus) {
|
||||
@@ -776,7 +755,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,0);
|
||||
tempLoyaltyCard = new LoyaltyCard(-1, "", "", null, null, new BigDecimal("0"), null, "", null, null, null, 0, Utils.getUnixTime(), 100,0);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -819,7 +798,8 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
|
||||
storeFieldEdit.setText(tempLoyaltyCard.store);
|
||||
noteFieldEdit.setText(tempLoyaltyCard.note);
|
||||
formatExpiryField(this, expiryField, tempLoyaltyCard.expiry);
|
||||
formatDateField(this, validFromField, tempLoyaltyCard.validFrom);
|
||||
formatDateField(this, expiryField, tempLoyaltyCard.expiry);
|
||||
formatBalanceCurrencyField(tempLoyaltyCard.balanceType);
|
||||
cardIdFieldView.setText(tempLoyaltyCard.cardId);
|
||||
barcodeIdField.setText(tempLoyaltyCard.barcodeId != null ? tempLoyaltyCard.barcodeId : getString(R.string.sameAsCardId));
|
||||
@@ -954,13 +934,62 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
}
|
||||
}
|
||||
|
||||
protected static void formatExpiryField(Context context, EditText expiryField, Date expiry) {
|
||||
expiryField.setTag(expiry);
|
||||
protected void addDateFieldTextChangedListener(AutoCompleteTextView dateField, @StringRes int defaultOptionStringId, @StringRes int chooseDateOptionStringId, LoyaltyCardField loyaltyCardField) {
|
||||
dateField.addTextChangedListener(new SimpleTextWatcher() {
|
||||
CharSequence lastValue;
|
||||
|
||||
if (expiry == null) {
|
||||
expiryField.setText(context.getString(R.string.never));
|
||||
@Override
|
||||
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
|
||||
lastValue = s;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
if (s.toString().equals(getString(defaultOptionStringId))) {
|
||||
dateField.setTag(null);
|
||||
} else if (s.toString().equals(getString(chooseDateOptionStringId))) {
|
||||
if (!lastValue.toString().equals(getString(chooseDateOptionStringId))) {
|
||||
dateField.setText(lastValue);
|
||||
}
|
||||
DialogFragment datePickerFragment = new DatePickerFragment(
|
||||
LoyaltyCardEditActivity.this,
|
||||
dateField,
|
||||
// if the expiry date is being set, set date picker's minDate to the 'valid from' date
|
||||
loyaltyCardField == LoyaltyCardField.expiry ? (Date) validFromField.getTag() : null,
|
||||
// if the 'valid from' date is being set, set date picker's maxDate to the expiry date
|
||||
loyaltyCardField == LoyaltyCardField.validFrom ? (Date) expiryField.getTag() : null);
|
||||
datePickerFragment.show(getSupportFragmentManager(), "datePicker");
|
||||
}
|
||||
|
||||
updateTempState(loyaltyCardField, dateField.getTag());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
ArrayList<String> dropdownOptions = new ArrayList<>();
|
||||
dropdownOptions.add(0, getString(defaultOptionStringId));
|
||||
dropdownOptions.add(1, getString(chooseDateOptionStringId));
|
||||
ArrayAdapter<String> dropdownOptionsAdapter = new ArrayAdapter<>(LoyaltyCardEditActivity.this, android.R.layout.select_dialog_item, dropdownOptions);
|
||||
dateField.setAdapter(dropdownOptionsAdapter);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected static void formatDateField(Context context, EditText textField, Date date) {
|
||||
textField.setTag(date);
|
||||
|
||||
if (date == null) {
|
||||
String text;
|
||||
if (textField.getId() == R.id.validFromField) {
|
||||
text = context.getString(R.string.anyDate);
|
||||
} else if (textField.getId() == R.id.expiryField) {
|
||||
text = context.getString(R.string.never);
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unknown textField Id " + textField.getId());
|
||||
}
|
||||
textField.setText(text);
|
||||
} else {
|
||||
expiryField.setText(DateFormat.getDateInstance(DateFormat.LONG).format(expiry));
|
||||
textField.setText(DateFormat.getDateInstance(DateFormat.LONG).format(date));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -981,14 +1010,59 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
|
||||
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||
if (requestCode == PERMISSION_REQUEST_CAMERA_IMAGE_FRONT) {
|
||||
onMockedRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
}
|
||||
|
||||
public void onMockedRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
boolean granted = grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED;
|
||||
Integer failureReason = null;
|
||||
|
||||
if (requestCode == PERMISSION_REQUEST_CAMERA_IMAGE_FRONT) {
|
||||
if (granted) {
|
||||
takePhotoForCard(Utils.CARD_IMAGE_FROM_CAMERA_FRONT);
|
||||
} else if (requestCode == PERMISSION_REQUEST_CAMERA_IMAGE_BACK) {
|
||||
takePhotoForCard(Utils.CARD_IMAGE_FROM_CAMERA_BACK);
|
||||
} else if (requestCode == PERMISSION_REQUEST_CAMERA_IMAGE_ICON) {
|
||||
takePhotoForCard(Utils.CARD_IMAGE_FROM_CAMERA_ICON);
|
||||
return;
|
||||
}
|
||||
|
||||
failureReason = R.string.cameraPermissionRequired;
|
||||
} else if (requestCode == PERMISSION_REQUEST_CAMERA_IMAGE_BACK) {
|
||||
if (granted) {
|
||||
takePhotoForCard(Utils.CARD_IMAGE_FROM_CAMERA_BACK);
|
||||
return;
|
||||
}
|
||||
|
||||
failureReason = R.string.cameraPermissionRequired;
|
||||
} else if (requestCode == PERMISSION_REQUEST_CAMERA_IMAGE_ICON) {
|
||||
if (granted) {
|
||||
takePhotoForCard(Utils.CARD_IMAGE_FROM_CAMERA_ICON);
|
||||
return;
|
||||
}
|
||||
|
||||
failureReason = R.string.cameraPermissionRequired;
|
||||
} else if (requestCode == PERMISSION_REQUEST_STORAGE_IMAGE_FRONT) {
|
||||
if (granted) {
|
||||
selectImageFromGallery(Utils.CARD_IMAGE_FROM_FILE_FRONT);
|
||||
return;
|
||||
}
|
||||
|
||||
failureReason = R.string.storageReadPermissionRequired;
|
||||
} else if (requestCode == PERMISSION_REQUEST_STORAGE_IMAGE_BACK) {
|
||||
if (granted) {
|
||||
selectImageFromGallery(Utils.CARD_IMAGE_FROM_FILE_BACK);
|
||||
return;
|
||||
}
|
||||
|
||||
failureReason = R.string.storageReadPermissionRequired;
|
||||
} else if (requestCode == PERMISSION_REQUEST_STORAGE_IMAGE_ICON) {
|
||||
if (granted) {
|
||||
selectImageFromGallery(Utils.CARD_IMAGE_FROM_FILE_ICON);
|
||||
return;
|
||||
}
|
||||
|
||||
failureReason = R.string.storageReadPermissionRequired;
|
||||
}
|
||||
|
||||
if (failureReason != null) {
|
||||
Toast.makeText(this, failureReason, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1060,6 +1134,24 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
mPhotoTakerLauncher.launch(photoURI);
|
||||
}
|
||||
|
||||
private void selectImageFromGallery(int type) {
|
||||
mRequestedImage = type;
|
||||
|
||||
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
|
||||
photoPickerIntent.setType("image/*");
|
||||
Intent contentIntent = new Intent(Intent.ACTION_GET_CONTENT);
|
||||
contentIntent.setType("image/*");
|
||||
Intent chooserIntent = Intent.createChooser(photoPickerIntent, getString(R.string.addFromImage));
|
||||
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { contentIntent });
|
||||
|
||||
try {
|
||||
mPhotoPickerLauncher.launch(chooserIntent);
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Toast.makeText(getApplicationContext(), R.string.failedLaunchingPhotoPicker, Toast.LENGTH_LONG).show();
|
||||
Log.e(TAG, "No activity found to handle intent", e);
|
||||
}
|
||||
}
|
||||
|
||||
class EditCardIdAndBarcode implements View.OnClickListener {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
@@ -1141,63 +1233,38 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
}
|
||||
|
||||
cardOptions.put(getString(R.string.takePhoto), () -> {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||
int permissionRequestType;
|
||||
int permissionRequestType;
|
||||
|
||||
if (v.getId() == R.id.frontImageHolder) {
|
||||
permissionRequestType = PERMISSION_REQUEST_CAMERA_IMAGE_FRONT;
|
||||
} else if (v.getId() == R.id.backImageHolder) {
|
||||
permissionRequestType = PERMISSION_REQUEST_CAMERA_IMAGE_BACK;
|
||||
} else if (v.getId() == R.id.thumbnail) {
|
||||
permissionRequestType = PERMISSION_REQUEST_CAMERA_IMAGE_ICON;
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unknown ID type " + v.getId());
|
||||
}
|
||||
|
||||
requestPermissions(new String[]{Manifest.permission.CAMERA}, permissionRequestType);
|
||||
} else {
|
||||
int cardImageType;
|
||||
|
||||
if (v.getId() == R.id.frontImageHolder) {
|
||||
cardImageType = Utils.CARD_IMAGE_FROM_CAMERA_FRONT;
|
||||
} else if (v.getId() == R.id.backImageHolder) {
|
||||
cardImageType = Utils.CARD_IMAGE_FROM_CAMERA_BACK;
|
||||
} else if (v.getId() == R.id.thumbnail) {
|
||||
cardImageType = Utils.CARD_IMAGE_FROM_CAMERA_ICON;
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unknown ID type " + v.getId());
|
||||
}
|
||||
|
||||
takePhotoForCard(cardImageType);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
cardOptions.put(getString(R.string.addFromImage), () -> {
|
||||
if (v.getId() == R.id.frontImageHolder) {
|
||||
mRequestedImage = Utils.CARD_IMAGE_FROM_FILE_FRONT;
|
||||
permissionRequestType = PERMISSION_REQUEST_CAMERA_IMAGE_FRONT;
|
||||
} else if (v.getId() == R.id.backImageHolder) {
|
||||
mRequestedImage = Utils.CARD_IMAGE_FROM_FILE_BACK;
|
||||
permissionRequestType = PERMISSION_REQUEST_CAMERA_IMAGE_BACK;
|
||||
} else if (v.getId() == R.id.thumbnail) {
|
||||
mRequestedImage = Utils.CARD_IMAGE_FROM_FILE_ICON;
|
||||
permissionRequestType = PERMISSION_REQUEST_CAMERA_IMAGE_ICON;
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unknown ID type " + v.getId());
|
||||
}
|
||||
|
||||
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
|
||||
photoPickerIntent.setType("image/*");
|
||||
Intent contentIntent = new Intent(Intent.ACTION_GET_CONTENT);
|
||||
contentIntent.setType("image/*");
|
||||
Intent chooserIntent = Intent.createChooser(photoPickerIntent, getString(R.string.addFromImage));
|
||||
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[] { contentIntent });
|
||||
PermissionUtils.requestCameraPermission(LoyaltyCardEditActivity.this, permissionRequestType);
|
||||
|
||||
try {
|
||||
mPhotoPickerLauncher.launch(chooserIntent);
|
||||
} 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;
|
||||
});
|
||||
|
||||
cardOptions.put(getString(R.string.addFromImage), () -> {
|
||||
int permissionRequestType;
|
||||
|
||||
if (v.getId() == R.id.frontImageHolder) {
|
||||
permissionRequestType = PERMISSION_REQUEST_STORAGE_IMAGE_FRONT;
|
||||
} else if (v.getId() == R.id.backImageHolder) {
|
||||
permissionRequestType = PERMISSION_REQUEST_STORAGE_IMAGE_BACK;
|
||||
} else if (v.getId() == R.id.thumbnail) {
|
||||
permissionRequestType = PERMISSION_REQUEST_STORAGE_IMAGE_ICON;
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unknown ID type " + v.getId());
|
||||
}
|
||||
|
||||
PermissionUtils.requestStorageReadPermission(LoyaltyCardEditActivity.this, permissionRequestType);
|
||||
|
||||
return null;
|
||||
});
|
||||
|
||||
@@ -1241,11 +1308,17 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
implements DatePickerDialog.OnDateSetListener {
|
||||
|
||||
final Context context;
|
||||
final EditText expiryFieldEdit;
|
||||
final EditText textFieldEdit;
|
||||
@Nullable
|
||||
final Date minDate;
|
||||
@Nullable
|
||||
final Date maxDate;
|
||||
|
||||
DatePickerFragment(Context context, EditText expiryFieldEdit) {
|
||||
DatePickerFragment(Context context, EditText textFieldEdit, @Nullable Date minDate, @Nullable Date maxDate) {
|
||||
this.context = context;
|
||||
this.expiryFieldEdit = expiryFieldEdit;
|
||||
this.textFieldEdit = textFieldEdit;
|
||||
this.minDate = minDate;
|
||||
this.maxDate = maxDate;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@@ -1254,7 +1327,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
// Use the current date as the default date in the picker
|
||||
final Calendar c = Calendar.getInstance();
|
||||
|
||||
Date date = (Date) expiryFieldEdit.getTag();
|
||||
Date date = (Date) textFieldEdit.getTag();
|
||||
if (date != null) {
|
||||
c.setTime(date);
|
||||
}
|
||||
@@ -1265,17 +1338,23 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
|
||||
// Create a new instance of DatePickerDialog and return it
|
||||
DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), this, year, month, day);
|
||||
datePickerDialog.getDatePicker().setMinDate(getMinDateOfDatePicker());
|
||||
datePickerDialog.getDatePicker().setMinDate(minDate != null ? minDate.getTime() : getDefaultMinDateOfDatePicker());
|
||||
datePickerDialog.getDatePicker().setMaxDate(maxDate != null ? maxDate.getTime() : getDefaultMaxDateOfDatePicker());
|
||||
return datePickerDialog;
|
||||
}
|
||||
|
||||
private long getMinDateOfDatePicker()
|
||||
{
|
||||
private long getDefaultMinDateOfDatePicker() {
|
||||
Calendar minDateCalendar = Calendar.getInstance();
|
||||
minDateCalendar.set(1970, 0, 1);
|
||||
return minDateCalendar.getTimeInMillis();
|
||||
}
|
||||
|
||||
private long getDefaultMaxDateOfDatePicker() {
|
||||
Calendar maxDateCalendar = Calendar.getInstance();
|
||||
maxDateCalendar.set(2100, 11, 31);
|
||||
return maxDateCalendar.getTimeInMillis();
|
||||
}
|
||||
|
||||
public void onDateSet(DatePicker view, int year, int month, int day) {
|
||||
Calendar c = new GregorianCalendar();
|
||||
c.set(Calendar.YEAR, year);
|
||||
@@ -1290,7 +1369,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
|
||||
Date date = new Date(unixTime);
|
||||
|
||||
formatExpiryField(context, expiryFieldEdit, date);
|
||||
formatDateField(context, textFieldEdit, date);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1331,9 +1410,9 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
|
||||
// This makes the DBHelper set it to the current date
|
||||
// So that new and edited card are always on top when sorting by recently used
|
||||
if (updateLoyaltyCard) {
|
||||
DBHelper.updateLoyaltyCard(mDatabase, loyaltyCardId, tempLoyaltyCard.store, tempLoyaltyCard.note, tempLoyaltyCard.expiry, tempLoyaltyCard.balance, tempLoyaltyCard.balanceType, tempLoyaltyCard.cardId, tempLoyaltyCard.barcodeId, tempLoyaltyCard.barcodeType, tempLoyaltyCard.headerColor, tempLoyaltyCard.starStatus, null, tempLoyaltyCard.archiveStatus);
|
||||
DBHelper.updateLoyaltyCard(mDatabase, loyaltyCardId, tempLoyaltyCard.store, tempLoyaltyCard.note, tempLoyaltyCard.validFrom, tempLoyaltyCard.expiry, tempLoyaltyCard.balance, tempLoyaltyCard.balanceType, tempLoyaltyCard.cardId, tempLoyaltyCard.barcodeId, tempLoyaltyCard.barcodeType, tempLoyaltyCard.headerColor, tempLoyaltyCard.starStatus, null, tempLoyaltyCard.archiveStatus);
|
||||
} 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, null, 0);
|
||||
loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, tempLoyaltyCard.store, tempLoyaltyCard.note, tempLoyaltyCard.validFrom, tempLoyaltyCard.expiry, tempLoyaltyCard.balance, tempLoyaltyCard.balanceType, tempLoyaltyCard.cardId, tempLoyaltyCard.barcodeId, tempLoyaltyCard.barcodeType, tempLoyaltyCard.headerColor, 0, null, 0);
|
||||
}
|
||||
|
||||
try {
|
||||
|
||||
@@ -4,6 +4,7 @@ public enum LoyaltyCardField {
|
||||
id,
|
||||
store,
|
||||
note,
|
||||
validFrom,
|
||||
expiry,
|
||||
balance,
|
||||
balanceType,
|
||||
|
||||
@@ -43,6 +43,7 @@ import android.widget.SeekBar;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.StringRes;
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.content.res.AppCompatResources;
|
||||
@@ -73,7 +74,9 @@ import java.text.ParseException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Currency;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
import protect.card_locker.async.TaskHandler;
|
||||
import protect.card_locker.databinding.LoyaltyCardViewLayoutBinding;
|
||||
@@ -525,19 +528,9 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
infoText.append(getString(R.string.balanceSentence, Utils.formatBalance(this, loyaltyCard.balance, loyaltyCard.balanceType)));
|
||||
}
|
||||
|
||||
if (loyaltyCard.expiry != null) {
|
||||
String formattedExpiry = DateFormat.getDateInstance(DateFormat.LONG).format(loyaltyCard.expiry);
|
||||
appendDateInfo(infoText, loyaltyCard.validFrom, (Utils::isNotYetValid), R.string.validFromSentence, R.string.validFromSentence);
|
||||
|
||||
padSpannableString(infoText);
|
||||
if (Utils.hasExpired(loyaltyCard.expiry)) {
|
||||
int start = infoText.length();
|
||||
|
||||
infoText.append(getString(R.string.expiryStateSentenceExpired, formattedExpiry));
|
||||
infoText.setSpan(new ForegroundColorSpan(Color.RED), start, infoText.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
|
||||
} else {
|
||||
infoText.append(getString(R.string.expiryStateSentence, formattedExpiry));
|
||||
}
|
||||
}
|
||||
appendDateInfo(infoText, loyaltyCard.expiry, (Utils::hasExpired), R.string.expiryStateSentenceExpired, R.string.expiryStateSentence);
|
||||
|
||||
infoTextview.setText(infoText);
|
||||
|
||||
@@ -546,6 +539,21 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
infoDialog.create().show();
|
||||
}
|
||||
|
||||
private void appendDateInfo(SpannableStringBuilder infoText, Date date, Predicate<Date> dateCheck, @StringRes int dateCheckTrueString, @StringRes int dateCheckFalseString) {
|
||||
if (date != null) {
|
||||
String formattedDate = DateFormat.getDateInstance(DateFormat.LONG).format(date);
|
||||
|
||||
padSpannableString(infoText);
|
||||
if (dateCheck.test(date)) {
|
||||
int start = infoText.length();
|
||||
infoText.append(getString(dateCheckTrueString, formattedDate));
|
||||
infoText.setSpan(new ForegroundColorSpan(Color.RED), start, infoText.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
|
||||
} else {
|
||||
infoText.append(getString(dateCheckFalseString, formattedDate));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void showBalanceUpdateDialog() {
|
||||
AlertDialog.Builder builder = new MaterialAlertDialogBuilder(this);
|
||||
builder.setTitle(R.string.updateBalanceTitle);
|
||||
@@ -621,7 +629,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
}
|
||||
|
||||
private void setBottomAppBarButtonState() {
|
||||
if (!loyaltyCard.note.isEmpty() || !loyaltyCardGroups.isEmpty() || hasBalance(loyaltyCard) || loyaltyCard.expiry != null) {
|
||||
if (!loyaltyCard.note.isEmpty() || !loyaltyCardGroups.isEmpty() || hasBalance(loyaltyCard) || loyaltyCard.validFrom != null || loyaltyCard.expiry != null) {
|
||||
bottomAppBarInfoButton.setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
bottomAppBarInfoButton.setVisibility(View.GONE);
|
||||
|
||||
94
app/src/main/java/protect/card_locker/PermissionUtils.java
Normal file
94
app/src/main/java/protect/card_locker/PermissionUtils.java
Normal file
@@ -0,0 +1,94 @@
|
||||
package protect.card_locker;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Build;
|
||||
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
public class PermissionUtils {
|
||||
/**
|
||||
* Check if storage read permission is needed.
|
||||
*
|
||||
* This is only necessary on Android 6.0 (Marshmallow) and below. See
|
||||
* https://github.com/CatimaLoyalty/Android/issues/979 for more info.
|
||||
*
|
||||
* @param activity
|
||||
* @return
|
||||
*/
|
||||
private static boolean needsStorageReadPermission(Activity activity) {
|
||||
// Testing showed this permission wasn't needed for anything Catima did past Marshmallow
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return ContextCompat.checkSelfPermission(activity, android.Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if camera permission is needed.
|
||||
*
|
||||
* @param activity
|
||||
* @return
|
||||
*/
|
||||
public static boolean needsCameraPermission(Activity activity) {
|
||||
// Android only introduced the runtime permission system in Marshmallow (Android 6.0)
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return ContextCompat.checkSelfPermission(activity, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED;
|
||||
}
|
||||
|
||||
/**
|
||||
* Call onRequestPermissionsResult after storage read permission was granted.
|
||||
* Mocks a successful grant if a grant is not necessary.
|
||||
*
|
||||
* @param activity
|
||||
* @param requestCode
|
||||
*/
|
||||
public static void requestStorageReadPermission(CatimaAppCompatActivity activity, int requestCode) {
|
||||
String[] permissions = new String[]{ android.Manifest.permission.READ_EXTERNAL_STORAGE };
|
||||
int[] mockedResults = new int[]{ PackageManager.PERMISSION_GRANTED };
|
||||
|
||||
if (needsStorageReadPermission(activity)) {
|
||||
ActivityCompat.requestPermissions(activity, permissions, requestCode);
|
||||
} else {
|
||||
// FIXME: This points to onMockedRequestPermissionResult instead of to
|
||||
// onRequestPermissionResult because onRequestPermissionResult was only introduced in
|
||||
// Android 6.0 (SDK 23) and we and to support Android 5.0 (SDK 21) too.
|
||||
//
|
||||
// When minSdk becomes 23, this should point to onRequestPermissionResult directly and
|
||||
// the activity input variable should be changed from CatimaAppCompatActivity to
|
||||
// Activity.
|
||||
activity.onMockedRequestPermissionsResult(requestCode, permissions, mockedResults);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Call onRequestPermissionsResult after camera permission was granted.
|
||||
* Mocks a successful grant if a grant is not necessary.
|
||||
*
|
||||
* @param activity
|
||||
* @param requestCode
|
||||
*/
|
||||
public static void requestCameraPermission(CatimaAppCompatActivity activity, int requestCode) {
|
||||
String[] permissions = new String[]{ Manifest.permission.CAMERA };
|
||||
int[] mockedResults = new int[]{ PackageManager.PERMISSION_GRANTED };
|
||||
|
||||
if (needsCameraPermission(activity)) {
|
||||
ActivityCompat.requestPermissions(activity, permissions, requestCode);
|
||||
} else {
|
||||
// FIXME: This points to onMockedRequestPermissionResult instead of to
|
||||
// onRequestPermissionResult because onRequestPermissionResult was only introduced in
|
||||
// Android 6.0 (SDK 23) and we and to support Android 5.0 (SDK 21) too.
|
||||
//
|
||||
// When minSdk becomes 23, this should point to onRequestPermissionResult directly and
|
||||
// the activity input variable should be changed from CatimaAppCompatActivity to
|
||||
// Activity.
|
||||
activity.onMockedRequestPermissionsResult(requestCode, permissions, mockedResults);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -53,6 +53,8 @@ public class ScanActivity extends CatimaAppCompatActivity {
|
||||
private static final int MEDIUM_SCALE_FACTOR_DIP = 460;
|
||||
private static final int COMPAT_SCALE_FACTOR_DIP = 320;
|
||||
|
||||
private static final int PERMISSION_SCAN_ADD_FROM_IMAGE = 100;
|
||||
|
||||
private CaptureManager capture;
|
||||
private DecoratedBarcodeView barcodeScannerView;
|
||||
|
||||
@@ -226,6 +228,10 @@ public class ScanActivity extends CatimaAppCompatActivity {
|
||||
}
|
||||
|
||||
public void addFromImage(View view) {
|
||||
PermissionUtils.requestStorageReadPermission(this, PERMISSION_SCAN_ADD_FROM_IMAGE);
|
||||
}
|
||||
|
||||
private void addFromImageAfterPermission() {
|
||||
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
|
||||
photoPickerIntent.setType("image/*");
|
||||
Intent contentIntent = new Intent(Intent.ACTION_GET_CONTENT);
|
||||
@@ -275,9 +281,21 @@ public class ScanActivity extends CatimaAppCompatActivity {
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
if (requestCode == CaptureManager.getCameraPermissionReqCode())
|
||||
showCameraPermissionMissingText(grantResults[0] != PackageManager.PERMISSION_GRANTED);
|
||||
|
||||
onMockedRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
}
|
||||
|
||||
public void onMockedRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
boolean granted = grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED;
|
||||
|
||||
if (requestCode == CaptureManager.getCameraPermissionReqCode()) {
|
||||
showCameraPermissionMissingText(!granted);
|
||||
} else if (requestCode == PERMISSION_SCAN_ADD_FROM_IMAGE) {
|
||||
if (granted) {
|
||||
addFromImageAfterPermission();
|
||||
} else {
|
||||
Toast.makeText(this, R.string.storageReadPermissionRequired, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.LocaleList;
|
||||
import android.provider.MediaStore;
|
||||
import android.text.format.DateUtils;
|
||||
import android.util.Log;
|
||||
import android.util.TypedValue;
|
||||
import android.view.MenuItem;
|
||||
@@ -214,7 +215,21 @@ public class Utils {
|
||||
}
|
||||
}
|
||||
|
||||
static public Boolean isNotYetValid(Date validFromDate) {
|
||||
// The note in `hasExpired` does not apply here, since the bug was fixed before this feature was added.
|
||||
return validFromDate.after(getStartOfToday().getTime());
|
||||
}
|
||||
|
||||
static public Boolean hasExpired(Date expiryDate) {
|
||||
// Note: In #1083 it was discovered that `DatePickerFragment` may sometimes store the expiryDate
|
||||
// at 12:00 PM instead of 12:00 AM in the DB. While this has been fixed and the 12-hour difference
|
||||
// is not a problem for the way the comparison currently works, it's good to keep in mind such
|
||||
// dates may exist in the DB in case the comparison changes in the future and the new one relies
|
||||
// on both dates being set at 12:00 AM.
|
||||
return expiryDate.before(getStartOfToday().getTime());
|
||||
}
|
||||
|
||||
static private Calendar getStartOfToday() {
|
||||
// today
|
||||
Calendar date = new GregorianCalendar();
|
||||
// reset hour, minutes, seconds and millis
|
||||
@@ -222,13 +237,7 @@ public class Utils {
|
||||
date.set(Calendar.MINUTE, 0);
|
||||
date.set(Calendar.SECOND, 0);
|
||||
date.set(Calendar.MILLISECOND, 0);
|
||||
|
||||
// Note: In #1083 it was discovered that `DatePickerFragment` may sometimes store the expiryDate
|
||||
// at 12:00 PM instead of 12:00 AM in the DB. While this has been fixed and the 12-hour difference
|
||||
// is not a problem for the way the comparison currently works, it's good to keep in mind such
|
||||
// dates may exist in the DB in case the comparison changes in the future and the new one relies
|
||||
// on both dates being set at 12:00 AM.
|
||||
return expiryDate.before(date.getTime());
|
||||
return date;
|
||||
}
|
||||
|
||||
static public String formatBalance(Context context, BigDecimal value, Currency currency) {
|
||||
|
||||
@@ -127,6 +127,7 @@ public class CatimaExporter implements Exporter {
|
||||
printer.printRecord(DBHelper.LoyaltyCardDbIds.ID,
|
||||
DBHelper.LoyaltyCardDbIds.STORE,
|
||||
DBHelper.LoyaltyCardDbIds.NOTE,
|
||||
DBHelper.LoyaltyCardDbIds.VALID_FROM,
|
||||
DBHelper.LoyaltyCardDbIds.EXPIRY,
|
||||
DBHelper.LoyaltyCardDbIds.BALANCE,
|
||||
DBHelper.LoyaltyCardDbIds.BALANCE_TYPE,
|
||||
@@ -146,6 +147,7 @@ public class CatimaExporter implements Exporter {
|
||||
printer.printRecord(card.id,
|
||||
card.store,
|
||||
card.note,
|
||||
card.validFrom != null ? card.validFrom.getTime() : "",
|
||||
card.expiry != null ? card.expiry.getTime() : "",
|
||||
card.balance,
|
||||
card.balanceType,
|
||||
|
||||
@@ -286,6 +286,12 @@ public class CatimaImporter implements Importer {
|
||||
}
|
||||
|
||||
String note = CSVHelpers.extractString(DBHelper.LoyaltyCardDbIds.NOTE, record, "");
|
||||
Date validFrom = null;
|
||||
try {
|
||||
validFrom = new Date(CSVHelpers.extractLong(DBHelper.LoyaltyCardDbIds.VALID_FROM, record, true));
|
||||
} catch (NullPointerException | FormatException e) {
|
||||
}
|
||||
|
||||
Date expiry = null;
|
||||
try {
|
||||
expiry = new Date(CSVHelpers.extractLong(DBHelper.LoyaltyCardDbIds.EXPIRY, record, true));
|
||||
@@ -355,7 +361,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, archiveStatus);
|
||||
DBHelper.insertLoyaltyCard(database, id, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus, lastUsed, archiveStatus);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -380,4 +386,4 @@ public class CatimaImporter implements Importer {
|
||||
cardGroups.add(DBHelper.getGroup(database, groupId));
|
||||
DBHelper.setLoyaltyCardGroups(database, cardId, cardGroups);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,6 +128,6 @@ public class FidmeImporter implements Importer {
|
||||
|
||||
// TODO: Front and back image
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, headerColor, starStatus, null,archiveStatus);
|
||||
DBHelper.insertLoyaltyCard(database, store, note, null, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, headerColor, starStatus, null,archiveStatus);
|
||||
}
|
||||
}
|
||||
@@ -234,7 +234,7 @@ public class StocardImporter implements Importer {
|
||||
headerColor = Utils.getHeaderColorFromImage(cardIcon, headerColor);
|
||||
}
|
||||
|
||||
long loyaltyCardInternalId = DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, headerColor, 0, null,0);
|
||||
long loyaltyCardInternalId = DBHelper.insertLoyaltyCard(database, store, note, null, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, headerColor, 0, null,0);
|
||||
|
||||
if (cardIcon != null) {
|
||||
Utils.saveCardImage(context, cardIcon, (int) loyaltyCardInternalId, ImageLocationType.icon);
|
||||
|
||||
@@ -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(),0);
|
||||
DBHelper.insertLoyaltyCard(database, store, "", null, expiry, balance, balanceType, cardId, null, barcodeType, headerColor, 0, Utils.getUnixTime(),0);
|
||||
}
|
||||
|
||||
bufferedReader.close();
|
||||
|
||||
16
app/src/main/res/drawable/ic_valid_from_24dp.xml
Normal file
16
app/src/main/res/drawable/ic_valid_from_24dp.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<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.5,7H11v6l5.25,3.15 0.75,-1.23 -4.5,-2.67z" />
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M18,15.782V22l4.886,-3.109z" />
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M11.99,2C6.47,2 2,6.48 2,12C2,17.52 6.47,22 11.99,22C13.417,22 14.772,21.699 16,21.162L16,18.928C14.823,19.608 13.458,20 12,20C7.58,20 4,16.42 4,12C4,7.58 7.58,4 12,4C16.42,4 20,7.58 20,12C20,13.061 19.791,14.073 19.416,15L21.541,15C21.839,14.053 22,13.045 22,12C22,6.48 17.52,2 11.99,2zM11,7L11,13L16,16L16,15L16.951,15L17,14.92L12.5,12.25L12.5,7L11,7z" />
|
||||
</vector>
|
||||
@@ -311,6 +311,32 @@
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<!-- Valid from -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingHorizontal="@dimen/inputPadding"
|
||||
android:paddingTop="@dimen/inputPadding"
|
||||
android:orientation="horizontal">
|
||||
|
||||
<!-- Valid from -->
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/validFromView"
|
||||
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1.0"
|
||||
android:hint="@string/validFromDate"
|
||||
android:labelFor="@+id/validFromField">
|
||||
|
||||
<AutoCompleteTextView
|
||||
android:id="@+id/validFromField"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:inputType="none"/>
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
</LinearLayout>
|
||||
|
||||
<!-- Expiration -->
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -176,12 +176,31 @@
|
||||
android:drawablePadding="4dp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintTop_toBottomOf="@+id/info_divider"
|
||||
app:layout_constraintBottom_toTopOf="@+id/expiry"
|
||||
app:layout_constraintBottom_toTopOf="@+id/validFrom"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
tools:visibility="visible"
|
||||
tools:text="525 points"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/validFrom"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:layout_marginBottom="4dp"
|
||||
android:textAppearance="?attr/textAppearanceBody2"
|
||||
android:textColor="?android:attr/textColorSecondary"
|
||||
app:drawableLeftCompat="@drawable/ic_valid_from_24dp"
|
||||
android:drawablePadding="4dp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintTop_toBottomOf="@+id/balance"
|
||||
app:layout_constraintBottom_toTopOf="@+id/expiry"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
tools:visibility="visible"
|
||||
tools:text="Today"/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/expiry"
|
||||
android:layout_width="match_parent"
|
||||
@@ -194,7 +213,7 @@
|
||||
app:drawableLeftCompat="@drawable/ic_baseline_access_time_24"
|
||||
android:drawablePadding="4dp"
|
||||
android:visibility="gone"
|
||||
app:layout_constraintTop_toBottomOf="@+id/balance"
|
||||
app:layout_constraintTop_toBottomOf="@+id/validFrom"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
|
||||
@@ -11,41 +11,46 @@ IllusiveMan196
|
||||
StoyanDimitrov
|
||||
Altonss
|
||||
SlavekB
|
||||
Michael Moroni
|
||||
Gediminas Murauskas
|
||||
Petr Novák
|
||||
Michael Moroni
|
||||
Joel A
|
||||
Taco
|
||||
pfaffenrodt
|
||||
Nyatsuki
|
||||
laralem
|
||||
Nyatsuki
|
||||
gallegonovato
|
||||
HudobniVolk
|
||||
Samantaz Fox
|
||||
arno-github
|
||||
Ankit Tiwari
|
||||
Sergio Paredes
|
||||
Aayush Gupta
|
||||
gallegonovato
|
||||
huuhaa
|
||||
Quentin PAGÈS
|
||||
Alexander Ivanov
|
||||
arshbeerSingh
|
||||
Freddo espresso
|
||||
Quentin PAGÈS
|
||||
Silvério Santos
|
||||
Miha Frangež
|
||||
Arnis Jaundzeikars
|
||||
Kefir2105
|
||||
sr093906
|
||||
Giovanni Donisi
|
||||
mdvhimself
|
||||
Katarzyna
|
||||
Maciej Błędkowski
|
||||
echo r"0xX4H" | rev
|
||||
Magnitudee
|
||||
Olivia (Zoe)
|
||||
betsythefc
|
||||
Silvério Santos
|
||||
waffshappen
|
||||
Robin
|
||||
Eric
|
||||
Alexander Ivanov
|
||||
ati3
|
||||
Giovanni
|
||||
(Cliff Heraldo)
|
||||
Evgeniy Khramov
|
||||
Jane Kong
|
||||
Jiri Grönroos
|
||||
K. Herbert
|
||||
Lisa A.
|
||||
Mawuena M. KODZO A.
|
||||
@@ -54,6 +59,7 @@ Still Hsu
|
||||
String E. Fighter
|
||||
Tapu
|
||||
Yurical
|
||||
Eryk Michalak
|
||||
rr-vesp
|
||||
alajemba-vik
|
||||
/usr/local/ΕΨΗΕΛΩΝ
|
||||
@@ -67,23 +73,27 @@ BootVirtual
|
||||
Clonewayx
|
||||
D. Domig
|
||||
Diego
|
||||
Evgeniy Khramov
|
||||
Fede Pujol
|
||||
francescbassas
|
||||
Jean-Luc Tibaux
|
||||
Jesse Davids
|
||||
Lukas Grassauer
|
||||
bittin
|
||||
Marnick L'Eau
|
||||
Michalis
|
||||
Michał
|
||||
Mohamed A. Salah
|
||||
Neko Nekowazarashi
|
||||
the7thNightmare
|
||||
Rishi Agarwal
|
||||
Rosdyana Kusuma
|
||||
umoenks
|
||||
Simon Rusinov
|
||||
Siriusmart
|
||||
Mritunjay
|
||||
Tarik Dzambic
|
||||
Thomas Bertels
|
||||
Thomas Cruveilher
|
||||
Tian Jiale
|
||||
Tong Liu
|
||||
Wanath
|
||||
Runner
|
||||
@@ -91,22 +101,25 @@ ce i moa
|
||||
inesre
|
||||
lgasp
|
||||
phlostically
|
||||
sal0max
|
||||
Ágata Leuck
|
||||
BmBKun
|
||||
Aditya Das
|
||||
Asier
|
||||
Kevin Sicong Jiang
|
||||
Tomer Ben-Rachel
|
||||
tfuxu
|
||||
Ahmed Saleh
|
||||
Airat
|
||||
Alexander
|
||||
sNiXx
|
||||
Angela Enogieru
|
||||
AnimeshChatterjee1
|
||||
Ashish Yadav
|
||||
Asier
|
||||
Aya Elsaadany
|
||||
Biren
|
||||
Booc Sylvan
|
||||
Brage Nesteby Reitan
|
||||
CherryMonster222
|
||||
Colgrave
|
||||
Csaba
|
||||
@@ -117,20 +130,23 @@ Donno
|
||||
Flav
|
||||
Franciszek Stefan
|
||||
Grzegorz
|
||||
gneiss15
|
||||
Hamustra Scans
|
||||
HowITsDone
|
||||
Izzy
|
||||
Jacek
|
||||
Jacopo Gennaro Esposito
|
||||
Jasielprogramador
|
||||
Jean Mareilles
|
||||
Jean-Baptiste
|
||||
人工知能
|
||||
Karvjorm
|
||||
krkk
|
||||
Laura Ferraz
|
||||
Lucas da Costa
|
||||
bittin
|
||||
Manan Jhaveri
|
||||
Marco
|
||||
Mario M. Viscovich
|
||||
BRBsoup
|
||||
Mattia
|
||||
Md. Al-Amin
|
||||
Michael Gangolf
|
||||
@@ -138,8 +154,10 @@ Michael Gangolf
|
||||
Moi Toi
|
||||
DivideEtImpera
|
||||
Nicolas
|
||||
Nosnahc
|
||||
pbeckmann
|
||||
Peer Beckmann
|
||||
Piotr Strebski
|
||||
Piotr Zet
|
||||
Quang Nguyen
|
||||
Ratnesh
|
||||
@@ -148,12 +166,15 @@ Rohan Babbar
|
||||
Ronak Upadhyay
|
||||
Rose Liverman
|
||||
SKULD
|
||||
Salem Malus
|
||||
Samarth Asthan
|
||||
Shailendra Maurya
|
||||
Simone Dotto
|
||||
Subhashish Anand
|
||||
TenTraicion
|
||||
Titas Pažereckas
|
||||
Tom Sawyer
|
||||
atakujonc
|
||||
Tony C
|
||||
Tymofii Lytvynenko
|
||||
Vancha March
|
||||
@@ -162,18 +183,22 @@ Yusril A
|
||||
Avik Kundu
|
||||
diksha-2911
|
||||
gbonaspetti
|
||||
gittyboy-cell
|
||||
huang ivan
|
||||
lucafont2
|
||||
mtrmirez
|
||||
opsik
|
||||
polarhun
|
||||
pooyanazari
|
||||
psa-jforestier
|
||||
sergio
|
||||
080502
|
||||
Marcus
|
||||
techwebpd
|
||||
Truestorybaby
|
||||
tygyh
|
||||
unstartdev
|
||||
wmilan 17
|
||||
luoyang3
|
||||
JaeBeom An
|
||||
JungHee Lee
|
||||
|
||||
@@ -39,7 +39,6 @@
|
||||
<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>
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
<string name="setFrontImage">Снимка на предната страна</string>
|
||||
<string name="photos">Снимки</string>
|
||||
<string name="importOptionApplicationExplanation">Изберете файл на друго приложение.</string>
|
||||
<string name="noExternalStoragePermissionError">Разрешете достъп до хранилището, за да работи внасянето и изнасянето</string>
|
||||
<string name="noCardExistsError">Картата не е намерена</string>
|
||||
<string name="updateBarcodeQuestionText">Идентификаторът е променен. Желаете ли с неговата стойност да бъде променен и щрихкодът\?</string>
|
||||
<string name="updateBarcodeQuestionTitle">Обновяване на щрихкода\?</string>
|
||||
@@ -263,4 +262,10 @@
|
||||
<string name="currentBalanceSentence">Текущ баланс: <xliff:g>%s</xliff:g></string>
|
||||
<string name="updateBalance">Обновяване на баланса</string>
|
||||
<string name="importCards">Внасяне на карти</string>
|
||||
<string name="storageReadPermissionRequired">За това действие е необходимо разрешение за четене на хранилището…</string>
|
||||
<string name="cameraPermissionRequired">За това действие е необходимо разрешение за достъп до камерата…</string>
|
||||
<string name="validFromDate">Валидна от</string>
|
||||
<string name="anyDate">Без значение от датата</string>
|
||||
<string name="validFromSentence">Валидна от: <xliff:g>%s</xliff:g></string>
|
||||
<string name="chooseValidFromDate">Изберете датата, от която е валидна</string>
|
||||
</resources>
|
||||
16
app/src/main/res/values-ca/strings.xml
Normal file
16
app/src/main/res/values-ca/strings.xml
Normal file
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="groups">Grups</string>
|
||||
<string name="action_add">Afegeix</string>
|
||||
<string name="save">Desa</string>
|
||||
<string name="edit">Edita</string>
|
||||
<string name="delete">Elimina</string>
|
||||
<string name="confirm">Confirma</string>
|
||||
<string name="ok">D\'acord</string>
|
||||
<string name="importExport">Importa/Exporta</string>
|
||||
<string name="exportName">Exporta</string>
|
||||
<string name="action_search">Cerca</string>
|
||||
<string name="deleteTitle">Elimina la targeta</string>
|
||||
<string name="welcome">Benvingut a Catima</string>
|
||||
<string name="noGiftCards">Cliqueu el botó + més per afegir una targeta, o importeu-ne des del ⋮ menú.</string>
|
||||
</resources>
|
||||
@@ -29,7 +29,6 @@
|
||||
<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 úložišti.</string>
|
||||
<string name="importOptionFilesystemButton">Ze souborového systému</string>
|
||||
@@ -270,4 +269,10 @@
|
||||
<string name="updateBalanceTitle">Kolik jste utratil\?</string>
|
||||
<string name="updateBalanceHint">Zadejte výši</string>
|
||||
<string name="newBalanceSentence">Nový zůstatek: <xliff:g>%s</xliff:g></string>
|
||||
<string name="storageReadPermissionRequired">Pro tuto akci je potřeba oprávnění ke čtení úložiště…</string>
|
||||
<string name="cameraPermissionRequired">Pro tuto akci je potřeba oprávnění k přístupu k fotoaparátu…</string>
|
||||
<string name="validFromDate">Platnost od</string>
|
||||
<string name="anyDate">Jakékoliv datum</string>
|
||||
<string name="chooseValidFromDate">Vyberte datum počátku platnosti</string>
|
||||
<string name="validFromSentence">Platnost od: <xliff:g>%s</xliff:g></string>
|
||||
</resources>
|
||||
@@ -67,7 +67,6 @@
|
||||
<string name="importOptionFilesystemExplanation">Vælg en bestemt fil fra filsystemet.</string>
|
||||
<string name="importOptionFilesystemTitle">Import fra filsystem</string>
|
||||
<string name="exportOptionExplanation">Dataene skrives til en placering efter eget valg.</string>
|
||||
<string name="noExternalStoragePermissionError">Giv først tilladelse til ekstern lagring til at importere eller eksportere kort</string>
|
||||
<string name="failedParsingImportUriError">Kunne ikke analysere import-URI\'en</string>
|
||||
<string name="noCardExistsError">Kunne ikke finde kort</string>
|
||||
<string name="noCardIdError">Der er ikke angivet noget kort-ID</string>
|
||||
|
||||
@@ -36,7 +36,6 @@
|
||||
<string name="exportFailed">Export konnte nicht durchgeführt werden</string>
|
||||
<string name="importing">Importiere…</string>
|
||||
<string name="exporting">Exportiere…</string>
|
||||
<string name="noExternalStoragePermissionError">Berechtigung für den externen Speicher zum Importieren oder Exportieren von Daten erteilen</string>
|
||||
<string name="importOptionFilesystemTitle">Importiere aus dem Dateisystem</string>
|
||||
<string name="importOptionFilesystemExplanation">Wähle eine Datei vom Dateisystem aus.</string>
|
||||
<string name="importOptionFilesystemButton">Wähle vom Dateisystem</string>
|
||||
@@ -53,7 +52,7 @@
|
||||
<string name="thumbnailDescription">Vorschaubild</string>
|
||||
<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_display_barcode_max_brightness">Displayhelligkeit in der Barcodeansicht erhöhen</string>
|
||||
<string name="exportSuccessful">Daten exportiert</string>
|
||||
<string name="importSuccessful">Daten importiert</string>
|
||||
<string name="intent_import_card_from_url_share_text">Ich würde gerne diese Karte mit dir teilen</string>
|
||||
@@ -106,7 +105,7 @@
|
||||
<string name="expiryStateSentenceExpired">Abgelaufen: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryStateSentence">Läuft ab: <xliff:g>%s</xliff:g></string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Sperrbildschirm verhindern</string>
|
||||
<string name="settings_keep_screen_on">Bildschirm aktiv halten</string>
|
||||
<string name="settings_keep_screen_on">Bildschirm aktiv lassen</string>
|
||||
<string name="privacy_policy_popup_text">Hinweis zum Datenschutz (oft gefordert):
|
||||
\n
|
||||
\nKEINE DATEN WERDEN GESAMMELT, was jeder bestätigen kann, da unsere Anwendung eine freie Software ist.</string>
|
||||
@@ -226,7 +225,7 @@
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> Punkt</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> Punkte</item>
|
||||
</plurals>
|
||||
<string name="settings_oled_dark">Rein schwarzer Hintergrund für dunkles Thema</string>
|
||||
<string name="settings_oled_dark">Komplett schwarzer Hintergrund im dunklen Design</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>
|
||||
@@ -263,4 +262,10 @@
|
||||
<string name="currentBalanceSentence">Aktuelles Guthaben: <xliff:g>%s</xliff:g></string>
|
||||
<string name="newBalanceSentence">Neues Guthaben: <xliff:g>%s</xliff:g></string>
|
||||
<string name="updateBalance">Guthaben aktualisieren</string>
|
||||
<string name="storageReadPermissionRequired">Berechtigung zum Lesen des Speichers für diese Aktion erforderlich …</string>
|
||||
<string name="cameraPermissionRequired">Für diese Aktion wird die Erlaubnis zum Zugriff auf die Kamera benötigt …</string>
|
||||
<string name="validFromDate">Gültig ab</string>
|
||||
<string name="validFromSentence">Gültig ab: <xliff:g>%s</xliff:g></string>
|
||||
<string name="chooseValidFromDate">Gültig-ab-Datum wählen</string>
|
||||
<string name="anyDate">Beliebiges Datum</string>
|
||||
</resources>
|
||||
@@ -32,7 +32,6 @@
|
||||
<string name="exportFailed">Δεν ήταν δυνατή η εξαγωγή</string>
|
||||
<string name="importing">Γίνεται εισαγωγή του…</string>
|
||||
<string name="exporting">Γίνεται εξαγωγή του…</string>
|
||||
<string name="noExternalStoragePermissionError">Εγκρίνετε την άδεια εξωτερικής αποθήκευσης για να εισάγετε ή εξάγετε δεδομένα</string>
|
||||
<string name="importOptionFilesystemTitle">Εισαγωγή από το σύστημα αρχείων</string>
|
||||
<string name="importOptionFilesystemExplanation">Επιλέξτε ένα συγκεκριμένο αρχείο από το σύστημα αρχείων.</string>
|
||||
<string name="importOptionFilesystemButton">Από το σύστημα αρχείων</string>
|
||||
|
||||
@@ -63,7 +63,6 @@
|
||||
<string name="importOptionApplicationTitle">Uzi alian app</string>
|
||||
<string name="importOptionFilesystemExplanation">Elektu specifa dosiero de la dosiersistemo.</string>
|
||||
<string name="exportOptionExplanation">La datumoj estos skribita al loko de via elekto.</string>
|
||||
<string name="noExternalStoragePermissionError">Grant ekstera stokado permeso de importado aŭ eksportado kartoj unua</string>
|
||||
<string name="exportFailed">Ne povis eksporti kartoj</string>
|
||||
<string name="importFailed">Ne povis importi kartoj</string>
|
||||
<string name="importExportHelp">Subtenanta supre vian kartoj permesas vin movi ilin al alia aparato.</string>
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
<string name="exportFailed">No se han podido exportar</string>
|
||||
<string name="importing">Importando…</string>
|
||||
<string name="exporting">Exportando…</string>
|
||||
<string name="noExternalStoragePermissionError">Otorgar permiso de almacenamiento para importar o exportar datos</string>
|
||||
<string name="importOptionFilesystemTitle">Importar desde el sistema de archivos</string>
|
||||
<string name="importOptionFilesystemExplanation">Elegir un archivo concreto del sistema de archivos.</string>
|
||||
<string name="importOptionFilesystemButton">Desde el sistema de archivos</string>
|
||||
@@ -270,4 +269,10 @@
|
||||
<string name="cameraPermissionDeniedTitle">No se pudo acceder a la cámara</string>
|
||||
<string name="updateBalance">Actualizar el balance</string>
|
||||
<string name="importCards">Importar tarjetas</string>
|
||||
<string name="storageReadPermissionRequired">Se necesita permiso para leer el almacenamiento para esta acción…</string>
|
||||
<string name="cameraPermissionRequired">Se necesita permiso para acceder a la cámara para esta acción…</string>
|
||||
<string name="anyDate">Cualquier fecha</string>
|
||||
<string name="validFromDate">Válido desde</string>
|
||||
<string name="chooseValidFromDate">Elija una fecha válida desde</string>
|
||||
<string name="validFromSentence">Válido desde: <xliff:g>%s</xliff:g></string>
|
||||
</resources>
|
||||
@@ -1,10 +1,9 @@
|
||||
<?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ä tietoja</string>
|
||||
<string name="no">Ei</string>
|
||||
<string name="yes">Kyllä</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="updateBarcodeQuestionTitle">Päivitetäänkö 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">ID-tunnukset kopioitu leikepöydälle</string>
|
||||
<string name="wrongValueForBarcodeType">Arvo ei ole kelvollinen valitulle viivakoodityypille</string>
|
||||
@@ -14,15 +13,15 @@
|
||||
<string name="barcodeId">Viivakoodin arvo</string>
|
||||
<string name="importVoucherVaultMessage">Valitse tuotava <i>vouchervault.json</i>-vienti Voucher Vaultista.
|
||||
\nLuo se painamalla ensin Vie Voucher Vaultissa.</string>
|
||||
<string name="importVoucherVault">Tuo Voucher Vault varmuuskopiotiedostosta</string>
|
||||
<string name="importVoucherVault">Tuo Voucher Vault -varmuuskopiotiedostosta</string>
|
||||
<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 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="importFidme">Tuo FidMe-varmuuskopiotiedostosta</string>
|
||||
<string name="importCatimaMessage">Valitse tuotava <i>catima.zip</i>-vientitiedostosi Catimasta.
|
||||
\nLuo se Catima-sovelluksen Tuo/Vie-valikosta painamalla siellä ensin Vie.</string>
|
||||
\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):
|
||||
@@ -51,18 +50,18 @@
|
||||
<string name="groupsList">Ryhmät: <xliff:g>%s</xliff:g></string>
|
||||
<string name="addFromImage">Valitse kuva galleriasta</string>
|
||||
<string name="addManually">Anna ID-tunnus manuaalisesti</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Poistu tallentamatta\?</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Poistutaanko tallentamatta\?</string>
|
||||
<string name="leaveWithoutSaveTitle">Poistu</string>
|
||||
<string name="moveDown">Siirrä alaspäin</string>
|
||||
<string name="moveUp">Siirrä ylöspäin</string>
|
||||
<string name="failedOpeningFileManager">Asenna ensin tiedostonhallintaohjelma.</string>
|
||||
<string name="deleteConfirmationGroup">Poista ryhmä\?</string>
|
||||
<string name="deleteConfirmationGroup">Poistetaanko ryhmä\?</string>
|
||||
<string name="all">Kaikki</string>
|
||||
<plurals name="groupCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> kortti</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> kortit</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> korttia</item>
|
||||
</plurals>
|
||||
<string name="noGroups">Napsauta + plus-painiketta lisätäksesi 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">Tiedot viety</string>
|
||||
@@ -78,18 +77,18 @@
|
||||
<string name="settings_theme">Teema</string>
|
||||
<string name="settings_category_title_ui">Käyttöliittymä</string>
|
||||
<string name="settings">Asetukset</string>
|
||||
<string name="starImage">Suosikki tähti</string>
|
||||
<string name="starImage">Suosikkitähti</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_libraries">Vapaat kolmannen osapuolen 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_copyright_old">Perustuu Loyalty Card Keychain sovellukseen
|
||||
<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>
|
||||
<string name="about">Tietoja</string>
|
||||
@@ -110,7 +109,7 @@
|
||||
<string name="importSuccessfulTitle">Tuonti valmis</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="importExport">Tuo/vie</string>
|
||||
<string name="failedParsingImportUriError">Tuonnin URI: n jäsentäminen epäonnistui</string>
|
||||
<string name="noCardExistsError">Tätä korttia ei löytynyt</string>
|
||||
<string name="noCardIdError">ID-tunnusta ei annettu</string>
|
||||
@@ -139,7 +138,7 @@
|
||||
<string name="note">Lisätieto</string>
|
||||
<string name="storeName">Nimi</string>
|
||||
<string name="noMatchingGiftCards">Ei hakutuloksia, kokeile toisella hakutermillä.</string>
|
||||
<string name="noGiftCards">Lisää kortti napsauttamalla + plus-painiketta, tai mene ⋮ valikkoon tuodaksesi varmuuskopiosta.</string>
|
||||
<string name="noGiftCards">Lisää kortti napsauttamalla plus-painiketta (+), tai mene ⋮-valikkoon tuodaksesi.</string>
|
||||
<string name="action_add">Lisää</string>
|
||||
<string name="action_search">Hae</string>
|
||||
<string name="takePhoto">Ota valokuva</string>
|
||||
@@ -149,32 +148,32 @@
|
||||
<string name="photos">Valokuvat</string>
|
||||
<string name="backImageDescription">Takakuva</string>
|
||||
<string name="frontImageDescription">Etukuva</string>
|
||||
<string name="deleteConfirmation">Poista tämä kortti\?</string>
|
||||
<string name="deleteConfirmation">Poistetaanko tämä kortti\?</string>
|
||||
<string name="deleteTitle">Poista kortti</string>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="one">Poista tämä <xliff:g>%d</xliff:g> kortti pysyvästi\?</item>
|
||||
<item quantity="other">Poista tämä <xliff:g>%d</xliff:g> kortit pysyvästi\?</item>
|
||||
<item quantity="one">Poistetaanko tämä <xliff:g>%d</xliff:g> kortti pysyvästi\?</item>
|
||||
<item quantity="other">Poistetaanko nämä <xliff:g>%d</xliff:g> korttia pysyvästi\?</item>
|
||||
</plurals>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="one">Poista <xliff:g>%d</xliff:g>kortti</item>
|
||||
<item quantity="other">Poista <xliff:g>%d</xliff:g>kortit</item>
|
||||
<item quantity="other">Poista <xliff:g>%d</xliff:g>korttia</item>
|
||||
</plurals>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> valittu</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> valitut</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> valittu</item>
|
||||
</plurals>
|
||||
<string name="importStocard">Tuo Stocardista</string>
|
||||
<string name="importStocardMessage">Valitse tuotava <i>***-sync.zip</i>-vienti Stocardista.
|
||||
\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>
|
||||
<string name="failedGeneratingShareURL">Jaettavaa URL-osoitetta ei voitu luoda. Ilmoita tästä.</string>
|
||||
<string name="turn_flashlight_on">Käytä taskulamppua</string>
|
||||
<string name="turn_flashlight_off">Sammuta salamavalo</string>
|
||||
<string name="app_contributors">Mahdollistanut: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="settings_brown_theme">Ruskea</string>
|
||||
<string name="settings_grey_theme">Harmaa</string>
|
||||
<string name="settings_green_theme">Vihreä</string>
|
||||
<string name="settings_sky_blue_theme">Taivaan sininen</string>
|
||||
<string name="settings_sky_blue_theme">Taivaansininen</string>
|
||||
<string name="settings_blue_theme">Siniset</string>
|
||||
<string name="settings_violet_theme">Violetti</string>
|
||||
<string name="settings_magenta_theme">Magenta</string>
|
||||
@@ -195,7 +194,7 @@
|
||||
</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="swipeToSwitchImages">Vaihda kuvia pyyhkäisemällä, paina kuvaa pitkään avataksesi galleriasovelluksessa</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>
|
||||
@@ -227,10 +226,10 @@
|
||||
<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="barcodeImageDescriptionWithType">Kuva <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="settings_portrait_orientation">Pysty</string>
|
||||
<string name="settings_landscape_orientation">Vaaka</string>
|
||||
<string name="unarchived">Kortti on poistettu arkistosta</string>
|
||||
<string name="noUnarchivedCardsMessage">Arkistoimattomia kortteja ei ole olemassa</string>
|
||||
<string name="unarchive">Poista arkistosta</string>
|
||||
@@ -242,7 +241,7 @@
|
||||
<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>
|
||||
<string name="duplicateCard">Kaksoiskappale</string>
|
||||
<string name="previousCard">Edellinen</string>
|
||||
<string name="nextCard">Seuraava</string>
|
||||
<string name="failedToOpenUrl">Asenna ensin verkkoselain</string>
|
||||
@@ -251,4 +250,22 @@
|
||||
<item quantity="one">Näytä arkisto (<xliff:g>%1$d</xliff:g> kortti)</item>
|
||||
<item quantity="other">Näytä arkisto (<xliff:g>%1$d</xliff:g> korttia)</item>
|
||||
</plurals>
|
||||
<string name="updateBalanceTitle">Kuinka paljon kulutit\?</string>
|
||||
<string name="updateBalanceHint">Syötä summa</string>
|
||||
<string name="barcodeLongPressMessage">Vain kuvia on mahdollista avata galleriasovelluksessa</string>
|
||||
<string name="archive">Arkistoi</string>
|
||||
<string name="importCards">Tuo kortteja</string>
|
||||
<string name="failedToRetrieveImageFile">Kuvatiedoston noutaminen epäonnistui</string>
|
||||
<string name="currentBalanceSentence">Nykyinen saldo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="newBalanceSentence">Uusi saldo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="cameraPermissionDeniedTitle">Ei pääsyä kameraan</string>
|
||||
<string name="settings_lock_on_opening_orientation">Lukitse suunta, kun korttia avataan</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">Viivakoodien lukeminen vaatii, että Catimalla on käyttöoikeus kameraan. Napauta tästä muuttaaksesi oikeuksia.</string>
|
||||
<string name="updateBalance">Päivitä saldo</string>
|
||||
<string name="cameraPermissionRequired">Tämä toiminto vaatii oikeuden käyttää kameraa…</string>
|
||||
<string name="storageReadPermissionRequired">Tämä toiminto vaatii oikeuden lukea tallennustilaa…</string>
|
||||
<string name="validFromDate">Kelvollinen alkaen</string>
|
||||
<string name="anyDate">Mikä tahansa päivämäärä</string>
|
||||
<string name="chooseValidFromDate">Valitse kelvollinen päivämäärä</string>
|
||||
<string name="validFromSentence">Kelvollinen alkaen: <xliff:g>%s</xliff:g></string>
|
||||
</resources>
|
||||
@@ -32,7 +32,6 @@
|
||||
<string name="exportFailed">Impossible d’effectuer l’exportation</string>
|
||||
<string name="importing">Import …</string>
|
||||
<string name="exporting">Export …</string>
|
||||
<string name="noExternalStoragePermissionError">Accorder au stockage externe l’autorisation d’importer ou d’exporter des données</string>
|
||||
<string name="importOptionFilesystemTitle">Importer depuis le système de fichiers</string>
|
||||
<string name="importOptionFilesystemExplanation">Choisissez le fichier à importer.</string>
|
||||
<string name="importOptionFilesystemButton">Système de fichiers</string>
|
||||
@@ -270,4 +269,10 @@
|
||||
<string name="updateBalanceTitle">Combien avez-vous dépensé \?</string>
|
||||
<string name="newBalanceSentence">Nouveau solde : <xliff:g>%s</xliff:g></string>
|
||||
<string name="importCards">Importer des cartes</string>
|
||||
<string name="storageReadPermissionRequired">L\'autorisation de lire le stockage est nécessaire pour cette action…</string>
|
||||
<string name="cameraPermissionRequired">L\'autorisation d\'accéder à la caméra est nécessaire pour cette action…</string>
|
||||
<string name="validFromDate">Valide à partir de</string>
|
||||
<string name="validFromSentence">Valide à partir de : <xliff:g>%s</xliff:g></string>
|
||||
<string name="anyDate">N’importe quelle date</string>
|
||||
<string name="chooseValidFromDate">Choisissez la date de début de validité</string>
|
||||
</resources>
|
||||
@@ -1,5 +1,5 @@
|
||||
<?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="storeName">नाम</string>
|
||||
<string name="note">नोट</string>
|
||||
<string name="cardId">कार्ड आईडी</string>
|
||||
@@ -114,4 +114,40 @@
|
||||
<string name="balance">संतुलन</string>
|
||||
<string name="currency">मुद्रा</string>
|
||||
<string name="accept">स्वीकार</string>
|
||||
<string name="exportSuccessful">डेटा निर्यात किया गया</string>
|
||||
<string name="groupsList">समूह: <xliff:g>%s</xliff:g></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="privacy_policy_popup_text">निजता नीति नोटिस (कुछ ऐप स्टोर के लिए आवश्यक):
|
||||
\n
|
||||
\nकोई भी डेटा एकत्र नहीं किया जाता है, जिसकी पुष्टि कोई भी कर सकता है क्योंकि हमारा ऐप मुफ्त सॉफ्टवेयर है।</string>
|
||||
<string name="importCatimaMessage">आयात करने के लिए, <i>catima.zip</i> फाइल को चुने जो की Catima से निर्यात किया गया था.
|
||||
\nदूसरे Catima ऍप के आयात/निर्यात मेनू से निर्यात बटन दबाकर, पहले catima.zip फाइल को बनाये.</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="groups">समूहों</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">कॉपीराइट © 2019–<xliff:g>%d</xliff:g> Sylvia van Os</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="group_updated">समूह अपडेट किया गया</string>
|
||||
<string name="failedOpeningFileManager">पहले एक फाइल मैनेजर इनस्टॉल करें.</string>
|
||||
<string name="leaveWithoutSaveConfirmation">बिना सुरक्षित किये छोड़े\?</string>
|
||||
<string name="addManually">मैन्युअली आई डी दर्ज करें</string>
|
||||
<string name="editGroup">समूह संपादन: <xliff:g>%s</xliff:g></string>
|
||||
<string name="points">अंक</string>
|
||||
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> एक वैध शेष राशि नहीं है.</string>
|
||||
<string name="chooseImportType">यहाँ से डेटा का आयात करें</string>
|
||||
<string name="privacy_policy">निजता नीति</string>
|
||||
<string name="importCatima">कैटिमा से आयात करें</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="copy_to_clipboard_toast">आई डी क्लिपबोर्ड पर कॉपी किया गया</string>
|
||||
</resources>
|
||||
@@ -44,7 +44,6 @@
|
||||
<string name="exportOptionExplanation">Podaci će biti zabilježeni na odabranom mjestu.</string>
|
||||
<string name="exportFailedTitle">Izvoz nije uspio</string>
|
||||
<string name="exporting">Opskrba…</string>
|
||||
<string name="noExternalStoragePermissionError">Najprije odobrite dopuštenje za vanjsku pohranu za uvoz ili izvoz kartica</string>
|
||||
<string name="importOptionFilesystemExplanation">Odaberite određenu datoteku iz datotečnog sustava.</string>
|
||||
<string name="importOptionApplicationTitle">Koristite drugu aplikaciju</string>
|
||||
<string name="settings">Postavke</string>
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="noGiftCards">Nyomja meg a + jelet a kártya hozzáadásához, vagy importáljon a ⋮ menüvel.</string>
|
||||
<string name="noGiftCards">Kattintson a + plusz gombra egy kártya hozzáadásához, vagy importáljon a ⋮ menüből.</string>
|
||||
<string name="action_add">Hozzáadás</string>
|
||||
<string name="action_search">Keresés</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> kiválasztva</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> kiválasztva</item>
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> kiválasztott</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> kiválasztottak</item>
|
||||
</plurals>
|
||||
<string name="noCardsMessage">Először adjon hozzá egy kártyát</string>
|
||||
<string name="noGiftCardsGroup">Hozzon létre kártyákat, és rendelje hozzá a megfelelő csoporthoz.</string>
|
||||
@@ -24,8 +24,8 @@
|
||||
<string name="delete">Törlés</string>
|
||||
<string name="confirm">Alkalmaz</string>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> törlése</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> törlése</item>
|
||||
<item quantity="one">Törölje az <xliff:g>%d</xliff:g> kártyát</item>
|
||||
<item quantity="other">Törölje az <xliff:g>%d</xliff:g> kártyákat</item>
|
||||
</plurals>
|
||||
<string name="deleteConfirmation">Véglegesen törli a kártyát\?</string>
|
||||
<string name="ok">Rendben</string>
|
||||
@@ -81,7 +81,6 @@
|
||||
<string name="exportFailed">Exportálás sikertelen</string>
|
||||
<string name="importing">Importálás…</string>
|
||||
<string name="exporting">Exportálás…</string>
|
||||
<string name="noExternalStoragePermissionError">Külső háttértárhoz való hozzáférés engedélyezése adat import vagy export miatt</string>
|
||||
<string name="exportOptionExplanation">Az adatokat a kiválasztott helyre fogjuk menteni.</string>
|
||||
<string name="importOptionFilesystemTitle">Importálás fájlrendszerből</string>
|
||||
<string name="importOptionFilesystemButton">A fájlrendszerből</string>
|
||||
@@ -137,7 +136,7 @@
|
||||
<string name="currency">Valuta</string>
|
||||
<string name="points">Pontok</string>
|
||||
<string name="parsingBalanceFailed">A <xliff:g>%s</xliff:g> nem tűnik valós egyenlegnek.</string>
|
||||
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
|
||||
<string name="app_loyalty_card_keychain">Hűségkártya kulcstartó</string>
|
||||
<string name="privacy_policy">Adatvédelmi Szabályzat</string>
|
||||
<string name="accept">Elfogad</string>
|
||||
<string name="importCatima">Importálás Catimából</string>
|
||||
@@ -179,7 +178,7 @@
|
||||
<string name="app_contributors">Lehetővé tette: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="showMoreInfo">Infó mutatása</string>
|
||||
<string name="hideMoreInfo">Infó elrejtése</string>
|
||||
<string name="swipeToSwitchImages">Húzza oldalra vagy tartsa nyomva a kép megváltoztatásáért</string>
|
||||
<string name="swipeToSwitchImages">Csúsztassa ujját a képek váltásához, tartsa lenyomva a kép megnyitásához a Galéria alkalmazásban</string>
|
||||
<string name="sort_by_balance">Egyenleg</string>
|
||||
<string name="reverse">...fordított sorrendben</string>
|
||||
<string name="sort_by">Rendezés mint</string>
|
||||
@@ -200,7 +199,7 @@
|
||||
</plurals>
|
||||
<plurals name="balancePoints">
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> pont</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> pont</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> pontok</item>
|
||||
</plurals>
|
||||
<string name="chooseImportType">Adat importálása innen</string>
|
||||
<string name="thumbnailDescription">Előkép</string>
|
||||
@@ -247,4 +246,20 @@
|
||||
<string name="archived">Kártya archiválása</string>
|
||||
<string name="archiveList">Archivál</string>
|
||||
<string name="duplicateCard">Másolat</string>
|
||||
<string name="currentBalanceSentence">Jelenlegi egyenleg: <xliff:g>%s</xliff:g></string>
|
||||
<string name="updateBalanceHint">Adja meg az összeget</string>
|
||||
<string name="importCards">Kártyák importálása</string>
|
||||
<string name="updateBalanceTitle">Mennyit költöttél\?</string>
|
||||
<string name="newBalanceSentence">Új egyenleg: <xliff:g>%s</xliff:g></string>
|
||||
<string name="cameraPermissionDeniedTitle">Nem sikerült hozzáférni a kamerához</string>
|
||||
<string name="failedToRetrieveImageFile">Nem sikerült lekérni a képfájlt</string>
|
||||
<string name="barcodeLongPressMessage">Csak képek nyithatók meg a galéria alkalmazásban</string>
|
||||
<string name="unarchived">Archiválatlan kártya</string>
|
||||
<string name="welcome">Üdvözöljük Catimában</string>
|
||||
<plurals name="viewArchivedCardsWithCount">
|
||||
<item quantity="one">Archívum megtekintése (<xliff:g>%1$d</xliff:g> kártya)</item>
|
||||
<item quantity="other">Archívum megtekintése (<xliff:g>%1$d</xliff:g> kártyák)</item>
|
||||
</plurals>
|
||||
<string name="updateBalance">Egyenleg frissítése</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">A vonalkódok beolvasásához a Catimának hozzá kell férnie a kamerához. Koppintson ide az engedélybeállítások módosításához.</string>
|
||||
</resources>
|
||||
@@ -36,7 +36,7 @@
|
||||
<string name="all">Semua</string>
|
||||
<string name="leaveWithoutSaveTitle">Keluar</string>
|
||||
<string name="card">Kartu</string>
|
||||
<string name="barcode">Barcode</string>
|
||||
<string name="barcode">barcode</string>
|
||||
<string name="chooseExpiryDate">Pilih masa berlaku</string>
|
||||
<string name="noBarcodeFound">Barcode tidak ditemukan</string>
|
||||
<string name="errorReadingImage">Tidak dapat membaca gambar</string>
|
||||
@@ -96,7 +96,6 @@
|
||||
<string name="exportFailed">Tidak dapat mengekspor</string>
|
||||
<string name="importing">Sedang mengimpor…</string>
|
||||
<string name="exporting">Sedang mengekspor…</string>
|
||||
<string name="noExternalStoragePermissionError">Berikan izin penyimpanan eksternal untuk mengimpor atau mengekspor data</string>
|
||||
<string name="exportOptionExplanation">Data akan ditulis ke lokasi pilihan Anda.</string>
|
||||
<string name="importOptionFilesystemTitle">Impor dari pengelola file bawaan</string>
|
||||
<string name="importOptionFilesystemExplanation">Pilih file dari pengelola file bawaan.</string>
|
||||
@@ -149,7 +148,7 @@
|
||||
<string name="moveBarcodeToCenterOfScreen">Pusatkan barcode pada layar</string>
|
||||
<string name="points">Poin</string>
|
||||
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> sepertinya bukan saldo yang valid.</string>
|
||||
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
|
||||
<string name="app_loyalty_card_keychain">Gantungan kunci kartu kesetiaan</string>
|
||||
<string name="privacy_policy">Kebijakan Privasi</string>
|
||||
<string name="privacy_policy_popup_text">Pemberitahuan kebijakan privasi (diperlukan oleh beberapa toko aplikasi):
|
||||
\n
|
||||
@@ -257,4 +256,11 @@
|
||||
<string name="currentBalanceSentence">Saldo saat ini: <xliff:g>%s</xliff:g></string>
|
||||
<string name="updateBalanceTitle">Berapa banyak yang telah kamu habiskan \?</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">Untuk memindai barcode, Catima membutuhkan akses ke kamera mu. Tap disini untuk mengganti pengaturan perizinan mu.</string>
|
||||
<string name="cameraPermissionRequired">Berikan izin untuk mengakses kamera anda…</string>
|
||||
<string name="storageReadPermissionRequired">Berikan izin untuk membaca penyimpanan anda…</string>
|
||||
<string name="validFromDate">Valid dari</string>
|
||||
<string name="validFromSentence">Valid dari:
|
||||
\n<xliff:g>%s</xliff:g></string>
|
||||
<string name="anyDate">Kapan pun</string>
|
||||
<string name="chooseValidFromDate">Pilih valid dari tanggal</string>
|
||||
</resources>
|
||||
@@ -1,14 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="action_add">Bæta</string>
|
||||
<string name="noBarcode">Nei strikamerkið</string>
|
||||
<string name="action_search">Leita að</string>
|
||||
<string name="delete">Eyða</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="noGiftCards">Smelltu á + plús takka til að bæta korti, eða að flytja inn frá ⋮ Valmynd.</string>
|
||||
<string name="note">Athugið</string>
|
||||
<string name="barcodeType">Strikamerkið tegund</string>
|
||||
<string name="cancel">Hætta</string>
|
||||
<string name="noMatchingGiftCards">Vissi ekki að finna neitt. Reyna að breyta leita.</string>
|
||||
<string name="noMatchingGiftCards">Engar niðurstöður. Prófaðu að breyta leitarorði.</string>
|
||||
<string name="storeName">Nafnið</string>
|
||||
<string name="barcodeNoBarcode">Þetta kort hefur ekki strikamerkið</string>
|
||||
<string name="star">Bæta við eftirlæti</string>
|
||||
@@ -33,7 +33,6 @@
|
||||
<string name="importExportHelp">Stuðningur upp spil gerir þér kleift að færa þá til annar tæki.</string>
|
||||
<string name="importSuccessfulTitle">Flutt</string>
|
||||
<string name="importFailedTitle">Innflutningur mistókst</string>
|
||||
<string name="noExternalStoragePermissionError">Grant ytri geymslu leyfi til að flytja eða flytja spil fyrstu</string>
|
||||
<string name="exportOptionExplanation">Gögnum verður skrifað á stað af eigin vali.</string>
|
||||
<string name="importOptionFilesystemTitle">Innflutningur frá möppuna</string>
|
||||
<string name="importOptionFilesystemExplanation">Velja ákveðna skrá frá möppuna.</string>
|
||||
@@ -81,4 +80,17 @@
|
||||
<string name="expiryDate">Fyrningu</string>
|
||||
<string name="moveDown">Fara neðar</string>
|
||||
<string name="chooseExpiryDate">Velja rennur</string>
|
||||
</resources>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> valið</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> valin</item>
|
||||
</plurals>
|
||||
<string name="noGiftCardsGroup">Búðu til nokkur kort og settu þau síðan í hópinn hér.</string>
|
||||
<string name="settings_brown_theme">Brún</string>
|
||||
<string name="settings_green_theme">Grænn</string>
|
||||
<string name="settings_grey_theme">Grár</string>
|
||||
<string name="sort">flokka</string>
|
||||
<string name="sort_by">flokka Eftir</string>
|
||||
<string name="nextCard">Næsta</string>
|
||||
<string name="settings_blue_theme">Blár</string>
|
||||
<string name="settings_sky_blue_theme">Himinblár</string>
|
||||
</resources>
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
<string name="exportFailed">Impossibile eseguire l\'esportazione</string>
|
||||
<string name="importing">Importazione in corso…</string>
|
||||
<string name="exporting">Esportazione in corso…</string>
|
||||
<string name="noExternalStoragePermissionError">Concedi il permesso di archiviazione esterna per importare o esportare dati</string>
|
||||
<string name="importOptionFilesystemTitle">Importa dall\'archivio</string>
|
||||
<string name="importOptionFilesystemExplanation">Scegli un file dall\'archivio.</string>
|
||||
<string name="importOptionFilesystemButton">Dall\'archivio</string>
|
||||
@@ -270,4 +269,10 @@
|
||||
<string name="currentBalanceSentence">Bilancio attuale: <xliff:g>%s</xliff:g></string>
|
||||
<string name="newBalanceSentence">Nuovo bilancio: <xliff:g>%s</xliff:g></string>
|
||||
<string name="importCards">Importa carte</string>
|
||||
<string name="storageReadPermissionRequired">Per questa azione è necessario il permesso per accedere alla memoria del dispositivo…</string>
|
||||
<string name="cameraPermissionRequired">Per questa azione è necessario il permesso ad accedere alla fotocamera…</string>
|
||||
<string name="validFromDate">Valido dal</string>
|
||||
<string name="chooseValidFromDate">Scegli la data di validità</string>
|
||||
<string name="validFromSentence">Valido da: <xliff:g>%s</xliff:g></string>
|
||||
<string name="anyDate">Qualsiasi data</string>
|
||||
</resources>
|
||||
@@ -87,7 +87,6 @@
|
||||
<string name="importOptionFilesystemExplanation">ストレージからファイルを選択してください。</string>
|
||||
<string name="importOptionFilesystemTitle">ストレージからインポート</string>
|
||||
<string name="exportOptionExplanation">選択した場所にデータを出力します。</string>
|
||||
<string name="noExternalStoragePermissionError">データをインポート/エクスポートするために外部ストレージへのアクセスを許可してください</string>
|
||||
<string name="exporting">エクスポート中…</string>
|
||||
<string name="importing">インポート中…</string>
|
||||
<string name="exportFailed">カードをエクスポートできませんでした</string>
|
||||
|
||||
@@ -77,4 +77,6 @@
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="other">카드 <xliff:g>%d</xliff:g> 제거</item>
|
||||
</plurals>
|
||||
<string name="noGiftCardsGroup">카드를 몇 장 만든 다음 여기에서 그룹에 할당합니다.</string>
|
||||
<string name="noCardsMessage">먼저 카드 추가</string>
|
||||
</resources>
|
||||
@@ -23,7 +23,6 @@
|
||||
<string name="exportFailed">Nepavyko eksportuoti</string>
|
||||
<string name="importing">Importuoja…</string>
|
||||
<string name="exporting">Eksportuoja…</string>
|
||||
<string name="noExternalStoragePermissionError">Pirmiausia suteikite išorinės saugyklos leidimą, kad galėtumėte importuoti arba eksportuoti korteles</string>
|
||||
<string name="about">Apie</string>
|
||||
<string name="app_license">Copylefted laisvoji programinė įranga, licencijuota GPLv3+</string>
|
||||
<string name="about_title_fmt">Apie <xliff:g id="app_name">%s</xliff:g></string>
|
||||
@@ -48,7 +47,7 @@
|
||||
<string name="importLoyaltyCardKeychainMessage">Pasirinkite savo <i> LoyaltyCardKeychain.csv</i> eksportą iš Loyalty Card Keychain, kurį norite importuoti.
|
||||
\nSukurkite jį iš Loyalty Card Keychain meniu Importavimas/Eksportavimas, pirmiausia paspausdami Eksportuoti.</string>
|
||||
<string name="importLoyaltyCardKeychain">Importuoti iš Loyalty Card Keychain</string>
|
||||
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
|
||||
<string name="app_loyalty_card_keychain">Lojalumo kortelės</string>
|
||||
<string name="parsingBalanceFailed">Panašu, kad <xliff:g> %s </xliff:g> reikšmė nėra tinkama.</string>
|
||||
<string name="moveBarcodeToCenterOfScreen">Centruoti brūkšninį kodą ekrane</string>
|
||||
<string name="moveBarcodeToTopOfScreen">Perkelti brūkšninį kodą į ekrano viršų</string>
|
||||
@@ -270,4 +269,6 @@
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> taškų</item>
|
||||
</plurals>
|
||||
<string name="importCards">Importuoti korteles</string>
|
||||
<string name="storageReadPermissionRequired">Šio veiksmo atlikimui reikalinga prieiga prie saugyklos…</string>
|
||||
<string name="cameraPermissionRequired">Šio veiksmo atlikimui reikalinga prieiga prie kameros…</string>
|
||||
</resources>
|
||||
@@ -48,7 +48,6 @@
|
||||
<string name="exportFailed">Kartes neizdevās eksportēt</string>
|
||||
<string name="importing">Importē…</string>
|
||||
<string name="exporting">Eksportē…</string>
|
||||
<string name="noExternalStoragePermissionError">Piešķiriet ārējai atmiņai atļauju vispirms importēt vai eksportēt kartes</string>
|
||||
<string name="exportOptionExplanation">Dati tiks saglabāti Jūsu izvēlētajā vietā.</string>
|
||||
<string name="importOptionFilesystemTitle">Imports no failu sistēmas</string>
|
||||
<string name="importOptionFilesystemExplanation">Izvēlieties konkrētu failu no failu sistēmas.</string>
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
<string name="exportFailed">Kunne ikke utføre eksport</string>
|
||||
<string name="importing">Importerer…</string>
|
||||
<string name="exporting">Exporterer…</string>
|
||||
<string name="noExternalStoragePermissionError">Innvilg lagringstilgang til eksternlager for å importere eller eksportere data</string>
|
||||
<string name="exportOptionExplanation">Data skrives dit du ønsker det.</string>
|
||||
<string name="importOptionFilesystemTitle">Importer fra filsystem</string>
|
||||
<string name="importOptionFilesystemExplanation">Velg spesifikk fil fra filsystemet.</string>
|
||||
@@ -254,7 +253,7 @@
|
||||
<item quantity="other">Vis arkiv (<xliff:g>%1$d</xliff:g> kort)</item>
|
||||
</plurals>
|
||||
<string name="failedToRetrieveImageFile">Kunne ikke hente bildefil</string>
|
||||
<string name="barcodeLongPressMessage">Kun bilder kan åpnes i galleriet</string>
|
||||
<string name="barcodeLongPressMessage">Kun bilder kan åpnes i galleriprogrammet</string>
|
||||
<string name="cameraPermissionDeniedTitle">Fikk ikke tilgang til kameraet</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">Catima trenger kameratilgang for å skanne strekkoder. Trykk her for å endre tilgangsinnstillingene.</string>
|
||||
<string name="importCards">Importer kort</string>
|
||||
@@ -263,4 +262,10 @@
|
||||
<string name="updateBalanceHint">Skriv inn beløp</string>
|
||||
<string name="newBalanceSentence">Ny saldo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="updateBalance">Oppdater saldo</string>
|
||||
<string name="validFromDate">Gyldig fra</string>
|
||||
<string name="anyDate">Når som helst</string>
|
||||
<string name="chooseValidFromDate">Velg en gyldig dato</string>
|
||||
<string name="storageReadPermissionRequired">Lagringslesetilgang kreves for denne handlingen …</string>
|
||||
<string name="validFromSentence">Gyldig fra: <xliff:g>%s</xliff:g></string>
|
||||
<string name="cameraPermissionRequired">Kameratilgang kreves for denne handlingen …</string>
|
||||
</resources>
|
||||
@@ -38,7 +38,6 @@
|
||||
<string name="exportFailed">Het exporteren is mislukt</string>
|
||||
<string name="importing">Bezig met importeren…</string>
|
||||
<string name="exporting">Bezig met exporteren…</string>
|
||||
<string name="noExternalStoragePermissionError">Verleen het recht ‘externe opslag’ om gegevens te kunnen im- of exporteren</string>
|
||||
<string name="exportOptionExplanation">De gegevens worden weggeschreven op een locatie naar keuze.</string>
|
||||
<string name="importOptionFilesystemTitle">Importeren uit bestandssysteem</string>
|
||||
<string name="importOptionFilesystemExplanation">Kies een specifiek bestand van het bestandssysteem.</string>
|
||||
@@ -263,4 +262,10 @@
|
||||
<string name="updateBalanceHint">Voer een bedrag in</string>
|
||||
<string name="newBalanceSentence">Nieuw saldo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="importCards">Kaarten importeren</string>
|
||||
<string name="storageReadPermissionRequired">Toestemming om de opslag uit te lezen benodigd voor deze actie…</string>
|
||||
<string name="cameraPermissionRequired">Toestemming om de camera te openen benodigd voor deze actie…</string>
|
||||
<string name="anyDate">Iedere datum</string>
|
||||
<string name="validFromDate">Geldig vanaf</string>
|
||||
<string name="validFromSentence">Geldig vanaf: <xliff:g>%s</xliff:g></string>
|
||||
<string name="chooseValidFromDate">Kies een geldige vanaf-datum</string>
|
||||
</resources>
|
||||
@@ -37,7 +37,6 @@
|
||||
<string name="exportFailed">Nie udało się wyeksportować</string>
|
||||
<string name="importing">Importowanie…</string>
|
||||
<string name="exporting">Eksportowanie…</string>
|
||||
<string name="noExternalStoragePermissionError">Przyznaj uprawnienia pamięci zewnętrznej, aby importować lub eksportować dane</string>
|
||||
<string name="importOptionFilesystemTitle">Importuj z systemu plików</string>
|
||||
<string name="importOptionFilesystemExplanation">Wybierz określony plik z systemu plików.</string>
|
||||
<string name="importOptionFilesystemButton">Z systemu plików</string>
|
||||
@@ -133,7 +132,7 @@
|
||||
\n
|
||||
\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="app_loyalty_card_keychain">Brelok dla twoich kart lojalnościowych</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>
|
||||
@@ -277,4 +276,10 @@
|
||||
<string name="cameraPermissionDeniedTitle">Odmówiono dostępu do kamery</string>
|
||||
<string name="newBalanceSentence">Nowe saldo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="importCards">Importuj karty</string>
|
||||
<string name="storageReadPermissionRequired">Pozwolenie na odczytanie pamięci masowej potrzebne do wykonania tej czynności…</string>
|
||||
<string name="cameraPermissionRequired">Zezwolenie na dostęp do kamery potrzebne do wykonania tej czynności…</string>
|
||||
<string name="validFromDate">Obowiązuje od</string>
|
||||
<string name="chooseValidFromDate">Wybierz datę rozpoczęcia ważności</string>
|
||||
<string name="anyDate">Dowolna data</string>
|
||||
<string name="validFromSentence">Ważny od: <xliff:g>%s</xliff:g></string>
|
||||
</resources>
|
||||
@@ -72,7 +72,6 @@
|
||||
<string name="moveUp">Subir</string>
|
||||
<string name="moveDown">Descer</string>
|
||||
<string name="leaveWithoutSaveTitle">Sair</string>
|
||||
<string name="noExternalStoragePermissionError">Conceda primeiro a autorização de acesso ao armazenamento externo para importar ou exportar dados</string>
|
||||
<string name="importExportHelp">A cópia de segurança dos seus dados permite-lhe movê-los para outro dispositivo.</string>
|
||||
<string name="importSuccessfulTitle">Importado</string>
|
||||
<string name="importFailedTitle">A importação falhou</string>
|
||||
@@ -270,4 +269,10 @@
|
||||
<string name="updateBalance">Atualizar saldo</string>
|
||||
<string name="updateBalanceTitle">Quanto gastou\?</string>
|
||||
<string name="updateBalanceHint">Introduza o valor</string>
|
||||
<string name="storageReadPermissionRequired">É necessária a permissão para ler o armazenamento para esta ação…</string>
|
||||
<string name="cameraPermissionRequired">É necessária a permissão para aceder à câmara para esta ação…</string>
|
||||
<string name="validFromDate">Válido desde</string>
|
||||
<string name="anyDate">Qualquer data</string>
|
||||
<string name="chooseValidFromDate">Escolha uma data desde válida</string>
|
||||
<string name="validFromSentence">Válido desde: <xliff:g>%s</xliff:g></string>
|
||||
</resources>
|
||||
@@ -38,7 +38,6 @@
|
||||
<string name="exportFailed">Nu s-a putut exporta carduri</string>
|
||||
<string name="importing">Importul…</string>
|
||||
<string name="exporting">Exportul…</string>
|
||||
<string name="noExternalStoragePermissionError">Acordați mai întâi permisiunea de stocare externă pentru a importa sau exporta carduri</string>
|
||||
<string name="exportOptionExplanation">Datele vor fi scrise într-o locație aleasă de dumneavoastră.</string>
|
||||
<string name="importOptionFilesystemTitle">Import din sistemul de fișiere</string>
|
||||
<string name="importOptionApplicationTitle">Utilizați o altă aplicație</string>
|
||||
|
||||
@@ -38,7 +38,6 @@
|
||||
<string name="exportFailed">Невозможно выполнить экспорт</string>
|
||||
<string name="importing">Импорт…</string>
|
||||
<string name="exporting">Экспорт…</string>
|
||||
<string name="noExternalStoragePermissionError">Импорт или экспорт данных невозможен без разрешения на доступ к хранилищу</string>
|
||||
<string name="exportOptionExplanation">Данные будут записаны в выбранное место.</string>
|
||||
<string name="importOptionFilesystemTitle">Импорт из файловой системы</string>
|
||||
<string name="importOptionFilesystemExplanation">Выберете файл на файловой системе.</string>
|
||||
@@ -277,4 +276,10 @@
|
||||
<string name="updateBalanceHint">Введите сумму</string>
|
||||
<string name="updateBalanceTitle">Какое изменение\?</string>
|
||||
<string name="importCards">Импорт карт</string>
|
||||
<string name="storageReadPermissionRequired">Для этого действия необходимо разрешение на чтение хранилища…</string>
|
||||
<string name="cameraPermissionRequired">Для этого действия необходимо разрешение на доступ к камере…</string>
|
||||
<string name="validFromDate">Действует с</string>
|
||||
<string name="anyDate">Любая дата</string>
|
||||
<string name="chooseValidFromDate">Выберите дату действия</string>
|
||||
<string name="validFromSentence">Действует с: <xliff:g>%s</xliff:g></string>
|
||||
</resources>
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="action_add">Pridať</string>
|
||||
<string name="noGiftCards">Zatiaľ nemáte žiadne vernostné karty. Kliknite na tlačidlo \"+\" (plus) vyššie a začnite.\n\nAplikácia Vernostné karty umožňuje nosiť svoje vernostné karty v telefóne, kde sú vždy na dosah.</string>
|
||||
<string name="noGiftCards">Ak chcete pridať kartu, kliknite na tlačidlo + plus alebo ju importujte z ⋮ ponuky.</string>
|
||||
<string name="storeName">Názov</string>
|
||||
<string name="note">Poznámka</string>
|
||||
<string name="cardId">ID karty</string>
|
||||
@@ -15,38 +15,37 @@
|
||||
<string name="sendLabel">Odoslať…</string>
|
||||
<string name="editCardTitle">Upraviť kartu</string>
|
||||
<string name="addCardTitle">Pridať kartu</string>
|
||||
<string name="scanCardBarcode">Zosnímajte čiarový kód na karte</string>
|
||||
<string name="scanCardBarcode">Skenovať čiarový kód</string>
|
||||
<string name="cardShortcut">Skratka</string>
|
||||
<string name="noCardsMessage">Najprv pridajte kartu</string>
|
||||
<string name="noStoreError">Nebol zadaný obchod</string>
|
||||
<string name="noStoreError">Nebol zadaný žiadny názov</string>
|
||||
<string name="noCardIdError">Nebolo zadané ID</string>
|
||||
<string name="noCardExistsError">Nepodarilo sa nájsť túto kartu</string>
|
||||
<string name="importExport">Import/Export</string>
|
||||
<string name="exportName">Export</string>
|
||||
<string name="importExportHelp">Zálohovanie dát Vám umožní presunúť Vaše uložené karty na iné zariadenie.</string>
|
||||
<string name="importExportHelp">Zálohovanie vašich údajov umožňuje ich presun na iné zariadenie.</string>
|
||||
<string name="importSuccessfulTitle">Importované</string>
|
||||
<string name="importFailedTitle">Import zlyhal</string>
|
||||
<string name="importFailed">Zlyhal import</string>
|
||||
<string name="importFailed">Nemožno vykonať import</string>
|
||||
<string name="exportSuccessfulTitle">Exportované</string>
|
||||
<string name="exportFailedTitle">Export zlyhal</string>
|
||||
<string name="exportFailed">Zlyhal export</string>
|
||||
<string name="exportFailed">Nemožno vykonať export</string>
|
||||
<string name="importing">Importujem…</string>
|
||||
<string name="exporting">Exportujem…</string>
|
||||
<string name="noExternalStoragePermissionError">Nie je možné importovať a exportovať karty bez prístupu k externému úložisku</string>
|
||||
<string name="importOptionFilesystemTitle">Import zo súborového systému</string>
|
||||
<string name="importOptionFilesystemExplanation">Vyberte súbor zo súborového systému.</string>
|
||||
<string name="importOptionFilesystemButton">Zo súborového systému</string>
|
||||
<string name="importOptionApplicationTitle">Použite externú aplikáciu</string>
|
||||
<string name="importOptionApplicationExplanation">Na otvorenie súboru použite externú aplikáciu, ako Dropbox, Disk Google, alebo Vášho obľúbeného správcu súborov.</string>
|
||||
<string name="importOptionApplicationButton">Použiť externú aplikáciu</string>
|
||||
<string name="importOptionApplicationTitle">Použite inú aplikáciu</string>
|
||||
<string name="importOptionApplicationExplanation">Na otvorenie súboru použite ľubovoľnú aplikáciu alebo obľúbeného správcu súborov.</string>
|
||||
<string name="importOptionApplicationButton">Použiť inú aplikáciu</string>
|
||||
<string name="about">O aplikácii</string>
|
||||
<string name="app_license">Licencované GPLv3.</string>
|
||||
<string name="app_license">Copyleftovaný slobodný softvér s licenciou GPLv3+</string>
|
||||
<string name="about_title_fmt">O <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Verzia: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Informácia pri revízii: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Informácia o revízii: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="selectBarcodeTitle">Vyberte čiarový kód</string>
|
||||
<string name="copy_to_clipboard_toast">ID karty skopírované do schránky</string>
|
||||
<string name="thumbnailDescription">Náhľad karty</string>
|
||||
<string name="copy_to_clipboard_toast">ID skopírované do schránky</string>
|
||||
<string name="thumbnailDescription">Miniatúra</string>
|
||||
<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>
|
||||
@@ -54,11 +53,11 @@
|
||||
<string name="deleteConfirmation">Naozaj chcete túto kartu odstrániť?</string>
|
||||
<string name="star">Pridať k obľúbeným</string>
|
||||
<string name="noBarcode">Žiadny čiarový kód</string>
|
||||
<string name="barcodeNoBarcode">Táto karta nemá čiarový kód</string>
|
||||
<string name="barcodeNoBarcode">Čiarový kód nie je k dispozícii</string>
|
||||
<string name="barcodeType">Typ čiarových kódov</string>
|
||||
<string name="noMatchingGiftCards">Nenašiel som nič. Skúste zmeniť vyhľadávanie.</string>
|
||||
<string name="noMatchingGiftCards">Žiadne výsledky. Skúste zmeniť vyhľadávanie.</string>
|
||||
<string name="action_search">Vyhľadávanie</string>
|
||||
<string name="chooseImportType">Importovať údaje z\?</string>
|
||||
<string name="chooseImportType">Importovať údaje z</string>
|
||||
<string name="points">Body</string>
|
||||
<string name="currency">Mena</string>
|
||||
<string name="balance">Vyváženie</string>
|
||||
@@ -69,7 +68,7 @@
|
||||
<string name="chooseExpiryDate">Zvoľte dátum skončenia platnosti</string>
|
||||
<string name="never">Nikdy</string>
|
||||
<string name="addFromImage">Vyberte obrázok z galérie</string>
|
||||
<string name="addManually">Ručné zadanie ID karty</string>
|
||||
<string name="addManually">Ručné zadanie ID</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Odísť bez uloženia\?</string>
|
||||
<string name="leaveWithoutSaveTitle">Výstup</string>
|
||||
<string name="moveDown">Pohyb smerom nadol</string>
|
||||
@@ -77,14 +76,14 @@
|
||||
<string name="failedOpeningFileManager">Najprv nainštalujte správcu súborov.</string>
|
||||
<string name="deleteConfirmationGroup">Vymazať skupinu\?</string>
|
||||
<string name="all">Všetky</string>
|
||||
<string name="noGroupCards">Táto skupina neobsahuje karty</string>
|
||||
<string name="noGroups">Ak chcete najprv pridať skupiny na kategorizáciu, kliknite na tlačidlo + plus.</string>
|
||||
<string name="noGroupCards">Táto skupina je prázdna</string>
|
||||
<string name="noGroups">Kliknutím na tlačidlo + plus pridáte skupiny na kategorizáciu.</string>
|
||||
<string name="groups">Skupiny</string>
|
||||
<string name="enter_group_name">Zadajte názov skupiny</string>
|
||||
<string name="exportSuccessful">Export údajov z karty</string>
|
||||
<string name="importSuccessful">Import údajov z karty</string>
|
||||
<string name="exportSuccessful">Údaje exportované</string>
|
||||
<string name="importSuccessful">Údaje importované</string>
|
||||
<string name="intent_import_card_from_url_share_text">Chcem sa s vami podeliť o pohľadnicu</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Zabráňte uzamknutiu obrazovky</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Zabrániť uzamknutiu obrazovky</string>
|
||||
<string name="settings_keep_screen_on">Nechajte obrazovku zapnutú</string>
|
||||
<string name="settings_max_font_size_scale">Maximálna veľkosť písma</string>
|
||||
<string name="card_ids_copied">Skopírované ID</string>
|
||||
@@ -94,7 +93,7 @@
|
||||
<string name="settings_system_theme">Systém</string>
|
||||
<string name="settings_theme">Téma</string>
|
||||
<string name="starImage">Obľúbená hviezda</string>
|
||||
<string name="enterBarcodeInstructions">Zadajte ID karty a vyberte typ čiarového kódu nižšie alebo \"Táto karta nemá čiarový kód\".</string>
|
||||
<string name="enterBarcodeInstructions">Zadajte ID a vyberte typ čiarového kódu nižšie alebo \"Nie je tu žiadny čiarový kód\".</string>
|
||||
<string name="exportOptionExplanation">Údaje sa zapíšu na vami zvolené miesto.</string>
|
||||
<string name="failedParsingImportUriError">Nepodarilo sa analyzovať import URI</string>
|
||||
<string name="share">Zdieľať</string>
|
||||
@@ -205,5 +204,75 @@
|
||||
<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">Zatiaľ nemáte žiadne vernostné karty. Keď nejaké pridáte, môžete ich priradiť ku skupine tu.</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting"></string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">Na skenovanie čiarových kódov potrebuje Catima prístup k fotoaparátu. Ťuknite sem a zmeňte nastavenia oprávnení.</string>
|
||||
<string name="importCards">Importovať karty</string>
|
||||
<string name="settings_card_orientation">Orientácia čiarového kódu</string>
|
||||
<string name="settings_lock_on_opening_orientation">Zamknúť na orientáciu použitú pri otváraní karty</string>
|
||||
<string name="app_loyalty_card_keychain">Kľúčenka vernostných kariet</string>
|
||||
<string name="settings_oled_dark">Čisto čierne pozadie pre tmavú tému</string>
|
||||
<string name="failedToRetrieveImageFile">Nepodarilo sa získať súbor obrázku</string>
|
||||
<string name="updateBalance">Aktualizovať zostatok</string>
|
||||
<string name="and_data_usage">a využitie dát</string>
|
||||
<string name="options">Možnosti</string>
|
||||
<string name="starred">S hviezdičkou</string>
|
||||
<string name="set_scale">Nastaviť mierku</string>
|
||||
<string name="duplicateCard">Duplikovať</string>
|
||||
<string name="archive">Archivovať</string>
|
||||
<string name="unarchive">Vrátiť z archivu</string>
|
||||
<string name="archived">Karta archivovaná</string>
|
||||
<string name="unarchived">Karta vrátená z archívu</string>
|
||||
<string name="previousCard">Predošlá</string>
|
||||
<string name="nextCard">Nasledujúca</string>
|
||||
<string name="updateBalanceTitle">Koľko ste minuli\?</string>
|
||||
<string name="updateBalanceHint">Zadajte čiastku</string>
|
||||
<string name="failedToOpenUrl">Najprv nainštalujte webový prehliadač</string>
|
||||
<string name="welcome">Vitajte v Catima</string>
|
||||
<plurals name="balancePoints">
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> bod</item>
|
||||
<item quantity="few"><xliff:g>%s</xliff:g> body</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> bodov</item>
|
||||
</plurals>
|
||||
<string name="validFromDate">Platnosť od</string>
|
||||
<string name="anyDate">Akýkoľvek dátum</string>
|
||||
<string name="chooseValidFromDate">Zvoliť dátum platné od</string>
|
||||
<string name="validFromSentence">Platnosť od: <xliff:g>%s</xliff:g></string>
|
||||
<string name="cameraPermissionRequired">Pre túto akciu je potrebné oprávnenie na prístup k fotoaparátu…</string>
|
||||
<string name="privacy_policy_popup_text">Oznámenie o zásadách ochrany osobných údajov (vyžaduje sa v niektorých obchodoch s aplikáciami):
|
||||
\n
|
||||
\nNEZHROMAŽĎUJÚ SA VÔBEC ŽIADNE ÚDAJE, čo môže ktokoľvek potvrdiť, keďže naša aplikácia je slobodný softvér.</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Vyberte svoj export <i>LoyaltyCardKeychain.csv</i> z Kľúčenky vernostných kariet, ktorý chcete importovať.
|
||||
\nVytvorte ho z ponuky Import/Export v aplikácii Loyalty Card Keychain tak, že tam najprv stlačíte tlačidlo Exportovať.</string>
|
||||
<string name="importVoucherVaultMessage">Vyberte svoj <i>vouchervault.json</i> export z Trezoru poukážok pre import.
|
||||
\nNajprv ho vytvorte stlačením tlačidla Export v aplikácii Voucher Vault.</string>
|
||||
<string name="shortcutSelectCard">Vybrať kartu</string>
|
||||
<string name="include_if_asking_support">Ak chcete požiadať o podporu, uveďte nasledujúce informácie:</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> kariet (<xliff:g id="archivedCount">%2$d</xliff:g> archivovaných)</item>
|
||||
</plurals>
|
||||
<plurals name="viewArchivedCardsWithCount">
|
||||
<item quantity="one">Zobraziť archív (<xliff:g>%1$d</xliff:g> karta)</item>
|
||||
<item quantity="few">Zobraziť archív (<xliff:g>%1$d</xliff:g> karty)</item>
|
||||
<item quantity="other">Zobraziť archív (<xliff:g>%1$d</xliff:g> kariet)</item>
|
||||
</plurals>
|
||||
<string name="swipeToSwitchImages">Potiahnutím prstom prepínate obrázky, podržaním otvoríte obrázok v aplikácii galéria</string>
|
||||
<string name="barcodeLongPressMessage">V aplikácii galéria je možné otvoriť iba obrázky</string>
|
||||
<string name="cameraPermissionDeniedTitle">Nepodarilo sa získať prístup k fotoaparátu</string>
|
||||
<string name="storageReadPermissionRequired">Pre túto akciu je potrebné oprávnenie na čítanie úložiska…</string>
|
||||
<string name="settings_follow_system_orientation">Podľa systému</string>
|
||||
<string name="settings_portrait_orientation">Na výšku</string>
|
||||
<string name="settings_landscape_orientation">Na šírku</string>
|
||||
<string name="importFidmeMessage">Vyberte svoj <i>fidme-export-request-xxxxxx.zip</i> export zo služby FidMe pre import a potom vyberte typy čiarových kódov ručne.
|
||||
\nVytvorte ho z profilu FidMe tak, že najprv vyberiete položku Ochrana údajov a potom stlačíte tlačidlo Extrahovať moje údaje.</string>
|
||||
<string name="importStocardMessage">Vyberte svoj <i>***-sync.zip</i> export zo Stocard pre import.
|
||||
\nZískate ho zaslaním e-mailu na adresu support@stocardapp.com, v ktorom požiadate o export svojich údajov.</string>
|
||||
<string name="currentBalanceSentence">Aktuálny zostatok: <xliff:g>%s</xliff:g></string>
|
||||
<string name="copy_to_clipboard_multiple_toast">ID skopírované do schránky</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Chcem sa s vami zdielať karty</string>
|
||||
<string name="app_contributors">Podporili: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="archiveList">Archív</string>
|
||||
<string name="noUnarchivedCardsMessage">Nie sú žiadne karty vrátené z archívu</string>
|
||||
<string name="newBalanceSentence">Nový zostatok: <xliff:g>%s</xliff:g></string>
|
||||
<string name="failedLaunchingPhotoPicker">Nepodarilo sa nájsť podporovanú aplikáciu galérie</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">Dodaj</string>
|
||||
<string name="noGiftCards">Trenutno nimate shranjene nobene kartice zvestobe. Kliknite \"+\" (plus) na vrhu, da jih dodate.\n\n Aplikacija Kartice zvestobe Vam omogoča, da imate kartice zvestobe shranjene na Vašem telefonu in vedno v dosegu roke.</string>
|
||||
<string name="storeName">Shrani</string>
|
||||
<string name="noGiftCards">Pritisnite gumb + za dodajanje nove kartice ali gumb⋮v meniju za uvoz baze kartic iz datoteke.</string>
|
||||
<string name="storeName">Ime</string>
|
||||
<string name="note">Zabeležka</string>
|
||||
<string name="cardId">Št. kartice</string>
|
||||
<string name="cancel">Prekliči</string>
|
||||
@@ -18,35 +18,34 @@
|
||||
<string name="scanCardBarcode">Skeniraj črtno kodo</string>
|
||||
<string name="cardShortcut">Bližnjica do kartice</string>
|
||||
<string name="noCardsMessage">Najprej dodajte kartico</string>
|
||||
<string name="noStoreError">Ime trgovine ni bilo vnešeno</string>
|
||||
<string name="noCardIdError">Številka kartice ni bila vnešena</string>
|
||||
<string name="noCardExistsError">Te kartice zvestobe ni bilo moč najti</string>
|
||||
<string name="noStoreError">Ime ni bilo vnešeno</string>
|
||||
<string name="noCardIdError">ID številka kartice ni bila vnešena</string>
|
||||
<string name="noCardExistsError">Te kartice zvestobe ni bilo mogoče najti</string>
|
||||
<string name="importExport">Uvozi/izvozi</string>
|
||||
<string name="exportName">Izvozi</string>
|
||||
<string name="importExportHelp">Varnostna kopija omogoča varen prenos kartic na druge naprave.</string>
|
||||
<string name="importExportHelp">Varnostna kopija podatkovne baze kartic zvestobe omogoča prenos baze kartic tudi na drugo napravo.</string>
|
||||
<string name="importSuccessfulTitle">Uvoz je bil uspešen</string>
|
||||
<string name="importFailedTitle">Uvoz ni uspel</string>
|
||||
<string name="importFailed">Napaka pri uvozu</string>
|
||||
<string name="importFailed">Napaka pri uvozu baze</string>
|
||||
<string name="exportSuccessfulTitle">Izvoz je uspel</string>
|
||||
<string name="exportFailedTitle">Izvoz ni uspel</string>
|
||||
<string name="exportFailed">Napaka pri izvozu</string>
|
||||
<string name="exportFailed">Napaka pri izvozu baze</string>
|
||||
<string name="importing">Uvažanje…</string>
|
||||
<string name="exporting">Izvažanje…</string>
|
||||
<string name="noExternalStoragePermissionError">Izvažanje in uvažanje je nemogoče brez omogočenega dostopa do zunanje shrambe</string>
|
||||
<string name="importOptionFilesystemTitle">Uvozi iz datotečnega sistema</string>
|
||||
<string name="importOptionFilesystemExplanation">Izberite specifično datoteko iz datotečnega sistema.</string>
|
||||
<string name="importOptionFilesystemButton">Iz datotečnega sistema</string>
|
||||
<string name="importOptionApplicationTitle">Uporabi zunanjo aplikacijo</string>
|
||||
<string name="importOptionApplicationTitle">Uporabi drugo aplikacijo</string>
|
||||
<string name="importOptionApplicationExplanation">Uporabi zunanjo aplikacijo, kot npr. Dropbox, Google Drive ali ostale upravljalnike datotek, za odpiranje datoteke.</string>
|
||||
<string name="importOptionApplicationButton">Uporabi zunanjo aplikacijo</string>
|
||||
<string name="importOptionApplicationButton">Uporabi drugo aplikacijo</string>
|
||||
<string name="about">Več o aplikaciji</string>
|
||||
<string name="app_license">Licencirano s skladu z GPLv3.</string>
|
||||
<string name="app_license">Odprtokodna programska oprema, licencirana skladno s GPL3+</string>
|
||||
<string name="about_title_fmt">Več o <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Verzija: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Informacije o popravkih: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="selectBarcodeTitle">Izberite črtno kodo</string>
|
||||
<string name="copy_to_clipboard_toast">Številka kartice je bila kopirana v odložišče</string>
|
||||
<string name="thumbnailDescription">Ikona kartice</string>
|
||||
<string name="copy_to_clipboard_toast">ID številka je kopirana v odložišče</string>
|
||||
<string name="thumbnailDescription">Sličica</string>
|
||||
<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>
|
||||
@@ -54,7 +53,7 @@
|
||||
<string name="deleteConfirmation">Prosim potrdite, če želite izbrisati to kartico\?</string>
|
||||
<string name="card">Kartica</string>
|
||||
<string name="addFromImage">Izberite sliko iz galerije</string>
|
||||
<string name="addManually">Ročno vnesite št. kartice</string>
|
||||
<string name="addManually">Ročno vnesite ID kartice</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Zapustite brez shranjevanja\?</string>
|
||||
<string name="leaveWithoutSaveTitle">Izhod</string>
|
||||
<string name="moveDown">Premikanje navzdol</string>
|
||||
@@ -62,33 +61,34 @@
|
||||
<string name="failedOpeningFileManager">Najprej namestite upravitelja datotek.</string>
|
||||
<string name="deleteConfirmationGroup">Brisanje skupine\?</string>
|
||||
<string name="all">Vse</string>
|
||||
<string name="noGroupCards">Ta skupina ne vsebuje kartic</string>
|
||||
<string name="noGroups">Kliknite gumb + plus, če želite najprej dodati skupine za kategorizacijo.</string>
|
||||
<string name="noGroupCards">Ta skupina je prazna</string>
|
||||
<string name="noGroups">Pritisnite gumb \"+\", če želite dodati skupine za kategorizacijo.</string>
|
||||
<string name="groups">Skupine</string>
|
||||
<string name="enter_group_name">Vnesite ime skupine</string>
|
||||
<string name="exportSuccessful">Izvoženi podatki o karticah</string>
|
||||
<string name="importSuccessful">Uvoženi podatki o karticah</string>
|
||||
<string name="exportSuccessful">Podatkovna baza izvožena</string>
|
||||
<string name="importSuccessful">Podatkovna baza uvožena</string>
|
||||
<string name="intent_import_card_from_url_share_text">Z vami želim deliti kartico</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Preprečitev zaklepanja zaslona</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Prepreči zaklepanje zaslona</string>
|
||||
<string name="settings_keep_screen_on">Ohranite zaslon vklopljen</string>
|
||||
<string name="enterBarcodeInstructions">Vnesite ID kartice in spodaj izberite vrsto črtne kode ali \"Ta kartica nima črtne kode\".</string>
|
||||
<string name="enterBarcodeInstructions">Vnesite ID kartice in spodaj izberite vrsto črtne kode ali izbiro \"Ta kartica nima črtne kode\".</string>
|
||||
<string name="settings_max_font_size_scale">Največja velikost pisave</string>
|
||||
<string name="settings_dark_theme">Temno</string>
|
||||
<string name="settings_light_theme">Svetlo</string>
|
||||
<string name="settings_system_theme">Sistem</string>
|
||||
<string name="settings_theme">Tema</string>
|
||||
<string name="starImage">Zvezdica za priljubljene</string>
|
||||
<string name="app_copyright_old">Na podlagi aplikacije Loyalty Card Keychain copyright © 2016-2020 Branden Archer.</string>
|
||||
<string name="app_copyright_old">Bazira na podlagi aplikacije Loyalty Card Keychain
|
||||
\ncopyright © 2016-2020 Branden Archer</string>
|
||||
<string name="exportOptionExplanation">Podatki bodo zapisani na izbrano mesto.</string>
|
||||
<string name="failedParsingImportUriError">Ni bilo mogoče razčleniti URI uvoza</string>
|
||||
<string name="card_ids_copied">Kopirana kartica ID(s)</string>
|
||||
<string name="card_ids_copied">Kopirana ID številka kartice</string>
|
||||
<string name="share">Delite</string>
|
||||
<string name="unstar">Odstrani iz priljubljenih</string>
|
||||
<string name="star">Dodaj med priljubljene</string>
|
||||
<string name="noBarcode">Brez črtne kode</string>
|
||||
<string name="barcodeNoBarcode">Ta kartica nima črtne kode</string>
|
||||
<string name="barcodeNoBarcode">Ni črtne kode</string>
|
||||
<string name="barcodeType">Vrsta črtne kode</string>
|
||||
<string name="noMatchingGiftCards">Ničesar nisem našel. Poskusite spremeniti iskanje.</string>
|
||||
<string name="noMatchingGiftCards">Brez rezultata iskanja. Poskusite spremeniti iskalni niz.</string>
|
||||
<string name="action_search">Iskanje</string>
|
||||
<string name="exportPasswordHint">Vnesite geslo</string>
|
||||
<string name="exportPassword">Izberite geslo za zaščito izvoza (neobvezno)</string>
|
||||
@@ -105,10 +105,10 @@
|
||||
<string name="settings_theme_color">Barva teme</string>
|
||||
<string name="settings_system_locale">Sistem</string>
|
||||
<string name="settings_locale">Jezik</string>
|
||||
<string name="barcodeImageDescriptionWithType">Slika črtne kode tipa <xliff:g>%s</xliff:g></string>
|
||||
<string name="swipeToSwitchImages">Povlecite ali dolgo pritisnite da zamenjate slike</string>
|
||||
<string name="barcodeImageDescriptionWithType">Slika <xliff:g>%s</xliff:g> črtna koda</string>
|
||||
<string name="swipeToSwitchImages">Povlecite za zamenjavo slike ali dolgo pritisnite, da odprete sliko v aplikaciji za gledanje slik</string>
|
||||
<string name="sort_by">Razvrsti po</string>
|
||||
<string name="reverse">Obratno</string>
|
||||
<string name="reverse">...v obratnem vrstnem redu</string>
|
||||
<string name="sort_by_balance">Stanje</string>
|
||||
<string name="sort_by_expiry">Potek</string>
|
||||
<string name="sort_by_most_recently_used">Nazadnje uporabljene</string>
|
||||
@@ -127,7 +127,7 @@
|
||||
<string name="errorReadingImage">Slike ni bilo mogoče prebrati</string>
|
||||
<string name="noBarcodeFound">Črtna koda ni bila najdena</string>
|
||||
<string name="balanceSentence">Stanje: <xliff:g>%s</xliff:g></string>
|
||||
<string name="chooseImportType">Uvoz iz?</string>
|
||||
<string name="chooseImportType">Uvozi podatke iz</string>
|
||||
<string name="importCatima">Izvoz iz aplikacije Catima</string>
|
||||
<string name="importStocard">Izvoz iz aplikacije Stocard</string>
|
||||
<string name="importVoucherVault">Izvoz iz aplikacije Voucher Vault</string>
|
||||
@@ -138,23 +138,148 @@
|
||||
<string name="accept">Sprejmi</string>
|
||||
<string name="importLoyaltyCardKeychain">Uvoz iz aplikacije Loyalty Card Keychain</string>
|
||||
<string name="barcodeId">Vsebina črtne kode</string>
|
||||
<string name="sameAsCardId">Enaka kot številka kartice</string>
|
||||
<string name="sameAsCardId">Enaka kot ID kartice</string>
|
||||
<string name="setBarcodeId">Nastavi vsebino črtne kode</string>
|
||||
<string name="wrongValueForBarcodeType">Ta vrednost ni veljavna pri izbranem tipu čtne kode</string>
|
||||
<string name="takePhoto">Naredi fotografijo</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Z vami želim deliti kartice zvestobe</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">Številke kartic kopirane v odložišče</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">ID številke kartic so kopirane v odložišče</string>
|
||||
<string name="importFidme">Uvoz iz aplikacije FidMe</string>
|
||||
<string name="no">Ne</string>
|
||||
<string name="yes">Da</string>
|
||||
<string name="frontImageDescription">Slika sprednje strani</string>
|
||||
<string name="backImageDescription">Slika zadnje strani</string>
|
||||
<string name="frontImageDescription">Prednja stran</string>
|
||||
<string name="backImageDescription">Zadnja stran</string>
|
||||
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> ni veljavno stanje.</string>
|
||||
<string name="setBackImage">Nastavi sliko sprednje strani</string>
|
||||
<string name="setFrontImage">Nastavi sliko sprednje strani</string>
|
||||
<string name="photos">Fotografije</string>
|
||||
<string name="updateBarcodeQuestionText">Spremenili ste številko kartice. Želite posodobiti tudi črtno kodo na enako vrednost?</string>
|
||||
<string name="updateBarcodeQuestionText">Spremenili ste ID kartice. Želite posodobiti tudi črtno kodo na enako vrednost\?</string>
|
||||
<string name="updateBarcodeQuestionTitle">Posodobi črtno kodo?</string>
|
||||
<string name="removeImage">Odstrani sliko</string>
|
||||
<string name="unsupportedBarcodeType">Te vrste črtne kode aplikacija ne more prikazati. Morda bo to možno v prihodnosti.</string>
|
||||
<string name="shortcutSelectCard">Izberite kartico</string>
|
||||
<string name="starred">Priljubljene</string>
|
||||
<string name="set_scale">Nastavi velikost</string>
|
||||
<string name="include_if_asking_support">Ob zahtevani pomoči podpore je potrebno vključiti naslednje informacije:</string>
|
||||
<plurals name="balancePoints">
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> točka</item>
|
||||
<item quantity="two"><xliff:g>%s</xliff:g> točki</item>
|
||||
<item quantity="few"><xliff:g>%s</xliff:g> točke</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> točk</item>
|
||||
</plurals>
|
||||
<string name="barcode">Črtna koda</string>
|
||||
<string name="editBarcode">Uredi črtno kodo</string>
|
||||
<string name="group_edit">Uredi skupino</string>
|
||||
<string name="never">Nikoli</string>
|
||||
<string name="importCards">Uvozite kartice</string>
|
||||
<string name="currentBalanceSentence">Trenutno stanje: <xliff:g>%s</xliff:g></string>
|
||||
<string name="newBalanceSentence">Novo stanje: <xliff:g>%s</xliff:g></string>
|
||||
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> izbrana</item>
|
||||
<item quantity="two"><xliff:g>%d</xliff:g> izbrani</item>
|
||||
<item quantity="few"><xliff:g>%d</xliff:g> izbrane</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> izbranih</item>
|
||||
</plurals>
|
||||
<string name="settings_card_orientation">Orientacija črtne kode</string>
|
||||
<string name="settings_follow_system_orientation">Sledi sistemu</string>
|
||||
<string name="settings_portrait_orientation">Podoba</string>
|
||||
<string name="settings_landscape_orientation">Pokrajina</string>
|
||||
<string name="settings_lock_on_opening_orientation">Ohrani usmerjenost uporabljeno pri odpiranju kartice</string>
|
||||
<string name="setIcon">Nastavite ikono</string>
|
||||
<string name="showMoreInfo">Prikaži informacije</string>
|
||||
<string name="hideMoreInfo">Skrij informacije</string>
|
||||
<string name="updateBalance">Posodobi stanje</string>
|
||||
<string name="failedToRetrieveImageFile">Slikovne datoteke ni bilo mogoče pridobiti</string>
|
||||
<string name="credits">Zasluge</string>
|
||||
<string name="action_show_details">Prikaži podrobnosti</string>
|
||||
<string name="translate_platform">na Weblate-u</string>
|
||||
<string name="options">Možnosti</string>
|
||||
<string name="duplicateCard">Podvoji</string>
|
||||
<string name="archive">Arhiviraj</string>
|
||||
<string name="unarchive">Odpakiraj arhiv</string>
|
||||
<string name="archived">Karta arhivirana</string>
|
||||
<string name="unarchived">Kartica ni arhivirana</string>
|
||||
<string name="archiveList">Arhiv</string>
|
||||
<string name="noUnarchivedCardsMessage">Ne obstajajo ne arhivirane kartice</string>
|
||||
<string name="failedLaunchingPhotoPicker">Ni mogoče najti podprte aplikacije za gledanje slik</string>
|
||||
<string name="previousCard">Prejšnje</string>
|
||||
<string name="nextCard">Naslednje</string>
|
||||
<string name="updateBalanceTitle">Koliko ste porabili\?</string>
|
||||
<string name="updateBalanceHint">Vpišite vrednost</string>
|
||||
<string name="group_name_already_in_use">Ime skupine je že uporabljeno</string>
|
||||
<string name="group_name_is_empty">Ime skupine ne more biti prazno polje</string>
|
||||
<string name="group_updated">Skupina posodobljena</string>
|
||||
<string name="groupsList">Skupine: <xliff:g>%s</xliff:g></string>
|
||||
<string name="app_libraries">Proste knjižnice tretjih oseb: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_resources">Prosti viri tretjih oseb: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="expiryStateSentence">Poteče: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryStateSentenceExpired">Poteklo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryDate">Datum poteka veljavnosti</string>
|
||||
<string name="chooseExpiryDate">Izberi datum poteka veljavnosti</string>
|
||||
<string name="moveBarcodeToTopOfScreen">Premakni črtno kodo na vrh zaslona</string>
|
||||
<string name="moveBarcodeToCenterOfScreen">Postavi črtno kodo na sredino zaslona</string>
|
||||
<string name="importCatimaMessage">Izberi svoj obstoječ Catima <i>catima.zip</i> izvoz podatkov za uvoz v aplikacijo.
|
||||
\nNajprej izvozi podatke v meniju \"Uvozi/Izvozi\" v drugi aplikaciji Catima s pritiskom na izbiro izvozi.</string>
|
||||
<string name="importStocardMessage">Izberi svoj <i>***-sync.zip</i> Stocard izvoz podatkov za uvoz.
|
||||
\nIzvoz podatkov dobiš s pošiljanjem elektronske pošte na support@stocardapp.com, kjer povprašaš za izvoz svojih podatkov.</string>
|
||||
<string name="importVoucherVaultMessage">Izberi svoj <i>vouchervault.json</i> Voucher Vault izvoz podatkov za uvoz.
|
||||
\nIzvoz podatkov dobiš s pritiskom na gumb \"Export\" v Voucher Vault first.</string>
|
||||
<string name="failedToOpenUrl">Prvo namestite spletni brskalnik</string>
|
||||
<string name="welcome">Pozdravljeni v Catimi</string>
|
||||
<string name="noGiftCardsGroup">Kreiraj kartice in jim dodeli skupino tukaj.</string>
|
||||
<string name="privacy_policy_popup_text">Obvestilo o politiki zasebnosti (nekatere trgovine aplikacij to zahtevajo):
|
||||
\n
|
||||
\nPODATKI SE NE ZBIRAJO, kar se lahko preveri v programski kodi, saj je aplikacija prosta programska oprema.</string>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="one">Izbriši <xliff:g>%d</xliff:g> kartico zvestobe</item>
|
||||
<item quantity="two">Izbriši <xliff:g>%d</xliff:g> kartici zvestobe</item>
|
||||
<item quantity="few">Izbriši <xliff:g>%d</xliff:g> kartice zvestobe</item>
|
||||
<item quantity="other">Izbriši <xliff:g>%d</xliff:g> kartic zvestobe</item>
|
||||
</plurals>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="one">Izbriši to <xliff:g>%d</xliff:g> kartico zvestobe dokončno\?</item>
|
||||
<item quantity="two">Izbriši ti dve <xliff:g>%d</xliff:g> kartici zvestobe dokončno\?</item>
|
||||
<item quantity="few">Izbriši te <xliff:g>%d</xliff:g> kartice zvestobe dokončno\?</item>
|
||||
<item quantity="other">Izbriši teh <xliff:g>%d</xliff:g> kartic zvestobe dokončno\?</item>
|
||||
</plurals>
|
||||
<string name="cameraPermissionDeniedTitle">Ni bilo mogoče dostopati do kamere</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">Catima potrebuje dostop do vaše kamere za skeniranje črtnih kod. Pritisnite tukaj in spremenite nastavitve dovoljenj.</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019–<xliff:g>%d</xliff:g> Sylvia van Os</string>
|
||||
<plurals name="groupCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> kartica</item>
|
||||
<item quantity="two"><xliff:g>%d</xliff:g> kartici</item>
|
||||
<item quantity="few"><xliff:g>%d</xliff:g> kartice</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> kartic</item>
|
||||
</plurals>
|
||||
<string name="editGroup">Urejanje skupine: <xliff:g>%s</xliff:g></string>
|
||||
<string name="importFidmeMessage">Izberi svoj <i>fidme-export-request-xxxxxx.zip</i> FidMe izvoz podatkov za uvoz in naknadno ročno izberi tipe črtnih kod.
|
||||
\nFidMe izvoz podatkov naredi v svojem FidMe profilu z izbiro \"Data Protection\" in nato s pritiskom na gumb \"Extract my data first\".</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Izberi svoj <i>LoyaltyCardKeychain.csv</i> Loyalty Card Keychain izvoz podatkov za uvoz.
|
||||
\nLoyalty Card Keychain izvoz podatkov naredi s pritiskom na gumb \"Import/Export\" v meniju s pritiskom najprej na gumb \"Export\".</string>
|
||||
<string name="failedGeneratingShareURL">URL-ja za skupno rabo ni bilo mogoče ustvariti. Prosim prijavite napako.</string>
|
||||
<string name="settings_oled_dark">Čisto črno ozadje za temno temo</string>
|
||||
<string name="selectColor">Izberite barvo</string>
|
||||
<string name="settings_catima_theme">Catima</string>
|
||||
<string name="app_contributors">Omogočeno od: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="barcodeLongPressMessage">V aplikaciji za gledanje slik lahko odpremo samo slike</string>
|
||||
<string name="action_hide_details">Skrij podrobnosti</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> kartica (<xliff:g id="archivedCount">%2$d</xliff:g> arhivirana)</item>
|
||||
<item quantity="two"><xliff:g>%1$d</xliff:g> kartici (<xliff:g id="archivedCount">%2$d</xliff:g> arhivirani)</item>
|
||||
<item quantity="few"><xliff:g>%1$d</xliff:g> kartice (<xliff:g id="archivedCount">%2$d</xliff:g> arhivirane)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> kartic (<xliff:g id="archivedCount">%2$d</xliff:g> arhiviranih)</item>
|
||||
</plurals>
|
||||
<plurals name="viewArchivedCardsWithCount">
|
||||
<item quantity="one">Poglej arhiv (<xliff:g>%1$d</xliff:g> kartice)</item>
|
||||
<item quantity="two">Poglej arhiv (<xliff:g>%1$d</xliff:g> kartic)</item>
|
||||
<item quantity="few">Poglej arhiv (<xliff:g>%1$d</xliff:g> kartic)</item>
|
||||
<item quantity="other">Poglej arhiv (<xliff:g>%1$d</xliff:g> kartic)</item>
|
||||
</plurals>
|
||||
<string name="cameraPermissionRequired">Za to dejanje je potrebno dovoljenje za dostop do kamere…</string>
|
||||
<string name="storageReadPermissionRequired">Za to dejanje je potrebno dovoljenje za branje iz pomnilnika…</string>
|
||||
<string name="validFromSentence">Veljavno od: <xliff:g>%s</xliff:g></string>
|
||||
<string name="validFromDate">Velja od</string>
|
||||
<string name="anyDate">Katerikoli datum</string>
|
||||
<string name="chooseValidFromDate">Izberite datum začetka veljavnosti</string>
|
||||
</resources>
|
||||
@@ -137,7 +137,7 @@
|
||||
<string name="cardId">Kort-ID</string>
|
||||
<string name="storeName">Namn</string>
|
||||
<string name="noMatchingGiftCards">Inget resultat. Försök justera din sökning.</string>
|
||||
<string name="noGiftCards">Klicka på plus(+)-knappen för att lägga till ett kort, eller importera några från ⋮-menyn.</string>
|
||||
<string name="noGiftCards">Klicka på plus(+)-knappen för att lägga till ett kort, eller importera från ⋮-menyn.</string>
|
||||
<string name="action_add">Lägg till</string>
|
||||
<string name="action_search">Sök</string>
|
||||
<string name="exportOptionExplanation">Datan kommer att sparas till en plats som du väljer.</string>
|
||||
@@ -171,7 +171,6 @@
|
||||
<string name="note">Anteckning</string>
|
||||
<string name="settings_system_locale">System</string>
|
||||
<string name="settings_locale">Språk</string>
|
||||
<string name="noExternalStoragePermissionError">Bevilja tillstånd för extern lagring för att kunna importera eller exportera data</string>
|
||||
<string name="app_contributors">Möjliggjordes av: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="settings_brown_theme">Brunt</string>
|
||||
<string name="settings_grey_theme">Grått</string>
|
||||
@@ -185,7 +184,7 @@
|
||||
<string name="settings_theme_color">Temafärg</string>
|
||||
<string name="noGroupCards">Denna grupp är tom</string>
|
||||
<string name="barcodeImageDescriptionWithType">Bild <xliff:g>%s</xliff:g> streckkod</string>
|
||||
<string name="swipeToSwitchImages">Svep eller tryck länge för att växla bild</string>
|
||||
<string name="swipeToSwitchImages">Svep eller ändra bilder, håll för att öppna i bild i galleri app</string>
|
||||
<string name="reverse">...i omvänd ordning</string>
|
||||
<string name="sort_by">Sortera efter</string>
|
||||
<string name="sort_by_balance">Saldo</string>
|
||||
@@ -253,4 +252,20 @@
|
||||
<item quantity="other">Visa arkiv (<xliff:g>%1$d</xliff:g> cards)</item>
|
||||
</plurals>
|
||||
<string name="welcome">Välkommen till Catima</string>
|
||||
<string name="importCards">Importera kort</string>
|
||||
<string name="cameraPermissionDeniedTitle">Kunde inte komma åt kamera</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">För att skanna streckkoder kommer Catima att behöva åtkomst till din kamera. Tryck här för att ändra dina tillståndsinställningar.</string>
|
||||
<string name="anyDate">Valfritt datum</string>
|
||||
<string name="chooseValidFromDate">Välj giltigt från datum</string>
|
||||
<string name="validFromSentence">Giltigt från: <xliff:g>%s</xliff:g></string>
|
||||
<string name="storageReadPermissionRequired">Tillstånd att läsa lagring behövs för denna åtgärd…</string>
|
||||
<string name="currentBalanceSentence">Nuvarande balans: <xliff:g>%s</xliff:g></string>
|
||||
<string name="validFromDate">Giltig från</string>
|
||||
<string name="cameraPermissionRequired">Tillstånd att komma åt kameran krävs för denna åtgärd…</string>
|
||||
<string name="updateBalance">Uppdatera balans</string>
|
||||
<string name="failedToRetrieveImageFile">Misslyckades att hämta bildfil</string>
|
||||
<string name="barcodeLongPressMessage">Endast bilder kan öppnas i galleri app</string>
|
||||
<string name="updateBalanceTitle">Hur mycket spenderade du\?</string>
|
||||
<string name="updateBalanceHint">Ange summa</string>
|
||||
<string name="newBalanceSentence">Ny balans: <xliff:g>%s</xliff:g></string>
|
||||
</resources>
|
||||
@@ -128,7 +128,6 @@
|
||||
<string name="importOptionFilesystemExplanation">Dosya sisteminden belirli bir dosya seçin.</string>
|
||||
<string name="importOptionFilesystemTitle">Dosya sisteminden içe aktar</string>
|
||||
<string name="exportOptionExplanation">Veriler seçtiğiniz bir konuma yazılacak.</string>
|
||||
<string name="noExternalStoragePermissionError">Verileri içeri veya dışarı aktarmak için harici depolama izni verin</string>
|
||||
<string name="exporting">Dışa aktarılıyor…</string>
|
||||
<string name="importing">İçe aktarılıyor…</string>
|
||||
<string name="exportFailed">Dışa aktarma gerçekleştirilemedi</string>
|
||||
@@ -263,4 +262,10 @@
|
||||
<string name="cameraPermissionDeniedTitle">Kameraya erişilemedi</string>
|
||||
<string name="updateBalance">Bakiyeyi güncelle</string>
|
||||
<string name="importCards">Kartları içe aktar</string>
|
||||
<string name="storageReadPermissionRequired">Bu eylem için depolama alanını okuma izni gerekiyor…</string>
|
||||
<string name="cameraPermissionRequired">Bu eylem için kameraya erişim izni gerekiyor…</string>
|
||||
<string name="chooseValidFromDate">Geçerlilik başlangıcı tarihini seç</string>
|
||||
<string name="anyDate">Herhangi bir tarih</string>
|
||||
<string name="validFromDate">Geçerlilik başlangıcı</string>
|
||||
<string name="validFromSentence"><xliff:g>%s</xliff:g> tarihinden itibaren geçerlidir</string>
|
||||
</resources>
|
||||
@@ -2,7 +2,7 @@
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="privacy_policy_popup_text">Політика конфіденційності (вимагається деякими магазинами):
|
||||
\n
|
||||
\nЖОДНОЇ ІНФОРМАЦІЇ НЕ ЗБИРАЄТЬСЯ, що може підтвердити будь-хто, адже наша програма це вільне програмне забезпечення.</string>
|
||||
\nЖОДНОЇ ІНФОРМАЦІЇ НЕ ЗБИРАЄТЬСЯ, що може підтвердити будь-хто, адже наш застосунок це вільне програмне забезпечення.</string>
|
||||
<string name="noGiftCards">Натисніть кнопку +, щоб додати картку, або ⋮ для імпорту з меню.</string>
|
||||
<string name="settings_display_barcode_max_brightness">Яскравіший штрих-код</string>
|
||||
<string name="enterBarcodeInstructions">Введіть ID та оберіть тип штрих-коду чи \"Не має штрих-коду\".</string>
|
||||
@@ -22,7 +22,7 @@
|
||||
<string name="updateBarcodeQuestionText">Ви змінили ID. Чи ви бажаєте оновити штрих-код для використання цього ж значення\?</string>
|
||||
<string name="updateBarcodeQuestionTitle">Оновити значення штрих-коду\?</string>
|
||||
<string name="wrongValueForBarcodeType">Значення не дійсне для обраного типу штрих-коду</string>
|
||||
<string name="unsupportedBarcodeType">Цей тип штрих-коду поки що не відображається. Підтримку може бути додано в подальших версіях програми.</string>
|
||||
<string name="unsupportedBarcodeType">Цей тип штрих-коду поки що не відображається. Підтримку може бути додано в подальших версіях застосунку.</string>
|
||||
<string name="setBarcodeId">Встановіть значення штрих-коду</string>
|
||||
<string name="sameAsCardId">Таке ж як ID</string>
|
||||
<string name="barcodeId">Значення штрих-коду</string>
|
||||
@@ -99,14 +99,13 @@
|
||||
\nавторські права © 2016–2020 Branden Archer</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Авторські права © 2019–<xliff:g>%d</xliff:g> Sylvia van Os</string>
|
||||
<string name="about">Про програму</string>
|
||||
<string name="importOptionApplicationButton">Вибір програми</string>
|
||||
<string name="importOptionApplicationExplanation">Використайте іншу програму чи ваш улюблений файл-менеджер для відкриття файлу.</string>
|
||||
<string name="importOptionApplicationTitle">З іншої програми</string>
|
||||
<string name="importOptionApplicationButton">Використовувати інший застосунок</string>
|
||||
<string name="importOptionApplicationExplanation">Використайте інший застосунок чи ваш улюблений файл-менеджер для відкриття файлу.</string>
|
||||
<string name="importOptionApplicationTitle">З іншого застосунку</string>
|
||||
<string name="importOptionFilesystemButton">Обрати файл</string>
|
||||
<string name="importOptionFilesystemExplanation">Оберіть файл у провіднику.</string>
|
||||
<string name="importOptionFilesystemTitle">Імпорт з файлу</string>
|
||||
<string name="exportOptionExplanation">Дані буде записано до локації обраної вами.</string>
|
||||
<string name="noExternalStoragePermissionError">Надайте дозвіл на доступ до пам\'яті пристрою для імпорту/експорту даних</string>
|
||||
<string name="exporting">Експортуємо…</string>
|
||||
<string name="importing">Імпортуємо…</string>
|
||||
<string name="exportFailed">Неможливо здійснити експорт</string>
|
||||
@@ -160,7 +159,7 @@
|
||||
<string name="importStocard">Імпорт із Stocard</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one">Обрано: <xliff:g>%d</xliff:g></item>
|
||||
<item quantity="few">Обрано: <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>
|
||||
@@ -202,13 +201,13 @@
|
||||
<string name="sort_by_name">Назва</string>
|
||||
<string name="sort">Сортувати</string>
|
||||
<string name="version_history">Історія версій</string>
|
||||
<string name="help_translate_this_app">Допомогти з перекладом програми</string>
|
||||
<string name="help_translate_this_app">Допомогти з перекладом застосунку</string>
|
||||
<string name="license">Ліцензія</string>
|
||||
<string name="source_repository">Початковий код</string>
|
||||
<string name="on_github">на GitHub</string>
|
||||
<string name="and_data_usage">та використання даних</string>
|
||||
<string name="credits">Подяки</string>
|
||||
<string name="rate_this_app">Оцінити програму</string>
|
||||
<string name="rate_this_app">Оцінити застосунок</string>
|
||||
<string name="on_google_play">у Google Play</string>
|
||||
<string name="report_error">Повідомити про помилку</string>
|
||||
<string name="exportPassword">Встановіть пароль для захисту експорту (необов\'язково)</string>
|
||||
@@ -256,7 +255,7 @@
|
||||
<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>
|
||||
<string name="failedLaunchingPhotoPicker">Підтримуваний застосунок галереї не знайдено</string>
|
||||
<string name="previousCard">Попередня</string>
|
||||
<string name="nextCard">Наступна</string>
|
||||
<plurals name="viewArchivedCardsWithCount">
|
||||
@@ -277,4 +276,10 @@
|
||||
<string name="cameraPermissionDeniedTitle">Не вдалося отримати доступ до камери</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">Для сканування штрих-кодів програмі Catima потрібен доступ до вашої камери. Натисніть тут, щоб змінити дозволи.</string>
|
||||
<string name="updateBalance">Оновити баланс</string>
|
||||
<string name="storageReadPermissionRequired">Дозвіл на читання сховища, необхідний для цієї дії…</string>
|
||||
<string name="cameraPermissionRequired">Дозвіл на доступ до камери, необхідний для цієї дії…</string>
|
||||
<string name="validFromDate">Дійсний від</string>
|
||||
<string name="anyDate">Будь-яка дата</string>
|
||||
<string name="chooseValidFromDate">Виберіть термін дії з дати</string>
|
||||
<string name="validFromSentence">Дійсний від: <xliff:g>%s</xliff:g></string>
|
||||
</resources>
|
||||
@@ -40,7 +40,7 @@
|
||||
\n
|
||||
\n本应用没有收集任何数据,任何人都可以查阅源码来确认,因为本软件是自由软件。</string>
|
||||
<string name="privacy_policy">隐私政策</string>
|
||||
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
|
||||
<string name="app_loyalty_card_keychain">会员卡卡包</string>
|
||||
<string name="chooseImportType">数据导入源</string>
|
||||
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g>似乎不是有效的余额。</string>
|
||||
<string name="points">积分</string>
|
||||
@@ -94,7 +94,6 @@
|
||||
<string name="importOptionFilesystemExplanation">请从文件系统选择文件.</string>
|
||||
<string name="importOptionFilesystemTitle">从文件系统导入</string>
|
||||
<string name="exportOptionExplanation">导出的数据将储存至你选择的位置.</string>
|
||||
<string name="noExternalStoragePermissionError">在导入导出前需要获得外部储存权限</string>
|
||||
<string name="cameraPermissionDeniedTitle">无法访问相机</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">Catima需要访问您的相机来扫描条形码. 轻触这里以更改您的权限设置。</string>
|
||||
<string name="exporting">导出中…</string>
|
||||
@@ -256,4 +255,10 @@
|
||||
<string name="failedToRetrieveImageFile">无法检索图像文件</string>
|
||||
<string name="newBalanceSentence">新余额:<xliff:g>%s</xliff:g></string>
|
||||
<string name="barcodeLongPressMessage">只能在图库应用程序中打开图像</string>
|
||||
<string name="storageReadPermissionRequired">此操作所需的读取存储空间的权限…</string>
|
||||
<string name="validFromDate">有效期自</string>
|
||||
<string name="anyDate">任何日期</string>
|
||||
<string name="chooseValidFromDate">选择有效日期</string>
|
||||
<string name="validFromSentence">有效期自: <xliff:g>%s</xliff:g></string>
|
||||
<string name="cameraPermissionRequired">此操作所需的访问相机的权限…</string>
|
||||
</resources>
|
||||
@@ -3,7 +3,7 @@
|
||||
<string name="app_revision_url">https://github.com/CatimaLoyalty/Android/releases</string>
|
||||
<string name="action_search">搜尋</string>
|
||||
<string name="action_add">新增</string>
|
||||
<string name="noGiftCards">點選 + 按鈕以新增卡片,或從 ⋮ 選單中匯入卡片。</string>
|
||||
<string name="noGiftCards">點選 + 按鈕以新增卡片,或從 ⋮ 選單中匯入。</string>
|
||||
<string name="noMatchingGiftCards">找不到相關結果。試試其他關鍵字。</string>
|
||||
<string name="storeName">名稱</string>
|
||||
<string name="note">註記</string>
|
||||
@@ -161,7 +161,6 @@
|
||||
<string name="scanCardBarcode">掃描條碼</string>
|
||||
<string name="noStoreError">尚未輸入卡片名稱</string>
|
||||
<string name="importExportHelp">備份您的資料以將其轉移至其他裝置中。</string>
|
||||
<string name="noExternalStoragePermissionError">在匯入及匯出資料前,請先允許外部儲存裝置存取權限</string>
|
||||
<string name="importOptionFilesystemTitle">自檔案系統中匯入</string>
|
||||
<string name="importOptionFilesystemExplanation">自檔案系統中選取檔案。</string>
|
||||
<string name="importOptionFilesystemButton">自檔案系統</string>
|
||||
@@ -199,7 +198,7 @@
|
||||
<string name="backImageDescription">背面圖片</string>
|
||||
<string name="updateBarcodeQuestionText">您已更新了 ID,是否要更新條碼內容以匹配此 ID?</string>
|
||||
<string name="failedGeneratingShareURL">無法建立可分享的 URL,請回報此錯誤。</string>
|
||||
<string name="swipeToSwitchImages">滑動或長按以切換圖片</string>
|
||||
<string name="swipeToSwitchImages">滑動切換圖片,長按檢視圖片</string>
|
||||
<string name="starImage">收藏標示</string>
|
||||
<string name="noGiftCardsGroup">建立一些卡片,然後將它們分配到這個群組中。</string>
|
||||
<string name="showMoreInfo">顯示資訊</string>
|
||||
@@ -248,4 +247,18 @@
|
||||
<item quantity="other">檢視封存 (<xliff:g>%1$d</xliff:g> 張卡片)</item>
|
||||
</plurals>
|
||||
<string name="settings_lock_on_opening_orientation">開啟卡片時鎖定的方向</string>
|
||||
<string name="importCards">導入卡片</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">Catima 需要鏡頭使用權才能夠掃描條碼, 點擊這裏更變你的權限設定。</string>
|
||||
<string name="validFromDate">生效</string>
|
||||
<string name="anyDate">任何日期</string>
|
||||
<string name="chooseValidFromDate">選擇生效日期</string>
|
||||
<string name="validFromSentence">生效日期: <xliff:g>%s</xliff:g></string>
|
||||
<string name="storageReadPermissionRequired">這個行動需要閱讀儲存空間的權限…</string>
|
||||
<string name="cameraPermissionRequired">這個行動需要使用鏡頭的權限…</string>
|
||||
<string name="cameraPermissionDeniedTitle">不能使用鏡頭</string>
|
||||
<string name="updateBalance">更新餘額</string>
|
||||
<string name="updateBalanceTitle">你用了多少?</string>
|
||||
<string name="updateBalanceHint">輸入金額</string>
|
||||
<string name="currentBalanceSentence">餘額: <xliff:g>%s</xliff:g></string>
|
||||
<string name="newBalanceSentence">新的餘額: <xliff:g>%s</xliff:g></string>
|
||||
</resources>
|
||||
@@ -65,6 +65,7 @@
|
||||
<item>bn</item>
|
||||
<item>bn-rIN</item>
|
||||
<item>bs</item>
|
||||
<item>ca</item>
|
||||
<item>cs</item>
|
||||
<item>cy</item>
|
||||
<item>da</item>
|
||||
|
||||
@@ -65,7 +65,8 @@
|
||||
<string name="exportFailed">Could not perform export</string>
|
||||
<string name="importing">Importing…</string>
|
||||
<string name="exporting">Exporting…</string>
|
||||
<string name="noExternalStoragePermissionError">Grant external storage permission to import or export data</string>
|
||||
<string name="storageReadPermissionRequired">Permission to read storage needed for this action…</string>
|
||||
<string name="cameraPermissionRequired">Permission to access camera needed for this action…</string>
|
||||
<string name="cameraPermissionDeniedTitle">Could not access the camera</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">To scan barcodes, Catima will need access to your camera. Tap here to change your permission settings.</string>
|
||||
<string name="exportOptionExplanation">The data will be written to a location of your choice.</string>
|
||||
@@ -308,4 +309,8 @@
|
||||
<string name="updateBalanceHint">Enter amount</string>
|
||||
<string name="currentBalanceSentence">Current balance: <xliff:g>%s</xliff:g></string>
|
||||
<string name="newBalanceSentence">New balance: <xliff:g>%s</xliff:g></string>
|
||||
</resources>
|
||||
<string name="validFromDate">Valid from</string>
|
||||
<string name="anyDate">Any date</string>
|
||||
<string name="chooseValidFromDate">Choose valid from date</string>
|
||||
<string name="validFromSentence">Valid from: <xliff:g>%s</xliff:g></string>
|
||||
</resources>
|
||||
|
||||
@@ -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,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, 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));
|
||||
@@ -52,6 +52,7 @@ public class DatabaseTest {
|
||||
assertNotNull(loyaltyCard);
|
||||
assertEquals("store", loyaltyCard.store);
|
||||
assertEquals("note", loyaltyCard.note);
|
||||
assertEquals(null, loyaltyCard.validFrom);
|
||||
assertEquals(null, loyaltyCard.expiry);
|
||||
assertEquals(new BigDecimal("0"), loyaltyCard.balance);
|
||||
assertEquals(null, loyaltyCard.balanceType);
|
||||
@@ -70,12 +71,12 @@ 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,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, 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));
|
||||
|
||||
result = DBHelper.updateLoyaltyCard(mDatabase, 1, "store1", "note1", null, new BigDecimal("10.00"), Currency.getInstance("EUR"), "cardId1", null, CatimaBarcode.fromBarcode(BarcodeFormat.AZTEC), DEFAULT_HEADER_COLOR, 0, null, 0);
|
||||
result = DBHelper.updateLoyaltyCard(mDatabase, 1, "store1", "note1", null, null, new BigDecimal("10.00"), Currency.getInstance("EUR"), "cardId1", null, CatimaBarcode.fromBarcode(BarcodeFormat.AZTEC), DEFAULT_HEADER_COLOR, 0, null, 0);
|
||||
assertTrue(result);
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
|
||||
@@ -83,6 +84,7 @@ public class DatabaseTest {
|
||||
assertNotNull(loyaltyCard);
|
||||
assertEquals("store1", loyaltyCard.store);
|
||||
assertEquals("note1", loyaltyCard.note);
|
||||
assertEquals(null, loyaltyCard.validFrom);
|
||||
assertEquals(null, loyaltyCard.expiry);
|
||||
assertEquals(new BigDecimal("10.00"), loyaltyCard.balance);
|
||||
assertEquals(Currency.getInstance("EUR"), loyaltyCard.balanceType);
|
||||
@@ -96,7 +98,7 @@ public class DatabaseTest {
|
||||
|
||||
@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,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, 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));
|
||||
@@ -109,6 +111,7 @@ public class DatabaseTest {
|
||||
assertNotNull(loyaltyCard);
|
||||
assertEquals("store", loyaltyCard.store);
|
||||
assertEquals("note", loyaltyCard.note);
|
||||
assertEquals(null, loyaltyCard.validFrom);
|
||||
assertEquals(null, loyaltyCard.expiry);
|
||||
assertEquals(new BigDecimal("0"), loyaltyCard.balance);
|
||||
assertEquals(null, loyaltyCard.balanceType);
|
||||
@@ -124,7 +127,7 @@ public class DatabaseTest {
|
||||
public void updateMissingGiftCard() {
|
||||
assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
|
||||
boolean result = DBHelper.updateLoyaltyCard(mDatabase, 1, "store1", "note1", null, new BigDecimal("0"), null, "cardId1",
|
||||
boolean result = DBHelper.updateLoyaltyCard(mDatabase, 1, "store1", "note1", null, null, new BigDecimal("0"), null, "cardId1",
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null, 0);
|
||||
assertEquals(false, result);
|
||||
assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
@@ -132,7 +135,7 @@ public class DatabaseTest {
|
||||
|
||||
@Test
|
||||
public void emptyGiftCardValues() {
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "", "", null, new BigDecimal("0"), null, "", null, null, null, 0, null,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "", "", null, null, new BigDecimal("0"), null, "", null, null, null, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
@@ -141,6 +144,7 @@ public class DatabaseTest {
|
||||
assertNotNull(loyaltyCard);
|
||||
assertEquals("", loyaltyCard.store);
|
||||
assertEquals("", loyaltyCard.note);
|
||||
assertEquals(null, loyaltyCard.validFrom);
|
||||
assertEquals(null, loyaltyCard.expiry);
|
||||
assertEquals(new BigDecimal("0"), loyaltyCard.balance);
|
||||
assertEquals(null, loyaltyCard.balanceType);
|
||||
@@ -159,7 +163,7 @@ public class DatabaseTest {
|
||||
// Add the gift cards in reverse order, to ensure
|
||||
// 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,
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, null, new BigDecimal("0"), null, "cardId" + index,
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
@@ -177,6 +181,7 @@ public class DatabaseTest {
|
||||
for (int index = 0; index < CARDS_TO_ADD; index++) {
|
||||
assertEquals("store" + index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STORE)));
|
||||
assertEquals("note" + index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.NOTE)));
|
||||
assertEquals(0, cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.VALID_FROM)));
|
||||
assertEquals(0, cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.EXPIRY)));
|
||||
assertEquals("0", cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE)));
|
||||
assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE)));
|
||||
@@ -204,10 +209,10 @@ public class DatabaseTest {
|
||||
// that they are sorted
|
||||
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,
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, null, new BigDecimal("0"), null, "cardId" + index,
|
||||
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,
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, null, new BigDecimal("0"), null, "cardId" + index,
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 0, null,0);
|
||||
}
|
||||
boolean result = (id != -1);
|
||||
@@ -225,6 +230,7 @@ public class DatabaseTest {
|
||||
int index = CARDS_TO_ADD - 1;
|
||||
assertEquals("store" + index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STORE)));
|
||||
assertEquals("note" + index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.NOTE)));
|
||||
assertEquals(0, cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.VALID_FROM)));
|
||||
assertEquals(0, cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.EXPIRY)));
|
||||
assertEquals("0", cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE)));
|
||||
assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE)));
|
||||
@@ -239,6 +245,7 @@ public class DatabaseTest {
|
||||
for (index = 0; index < CARDS_TO_ADD - 1; index++) {
|
||||
assertEquals("store" + index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STORE)));
|
||||
assertEquals("note" + index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.NOTE)));
|
||||
assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.VALID_FROM)));
|
||||
assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.EXPIRY)));
|
||||
assertEquals("0", cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE)));
|
||||
assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE)));
|
||||
@@ -305,7 +312,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,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, 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));
|
||||
@@ -417,7 +424,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,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, 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));
|
||||
@@ -478,6 +485,7 @@ public class DatabaseTest {
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(database, newCardId);
|
||||
assertEquals("store", card.store);
|
||||
assertEquals("", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -493,6 +501,7 @@ public class DatabaseTest {
|
||||
LoyaltyCard card2 = DBHelper.getLoyaltyCard(database, newCardId2);
|
||||
assertEquals("store", card2.store);
|
||||
assertEquals("", card2.note);
|
||||
assertEquals(null, card2.validFrom);
|
||||
assertEquals(null, card2.expiry);
|
||||
assertEquals(new BigDecimal("0"), card2.balance);
|
||||
assertEquals(null, card2.balanceType);
|
||||
@@ -507,7 +516,7 @@ public class DatabaseTest {
|
||||
|
||||
@Test
|
||||
public void updateGiftCardOnlyBalance() {
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("100"), 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));
|
||||
@@ -520,6 +529,7 @@ public class DatabaseTest {
|
||||
assertNotNull(loyaltyCard);
|
||||
assertEquals("store", loyaltyCard.store);
|
||||
assertEquals("note", loyaltyCard.note);
|
||||
assertEquals(null, loyaltyCard.validFrom);
|
||||
assertEquals(null, loyaltyCard.expiry);
|
||||
assertEquals(new BigDecimal(60), loyaltyCard.balance);
|
||||
assertEquals(null, loyaltyCard.balanceType);
|
||||
|
||||
@@ -86,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,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
}
|
||||
@@ -100,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,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 1, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
}
|
||||
@@ -108,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,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
}
|
||||
@@ -117,13 +117,14 @@ 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,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "No Expiry", "", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, (int) id);
|
||||
assertEquals("No Expiry", card.store);
|
||||
assertEquals("", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -133,13 +134,14 @@ 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,0);
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "Past", "", null, new Date((long) 1), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null,0);
|
||||
result = (id != -1);
|
||||
assertTrue(result);
|
||||
|
||||
card = DBHelper.getLoyaltyCard(mDatabase, (int) id);
|
||||
assertEquals("Past", card.store);
|
||||
assertEquals("", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertTrue(card.expiry.before(new Date()));
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -149,13 +151,14 @@ 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,0);
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "Today", "", null, new Date(), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null,0);
|
||||
result = (id != -1);
|
||||
assertTrue(result);
|
||||
|
||||
card = DBHelper.getLoyaltyCard(mDatabase, (int) id);
|
||||
assertEquals("Today", card.store);
|
||||
assertEquals("", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertTrue(card.expiry.before(new Date(new Date().getTime() + 86400)));
|
||||
assertTrue(card.expiry.after(new Date(new Date().getTime() - 86400)));
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
@@ -168,13 +171,14 @@ 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,0);
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "Future", "", null, new Date(2147483648000L), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null,0);
|
||||
result = (id != -1);
|
||||
assertTrue(result);
|
||||
|
||||
card = DBHelper.getLoyaltyCard(mDatabase, (int) id);
|
||||
assertEquals("Future", card.store);
|
||||
assertEquals("", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertTrue(card.expiry.after(new Date(new Date().getTime() + 86400)));
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -216,6 +220,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals(expectedStore, card.store);
|
||||
assertEquals(expectedNote, card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal(String.valueOf(index)), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -248,6 +253,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals(expectedStore, card.store);
|
||||
assertEquals(expectedNote, card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal(String.valueOf(index)), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -269,6 +275,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals(expectedStore, card.store);
|
||||
assertEquals(expectedNote, card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal(String.valueOf(index)), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -632,6 +639,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("store", card.store);
|
||||
assertEquals("note", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -669,6 +677,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("store", card.store);
|
||||
assertEquals("note", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -730,6 +739,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("store", card.store);
|
||||
assertEquals("note", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -767,6 +777,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("store", card.store);
|
||||
assertEquals("note", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -804,6 +815,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("store", card.store);
|
||||
assertEquals("note", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -860,6 +872,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("store", card.store);
|
||||
assertEquals("note", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -889,7 +902,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,0);
|
||||
int loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 1", "Note 1", new Date(1601510400), 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"));
|
||||
@@ -903,7 +916,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,0);
|
||||
loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 2", "", null, null, new BigDecimal(0), null, "123456", null, null, 2, 1, null,0);
|
||||
loyaltyCardHashMap.put(loyaltyCardId, DBHelper.getLoyaltyCard(mDatabase, loyaltyCardId));
|
||||
|
||||
// Export everything
|
||||
@@ -927,6 +940,7 @@ public class ImportExportTest {
|
||||
assertEquals(loyaltyCard.id, dbLoyaltyCard.id);
|
||||
assertEquals(loyaltyCard.store, dbLoyaltyCard.store);
|
||||
assertEquals(loyaltyCard.note, dbLoyaltyCard.note);
|
||||
assertEquals(loyaltyCard.validFrom, dbLoyaltyCard.validFrom);
|
||||
assertEquals(loyaltyCard.expiry, dbLoyaltyCard.expiry);
|
||||
assertEquals(loyaltyCard.balance, dbLoyaltyCard.balance);
|
||||
assertEquals(loyaltyCard.cardId, dbLoyaltyCard.cardId);
|
||||
@@ -990,16 +1004,16 @@ public class ImportExportTest {
|
||||
"Food\n" +
|
||||
"Fashion\n" +
|
||||
"\n" +
|
||||
"_id,store,note,expiry,balance,balancetype,cardid,barcodeid,headercolor,barcodetype,starstatus\n" +
|
||||
"1,Card 1,Note 1,1618053234,100,USD,1234,5432,1,QR_CODE,0,\r\n" +
|
||||
"8,Clothes Store,Note about store,,0,,a,,-5317,,0,\n" +
|
||||
"2,Department Store,,1618041729,0,,A,,-9977996,,0,\n" +
|
||||
"_id,store,note,validfrom,expiry,balance,balancetype,cardid,barcodeid,headercolor,barcodetype,starstatus\n" +
|
||||
"1,Card 1,Note 1,1601510400,1618053234,100,USD,1234,5432,1,QR_CODE,0,\r\n" +
|
||||
"8,Clothes Store,Note about store,,,0,,a,,-5317,,0,\n" +
|
||||
"2,Department Store,,,1618041729,0,,A,,-9977996,,0,\n" +
|
||||
"3,Grocery Store,\"Multiline note about grocery store\n" +
|
||||
"\n" +
|
||||
"with blank line\",,150,,dhd,,-9977996,,0,\n" +
|
||||
"4,Pharmacy,,,0,,dhshsvshs,,-10902850,,1,\n" +
|
||||
"5,Restaurant,Note about restaurant here,,0,,98765432,23456,-10902850,CODE_128,0,\n" +
|
||||
"6,Shoe Store,,,12.50,EUR,a,-5317,,AZTEC,0,\n" +
|
||||
"with blank line\",,,150,,dhd,,-9977996,,0,\n" +
|
||||
"4,Pharmacy,,,,0,,dhshsvshs,,-10902850,,1,\n" +
|
||||
"5,Restaurant,Note about restaurant here,,,0,,98765432,23456,-10902850,CODE_128,0,\n" +
|
||||
"6,Shoe Store,,,,12.50,EUR,a,-5317,,AZTEC,0,\n" +
|
||||
"\n" +
|
||||
"cardId,groupId\n" +
|
||||
"8,Fashion\n" +
|
||||
@@ -1037,6 +1051,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("Card 1", card1.store);
|
||||
assertEquals("Note 1", card1.note);
|
||||
assertEquals(new Date(1601510400), card1.validFrom);
|
||||
assertEquals(new Date(1618053234), card1.expiry);
|
||||
assertEquals(new BigDecimal("100"), card1.balance);
|
||||
assertEquals(Currency.getInstance("USD"), card1.balanceType);
|
||||
@@ -1053,6 +1068,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("Clothes Store", card8.store);
|
||||
assertEquals("Note about store", card8.note);
|
||||
assertEquals(null, card8.validFrom);
|
||||
assertEquals(null, card8.expiry);
|
||||
assertEquals(new BigDecimal("0"), card8.balance);
|
||||
assertEquals(null, card8.balanceType);
|
||||
@@ -1069,6 +1085,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("Department Store", card2.store);
|
||||
assertEquals("", card2.note);
|
||||
assertEquals(null, card2.validFrom);
|
||||
assertEquals(new Date(1618041729), card2.expiry);
|
||||
assertEquals(new BigDecimal("0"), card2.balance);
|
||||
assertEquals(null, card2.balanceType);
|
||||
@@ -1085,6 +1102,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("Grocery Store", card3.store);
|
||||
assertEquals("Multiline note about grocery store\n\nwith blank line", card3.note);
|
||||
assertEquals(null, card3.validFrom);
|
||||
assertEquals(null, card3.expiry);
|
||||
assertEquals(new BigDecimal("150"), card3.balance);
|
||||
assertEquals(null, card3.balanceType);
|
||||
@@ -1101,6 +1119,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("Pharmacy", card4.store);
|
||||
assertEquals("", card4.note);
|
||||
assertEquals(null, card4.validFrom);
|
||||
assertEquals(null, card4.expiry);
|
||||
assertEquals(new BigDecimal("0"), card4.balance);
|
||||
assertEquals(null, card4.balanceType);
|
||||
@@ -1117,6 +1136,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("Restaurant", card5.store);
|
||||
assertEquals("Note about restaurant here", card5.note);
|
||||
assertEquals(null, card5.validFrom);
|
||||
assertEquals(null, card5.expiry);
|
||||
assertEquals(new BigDecimal("0"), card5.balance);
|
||||
assertEquals(null, card5.balanceType);
|
||||
@@ -1133,6 +1153,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("Shoe Store", card6.store);
|
||||
assertEquals("", card6.note);
|
||||
assertEquals(null, card6.validFrom);
|
||||
assertEquals(null, card6.expiry);
|
||||
assertEquals(new BigDecimal("12.50"), card6.balance);
|
||||
assertEquals(Currency.getInstance("EUR"), card6.balanceType);
|
||||
@@ -1161,6 +1182,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("Hema", card.store);
|
||||
assertEquals("2021-03-24 18:35:08 UTC", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -1173,6 +1195,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("test", card.store);
|
||||
assertEquals("Test\n2021-03-24 18:34:19 UTC", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -1185,6 +1208,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("Albert Heijn", card.store);
|
||||
assertEquals("Bonus Kaart\n2021-03-24 16:47:47 UTC\nFirst Last", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -1215,6 +1239,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("GAMMA", card.store);
|
||||
assertEquals("", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -1231,6 +1256,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("Air Miles", card.store);
|
||||
assertEquals("szjsbs", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -1248,6 +1274,7 @@ public class ImportExportTest {
|
||||
// I don't think we can know this one, but falling back to an unique store name is at least something
|
||||
assertEquals("63536738-d64b-48ae-aeb8-82761523fa67", card.store);
|
||||
assertEquals("", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
assertEquals(null, card.balanceType);
|
||||
@@ -1301,6 +1328,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("Clothes Store", card.store);
|
||||
assertEquals("", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(null, card.expiry);
|
||||
assertEquals(new BigDecimal("0"), card.balance);
|
||||
assertEquals(Currency.getInstance("USD"), card.balanceType);
|
||||
@@ -1314,6 +1342,7 @@ public class ImportExportTest {
|
||||
|
||||
assertEquals("Department Store", card.store);
|
||||
assertEquals("", card.note);
|
||||
assertEquals(null, card.validFrom);
|
||||
assertEquals(new Date(1616716800000L), card.expiry);
|
||||
assertEquals(new BigDecimal("3.5"), card.balance);
|
||||
assertEquals(Currency.getInstance("USD"), card.balanceType);
|
||||
|
||||
@@ -42,7 +42,7 @@ public class ImportURITest {
|
||||
// Generate card
|
||||
Date date = new Date();
|
||||
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "This note contains evil symbols like & and = that will break the parser if not escaped right $#!%()*+;:á", date, new BigDecimal("100"), null, BarcodeFormat.UPC_E.toString(), BarcodeFormat.UPC_A.toString(), CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), Color.BLACK, 1, null,0);
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "This note contains evil symbols like & and = that will break the parser if not escaped right $#!%()*+;:á", date, date, new BigDecimal("100"), null, BarcodeFormat.UPC_E.toString(), BarcodeFormat.UPC_A.toString(), CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), Color.BLACK, 1, null,0);
|
||||
|
||||
// Get card
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
|
||||
@@ -56,6 +56,7 @@ public class ImportURITest {
|
||||
// Compare everything
|
||||
assertEquals(card.store, parsedCard.store);
|
||||
assertEquals(card.note, parsedCard.note);
|
||||
assertEquals(card.validFrom, parsedCard.validFrom);
|
||||
assertEquals(card.expiry, parsedCard.expiry);
|
||||
assertEquals(card.balance, parsedCard.balance);
|
||||
assertEquals(card.balanceType, parsedCard.balanceType);
|
||||
@@ -71,7 +72,7 @@ public class ImportURITest {
|
||||
@Test
|
||||
public void ensureNoCrashOnMissingHeaderFields() throws InvalidObjectException, UnsupportedEncodingException {
|
||||
// Generate card
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("10.00"), Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), null, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), null, 0, null,0);
|
||||
|
||||
// Get card
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
|
||||
@@ -85,6 +86,7 @@ public class ImportURITest {
|
||||
// Compare everything
|
||||
assertEquals(card.store, parsedCard.store);
|
||||
assertEquals(card.note, parsedCard.note);
|
||||
assertEquals(card.validFrom, parsedCard.validFrom);
|
||||
assertEquals(card.expiry, parsedCard.expiry);
|
||||
assertEquals(card.balance, parsedCard.balance);
|
||||
assertEquals(card.balanceType, parsedCard.balanceType);
|
||||
@@ -143,6 +145,7 @@ public class ImportURITest {
|
||||
// Compare everything
|
||||
assertEquals("store", parsedCard.store);
|
||||
assertEquals("note", parsedCard.note);
|
||||
assertEquals(null, parsedCard.validFrom);
|
||||
assertEquals(null, parsedCard.expiry);
|
||||
assertEquals(new BigDecimal("0"), parsedCard.balance);
|
||||
assertEquals(null, parsedCard.balanceType);
|
||||
|
||||
@@ -62,9 +62,10 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
return viewHolder.itemView;
|
||||
}
|
||||
|
||||
private void checkView(final View view, final String store, final String note, final String expiry, final String balance, boolean checkFontSizes) {
|
||||
private void checkView(final View view, final String store, final String note, final String validFrom, final String expiry, final String balance, boolean checkFontSizes) {
|
||||
final TextView storeField = view.findViewById(R.id.store);
|
||||
final TextView noteField = view.findViewById(R.id.note);
|
||||
final TextView validFromField = view.findViewById(R.id.validFrom);
|
||||
final TextView expiryField = view.findViewById(R.id.expiry);
|
||||
final TextView balanceField = view.findViewById(R.id.balance);
|
||||
|
||||
@@ -75,6 +76,7 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
assertEquals(mediumFontSize, (int) storeField.getTextSize());
|
||||
assertEquals(smallFontSize, (int) noteField.getTextSize());
|
||||
assertEquals(smallFontSize, (int) validFromField.getTextSize());
|
||||
assertEquals(smallFontSize, (int) expiryField.getTextSize());
|
||||
}
|
||||
|
||||
@@ -86,6 +88,13 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
assertEquals(View.GONE, noteField.getVisibility());
|
||||
}
|
||||
|
||||
if (!validFrom.isEmpty()) {
|
||||
assertEquals(View.VISIBLE, validFromField.getVisibility());
|
||||
assertEquals(validFrom, validFromField.getText().toString());
|
||||
} else {
|
||||
assertEquals(View.GONE, validFromField.getVisibility());
|
||||
}
|
||||
|
||||
if (!expiry.isEmpty()) {
|
||||
assertEquals(View.VISIBLE, expiryField.getVisibility());
|
||||
assertEquals(expiry, expiryField.getText().toString());
|
||||
@@ -104,7 +113,7 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapterEmptyNote() {
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
|
||||
|
||||
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
|
||||
@@ -112,14 +121,14 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
View view = createView(cursor);
|
||||
|
||||
checkView(view, card.store, card.note, "", "", false);
|
||||
checkView(view, card.store, card.note, "", "", "", false);
|
||||
|
||||
cursor.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapterWithNote() {
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
|
||||
|
||||
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
|
||||
@@ -127,17 +136,17 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
View view = createView(cursor);
|
||||
|
||||
checkView(view, card.store, card.note, "", "", false);
|
||||
checkView(view, card.store, card.note, "", "", "", false);
|
||||
|
||||
cursor.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapterFontSizes() {
|
||||
Date expiryDate = new Date();
|
||||
String dateString = DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate);
|
||||
Date date = new Date();
|
||||
String dateString = DateFormat.getDateInstance(DateFormat.LONG).format(date);
|
||||
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", expiryDate, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", date, date, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
|
||||
|
||||
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
|
||||
@@ -146,21 +155,21 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
setFontScale(50);
|
||||
View view = createView(cursor);
|
||||
|
||||
checkView(view, card.store, card.note, dateString, "", true);
|
||||
checkView(view, card.store, card.note, dateString, dateString, "", true);
|
||||
|
||||
setFontScale(200);
|
||||
view = createView(cursor);
|
||||
checkView(view, card.store, card.note, dateString, "", true);
|
||||
checkView(view, card.store, card.note, dateString, dateString, "", true);
|
||||
|
||||
cursor.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapterStarring() {
|
||||
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeA", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,1));
|
||||
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeB", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,1));
|
||||
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeC", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0));
|
||||
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeD", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,0));
|
||||
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeA", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,1));
|
||||
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeB", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,1));
|
||||
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeC", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0));
|
||||
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeD", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,0));
|
||||
|
||||
assertEquals(4, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
|
||||
@@ -208,7 +217,7 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapter0Points() {
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
|
||||
|
||||
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
|
||||
@@ -216,14 +225,14 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
View view = createView(cursor);
|
||||
|
||||
checkView(view, card.store, card.note, "", "", false);
|
||||
checkView(view, card.store, card.note, "", "", "", false);
|
||||
|
||||
cursor.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapter0EUR() {
|
||||
DBHelper.insertLoyaltyCard(mDatabase,"store", "", null, new BigDecimal("0"), Currency.getInstance("EUR"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(mDatabase,"store", "", null, null, new BigDecimal("0"), Currency.getInstance("EUR"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
|
||||
|
||||
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
|
||||
@@ -231,14 +240,14 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
View view = createView(cursor);
|
||||
|
||||
checkView(view, card.store, card.note, "", "", false);
|
||||
checkView(view, card.store, card.note, "", "", "", false);
|
||||
|
||||
cursor.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapter100Points() {
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
|
||||
|
||||
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
|
||||
@@ -246,14 +255,14 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
View view = createView(cursor);
|
||||
|
||||
checkView(view, card.store, card.note, "", "100 points", false);
|
||||
checkView(view, card.store, card.note, "", "", "100 points", false);
|
||||
|
||||
cursor.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapter10USD() {
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, new BigDecimal("10.00"), Currency.getInstance("USD"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("USD"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(mDatabase, 1);
|
||||
|
||||
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
|
||||
@@ -261,7 +270,7 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
View view = createView(cursor);
|
||||
|
||||
checkView(view, card.store, card.note, "", "$10.00", false);
|
||||
checkView(view, card.store, card.note, "", "", "$10.00", false);
|
||||
|
||||
cursor.close();
|
||||
}
|
||||
|
||||
@@ -51,6 +51,8 @@ import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.DateFormat;
|
||||
import java.text.ParseException;
|
||||
import java.time.Instant;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.Currency;
|
||||
import java.util.Date;
|
||||
|
||||
@@ -121,6 +123,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
*/
|
||||
private void saveLoyaltyCardWithArguments(final Activity activity,
|
||||
final String store, final String note,
|
||||
final String validFrom,
|
||||
final String expiry,
|
||||
final BigDecimal balance,
|
||||
final String balanceType,
|
||||
@@ -137,6 +140,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
final EditText storeField = activity.findViewById(R.id.storeNameEdit);
|
||||
final EditText noteField = activity.findViewById(R.id.noteEdit);
|
||||
final TextInputLayout validFromView = activity.findViewById(R.id.validFromView);
|
||||
final TextInputLayout expiryView = activity.findViewById(R.id.expiryView);
|
||||
final EditText balanceView = activity.findViewById(R.id.balanceField);
|
||||
final EditText balanceCurrencyField = activity.findViewById(R.id.balanceCurrencyField);
|
||||
@@ -146,6 +150,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
storeField.setText(store);
|
||||
noteField.setText(note);
|
||||
validFromView.setTag(validFrom);
|
||||
expiryView.setTag(expiry);
|
||||
balanceView.setText(balance.toPlainString());
|
||||
balanceCurrencyField.setText(balanceType);
|
||||
@@ -164,6 +169,13 @@ public class LoyaltyCardViewActivityTest {
|
||||
assertEquals(note, card.note);
|
||||
assertEquals(balance, card.balance);
|
||||
|
||||
// The special "Any date" string shouldn't actually be written to the loyalty card
|
||||
if (validFrom.equals(activity.getApplicationContext().getString(R.string.anyDate))) {
|
||||
assertEquals(null, card.validFrom);
|
||||
} else {
|
||||
assertEquals(DateFormat.getDateInstance().parse(validFrom), card.validFrom);
|
||||
}
|
||||
|
||||
// The special "Never" string shouldn't actually be written to the loyalty card
|
||||
if (expiry.equals(activity.getApplicationContext().getString(R.string.never))) {
|
||||
assertEquals(null, card.expiry);
|
||||
@@ -289,11 +301,11 @@ public class LoyaltyCardViewActivityTest {
|
||||
}
|
||||
|
||||
private void checkAllFields(final Activity activity, ViewMode mode,
|
||||
final String store, final String note, final String expiryString,
|
||||
final String balanceString, final String balanceTypeString,
|
||||
final String cardId, final String barcodeId,
|
||||
final String barcodeType, final Bitmap frontImage,
|
||||
final Bitmap backImage) {
|
||||
final String store, final String note, final String validFromString,
|
||||
final String expiryString, final String balanceString,
|
||||
final String balanceTypeString, final String cardId,
|
||||
final String barcodeId, final String barcodeType,
|
||||
final Bitmap frontImage, final Bitmap backImage) {
|
||||
if (mode == ViewMode.VIEW_CARD) {
|
||||
checkFieldProperties(activity, R.id.cardIdView, View.VISIBLE, cardId, FieldTypeView.TextView);
|
||||
} else {
|
||||
@@ -301,6 +313,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
checkFieldProperties(activity, R.id.storeNameEdit, editVisibility, store, FieldTypeView.TextView);
|
||||
checkFieldProperties(activity, R.id.noteEdit, editVisibility, note, FieldTypeView.TextView);
|
||||
checkFieldProperties(activity, R.id.validFromView, editVisibility, validFromString, FieldTypeView.TextInputLayout);
|
||||
checkFieldProperties(activity, R.id.expiryView, editVisibility, expiryString, FieldTypeView.TextInputLayout);
|
||||
checkFieldProperties(activity, R.id.balanceField, editVisibility, balanceString, FieldTypeView.TextView);
|
||||
checkFieldProperties(activity, R.id.balanceCurrencyField, editVisibility, balanceTypeString, FieldTypeView.TextView);
|
||||
@@ -328,7 +341,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Check default settings
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), null, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -355,7 +368,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
|
||||
if (!newCard) {
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
}
|
||||
|
||||
activityController.start();
|
||||
@@ -365,11 +378,12 @@ public class LoyaltyCardViewActivityTest {
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Check default settings
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, newCard ? "" : "store", newCard ? "" : "note", context.getString(R.string.never), "0", context.getString(R.string.points), newCard ? "" : EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), newCard ? context.getString(R.string.noBarcode) : EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, newCard ? "" : "store", newCard ? "" : "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), newCard ? "" : EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), newCard ? context.getString(R.string.noBarcode) : EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
// Change everything
|
||||
final EditText storeField = activity.findViewById(R.id.storeNameEdit);
|
||||
final EditText noteField = activity.findViewById(R.id.noteEdit);
|
||||
final EditText validFromField = activity.findViewById(R.id.validFromField);
|
||||
final EditText expiryField = activity.findViewById(R.id.expiryField);
|
||||
final EditText balanceField = activity.findViewById(R.id.balanceField);
|
||||
final EditText balanceTypeField = activity.findViewById(R.id.balanceCurrencyField);
|
||||
@@ -380,13 +394,15 @@ public class LoyaltyCardViewActivityTest {
|
||||
final ImageView backImageView = activity.findViewById(R.id.backImage);
|
||||
|
||||
Currency currency = Currency.getInstance("EUR");
|
||||
Date validFromDate = Date.from(Instant.now().minus(20, ChronoUnit.DAYS));
|
||||
Date expiryDate = new Date();
|
||||
Bitmap frontBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.circle);
|
||||
Bitmap backBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_done);
|
||||
|
||||
storeField.setText("correct store");
|
||||
noteField.setText("correct note");
|
||||
LoyaltyCardEditActivity.formatExpiryField(context, expiryField, expiryDate);
|
||||
LoyaltyCardEditActivity.formatDateField(context, validFromField, validFromDate);
|
||||
LoyaltyCardEditActivity.formatDateField(context, expiryField, expiryDate);
|
||||
balanceField.setText("100");
|
||||
balanceTypeField.setText(currency.getSymbol());
|
||||
cardIdField.setText("12345678");
|
||||
@@ -398,7 +414,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Check if changed
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName(), frontBitmap, backBitmap);
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(validFromDate), DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName(), frontBitmap, backBitmap);
|
||||
|
||||
// Resume
|
||||
activityController.pause();
|
||||
@@ -407,7 +423,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Check if no changes lost
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName(), frontBitmap, backBitmap);
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(validFromDate), DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName(), frontBitmap, backBitmap);
|
||||
|
||||
// Rotate to landscape
|
||||
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
|
||||
@@ -415,7 +431,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Check if no changes lost
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName(), frontBitmap, backBitmap);
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(validFromDate), DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName(), frontBitmap, backBitmap);
|
||||
|
||||
// Rotate to portrait
|
||||
shadowOf(getMainLooper()).idle();
|
||||
@@ -423,7 +439,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||
|
||||
// Check if no changes lost
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName(), frontBitmap, backBitmap);
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, "correct store", "correct note", DateFormat.getDateInstance(DateFormat.LONG).format(validFromDate), DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate), "100.00", currency.getSymbol(), "12345678", "87654321", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE).prettyName(), frontBitmap, backBitmap);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -437,7 +453,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
Activity activity = (Activity) activityController.get();
|
||||
final Context context = activity.getApplicationContext();
|
||||
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), null, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -495,18 +511,18 @@ public class LoyaltyCardViewActivityTest {
|
||||
Activity activity = (Activity) activityController.get();
|
||||
final Context context = activity.getApplicationContext();
|
||||
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), null, null);
|
||||
|
||||
// Complete barcode capture successfully
|
||||
captureBarcodeWithResult(activity, true);
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Save and check the loyalty card
|
||||
saveLoyaltyCardWithArguments(activity, "store", "note", context.getString(R.string.never), new BigDecimal("0"), context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.name(), true);
|
||||
saveLoyaltyCardWithArguments(activity, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), new BigDecimal("0"), context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.name(), true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -519,7 +535,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
Activity activity = (Activity) activityController.get();
|
||||
final Context context = activity.getApplicationContext();
|
||||
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), null, null);
|
||||
|
||||
// Complete barcode capture in failure
|
||||
captureBarcodeWithResult(activity, false);
|
||||
@@ -527,7 +543,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), null, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -540,13 +556,13 @@ public class LoyaltyCardViewActivityTest {
|
||||
LoyaltyCardEditActivity activity = (LoyaltyCardEditActivity) activityController.get();
|
||||
final Context context = activity.getApplicationContext();
|
||||
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), null, null);
|
||||
|
||||
// Complete barcode capture successfully
|
||||
captureBarcodeWithResult(activity, true);
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
// Cancel the loyalty card creation
|
||||
assertEquals(false, activity.isFinishing());
|
||||
@@ -591,13 +607,13 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = activity.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -609,13 +625,13 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = activity.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.VIEW_CARD, "store", "note", null, "0", context.getString(R.string.points), BARCODE_DATA, null, BARCODE_TYPE.toString(), null, null);
|
||||
checkAllFields(activity, ViewMode.VIEW_CARD, "store", "note", null, null, "0", context.getString(R.string.points), BARCODE_DATA, null, BARCODE_TYPE.toString(), null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -627,19 +643,19 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = activity.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
// Complete barcode capture successfully
|
||||
captureBarcodeWithResult(activity, true);
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -651,19 +667,19 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = activity.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
// Complete barcode capture successfully
|
||||
captureBarcodeWithResult(activity, true);
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
// Cancel the loyalty card creation
|
||||
assertEquals(false, activity.isFinishing());
|
||||
@@ -689,13 +705,13 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = activity.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
// Set date to today
|
||||
MaterialAutoCompleteTextView expiryField = activity.findViewById(R.id.expiryField);
|
||||
@@ -709,7 +725,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -721,19 +737,19 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = activity.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", new Date(), new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new Date(), new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
// Set date to never
|
||||
MaterialAutoCompleteTextView expiryField = activity.findViewById(R.id.expiryField);
|
||||
expiryField.setText(expiryField.getAdapter().getItem(0).toString(), false);
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -745,13 +761,13 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = activity.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
// Set balance to 10 points
|
||||
EditText balanceField = activity.findViewById(R.id.balanceField);
|
||||
@@ -780,7 +796,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "10.00", "€", EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE.toString(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "10.00", "€", EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE.toString(), null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -795,13 +811,13 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = activity.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("10.00"), Currency.getInstance("USD"), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("USD"), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "10.00", "$", EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "10.00", "$", EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
@@ -823,7 +839,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", "₩", EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", "₩", EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -835,13 +851,13 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = activity.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
// Change barcode ID
|
||||
EditText barcodeField = activity.findViewById(R.id.barcodeIdField);
|
||||
@@ -854,7 +870,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
AlertDialog updateBarcodeIdDialog = (AlertDialog) (ShadowDialog.getLatestDialog());
|
||||
assertNull(updateBarcodeIdDialog);
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -866,13 +882,13 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = activity.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
// Change card ID
|
||||
EditText cardIdField = activity.findViewById(R.id.cardIdView);
|
||||
@@ -887,7 +903,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), "123456", context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "123456", context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -899,13 +915,13 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = activity.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
// Change card ID
|
||||
EditText cardIdField = activity.findViewById(R.id.cardIdView);
|
||||
@@ -923,7 +939,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), "654321", context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "654321", context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -935,13 +951,13 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = activity.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
// Change card ID
|
||||
EditText cardIdField = activity.findViewById(R.id.cardIdView);
|
||||
@@ -959,7 +975,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), "654321", "123456", EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "654321", "123456", EAN_BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -970,7 +986,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
Activity activity = (Activity) activityController.get();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -1015,7 +1031,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
Activity activity = (Activity) activityController.get();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -1034,7 +1050,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
Activity activity = (Activity) activityController.get();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -1053,14 +1069,14 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
Activity activity = (Activity) activityController.get();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
// Save and check the loyalty card
|
||||
saveLoyaltyCardWithArguments(activity, "store", "note", activity.getApplicationContext().getString(R.string.never), new BigDecimal("0"), activity.getApplicationContext().getString(R.string.points), BARCODE_DATA, activity.getApplicationContext().getString(R.string.sameAsCardId), BARCODE_TYPE.name(), false);
|
||||
saveLoyaltyCardWithArguments(activity, "store", "note", activity.getApplicationContext().getString(R.string.anyDate), activity.getApplicationContext().getString(R.string.never), new BigDecimal("0"), activity.getApplicationContext().getString(R.string.points), BARCODE_DATA, activity.getApplicationContext().getString(R.string.sameAsCardId), BARCODE_TYPE.name(), false);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -1071,14 +1087,14 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
Activity activity = (Activity) activityController.get();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
// Save and check the loyalty card
|
||||
saveLoyaltyCardWithArguments(activity, "store", "note", activity.getApplicationContext().getString(R.string.never), new BigDecimal("0"), activity.getApplicationContext().getString(R.string.points), BARCODE_DATA, activity.getApplicationContext().getString(R.string.sameAsCardId), activity.getApplicationContext().getString(R.string.noBarcode), false);
|
||||
saveLoyaltyCardWithArguments(activity, "store", "note", activity.getApplicationContext().getString(R.string.anyDate), activity.getApplicationContext().getString(R.string.never), new BigDecimal("0"), activity.getApplicationContext().getString(R.string.points), BARCODE_DATA, activity.getApplicationContext().getString(R.string.sameAsCardId), activity.getApplicationContext().getString(R.string.noBarcode), false);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -1090,25 +1106,25 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = activity.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
// First check if the card is as expected
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), null, null);
|
||||
|
||||
// Complete empty barcode selection successfully
|
||||
selectBarcodeWithResult(activity, BARCODE_DATA, "", true);
|
||||
activityController.resume();
|
||||
|
||||
// Check if the barcode type is NO_BARCODE as expected
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), null, null);
|
||||
assertEquals(View.GONE, activity.findViewById(R.id.barcodeLayout).getVisibility());
|
||||
|
||||
// Check if the special NO_BARCODE string doesn't get saved
|
||||
saveLoyaltyCardWithArguments(activity, "store", "note", context.getString(R.string.never), new BigDecimal("0"), context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), false);
|
||||
saveLoyaltyCardWithArguments(activity, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), new BigDecimal("0"), context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), false);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -1119,7 +1135,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
Activity activity = (Activity) activityController.get();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
final int LARGE_FONT_SIZE = 40;
|
||||
|
||||
@@ -1153,7 +1169,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
Activity activity = (Activity) activityController.get();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
@@ -1187,7 +1203,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
Activity activity = (Activity) activityController.get();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -1291,7 +1307,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
Activity activity = (Activity) activityController.get();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(activity).getWritableDatabase();
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0, null,0);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -1331,7 +1347,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
public void importCard() {
|
||||
Date date = new Date();
|
||||
|
||||
Uri importUri = Uri.parse("https://catima.app/share#store%3DExample%2BStore%26note%3D%26expiry%3D" + date.getTime() + "%26balance%3D10.00%26balancetype%3DUSD%26cardid%3D123456%26barcodetype%3DAZTEC%26headercolor%3D-416706");
|
||||
Uri importUri = Uri.parse("https://catima.app/share#store%3DExample%2BStore%26note%3D%26validfrom%3D" + date.getTime() + "%26expiry%3D" + date.getTime() + "%26balance%3D10.00%26balancetype%3DUSD%26cardid%3D123456%26barcodetype%3DAZTEC%26headercolor%3D-416706");
|
||||
|
||||
Intent intent = new Intent();
|
||||
intent.setData(importUri);
|
||||
@@ -1347,7 +1363,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "Example Store", "", DateFormat.getDateInstance(DateFormat.LONG).format(date), "10.00", "$", "123456", context.getString(R.string.sameAsCardId), "Aztec", null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "Example Store", "", DateFormat.getDateInstance(DateFormat.LONG).format(date), DateFormat.getDateInstance(DateFormat.LONG).format(date), "10.00", "$", "123456", context.getString(R.string.sameAsCardId), "Aztec", null, null);
|
||||
assertEquals(-416706, ((ColorDrawable) activity.findViewById(R.id.thumbnail).getBackground()).getColor());
|
||||
}
|
||||
|
||||
@@ -1367,7 +1383,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
Activity activity = (Activity) activityController.get();
|
||||
final Context context = activity.getApplicationContext();
|
||||
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "Example Store", "", context.getString(R.string.never), "0", context.getString(R.string.points), "123456", context.getString(R.string.sameAsCardId), "Aztec", null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "Example Store", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "123456", context.getString(R.string.sameAsCardId), "Aztec", null, null);
|
||||
assertEquals(-416706, ((ColorDrawable) activity.findViewById(R.id.thumbnail).getBackground()).getColor());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ public class MainActivityTest {
|
||||
assertEquals(0, list.getAdapter().getItemCount());
|
||||
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase();
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
|
||||
assertEquals(View.VISIBLE, helpSection.getVisibility());
|
||||
assertEquals(View.GONE, noMatchingCardsText.getVisibility());
|
||||
@@ -131,10 +131,10 @@ public class MainActivityTest {
|
||||
assertEquals(0, list.getAdapter().getItemCount());
|
||||
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase();
|
||||
DBHelper.insertLoyaltyCard(database, "storeB", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "storeA", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "storeD", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "storeC", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "storeB", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "storeA", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "storeD", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "storeC", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,0);
|
||||
|
||||
assertEquals(View.VISIBLE, helpSection.getVisibility());
|
||||
assertEquals(View.GONE, noMatchingCardsText.getVisibility());
|
||||
@@ -225,8 +225,8 @@ public class MainActivityTest {
|
||||
TabLayout groupTabs = mainActivity.findViewById(R.id.groups);
|
||||
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase();
|
||||
DBHelper.insertLoyaltyCard(database, "The First Store", "Initial note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "The Second Store", "Secondary note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "The First Store", "Initial note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "The Second Store", "Secondary note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0);
|
||||
|
||||
DBHelper.insertGroup(database, "Group one");
|
||||
List<Group> groups = new ArrayList<>();
|
||||
|
||||
51
build.sh
Executable file
51
build.sh
Executable file
@@ -0,0 +1,51 @@
|
||||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
IFS=$'\n\t'
|
||||
|
||||
### build.sh
|
||||
### Builds Catima the same way F-Droid does for reproducible builds
|
||||
|
||||
if [ -z "${ANDROID_SDK_ROOT:-}" ]; then
|
||||
echo "ANDROID_SDK_ROOT is not set, setting to $HOME/Android/Sdk";
|
||||
export ANDROID_SDK_ROOT=$HOME/Android/Sdk
|
||||
fi
|
||||
|
||||
if [ -z "${JAVA_HOME:-}" ]; then
|
||||
echo "JAVA_HOME is not set, setting to Java 11 (like F-Droid)"
|
||||
if [ -f "/etc/debian_version" ]; then
|
||||
echo "Debian-based distro, Java 11 is /usr/lib/jvm/java-11-openjdk-amd64"
|
||||
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
|
||||
else
|
||||
echo "Not Debian-based, assuming Fedora and setting Java 11 as /usr/lib/jvm/java-11-openjdk"
|
||||
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Starting build"
|
||||
./gradlew clean assembleRelease
|
||||
|
||||
echo "Build finished (unsigned)"
|
||||
echo "Your build is at app/build/outputs/apk/release/app-release-unsigned.apk"
|
||||
|
||||
if [ -z "${KEYSTORE:-}" ]; then
|
||||
echo "KEYSTORE not set, skipping signing..."
|
||||
else
|
||||
if [ -z "${KEYSTORE_ALIAS:-}" ]; then
|
||||
echo "KEYSTORE_ALIAS is not set, setting to catima"
|
||||
KEYSTORE_ALIAS=catima
|
||||
fi
|
||||
|
||||
apksigner_version="$(ls -1 "$HOME/Android/Sdk/build-tools/" | tail -n 1)"
|
||||
cp app/build/outputs/apk/release/app-release-unsigned.apk app/build/outputs/apk/release/app-release.apk
|
||||
"$HOME/Android/Sdk/build-tools/$apksigner_version/apksigner" sign -v --ks "$KEYSTORE" --ks-key-alias "$KEYSTORE_ALIAS" app/build/outputs/apk/release/app-release.apk
|
||||
|
||||
echo "Build finished (signed)"
|
||||
echo "Your build is at app/build/outputs/apk/release/app-release.apk"
|
||||
fi
|
||||
|
||||
pushd app/build/outputs/apk/release/
|
||||
sha256sum -- *.apk > SHA256SUMS
|
||||
popd
|
||||
|
||||
echo "SHA256SUMS generated"
|
||||
echo "Your SHA256SUMS is at app/build/outputs/apk/release/SHA256SUMS"
|
||||
@@ -5,7 +5,7 @@ Copylefted libre software (GPLv3+) card management app.
|
||||
[](https://github.com/TheLastProject/Catima/releases)
|
||||
[](https://f-droid.org/packages/me.hackerchick.catima/)
|
||||
[](https://apt.izzysoft.de/fdroid/index/apk/me.hackerchick.catima)
|
||||
[](https://play.google.com/store/apps/details?id=me.hackerchick.catima)
|
||||
[](https://play.google.com/store/apps/details?id=me.hackerchick.catima)
|
||||
|
||||

|
||||
[](https://hosted.weblate.org/engage/catima/)
|
||||
@@ -18,7 +18,7 @@ Copylefted libre software (GPLv3+) card management app.
|
||||
<a href="https://play.google.com/store/apps/details?id=me.hackerchick.catima" target="_blank">
|
||||
<img src="https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png" alt="Get it on Google Play" height="90"/></a>
|
||||
|
||||

|
||||

|
||||
|
||||
*Logo by [Rose (TangentFoxy)](http://github.com/TangentFoxy)*
|
||||
|
||||
@@ -42,14 +42,14 @@ Supported barcodes:
|
||||
|
||||
# Screenshots
|
||||
|
||||
[<img src="https://github.com/TheLastProject/Catima/raw/master/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-01.png" width=250>](https://github.com/TheLastProject/Catima/raw/master/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-01.png)
|
||||
[<img src="https://github.com/TheLastProject/Catima/raw/master/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-02.png" width=250>](https://github.com/TheLastProject/Catima/raw/master/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-02.png)
|
||||
[<img src="https://github.com/TheLastProject/Catima/raw/master/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-03.png" width=250>](https://github.com/TheLastProject/Catima/raw/master/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-03.png)
|
||||
[<img src="https://github.com/TheLastProject/Catima/raw/master/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-04.png" width=250>](https://github.com/TheLastProject/Catima/raw/master/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-04.png)
|
||||
[<img src="https://github.com/TheLastProject/Catima/raw/master/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-05.png" width=250>](https://github.com/TheLastProject/Catima/raw/master/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-05.png)
|
||||
[<img src="https://github.com/TheLastProject/Catima/raw/master/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-06.png" width=250>](https://github.com/TheLastProject/Catima/raw/master/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-06.png)
|
||||
[<img src="https://github.com/TheLastProject/Catima/raw/master/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-07.png" width=250>](https://github.com/TheLastProject/Catima/raw/master/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-07.png)
|
||||
[<img src="https://github.com/TheLastProject/Catima/raw/master/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-08.png" width=250>](https://github.com/TheLastProject/Catima/raw/master/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-08.png)
|
||||
[<img src="https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-01.png" width=250>](https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-01.png)
|
||||
[<img src="https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-02.png" width=250>](https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-02.png)
|
||||
[<img src="https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-03.png" width=250>](https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-03.png)
|
||||
[<img src="https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-04.png" width=250>](https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-04.png)
|
||||
[<img src="https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-05.png" width=250>](https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-05.png)
|
||||
[<img src="https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-06.png" width=250>](https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-06.png)
|
||||
[<img src="https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-07.png" width=250>](https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-07.png)
|
||||
[<img src="https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-08.png" width=250>](https://github.com/TheLastProject/Catima/raw/main/fastlane/metadata/android/en-US/images/phoneScreenshots/screenshot-08.png)
|
||||
|
||||
# Moving data from other apps
|
||||
|
||||
@@ -58,17 +58,16 @@ For FidMe you need to select the barcode type for each entry afterwards.
|
||||
|
||||
# Building
|
||||
|
||||
Use the Gradle wrapper scripts provided in the top level directory of the project.
|
||||
To compile the app and run all unit tests:
|
||||
Building can either be done through Android Studio (not reproducible!) or the build.sh script in this repository (reproducibly with Java 11, same way F-Droid builds it). This script can also sign the build.
|
||||
|
||||
Linux|GNU, Unix-like, macOS:
|
||||
Build without signing:
|
||||
```
|
||||
./gradlew build
|
||||
./build.sh
|
||||
```
|
||||
|
||||
Windows:
|
||||
Build with signing:
|
||||
```
|
||||
./gradlew.bat build
|
||||
KEYSTORE=/path/to/keystore KEYSTORE_ALIAS=catima ./build.sh
|
||||
```
|
||||
|
||||
# Translating
|
||||
|
||||
2
fastlane/metadata/android/cs-CZ/changelogs/117.txt
Normal file
2
fastlane/metadata/android/cs-CZ/changelogs/117.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Odstranění nepotřebných oprávnění
|
||||
- Cíl Android 13
|
||||
1
fastlane/metadata/android/cs-CZ/changelogs/118.txt
Normal file
1
fastlane/metadata/android/cs-CZ/changelogs/118.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Podpora nastavení začátku platnosti karty
|
||||
@@ -1 +1,4 @@
|
||||
- Bild durch langes Drücken in der Galerie öffnen
|
||||
- Materialstil in Dialogen angewendet
|
||||
- Unterstützung für das Erstellen von Karten durch Verwendung eines Bildes hinzugefügt
|
||||
- Spenden-Button zu Kartenbildschirm hinzugefügt
|
||||
|
||||
2
fastlane/metadata/android/de-DE/changelogs/116.txt
Normal file
2
fastlane/metadata/android/de-DE/changelogs/116.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Bugfix: Spendendialog erlaubte kene Trennzeichen
|
||||
- Unterstützt das Laden von Bildern aus dem Dateimanager
|
||||
2
fastlane/metadata/android/de-DE/changelogs/117.txt
Normal file
2
fastlane/metadata/android/de-DE/changelogs/117.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Ncht benötigte Berechtigungen entfernt
|
||||
- Ziel Android 13
|
||||
1
fastlane/metadata/android/de-DE/changelogs/118.txt
Normal file
1
fastlane/metadata/android/de-DE/changelogs/118.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Unterstützung bei der Eingabe des Gültigkeitsbeginns der Karte
|
||||
@@ -11,4 +11,4 @@
|
||||
- QR_CODE
|
||||
- UPC_A
|
||||
|
||||
- Die erzeugten Barcodes sind größer und lassen sich leichter mit einem Scangerät einlesen.
|
||||
- Die erzeugten Barcodes sind größer und lassen sich leichter mit einem Scangerät einlesen
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
- Unschärfe der Buchstabensymbole auf dem Hauptbildschirm behoben
|
||||
- Unscharfe Buchstabensymbole auf dem Hauptbildschirm behoben
|
||||
- Behebung des Problems, dass Icons manchmal nach der Auswahl verschwinden
|
||||
- Behebung der Unsichtbarkeit von Statusleistensymbolen unter Android 5
|
||||
- Behoben, dass Icons in der Statusleiste unter Android 5 nicht sichtbar waren
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
- Mehrfaches Drücken der Speichern-Schaltfläche erzeugt nun mehrere Einträge
|
||||
- Verkleinerung des Kartenkopfes beim Ausblenden von Details, um noch mehr Karten unterzubringen
|
||||
- Behoben: Mehrfaches Drücken der Speichern-Schaltfläche erzeugt nun nicht mehr mehrere Einträge
|
||||
- Verkleinerung des Karten-Headers bei ausgeblendeten Details, um noch mehr Karten unterzubringen
|
||||
- Bearbeitungsbildschirm umstrukturiert
|
||||
- Kontrast der Sternsymbole in der Hauptansicht verbessert
|
||||
|
||||
@@ -1 +1 @@
|
||||
- Behebung verschiedener TalkBack-bezogener Fehler
|
||||
- Behebung verschiedener Fehler im Zusammenhang mit TalkBack
|
||||
|
||||
@@ -1 +1 @@
|
||||
- Material You Neugestaltung
|
||||
- Neues Material You-Design
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
Schluss mit der Suche nach Plastik-Belohnungskarten beim Bezahlen im Geschäft oder Webshop.
|
||||
<b>Scanne EAN-Codes mit der Kamera deines Geräts, du brauchst keine Karten mehr.</b>
|
||||
Schluss mit der Suche nach Kundenkarten aus Plastik beim Bezahlen im Geschäft oder Webshop.
|
||||
<b>Speichere Barcodes mit der Kamera auf dein Gerät und vergesse deine Karten.</b>
|
||||
|
||||
Du brauchst keine Geldbörse, oder mach sie federleicht für Wertsachen.
|
||||
Lass deine Geldbörse daheim, oder schaffe wenigstens viel Platz für die wichtigen Wertsachen.
|
||||
|
||||
Mit diesem unverzichtbaren (EDC) Werkzeug kannst du nutzloses Plastik durch Bargeld ersetzen.
|
||||
Mit diesem unverzichtbaren Programm schaffst du Platz für Bargeld statt für nutzloses Plastik.
|
||||
|
||||
- Vermeide Spionage mit sehr wenigen Berechtigungen. Kein Internetzugang und keine Werbung.
|
||||
- Du wirst nicht ausspioniert, dank sehr weniger Berechtigungen. Kein Internetzugang und keine Werbung.
|
||||
- Füge Karten oder Codes mit Namen und anpassbaren Farben hinzu.
|
||||
- Manuelle Code-Eingabe, wenn kein Barcode gespeichert ist oder nicht funktioniert.
|
||||
- Importiere Karten und Codes aus Dateien, Catima, Loyalty Card Keychain, Stocard, Voucher Vault und FidMe.
|
||||
- Erstelle ein Backup aller Karten und übertrage diese auf ein neues Gerät.
|
||||
- Teile Gutscheine, exklusive Angebote, Werbeaktionscodes oder Karten und Codes mit jeder Applikation.
|
||||
- Dunkler Modus und Zugänglichkeitsoptionen für sehbehinderte Nutzer.
|
||||
- Manuelle Code-Eingabe, wenn kein Barcode vorhanden ist oder er nicht funktioniert.
|
||||
- Importiere Karten und Codes aus Dateien, von Catima, FidMe, Loyalty Card Keychain, Stocard oder Voucher Vault.
|
||||
- Erstelle ein Backup aller deiner Karten und übertrage diese auf ein neues Gerät.
|
||||
- Teile Gutscheine, exklusive Angebote, Werbeaktionscodes oder Karten und sonstige Codes mit allen Apps.
|
||||
- Dunkles Design und Barrierefreiheit für sehbehinderte Nutzer.
|
||||
- Von der Freien-Software-Gemeinschaft für alle Menschen gemacht.
|
||||
- Lokalisierte, eigenhändige Übersetzungen für mehr als 20 Sprachen.
|
||||
- Lokalisierte, menschliche Übersetzungen für mehr als 20 Sprachen.
|
||||
- Kostenlos, unterstützt durch Gemeinschaftsbeiträge.
|
||||
- Verwende, studiere, ändere und teile es, wie du willst; <i>mit Allen</i>.
|
||||
- Nicht nur freie und quelloffene Software. <i>Copylefted</i> freie Software (GPLv3+) Kartenverwaltung.
|
||||
- Verwende, prüfe, ändere und teile die App, wie du willst; <i>mit Allen</i>.
|
||||
- Nicht nur freie und quelloffene Software. Eine freie, <i>Copylefted</i> Software-Kartenverwaltung (GPLv3+).
|
||||
|
||||
Vereinfache dein Leben und Einkäufe, und verliere nie wieder eine Papierrechung, eine Geschenkkarte für die Bezahlung im Geschäft oder ein Flugticket.
|
||||
Habe deine Prämien und Boni immer bei der Hand, und spare unterwegs.
|
||||
Vereinfache dein Leben und deine Einkäufe, und verliere nie wieder einen Beleg, eine Gutscheinkarte oder ein Flugticket.
|
||||
Habe deine Prämien und Boni immer bei dir, und spare unterwegs.
|
||||
|
||||
@@ -1 +1 @@
|
||||
Für Ihre EAN-Codes, Mitgliedschaften, Treueprogramme, Rabattmarkerl und Tickets.
|
||||
Für deine Barcodes, Mitgliedschaften, Treueprogramme, Gutscheine und Tickets.
|
||||
|
||||
2
fastlane/metadata/android/en-US/changelogs/117.txt
Normal file
2
fastlane/metadata/android/en-US/changelogs/117.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Remove unnecessary permissions
|
||||
- Target Android 13
|
||||
1
fastlane/metadata/android/en-US/changelogs/118.txt
Normal file
1
fastlane/metadata/android/en-US/changelogs/118.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Support setting start of card validity
|
||||
@@ -1,2 +1,2 @@
|
||||
- Long-click of a card brings up option to copy card ID to the clipboard. (pull #49 (https://github.com/brarcher/loyalty-card-locker/issues/49))
|
||||
- Back button on Input/Export view now works, moving user to main view
|
||||
- Back button on Import/Export view now works, moving user to main view
|
||||
3
fastlane/metadata/android/es-ES/changelogs/101.txt
Normal file
3
fastlane/metadata/android/es-ES/changelogs/101.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Corregir cropper no utilizar el color del tema
|
||||
- Corregir problemas menores de tematización
|
||||
- Añadir tema oscuro negro puro para pantallas OLED
|
||||
2
fastlane/metadata/android/es-ES/changelogs/102.txt
Normal file
2
fastlane/metadata/android/es-ES/changelogs/102.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Varias correcciones menores
|
||||
- Corrección del fallo al utilizar la traducción al noruego
|
||||
2
fastlane/metadata/android/es-ES/changelogs/103.txt
Normal file
2
fastlane/metadata/android/es-ES/changelogs/103.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Corrección de la selección manual de idioma que no se aplica en todas partes
|
||||
- Corregir el bloqueo en la vista de edición en la configuración regional sin región
|
||||
2
fastlane/metadata/android/es-ES/changelogs/104.txt
Normal file
2
fastlane/metadata/android/es-ES/changelogs/104.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Guardar el estado de ampliación de los detalles de las tarjetas
|
||||
- Correcciones menores de la interfaz de usuario
|
||||
2
fastlane/metadata/android/es-ES/changelogs/105.txt
Normal file
2
fastlane/metadata/android/es-ES/changelogs/105.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Fijar el bloque gris que aparece en el valor no válido para el código de barras
|
||||
- Corrección de la importación de Stocard
|
||||
1
fastlane/metadata/android/es-ES/changelogs/106.txt
Normal file
1
fastlane/metadata/android/es-ES/changelogs/106.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Corregir algunas secuencias de caracteres que se muestran como un solo carácter
|
||||
1
fastlane/metadata/android/es-ES/changelogs/107.txt
Normal file
1
fastlane/metadata/android/es-ES/changelogs/107.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Correcciones a la importación de Stocard
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user