mirror of
https://github.com/CatimaLoyalty/Android.git
synced 2025-12-24 15:47:53 -05:00
Compare commits
161 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fd7e6e4993 | ||
|
|
b749c79a81 | ||
|
|
5d019a8e5b | ||
|
|
4e203aebfe | ||
|
|
fb2bede135 | ||
|
|
5a88909cd2 | ||
|
|
017034a788 | ||
|
|
66ff6f8199 | ||
|
|
ddccbad020 | ||
|
|
578fb068ee | ||
|
|
d624eb3842 | ||
|
|
f46fedda4b | ||
|
|
6e5ac2ca3d | ||
|
|
20de874ea1 | ||
|
|
c8a207083b | ||
|
|
ab7505c67a | ||
|
|
b26050b6bf | ||
|
|
84e9c8efd4 | ||
|
|
2811a14627 | ||
|
|
3b6d4d44b0 | ||
|
|
71bc304c51 | ||
|
|
7b0652ff11 | ||
|
|
61a3054655 | ||
|
|
54c1cc3661 | ||
|
|
ee0f9e04de | ||
|
|
ebe5289d6e | ||
|
|
15ba15c602 | ||
|
|
fd0448efc4 | ||
|
|
43fa2623d4 | ||
|
|
c1b9babf33 | ||
|
|
4c8edf9d9a | ||
|
|
ff4271f51d | ||
|
|
2424ab01cf | ||
|
|
b38dfeeed7 | ||
|
|
7912cd190f | ||
|
|
11962ad930 | ||
|
|
a8e2c65072 | ||
|
|
1b8ca5f467 | ||
|
|
46fff6da5b | ||
|
|
47e75f64ed | ||
|
|
fb95c8c9d4 | ||
|
|
66cc97214c | ||
|
|
f52423ed70 | ||
|
|
29bea052eb | ||
|
|
b683f1fce4 | ||
|
|
2ec55473a5 | ||
|
|
2fe89ffcbc | ||
|
|
7e88a10884 | ||
|
|
f260051160 | ||
|
|
b8dacc2459 | ||
|
|
b311dd99dc | ||
|
|
1d7a9843d8 | ||
|
|
03e59ad00f | ||
|
|
c083af1c76 | ||
|
|
6abb0a2a75 | ||
|
|
e672e7f1a6 | ||
|
|
852a638ea1 | ||
|
|
ec1b642614 | ||
|
|
145dac72af | ||
|
|
7d2679b2a3 | ||
|
|
ffbcd2183b | ||
|
|
b9d646868c | ||
|
|
2ce530a644 | ||
|
|
1c8e9ba1cf | ||
|
|
9a2560dbc2 | ||
|
|
f900c4299d | ||
|
|
f78494f882 | ||
|
|
b55f10b59d | ||
|
|
277ee90421 | ||
|
|
fcdde83038 | ||
|
|
12fb29ecce | ||
|
|
ae7dd63d6b | ||
|
|
48f680f7bd | ||
|
|
e3d4e393b3 | ||
|
|
81f13c255a | ||
|
|
97ce322d0c | ||
|
|
a3e876d9a2 | ||
|
|
234356f8f2 | ||
|
|
d3222f7bdc | ||
|
|
a5658e72c7 | ||
|
|
d1e1fcfabe | ||
|
|
9d6bd0770c | ||
|
|
6f76ee389b | ||
|
|
87aa74f231 | ||
|
|
a0dc80c1a5 | ||
|
|
d8dbe25a64 | ||
|
|
e3bec085df | ||
|
|
4d4b92b33f | ||
|
|
cc58c769cc | ||
|
|
37f08f6fc4 | ||
|
|
73e02e7c06 | ||
|
|
7a1b6fccc2 | ||
|
|
2473e3f91a | ||
|
|
0a6bb2805c | ||
|
|
1eecc6f065 | ||
|
|
b8b4fe4958 | ||
|
|
6dd8b6798b | ||
|
|
69d0a3f4aa | ||
|
|
ce81934890 | ||
|
|
ba06f47e3e | ||
|
|
cfc37d4af6 | ||
|
|
43cd6edda2 | ||
|
|
0bd262d82f | ||
|
|
f09bafa104 | ||
|
|
20e34ee365 | ||
|
|
7a6bd8f661 | ||
|
|
54c3765e36 | ||
|
|
4d7f563b0d | ||
|
|
4e0ecaa7be | ||
|
|
4f41d238eb | ||
|
|
7c3d021427 | ||
|
|
bfde036484 | ||
|
|
84ef4ad030 | ||
|
|
3b85fccd60 | ||
|
|
830d0f6e6a | ||
|
|
1ceede27a3 | ||
|
|
fa33cdaca4 | ||
|
|
f39fbb55a1 | ||
|
|
f3ffa0ab88 | ||
|
|
48e1fcc38e | ||
|
|
5b889c4c0c | ||
|
|
616ca77c39 | ||
|
|
59bf064783 | ||
|
|
220393c445 | ||
|
|
b976c03fb0 | ||
|
|
dad0493666 | ||
|
|
776613c507 | ||
|
|
7570d9d319 | ||
|
|
2e648d1062 | ||
|
|
5ad02ae9cc | ||
|
|
99fc568419 | ||
|
|
5f835716e0 | ||
|
|
1f6fe787eb | ||
|
|
1b08d30611 | ||
|
|
05ad33a756 | ||
|
|
b103366a10 | ||
|
|
343d37d4b8 | ||
|
|
60dc050633 | ||
|
|
96c3583393 | ||
|
|
43656dbcca | ||
|
|
7c38bbe6ab | ||
|
|
c6c6448501 | ||
|
|
7ff9da2d7f | ||
|
|
39893cc66d | ||
|
|
5110618d7d | ||
|
|
a856831ee1 | ||
|
|
c5fc6a4212 | ||
|
|
7708646c68 | ||
|
|
c84dbac020 | ||
|
|
56c2297e02 | ||
|
|
6956805e62 | ||
|
|
7736e30043 | ||
|
|
ace441f072 | ||
|
|
a37e99ce39 | ||
|
|
6b1bdbaa78 | ||
|
|
b4077a2fc3 | ||
|
|
2f660c6fec | ||
|
|
cc0511a2aa | ||
|
|
2f367efa70 | ||
|
|
bff1b54b7e | ||
|
|
010e9556b8 |
11
.github/dependabot.yml
vendored
Normal file
11
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
# To get started with Dependabot version updates, you'll need to specify which
|
||||
# package ecosystems to update and where the package manifests are located.
|
||||
# Please see the documentation for all configuration options:
|
||||
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: "gradle" # See documentation for possible values
|
||||
directory: "/" # Location of package manifests
|
||||
schedule:
|
||||
interval: "daily"
|
||||
71
.github/workflows/codeql-analysis.yml
vendored
Normal file
71
.github/workflows/codeql-analysis.yml
vendored
Normal file
@@ -0,0 +1,71 @@
|
||||
# For most projects, this workflow file will not need changing; you simply need
|
||||
# to commit it to your repository.
|
||||
#
|
||||
# You may wish to alter this file to override the set of languages analyzed,
|
||||
# or to provide custom queries or build logic.
|
||||
#
|
||||
# ******** NOTE ********
|
||||
# We have attempted to detect the languages in your repository. Please check
|
||||
# the `language` matrix defined below to confirm you have the correct set of
|
||||
# supported CodeQL languages.
|
||||
#
|
||||
name: "CodeQL"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
# The branches below must be a subset of the branches above
|
||||
branches: [ master ]
|
||||
schedule:
|
||||
- cron: '33 1 * * 4'
|
||||
|
||||
jobs:
|
||||
analyze:
|
||||
name: Analyze
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
actions: read
|
||||
contents: read
|
||||
security-events: write
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
language: [ 'java' ]
|
||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
|
||||
# Learn more:
|
||||
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v2
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v1
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
# By default, queries listed here will override any specified in a config file.
|
||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v1
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 https://git.io/JvXDl
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||
# and modify them (or add more) to build your code if your project
|
||||
# uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v1
|
||||
5
.github/workflows/contributors-to-file.yml
vendored
5
.github/workflows/contributors-to-file.yml
vendored
@@ -1,11 +1,12 @@
|
||||
name: Write contributors to file
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
schedule:
|
||||
- cron: '3 4 * * 0'
|
||||
|
||||
jobs:
|
||||
contributors_to_file:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.ref == 'refs/heads/master'
|
||||
name: Write contributors to file
|
||||
steps:
|
||||
- name: Checkout repo
|
||||
|
||||
@@ -15,7 +15,7 @@ with open('CHANGELOG.md') as changelog:
|
||||
changelogs[version_code] = text
|
||||
|
||||
text = []
|
||||
match = re.match("## \S* - (\d*) \(\d{4}-\d{2}-\d{2}\)", line)
|
||||
match = re.match("## \S* - (\d*).*", line)
|
||||
if not match:
|
||||
raise ValueError(f"Invalid version line: {line}")
|
||||
version_code = match.group(1)
|
||||
|
||||
21
CHANGELOG.md
21
CHANGELOG.md
@@ -1,5 +1,26 @@
|
||||
# Changelog
|
||||
|
||||
## v2.7.1 - 86 (2021-10-07)
|
||||
|
||||
- Improve search with spaces
|
||||
|
||||
## v2.7.0 - 85 (2021-10-05)
|
||||
|
||||
Android 4.4 is no longer supported starting with this release. If you want to use Catima on Android 4.4, please use version 2.6.1.
|
||||
|
||||
- Improved Android 12 support
|
||||
- Improved about screen
|
||||
- Search now ignores accents
|
||||
|
||||
## v2.6.1 - 84 (2021-09-25)
|
||||
|
||||
- Minor bugfixes and improvements
|
||||
|
||||
## v2.6.0 - 83 (2021-09-19)
|
||||
|
||||
- Support for changing the sorting order
|
||||
- Prevent Out Of Memory on scanning large pictures for barcode
|
||||
|
||||
## v2.5.0 - 82 (2021-09-10)
|
||||
|
||||
- Improved support for screen readers
|
||||
|
||||
155
Gemfile.lock
155
Gemfile.lock
@@ -1,58 +1,75 @@
|
||||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
CFPropertyList (3.0.2)
|
||||
CFPropertyList (3.0.3)
|
||||
addressable (2.8.0)
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
artifactory (3.0.15)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.1.0)
|
||||
aws-partitions (1.388.0)
|
||||
aws-sdk-core (3.109.1)
|
||||
aws-eventstream (1.2.0)
|
||||
aws-partitions (1.501.0)
|
||||
aws-sdk-core (3.121.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
aws-partitions (~> 1, >= 1.239.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
jmespath (~> 1.0)
|
||||
aws-sdk-kms (1.39.0)
|
||||
aws-sdk-core (~> 3, >= 3.109.0)
|
||||
aws-sdk-kms (1.48.0)
|
||||
aws-sdk-core (~> 3, >= 3.120.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.83.1)
|
||||
aws-sdk-core (~> 3, >= 3.109.0)
|
||||
aws-sdk-s3 (1.102.0)
|
||||
aws-sdk-core (~> 3, >= 3.120.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sigv4 (1.2.2)
|
||||
aws-sigv4 (~> 1.4)
|
||||
aws-sigv4 (1.4.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
claide (1.0.3)
|
||||
colored (1.2)
|
||||
colored2 (3.1.2)
|
||||
commander-fastlane (4.4.6)
|
||||
highline (~> 1.7.2)
|
||||
commander (4.6.0)
|
||||
highline (~> 2.0.0)
|
||||
declarative (0.0.20)
|
||||
declarative-option (0.1.0)
|
||||
digest-crc (0.6.1)
|
||||
rake (~> 13.0)
|
||||
digest-crc (0.6.4)
|
||||
rake (>= 12.0.0, < 14.0.0)
|
||||
domain_name (0.5.20190701)
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
dotenv (2.7.6)
|
||||
emoji_regex (3.2.0)
|
||||
excon (0.78.0)
|
||||
faraday (1.1.0)
|
||||
emoji_regex (3.2.2)
|
||||
excon (0.85.0)
|
||||
faraday (1.7.2)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
faraday-excon (~> 1.1)
|
||||
faraday-httpclient (~> 1.0.1)
|
||||
faraday-net_http (~> 1.0)
|
||||
faraday-net_http_persistent (~> 1.1)
|
||||
faraday-patron (~> 1.0)
|
||||
faraday-rack (~> 1.0)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
ruby2_keywords
|
||||
ruby2_keywords (>= 0.0.4)
|
||||
faraday-cookie_jar (0.0.7)
|
||||
faraday (>= 0.8.0)
|
||||
http-cookie (~> 1.0.0)
|
||||
faraday_middleware (1.0.0)
|
||||
faraday-em_http (1.0.0)
|
||||
faraday-em_synchrony (1.0.0)
|
||||
faraday-excon (1.1.0)
|
||||
faraday-httpclient (1.0.1)
|
||||
faraday-net_http (1.0.1)
|
||||
faraday-net_http_persistent (1.2.0)
|
||||
faraday-patron (1.0.0)
|
||||
faraday-rack (1.0.0)
|
||||
faraday_middleware (1.1.0)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.2.0)
|
||||
fastlane (2.165.0)
|
||||
fastimage (2.2.5)
|
||||
fastlane (2.193.1)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.3, < 3.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
aws-sdk-s3 (~> 1.0)
|
||||
babosa (>= 1.0.3, < 2.0.0)
|
||||
bundler (>= 1.12.0, < 3.0.0)
|
||||
colored
|
||||
commander-fastlane (>= 4.4.6, < 5.0.0)
|
||||
commander (~> 4.6)
|
||||
dotenv (>= 2.1.1, < 3.0.0)
|
||||
emoji_regex (>= 0.1, < 4.0)
|
||||
excon (>= 0.71.0, < 1.0.0)
|
||||
@@ -61,18 +78,20 @@ GEM
|
||||
faraday_middleware (~> 1.0)
|
||||
fastimage (>= 2.1.0, < 3.0.0)
|
||||
gh_inspector (>= 1.1.2, < 2.0.0)
|
||||
google-api-client (>= 0.37.0, < 0.39.0)
|
||||
google-cloud-storage (>= 1.15.0, < 2.0.0)
|
||||
highline (>= 1.7.2, < 2.0.0)
|
||||
google-apis-androidpublisher_v3 (~> 0.3)
|
||||
google-apis-playcustomapp_v1 (~> 0.1)
|
||||
google-cloud-storage (~> 1.31)
|
||||
highline (~> 2.0)
|
||||
json (< 3.0.0)
|
||||
jwt (>= 2.1.0, < 3)
|
||||
mini_magick (>= 4.9.4, < 5.0.0)
|
||||
multipart-post (~> 2.0.0)
|
||||
naturally (~> 2.2)
|
||||
optparse (~> 0.1.1)
|
||||
plist (>= 3.1.0, < 4.0.0)
|
||||
rubyzip (>= 2.0.0, < 3.0.0)
|
||||
security (= 0.1.3)
|
||||
simctl (~> 1.6.3)
|
||||
slack-notifier (>= 2.0.0, < 3.0.0)
|
||||
terminal-notifier (>= 2.0.0, < 3.0.0)
|
||||
terminal-table (>= 1.4.5, < 2.0.0)
|
||||
tty-screen (>= 0.6.3, < 1.0.0)
|
||||
@@ -82,73 +101,85 @@ GEM
|
||||
xcpretty (~> 0.3.0)
|
||||
xcpretty-travis-formatter (>= 0.0.3)
|
||||
gh_inspector (1.1.3)
|
||||
google-api-client (0.38.0)
|
||||
google-apis-androidpublisher_v3 (0.11.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-core (0.4.1)
|
||||
addressable (~> 2.5, >= 2.5.1)
|
||||
googleauth (~> 0.9)
|
||||
httpclient (>= 2.8.1, < 3.0)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
httpclient (>= 2.8.1, < 3.a)
|
||||
mini_mime (~> 1.0)
|
||||
representable (~> 3.0)
|
||||
retriable (>= 2.0, < 4.0)
|
||||
signet (~> 0.12)
|
||||
google-cloud-core (1.5.0)
|
||||
retriable (>= 2.0, < 4.a)
|
||||
rexml
|
||||
webrick
|
||||
google-apis-iamcredentials_v1 (0.7.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-playcustomapp_v1 (0.5.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-apis-storage_v1 (0.6.0)
|
||||
google-apis-core (>= 0.4, < 2.a)
|
||||
google-cloud-core (1.6.0)
|
||||
google-cloud-env (~> 1.0)
|
||||
google-cloud-errors (~> 1.0)
|
||||
google-cloud-env (1.4.0)
|
||||
google-cloud-env (1.5.0)
|
||||
faraday (>= 0.17.3, < 2.0)
|
||||
google-cloud-errors (1.0.1)
|
||||
google-cloud-storage (1.29.1)
|
||||
google-cloud-errors (1.1.0)
|
||||
google-cloud-storage (1.34.1)
|
||||
addressable (~> 2.5)
|
||||
digest-crc (~> 0.4)
|
||||
google-api-client (~> 0.33)
|
||||
google-cloud-core (~> 1.2)
|
||||
googleauth (~> 0.9)
|
||||
google-apis-iamcredentials_v1 (~> 0.1)
|
||||
google-apis-storage_v1 (~> 0.1)
|
||||
google-cloud-core (~> 1.6)
|
||||
googleauth (>= 0.16.2, < 2.a)
|
||||
mini_mime (~> 1.0)
|
||||
googleauth (0.14.0)
|
||||
googleauth (0.17.1)
|
||||
faraday (>= 0.17.3, < 2.0)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
memoist (~> 0.16)
|
||||
multi_json (~> 1.11)
|
||||
os (>= 0.9, < 2.0)
|
||||
signet (~> 0.14)
|
||||
highline (1.7.10)
|
||||
http-cookie (1.0.3)
|
||||
signet (~> 0.15)
|
||||
highline (2.0.3)
|
||||
http-cookie (1.0.4)
|
||||
domain_name (~> 0.5)
|
||||
httpclient (2.8.3)
|
||||
jmespath (1.4.0)
|
||||
json (2.3.1)
|
||||
jwt (2.2.2)
|
||||
json (2.5.1)
|
||||
jwt (2.2.3)
|
||||
memoist (0.16.2)
|
||||
mini_magick (4.10.1)
|
||||
mini_mime (1.0.2)
|
||||
mini_magick (4.11.0)
|
||||
mini_mime (1.1.1)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.0.0)
|
||||
nanaimo (0.3.0)
|
||||
naturally (2.2.0)
|
||||
naturally (2.2.1)
|
||||
optparse (0.1.1)
|
||||
os (1.1.1)
|
||||
plist (3.5.0)
|
||||
plist (3.6.0)
|
||||
public_suffix (4.0.6)
|
||||
rake (13.0.1)
|
||||
representable (3.0.4)
|
||||
rake (13.0.6)
|
||||
representable (3.1.1)
|
||||
declarative (< 0.1.0)
|
||||
declarative-option (< 0.2.0)
|
||||
trailblazer-option (>= 0.1.1, < 0.2.0)
|
||||
uber (< 0.2.0)
|
||||
retriable (3.1.2)
|
||||
rexml (3.2.5)
|
||||
rouge (2.0.7)
|
||||
ruby2_keywords (0.0.2)
|
||||
rubyzip (2.3.0)
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.3.2)
|
||||
security (0.1.3)
|
||||
signet (0.14.0)
|
||||
addressable (~> 2.3)
|
||||
signet (0.16.0)
|
||||
addressable (~> 2.8)
|
||||
faraday (>= 0.17.3, < 2.0)
|
||||
jwt (>= 1.5, < 3.0)
|
||||
multi_json (~> 1.10)
|
||||
simctl (1.6.8)
|
||||
CFPropertyList
|
||||
naturally
|
||||
slack-notifier (2.3.2)
|
||||
terminal-notifier (2.0.0)
|
||||
terminal-table (1.8.0)
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
trailblazer-option (0.1.1)
|
||||
tty-cursor (0.7.1)
|
||||
tty-screen (0.8.1)
|
||||
tty-spinner (0.9.3)
|
||||
@@ -156,18 +187,20 @@ GEM
|
||||
uber (0.1.0)
|
||||
unf (0.1.4)
|
||||
unf_ext
|
||||
unf_ext (0.0.7.7)
|
||||
unf_ext (0.0.8)
|
||||
unicode-display_width (1.7.0)
|
||||
webrick (1.7.0)
|
||||
word_wrap (1.0.0)
|
||||
xcodeproj (1.19.0)
|
||||
xcodeproj (1.21.0)
|
||||
CFPropertyList (>= 2.3.3, < 4.0)
|
||||
atomos (~> 0.1.3)
|
||||
claide (>= 1.0.2, < 2.0)
|
||||
colored2 (~> 3.1)
|
||||
nanaimo (~> 0.3.0)
|
||||
rexml (~> 3.2.4)
|
||||
xcpretty (0.3.0)
|
||||
rouge (~> 2.0.7)
|
||||
xcpretty-travis-formatter (1.0.0)
|
||||
xcpretty-travis-formatter (1.0.1)
|
||||
xcpretty (~> 0.2, >= 0.0.7)
|
||||
|
||||
PLATFORMS
|
||||
|
||||
@@ -11,15 +11,15 @@ spotbugs {
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 30
|
||||
buildToolsVersion "30.0.3"
|
||||
compileSdkVersion 31
|
||||
buildToolsVersion "31.0.0"
|
||||
|
||||
defaultConfig {
|
||||
applicationId "me.hackerchick.catima"
|
||||
minSdkVersion 19
|
||||
targetSdkVersion 30
|
||||
versionCode 82
|
||||
versionName "2.5.0"
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 31
|
||||
versionCode 86
|
||||
versionName "2.7.1"
|
||||
|
||||
vectorDrawables.useSupportLibrary true
|
||||
multiDexEnabled true
|
||||
@@ -80,21 +80,25 @@ android {
|
||||
|
||||
dependencies {
|
||||
// AndroidX
|
||||
implementation "androidx.multidex:multidex:2.0.1"
|
||||
implementation 'androidx.appcompat:appcompat:1.3.1'
|
||||
implementation 'androidx.cardview:cardview:1.0.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
|
||||
implementation 'androidx.exifinterface:exifinterface:1.3.3'
|
||||
implementation 'androidx.preference:preference:1.1.1'
|
||||
implementation 'com.google.android.material:material:1.4.0'
|
||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
|
||||
|
||||
// Splash Screen
|
||||
implementation 'androidx.core:core-splashscreen:1.0.0-alpha02'
|
||||
|
||||
// Third-party
|
||||
implementation 'com.journeyapps:zxing-android-embedded:4.1.0@aar'
|
||||
implementation 'com.journeyapps:zxing-android-embedded:4.2.0@aar'
|
||||
implementation 'com.google.zxing:core:3.4.1'
|
||||
implementation 'org.apache.commons:commons-csv:1.8'
|
||||
implementation 'org.apache.commons:commons-csv:1.9.0'
|
||||
implementation 'com.jaredrummler:colorpicker:1.1.0'
|
||||
implementation 'com.github.invissvenska:NumberPickerPreference:1.0.3'
|
||||
implementation 'net.lingala.zip4j:zip4j:2.8.0'
|
||||
implementation 'net.lingala.zip4j:zip4j:2.9.0'
|
||||
|
||||
// SpotBugs
|
||||
implementation 'io.wcm.tooling.spotbugs:io.wcm.tooling.spotbugs.annotations:1.0.0'
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
android:name="android.hardware.camera.autofocus"
|
||||
android:required="false" />
|
||||
|
||||
<uses-sdk tools:overrideLibrary="com.google.zxing.client.android" />
|
||||
<uses-sdk tools:overrideLibrary="com.google.zxing.client.android"/>
|
||||
|
||||
<application
|
||||
android:name=".LoyaltyCardLockerApplication"
|
||||
@@ -29,13 +29,15 @@
|
||||
<activity
|
||||
android:name="protect.card_locker.MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/SplashTheme">
|
||||
android:theme="@style/Theme.App.Starting"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".AboutActivity"
|
||||
android:label="@string/about"
|
||||
@@ -56,19 +58,28 @@
|
||||
android:theme="@style/AppTheme.NoActionBar"
|
||||
android:windowSoftInputMode="stateHidden"
|
||||
android:exported="true">
|
||||
<intent-filter android:autoVerify="true" android:label="@string/app_name">
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<!-- Main card sharing URIs -->
|
||||
<data android:scheme="http" />
|
||||
<data android:scheme="https" />
|
||||
|
||||
<data android:host="@string/intent_import_card_from_url_host_catima_app"
|
||||
android:pathPrefix="@string/intent_import_card_from_url_path_prefix_catima_app" />
|
||||
</intent-filter>
|
||||
<intent-filter android:label="@string/app_name">
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<!-- Listen to known card sharing URIs -->
|
||||
<data android:scheme="https"
|
||||
android:host="@string/intent_import_card_from_url_host_catima_app"
|
||||
android:pathPrefix="@string/intent_import_card_from_url_path_prefix_catima_app" />
|
||||
<data android:scheme="https"
|
||||
android:host="@string/intent_import_card_from_url_host_thelastproject"
|
||||
<!-- Old card sharing URIs -->
|
||||
<data android:scheme="http" />
|
||||
<data android:scheme="https" />
|
||||
|
||||
<data android:host="@string/intent_import_card_from_url_host_thelastproject"
|
||||
android:pathPrefix="@string/intent_import_card_from_url_path_prefix_thelastproject" />
|
||||
<data android:scheme="https"
|
||||
android:host="@string/intent_import_card_from_url_host_brarcher"
|
||||
<data android:host="@string/intent_import_card_from_url_host_brarcher"
|
||||
android:pathPrefix="@string/intent_import_card_from_url_path_prefix_brarcher" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
@@ -92,7 +103,8 @@
|
||||
<activity
|
||||
android:name=".CardShortcutConfigure"
|
||||
android:label="@string/cardShortcut"
|
||||
android:theme="@style/AppTheme.NoActionBar">
|
||||
android:theme="@style/AppTheme.NoActionBar"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.CREATE_SHORTCUT"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
package protect.card_locker;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.text.method.LinkMovementMethod;
|
||||
import android.util.Log;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
@@ -17,12 +19,15 @@ import java.util.Calendar;
|
||||
import java.util.List;
|
||||
|
||||
import androidx.appcompat.app.ActionBar;
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.constraintlayout.widget.ConstraintLayout;
|
||||
import androidx.core.text.HtmlCompat;
|
||||
|
||||
public class AboutActivity extends CatimaAppCompatActivity
|
||||
public class AboutActivity extends CatimaAppCompatActivity implements View.OnClickListener
|
||||
{
|
||||
private static final String TAG = "Catima";
|
||||
ConstraintLayout version_history, translate, license, repo, privacy, error, credits, rate;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState)
|
||||
@@ -93,39 +98,82 @@ public class AboutActivity extends CatimaAppCompatActivity
|
||||
Log.w(TAG, "Package name not found", e);
|
||||
}
|
||||
|
||||
TextView copyright = findViewById(R.id.credits_sub);
|
||||
copyright.setText(String.format(getString(R.string.app_copyright_fmt), year));
|
||||
TextView vHistory = findViewById(R.id.version_history_sub);
|
||||
vHistory.setText(String.format(getString(R.string.debug_version_fmt), version));
|
||||
|
||||
setTitle(String.format(getString(R.string.about_title_fmt), appName));
|
||||
|
||||
TextView aboutTextView = findViewById(R.id.aboutText);
|
||||
aboutTextView.setText(HtmlCompat.fromHtml(String.format(getString(R.string.debug_version_fmt), version) +
|
||||
"<br/><br/>" +
|
||||
String.format(getString(R.string.app_revision_fmt),
|
||||
"<a href=\"" + getString(R.string.app_revision_url) + "\">" +
|
||||
"GitHub" +
|
||||
"</a>") +
|
||||
"<br/><br/>" +
|
||||
String.format(getString(R.string.app_copyright_fmt), year) +
|
||||
"<br/><br/>" +
|
||||
getString(R.string.app_copyright_old) +
|
||||
"<br/><br/>" +
|
||||
getString(R.string.app_license) +
|
||||
"<br/><br/>" +
|
||||
String.format(getString(R.string.app_contributors), contributors.toString()) +
|
||||
"<br/><br/>" +
|
||||
String.format(getString(R.string.app_libraries), libs.toString()) +
|
||||
"<br/><br/>" +
|
||||
String.format(getString(R.string.app_resources), resources.toString()), HtmlCompat.FROM_HTML_MODE_COMPACT));
|
||||
aboutTextView.setMovementMethod(LinkMovementMethod.getInstance());
|
||||
version_history = findViewById(R.id.version_history);
|
||||
translate = findViewById(R.id.translate);
|
||||
license = findViewById(R.id.license);
|
||||
repo = findViewById(R.id.repo);
|
||||
privacy = findViewById(R.id.privacy);
|
||||
error = findViewById(R.id.report_error);
|
||||
credits = findViewById(R.id.credits);
|
||||
rate = findViewById(R.id.rate);
|
||||
|
||||
version_history.setOnClickListener(this);
|
||||
translate.setOnClickListener(this);
|
||||
license.setOnClickListener(this);
|
||||
repo.setOnClickListener(this);
|
||||
privacy.setOnClickListener(this);
|
||||
error.setOnClickListener(this);
|
||||
rate.setOnClickListener(this);
|
||||
|
||||
StringBuilder contributorInfo = new StringBuilder();
|
||||
contributorInfo.append(HtmlCompat.fromHtml(String.format(getString(R.string.app_contributors), contributors.toString()), HtmlCompat.FROM_HTML_MODE_COMPACT));
|
||||
contributorInfo.append("\n\n");
|
||||
contributorInfo.append(getString(R.string.app_copyright_old));
|
||||
contributorInfo.append("\n\n");
|
||||
contributorInfo.append(HtmlCompat.fromHtml(String.format(getString(R.string.app_libraries), libs.toString()), HtmlCompat.FROM_HTML_MODE_COMPACT));
|
||||
contributorInfo.append("\n\n");
|
||||
contributorInfo.append(HtmlCompat.fromHtml(String.format(getString(R.string.app_resources), resources.toString()), HtmlCompat.FROM_HTML_MODE_COMPACT));
|
||||
|
||||
credits.setOnClickListener(view -> new AlertDialog.Builder(this)
|
||||
.setTitle(R.string.credits)
|
||||
.setMessage(contributorInfo.toString())
|
||||
.setPositiveButton(R.string.ok, (dialogInterface, i) -> {})
|
||||
.show());
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item)
|
||||
{
|
||||
int id = item.getItemId();
|
||||
|
||||
if (id == android.R.id.home) {
|
||||
finish();
|
||||
}
|
||||
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
int id = view.getId();
|
||||
|
||||
String url;
|
||||
if (id == R.id.version_history) {
|
||||
url = "https://catima.app/changelog/";
|
||||
} else if (id == R.id.translate) {
|
||||
url = "https://hosted.weblate.org/engage/catima/";
|
||||
} else if (id == R.id.license) {
|
||||
url = "https://github.com/TheLastProject/Catima/blob/master/LICENSE";
|
||||
} else if (id == R.id.repo) {
|
||||
url = "https://github.com/TheLastProject/Catima/";
|
||||
} else if (id == R.id.privacy) {
|
||||
url = "https://catima.app/privacy-policy/";
|
||||
} else if (id == R.id.report_error) {
|
||||
url = "https://github.com/TheLastProject/Catima/issues";
|
||||
} else if (id == R.id.rate) {
|
||||
url = "https://play.google.com/store/apps/details?id=me.hackerchick.catima";
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
intent.setData(Uri.parse(url));
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -76,10 +76,6 @@ public class CardShortcutConfigure extends AppCompatActivity implements LoyaltyC
|
||||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onIconClicked(int inputPosition) {
|
||||
onClickAction(inputPosition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRowClicked(int inputPosition) {
|
||||
|
||||
@@ -72,6 +72,12 @@ public class CatimaBarcode {
|
||||
}
|
||||
|
||||
public String prettyName() {
|
||||
return barcodePrettyNames.get(barcodeFormats.indexOf(mBarcodeFormat));
|
||||
int index = barcodeFormats.indexOf(mBarcodeFormat);
|
||||
|
||||
if (index == -1 || index >= barcodePrettyNames.size()) {
|
||||
return mBarcodeFormat.name();
|
||||
}
|
||||
|
||||
return barcodePrettyNames.get(index);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import android.database.DatabaseUtils;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.database.sqlite.SQLiteException;
|
||||
import android.database.sqlite.SQLiteOpenHelper;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.math.BigDecimal;
|
||||
@@ -20,7 +21,7 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
{
|
||||
public static final String DATABASE_NAME = "Catima.db";
|
||||
public static final int ORIGINAL_DATABASE_VERSION = 1;
|
||||
public static final int DATABASE_VERSION = 10;
|
||||
public static final int DATABASE_VERSION = 12;
|
||||
|
||||
public static class LoyaltyCardDbGroups
|
||||
{
|
||||
@@ -44,6 +45,7 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
public static final String BARCODE_ID = "barcodeid";
|
||||
public static final String BARCODE_TYPE = "barcodetype";
|
||||
public static final String STAR_STATUS = "starstatus";
|
||||
public static final String LAST_USED = "lastused";
|
||||
}
|
||||
|
||||
public static class LoyaltyCardDbIdsGroups
|
||||
@@ -53,6 +55,25 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
public static final String groupID = "groupId";
|
||||
}
|
||||
|
||||
public static class LoyaltyCardDbFTS
|
||||
{
|
||||
public static final String TABLE = "fts";
|
||||
public static final String ID = "rowid"; // This should NEVER be changed
|
||||
public static final String STORE = "store";
|
||||
public static final String NOTE = "note";
|
||||
}
|
||||
|
||||
public enum LoyaltyCardOrder {
|
||||
Alpha,
|
||||
LastUsed,
|
||||
Expiry
|
||||
}
|
||||
|
||||
public enum LoyaltyCardOrderDirection {
|
||||
Ascending,
|
||||
Descending
|
||||
}
|
||||
|
||||
private Context mContext;
|
||||
|
||||
public DBHelper(Context context)
|
||||
@@ -66,13 +87,13 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
public void onCreate(SQLiteDatabase db)
|
||||
{
|
||||
// create table for card groups
|
||||
db.execSQL("create table " + LoyaltyCardDbGroups.TABLE + "(" +
|
||||
db.execSQL("CREATE TABLE " + LoyaltyCardDbGroups.TABLE + "(" +
|
||||
LoyaltyCardDbGroups.ID + " TEXT primary key not null," +
|
||||
LoyaltyCardDbGroups.ORDER + " INTEGER DEFAULT '0')");
|
||||
|
||||
// create table for cards
|
||||
// Balance is TEXT and not REAL to be able to store a BigDecimal without precision loss
|
||||
db.execSQL("create table " + LoyaltyCardDbIds.TABLE + "(" +
|
||||
db.execSQL("CREATE TABLE " + LoyaltyCardDbIds.TABLE + "(" +
|
||||
LoyaltyCardDbIds.ID + " INTEGER primary key autoincrement," +
|
||||
LoyaltyCardDbIds.STORE + " TEXT not null," +
|
||||
LoyaltyCardDbIds.NOTE + " TEXT not null," +
|
||||
@@ -83,26 +104,30 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
LoyaltyCardDbIds.CARD_ID + " TEXT not null," +
|
||||
LoyaltyCardDbIds.BARCODE_ID + " TEXT," +
|
||||
LoyaltyCardDbIds.BARCODE_TYPE + " TEXT," +
|
||||
LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0')");
|
||||
LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0'," +
|
||||
LoyaltyCardDbIds.LAST_USED + " INTEGER DEFAULT '0')");
|
||||
|
||||
// create associative table for cards in groups
|
||||
db.execSQL("create table " + LoyaltyCardDbIdsGroups.TABLE + "(" +
|
||||
db.execSQL("CREATE TABLE " + LoyaltyCardDbIdsGroups.TABLE + "(" +
|
||||
LoyaltyCardDbIdsGroups.cardID + " INTEGER," +
|
||||
LoyaltyCardDbIdsGroups.groupID + " TEXT," +
|
||||
"primary key (" + LoyaltyCardDbIdsGroups.cardID + "," + LoyaltyCardDbIdsGroups.groupID +"))");
|
||||
|
||||
// create FTS search table
|
||||
db.execSQL("CREATE VIRTUAL TABLE " + LoyaltyCardDbFTS.TABLE + " USING fts4(" +
|
||||
LoyaltyCardDbFTS.STORE + ", " + LoyaltyCardDbFTS.NOTE + ", " +
|
||||
"tokenize=unicode61);");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
|
||||
{
|
||||
// Upgrade from version 1 to version 2
|
||||
if(oldVersion < 2 && newVersion >= 2)
|
||||
{
|
||||
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
|
||||
+ " ADD COLUMN " + LoyaltyCardDbIds.NOTE + " TEXT not null default ''");
|
||||
}
|
||||
|
||||
// Upgrade from version 2 to version 3
|
||||
if(oldVersion < 3 && newVersion >= 3)
|
||||
{
|
||||
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
|
||||
@@ -111,26 +136,23 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
+ " ADD COLUMN " + LoyaltyCardDbIds.HEADER_TEXT_COLOR + " INTEGER");
|
||||
}
|
||||
|
||||
// Upgrade from version 3 to version 4
|
||||
if(oldVersion < 4 && newVersion >= 4)
|
||||
{
|
||||
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
|
||||
+ " ADD COLUMN " + LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0'");
|
||||
}
|
||||
|
||||
// Upgrade from version 4 to version 5
|
||||
if(oldVersion < 5 && newVersion >= 5)
|
||||
{
|
||||
db.execSQL("create table " + LoyaltyCardDbGroups.TABLE + "(" +
|
||||
db.execSQL("CREATE TABLE " + LoyaltyCardDbGroups.TABLE + "(" +
|
||||
LoyaltyCardDbGroups.ID + " TEXT primary key not null)");
|
||||
|
||||
db.execSQL("create table " + LoyaltyCardDbIdsGroups.TABLE + "(" +
|
||||
db.execSQL("CREATE TABLE " + LoyaltyCardDbIdsGroups.TABLE + "(" +
|
||||
LoyaltyCardDbIdsGroups.cardID + " INTEGER," +
|
||||
LoyaltyCardDbIdsGroups.groupID + " TEXT," +
|
||||
"primary key (" + LoyaltyCardDbIdsGroups.cardID + "," + LoyaltyCardDbIdsGroups.groupID +"))");
|
||||
}
|
||||
|
||||
// Upgrade from version 5 to 6
|
||||
if(oldVersion < 6 && newVersion >= 6)
|
||||
{
|
||||
db.execSQL("ALTER TABLE " + LoyaltyCardDbGroups.TABLE
|
||||
@@ -206,7 +228,7 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
|
||||
db.execSQL("DROP TABLE " + LoyaltyCardDbIds.TABLE);
|
||||
|
||||
db.execSQL("create table " + LoyaltyCardDbIds.TABLE + "(" +
|
||||
db.execSQL("CREATE TABLE " + LoyaltyCardDbIds.TABLE + "(" +
|
||||
LoyaltyCardDbIds.ID + " INTEGER primary key autoincrement," +
|
||||
LoyaltyCardDbIds.STORE + " TEXT not null," +
|
||||
LoyaltyCardDbIds.NOTE + " TEXT not null," +
|
||||
@@ -250,15 +272,81 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
db.setTransactionSuccessful();
|
||||
db.endTransaction();
|
||||
}
|
||||
|
||||
if(oldVersion < 11 && newVersion >= 11)
|
||||
{
|
||||
db.execSQL("ALTER TABLE " + LoyaltyCardDbIds.TABLE
|
||||
+ " ADD COLUMN " + LoyaltyCardDbIds.LAST_USED + " INTEGER DEFAULT '0'");
|
||||
}
|
||||
|
||||
if(oldVersion < 12 && newVersion >= 12)
|
||||
{
|
||||
db.execSQL("CREATE VIRTUAL TABLE " + LoyaltyCardDbFTS.TABLE + " USING fts4(" +
|
||||
LoyaltyCardDbFTS.STORE + ", " + LoyaltyCardDbFTS.NOTE + ", " +
|
||||
"tokenize=unicode61);");
|
||||
|
||||
Cursor cursor = db.rawQuery("SELECT * FROM " + LoyaltyCardDbIds.TABLE + ";", null, null);
|
||||
|
||||
cursor.moveToFirst();
|
||||
|
||||
while (cursor.moveToNext()) {
|
||||
LoyaltyCard loyaltyCard = LoyaltyCard.toLoyaltyCard(cursor);
|
||||
insertFTS(db, loyaltyCard.id, loyaltyCard.store, loyaltyCard.note);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private ContentValues generateFTSContentValues(final int id, final String store, final String note) {
|
||||
// FTS on Android is severely limited and can only search for word starting with a certain string
|
||||
// So for each word, we grab every single substring
|
||||
// This makes it possible to find Décathlon by searching both de and cat, for example
|
||||
|
||||
ContentValues ftsContentValues = new ContentValues();
|
||||
|
||||
StringBuilder storeString = new StringBuilder();
|
||||
for (String word : store.split(" ")) {
|
||||
for (int i = 0; i < word.length(); i++) {
|
||||
storeString.append(word);
|
||||
storeString.append(" ");
|
||||
word = word.substring(1);
|
||||
}
|
||||
}
|
||||
|
||||
StringBuilder noteString = new StringBuilder();
|
||||
for (String word : note.split(" ")) {
|
||||
for (int i = 0; i < word.length(); i++) {
|
||||
noteString.append(word);
|
||||
noteString.append(" ");
|
||||
word = word.substring(1);
|
||||
}
|
||||
}
|
||||
|
||||
ftsContentValues.put(LoyaltyCardDbFTS.ID, id);
|
||||
ftsContentValues.put(LoyaltyCardDbFTS.STORE, storeString.toString());
|
||||
ftsContentValues.put(LoyaltyCardDbFTS.NOTE, noteString.toString());
|
||||
|
||||
return ftsContentValues;
|
||||
}
|
||||
|
||||
private void insertFTS(final SQLiteDatabase db, final int id, final String store, final String note) {
|
||||
db.insert(LoyaltyCardDbFTS.TABLE, null, generateFTSContentValues(id, store, note));
|
||||
}
|
||||
|
||||
private void updateFTS(final SQLiteDatabase db, final int id, final String store, final String note) {
|
||||
db.update(LoyaltyCardDbFTS.TABLE, generateFTSContentValues(id, store, note),
|
||||
whereAttrs(LoyaltyCardDbFTS.ID), withArgs(id));
|
||||
}
|
||||
|
||||
public long insertLoyaltyCard(final String store, final String note, final Date expiry,
|
||||
final BigDecimal balance, final Currency balanceType,
|
||||
final String cardId, final String barcodeId,
|
||||
final CatimaBarcode barcodeType, final Integer headerColor,
|
||||
final int starStatus)
|
||||
final int starStatus, final Long lastUsed)
|
||||
{
|
||||
SQLiteDatabase db = getWritableDatabase();
|
||||
db.beginTransaction();
|
||||
|
||||
// Card
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(LoyaltyCardDbIds.STORE, store);
|
||||
contentValues.put(LoyaltyCardDbIds.NOTE, note);
|
||||
@@ -270,15 +358,28 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null);
|
||||
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
|
||||
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
|
||||
return db.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
|
||||
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
|
||||
long id = db.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
|
||||
|
||||
// FTS
|
||||
insertFTS(db, (int) id, store, note);
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
db.endTransaction();
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
public long insertLoyaltyCard(final SQLiteDatabase db, final String store,
|
||||
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 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)
|
||||
{
|
||||
db.beginTransaction();
|
||||
|
||||
// Card
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(LoyaltyCardDbIds.STORE, store);
|
||||
contentValues.put(LoyaltyCardDbIds.NOTE, note);
|
||||
@@ -289,16 +390,29 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId);
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null);
|
||||
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
|
||||
contentValues.put(LoyaltyCardDbIds.STAR_STATUS,starStatus);
|
||||
return db.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
|
||||
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
|
||||
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
|
||||
long id = db.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
|
||||
|
||||
// FTS
|
||||
insertFTS(db, (int) id, store, note);
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
db.endTransaction();
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
public long insertLoyaltyCard(final SQLiteDatabase db, final int id, final String store,
|
||||
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 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)
|
||||
{
|
||||
db.beginTransaction();
|
||||
|
||||
// Card
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(LoyaltyCardDbIds.ID, id);
|
||||
contentValues.put(LoyaltyCardDbIds.STORE, store);
|
||||
@@ -310,8 +424,17 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId);
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null);
|
||||
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
|
||||
contentValues.put(LoyaltyCardDbIds.STAR_STATUS,starStatus);
|
||||
return db.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
|
||||
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
|
||||
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
|
||||
db.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
|
||||
|
||||
// FTS
|
||||
insertFTS(db, id, store, note);
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
db.endTransaction();
|
||||
|
||||
return id;
|
||||
}
|
||||
|
||||
public boolean updateLoyaltyCard(final int id, final String store, final String note,
|
||||
@@ -321,6 +444,9 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
final Integer headerColor)
|
||||
{
|
||||
SQLiteDatabase db = getWritableDatabase();
|
||||
db.beginTransaction();
|
||||
|
||||
// Card
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(LoyaltyCardDbIds.STORE, store);
|
||||
contentValues.put(LoyaltyCardDbIds.NOTE, note);
|
||||
@@ -333,6 +459,13 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
|
||||
int rowsUpdated = db.update(LoyaltyCardDbIds.TABLE, contentValues,
|
||||
whereAttrs(LoyaltyCardDbIds.ID), withArgs(id));
|
||||
|
||||
// FTS
|
||||
updateFTS(db, id, store, note);
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
db.endTransaction();
|
||||
|
||||
return (rowsUpdated == 1);
|
||||
}
|
||||
|
||||
@@ -347,6 +480,16 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
return (rowsUpdated == 1);
|
||||
}
|
||||
|
||||
public boolean updateLoyaltyCardLastUsed(final int id) {
|
||||
SQLiteDatabase db = getWritableDatabase();
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(LoyaltyCardDbIds.LAST_USED, System.currentTimeMillis() / 1000);
|
||||
int rowsUpdated = db.update(LoyaltyCardDbIds.TABLE, contentValues,
|
||||
whereAttrs(LoyaltyCardDbIds.ID),
|
||||
withArgs(id));
|
||||
return (rowsUpdated == 1);
|
||||
}
|
||||
|
||||
public LoyaltyCard getLoyaltyCard(final int id)
|
||||
{
|
||||
SQLiteDatabase db = getReadableDatabase();
|
||||
@@ -438,6 +581,11 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
whereAttrs(LoyaltyCardDbIdsGroups.cardID),
|
||||
withArgs(id));
|
||||
|
||||
// Delete FTS table entries
|
||||
db.delete(LoyaltyCardDbFTS.TABLE,
|
||||
whereAttrs(LoyaltyCardDbFTS.ID),
|
||||
withArgs(id));
|
||||
|
||||
// Also wipe card images associated with this card
|
||||
try {
|
||||
Utils.saveCardImage(mContext, null, id, true);
|
||||
@@ -475,8 +623,18 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
*/
|
||||
public Cursor getLoyaltyCardCursor(final String filter, Group group)
|
||||
{
|
||||
String actualFilter = String.format("%%%s%%", filter);
|
||||
String[] selectionArgs = { actualFilter, actualFilter };
|
||||
return getLoyaltyCardCursor(filter, group, LoyaltyCardOrder.Alpha, LoyaltyCardOrderDirection.Ascending);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a cursor to all loyalty cards with the filter text in either the store or note in a certain group sorted as requested.
|
||||
*
|
||||
* @param filter
|
||||
* @param group
|
||||
* @param order
|
||||
* @return Cursor
|
||||
*/
|
||||
public Cursor getLoyaltyCardCursor(String filter, Group group, LoyaltyCardOrder order, LoyaltyCardOrderDirection direction) {
|
||||
StringBuilder groupFilter = new StringBuilder();
|
||||
String limitString = "";
|
||||
|
||||
@@ -490,7 +648,7 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
groupFilter.append("AND (");
|
||||
|
||||
for (int i = 0; i < allowedIds.size(); i++) {
|
||||
groupFilter.append(LoyaltyCardDbIds.ID + " = ").append(allowedIds.get(i));
|
||||
groupFilter.append(LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ID + " = ").append(allowedIds.get(i));
|
||||
if (i != allowedIds.size() - 1) {
|
||||
groupFilter.append(" OR ");
|
||||
}
|
||||
@@ -501,36 +659,31 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
}
|
||||
}
|
||||
|
||||
return db.rawQuery("select * from " + LoyaltyCardDbIds.TABLE +
|
||||
" WHERE (" + LoyaltyCardDbIds.STORE + " LIKE ? " +
|
||||
" OR " + LoyaltyCardDbIds.NOTE + " LIKE ? )" +
|
||||
String orderField = getFieldForOrder(order);
|
||||
|
||||
return db.rawQuery("SELECT " + LoyaltyCardDbIds.TABLE + ".* FROM " + LoyaltyCardDbIds.TABLE +
|
||||
" JOIN " + LoyaltyCardDbFTS.TABLE +
|
||||
" ON " + LoyaltyCardDbFTS.TABLE + "." + LoyaltyCardDbFTS.ID + " = " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ID +
|
||||
(filter.trim().isEmpty() ? " " : " AND " + LoyaltyCardDbFTS.TABLE + " MATCH ? ") +
|
||||
groupFilter.toString() +
|
||||
" ORDER BY " + LoyaltyCardDbIds.STAR_STATUS + " DESC," + LoyaltyCardDbIds.STORE + " COLLATE NOCASE ASC " +
|
||||
limitString, selectionArgs, null);
|
||||
" ORDER BY " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STAR_STATUS + " DESC, " +
|
||||
" (CASE WHEN " + LoyaltyCardDbIds.TABLE + "." + orderField + " IS NULL THEN 1 ELSE 0 END), " +
|
||||
LoyaltyCardDbIds.TABLE + "." + orderField + " COLLATE NOCASE " + getDbDirection(order, direction) + ", " +
|
||||
LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STORE + " COLLATE NOCASE ASC " +
|
||||
limitString, filter.trim().isEmpty() ? null : new String[] { TextUtils.join("* ", filter.split(" ")) + '*' }, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the amount of loyalty cards.
|
||||
*
|
||||
* @return Integer
|
||||
*/
|
||||
public int getLoyaltyCardCount()
|
||||
{
|
||||
SQLiteDatabase db = getReadableDatabase();
|
||||
return (int) DatabaseUtils.queryNumEntries(db, LoyaltyCardDbIds.TABLE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the amount of loyalty cards with the filter text in either the store or note.
|
||||
*
|
||||
* @param filter
|
||||
* @return Integer
|
||||
*/
|
||||
public int getLoyaltyCardCount(String filter)
|
||||
{
|
||||
String actualFilter = String.format("%%%s%%", filter);
|
||||
|
||||
SQLiteDatabase db = getReadableDatabase();
|
||||
return (int) DatabaseUtils.queryNumEntries(db, LoyaltyCardDbIds.TABLE,
|
||||
LoyaltyCardDbIds.STORE + " LIKE ? " +
|
||||
" OR " + LoyaltyCardDbIds.NOTE + " LIKE ? ", withArgs(actualFilter, actualFilter));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a cursor to all groups.
|
||||
*
|
||||
@@ -737,4 +890,29 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
.map(String::valueOf)
|
||||
.toArray(String[]::new);
|
||||
}
|
||||
|
||||
private String getFieldForOrder(LoyaltyCardOrder order) {
|
||||
if (order == LoyaltyCardOrder.Alpha) {
|
||||
return LoyaltyCardDbIds.STORE;
|
||||
}
|
||||
|
||||
if (order == LoyaltyCardOrder.LastUsed) {
|
||||
return LoyaltyCardDbIds.LAST_USED;
|
||||
}
|
||||
|
||||
if (order == LoyaltyCardOrder.Expiry) {
|
||||
return LoyaltyCardDbIds.EXPIRY;
|
||||
}
|
||||
|
||||
throw new IllegalArgumentException("Unknown order " + order);
|
||||
}
|
||||
|
||||
private String getDbDirection(LoyaltyCardOrder order, LoyaltyCardOrderDirection direction) {
|
||||
if (order == LoyaltyCardOrder.LastUsed) {
|
||||
// We want the default sorting to put the most recently used first
|
||||
return direction == LoyaltyCardOrderDirection.Descending ? "ASC" : "DESC";
|
||||
}
|
||||
|
||||
return direction == LoyaltyCardOrderDirection.Ascending ? "ASC" : "DESC";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
@@ -405,6 +406,8 @@ public class ImportExportActivity extends CatimaAppCompatActivity
|
||||
|
||||
Log.e(TAG, "Starting file export with: " + uri.toString());
|
||||
startExport(writer, uri);
|
||||
|
||||
writer.close();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -421,9 +424,11 @@ public class ImportExportActivity extends CatimaAppCompatActivity
|
||||
Log.e(TAG, "Starting file import with: " + uri.toString());
|
||||
|
||||
startImport(reader, uri, importDataFormat, password);
|
||||
|
||||
reader.close();
|
||||
}
|
||||
}
|
||||
catch(FileNotFoundException e)
|
||||
catch(IOException e)
|
||||
{
|
||||
Log.e(TAG, "Failed to import/export file: " + uri.toString(), e);
|
||||
if (requestCode == CHOOSE_EXPORT_LOCATION)
|
||||
|
||||
@@ -122,7 +122,7 @@ public class ImportURIHelper {
|
||||
headerColor = Integer.parseInt(unparsedHeaderColor);
|
||||
}
|
||||
|
||||
return new LoyaltyCard(-1, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, 0);
|
||||
return new LoyaltyCard(-1, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, 0, Utils.getUnixTime());
|
||||
} catch (NullPointerException | NumberFormatException | UnsupportedEncodingException ex) {
|
||||
throw new InvalidObjectException("Not a valid import URI");
|
||||
}
|
||||
|
||||
@@ -4,8 +4,6 @@ import android.database.Cursor;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Currency;
|
||||
import java.util.Date;
|
||||
@@ -31,11 +29,12 @@ public class LoyaltyCard implements Parcelable {
|
||||
public final Integer headerColor;
|
||||
|
||||
public final int starStatus;
|
||||
public final long lastUsed;
|
||||
|
||||
public LoyaltyCard(final int id, final String store, final String note, final Date expiry,
|
||||
final BigDecimal balance, final Currency balanceType, final String cardId,
|
||||
@Nullable final String barcodeId, @Nullable final CatimaBarcode barcodeType, @Nullable final Integer headerColor,
|
||||
final int starStatus)
|
||||
@Nullable final String barcodeId, @Nullable final CatimaBarcode barcodeType,
|
||||
@Nullable final Integer headerColor, final int starStatus, final long lastUsed)
|
||||
{
|
||||
this.id = id;
|
||||
this.store = store;
|
||||
@@ -48,6 +47,7 @@ public class LoyaltyCard implements Parcelable {
|
||||
this.barcodeType = barcodeType;
|
||||
this.headerColor = headerColor;
|
||||
this.starStatus = starStatus;
|
||||
this.lastUsed = lastUsed;
|
||||
}
|
||||
|
||||
protected LoyaltyCard(Parcel in) {
|
||||
@@ -65,6 +65,7 @@ public class LoyaltyCard implements Parcelable {
|
||||
int tmpHeaderColor = in.readInt();
|
||||
headerColor = tmpHeaderColor != -1 ? tmpHeaderColor : null;
|
||||
starStatus = in.readInt();
|
||||
lastUsed = in.readLong();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -80,6 +81,7 @@ public class LoyaltyCard implements Parcelable {
|
||||
parcel.writeString(barcodeType != null ? barcodeType.name() : "");
|
||||
parcel.writeInt(headerColor != null ? headerColor : -1);
|
||||
parcel.writeInt(starStatus);
|
||||
parcel.writeLong(lastUsed);
|
||||
}
|
||||
|
||||
public static LoyaltyCard toLoyaltyCard(Cursor cursor)
|
||||
@@ -92,6 +94,7 @@ public class LoyaltyCard implements Parcelable {
|
||||
String cardId = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID));
|
||||
String barcodeId = cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ID));
|
||||
int starred = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STAR_STATUS));
|
||||
long lastUsed = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.LAST_USED));
|
||||
|
||||
int barcodeTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE);
|
||||
int balanceTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BALANCE_TYPE);
|
||||
@@ -122,7 +125,7 @@ public class LoyaltyCard implements Parcelable {
|
||||
headerColor = cursor.getInt(headerColorColumn);
|
||||
}
|
||||
|
||||
return new LoyaltyCard(id, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starred);
|
||||
return new LoyaltyCard(id, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starred, lastUsed);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -128,7 +128,6 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
|
||||
private void applyClickEvents(LoyaltyCardListItemViewHolder inputHolder, final int inputPosition)
|
||||
{
|
||||
inputHolder.mThumbnailContainer.setOnClickListener(inputView -> mListener.onIconClicked(inputPosition));
|
||||
inputHolder.mRow.setOnClickListener(inputView -> mListener.onRowClicked(inputPosition));
|
||||
inputHolder.mInformationContainer.setOnClickListener(inputView -> mListener.onRowClicked(inputPosition));
|
||||
|
||||
@@ -238,7 +237,6 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
|
||||
public interface CardAdapterListener
|
||||
{
|
||||
void onIconClicked(int inputPosition);
|
||||
void onRowClicked(int inputPosition);
|
||||
void onRowLongClicked(int inputPosition);
|
||||
}
|
||||
@@ -249,7 +247,6 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
public TextView mStoreField, mNoteField, mBalanceField, mExpiryField;
|
||||
public LinearLayout mInformationContainer;
|
||||
public ImageView mCardIcon, mStarIcon;
|
||||
public CardView mThumbnailContainer;
|
||||
public MaterialCardView mRow;
|
||||
public View mDivider;
|
||||
public RelativeLayout mThumbnailFrontContainer, mThumbnailBackContainer;
|
||||
@@ -257,7 +254,6 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter<LoyaltyCardCurso
|
||||
public LoyaltyCardListItemViewHolder(View inputView)
|
||||
{
|
||||
super(inputView);
|
||||
mThumbnailContainer = inputView.findViewById(R.id.thumbnail_container);
|
||||
mRow = inputView.findViewById(R.id.row);
|
||||
mDivider = inputView.findViewById(R.id.info_divider);
|
||||
mThumbnailFrontContainer = inputView.findViewById(R.id.thumbnail_front);
|
||||
|
||||
@@ -12,6 +12,7 @@ import android.content.res.TypedArray;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.ImageDecoder;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
@@ -152,7 +153,8 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity
|
||||
(String) (fieldName == LoyaltyCardField.barcodeId ? value : loyaltyCard.barcodeId),
|
||||
(CatimaBarcode) (fieldName == LoyaltyCardField.barcodeType ? value : loyaltyCard.barcodeType),
|
||||
(Integer) (fieldName == LoyaltyCardField.headerColor ? value : loyaltyCard.headerColor),
|
||||
(int) (fieldName == LoyaltyCardField.starStatus ? value : loyaltyCard.starStatus)
|
||||
(int) (fieldName == LoyaltyCardField.starStatus ? value : loyaltyCard.starStatus),
|
||||
Utils.getUnixTime()
|
||||
);
|
||||
}
|
||||
|
||||
@@ -549,7 +551,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity
|
||||
setTitle(R.string.addCardTitle);
|
||||
} else {
|
||||
// New card, use default values
|
||||
tempLoyaltyCard = new LoyaltyCard(-1, "", "", null, new BigDecimal("0"), null, "", null, null, null, 0);
|
||||
tempLoyaltyCard = new LoyaltyCard(-1, "", "", null, new BigDecimal("0"), null, "", null, null, null, 0, Utils.getUnixTime());
|
||||
setTitle(R.string.addCardTitle);
|
||||
}
|
||||
}
|
||||
@@ -991,7 +993,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity
|
||||
}
|
||||
else
|
||||
{
|
||||
loyaltyCardId = (int)db.insertLoyaltyCard(tempLoyaltyCard.store, tempLoyaltyCard.note, tempLoyaltyCard.expiry, tempLoyaltyCard.balance, tempLoyaltyCard.balanceType, tempLoyaltyCard.cardId, tempLoyaltyCard.barcodeId, tempLoyaltyCard.barcodeType, tempLoyaltyCard.headerColor, 0);
|
||||
loyaltyCardId = (int) db.insertLoyaltyCard(tempLoyaltyCard.store, tempLoyaltyCard.note, tempLoyaltyCard.expiry, tempLoyaltyCard.balance, tempLoyaltyCard.balanceType, tempLoyaltyCard.cardId, tempLoyaltyCard.barcodeId, tempLoyaltyCard.barcodeType, tempLoyaltyCard.headerColor, 0, tempLoyaltyCard.lastUsed);
|
||||
try {
|
||||
Utils.saveCardImage(this, (Bitmap) cardImageFront.getTag(), loyaltyCardId, true);
|
||||
Utils.saveCardImage(this, (Bitmap) cardImageBack.getTag(), loyaltyCardId, false);
|
||||
@@ -1086,7 +1088,12 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity
|
||||
} else if (requestCode == Utils.CARD_IMAGE_FROM_FILE_FRONT || requestCode == Utils.CARD_IMAGE_FROM_FILE_BACK) {
|
||||
Bitmap bitmap = null;
|
||||
try {
|
||||
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), intent.getData());
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
ImageDecoder.Source image_source = ImageDecoder.createSource(getContentResolver(), intent.getData());
|
||||
bitmap = ImageDecoder.decodeBitmap(image_source, (decoder, info, source) -> decoder.setMutableRequired(true));
|
||||
} else {
|
||||
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), intent.getData());
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Error getting data from image file");
|
||||
e.printStackTrace();
|
||||
|
||||
@@ -45,6 +45,7 @@ import androidx.appcompat.content.res.AppCompatResources;
|
||||
import androidx.appcompat.widget.AppCompatTextView;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.constraintlayout.widget.Guideline;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.graphics.drawable.DrawableCompat;
|
||||
import androidx.core.widget.TextViewCompat;
|
||||
import protect.card_locker.preferences.Settings;
|
||||
@@ -192,7 +193,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
Drawable unwrappedIcon = AppCompatResources.getDrawable(this, active ? R.drawable.active_dot : R.drawable.inactive_dot);
|
||||
assert unwrappedIcon != null;
|
||||
Drawable wrappedIcon = DrawableCompat.wrap(unwrappedIcon);
|
||||
DrawableCompat.setTint(wrappedIcon, getResources().getColor(R.color.iconColor));
|
||||
DrawableCompat.setTint(wrappedIcon, ContextCompat.getColor(getApplicationContext(), R.color.iconColor));
|
||||
|
||||
return wrappedIcon;
|
||||
}
|
||||
@@ -468,7 +469,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
int expiryString = R.string.expiryStateSentence;
|
||||
if(Utils.hasExpired(loyaltyCard.expiry)) {
|
||||
expiryString = R.string.expiryStateSentenceExpired;
|
||||
expiryView.setTextColor(getResources().getColor(R.color.alert));
|
||||
expiryView.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.alert));
|
||||
}
|
||||
expiryView.setText(getString(expiryString, DateFormat.getDateInstance(DateFormat.LONG).format(loyaltyCard.expiry)));
|
||||
expiryView.setTextSize(settings.getFontSizeMax(settings.getMediumFont()));
|
||||
@@ -530,10 +531,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
{
|
||||
window.getDecorView().setSystemUiVisibility(backgroundNeedsDarkIcons ? View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR : 0);
|
||||
}
|
||||
if(Build.VERSION.SDK_INT >= 21)
|
||||
{
|
||||
window.setStatusBarColor(Color.TRANSPARENT);
|
||||
}
|
||||
window.setStatusBarColor(Color.TRANSPARENT);
|
||||
|
||||
// Set shadow colour of store text so even same color on same color would be readable
|
||||
storeName.setShadowLayer(1, 1, 1, backgroundNeedsDarkIcons ? Color.BLACK : Color.WHITE);
|
||||
@@ -581,6 +579,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
}
|
||||
|
||||
setFullscreen(isFullscreen);
|
||||
|
||||
db.updateLoyaltyCardLastUsed(loyaltyCard.id);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,19 +16,23 @@ import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
import com.google.android.material.tabs.TabLayout;
|
||||
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
import androidx.appcompat.app.AlertDialog;
|
||||
import androidx.appcompat.view.ActionMode;
|
||||
import androidx.appcompat.widget.SearchView;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.splashscreen.SplashScreen;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import protect.card_locker.preferences.SettingsActivity;
|
||||
|
||||
@@ -42,6 +46,9 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
private Menu mMenu;
|
||||
private GestureDetector mGestureDetector;
|
||||
protected String mFilter = "";
|
||||
protected Object mGroup = null;
|
||||
protected DBHelper.LoyaltyCardOrder mOrder = DBHelper.LoyaltyCardOrder.Alpha;
|
||||
protected DBHelper.LoyaltyCardOrderDirection mOrderDirection = DBHelper.LoyaltyCardOrderDirection.Ascending;
|
||||
protected int selectedTab = 0;
|
||||
private RecyclerView mCardList;
|
||||
private View mHelpText;
|
||||
@@ -141,8 +148,9 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
}
|
||||
|
||||
TabLayout.Tab tab = ((TabLayout) findViewById(R.id.groups)).getTabAt(selectedTab);
|
||||
mGroup = tab != null ? tab.getTag() : null;
|
||||
|
||||
updateLoyaltyCardList(mFilter, tab != null ? tab.getTag() : null);
|
||||
updateLoyaltyCardList();
|
||||
|
||||
dialog.dismiss();
|
||||
});
|
||||
@@ -175,8 +183,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
@Override
|
||||
protected void onCreate(Bundle inputSavedInstanceState)
|
||||
{
|
||||
setTheme(R.style.AppTheme_NoActionBar);
|
||||
super.onCreate(inputSavedInstanceState);
|
||||
SplashScreen.installSplashScreen(this);
|
||||
setTitle(R.string.app_name);
|
||||
setContentView(R.layout.main_activity);
|
||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||
@@ -187,14 +195,15 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
@Override
|
||||
public void onTabSelected(TabLayout.Tab tab) {
|
||||
selectedTab = tab.getPosition();
|
||||
updateLoyaltyCardList(mFilter, tab.getTag());
|
||||
mGroup = tab.getTag();
|
||||
updateLoyaltyCardList();
|
||||
|
||||
// Store active tab in Shared Preference to restore next app launch
|
||||
SharedPreferences activeTabPref = getApplicationContext().getSharedPreferences(
|
||||
getString(R.string.sharedpreference_active_tab),
|
||||
Context.MODE_PRIVATE);
|
||||
SharedPreferences.Editor activeTabPrefEditor = activeTabPref.edit();
|
||||
activeTabPrefEditor.putInt(getString(R.string.sharedpreference_active_tab), selectedTab);
|
||||
activeTabPrefEditor.putInt(getString(R.string.sharedpreference_active_tab), tab.getPosition());
|
||||
activeTabPrefEditor.apply();
|
||||
}
|
||||
|
||||
@@ -226,7 +235,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
mCardList.setAdapter(mAdapter);
|
||||
registerForContextMenu(mCardList);
|
||||
|
||||
updateLoyaltyCardList(mFilter, null);
|
||||
mGroup = null;
|
||||
updateLoyaltyCardList();
|
||||
|
||||
/*
|
||||
* This was added for Huawei, but Huawei is just too much of a fucking pain.
|
||||
@@ -285,13 +295,20 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
TabLayout groupsTabLayout = findViewById(R.id.groups);
|
||||
updateTabGroups(groupsTabLayout);
|
||||
|
||||
// Restore active tab from Shared Preference
|
||||
// Restore settings from Shared Preference
|
||||
SharedPreferences activeTabPref = getApplicationContext().getSharedPreferences(
|
||||
getString(R.string.sharedpreference_active_tab),
|
||||
Context.MODE_PRIVATE);
|
||||
selectedTab = activeTabPref.getInt(getString(R.string.sharedpreference_active_tab), 0);
|
||||
SharedPreferences sortPref = getApplicationContext().getSharedPreferences(
|
||||
getString(R.string.sharedpreference_sort),
|
||||
Context.MODE_PRIVATE);
|
||||
try {
|
||||
mOrder = DBHelper.LoyaltyCardOrder.valueOf(sortPref.getString(getString(R.string.sharedpreference_sort_order), null));
|
||||
mOrderDirection = DBHelper.LoyaltyCardOrderDirection.valueOf(sortPref.getString(getString(R.string.sharedpreference_sort_direction), null));
|
||||
} catch (IllegalArgumentException | NullPointerException ignored) {}
|
||||
|
||||
Object group = null;
|
||||
mGroup = null;
|
||||
|
||||
if (groupsTabLayout.getTabCount() != 0) {
|
||||
TabLayout.Tab tab = groupsTabLayout.getTabAt(selectedTab);
|
||||
@@ -301,9 +318,9 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
|
||||
groupsTabLayout.selectTab(tab);
|
||||
assert tab != null;
|
||||
group = tab.getTag();
|
||||
mGroup = tab.getTag();
|
||||
}
|
||||
updateLoyaltyCardList(mFilter, group);
|
||||
updateLoyaltyCardList();
|
||||
// End of active tab logic
|
||||
|
||||
FloatingActionButton addButton = findViewById(R.id.fabAdd);
|
||||
@@ -368,30 +385,30 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
super.onBackPressed();
|
||||
}
|
||||
|
||||
private void updateLoyaltyCardList(String filterText, Object tag)
|
||||
{
|
||||
private void updateLoyaltyCardList() {
|
||||
Group group = null;
|
||||
if (tag != null) {
|
||||
group = (Group) tag;
|
||||
if (mGroup != null) {
|
||||
group = (Group) mGroup;
|
||||
}
|
||||
|
||||
mAdapter.swapCursor(mDB.getLoyaltyCardCursor(filterText, group));
|
||||
mAdapter.swapCursor(mDB.getLoyaltyCardCursor(mFilter, group, mOrder, mOrderDirection));
|
||||
|
||||
if(mDB.getLoyaltyCardCount() > 0)
|
||||
{
|
||||
// We want the cardList to be visible regardless of the filtered match count
|
||||
// to ensure that the noMatchingCardsText doesn't end up being shown below
|
||||
// the keyboard
|
||||
mCardList.setVisibility(View.VISIBLE);
|
||||
mHelpText.setVisibility(View.GONE);
|
||||
mNoGroupCardsText.setVisibility(View.GONE);
|
||||
if(mAdapter.getItemCount() > 0)
|
||||
{
|
||||
mCardList.setVisibility(View.VISIBLE);
|
||||
mNoMatchingCardsText.setVisibility(View.GONE);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!filterText.isEmpty()) {
|
||||
mCardList.setVisibility(View.GONE);
|
||||
if (!mFilter.isEmpty()) {
|
||||
// Actual Empty Search Result
|
||||
mNoMatchingCardsText.setVisibility(View.VISIBLE);
|
||||
mNoGroupCardsText.setVisibility(View.GONE);
|
||||
@@ -444,14 +461,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
groupsTabLayout.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
private void openPrivacyPolicy() {
|
||||
Intent browserIntent = new Intent(
|
||||
Intent.ACTION_VIEW,
|
||||
Uri.parse("https://catima.app/privacy-policy")
|
||||
);
|
||||
startActivity(browserIntent);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu inputMenu)
|
||||
{
|
||||
@@ -486,11 +495,9 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
|
||||
TabLayout groupsTabLayout = findViewById(R.id.groups);
|
||||
TabLayout.Tab currentTab = groupsTabLayout.getTabAt(groupsTabLayout.getSelectedTabPosition());
|
||||
mGroup = currentTab != null ? currentTab.getTag() : null;
|
||||
|
||||
updateLoyaltyCardList(
|
||||
mFilter,
|
||||
currentTab != null ? currentTab.getTag() : null
|
||||
);
|
||||
updateLoyaltyCardList();
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -504,6 +511,47 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
{
|
||||
int id = inputItem.getItemId();
|
||||
|
||||
if (id == R.id.action_sort)
|
||||
{
|
||||
TabLayout.Tab tab = ((TabLayout) findViewById(R.id.groups)).getTabAt(selectedTab);
|
||||
AtomicInteger currentIndex = new AtomicInteger();
|
||||
List<DBHelper.LoyaltyCardOrder> loyaltyCardOrders = Arrays.asList(DBHelper.LoyaltyCardOrder.values());
|
||||
for (int i = 0; i < loyaltyCardOrders.size(); i++) {
|
||||
if (mOrder == loyaltyCardOrders.get(i)) {
|
||||
currentIndex.set(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
|
||||
builder.setTitle(R.string.sort_by);
|
||||
|
||||
final View customLayout = getLayoutInflater().inflate(R.layout.sorting_option, null);
|
||||
builder.setView(customLayout);
|
||||
|
||||
CheckBox ch = (CheckBox) customLayout.findViewById(R.id.checkBox_reverse);
|
||||
ch.setChecked(mOrderDirection == DBHelper.LoyaltyCardOrderDirection.Descending);
|
||||
|
||||
builder.setSingleChoiceItems(R.array.sort_types_array, currentIndex.get(), (dialog, which) -> currentIndex.set(which));
|
||||
|
||||
builder.setPositiveButton(R.string.sort, (dialog, which) -> {
|
||||
if(ch.isChecked()) {
|
||||
setSort(loyaltyCardOrders.get(currentIndex.get()), DBHelper.LoyaltyCardOrderDirection.Descending);
|
||||
}
|
||||
else {
|
||||
setSort(loyaltyCardOrders.get(currentIndex.get()), DBHelper.LoyaltyCardOrderDirection.Ascending);
|
||||
}
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
builder.setNegativeButton(R.string.cancel, (dialog, which) -> dialog.dismiss());
|
||||
|
||||
AlertDialog dialog = builder.create();
|
||||
dialog.show();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (id == R.id.action_manage_groups)
|
||||
{
|
||||
Intent i = new Intent(getApplicationContext(), ManageGroupsActivity.class);
|
||||
@@ -525,12 +573,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
return true;
|
||||
}
|
||||
|
||||
if(id == R.id.action_privacy_policy)
|
||||
{
|
||||
openPrivacyPolicy();
|
||||
return true;
|
||||
}
|
||||
|
||||
if (id == R.id.action_about)
|
||||
{
|
||||
Intent i = new Intent(getApplicationContext(), AboutActivity.class);
|
||||
@@ -541,6 +583,24 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
return super.onOptionsItemSelected(inputItem);
|
||||
}
|
||||
|
||||
private void setSort(DBHelper.LoyaltyCardOrder order, DBHelper.LoyaltyCardOrderDirection direction) {
|
||||
// Update values
|
||||
mOrder = order;
|
||||
mOrderDirection = direction;
|
||||
|
||||
// Store in Shared Preference to restore next app launch
|
||||
SharedPreferences sortPref = getApplicationContext().getSharedPreferences(
|
||||
getString(R.string.sharedpreference_sort),
|
||||
Context.MODE_PRIVATE);
|
||||
SharedPreferences.Editor sortPrefEditor = sortPref.edit();
|
||||
sortPrefEditor.putString(getString(R.string.sharedpreference_sort_order), order.name());
|
||||
sortPrefEditor.putString(getString(R.string.sharedpreference_sort_direction), direction.name());
|
||||
sortPrefEditor.apply();
|
||||
|
||||
// Update card list
|
||||
updateLoyaltyCardList();
|
||||
}
|
||||
|
||||
protected static boolean isDarkModeEnabled(Context inputContext)
|
||||
{
|
||||
Configuration config = inputContext.getResources().getConfiguration();
|
||||
@@ -656,16 +716,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onIconClicked(int inputPosition)
|
||||
{
|
||||
if (mCurrentActionMode == null)
|
||||
{
|
||||
mCurrentActionMode = startSupportActionMode(mCurrentActionModeCallback);
|
||||
}
|
||||
|
||||
toggleSelection(inputPosition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRowClicked(int inputPosition)
|
||||
|
||||
@@ -8,6 +8,7 @@ import android.content.res.Resources;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Color;
|
||||
import android.graphics.ImageDecoder;
|
||||
import android.graphics.Matrix;
|
||||
import android.os.Build;
|
||||
import android.os.LocaleList;
|
||||
@@ -105,7 +106,12 @@ public class Utils {
|
||||
|
||||
Bitmap bitmap;
|
||||
try {
|
||||
bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), intent.getData());
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||
ImageDecoder.Source image_source = ImageDecoder.createSource(context.getContentResolver(), intent.getData());
|
||||
bitmap = ImageDecoder.decodeBitmap(image_source, (decoder, info, source) -> decoder.setMutableRequired(true));
|
||||
} else {
|
||||
bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), intent.getData());
|
||||
}
|
||||
} catch (IOException e) {
|
||||
Log.e(TAG, "Error getting data from image file");
|
||||
e.printStackTrace();
|
||||
@@ -146,6 +152,21 @@ public class Utils {
|
||||
}
|
||||
|
||||
static public BarcodeValues getBarcodeFromBitmap(Bitmap bitmap) {
|
||||
// This function is vulnerable to OOM, so we try again with a smaller bitmap is we get OOM
|
||||
for (int i = 0; i < 10; i++) {
|
||||
try {
|
||||
return Utils.getBarcodeFromBitmapReal(bitmap);
|
||||
} catch (OutOfMemoryError e) {
|
||||
Log.w(TAG, "Ran OOM in getBarcodeFromBitmap! Trying again with smaller picture! Retry " + i + " of 10.");
|
||||
bitmap = Bitmap.createScaledBitmap(bitmap, (int) Math.round(0.75 * bitmap.getWidth()), (int) Math.round(0.75 * bitmap.getHeight()), false);
|
||||
}
|
||||
}
|
||||
|
||||
// Give up
|
||||
return new BarcodeValues(null, null);
|
||||
}
|
||||
|
||||
static private BarcodeValues getBarcodeFromBitmapReal(Bitmap bitmap) {
|
||||
// In order to decode it, the Bitmap must first be converted into a pixel array...
|
||||
int[] intArray = new int[bitmap.getWidth() * bitmap.getHeight()];
|
||||
bitmap.getPixels(intArray, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight());
|
||||
@@ -376,4 +397,8 @@ public class Utils {
|
||||
configuration.setLocales(localeList);
|
||||
return context.createConfigurationContext(configuration);
|
||||
}
|
||||
|
||||
static public long getUnixTime() {
|
||||
return System.currentTimeMillis() / 1000;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,7 +127,8 @@ public class CatimaExporter implements Exporter
|
||||
DBHelper.LoyaltyCardDbIds.BARCODE_ID,
|
||||
DBHelper.LoyaltyCardDbIds.BARCODE_TYPE,
|
||||
DBHelper.LoyaltyCardDbIds.HEADER_COLOR,
|
||||
DBHelper.LoyaltyCardDbIds.STAR_STATUS);
|
||||
DBHelper.LoyaltyCardDbIds.STAR_STATUS,
|
||||
DBHelper.LoyaltyCardDbIds.LAST_USED);
|
||||
|
||||
Cursor cardCursor = db.getLoyaltyCardCursor();
|
||||
|
||||
@@ -145,7 +146,8 @@ public class CatimaExporter implements Exporter
|
||||
card.barcodeId,
|
||||
card.barcodeType != null ? card.barcodeType.name() : "",
|
||||
card.headerColor,
|
||||
card.starStatus);
|
||||
card.starStatus,
|
||||
card.lastUsed);
|
||||
|
||||
if(Thread.currentThread().isInterrupted())
|
||||
{
|
||||
|
||||
@@ -349,13 +349,21 @@ public class CatimaImporter implements Importer
|
||||
int starStatus = 0;
|
||||
try {
|
||||
starStatus = CSVHelpers.extractInt(DBHelper.LoyaltyCardDbIds.STAR_STATUS, record, false);
|
||||
} catch (FormatException _e ) {
|
||||
// This field did not exist in versions 0.278 and before
|
||||
} catch (FormatException _e) {
|
||||
// This field did not exist in versions 0.28 and before
|
||||
// We catch this exception so we can still import old backups
|
||||
}
|
||||
if (starStatus != 1) starStatus = 0;
|
||||
|
||||
helper.insertLoyaltyCard(database, id, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus);
|
||||
Long lastUsed = 0L;
|
||||
try {
|
||||
lastUsed = CSVHelpers.extractLong(DBHelper.LoyaltyCardDbIds.LAST_USED, record, false);
|
||||
} catch (FormatException _e) {
|
||||
// This field did not exist in versions 2.5.0 and before
|
||||
// We catch this exception so we can still import old backups
|
||||
}
|
||||
|
||||
helper.insertLoyaltyCard(database, id, store, note, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starStatus, lastUsed);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -23,6 +23,7 @@ import java.text.ParseException;
|
||||
import protect.card_locker.CatimaBarcode;
|
||||
import protect.card_locker.DBHelper;
|
||||
import protect.card_locker.FormatException;
|
||||
import protect.card_locker.Utils;
|
||||
|
||||
/**
|
||||
* Class for importing a database from CSV (Comma Separate Values)
|
||||
@@ -135,6 +136,6 @@ public class FidmeImporter implements Importer
|
||||
|
||||
// TODO: Front and back image
|
||||
|
||||
helper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, null, starStatus);
|
||||
helper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, null, starStatus, null);
|
||||
}
|
||||
}
|
||||
@@ -116,14 +116,14 @@ public class StocardImporter implements Importer
|
||||
.substring("/loyalty-card-providers/".length())
|
||||
);
|
||||
|
||||
try {
|
||||
if (jsonObject.has("input_barcode_format")) {
|
||||
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
|
||||
loyaltyCardHashMap,
|
||||
cardName,
|
||||
"barcodeType",
|
||||
jsonObject.getString("input_barcode_format")
|
||||
);
|
||||
} catch (JSONException ignored) {}
|
||||
}
|
||||
}
|
||||
} else if (fileName.endsWith("notes/default.json")) {
|
||||
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
|
||||
@@ -175,7 +175,7 @@ public class StocardImporter implements Importer
|
||||
}
|
||||
}
|
||||
|
||||
long loyaltyCardInternalId = db.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, null, 0);
|
||||
long loyaltyCardInternalId = db.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, null, 0, null);
|
||||
|
||||
if (loyaltyCardData.containsKey("frontImage")) {
|
||||
Utils.saveCardImage(context, (Bitmap) loyaltyCardData.get("frontImage"), (int) loyaltyCardInternalId, true);
|
||||
|
||||
@@ -26,6 +26,7 @@ import java.util.TimeZone;
|
||||
import protect.card_locker.CatimaBarcode;
|
||||
import protect.card_locker.DBHelper;
|
||||
import protect.card_locker.FormatException;
|
||||
import protect.card_locker.Utils;
|
||||
|
||||
/**
|
||||
* Class for importing a database from CSV (Comma Separate Values)
|
||||
@@ -129,7 +130,7 @@ public class VoucherVaultImporter implements Importer
|
||||
throw new FormatException("Unknown colour type found: " + colorFromJSON);
|
||||
}
|
||||
|
||||
db.insertLoyaltyCard(store, "", expiry, balance, balanceType, cardId, null, barcodeType, headerColor, 0);
|
||||
db.insertLoyaltyCard(store, "", expiry, balance, balanceType, cardId, null, barcodeType, headerColor, 0, Utils.getUnixTime());
|
||||
}
|
||||
|
||||
database.setTransactionSuccessful();
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item android:drawable="@color/ic_launcher_background"/>
|
||||
<item android:gravity="center"
|
||||
android:width="256dp"
|
||||
android:height="256dp"
|
||||
android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</layer-list>
|
||||
5
app/src/main/res/drawable/ic_baseline_sort_24.xml
Normal file
5
app/src/main/res/drawable/ic_baseline_sort_24.xml
Normal file
@@ -0,0 +1,5 @@
|
||||
<vector android:autoMirrored="true" android:height="24dp"
|
||||
android:tint="#FFFFFF" android:viewportHeight="24"
|
||||
android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M3,18h6v-2L3,16v2zM3,6v2h18L21,6L3,6zM3,13h12v-2L3,11v2z"/>
|
||||
</vector>
|
||||
@@ -22,21 +22,333 @@
|
||||
|
||||
</com.google.android.material.appbar.AppBarLayout>
|
||||
|
||||
<LinearLayout
|
||||
<ScrollView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="?attr/actionBarSize"
|
||||
android:orientation="vertical"
|
||||
android:padding="10dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/aboutText"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:linksClickable="true"
|
||||
android:singleLine="false"
|
||||
android:focusable="true" />
|
||||
android:orientation="vertical">
|
||||
|
||||
</LinearLayout>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/version_history"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="8dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/version_history_main"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:padding="2dp"
|
||||
android:text="@string/version_history"
|
||||
android:textColor="@color/colorSecondaryText"
|
||||
android:textSize="18sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/version_history_sub"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="2dp"
|
||||
android:textSize="16sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/version_history_main" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:text="@string/arrow"
|
||||
android:textColor="@color/colorSecondaryText"
|
||||
android:textSize="20sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/credits"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="8dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/credits_main"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:padding="2dp"
|
||||
android:text="@string/credits"
|
||||
android:textColor="@color/colorSecondaryText"
|
||||
android:textSize="18sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/credits_sub"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="2dp"
|
||||
android:textSize="16sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/credits_main" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:text="@string/arrow"
|
||||
android:textColor="@color/colorSecondaryText"
|
||||
android:textSize="20sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/translate"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="8dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/translate_main"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:padding="2dp"
|
||||
android:text="@string/help_translate_this_app"
|
||||
android:textColor="@color/colorSecondaryText"
|
||||
android:textSize="18sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:text="@string/arrow"
|
||||
android:textColor="@color/colorSecondaryText"
|
||||
android:textSize="20sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/license"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="8dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/license_main"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:padding="2dp"
|
||||
android:text="@string/license"
|
||||
android:textColor="@color/colorSecondaryText"
|
||||
android:textSize="18sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/license_sub"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="2dp"
|
||||
android:text="@string/app_license"
|
||||
android:layout_marginEnd="20dp"
|
||||
android:textSize="16sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/license_main"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:text="@string/arrow"
|
||||
android:textColor="@color/colorSecondaryText"
|
||||
android:textSize="20sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/repo"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="8dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/repo_main"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:padding="2dp"
|
||||
android:text="@string/source_repository"
|
||||
android:textColor="@color/colorSecondaryText"
|
||||
android:textSize="18sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/repo_sub"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="2dp"
|
||||
android:text="@string/on_github"
|
||||
android:textSize="16sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/repo_main" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:text="@string/arrow"
|
||||
android:textColor="@color/colorSecondaryText"
|
||||
android:textSize="20sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/privacy"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="8dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/privacy_main"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:padding="2dp"
|
||||
android:text="@string/privacy_policy"
|
||||
android:textColor="@color/colorSecondaryText"
|
||||
android:textSize="18sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/privacy_sub"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="2dp"
|
||||
android:text="@string/and_data_usage"
|
||||
android:textSize="16sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/privacy_main" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:text="@string/arrow"
|
||||
android:textColor="@color/colorSecondaryText"
|
||||
android:textSize="20sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/rate"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="8dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/rate_main"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:padding="2dp"
|
||||
android:text="@string/rate_this_app"
|
||||
android:textColor="@color/colorSecondaryText"
|
||||
android:textSize="18sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/rate_sub"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="2dp"
|
||||
android:text="@string/on_google_play"
|
||||
android:textSize="16sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@id/rate_main" />
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:text="@string/arrow"
|
||||
android:textColor="@color/colorSecondaryText"
|
||||
android:textSize="20sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:padding="8dp"
|
||||
android:id="@+id/report_error"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/report_error_main"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:padding="2dp"
|
||||
android:text="@string/report_error"
|
||||
android:textColor="@color/colorSecondaryText"
|
||||
android:textSize="18sp"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/report_error_sub"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toBottomOf="@id/report_error_main"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
android:textSize="16sp"
|
||||
android:text="@string/on_github"
|
||||
android:padding="2dp"/>
|
||||
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="8dp"
|
||||
android:fontFamily="sans-serif-medium"
|
||||
android:text="@string/arrow"
|
||||
android:textColor="@color/colorSecondaryText"
|
||||
android:textSize="20sp"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
</LinearLayout>
|
||||
</ScrollView>
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
||||
|
||||
21
app/src/main/res/layout/sorting_option.xml
Normal file
21
app/src/main/res/layout/sorting_option.xml
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<CheckBox
|
||||
android:id="@+id/checkBox_reverse"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginLeft="20dp"
|
||||
android:paddingLeft="20dp"
|
||||
android:text="@string/reverse"
|
||||
android:textSize="19sp"/>
|
||||
|
||||
</LinearLayout>
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@@ -8,11 +8,16 @@
|
||||
android:icon="@drawable/ic_search_white"
|
||||
app:actionViewClass="androidx.appcompat.widget.SearchView"
|
||||
app:showAsAction="always|collapseActionView"/>
|
||||
<item
|
||||
android:id="@+id/action_sort"
|
||||
android:title="@string/sort"
|
||||
android:icon="@drawable/ic_baseline_sort_24"
|
||||
app:showAsAction="always"/>
|
||||
<item
|
||||
android:id="@+id/action_manage_groups"
|
||||
android:icon="@drawable/ic_folder_white"
|
||||
android:title="@string/groups"
|
||||
app:showAsAction="always"/>
|
||||
app:showAsAction="ifRoom"/>
|
||||
<item
|
||||
android:id="@+id/action_import_export"
|
||||
android:icon="@drawable/ic_import_export_white_24dp"
|
||||
@@ -22,10 +27,6 @@
|
||||
android:id="@+id/action_settings"
|
||||
android:title="@string/settings"
|
||||
app:showAsAction="never"/>
|
||||
<item
|
||||
android:id="@+id/action_privacy_policy"
|
||||
android:title="@string/privacy_policy"
|
||||
app:showAsAction="never"/>
|
||||
<item
|
||||
android:id="@+id/action_about"
|
||||
android:title="@string/about"
|
||||
|
||||
@@ -8,21 +8,23 @@ mondstern
|
||||
Taco
|
||||
Gediminas Murauskas
|
||||
IllusiveMan196
|
||||
Joel A
|
||||
Samantaz Fox
|
||||
Nyatsuki
|
||||
arno-github
|
||||
Sergio Paredes
|
||||
Joel A
|
||||
Nyatsuki
|
||||
StoyanDimitrov
|
||||
Oğuz Ersen
|
||||
Petr Novák
|
||||
arshbeerSingh
|
||||
huuhaa
|
||||
Michael Moroni
|
||||
Petr Novák
|
||||
betsythefc
|
||||
K. Herbert
|
||||
Oğuz Ersen
|
||||
Quentin PAGÈS
|
||||
String E. Fighter
|
||||
Yurical
|
||||
waffshappen
|
||||
Adolfo Jayme-Barrientos
|
||||
Alessandro Mandelli
|
||||
KovalevArtem
|
||||
@@ -33,15 +35,14 @@ Jane Kong
|
||||
Lukas Grassauer
|
||||
Michalis
|
||||
schirinowski
|
||||
String E. Fighter
|
||||
inesre
|
||||
lgasp
|
||||
phlostically
|
||||
waffshappen
|
||||
Kevin Sicong Jiang
|
||||
Miha Frangež
|
||||
Airat
|
||||
BMN
|
||||
Flav
|
||||
Franciszek Stefan
|
||||
Izzy
|
||||
Karol Kosek
|
||||
@@ -50,6 +51,8 @@ Maciej Błędkowski
|
||||
Mattia
|
||||
pbeckmann
|
||||
Peer Beckmann
|
||||
QuangDNguyen2211
|
||||
Rohan Babbar
|
||||
Rose Liverman
|
||||
Simone Dotto
|
||||
Subhashish Anand
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> карти</item>
|
||||
</plurals>
|
||||
<string name="failedOpeningFileManager">Инсталирайте приложение за управление на файлове.</string>
|
||||
<string name="app_license">Свободен софтуер с авторски права, лицензиран под GPLv3+.</string>
|
||||
<string name="app_license">Свободен софтуер с авторски права, лицензиран под GPLv3+</string>
|
||||
<string name="frontImageDescription">Снимка на предната страна на карта</string>
|
||||
<string name="backImageDescription">Снимка на задната страна на карта</string>
|
||||
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> не изглежда истинска наличност.</string>
|
||||
@@ -52,7 +52,7 @@
|
||||
<string name="barcodeId">Стойност на щрихкода</string>
|
||||
<string name="importLoyaltyCardKeychain">Внасяне от Loyalty Card Keychain</string>
|
||||
<string name="importFidmeMessage">Изберете файла <i>fidme-export-request-xxxxxx.zip</i>, предварително изнесен от FidMe и ръчно изберете вида на щрихкодовете.
|
||||
\nИли създайте такъв файл от Data Protection в менюто на профила във FidMe и изберете „Extract my data“.</string>
|
||||
\nСъздайте такъв файл от Data Protection в менюто на профила във FidMe и изберете „Extract my data“.</string>
|
||||
<string name="importFidme">Внасяне от FidMe</string>
|
||||
<string name="exportOptionExplanation">Данните ще бъдат запазени на място по ваш избор.</string>
|
||||
<string name="accept">Приемане</string>
|
||||
@@ -116,7 +116,7 @@
|
||||
<string name="exportName">Изнасяне</string>
|
||||
<string name="importExport">Внасяне/изнасяне</string>
|
||||
<string name="sendLabel">Изпращане…</string>
|
||||
<string name="scanCardBarcode">Сканиране на щрихкод от карта</string>
|
||||
<string name="scanCardBarcode">Снемане на щрихкод от карта</string>
|
||||
<string name="editCardTitle">Редактиране на карта</string>
|
||||
<string name="share">Споделя</string>
|
||||
<string name="copy_to_clipboard">Копира идентификатора в междинната памет</string>
|
||||
@@ -124,7 +124,7 @@
|
||||
<string name="importSuccessful">Картите са внесени успешно</string>
|
||||
<string name="chooseImportType">От къде ще внесете\?</string>
|
||||
<string name="importCatimaMessage">Изберете файла <i>catima.zip</i>, предварително изнесен от Catima.
|
||||
\nИли създайте такъв файл от меню Внасяне/изнасяне от друго устройство със Catima като изберете Изнасяне.</string>
|
||||
\nСъздайте такъв файл от меню Внасяне/изнасяне от друго устройство с Catima като изберете Изнасяне.</string>
|
||||
<string name="importOptionApplicationTitle">От друго приложение</string>
|
||||
<string name="importOptionFilesystemButton">Избиране от файлова система</string>
|
||||
<string name="importOptionFilesystemExplanation">Изберете определен файл от файловата система.</string>
|
||||
@@ -133,9 +133,9 @@
|
||||
<string name="app_revision_fmt">Компилация: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Издание: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="about_title_fmt">Относно <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Всички права запазени © 2019–<xliff:g>%d</xliff:g> Sylvia van Os.</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Всички права запазени © 2019–<xliff:g>%d</xliff:g> Sylvia van Os</string>
|
||||
<string name="app_copyright_old">На основата на Loyalty Card Keychain
|
||||
\nвсички права запазени © 2016–2020 Branden Archer.</string>
|
||||
\nвсички права запазени © 2016–2020 Branden Archer</string>
|
||||
<string name="about">Относно</string>
|
||||
<string name="importOptionFilesystemTitle">Внасяне от файловата система</string>
|
||||
<string name="importCatima">Внасяне от Catima</string>
|
||||
@@ -156,11 +156,11 @@
|
||||
<string name="importStocard">Внасяне от Stocard</string>
|
||||
<string name="importVoucherVault">Внасяне от Voucher Vault</string>
|
||||
<string name="importVoucherVaultMessage">Изберете файла <i>vouchervault.json</i>, предварително изнесен от Voucher Vault.
|
||||
\nИли създайте такъв файл от меню Изнасяне от Voucher Vault.</string>
|
||||
<string name="importStocardMessage">Изберете вашия <i>***-sync.zip</i> експорт от Stocard, за да го импортирате.
|
||||
\nИли го получете, като изпратите имейл на support@stocardapp.com с искане за експорт на вашите данни.</string>
|
||||
\nСъздайте такъв файл от меню „Export“ във Voucher Vault.</string>
|
||||
<string name="importStocardMessage">Изберете файла <i>***-sync.zip</i>, предварително изнесен от Stocard.
|
||||
\nПолучете го като изпратите писмо на support@stocardapp.com с искане за изнасяне вашите данни.</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Изберете файла <i>LoyaltyCardKeychain.csv</i>, предварително изнесен от Loyalty Card Keychain.
|
||||
\nИли създайте такъв файл от меню Внасяне/изнасяне от друго устройство със Loyalty Card Keychain като изберете Изнасяне.</string>
|
||||
\nСъздайте такъв файл от меню Внасяне/изнасяне от друго устройство с Loyalty Card Keychain като изберете Изнасяне.</string>
|
||||
<string name="failedParsingImportUriError">Препратката не може да бъде анализирана за внасяне</string>
|
||||
<string name="card_ids_copied">[не превеждай този низ, https://github.com/TheLastProject/Catima/issues/278]</string>
|
||||
<string name="failedGeneratingShareURL">Грешка при създаване на адрес за споделяне. Изпратете доклад за дефект.</string>
|
||||
@@ -190,4 +190,22 @@
|
||||
<string name="noGroupCards">Тази група не съдържа карти</string>
|
||||
<string name="toggleMoreInfo">Превключване на повече информация</string>
|
||||
<string name="barcodeImageDescriptionWithType">Изображение на щрихкод на карта от вида <xliff:g>%s</xliff:g></string>
|
||||
<string name="swipeToSwitchImages">Плъзване или задържане за смяна на изображения</string>
|
||||
<string name="sort_by">Сортиране по</string>
|
||||
<string name="reverse">Наобратно</string>
|
||||
<string name="sort_by_balance">Наличност</string>
|
||||
<string name="sort_by_expiry">Валидност</string>
|
||||
<string name="sort_by_most_recently_used">Последно използване</string>
|
||||
<string name="sort_by_name">Наименование</string>
|
||||
<string name="sort">Сортиране</string>
|
||||
<string name="credits">Заслуги</string>
|
||||
<string name="license">Лиценз</string>
|
||||
<string name="source_repository">Хранилище на изходния код</string>
|
||||
<string name="on_github">в GitHub</string>
|
||||
<string name="rate_this_app">Оценете приложението</string>
|
||||
<string name="report_error">Докладване на грешка</string>
|
||||
<string name="version_history">История на изданията</string>
|
||||
<string name="on_google_play">в Google Play</string>
|
||||
<string name="and_data_usage">и използване на данни</string>
|
||||
<string name="help_translate_this_app">Помогнете за превода на приложението</string>
|
||||
</resources>
|
||||
90
app/src/main/res/values-bs/strings.xml
Normal file
90
app/src/main/res/values-bs/strings.xml
Normal file
@@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="save">Snimi</string>
|
||||
<string name="cancel">Odustani</string>
|
||||
<string name="unstar">Ukloni sve omiljene</string>
|
||||
<string name="star">Omiljene</string>
|
||||
<string name="barcodeNoBarcode">Ova kartica nema barkode</string>
|
||||
<string name="barcodeType">Barcode tip</string>
|
||||
<string name="note">Bilježnica</string>
|
||||
<string name="storeName">Ime</string>
|
||||
<string name="noMatchingGiftCards">Nisam našao ništa. Pokušaj promijeniti pretragu.</string>
|
||||
<string name="noGiftCards">Kliknite + Plus dugme da dodate kartu ili uvozite nešto iz menija prvo.</string>
|
||||
<string name="action_add">Dodaj</string>
|
||||
<string name="all">Sve</string>
|
||||
<string name="noGroupCards">Ova grupa ne sadrži nikakve karte</string>
|
||||
<string name="noGroups">Kliknite + Plus dugme da dodate grupe za kategorizaciju prvo.</string>
|
||||
<string name="groups">Grupe</string>
|
||||
<string name="enter_group_name">Unesite ime grupe</string>
|
||||
<string name="exportSuccessful">Podaci o kartama izvožen</string>
|
||||
<string name="importSuccessful">Uvezeni podaci o kartama</string>
|
||||
<string name="intent_import_card_from_url_share_text">Želim podijeliti čestitku s tobom</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Spriječi zaključavanje ekrana</string>
|
||||
<string name="settings_keep_screen_on">Zadrži ekran</string>
|
||||
<string name="settings_lock_barcode_orientation">Zaključaj barcode orjentacija</string>
|
||||
<string name="settings_max_font_size_scale">Max. veliäťina fonta</string>
|
||||
<string name="settings_light_theme">Svjetlo</string>
|
||||
<string name="settings_system_theme">Sistem</string>
|
||||
<string name="settings_theme">Tema</string>
|
||||
<string name="settings_category_title_ui">Korisničko okruženje</string>
|
||||
<string name="starImage">Omiljena zvijezda</string>
|
||||
<string name="importCatima">Uvezi iz Catima</string>
|
||||
<string name="importLoyaltyCardKeychain">Uvezi iz Loyalty Card Keychain</string>
|
||||
<string name="importStocard">Uvezi iz Stokarda</string>
|
||||
<string name="importVoucherVault">Uvezi iz trezora vaučer</string>
|
||||
<string name="barcodeId">Barcode vrijednost</string>
|
||||
<string name="sameAsCardId">Isto kao i kartica</string>
|
||||
<string name="setBarcodeId">Postavi vrijednost za bar kod</string>
|
||||
<string name="unsupportedBarcodeType">Ovaj bar kod još nije prikazan. Ona može biti podržana u kasnijoj verziji app.</string>
|
||||
<string name="wrongValueForBarcodeType">Izabrana vrijednost nije izvršna</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">IDs kartica kopiran u clipboard</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Želim podijeliti karte s tobom</string>
|
||||
<string name="frontImageDescription">Slika kartice</string>
|
||||
<string name="backImageDescription">Slika pozadine kartice</string>
|
||||
<string name="photos">Slike</string>
|
||||
<string name="setFrontImage">Postavi naslovnu sliku</string>
|
||||
<string name="setBackImage">Vrati sliku</string>
|
||||
<string name="removeImage">Ukloni sliku</string>
|
||||
<string name="takePhoto">Slikaj</string>
|
||||
<string name="updateBarcodeQuestionTitle">Ažurirati bar kod vrijednost\?</string>
|
||||
<string name="updateBarcodeQuestionText">Promijenio si auto. Da li želite ažurirati bar kod koristiti istu vrijednost\?</string>
|
||||
<string name="yes">Da</string>
|
||||
<string name="no">Ne.</string>
|
||||
<string name="passwordRequired">Upišite šifru</string>
|
||||
<string name="failedGeneratingShareURL">Ne mogu generisati oštriji URL. Molim vas, prijavite ovo.</string>
|
||||
<string name="turn_flashlight_on">Upali lampu</string>
|
||||
<string name="turn_flashlight_off">Ugasi lampu</string>
|
||||
<string name="settings_locale">Jezik</string>
|
||||
<string name="settings_system_locale">Sistem</string>
|
||||
<string name="settings_theme_color">Boja teme</string>
|
||||
<string name="settings_catima_theme">Catima</string>
|
||||
<string name="settings_pink_theme">Ružičasto</string>
|
||||
<string name="settings_magenta_theme">Ljubičasto</string>
|
||||
<string name="settings_violet_theme">Ljubičasto</string>
|
||||
<string name="settings_blue_theme">Plavo</string>
|
||||
<string name="settings_sky_blue_theme">Nebo plavo</string>
|
||||
<string name="settings_green_theme">Zeleno</string>
|
||||
<string name="settings_brown_theme">Braun</string>
|
||||
<string name="sort">Poništi sortiranje</string>
|
||||
<string name="toggleMoreInfo">Uključi savjete</string>
|
||||
<string name="swipeToSwitchImages">Swipe ili long press za prebacivanje slika</string>
|
||||
<string name="sort_by_name">Ime</string>
|
||||
<string name="sort_by_most_recently_used">Nedavno Korišten</string>
|
||||
<string name="sort_by_expiry">Sajam</string>
|
||||
<string name="reverse">Rikverc</string>
|
||||
<string name="sort_by">Sortiraj</string>
|
||||
<string name="noCardExistsError">Nisam mogao pronaći karticu</string>
|
||||
<string name="noStoreError">Nije uneseno ime</string>
|
||||
<string name="card_ids_copied">Kopiran ID kartice(s)</string>
|
||||
<string name="noCardsMessage">Dodaj prvo kartu</string>
|
||||
<string name="addCardTitle">Dodaj Kartu</string>
|
||||
<string name="editCardTitle">Izmijeni Karticu</string>
|
||||
<string name="sendLabel">Pošalji…</string>
|
||||
<string name="share">Podijeli</string>
|
||||
<string name="copy_to_clipboard">Kopiraj ID u clipboard</string>
|
||||
<string name="deleteConfirmation">Izbriši trajno ovu karticu\?</string>
|
||||
<string name="unlockScreen">Odblokalna Rotacija</string>
|
||||
<string name="confirm">Potvrdi</string>
|
||||
<string name="delete">Obriši</string>
|
||||
<string name="edit">Izmijeni</string>
|
||||
</resources>
|
||||
@@ -37,7 +37,7 @@
|
||||
<string name="importOptionApplicationExplanation">K otevření souboru použijte libovolnou aplikaci nebo svého oblíbeného správce souborů.</string>
|
||||
<string name="importOptionApplicationButton">Použijte jinou aplikaci</string>
|
||||
<string name="about">O aplikaci</string>
|
||||
<string name="app_license">Copylefted libre software, licencovaný GPLv3+.</string>
|
||||
<string name="app_license">Copylefted libre software, licencovaný GPLv3+</string>
|
||||
<string name="about_title_fmt">O aplikaci <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Verze: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Informace o revizi: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
@@ -55,7 +55,7 @@
|
||||
<string name="app_resources">Zdroje třetích stran Libre: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="app_libraries">Libre knihovny třetích stran: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_copyright_old">Na základě Loyalty Card Keychain
|
||||
\ncopyright © 2016–2020 Branden Archer.</string>
|
||||
\ncopyright © 2016–2020 Branden Archer</string>
|
||||
<string name="exportOptionExplanation">Data budou zapsána na místo podle vašeho výběru.</string>
|
||||
<string name="failedParsingImportUriError">Nelze analyzovat import URI</string>
|
||||
<string name="noCardExistsError">Nelze najít kartu</string>
|
||||
@@ -138,19 +138,19 @@
|
||||
<string name="setBarcodeId">Nastavení hodnoty čárového kódu</string>
|
||||
<string name="sameAsCardId">Stejné jako ID karty</string>
|
||||
<string name="importVoucherVaultMessage">Vyberte svůj <i>vouchervault.json</i> export z Voucher Vault, který chcete importovat.
|
||||
\nNebo jej vytvořte tak, že nejprve stisknete tlačítko Exportovat v aplikaci Voucher Vault.</string>
|
||||
\nVytvořte jej tak, že nejprve stisknete tlačítko Exportovat v aplikaci Voucher Vault.</string>
|
||||
<string name="importVoucherVault">Import z Voucher Vault</string>
|
||||
<string name="importStocardMessage">Vyberte svůj <i>***-sync.zip</i> export z aplikace Stocard, který chcete importovat.
|
||||
\nNebo jej získáte zasláním e-mailu na adresu support@stocardapp.com s žádostí o export vašich dat.</string>
|
||||
\nZískejte ji zasláním e-mailu na adresu support@stocardapp.com s žádostí o export vašich dat.</string>
|
||||
<string name="importStocard">Import ze Stocard</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Vyberte export <i>LoyaltyCardKeychain.csv</i> z klíčenky věrnostních karet, který chcete importovat.
|
||||
\nNebo jej vytvořte z nabídky Import/Export v Loyalty Card Keychain tak, že tam nejprve stisknete tlačítko Exportovat.</string>
|
||||
\nVytvořte jej z nabídky Import/Export v Loyalty Card Keychain tak, že tam nejprve stisknete tlačítko Exportovat.</string>
|
||||
<string name="importLoyaltyCardKeychain">Import z Loyalty Card Keychain</string>
|
||||
<string name="importFidmeMessage">Vyberte svůj <i>fidme-export-request-xxxxxx.zip</i> export z FidMe k importu a poté vyberte typy čárových kódů ručně.
|
||||
\nNebo jej vytvořte ze svého profilu FidMe tak, že nejprve zvolíte možnost Ochrana dat a poté stisknete tlačítko Extract moje data.</string>
|
||||
<string name="importFidmeMessage">Vyberte svůj <i>fidme-export-request-xxxxxx.zip</i> export z FidMe k importu a poté vyberte typy čárových kódů ručně.
|
||||
\nVytvořte jej ze svého profilu FidMe tak, že nejprve zvolíte možnost Ochrana dat a poté stisknete tlačítko Extract moje data.</string>
|
||||
<string name="importFidme">Import z FidMe</string>
|
||||
<string name="importCatimaMessage">Vyberte export <i>catima.zip</i> z programu Catima, který chcete importovat.
|
||||
\nNebo jej vytvořte z nabídky Import/Export jiné aplikace Catima tak, že v ní nejprve stisknete tlačítko Exportovat.</string>
|
||||
\nVytvořte jej z nabídky Import/Export jiné aplikace Catima tak, že v ní nejprve stisknete tlačítko Exportovat.</string>
|
||||
<string name="importCatima">Import z Catima</string>
|
||||
<string name="accept">Přijmout</string>
|
||||
<string name="privacy_policy_popup_text">Oznámení o zásadách ochrany osobních údajů (vyžadováno některými obchody s aplikacemi):
|
||||
@@ -184,7 +184,7 @@
|
||||
<string name="exportSuccessful">Data karty exportována</string>
|
||||
<string name="settings_display_barcode_max_brightness">Rozjasněné zobrazení čárového kódu</string>
|
||||
<string name="starImage">Oblíbená hvězda</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019–<xliff:g>%d</xliff:g> Sylvia van Os.</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019–<xliff:g>%d</xliff:g> Sylvia van Os</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one">Vybrána <xliff:g>%d</xliff:g> karta</item>
|
||||
<item quantity="few">Vybrány <xliff:g>%d</xliff:g> karty</item>
|
||||
@@ -192,4 +192,24 @@
|
||||
</plurals>
|
||||
<string name="app_contributors">Přispěli: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="noGroupCards">Tato skupina neobsahuje žádné karty</string>
|
||||
<string name="sort_by">Seřadit podle</string>
|
||||
<string name="reverse">Obrátit</string>
|
||||
<string name="sort_by_balance">Zůstatek</string>
|
||||
<string name="sort_by_expiry">Vypršení</string>
|
||||
<string name="sort_by_most_recently_used">Naposledy použité</string>
|
||||
<string name="sort_by_name">Název</string>
|
||||
<string name="swipeToSwitchImages">Přejetím nebo dlouhým stisknutím přepínáte obrázky</string>
|
||||
<string name="toggleMoreInfo">Přepnout zobrazení dalších informací</string>
|
||||
<string name="sort">Seřadit</string>
|
||||
<string name="barcodeImageDescriptionWithType">Obrázek čárového kódu karty typu <xliff:g>%s</xliff:g></string>
|
||||
<string name="version_history">Historie verzí</string>
|
||||
<string name="rate_this_app">Ohodnoťte tuto aplikaci</string>
|
||||
<string name="and_data_usage">a využití dat</string>
|
||||
<string name="credits">Kredity</string>
|
||||
<string name="on_github">na GitHubu</string>
|
||||
<string name="source_repository">Úložiště zdrojů</string>
|
||||
<string name="license">Licence</string>
|
||||
<string name="help_translate_this_app">Pomozte s překladem této aplikace</string>
|
||||
<string name="report_error">Nahlásit chybu</string>
|
||||
<string name="on_google_play">na Google Play</string>
|
||||
</resources>
|
||||
@@ -36,4 +36,54 @@
|
||||
</plurals>
|
||||
<string name="action_add">Tilføj</string>
|
||||
<string name="action_search">Søg</string>
|
||||
<string name="importExport">Import/eksport</string>
|
||||
<string name="exportName">Eksport</string>
|
||||
<string name="importExportHelp">Hvis du sikkerhedskopierer dine kort, kan du flytte dem til en anden enhed.</string>
|
||||
<string name="importSuccessfulTitle">Importeret</string>
|
||||
<string name="importFailedTitle">Import mislykkedes</string>
|
||||
<string name="importFailed">Kunne ikke importere kort</string>
|
||||
<string name="exportSuccessfulTitle">Eksporteret</string>
|
||||
<string name="exportFailedTitle">Eksport mislykkedes</string>
|
||||
<string name="exportFailed">Kunne ikke eksportere kort</string>
|
||||
<string name="importing">Importere…</string>
|
||||
<string name="exporting">Eksportere…</string>
|
||||
<string name="settings_dark_theme">Mørk</string>
|
||||
<string name="settings_light_theme">Lys</string>
|
||||
<string name="settings_theme">Tema</string>
|
||||
<string name="settings_category_title_ui">Brugergrænseflade</string>
|
||||
<string name="settings">Indstillinger</string>
|
||||
<string name="starImage">Favorit stjerne</string>
|
||||
<string name="thumbnailDescription">Miniaturebillede til kort</string>
|
||||
<string name="copy_to_clipboard_toast">Kort-ID kopieret til udklipsholderen</string>
|
||||
<string name="enterBarcodeInstructions">Indtast kortets ID, og vælg enten kortets stregkodetype nedenfor, eller \"Dette kort har ingen stregkode\".</string>
|
||||
<string name="selectBarcodeTitle">Vælg stregkode</string>
|
||||
<string name="app_copyright_old">Baseret på Loyalty Card Keychain
|
||||
\ncopyright © 2016-2020 Branden Archer.</string>
|
||||
<string name="about">Om</string>
|
||||
<string name="importOptionApplicationButton">Brug en anden app</string>
|
||||
<string name="importOptionApplicationExplanation">Brug en hvilken som helst app eller din foretrukne filhåndtering til at åbne en fil.</string>
|
||||
<string name="importOptionApplicationTitle">Brug en anden app</string>
|
||||
<string name="noCardsMessage">Tilføj først et kort</string>
|
||||
<string name="cardShortcut">Kort genvej</string>
|
||||
<string name="importOptionFilesystemButton">Fra filsystemet</string>
|
||||
<string name="importOptionFilesystemExplanation">Vælg en bestemt fil fra filsystemet.</string>
|
||||
<string name="importOptionFilesystemTitle">Import fra filsystem</string>
|
||||
<string name="exportOptionExplanation">Dataene skrives til en placering efter eget valg.</string>
|
||||
<string name="noExternalStoragePermissionError">Giv først tilladelse til ekstern lagring til at importere eller eksportere kort</string>
|
||||
<string name="failedParsingImportUriError">Kunne ikke analysere import-URI\'en</string>
|
||||
<string name="noCardExistsError">Kunne ikke finde kort</string>
|
||||
<string name="noCardIdError">Der er ikke angivet noget kort-ID</string>
|
||||
<string name="noStoreError">Intet navn angivet</string>
|
||||
<string name="deleteConfirmationGroup">Slet gruppe\?</string>
|
||||
<string name="all">Alle</string>
|
||||
<string name="noGroupCards">Denne gruppe indeholder ikke nogen kort</string>
|
||||
<string name="noGroups">Klik på + plus-knappen for først at tilføje grupper til kategorisering.</string>
|
||||
<string name="groups">Grupper</string>
|
||||
<string name="enter_group_name">Indtast gruppenavn</string>
|
||||
<string name="exportSuccessful">Eksporterede kortdata</string>
|
||||
<string name="importSuccessful">Kortdata importeret</string>
|
||||
<string name="intent_import_card_from_url_share_text">Jeg vil dele et kort med jer</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Forebyg låseskærm</string>
|
||||
<string name="settings_keep_screen_on">LHold skærm tændt</string>
|
||||
<string name="settings_lock_barcode_orientation">Lås stregkode-orientering</string>
|
||||
</resources>
|
||||
@@ -63,7 +63,7 @@
|
||||
<string name="settings_dark_theme">Dunkel</string>
|
||||
<string name="settings_light_theme">Hell</string>
|
||||
<string name="settings_system_theme">System</string>
|
||||
<string name="settings_theme">Theme</string>
|
||||
<string name="settings_theme">Farbschema</string>
|
||||
<string name="enterBarcodeInstructions">Gib die Kartennummer ein und wähle entweder den Barcode-Typ unten oder wähle \"Diese Karte hat keinen Barcode\" aus.</string>
|
||||
<string name="app_copyright_old">Basierend auf Loyalty Card Keychain
|
||||
\nCopyright © 2016-2020 Branden Archer.</string>
|
||||
@@ -191,4 +191,11 @@
|
||||
<string name="toggleMoreInfo">Umschalten, um weitere Informationen anzuzeigen</string>
|
||||
<string name="barcodeImageDescriptionWithType">Bild des Kartenstrichcodes des Typs <xliff:g>%s</xliff:g></string>
|
||||
<string name="swipeToSwitchImages">Wischen oder langes Drücken zum Wechseln der Bilder</string>
|
||||
<string name="sort_by">Sortieren nach</string>
|
||||
<string name="sort_by_balance">Kontostand</string>
|
||||
<string name="sort_by_expiry">Ablaufdatum</string>
|
||||
<string name="sort_by_most_recently_used">Zuletzt verwendet</string>
|
||||
<string name="sort_by_name">Name</string>
|
||||
<string name="sort">Sortieren</string>
|
||||
<string name="reverse">Umgekehrt</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">Ajouter</string>
|
||||
<string name="noGiftCards">Cliquez sur le bouton + plus pour ajouter une carte, ou importez-en d’abord depuis le menu ⋮</string>
|
||||
<string name="noGiftCards">Cliquez sur le bouton + plus pour ajouter une carte, ou importez les depuis le menu ⋮</string>
|
||||
<string name="storeName">Nom</string>
|
||||
<string name="note">Notes</string>
|
||||
<string name="cardId">Numéro</string>
|
||||
@@ -42,7 +42,7 @@
|
||||
<string name="importOptionApplicationExplanation">Utilisez le gestionnaire de fichiers de votre choix pour importer un fichier.</string>
|
||||
<string name="importOptionApplicationButton">Utiliser une autre application</string>
|
||||
<string name="about">À propos</string>
|
||||
<string name="app_license">Logiciel libre à copyleft, sous licence GPLv3+.</string>
|
||||
<string name="app_license">Logiciel libre à copyleft, sous licence GPLv3+</string>
|
||||
<string name="about_title_fmt">À propos de <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Version : <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Notes de version : <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
@@ -62,7 +62,7 @@
|
||||
<string name="settings_theme">Thème</string>
|
||||
<string name="enterBarcodeInstructions">Entrez l’identifiant de la carte et choisissez le type de code-barres ci-dessous, ou « Cette carte n’a pas de code-barres ».</string>
|
||||
<string name="app_copyright_old">Basé sur Loyalty Card Keychain
|
||||
\ncopyright © 2016-2020 Branden Archer.</string>
|
||||
\ncopyright © 2016-2020 Branden Archer</string>
|
||||
<string name="exportOptionExplanation">Les données seront exportées vers l\'emplacement de votre choix.</string>
|
||||
<string name="failedParsingImportUriError">Impossible d\'analyser l\'URI d\'importation</string>
|
||||
<string name="share">Partager</string>
|
||||
@@ -116,16 +116,16 @@
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Empêcher le verrouillage de l’écran</string>
|
||||
<string name="settings_keep_screen_on">Garder l’écran allumé</string>
|
||||
<string name="importVoucherVaultMessage">Sélectionnez votre exportation <i>vouchervault.json</i> de Voucher Vault à importer.
|
||||
\nOu créez-la en appuyant d’abord sur Exporter dans Voucher Vault.</string>
|
||||
\nCréez-la en appuyant d’abord sur Exporter dans Voucher Vault.</string>
|
||||
<string name="importVoucherVault">Importer depuis Voucher Vault</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Sélectionnez votre exportation <i>LoyaltyCardKeychain.csv</i> à partir de Loyalty Card Keychain pour l’importer.
|
||||
\nOu créez-la à partir du menu Importer/Exporter du Loyalty Card Keychain en appuyant d’abord sur Exporter.</string>
|
||||
\nCréez-la à partir du menu Importer/Exporter du Loyalty Card Keychain en appuyant d’abord sur Exporter.</string>
|
||||
<string name="importLoyaltyCardKeychain">Importer depuis Loyalty Card Keychain</string>
|
||||
<string name="importFidmeMessage">Sélectionnez votre exportation <i>fidme-export-request-xxxxxx.zip</i> de FidMe pour l’importer, puis sélectionnez manuellement les types de codes-barres.
|
||||
\nOu créez-la à partir de votre profil FidMe en choisissant Protection des données, puis en cliquant sur Extraire mes données d’abord.</string>
|
||||
\nCréez-la à partir de votre profil FidMe en choisissant Protection des données, puis en cliquant sur Extraire mes données d’abord.</string>
|
||||
<string name="importFidme">Importer depuis FidMe</string>
|
||||
<string name="importCatimaMessage">Sélectionnez votre exportation <i>catima.zip</i> depuis Catima à importer.
|
||||
\nOu créez-la à partir du menu Importer/Exporter d’une autre application Catima en appuyant d’abord sur Exporter.</string>
|
||||
\nCréez-la à partir du menu Importer/Exporter d’une autre application Catima en appuyant d’abord sur Exporter.</string>
|
||||
<string name="importCatima">Importer depuis Catima</string>
|
||||
<string name="addFromImage">Sélectionner dans la galerie</string>
|
||||
<string name="errorReadingImage">Impossible de lire l\'image</string>
|
||||
@@ -138,7 +138,7 @@
|
||||
<string name="wrongValueForBarcodeType">La valeur n\'est pas valide pour le type de code-barres sélectionné</string>
|
||||
<string name="app_resources">Ressources tierces libres : <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="app_libraries">Bibliothèques tierces libres : <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019–<xliff:g>%d</xliff:g> Sylvia van Os.</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019–<xliff:g>%d</xliff:g> Sylvia van Os</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Je veux partager des cartes avec vous</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">Identifiants des cartes copiés dans le presse-papiers</string>
|
||||
<string name="card_ids_copied">Num. de la carte copié(s)</string>
|
||||
@@ -155,7 +155,7 @@
|
||||
<string name="frontImageDescription">Image recto de la carte</string>
|
||||
<string name="passwordRequired">Veuillez entrer le mot de passe</string>
|
||||
<string name="importStocardMessage">Sélectionnez votre exportation <i>***-sync.zip</i> de Stocard pour l’importer.
|
||||
\nVous pouvez aussi l’obtenir en envoyant un courriel à support@stocardapp.com pour demander une exportation de vos données.</string>
|
||||
\nVous pouvez l’obtenir en envoyant un courriel à support@stocardapp.com pour demander une exportation de vos données.</string>
|
||||
<string name="importStocard">Importer depuis Stocard</string>
|
||||
<string name="turn_flashlight_off">Éteindre la lampe de poche</string>
|
||||
<string name="turn_flashlight_on">Allumer la lampe de poche</string>
|
||||
@@ -191,4 +191,21 @@
|
||||
<string name="toggleMoreInfo">Activer/désactiver l\'affichage de plus d\'infos</string>
|
||||
<string name="barcodeImageDescriptionWithType">Image du code-barres de la carte de type <xliff:g>%s</xliff:g></string>
|
||||
<string name="swipeToSwitchImages">Balayez ou appuyez longuement pour changer d\'image</string>
|
||||
<string name="sort">Trier</string>
|
||||
<string name="sort_by">Trier par</string>
|
||||
<string name="reverse">Inversé</string>
|
||||
<string name="sort_by_expiry">Date d\'expiration</string>
|
||||
<string name="sort_by_most_recently_used">Les plus récemment utilisées</string>
|
||||
<string name="sort_by_name">Nom</string>
|
||||
<string name="sort_by_balance">Solde</string>
|
||||
<string name="report_error">Signaler une erreur</string>
|
||||
<string name="on_google_play">sur Google Play</string>
|
||||
<string name="rate_this_app">Notez cette app</string>
|
||||
<string name="and_data_usage">utilisation des données</string>
|
||||
<string name="on_github">sur GitHub</string>
|
||||
<string name="source_repository">Dépôt source</string>
|
||||
<string name="license">Licence</string>
|
||||
<string name="help_translate_this_app">Aidez à traduire cette app</string>
|
||||
<string name="credits">Contributeurs</string>
|
||||
<string name="version_history">Historique des versions</string>
|
||||
</resources>
|
||||
@@ -191,4 +191,11 @@
|
||||
<string name="toggleMoreInfo">Attiva/disattiva la visualizzazione di altre informazioni</string>
|
||||
<string name="barcodeImageDescriptionWithType">Immagine del codice a barre della carta del tipo <xliff:g>%s</xliff:g></string>
|
||||
<string name="swipeToSwitchImages">Scorri o premi a lungo per cambiare immagine</string>
|
||||
<string name="sort_by">Ordina per</string>
|
||||
<string name="reverse">Inverti</string>
|
||||
<string name="sort_by_balance">Saldo</string>
|
||||
<string name="sort_by_expiry">Scadenza</string>
|
||||
<string name="sort_by_most_recently_used">Usate più di recente</string>
|
||||
<string name="sort_by_name">Nome</string>
|
||||
<string name="sort">Ordina</string>
|
||||
</resources>
|
||||
@@ -187,4 +187,10 @@
|
||||
<string name="settings_locale">言語</string>
|
||||
<string name="noGroupCards">このグループにはカードがありません</string>
|
||||
<string name="swipeToSwitchImages">画像を切り替えるには長押し、またはスワイプ</string>
|
||||
<string name="sort_by">並び替え</string>
|
||||
<string name="sort_by_balance">残高</string>
|
||||
<string name="sort_by_expiry">期限</string>
|
||||
<string name="sort_by_most_recently_used">最近使用したカード</string>
|
||||
<string name="sort_by_name">名前</string>
|
||||
<string name="sort">ソート</string>
|
||||
</resources>
|
||||
@@ -195,4 +195,11 @@
|
||||
<string name="toggleMoreInfo">Perjungti išsamios informacijos rodymą</string>
|
||||
<string name="barcodeImageDescriptionWithType"><xliff:g>%s</xliff:g> tipo kortelės brūkšninio kodo vaizdas</string>
|
||||
<string name="swipeToSwitchImages">Perbraukite arba ilgai palaikykite paspaudę, kad perjungtumėte vaizdus</string>
|
||||
<string name="sort_by">Rikiuoti pagal</string>
|
||||
<string name="reverse">Atvirkštinis</string>
|
||||
<string name="sort_by_balance">Balansas</string>
|
||||
<string name="sort_by_expiry">Galiojimo pabaiga</string>
|
||||
<string name="sort_by_most_recently_used">Vėliausiai naudota</string>
|
||||
<string name="sort_by_name">Pavadinimas</string>
|
||||
<string name="sort">Rikiuoti</string>
|
||||
</resources>
|
||||
@@ -11,7 +11,7 @@
|
||||
<string name="edit">Rediger</string>
|
||||
<string name="delete">Slett</string>
|
||||
<string name="confirm">Bekreft</string>
|
||||
<string name="lockScreen">Ingen rotering</string>
|
||||
<string name="lockScreen">Skru av rotering</string>
|
||||
<string name="unlockScreen">Skru på rotering</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="copy_to_clipboard">Kopier ID til utklippstavle</string>
|
||||
@@ -24,7 +24,7 @@
|
||||
<string name="noStoreError">Navn ikke angitt</string>
|
||||
<string name="noCardIdError">Ingen kort-ID innskrevet</string>
|
||||
<string name="noCardExistsError">Kunne ikke finne kort</string>
|
||||
<string name="importExport">Import/eksport</string>
|
||||
<string name="importExport">Importer/eksporter</string>
|
||||
<string name="exportName">Eksporter</string>
|
||||
<string name="importExportHelp">Sikkerhetskopiering av kort lar deg flytte dem til en annen enhet.</string>
|
||||
<string name="importSuccessfulTitle">Importert</string>
|
||||
@@ -40,11 +40,11 @@
|
||||
<string name="importOptionFilesystemTitle">Importer fra filsystem</string>
|
||||
<string name="importOptionFilesystemExplanation">Velg spesifikk fil fra filsystemet.</string>
|
||||
<string name="importOptionFilesystemButton">Fra filsystem</string>
|
||||
<string name="importOptionApplicationTitle">Bruk et annet program</string>
|
||||
<string name="importOptionApplicationExplanation">Bruk hvilket som helst program, eller din favoritt-filutforsker for å åpne en fil.</string>
|
||||
<string name="importOptionApplicationButton">Bruk et annet program</string>
|
||||
<string name="importOptionApplicationTitle">Bruk en annen app</string>
|
||||
<string name="importOptionApplicationExplanation">Bruk en hvilken som helst app, eller din favoritt-filutforsker for å åpne en fil.</string>
|
||||
<string name="importOptionApplicationButton">Bruk en annen app</string>
|
||||
<string name="about">Om</string>
|
||||
<string name="app_license">Gemenhetslig fri programvare, lisensiert GPLv3+.</string>
|
||||
<string name="app_license">Copyleft fri programvare, lisensiert under GPLv3+.</string>
|
||||
<string name="about_title_fmt">Om <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Versjon: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Utgivelsesinfo: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
@@ -74,13 +74,13 @@
|
||||
<string name="unstar">Fjern fra favoritter</string>
|
||||
<string name="star">Legg til i favoritter</string>
|
||||
<string name="noGroups">Klikk på «+»- (pluss)-tegnet for å legge til grupper for kategorisering først.</string>
|
||||
<string name="deleteConfirmationGroup">Slett gruppe\?</string>
|
||||
<string name="deleteConfirmationGroup">Slett gruppe?</string>
|
||||
<string name="all">Alle</string>
|
||||
<string name="groups">Grupper</string>
|
||||
<string name="enter_group_name">Skriv inn gruppenavn</string>
|
||||
<string name="noBarcode">Ingen strekkode</string>
|
||||
<string name="failedOpeningFileManager">Installer en filbehandler først.</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Forlat uten å lagre\?</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Forlat uten å lagre?</string>
|
||||
<string name="leaveWithoutSaveTitle">Avslutt</string>
|
||||
<string name="addManually">Skriv inn kort-ID manuelt</string>
|
||||
<string name="moveDown">Flytt nedover</string>
|
||||
@@ -106,13 +106,13 @@
|
||||
<string name="balance">Saldo</string>
|
||||
<string name="balancePoints"><xliff:g>%s</xliff:g> poeng</string>
|
||||
<string name="balanceSentence">Saldo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="chooseImportType">Importer data fra\?</string>
|
||||
<string name="chooseImportType">Importer data fra?</string>
|
||||
<string name="app_loyalty_card_keychain">Kundekortknippe</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Forhindre skjermlås</string>
|
||||
<string name="settings_keep_screen_on">Behold skjerm påslått</string>
|
||||
<string name="privacy_policy_popup_text">Personvernspraksis-notis (påkrevd av noen programbutikker):
|
||||
\n
|
||||
\nINGEN DATA SAMLES INN, noe alle kan bekreftes siden programmet vårt er fri programvare.</string>
|
||||
\nINGEN DATA SAMLES INN I DET HELE TATT, noe alle kan bekreftes siden programmet vårt er fri programvare.</string>
|
||||
<string name="accept">Godta</string>
|
||||
<string name="privacy_policy">Personvernspraksis</string>
|
||||
<string name="importFidme">Importer fra FidMe</string>
|
||||
@@ -132,8 +132,6 @@
|
||||
<string name="importLoyaltyCardKeychain">Importer fra Kundekortknippe</string>
|
||||
<string name="importFidmeMessage">Velg din <i>fidme-eksport-be-xxxxxx.zip</i> eksporter fra FidMe til å importere, og velg strekkode typer manuelt etterpå.
|
||||
\nEller lage den fra FidMe profil ved å velge Beskyttelse av Data og deretter trykke Trekke ut dataene mine første.</string>
|
||||
<string name="importCatimaMessage">Finn en fil som antagelig heter <i>Catima.csv</i> å importere.
|
||||
\nEller opprett den i Import/eksport-menyen i et annet Catima-program ved å trykke «Eksporter» der først.</string>
|
||||
<string name="settings_max_font_size_scale">Maks. skriftstørrelse</string>
|
||||
<string name="wrongValueForBarcodeType">Verdien er ikke gyldig for valgt strekkodetype</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Jeg vil dele noen kort med deg</string>
|
||||
@@ -142,10 +140,10 @@
|
||||
<string name="app_libraries">Frie tredjepartsbibliotek: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="card_ids_copied">Kopierte kort-ID(er)</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Opphavsrett © 2019–<xliff:g>%d</xliff:g> Sylvia van Os.</string>
|
||||
<string name="updateBarcodeQuestionText">Du har endret kortets ID. Ønsker du å også oppdatere strekkoden til samme verdi\?</string>
|
||||
<string name="updateBarcodeQuestionText">Du har endret kortets ID. Ønsker du å også oppdatere strekkoden til samme verdi?</string>
|
||||
<string name="no">Nei</string>
|
||||
<string name="yes">Ja</string>
|
||||
<string name="updateBarcodeQuestionTitle">Oppdater strekkodeverdi\?</string>
|
||||
<string name="updateBarcodeQuestionTitle">Oppdater strekkodeverdi?</string>
|
||||
<string name="takePhoto">Ta et bilde</string>
|
||||
<string name="removeImage">Fjern bilde</string>
|
||||
<string name="setBackImage">Sett bakside</string>
|
||||
@@ -162,10 +160,10 @@
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> kort valgt</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> korten valgt</item>
|
||||
</plurals>
|
||||
<string name="deleteConfirmation">Slett dette kortet for godt\?</string>
|
||||
<string name="deleteConfirmation">Slett dette kortet for godt?</string>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="one">Slett dette kortet for godt\?</item>
|
||||
<item quantity="other">Slett disse <xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%s</xliff:g> kortene for godt\?</item>
|
||||
<item quantity="one">Slett dette kortet for godt?</item>
|
||||
<item quantity="other">Slett disse <xliff:g xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">%s</xliff:g> kortene for godt?</item>
|
||||
</plurals>
|
||||
<string name="turn_flashlight_on">Skru på lommelykten</string>
|
||||
<string name="turn_flashlight_off">Skru av lommelykten</string>
|
||||
@@ -191,4 +189,21 @@
|
||||
<string name="toggleMoreInfo">Veksle visning av mer info</string>
|
||||
<string name="barcodeImageDescriptionWithType">Bilde av kortstrekkode av typen <xliff:g>%s</xliff:g></string>
|
||||
<string name="swipeToSwitchImages">Dra eller hold lenge for å bygge bilder</string>
|
||||
</resources>
|
||||
<string name="sort_by">Sorter etter</string>
|
||||
<string name="reverse">Vend</string>
|
||||
<string name="sort_by_balance">Saldo</string>
|
||||
<string name="sort_by_expiry">Utløp</string>
|
||||
<string name="sort_by_most_recently_used">Nyligst brukt</string>
|
||||
<string name="sort_by_name">Navn</string>
|
||||
<string name="sort">Sorter</string>
|
||||
<string name="help_translate_this_app">Hjelp med å oversette denne appen</string>
|
||||
<string name="license">Lisens</string>
|
||||
<string name="version_history">Versjonshistorikk</string>
|
||||
<string name="importCatimaMessage">Velg din <i>catima.zip</i> fra Catima å importere. Eller lag den fra Importer/Eksporter-menyen i en annen Catima-app ved å trykke på \"Eksporter\" der først</string>
|
||||
<string name="source_repository">Kildekode</string>
|
||||
<string name="on_github">på GitHub</string>
|
||||
<string name="and_data_usage">og bruk av data</string>
|
||||
<string name="rate_this_app">Vurder denne appen</string>
|
||||
<string name="on_google_play">på Google Play</string>
|
||||
<string name="report_error">Rapporter feil</string>
|
||||
</resources>
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
<string name="importOptionApplicationExplanation">Open een bestand middels een app of je favoriete bestandsbeheerder.</string>
|
||||
<string name="importOptionApplicationButton">Andere app gebruiken</string>
|
||||
<string name="about">Over</string>
|
||||
<string name="app_license">Vrije software, uitgebracht onder de GPLv3-licentie.</string>
|
||||
<string name="app_license">Vrije software, uitgebracht onder de GPLv3+-licentie</string>
|
||||
<string name="about_title_fmt">Over <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Versie: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Versie-informatie: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
@@ -74,8 +74,8 @@
|
||||
<string name="groups">Groepen</string>
|
||||
<string name="enter_group_name">Voer een groepsnaam in</string>
|
||||
<string name="starImage">Favoriete ster</string>
|
||||
<string name="app_copyright_old">Gebaseerd op Loyalty Card Keychain,
|
||||
\ncopyright ©2016–2020 Branden Archer.</string>
|
||||
<string name="app_copyright_old">Gebaseerd op Klantenkaartkluis,
|
||||
\ncopyright ©2016–2020 Branden Archer</string>
|
||||
<string name="unstar">Verwijderen uit favorieten</string>
|
||||
<string name="star">Toevoegen aan favorieten</string>
|
||||
<string name="addManually">Kaartnummer handmatig invoeren</string>
|
||||
@@ -138,7 +138,7 @@
|
||||
<string name="wrongValueForBarcodeType">Deze waarde komt niet overeen met het gekozen barcodetype</string>
|
||||
<string name="app_resources">Vrije externe bronnen: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="app_libraries">Vrije externe bibliotheken: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Auteursrecht © 2019–<xliff:g>%d</xliff:g> Sylvia van Os.</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Auteursrecht © 2019–<xliff:g>%d</xliff:g> Sylvia van Os</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Ik wil kaarten met je delen</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">De kaart-id\'s zijn gekopieerd naar het klembord</string>
|
||||
<string name="card_ids_copied">De kaart-id‘s zijn gekopieerd</string>
|
||||
@@ -191,4 +191,21 @@
|
||||
<string name="toggleMoreInfo">Meer informatie tonen/verbergen</string>
|
||||
<string name="barcodeImageDescriptionWithType">Afbeelding van de barcode, type <xliff:g>%s</xliff:g></string>
|
||||
<string name="swipeToSwitchImages">Veeg of houd lang ingedrukt om te bladeren</string>
|
||||
</resources>
|
||||
<string name="sort_by">Sorteren op</string>
|
||||
<string name="reverse">Omdraaien</string>
|
||||
<string name="sort_by_balance">Op saldo</string>
|
||||
<string name="sort_by_expiry">Op vervaldatum</string>
|
||||
<string name="sort_by_most_recently_used">Op onlangs gebruikt</string>
|
||||
<string name="sort_by_name">Op naam</string>
|
||||
<string name="sort">Sorteren</string>
|
||||
<string name="report_error">Fout melden</string>
|
||||
<string name="on_google_play">in Google Play</string>
|
||||
<string name="rate_this_app">Beoordeel deze app</string>
|
||||
<string name="and_data_usage">en gegevensgebruik</string>
|
||||
<string name="on_github">op GitHub</string>
|
||||
<string name="source_repository">Broncode</string>
|
||||
<string name="license">Licentie</string>
|
||||
<string name="help_translate_this_app">Help deze app te vertalen</string>
|
||||
<string name="credits">Met dank aan</string>
|
||||
<string name="version_history">Versiegeschiedenis</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,4 +1,27 @@
|
||||
<resources
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
|
||||
</resources>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="barcodeType">Tip cod de bare</string>
|
||||
<string name="cardId">Cardului ID</string>
|
||||
<string name="note">Notă</string>
|
||||
<string name="storeName">Numele</string>
|
||||
<string name="noMatchingGiftCards">Nu am găsit nimic. Încearcă să schimbi căutarea.</string>
|
||||
<string name="noGiftCards">Faceți clic pe butonul + plus pentru a adăuga o carte sau importați mai întâi câteva din meniul ⋮.</string>
|
||||
<string name="action_add">Adăugați</string>
|
||||
<string name="action_search">Căutare</string>
|
||||
<string name="sendLabel">Trimiteți…</string>
|
||||
<string name="share">Împărtășiți</string>
|
||||
<string name="copy_to_clipboard">Copiați ID-ul în clipboard</string>
|
||||
<string name="deleteConfirmation">Să șterg definitiv acest card\?</string>
|
||||
<string name="deleteTitle">Ștergeți cardul</string>
|
||||
<string name="unlockScreen">Deblocarea rotației</string>
|
||||
<string name="lockScreen">Rotația blocurilor</string>
|
||||
<string name="confirm">Confirmați</string>
|
||||
<string name="delete">Ștergeți</string>
|
||||
<string name="edit">Editați</string>
|
||||
<string name="save">Salvați</string>
|
||||
<string name="cancel">Anulează</string>
|
||||
<string name="unstar">Eliminați din favorite</string>
|
||||
<string name="star">Adaugă la favorite</string>
|
||||
<string name="noBarcode">Fără cod de bare</string>
|
||||
<string name="barcodeNoBarcode">Acest card nu are cod de bare</string>
|
||||
</resources>
|
||||
@@ -9,7 +9,7 @@
|
||||
<string name="cardId">Номер карты</string>
|
||||
<string name="barcodeType">Тип штрих-кода</string>
|
||||
<string name="barcodeNoBarcode">Эта карта без штрих-кода</string>
|
||||
<string name="cancel">Отменить</string>
|
||||
<string name="cancel">Отмена</string>
|
||||
<string name="save">Сохранить</string>
|
||||
<string name="edit">Изменить</string>
|
||||
<string name="delete">Удалить карту</string>
|
||||
@@ -49,7 +49,7 @@
|
||||
<string name="importOptionApplicationExplanation">Используйте любое приложение или ваш любимый файловый менеджер, чтобы открыть файл.</string>
|
||||
<string name="importOptionApplicationButton">Использовать другое приложение</string>
|
||||
<string name="about">О приложении</string>
|
||||
<string name="app_license">Авторское лево свободного программного обеспечения, лицензия GPLv3+.</string>
|
||||
<string name="app_license">Авторское лево свободного программного обеспечения, лицензия GPLv3+</string>
|
||||
<string name="about_title_fmt">О приложении <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Версия: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Информация о версиях: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
@@ -74,7 +74,7 @@
|
||||
<string name="importSuccessful">Данные карт успешно импортированы</string>
|
||||
<string name="starImage">Звезда избранного</string>
|
||||
<string name="app_copyright_old">На основе Loyalty Card Keychain
|
||||
\nавторские права © 2016–2020 Branden Archer.</string>
|
||||
\nавторские права © 2016–2020 Branden Archer</string>
|
||||
<string name="unstar">Удалить из избранного</string>
|
||||
<string name="star">Добавить в избранное</string>
|
||||
<string name="noBarcode">Нет штрих-кода</string>
|
||||
@@ -117,16 +117,16 @@
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> карт</item>
|
||||
</plurals>
|
||||
<string name="accept">Принять</string>
|
||||
<string name="importVoucherVaultMessage">Выберите файл для импортирования, именуемый <i>vouchervault.json</i>.
|
||||
\nФайл экспорта можно создать в приложении Voucher Vault, нажав кнопку \"Экспорт\".</string>
|
||||
<string name="importVoucherVaultMessage">Выберите для импортирования файл <i>vouchervault.json</i>.
|
||||
\nФайл можно создать в приложении Voucher Vault, нажав кнопку \"Экспорт\".</string>
|
||||
<string name="importVoucherVault">Импорт из Voucher Vault</string>
|
||||
<string name="importFidmeMessage">Выберите файл для импортирования, именуемый <i>fidme-export-request-xxxxxx.zip</i>, а затем вручную укажите типы штрих-кодов.
|
||||
\nФайл экспорта можно создать в приложении FidMe, перейдя в свой профиль, выбрав функцию \"Защита данных\", и затем нажав кнопку \"Извлечь мои данные\".</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Выберите файл экспорта, именуемый <i>LoyaltyCardKeychain.csv</i>.
|
||||
\nФайл экспорта можно создать в приложении Loyalty Card Keychain, перейдя в меню \"Импорт/Экспорт\" и нажав кнопку \"Экспорт\".</string>
|
||||
<string name="importFidmeMessage">Выберите для импортирования файл <i>fidme-export-request-xxxxxx.zip</i>, а затем вручную укажите типы штрих-кодов.
|
||||
\nФайл можно создать в приложении FidMe, перейдя в свой профиль, выбрав функцию \"Защита данных\", и затем нажав кнопку \"Извлечь мои данные\".</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Выберите для импортирования файл <i>LoyaltyCardKeychain.csv</i>.
|
||||
\nФайл можно создать в приложении Loyalty Card Keychain, перейдя в меню \"Импорт/Экспорт\" и нажав кнопку \"Экспорт\".</string>
|
||||
<string name="importLoyaltyCardKeychain">Импорт из Loyalty Card Keychain</string>
|
||||
<string name="importCatimaMessage">Выберите файл для импортирования, именуемый <i>Catima.zip</i>.
|
||||
\nФайл экспорта можно создать в другой копии Catima, перейдя в меню \"Импорт/Экспорт\" и нажав кнопку \"Экспорт\".</string>
|
||||
<string name="importCatimaMessage">Выберите для импортирования файл <i>Catima.zip</i>.
|
||||
\nФайл можно создать в другой копии Catima, перейдя в меню \"Импорт/Экспорт\" и нажав кнопку \"Экспорт\".</string>
|
||||
<string name="importFidme">Импорт из FidMe</string>
|
||||
<string name="importCatima">Импорт из Catima</string>
|
||||
<string name="errorReadingImage">Невозможно считать изображение</string>
|
||||
@@ -140,7 +140,7 @@
|
||||
<string name="wrongValueForBarcodeType">Недопустимое значение для выбранного типа штрих-кода</string>
|
||||
<string name="app_resources">Свободные сторонние ресурсы: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="app_libraries">Свободные сторонние библиотеки: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Авторские права © 2019–<xliff:g>%d</xliff:g> Sylvia van Os.</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Авторские права © 2019–<xliff:g>%d</xliff:g> Sylvia van Os</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Поделиться картами</string>
|
||||
<string name="card_ids_copied">Скопированные номера карт</string>
|
||||
<string name="copy_to_clipboard_multiple_toast">Номера карт скопированы в буфер обмена</string>
|
||||
@@ -155,7 +155,7 @@
|
||||
<string name="backImageDescription">Задняя сторона карты</string>
|
||||
<string name="frontImageDescription">Лицевая сторона карты</string>
|
||||
<string name="photos">Фотографии</string>
|
||||
<string name="importStocardMessage">Выберите файл <i>***-sync.zip</i> для импортирования.
|
||||
<string name="importStocardMessage">Выберите для импортирования файл <i>***-sync.zip</i>.
|
||||
\nЭтот файл можно получить по электронной почте от support@stocardapp.com, предварительно запросив экспорт ваших данных.</string>
|
||||
<string name="passwordRequired">Введите пароль</string>
|
||||
<string name="importStocard">Импорт из Stocard</string>
|
||||
@@ -199,4 +199,21 @@
|
||||
<string name="barcodeImageDescriptionWithType">Изображение штрих-кода карты типа <xliff:g>%s</xliff:g></string>
|
||||
<string name="toggleMoreInfo">Переключение отображения дополнительной информации</string>
|
||||
<string name="swipeToSwitchImages">Смахивание или долгое нажатие для переключения изображений</string>
|
||||
<string name="sort_by_expiry">Срок действия</string>
|
||||
<string name="sort_by">Сортировать по</string>
|
||||
<string name="reverse">Обратный порядок</string>
|
||||
<string name="sort_by_balance">Баланс</string>
|
||||
<string name="sort_by_most_recently_used">Частота использования</string>
|
||||
<string name="sort_by_name">Название</string>
|
||||
<string name="sort">Сортировка</string>
|
||||
<string name="credits">Благодарности</string>
|
||||
<string name="version_history">История версий</string>
|
||||
<string name="on_github">на GitHub</string>
|
||||
<string name="rate_this_app">Оценить приложение</string>
|
||||
<string name="and_data_usage">и использование данных</string>
|
||||
<string name="report_error">Отчёт об ошибке</string>
|
||||
<string name="on_google_play">в Google Play</string>
|
||||
<string name="source_repository">Исходный код</string>
|
||||
<string name="license">Лицензия</string>
|
||||
<string name="help_translate_this_app">Помощь в переводе приложения</string>
|
||||
</resources>
|
||||
@@ -35,7 +35,7 @@
|
||||
<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="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>
|
||||
@@ -61,4 +61,44 @@
|
||||
<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="action_search">Vyhľadávanie</string>
|
||||
<string name="chooseImportType">Importovať údaje z\?</string>
|
||||
<string name="points">Body</string>
|
||||
<string name="currency">Mena</string>
|
||||
<string name="balance">Vyváženie</string>
|
||||
<string name="errorReadingImage">Obrázok sa nepodarilo prečítať</string>
|
||||
<string name="noBarcodeFound">Nenašiel sa žiadny čiarový kód</string>
|
||||
<string name="moveBarcodeToCenterOfScreen">Vycentrovanie čiarového kódu na obrazovke</string>
|
||||
<string name="moveBarcodeToTopOfScreen">Presun čiarového kódu do hornej časti obrazovky</string>
|
||||
<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="leaveWithoutSaveConfirmation">Odísť bez uloženia\?</string>
|
||||
<string name="leaveWithoutSaveTitle">Výstup</string>
|
||||
<string name="moveDown">Pohyb smerom nadol</string>
|
||||
<string name="moveUp">Pohyb smerom nahor</string>
|
||||
<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="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="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_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 karty</string>
|
||||
<string name="unstar">Odstrániť z obľúbených</string>
|
||||
<string name="settings_dark_theme">Tmavé</string>
|
||||
<string name="settings_light_theme">Svetlo</string>
|
||||
<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="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>
|
||||
</resources>
|
||||
@@ -190,4 +190,12 @@
|
||||
<string name="noGroupCards">Denna grupp innehåller inga kort</string>
|
||||
<string name="toggleMoreInfo">Växla mellan att visa mer info</string>
|
||||
<string name="barcodeImageDescriptionWithType">Bild av kortstreckkod av typen <xliff:g>%s</xliff:g></string>
|
||||
<string name="swipeToSwitchImages">Svep eller tryck länge för att växla bild</string>
|
||||
<string name="reverse">Vänd ordning</string>
|
||||
<string name="sort_by">Sortera efter</string>
|
||||
<string name="sort_by_balance">Saldo</string>
|
||||
<string name="sort_by_expiry">Förfallodag</string>
|
||||
<string name="sort_by_most_recently_used">Senast använda</string>
|
||||
<string name="sort_by_name">Namn</string>
|
||||
<string name="sort">Sortera</string>
|
||||
</resources>
|
||||
@@ -38,19 +38,19 @@
|
||||
<string name="sameAsCardId">Kart numarasıyla aynı</string>
|
||||
<string name="barcodeId">Barkod değeri</string>
|
||||
<string name="importVoucherVaultMessage">İçe aktarmak için Voucher Vault\'tan dışa aktardığınız <i>vouchervault.json</i> dosyasını seçin.
|
||||
\nVeya önce Voucher Vault\'ta \"Dışa aktar\" düğmesine basarak bir tane oluşturun.</string>
|
||||
\nÖnce Voucher Vault\'ta \"Dışa aktar\" düğmesine basarak bir tane oluşturun.</string>
|
||||
<string name="importVoucherVault">Voucher Vault\'tan içe aktar</string>
|
||||
<string name="importStocardMessage">İçe aktarmak için Stocard\'dan dışa aktardığınız <i>***-sync.zip</i> dosyasını seçin.
|
||||
\nVeya support@stocardapp.com adresine e-posta göndererek verilerinizin dışa aktarılmasını isteyerek edinin.</string>
|
||||
\nsupport@stocardapp.com adresine e-posta göndererek verilerinizin dışa aktarılmasını isteyerek edinin.</string>
|
||||
<string name="importStocard">Stocard\'dan içe aktar</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">İçe aktarmak için Loyalty Card Keychain\'den dışa aktardığınız <i>LoyaltyCardKeychain.csv</i> dosyasını seçin.
|
||||
\nVeya Loyalty Card Keychain uygulamasının İçe/Dışa aktar menüsündeki \"Dışa aktar\" düğmesine basarak bir tane oluşturun.</string>
|
||||
\nLoyalty Card Keychain uygulamasının İçe/Dışa aktar menüsündeki \"Dışa aktar\" düğmesine basarak bir tane oluşturun.</string>
|
||||
<string name="importLoyaltyCardKeychain">Loyalty Card Keychain\'den içe aktar</string>
|
||||
<string name="importFidmeMessage">FidMe\'den içe aktarmak için dışa aktardığınız <i>fidme-export-request-xxxxxx.zip</i> dosyasını seçin ve ardından barkod türlerini elle seçin.
|
||||
\nVeya FidMe profilinizden Veri Koruma seçeneğini seçip ardından \"Verilerimi çıkar\" düğmesine basarak bir tane oluşturun.</string>
|
||||
\nFidMe profilinizden Veri Koruma seçeneğini seçip ardından \"Verilerimi çıkar\" düğmesine basarak bir tane oluşturun.</string>
|
||||
<string name="importFidme">FidMe\'den içe aktar</string>
|
||||
<string name="importCatimaMessage">İçe aktarmak için Catima\'dan dışa aktardığınız <i>catima.zip</i> dosyasını seçin.
|
||||
\nVeya başka bir Catima uygulamasının İçe/Dışa aktar menüsündeki \"Dışa aktar\" düğmesine basarak bir tane oluşturun.</string>
|
||||
\nBaşka bir Catima uygulamasının İçe/Dışa aktar menüsündeki \"Dışa aktar\" düğmesine basarak bir tane oluşturun.</string>
|
||||
<string name="importCatima">Catima\'dan içe aktar</string>
|
||||
<string name="accept">Kabul et</string>
|
||||
<string name="privacy_policy_popup_text">Gizlilik politikası bildirimi (bazı uygulama mağazaları için gerekli):
|
||||
@@ -119,10 +119,10 @@
|
||||
<string name="app_revision_fmt">Değişiklik Bilgileri: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Sürüm: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="about_title_fmt"><xliff:g id="app_name">%s</xliff:g> hakkında</string>
|
||||
<string name="app_license">GPLv3+ altında lisanslanan copyleft özgür yazılım.</string>
|
||||
<string name="app_license">GPLv3+ altında lisanslanan copyleft özgür yazılım</string>
|
||||
<string name="app_copyright_old">Loyalty Card Keychain temel alınmıştır
|
||||
\nTelif Hakkı © 2016–2020 Branden Archer.</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Telif Hakkı © 2019–<xliff:g>%d</xliff:g> Sylvia van Os.</string>
|
||||
\nTelif Hakkı © 2016–2020 Branden Archer</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Telif Hakkı © 2019–<xliff:g>%d</xliff:g> Sylvia van Os</string>
|
||||
<string name="about">Hakkında</string>
|
||||
<string name="importOptionApplicationButton">Başka bir uygulama kullan</string>
|
||||
<string name="importOptionApplicationExplanation">Bir dosyayı açmak için herhangi bir uygulamayı veya en sevdiğiniz dosya yöneticisini kullanın.</string>
|
||||
@@ -191,4 +191,21 @@
|
||||
</plurals>
|
||||
<string name="action_add">Ekle</string>
|
||||
<string name="action_search">Ara</string>
|
||||
<string name="sort_by">Sıralama ölçütü</string>
|
||||
<string name="reverse">Ters</string>
|
||||
<string name="sort_by_balance">Bakiye</string>
|
||||
<string name="sort_by_expiry">Son kullanma tarihi</string>
|
||||
<string name="sort_by_most_recently_used">En Son Kullanılan</string>
|
||||
<string name="sort_by_name">Ad</string>
|
||||
<string name="sort">Sırala</string>
|
||||
<string name="report_error">Hata Bildir</string>
|
||||
<string name="on_google_play">Google Play\'de</string>
|
||||
<string name="rate_this_app">Bu uygulamayı değerlendir</string>
|
||||
<string name="and_data_usage">ve veri kullanımı</string>
|
||||
<string name="on_github">GitHub\'da</string>
|
||||
<string name="source_repository">Kaynak Deposu</string>
|
||||
<string name="license">Lisans</string>
|
||||
<string name="help_translate_this_app">Bu uygulamayı çevirmeye yardımcı olun</string>
|
||||
<string name="credits">Emeği Geçenler</string>
|
||||
<string name="version_history">Sürüm Geçmişi</string>
|
||||
</resources>
|
||||
@@ -27,20 +27,20 @@
|
||||
<string name="sameAsCardId">Таке ж як ID картки</string>
|
||||
<string name="barcodeId">Значення штрих-коду</string>
|
||||
<string name="importVoucherVaultMessage">Оберіть Voucher Vault експорт-файл названий <i>vouchervault.json</i> для імпортування.
|
||||
\nЧи створіть його натиснувши \"Експорт\" у Voucher Vault.</string>
|
||||
\nСтворіть його натиснувши \"Експорт\" у Voucher Vault.</string>
|
||||
<string name="importVoucherVault">Імпорт з Voucher Vault</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Знайдіть файл названий <i>LoyaltyCardKeychain.csv</i> для імпортування.
|
||||
\nЧи створіть його у меню імпорту/експорту Loyalty Card Keychain натиснувши \"Експорт\".</string>
|
||||
\nСтворіть його у меню імпорту/експорту Loyalty Card Keychain натиснувши \"Експорт\".</string>
|
||||
<string name="importCatimaMessage">Оберіть експорт-файл названий <i>catima.zip</i> для імпортування.
|
||||
\nЧи створіть його з меню імпорту/експорту у іншій Catima, натиснувши \"Експорт\".</string>
|
||||
\nСтворіть його з меню імпорту/експорту у іншій Catima, натиснувши \"Експорт\".</string>
|
||||
<string name="importLoyaltyCardKeychain">Імпорт з Loyalty Card Keychain</string>
|
||||
<string name="importFidmeMessage">Оберіть FidMe експорт-файл названий <i>fidme-export-request-xxxxxx.zip</i> для імпортування і оберіть типи штрих-кодів вручну пізніше.
|
||||
\nЧи створіть його у вашому FidMe профілі обравши \"Захист даних -> Витяг даних\".</string>
|
||||
\nСтворіть його у вашому FidMe профілі обравши \"Захист даних -> Витяг даних\".</string>
|
||||
<string name="importFidme">Імпорт з FidMe</string>
|
||||
<string name="importCatima">Імпорт з Catima</string>
|
||||
<string name="accept">Прийняти</string>
|
||||
<string name="privacy_policy">Політика конфіденційності</string>
|
||||
<string name="app_loyalty_card_keychain">Брелок картки лояльності</string>
|
||||
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
|
||||
<string name="chooseImportType">Імпортувати дані з\?</string>
|
||||
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> здається, не є дійсним залишком.</string>
|
||||
<string name="points">Бали</string>
|
||||
@@ -82,7 +82,7 @@
|
||||
<string name="settings_max_font_size_scale">Макс. розмір шрифту</string>
|
||||
<string name="settings_dark_theme">Темна</string>
|
||||
<string name="settings_light_theme">Світла</string>
|
||||
<string name="settings_system_theme">Система</string>
|
||||
<string name="settings_system_theme">Системна</string>
|
||||
<string name="settings_theme">Тема</string>
|
||||
<string name="settings_category_title_ui">Інтерфейс користувача</string>
|
||||
<string name="settings">Налаштування</string>
|
||||
@@ -96,17 +96,17 @@
|
||||
<string name="app_revision_fmt">Інформація про випуск: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Версія: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="about_title_fmt">Про <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="app_license">Копілефт вільне програмне забезпечення, ліцензоване під GPLv3+.</string>
|
||||
<string name="app_license">Копілефт вільне програмне забезпечення, ліцензоване під GPLv3+</string>
|
||||
<string name="app_copyright_old">Створено на основі Loyalty Card Keychain
|
||||
\nавторські права © 2016–2020 Branden Archer.</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Авторські права © 2019–<xliff:g>%d</xliff:g> Sylvia van Os.</string>
|
||||
\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="importOptionFilesystemButton">З провідника</string>
|
||||
<string name="importOptionApplicationTitle">З іншої програми</string>
|
||||
<string name="importOptionFilesystemButton">Обрати файл</string>
|
||||
<string name="importOptionFilesystemExplanation">Оберіть файл у провіднику.</string>
|
||||
<string name="importOptionFilesystemTitle">Імпорт з провідника</string>
|
||||
<string name="importOptionFilesystemTitle">Імпорт з файлу</string>
|
||||
<string name="exportOptionExplanation">Дані буде записано до локації обраної вами.</string>
|
||||
<string name="noExternalStoragePermissionError">Надайте дозвіл на доступ до пам\'яті пристрою для імпорту чи експорту карток</string>
|
||||
<string name="exporting">Експортуємо…</string>
|
||||
@@ -156,11 +156,11 @@
|
||||
<string name="removeImage">Видалити зображення</string>
|
||||
<string name="setBackImage">Встановити зображення тильної сторони</string>
|
||||
<string name="setFrontImage">Встановити зображення лицьової сторони</string>
|
||||
<string name="photos">Фотографії</string>
|
||||
<string name="photos">Фото</string>
|
||||
<string name="backImageDescription">Тильна сторона карти</string>
|
||||
<string name="frontImageDescription">Лицьова сторона карти</string>
|
||||
<string name="importStocardMessage">Виберіть експорт <i> ***-sync.zip </i> зі Stocard для імпорту.
|
||||
\nАбо отримайте його, надіславши електронною поштою support@stocardapp.com з проханням експортувати ваші дані.</string>
|
||||
\nОтримайте його, надіславши електронною поштою support@stocardapp.com з проханням експортувати ваші дані.</string>
|
||||
<string name="importStocard">Імпорт із Stocard</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one">Обрано: <xliff:g>%d</xliff:g> карта</item>
|
||||
@@ -199,4 +199,21 @@
|
||||
<string name="toggleMoreInfo">Показувати додаткову інформацію</string>
|
||||
<string name="barcodeImageDescriptionWithType">Зображення штрих-коду карти типу <xliff:g>%s</xliff:g></string>
|
||||
<string name="swipeToSwitchImages">Свайп чи довге натискання для зміни зображень</string>
|
||||
<string name="sort_by">Сортувати за</string>
|
||||
<string name="reverse">Зворотній порядок</string>
|
||||
<string name="sort_by_balance">Баланс</string>
|
||||
<string name="sort_by_expiry">Термін дії</string>
|
||||
<string name="sort_by_most_recently_used">Часто використовувані</string>
|
||||
<string name="sort_by_name">Назва</string>
|
||||
<string name="sort">Сортування</string>
|
||||
<string name="version_history">Історія версій</string>
|
||||
<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="on_google_play">у Google Play</string>
|
||||
<string name="report_error">Повідомити про помилку</string>
|
||||
</resources>
|
||||
@@ -7,4 +7,10 @@
|
||||
<item>Stocard</item>
|
||||
<item>Voucher Vault</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="sort_types_array">
|
||||
<item>@string/sort_by_name</item>
|
||||
<item>@string/sort_by_most_recently_used</item>
|
||||
<item>@string/sort_by_expiry</item>
|
||||
</string-array>
|
||||
</resources>
|
||||
@@ -1,27 +1,21 @@
|
||||
<resources
|
||||
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="action_search">Search</string>
|
||||
<string name="action_add">Add</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> card selected</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> cards selected</item>
|
||||
</plurals>
|
||||
|
||||
<string name="noGiftCards">Click the + plus button to add a card, or import some from the ⋮ menu first.</string>
|
||||
<string name="noMatchingGiftCards">Didn\'t find anything. Try changing your search.</string>
|
||||
|
||||
<string name="storeName">Name</string>
|
||||
<string name="note">Note</string>
|
||||
<string name="cardId">Card ID</string>
|
||||
<string name="barcodeType">Barcode type</string>
|
||||
<string name="barcodeNoBarcode">This card has no barcode</string>
|
||||
<string name="noBarcode">No barcode</string>
|
||||
|
||||
<string name="star">Add to favorites</string>
|
||||
<string name="unstar">Remove from favorites</string>
|
||||
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="edit">Edit</string>
|
||||
@@ -48,16 +42,14 @@
|
||||
<string name="ok">OK</string>
|
||||
<string name="copy_to_clipboard">Copy ID to clipboard</string>
|
||||
<string name="share">Share</string>
|
||||
<string name="sendLabel">Send…</string>
|
||||
<string name="sendLabel">Send…</string>
|
||||
<string name="editCardTitle">Edit Card</string>
|
||||
<string name="addCardTitle">Add Card</string>
|
||||
<string name="scanCardBarcode">Scan Card Barcode</string>
|
||||
<string name="cardShortcut">Card Shortcut</string>
|
||||
<string name="noCardsMessage">Add a card first</string>
|
||||
<string name="card_ids_copied">Copied Card ID(s)</string>
|
||||
|
||||
<string name="barcodeImageDescriptionWithType">Image of card barcode of type <xliff:g>%s</xliff:g></string>
|
||||
|
||||
<string name="noStoreError">No name entered</string>
|
||||
<string name="noCardIdError">No card ID entered</string>
|
||||
<string name="noCardExistsError">Could not find card</string>
|
||||
@@ -71,8 +63,8 @@
|
||||
<string name="exportSuccessfulTitle">Exported</string>
|
||||
<string name="exportFailedTitle">Export failed</string>
|
||||
<string name="exportFailed">Could not export cards</string>
|
||||
<string name="importing">Importing…</string>
|
||||
<string name="exporting">Exporting…</string>
|
||||
<string name="importing">Importing…</string>
|
||||
<string name="exporting">Exporting…</string>
|
||||
<string name="noExternalStoragePermissionError">Grant external storage permission to import or export cards first</string>
|
||||
<string name="exportOptionExplanation">The data will be written to a location of your choice.</string>
|
||||
<string name="importOptionFilesystemTitle">Import from filesystem</string>
|
||||
@@ -81,25 +73,20 @@
|
||||
<string name="importOptionApplicationTitle">Use another app</string>
|
||||
<string name="importOptionApplicationExplanation">Use any app or your favorite file manager to open a file.</string>
|
||||
<string name="importOptionApplicationButton">Use another app</string>
|
||||
|
||||
<string name="about">About</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019–<xliff:g>%d</xliff:g> Sylvia van Os.</string>
|
||||
<string name="app_copyright_old">Based on Loyalty Card Keychain\ncopyright © 2016–2020 Branden Archer.</string>
|
||||
<string name="app_license">Copylefted libre software, licensed GPLv3+.</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019–<xliff:g>%d</xliff:g> Sylvia van Os</string>
|
||||
<string name="app_copyright_old">Based on Loyalty Card Keychain\ncopyright © 2016–2020 Branden Archer</string>
|
||||
<string name="app_license">Copylefted libre software, licensed GPLv3+</string>
|
||||
<string name="about_title_fmt">About <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Version: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_revision_fmt">Revision Info: <xliff:g id="app_revision_url">%s</xliff:g></string>
|
||||
<string name="app_libraries">Libre third-party libraries: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_resources">Libre third-party resources: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
|
||||
<string name="selectBarcodeTitle">Select Barcode</string>
|
||||
<string name="enterBarcodeInstructions">Enter the card ID, and either pick its barcode type below, or “This card has no barcode”.</string>
|
||||
|
||||
<string name="enterBarcodeInstructions">Enter the card ID, and either pick its barcode type below, or “This card has no barcode”.</string>
|
||||
<string name="copy_to_clipboard_toast">Card ID copied to clipboard</string>
|
||||
|
||||
<string name="thumbnailDescription">Thumbnail for card</string>
|
||||
<string name="starImage">Favorite star</string>
|
||||
|
||||
<string name="settings">Settings</string>
|
||||
<string name="settings_category_title_ui">User interface</string>
|
||||
<string name="settings_theme">Theme</string>
|
||||
@@ -112,7 +99,6 @@
|
||||
<string name="settings_key_dark_theme" translatable="false">dark</string>
|
||||
<string name="settings_key_max_font_size_scale" translatable="false">pref_max_font_size_scale</string>
|
||||
<string name="settings_max_font_size_scale">Max. font size</string>
|
||||
|
||||
<string name="settings_display_barcode_max_brightness">Brighten barcode view</string>
|
||||
<string name="settings_key_display_barcode_max_brightness" translatable="false">pref_display_card_max_brightness</string>
|
||||
<string name="settings_lock_barcode_orientation">Lock barcode orientation</string>
|
||||
@@ -121,10 +107,11 @@
|
||||
<string name="settings_key_keep_screen_on" translatable="false">pref_keep_screen_on</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Prevent lock screen</string>
|
||||
<string name="settings_key_disable_lockscreen_while_viewing_card" translatable="false">pref_disable_lockscreen_while_viewing_card</string>
|
||||
|
||||
<string name="sharedpreference_active_tab" translatable="false">sharedpreference_active_tab</string>
|
||||
<string name="sharedpreference_privacy_policy_shown" translatable="false">sharedpreference_privacy_policy_shown</string>
|
||||
|
||||
<string name="sharedpreference_sort" translatable="false">sharedpreference_sort</string>
|
||||
<string name="sharedpreference_sort_order" translatable="false">sharedpreference_sort_order</string>
|
||||
<string name="sharedpreference_sort_direction" translatable="false">sharedpreference_sort_direction</string>
|
||||
<string name="intent_import_card_from_url_share_text">I want to share a card with you</string>
|
||||
<string name="intent_import_card_from_url_host_catima_app" translatable="false">catima.app</string>
|
||||
<string name="intent_import_card_from_url_path_prefix_catima_app" translatable="false">/share</string>
|
||||
@@ -134,7 +121,6 @@
|
||||
<string name="intent_import_card_from_url_path_prefix_brarcher" translatable="false">/loyalty-card-locker/share</string>
|
||||
<string name="importSuccessful">Card data imported</string>
|
||||
<string name="exportSuccessful">Card data exported</string>
|
||||
|
||||
<string name="enter_group_name">Enter group name</string>
|
||||
<string name="groups">Groups</string>
|
||||
<string name="noGroups">Click the + plus button to add groups for categorization first.</string>
|
||||
@@ -143,7 +129,6 @@
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> card</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> cards</item>
|
||||
</plurals>
|
||||
|
||||
<string name="all">All</string>
|
||||
<string name="deleteConfirmationGroup">Delete group?</string>
|
||||
<string name="failedOpeningFileManager">Install a file manager first.</string>
|
||||
@@ -158,7 +143,6 @@
|
||||
<string name="expiryStateSentenceExpired">Expired: <xliff:g>%s</xliff:g></string>
|
||||
<string name="balanceSentence">Balance: <xliff:g>%s</xliff:g></string>
|
||||
<string name="balancePoints"><xliff:g>%s</xliff:g> points</string>
|
||||
|
||||
<string name="card">Card</string>
|
||||
<string name="barcode">Barcode</string>
|
||||
<string name="editBarcode">Edit barcode</string>
|
||||
@@ -167,31 +151,32 @@
|
||||
<string name="chooseExpiryDate">Choose expiry date</string>
|
||||
<string name="moveBarcodeToTopOfScreen">Move the barcode to the top of the screen</string>
|
||||
<string name="moveBarcodeToCenterOfScreen">Center the barcode on the screen</string>
|
||||
|
||||
<string name="noBarcodeFound">No barcode was found</string>
|
||||
<string name="errorReadingImage">Could not read the image</string>
|
||||
|
||||
<string name="balance">Balance</string>
|
||||
<string name="currency">Currency</string>
|
||||
<string name="points">Points</string>
|
||||
|
||||
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> does not seem to be a valid balance.</string>
|
||||
<string name="chooseImportType">Import data from?</string>
|
||||
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
|
||||
|
||||
<string name="privacy_policy">Privacy Policy</string>
|
||||
<string name="privacy_policy_popup_text">Privacy policy notice (required by some app stores):\n\nNO DATA IS COLLECTED AT ALL, which anyone can confirm since our app is libre software.</string>
|
||||
<string name="accept">Accept</string>
|
||||
<string name="importCatima">Import from Catima</string>
|
||||
<string name="importCatimaMessage">Select your <i>catima.zip</i> export from Catima to import.\nOr create it from the "Import/Export" menu of another Catima app by pressing "Export" there first.</string>
|
||||
<string name="importCatimaMessage">Select your <i>catima.zip</i> export from Catima to import.
|
||||
\nCreate it from the Import/Export menu of another Catima app by pressing Export there first.</string>
|
||||
<string name="importFidme">Import from FidMe</string>
|
||||
<string name="importFidmeMessage">Select your <i>fidme-export-request-xxxxxx.zip</i> export from FidMe to import, and select the barcode types manually afterwards.\nOr create it from your FidMe profile by choosing "Data Protection" and then pressing "Extract my data" first.</string>
|
||||
<string name="importFidmeMessage">Select your <i>fidme-export-request-xxxxxx.zip</i> export from FidMe to import, and select the barcode types manually afterwards.
|
||||
\nCreate it from your FidMe profile by choosing Data Protection and then pressing Extract my data first.</string>
|
||||
<string name="importLoyaltyCardKeychain">Import from Loyalty Card Keychain</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Select your <i>LoyaltyCardKeychain.csv</i> export from Loyalty Card Keychain to import.\nOr create it from the "Import/Export" menu in Loyalty Card Keychain by pressing "Export" there first.</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Select your <i>LoyaltyCardKeychain.csv</i> export from Loyalty Card Keychain to import.
|
||||
\nCreate it from the Import/Export menu in Loyalty Card Keychain by pressing Export there first.</string>
|
||||
<string name="importStocard">Import from Stocard</string>
|
||||
<string name="importStocardMessage">Select your <i>***-sync.zip</i> export from Stocard to import.\nOr get it by e-mailing support@stocardapp.com asking for an export of your data.</string>
|
||||
<string name="importStocardMessage">Select your <i>***-sync.zip</i> export from Stocard to import.
|
||||
\nGet it by e-mailing support@stocardapp.com asking for an export of your data.</string>
|
||||
<string name="importVoucherVault">Import from Voucher Vault</string>
|
||||
<string name="importVoucherVaultMessage">Select your <i>vouchervault.json</i> export from Voucher Vault to import.\nOr create it by pressing "Export" in Voucher Vault first.</string>
|
||||
<string name="importVoucherVaultMessage">Select your <i>vouchervault.json</i> export from Voucher Vault to import.
|
||||
\nCreate it by pressing Export in Voucher Vault first.</string>
|
||||
<string name="barcodeId">Barcode value</string>
|
||||
<string name="sameAsCardId">Same as card ID</string>
|
||||
<string name="setBarcodeId">Set barcode value</string>
|
||||
@@ -217,7 +202,6 @@
|
||||
<string name="settings_locale">Language</string>
|
||||
<string name="settings_key_locale" translatable="false">pref_locale</string>
|
||||
<string name="settings_system_locale">System</string>
|
||||
|
||||
<string name="setting_key_theme_color" translatable="false">pref_theme_color</string>
|
||||
<string name="settings_theme_color">Theme color</string>
|
||||
<string name="settings_catima_theme">Catima</string>
|
||||
@@ -239,7 +223,24 @@
|
||||
<string name="settings_key_grey_theme" translatable="false">grey_theme</string>
|
||||
<string name="settings_key_brown_theme" translatable="false">brown_theme</string>
|
||||
<string name="app_contributors">Made possible by: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
|
||||
<string name="sort">Sort</string>
|
||||
<string name="toggleMoreInfo">Toggle showing more info</string>
|
||||
<string name="swipeToSwitchImages">Swipe or long press to switch images</string>
|
||||
</resources>
|
||||
<string name="sort_by_name">Name</string>
|
||||
<string name="sort_by_most_recently_used">Most Recently Used</string>
|
||||
<string name="sort_by_expiry">Expiry</string>
|
||||
<string name="sort_by_balance">Balance</string>
|
||||
<string name="reverse">Reverse</string>
|
||||
<string name="sort_by">Sort by</string>
|
||||
<string name="version_history">Version History</string>
|
||||
<string name="arrow" translatable="false"><![CDATA[>]]></string>
|
||||
<string name="credits">Credits</string>
|
||||
<string name="help_translate_this_app">Help translate this app</string>
|
||||
<string name="license">License</string>
|
||||
<string name="source_repository">Source Repository</string>
|
||||
<string name="on_github">on GitHub</string>
|
||||
<string name="and_data_usage">and data usage</string>
|
||||
<string name="rate_this_app">Rate this app</string>
|
||||
<string name="on_google_play">on Google Play</string>
|
||||
<string name="report_error">Report Error</string>
|
||||
</resources>
|
||||
@@ -82,8 +82,14 @@
|
||||
<item name="windowNoTitle">true</item>
|
||||
</style>
|
||||
|
||||
<style name="SplashTheme" parent="@style/AppTheme">
|
||||
<item name="android:windowBackground">@drawable/background_splash</item>
|
||||
<!-- Splash Screen Theme-->
|
||||
<style name="Theme.App.Starting" parent="Theme.SplashScreen">
|
||||
|
||||
<item name="windowSplashScreenBackground">@color/ic_launcher_background</item>
|
||||
|
||||
<item name="windowSplashScreenAnimatedIcon">@drawable/ic_launcher_foreground</item>
|
||||
|
||||
<item name="postSplashScreenTheme">@style/AppTheme</item>
|
||||
</style>
|
||||
|
||||
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.MaterialComponents.Dark.ActionBar"/>
|
||||
|
||||
@@ -45,7 +45,7 @@ public class DatabaseTest
|
||||
public void addRemoveOneGiftCard()
|
||||
{
|
||||
assertEquals(0, db.getLoyaltyCardCount());
|
||||
long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0);
|
||||
long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, db.getLoyaltyCardCount());
|
||||
@@ -72,7 +72,7 @@ public class DatabaseTest
|
||||
@Test
|
||||
public void updateGiftCard()
|
||||
{
|
||||
long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0);
|
||||
long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, db.getLoyaltyCardCount());
|
||||
@@ -98,7 +98,7 @@ public class DatabaseTest
|
||||
@Test
|
||||
public void updateGiftCardOnlyStar()
|
||||
{
|
||||
long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0);
|
||||
long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, db.getLoyaltyCardCount());
|
||||
@@ -135,7 +135,7 @@ public class DatabaseTest
|
||||
@Test
|
||||
public void emptyGiftCardValues()
|
||||
{
|
||||
long id = db.insertLoyaltyCard("", "", null, new BigDecimal("0"), null, "", null, null, null, 0);
|
||||
long id = db.insertLoyaltyCard("", "", null, new BigDecimal("0"), null, "", null, null, null, 0, null);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, db.getLoyaltyCardCount());
|
||||
@@ -164,7 +164,7 @@ public class DatabaseTest
|
||||
for(int index = CARDS_TO_ADD-1; index >= 0; index--)
|
||||
{
|
||||
long id = db.insertLoyaltyCard("store" + index, "note" + index, null, new BigDecimal("0"), null, "cardId" + index,
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 0);
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 0, null);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
}
|
||||
@@ -210,12 +210,12 @@ public class DatabaseTest
|
||||
{
|
||||
if (index == CARDS_TO_ADD-1) {
|
||||
id = db.insertLoyaltyCard("store" + index, "note" + index, null, new BigDecimal("0"), null, "cardId" + index,
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 1);
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 1, null);
|
||||
}
|
||||
|
||||
else {
|
||||
id = db.insertLoyaltyCard("store" + index, "note" + index, null, new BigDecimal("0"), null, "cardId" + index,
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 0);
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), index, 0, null);
|
||||
}
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
@@ -270,6 +270,7 @@ public class DatabaseTest
|
||||
database.execSQL("drop table " + DBHelper.LoyaltyCardDbIds.TABLE);
|
||||
database.execSQL("drop table " + DBHelper.LoyaltyCardDbGroups.TABLE);
|
||||
database.execSQL("drop table " + DBHelper.LoyaltyCardDbIdsGroups.TABLE);
|
||||
database.execSQL("drop table " + DBHelper.LoyaltyCardDbFTS.TABLE);
|
||||
|
||||
// Create the table as it existed in revision 1
|
||||
database.execSQL("create table " + DBHelper.LoyaltyCardDbIds.TABLE + "(" +
|
||||
@@ -316,7 +317,7 @@ public class DatabaseTest
|
||||
{
|
||||
// Create card
|
||||
assertEquals(0, db.getLoyaltyCardCount());
|
||||
long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0);
|
||||
long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, db.getLoyaltyCardCount());
|
||||
@@ -433,7 +434,7 @@ public class DatabaseTest
|
||||
{
|
||||
// Create card
|
||||
assertEquals(0, db.getLoyaltyCardCount());
|
||||
long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0);
|
||||
long id = db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), DEFAULT_HEADER_COLOR, 0, null);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, db.getLoyaltyCardCount());
|
||||
|
||||
@@ -91,7 +91,7 @@ public class ImportExportTest
|
||||
{
|
||||
String storeName = String.format("store, \"%4d", index);
|
||||
String note = String.format("note, \"%4d", index);
|
||||
long id = db.insertLoyaltyCard(storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0);
|
||||
long id = db.insertLoyaltyCard(storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0, null);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
}
|
||||
@@ -107,7 +107,7 @@ public class ImportExportTest
|
||||
{
|
||||
String storeName = String.format("store, \"%4d", index);
|
||||
String note = String.format("note, \"%4d", index);
|
||||
long id = db.insertLoyaltyCard(storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 1);
|
||||
long id = db.insertLoyaltyCard(storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 1, null);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
}
|
||||
@@ -116,7 +116,7 @@ public class ImportExportTest
|
||||
String storeName = String.format("store, \"%4d", index);
|
||||
String note = String.format("note, \"%4d", index);
|
||||
//if index is even
|
||||
long id = db.insertLoyaltyCard(storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0);
|
||||
long id = db.insertLoyaltyCard(storeName, note, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, index, 0, null);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
}
|
||||
@@ -126,7 +126,7 @@ public class ImportExportTest
|
||||
@Test
|
||||
public void addLoyaltyCardsWithExpiryNeverPastTodayFuture()
|
||||
{
|
||||
long id = db.insertLoyaltyCard("No Expiry", "", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0);
|
||||
long id = db.insertLoyaltyCard("No Expiry", "", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
|
||||
@@ -142,7 +142,7 @@ public class ImportExportTest
|
||||
assertEquals(Integer.valueOf(0), card.headerColor);
|
||||
assertEquals(0, card.starStatus);
|
||||
|
||||
id = db.insertLoyaltyCard("Past", "", new Date((long) 1), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0);
|
||||
id = db.insertLoyaltyCard("Past", "", new Date((long) 1), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null);
|
||||
result = (id != -1);
|
||||
assertTrue(result);
|
||||
|
||||
@@ -158,7 +158,7 @@ public class ImportExportTest
|
||||
assertEquals(Integer.valueOf(0), card.headerColor);
|
||||
assertEquals(0, card.starStatus);
|
||||
|
||||
id = db.insertLoyaltyCard("Today", "", new Date(), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0);
|
||||
id = db.insertLoyaltyCard("Today", "", new Date(), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null);
|
||||
result = (id != -1);
|
||||
assertTrue(result);
|
||||
|
||||
@@ -177,7 +177,7 @@ public class ImportExportTest
|
||||
|
||||
// This will break after 19 January 2038
|
||||
// If someone is still maintaining this code base by then: I love you
|
||||
id = db.insertLoyaltyCard("Future", "", new Date(2147483648000L), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0);
|
||||
id = db.insertLoyaltyCard("Future", "", new Date(2147483648000L), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, 0, 0, null);
|
||||
result = (id != -1);
|
||||
assertTrue(result);
|
||||
|
||||
@@ -884,7 +884,7 @@ public class ImportExportTest
|
||||
HashMap<Integer, Bitmap> loyaltyCardBackImages = new HashMap<>();
|
||||
|
||||
// Create card 1
|
||||
int loyaltyCardId = (int) db.insertLoyaltyCard("Card 1", "Note 1", new Date(1618053234), new BigDecimal("100"), Currency.getInstance("USD"), "1234", "5432", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), 1, 0);
|
||||
int loyaltyCardId = (int) db.insertLoyaltyCard("Card 1", "Note 1", new Date(1618053234), new BigDecimal("100"), Currency.getInstance("USD"), "1234", "5432", CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), 1, 0, null);
|
||||
loyaltyCardHashMap.put(loyaltyCardId, db.getLoyaltyCard(loyaltyCardId));
|
||||
db.insertGroup("One");
|
||||
List<Group> groups = Arrays.asList(db.getGroup("One"));
|
||||
@@ -896,7 +896,7 @@ public class ImportExportTest
|
||||
loyaltyCardBackImages.put(loyaltyCardId, roundLauncherBitmap);
|
||||
|
||||
// Create card 2
|
||||
loyaltyCardId = (int) db.insertLoyaltyCard("Card 2", "", null, new BigDecimal(0), null, "123456", null, null, 2, 1);
|
||||
loyaltyCardId = (int) db.insertLoyaltyCard("Card 2", "", null, new BigDecimal(0), null, "123456", null, null, 2, 1, null);
|
||||
loyaltyCardHashMap.put(loyaltyCardId, db.getLoyaltyCard(loyaltyCardId));
|
||||
|
||||
// Export everything
|
||||
|
||||
@@ -42,7 +42,7 @@ public class ImportURITest {
|
||||
// Generate card
|
||||
Date date = new Date();
|
||||
|
||||
db.insertLoyaltyCard("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);
|
||||
db.insertLoyaltyCard("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);
|
||||
|
||||
// Get card
|
||||
LoyaltyCard card = db.getLoyaltyCard(1);
|
||||
@@ -70,7 +70,7 @@ public class ImportURITest {
|
||||
@Test
|
||||
public void ensureNoCrashOnMissingHeaderFields() throws InvalidObjectException, UnsupportedEncodingException {
|
||||
// Generate card
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("10.00"), Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), null, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("10.00"), Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), null, 0, null);
|
||||
|
||||
// Get card
|
||||
LoyaltyCard card = db.getLoyaltyCard(1);
|
||||
|
||||
@@ -120,7 +120,7 @@ public class LoyaltyCardCursorAdapterTest
|
||||
@Test
|
||||
public void TestCursorAdapterEmptyNote()
|
||||
{
|
||||
db.insertLoyaltyCard("store", "", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null);
|
||||
LoyaltyCard card = db.getLoyaltyCard(1);
|
||||
|
||||
Cursor cursor = db.getLoyaltyCardCursor();
|
||||
@@ -136,7 +136,7 @@ public class LoyaltyCardCursorAdapterTest
|
||||
@Test
|
||||
public void TestCursorAdapterWithNote()
|
||||
{
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null);
|
||||
LoyaltyCard card = db.getLoyaltyCard(1);
|
||||
|
||||
Cursor cursor = db.getLoyaltyCardCursor();
|
||||
@@ -156,7 +156,7 @@ public class LoyaltyCardCursorAdapterTest
|
||||
Date expiryDate = new Date();
|
||||
String dateString = DateFormat.getDateInstance(DateFormat.LONG).format(expiryDate);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", expiryDate, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", expiryDate, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null);
|
||||
LoyaltyCard card = db.getLoyaltyCard(1);
|
||||
|
||||
Cursor cursor = db.getLoyaltyCardCursor();
|
||||
@@ -177,9 +177,9 @@ public class LoyaltyCardCursorAdapterTest
|
||||
@Test
|
||||
public void TestCursorAdapterStarring()
|
||||
{
|
||||
assertNotEquals(-1, db.insertLoyaltyCard("storeA", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0));
|
||||
assertNotEquals(-1, db.insertLoyaltyCard("storeB", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1));
|
||||
assertNotEquals(-1, db.insertLoyaltyCard("storeC", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1));
|
||||
assertNotEquals(-1, db.insertLoyaltyCard("storeA", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null));
|
||||
assertNotEquals(-1, db.insertLoyaltyCard("storeB", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null));
|
||||
assertNotEquals(-1, db.insertLoyaltyCard("storeC", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null));
|
||||
|
||||
assertEquals(3, db.getLoyaltyCardCount());
|
||||
|
||||
@@ -220,7 +220,7 @@ public class LoyaltyCardCursorAdapterTest
|
||||
@Test
|
||||
public void TestCursorAdapter0Points()
|
||||
{
|
||||
db.insertLoyaltyCard("store", "", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null);
|
||||
LoyaltyCard card = db.getLoyaltyCard(1);
|
||||
|
||||
Cursor cursor = db.getLoyaltyCardCursor();
|
||||
@@ -236,7 +236,7 @@ public class LoyaltyCardCursorAdapterTest
|
||||
@Test
|
||||
public void TestCursorAdapter0EUR()
|
||||
{
|
||||
db.insertLoyaltyCard("store", "", null, new BigDecimal("0"), Currency.getInstance("EUR"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "", null, new BigDecimal("0"), Currency.getInstance("EUR"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null);
|
||||
LoyaltyCard card = db.getLoyaltyCard(1);
|
||||
|
||||
Cursor cursor = db.getLoyaltyCardCursor();
|
||||
@@ -252,7 +252,7 @@ public class LoyaltyCardCursorAdapterTest
|
||||
@Test
|
||||
public void TestCursorAdapter100Points()
|
||||
{
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null);
|
||||
LoyaltyCard card = db.getLoyaltyCard(1);
|
||||
|
||||
Cursor cursor = db.getLoyaltyCardCursor();
|
||||
@@ -268,7 +268,7 @@ public class LoyaltyCardCursorAdapterTest
|
||||
@Test
|
||||
public void TestCursorAdapter10USD()
|
||||
{
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("10.00"), Currency.getInstance("USD"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("10.00"), Currency.getInstance("USD"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null);
|
||||
LoyaltyCard card = db.getLoyaltyCard(1);
|
||||
|
||||
Cursor cursor = db.getLoyaltyCardCursor();
|
||||
|
||||
@@ -369,7 +369,7 @@ public class LoyaltyCardViewActivityTest
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
|
||||
if (!newCard) {
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
}
|
||||
|
||||
activityController.start();
|
||||
@@ -612,7 +612,7 @@ public class LoyaltyCardViewActivityTest
|
||||
final Context context = activity.getApplicationContext();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -631,7 +631,7 @@ public class LoyaltyCardViewActivityTest
|
||||
final Context context = activity.getApplicationContext();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -650,7 +650,7 @@ public class LoyaltyCardViewActivityTest
|
||||
final Context context = activity.getApplicationContext();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -674,7 +674,7 @@ public class LoyaltyCardViewActivityTest
|
||||
final Context context = activity.getApplicationContext();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -712,7 +712,7 @@ public class LoyaltyCardViewActivityTest
|
||||
final Context context = activity.getApplicationContext();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -745,7 +745,7 @@ public class LoyaltyCardViewActivityTest
|
||||
final Context context = activity.getApplicationContext();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", new Date(), new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", new Date(), new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -770,7 +770,7 @@ public class LoyaltyCardViewActivityTest
|
||||
final Context context = activity.getApplicationContext();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -821,7 +821,7 @@ public class LoyaltyCardViewActivityTest
|
||||
final Context context = activity.getApplicationContext();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("10.00"), Currency.getInstance("USD"), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("10.00"), Currency.getInstance("USD"), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -862,7 +862,7 @@ public class LoyaltyCardViewActivityTest
|
||||
final Context context = activity.getApplicationContext();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -894,7 +894,7 @@ public class LoyaltyCardViewActivityTest
|
||||
final Context context = activity.getApplicationContext();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -928,7 +928,7 @@ public class LoyaltyCardViewActivityTest
|
||||
final Context context = activity.getApplicationContext();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -965,7 +965,7 @@ public class LoyaltyCardViewActivityTest
|
||||
final Context context = activity.getApplicationContext();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -1001,7 +1001,7 @@ public class LoyaltyCardViewActivityTest
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -1049,7 +1049,7 @@ public class LoyaltyCardViewActivityTest
|
||||
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -1069,7 +1069,7 @@ public class LoyaltyCardViewActivityTest
|
||||
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -1088,7 +1088,7 @@ public class LoyaltyCardViewActivityTest
|
||||
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -1106,7 +1106,7 @@ public class LoyaltyCardViewActivityTest
|
||||
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -1125,7 +1125,7 @@ public class LoyaltyCardViewActivityTest
|
||||
final Context context = activity.getApplicationContext();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -1154,7 +1154,7 @@ public class LoyaltyCardViewActivityTest
|
||||
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
final int LARGE_FONT_SIZE = 40;
|
||||
|
||||
@@ -1191,7 +1191,7 @@ public class LoyaltyCardViewActivityTest
|
||||
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = new DBHelper(activity);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(activity);
|
||||
settings.edit()
|
||||
@@ -1228,7 +1228,7 @@ public class LoyaltyCardViewActivityTest
|
||||
|
||||
Activity activity = (Activity) activityController.get();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
@@ -1263,7 +1263,7 @@ public class LoyaltyCardViewActivityTest
|
||||
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
@@ -1369,7 +1369,7 @@ public class LoyaltyCardViewActivityTest
|
||||
|
||||
Activity activity = (Activity)activityController.get();
|
||||
DBHelper db = TestHelpers.getEmptyDb(activity);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, BARCODE_DATA, null, null, Color.BLACK, 0, null);
|
||||
|
||||
activityController.start();
|
||||
activityController.visible();
|
||||
|
||||
@@ -61,9 +61,9 @@ public class MainActivityTest
|
||||
// The settings, import/export, groups, search and add button should be present
|
||||
assertEquals(menu.size(), 6);
|
||||
assertEquals("Search", menu.findItem(R.id.action_search).getTitle().toString());
|
||||
assertEquals("Sort", menu.findItem(R.id.action_sort).getTitle().toString());
|
||||
assertEquals("Groups", menu.findItem(R.id.action_manage_groups).getTitle().toString());
|
||||
assertEquals("Import/Export", menu.findItem(R.id.action_import_export).getTitle().toString());
|
||||
assertEquals("Privacy Policy", menu.findItem(R.id.action_privacy_policy).getTitle().toString());
|
||||
assertEquals("About", menu.findItem(R.id.action_about).getTitle().toString());
|
||||
assertEquals("Settings", menu.findItem(R.id.action_settings).getTitle().toString());
|
||||
}
|
||||
@@ -95,7 +95,7 @@ public class MainActivityTest
|
||||
assertEquals(0, list.getAdapter().getItemCount());
|
||||
|
||||
DBHelper db = TestHelpers.getEmptyDb(mainActivity);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null);
|
||||
|
||||
assertEquals(View.VISIBLE, helpText.getVisibility());
|
||||
assertEquals(View.GONE, noMatchingCardsText.getVisibility());
|
||||
@@ -130,10 +130,10 @@ public class MainActivityTest
|
||||
assertEquals(0, list.getAdapter().getItemCount());
|
||||
|
||||
DBHelper db = TestHelpers.getEmptyDb(mainActivity);
|
||||
db.insertLoyaltyCard("storeB", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("storeA", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("storeD", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1);
|
||||
db.insertLoyaltyCard("storeC", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1);
|
||||
db.insertLoyaltyCard("storeB", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null);
|
||||
db.insertLoyaltyCard("storeA", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null);
|
||||
db.insertLoyaltyCard("storeD", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null);
|
||||
db.insertLoyaltyCard("storeC", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null);
|
||||
|
||||
assertEquals(View.VISIBLE, helpText.getVisibility());
|
||||
assertEquals(View.GONE, noMatchingCardsText.getVisibility());
|
||||
@@ -226,8 +226,8 @@ public class MainActivityTest
|
||||
TabLayout groupTabs = mainActivity.findViewById(R.id.groups);
|
||||
|
||||
DBHelper db = TestHelpers.getEmptyDb(mainActivity);
|
||||
db.insertLoyaltyCard("The First Store", "Initial note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("The Second Store", "Secondary note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0);
|
||||
db.insertLoyaltyCard("The First Store", "Initial note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null);
|
||||
db.insertLoyaltyCard("The Second Store", "Secondary note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null);
|
||||
|
||||
db.insertGroup("Group one");
|
||||
List<Group> groups = new ArrayList<>();
|
||||
@@ -360,7 +360,7 @@ public class MainActivityTest
|
||||
|
||||
assertEquals(View.GONE, helpText.getVisibility());
|
||||
assertEquals(View.VISIBLE, noMatchingCardsText.getVisibility());
|
||||
assertEquals(View.VISIBLE, list.getVisibility());
|
||||
assertEquals(View.GONE, list.getVisibility());
|
||||
|
||||
assertEquals(0, list.getAdapter().getItemCount());
|
||||
|
||||
@@ -382,7 +382,7 @@ public class MainActivityTest
|
||||
|
||||
assertEquals(View.GONE, helpText.getVisibility());
|
||||
assertEquals(View.VISIBLE, noMatchingCardsText.getVisibility());
|
||||
assertEquals(View.VISIBLE, list.getVisibility());
|
||||
assertEquals(View.GONE, list.getVisibility());
|
||||
|
||||
assertEquals(0, list.getAdapter().getItemCount());
|
||||
|
||||
@@ -396,7 +396,7 @@ public class MainActivityTest
|
||||
|
||||
assertEquals(View.GONE, helpText.getVisibility());
|
||||
assertEquals(View.VISIBLE, noMatchingCardsText.getVisibility());
|
||||
assertEquals(View.VISIBLE, list.getVisibility());
|
||||
assertEquals(View.GONE, list.getVisibility());
|
||||
|
||||
assertEquals(0, list.getAdapter().getItemCount());
|
||||
|
||||
@@ -405,7 +405,7 @@ public class MainActivityTest
|
||||
|
||||
assertEquals(View.GONE, helpText.getVisibility());
|
||||
assertEquals(View.VISIBLE, noMatchingCardsText.getVisibility());
|
||||
assertEquals(View.VISIBLE, list.getVisibility());
|
||||
assertEquals(View.GONE, list.getVisibility());
|
||||
|
||||
assertEquals(0, list.getAdapter().getItemCount());
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ buildscript {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.0.1'
|
||||
classpath 'com.android.tools.build:gradle:7.0.2'
|
||||
classpath 'gradle.plugin.com.github.spotbugs.snom:spotbugs-gradle-plugin:4.7.0'
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
@@ -24,6 +24,9 @@ allprojects {
|
||||
maven { url "https://jitpack.io" }
|
||||
gradlePluginPortal()
|
||||
}
|
||||
tasks.withType(JavaCompile) {
|
||||
options.compilerArgs << "-Xlint:deprecation"
|
||||
}
|
||||
}
|
||||
|
||||
task clean(type: Delete) {
|
||||
|
||||
@@ -4,7 +4,7 @@ Copylefted libre software (GPLv3+) card management app.
|
||||
|
||||
[](https://github.com/TheLastProject/Catima/releases)
|
||||
[](https://f-droid.org/packages/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/)
|
||||
|
||||
@@ -1,23 +1,22 @@
|
||||
Спрете да търсите пластмасови карти за възнаграждение по време на плащане в магазин или в интернет магазин.
|
||||
<b>Сканирайте баркодовете на устройството си с помощта на неговата камера и забравете за картите.</b>
|
||||
😺
|
||||
Забравете за портфейла си или го запазете ултралек за ценни вещи.
|
||||
😺
|
||||
Спрете да търсите пластмасови карти за възнаграждение докато плащате в магазина или в мрежата.
|
||||
<b>Сканирайте щрихкодовете на устройството си с помощта на камерата и забравете за пластмасовите карти.</b>
|
||||
|
||||
Забравете за портфейла си или го запазете лек за ценни вещи.
|
||||
|
||||
С този основен инструмент за ежедневно носене (EDC) можете да замените безполезната пластмаса с пари в брой.
|
||||
😺
|
||||
|
||||
- Избягвайте шпионирането с много малко разрешения. Без достъп до интернет и без реклами.
|
||||
- Добавете карти или кодове с имена и цветове, които можете да персонализирате.
|
||||
- Ръчно въвеждане на код, ако няма баркод за съхранение или той не може да се използва.
|
||||
- Импортиране на карти и кодове от файлове, Catima, FidMe, Loyalty Card Keychain, Stocard и Voucher Vault.
|
||||
- Направете резервно копие на всичките си карти и ги прехвърлете на ново устройство, ако искате.
|
||||
- Споделяйте купони, ексклузивни оферти, промоционални кодове или карти и кодове, като използвате всяко приложение.
|
||||
- Тъмна тема и опции за достъпност за потребители с увредено зрение.
|
||||
- Добавяйте карти или кодове с имена и цветове, които можете да настройвате по желание.
|
||||
- Въвеждайте кодове, ако картата е без щрихкод или той не може да се използва.
|
||||
- Внасяйте карти и кодове от файлове на Catima, FidMe, Loyalty Card Keychain, Stocard и Voucher Vault.
|
||||
- Изнасяйте резервни копия на всичките си карти и при желание ги прехвърлете на други устройства.
|
||||
- Споделяйте купони, специални оферти, промоционални кодове или карти и кодове, като използвате всяко приложение.
|
||||
- Тъмна тема и настройки за достъпност за потребители с намалено зрение.
|
||||
- Направено за всички от общността на свободния софтуер.
|
||||
- Локализирани ръчно направени преводи за над 20 езика.
|
||||
- Локализирани, ръчно направени преводи на над 20 езика.
|
||||
- Безвъзмездно, подкрепено от приноса на общността.
|
||||
- Използвайте, изучавайте, променяйте и споделяйте, както желаете; <i>с всички</i>.
|
||||
- Не само свободен софтуер / отворен код. <i>Copylefted</i> либре софтуер (GPLv3+) за управление на карти.
|
||||
😺
|
||||
|
||||
Опростете живота и пазаруването си и никога повече не губете хартиена касова бележка, карта за подарък за плащане в магазина или самолетен билет.
|
||||
Вземете всичките си награди и бонуси със себе си и спестявайте, докато пътувате.
|
||||
😺
|
||||
|
||||
@@ -1 +1 @@
|
||||
За вашите баркодове, членства, програми за лоялност, талони и билети.
|
||||
За вашите щрихкодове, членства, програми за лоялност, талони и билети.
|
||||
|
||||
6
fastlane/metadata/android/bs/changelogs/67.txt
Normal file
6
fastlane/metadata/android/bs/changelogs/67.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
- Dodaj opciju da se postavi posebna barcode vrijednost od ID kartice
|
||||
- Pojednostavi konfiguraciju fonta
|
||||
- Nekoliko lakših korisničkih funkcija
|
||||
- Koristi ikonu slova za prečice
|
||||
- Uvijek Prikaži sve barkode vrste u manuelnom ulazu
|
||||
- Ukloni Politiku privatnosti prvog početka
|
||||
4
fastlane/metadata/android/bs/changelogs/68.txt
Normal file
4
fastlane/metadata/android/bs/changelogs/68.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
- Podržite novi PDF417 export iz Voucher trezora
|
||||
- Podržite za kopiranje više barkodova odjednom.
|
||||
- Podržite dijeljenje više kartica odanosti odjednom
|
||||
- Pitaj da ažuriraš vrijednost za barcode ako se promijeni ID kartica
|
||||
3
fastlane/metadata/android/bs/changelogs/69.txt
Normal file
3
fastlane/metadata/android/bs/changelogs/69.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Dodaj nestali barkod za izvoz
|
||||
- Nemoj prikazati dijalog o barcodeu ako je vrijednost kao ID kartice
|
||||
- Dodaj Finski prevod
|
||||
2
fastlane/metadata/android/bs/changelogs/7.txt
Normal file
2
fastlane/metadata/android/bs/changelogs/7.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Long-click of a card donosi opciju da kopira ID karticu u clipboard. (vuci broj 49 (https://github.com/brarcher/loyalty-card-locker/issues/49))
|
||||
- Back button na ulaz/izvoz pogled sada radi, prebacujem korisnika Na main view
|
||||
2
fastlane/metadata/android/bs/changelogs/71.txt
Normal file
2
fastlane/metadata/android/bs/changelogs/71.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Nekoliko manjih prijevoda i korisničke funkcije
|
||||
- Popravi crash u uvoz/dijeljenje lojalnost karticu na Android 6
|
||||
1
fastlane/metadata/android/bs/changelogs/72.txt
Normal file
1
fastlane/metadata/android/bs/changelogs/72.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Popraviti nesposobnost konfiguriranja slika u novoj kartici lojalnosti
|
||||
1
fastlane/metadata/android/bs/changelogs/73.txt
Normal file
1
fastlane/metadata/android/bs/changelogs/73.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Popravi učitavanje slika pri uređivanju postojeće kartice
|
||||
3
fastlane/metadata/android/bs/changelogs/74.txt
Normal file
3
fastlane/metadata/android/bs/changelogs/74.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Napravi kraticu
|
||||
- Generiši kraticu kartice
|
||||
- Popravi boju kartice
|
||||
4
fastlane/metadata/android/bs/changelogs/75.txt
Normal file
4
fastlane/metadata/android/bs/changelogs/75.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
- Izmijeni izabrani boju u dijalogu za mijenjanje boja
|
||||
- Podrška za brisanje više kartica odjednom
|
||||
- Popravi moguću Aritmeticexcepciju pri mijenjanju slike
|
||||
- Fiksiraj cijeli ekran je zatvoren kada rotirajući uređaj
|
||||
4
fastlane/metadata/android/bs/changelogs/76.txt
Normal file
4
fastlane/metadata/android/bs/changelogs/76.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
- Napravi linkove u bilješkama koje se mogu kliknuti
|
||||
- Pre-odaberite grupu u kojoj je korisnik trenutno pri kreiranju nove kartice
|
||||
- Zarez-odvojena grupna imena u lojalnost card view
|
||||
- Fiksiraj maksimiziraj dugme koje se pojavljuje na barkodeu
|
||||
4
fastlane/metadata/android/bs/changelogs/77.txt
Normal file
4
fastlane/metadata/android/bs/changelogs/77.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
- Poboljšaj uvoznika
|
||||
- Fix uvoznik Catia export sa više nota
|
||||
- Titula skale u prihvatljivom opsegu
|
||||
- Poboljšanja u animaciji
|
||||
1
fastlane/metadata/android/bs/changelogs/78.txt
Normal file
1
fastlane/metadata/android/bs/changelogs/78.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Fix crash na rotaciju u lojalnost kartice editovanje aktivnosti
|
||||
2
fastlane/metadata/android/bs/changelogs/79.txt
Normal file
2
fastlane/metadata/android/bs/changelogs/79.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Popravi Kratica tastature za biranje grafičkog elementa
|
||||
- Zamijeni uobičajeni Android crni ekran prskanjem ekrana
|
||||
2
fastlane/metadata/android/bs/changelogs/80.txt
Normal file
2
fastlane/metadata/android/bs/changelogs/80.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Fix slike nisu uvezene iz sigurnosne kopije
|
||||
- Opcija za prevazilaženje jezika
|
||||
4
fastlane/metadata/android/bs/changelogs/81.txt
Normal file
4
fastlane/metadata/android/bs/changelogs/81.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
- Poboljšaj listu karata za pejzaž i tablicu
|
||||
- Dodaj mi boju za kosu (hvala, Subhashish Anand!)
|
||||
- Ne zatvarajte aktivnost na grešci kamere (tako ručni unos je i dalje moguć)
|
||||
- Dodaj sve doprinosioce dijalogu s obavještenjima
|
||||
4
fastlane/metadata/android/bs/changelogs/82.txt
Normal file
4
fastlane/metadata/android/bs/changelogs/82.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
- Poboljšana podrška čitaocima ekrana
|
||||
- Nemoj da se slupaš dok pokušavaš da otvoriš video iz galerije
|
||||
- Provuci podršku na zaslonu sa kartica
|
||||
- Ne Resetuj grupu na pritiskom dugmeta
|
||||
2
fastlane/metadata/android/bs/changelogs/83.txt
Normal file
2
fastlane/metadata/android/bs/changelogs/83.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Podrška za mijenjanje redoslijeda sortiranja
|
||||
- Sprecite da ne gledate velike slike za barkodeom
|
||||
1
fastlane/metadata/android/bs/changelogs/84.txt
Normal file
1
fastlane/metadata/android/bs/changelogs/84.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Male greške i poboljšanja
|
||||
3
fastlane/metadata/android/cs_CZ/changelogs/10.txt
Normal file
3
fastlane/metadata/android/cs_CZ/changelogs/10.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Změna výchozího názvu importního/exportního souboru. (pull #84 (https://github.com/brarcher/loyalty-card-locker/pull/84))
|
||||
- Opraven řetězec na stránce import/export. (pull #87 (https://github.com/brarcher/loyalty-card-locker/pull/87))
|
||||
- Vylepšeno rozvržení stránky se zobrazením karet. Text by měl být lépe čitelný a je možné jej vybrat dlouhým kliknutím. (pull #91 (https://github.com/brarcher/loyalty-card-locker/pull/91))
|
||||
5
fastlane/metadata/android/cs_CZ/changelogs/11.txt
Normal file
5
fastlane/metadata/android/cs_CZ/changelogs/11.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
- Při úpravě ID karty předvyplňte na začátku existující ID
|
||||
- Omezte šířku generovaných čárových kódů, abyste snížili spotřebu paměti a chyby mimo paměť
|
||||
- Při editaci karty změňte tlačítko "Zadat kartu" na "Upravit kartu", pokud ID karty již existuje
|
||||
- Změňte barevné schéma tak, aby bylo jemnější a kompatibilní s ikonou aplikace, a změňte rozložení při prohlížení karty, aby bylo přehlednější
|
||||
- Přidejte úvodního průvodce, který se spustí při prvním spuštění aplikace
|
||||
1
fastlane/metadata/android/cs_CZ/changelogs/12.txt
Normal file
1
fastlane/metadata/android/cs_CZ/changelogs/12.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Zabránění pádu při otáčení obrazovky v úvodním průvodci prvního spuštění.
|
||||
2
fastlane/metadata/android/cs_CZ/changelogs/13.txt
Normal file
2
fastlane/metadata/android/cs_CZ/changelogs/13.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Změna ve verzi v0.11 snížila využití paměti při kreslení čárových kódů, ale ovlivnila rozměry čárových kódů. Nyní je tato změna provedena tak, aby byly rozměry čárového kódu zachovány a zároveň se snížilo využití paměti. (pull #126)
|
||||
- Aktualizace překladů do němčiny a francouzštiny. (pull #122, pull #124, pull #125))
|
||||
3
fastlane/metadata/android/cs_CZ/changelogs/14.txt
Normal file
3
fastlane/metadata/android/cs_CZ/changelogs/14.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Přidání možnosti nabídky zámku otáčení obrazovky při zobrazení karty. Pokud je uzamčeno, obrazovka přejde do své "přirozené" orientace a další otáčení obrazovky bude zablokováno. (pull #128)
|
||||
- Pokud je karta vybrána na hlavní obrazovce, ale nelze ji načíst, aplikace elegantně selže a vypíše zprávu. (pull #132)
|
||||
- Oprava případu, kdy nebylo možné najít ID rozvržení pro úvodního průvodce. (pull #128)
|
||||
2
fastlane/metadata/android/cs_CZ/changelogs/15.txt
Normal file
2
fastlane/metadata/android/cs_CZ/changelogs/15.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Přidání podpory zástupců aplikací (Android 7.1+), kdy se jako zástupci zobrazí naposledy použité karty. (pull #145 (https://github.com/brarcher/loyalty-card-locker/pull/145))
|
||||
- Přidání widgetu, který funguje jako připnutý zástupce aplikace, pro podporu zařízení, která běží pod systémem Android 7.1. (pull #142 (https://github.com/brarcher/loyalty-card-locker/pull/142))
|
||||
5
fastlane/metadata/android/cs_CZ/changelogs/16.txt
Normal file
5
fastlane/metadata/android/cs_CZ/changelogs/16.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
- Přidání podpory pro přidávání zástupců na domovskou obrazovku při přidávání nebo úpravách karty. (pull #155)
|
||||
- Odstranit widget, protože byl špatnou náhradou za zástupce. (pull #155)
|
||||
- Oprava exportu záloh v systému Android 7+. (pull #153)
|
||||
- Přesnější hlášení typu mime při exportu zálohovaných dat. (pull #156)
|
||||
- Oprava chyby, kdy nebylo možné upravit kartu. (pull #155)
|
||||
2
fastlane/metadata/android/cs_CZ/changelogs/17.txt
Normal file
2
fastlane/metadata/android/cs_CZ/changelogs/17.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Přidání podpory pro přidávání zástupců věrnostních karet ze spouštěče/domácí obrazovky. (pull #161 (https://github.com/brarcher/loyalty-card-locker/pull/161))
|
||||
- Odstranění podpory pro přidávání zástupců věrnostních karet ze samotné aplikace. Tím se odstraní potřeba oprávnění k přidávání zkratek. (pull #163 (https://github.com/brarcher/loyalty-card-locker/pull/163))
|
||||
2
fastlane/metadata/android/cs_CZ/changelogs/18.txt
Normal file
2
fastlane/metadata/android/cs_CZ/changelogs/18.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Oprava problému na Android SDK 24+, kdy použití možnosti importu výběru souboru způsobovalo pád. (pull #170 (https://github.com/brarcher/loyalty-card-locker/pull/170))
|
||||
- Nová ikona a barevné schéma. (pull #171 (https://github.com/brarcher/loyalty-card-locker/pull/171))
|
||||
3
fastlane/metadata/android/cs_CZ/changelogs/19.txt
Normal file
3
fastlane/metadata/android/cs_CZ/changelogs/19.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Oprava pádu při importu některých typů poškozených souborů CSV. (pull #177 (https://github.com/brarcher/loyalty-card-locker/pull/177))
|
||||
- Oprava importu záloh přímo ze souborového systému. (pull #180 (https://github.com/brarcher/loyalty-card-locker/pull/180))
|
||||
- Oprava importu záloh z některých typů poskytovatelů obsahu. (pull #179 (https://github.com/brarcher/loyalty-card-locker/pull/179))
|
||||
3
fastlane/metadata/android/cs_CZ/changelogs/2.txt
Normal file
3
fastlane/metadata/android/cs_CZ/changelogs/2.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Překlad do italštiny.
|
||||
- Podpora všech typů čárových kódů 1D. (Původně byly podporovány pouze 1D čárové kódy produktů)
|
||||
- Přidání požadovaného oprávnění pro fotoaparát, které původně chybělo.
|
||||
1
fastlane/metadata/android/cs_CZ/changelogs/20.txt
Normal file
1
fastlane/metadata/android/cs_CZ/changelogs/20.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Dočasné řešení pádu při instalaci na některých verzích systému Android (pravděpodobně Android 5 a nižší). (pull #184 (https://github.com/brarcher/loyalty-card-locker/pull/184))
|
||||
2
fastlane/metadata/android/cs_CZ/changelogs/21.txt
Normal file
2
fastlane/metadata/android/cs_CZ/changelogs/21.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Vylepšené rozvržení seznamu karet. (pull #188 (https://github.com/brarcher/loyalty-card-locker/pull/188))
|
||||
- Vylepšeno rozvržení při zobrazení karty. (pull #190 (https://github.com/brarcher/loyalty-card-locker/pull/190))
|
||||
1
fastlane/metadata/android/cs_CZ/changelogs/22.txt
Normal file
1
fastlane/metadata/android/cs_CZ/changelogs/22.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Změny v zobrazení karty, které zobrazují poznámku, umožňují, aby ID karty zabíralo více řádků, a zobrazují název obchodu. (pull #197 (https://github.com/brarcher/loyalty-card-locker/pull/197))
|
||||
3
fastlane/metadata/android/cs_CZ/changelogs/23.txt
Normal file
3
fastlane/metadata/android/cs_CZ/changelogs/23.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Přidejte tichou mezeru na začátek/konec čárových kódů. (pull #200 (https://github.com/brarcher/loyalty-card-locker/pull/200))
|
||||
- Přidání možností konfigurace barev použitých pro písmo a pozadí názvu obchodu. (pull #203 (https://github.com/brarcher/loyalty-card-locker/pull/203))
|
||||
- Přidání možností nastavení velikosti písma na stránce s výpisem karet a na stránce s jednotlivými kartami. (pull #204 (https://github.com/brarcher/loyalty-card-locker/pull/204))
|
||||
4
fastlane/metadata/android/cs_CZ/changelogs/24.txt
Normal file
4
fastlane/metadata/android/cs_CZ/changelogs/24.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
- Aktualizace překladů. (pull #208 (https://github.com/brarcher/loyalty-card-locker/pull/208))
|
||||
- Aktualizace vykreslování čárových kódů: (pull #209 (https://github.com/brarcher/loyalty-card-locker/pull/209))
|
||||
- Při otočení obrazovky znovu načtěte aktivitu zobrazení karty, aby měl obrázek čárového kódu správnou velikost.
|
||||
- Vykreslování 1D čárových kódů ve větším prostoru, což umožní lépe vyplnit obrazovku.
|
||||
2
fastlane/metadata/android/cs_CZ/changelogs/25.txt
Normal file
2
fastlane/metadata/android/cs_CZ/changelogs/25.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Zmenšení prostoru v záhlaví při zobrazení karty. (pull #213 (https://github.com/brarcher/loyalty-card-locker/pull/213))
|
||||
- Zakázat pípání při skenování čárového kódu. (pull #216 (https://github.com/brarcher/loyalty-card-locker/pull/216))
|
||||
1
fastlane/metadata/android/cs_CZ/changelogs/26.txt
Normal file
1
fastlane/metadata/android/cs_CZ/changelogs/26.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Zabránění pádu při vykreslování čárového kódu, který vyčerpá paměť aplikace. (pull #219 (https://github.com/brarcher/loyalty-card-locker/pull/219))
|
||||
2
fastlane/metadata/android/cs_CZ/changelogs/27.txt
Normal file
2
fastlane/metadata/android/cs_CZ/changelogs/27.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Snížení min SDK ze 17 na 15. (pull #226 (https://github.com/brarcher/loyalty-card-locker/pull/226))
|
||||
- Odstranit použití starší knihovny apache, která se používá pouze v unit testech, ale již není potřeba. (pull #225 (https://github.com/brarcher/loyalty-card-locker/pull/225))
|
||||
5
fastlane/metadata/android/cs_CZ/changelogs/28.txt
Normal file
5
fastlane/metadata/android/cs_CZ/changelogs/28.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
- Přidané překlady
|
||||
- Polština (pull #232 (https://github.com/brarcher/loyalty-card-locker/pull/232))
|
||||
- Španělština (pull #232 (https://github.com/brarcher/loyalty-card-locker/pull/232))
|
||||
- Slovenština (pull #232 (https://github.com/brarcher/loyalty-card-locker/pull/232))
|
||||
- Aktualizované překlady (pull #239 (https://github.com/brarcher/loyalty-card-locker/pull/239))
|
||||
2
fastlane/metadata/android/cs_CZ/changelogs/29.txt
Normal file
2
fastlane/metadata/android/cs_CZ/changelogs/29.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Oprava španělských překladů (pull #244 (https://github.com/brarcher/loyalty-card-locker/pull/244))
|
||||
- Aktualizovat překlady (pull #244 (https://github.com/brarcher/loyalty-card-locker/pull/244))
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user