mirror of
https://github.com/CatimaLoyalty/Android.git
synced 2025-12-25 08:07:56 -05:00
Compare commits
61 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
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)
|
||||
|
||||
@@ -1,5 +1,14 @@
|
||||
# Changelog
|
||||
|
||||
## 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"
|
||||
targetSdkVersion 31
|
||||
versionCode 84
|
||||
versionName "2.6.1"
|
||||
|
||||
vectorDrawables.useSupportLibrary true
|
||||
multiDexEnabled true
|
||||
|
||||
@@ -29,7 +29,8 @@
|
||||
<activity
|
||||
android:name="protect.card_locker.MainActivity"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/SplashTheme">
|
||||
android:theme="@style/SplashTheme"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
|
||||
@@ -56,19 +57,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 +102,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"/>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
{
|
||||
public static final String DATABASE_NAME = "Catima.db";
|
||||
public static final int ORIGINAL_DATABASE_VERSION = 1;
|
||||
public static final int DATABASE_VERSION = 10;
|
||||
public static final int DATABASE_VERSION = 11;
|
||||
|
||||
public static class LoyaltyCardDbGroups
|
||||
{
|
||||
@@ -44,6 +44,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 +54,17 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
public static final String groupID = "groupId";
|
||||
}
|
||||
|
||||
public enum LoyaltyCardOrder {
|
||||
Alpha,
|
||||
LastUsed,
|
||||
Expiry
|
||||
}
|
||||
|
||||
public enum LoyaltyCardOrderDirection {
|
||||
Ascending,
|
||||
Descending
|
||||
}
|
||||
|
||||
private Context mContext;
|
||||
|
||||
public DBHelper(Context context)
|
||||
@@ -83,7 +95,8 @@ 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 + "(" +
|
||||
@@ -250,13 +263,19 @@ 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'");
|
||||
}
|
||||
}
|
||||
|
||||
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();
|
||||
ContentValues contentValues = new ContentValues();
|
||||
@@ -270,14 +289,16 @@ 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);
|
||||
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
|
||||
return db.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(LoyaltyCardDbIds.STORE, store);
|
||||
@@ -289,15 +310,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);
|
||||
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
|
||||
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
|
||||
return db.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(LoyaltyCardDbIds.ID, id);
|
||||
@@ -310,7 +333,8 @@ 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);
|
||||
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
|
||||
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
|
||||
return db.insert(LoyaltyCardDbIds.TABLE, null, contentValues);
|
||||
}
|
||||
|
||||
@@ -347,6 +371,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();
|
||||
@@ -475,6 +509,18 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
*/
|
||||
public Cursor getLoyaltyCardCursor(final String filter, Group group)
|
||||
{
|
||||
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(final String filter, Group group, LoyaltyCardOrder order, LoyaltyCardOrderDirection direction) {
|
||||
String actualFilter = String.format("%%%s%%", filter);
|
||||
String[] selectionArgs = { actualFilter, actualFilter };
|
||||
StringBuilder groupFilter = new StringBuilder();
|
||||
@@ -501,11 +547,16 @@ public class DBHelper extends SQLiteOpenHelper
|
||||
}
|
||||
}
|
||||
|
||||
String orderField = getFieldForOrder(order);
|
||||
|
||||
return db.rawQuery("select * from " + LoyaltyCardDbIds.TABLE +
|
||||
" WHERE (" + LoyaltyCardDbIds.STORE + " LIKE ? " +
|
||||
" OR " + LoyaltyCardDbIds.NOTE + " LIKE ? )" +
|
||||
groupFilter.toString() +
|
||||
" ORDER BY " + LoyaltyCardDbIds.STAR_STATUS + " DESC," + LoyaltyCardDbIds.STORE + " COLLATE NOCASE ASC " +
|
||||
" ORDER BY " + LoyaltyCardDbIds.STAR_STATUS + " DESC, " +
|
||||
" (CASE WHEN " + orderField + " IS NULL THEN 1 ELSE 0 END), " +
|
||||
orderField + " COLLATE NOCASE " + getDbDirection(order, direction) + ", " +
|
||||
LoyaltyCardDbIds.STORE + " COLLATE NOCASE ASC " +
|
||||
limitString, selectionArgs, null);
|
||||
}
|
||||
|
||||
@@ -737,4 +788,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";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()));
|
||||
@@ -581,6 +582,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
}
|
||||
|
||||
setFullscreen(isFullscreen);
|
||||
|
||||
db.updateLoyaltyCardLastUsed(loyaltyCard.id);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,13 +16,17 @@ import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.CompoundButton;
|
||||
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;
|
||||
@@ -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();
|
||||
});
|
||||
@@ -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,14 +385,13 @@ 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)
|
||||
{
|
||||
@@ -391,7 +407,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!filterText.isEmpty()) {
|
||||
if(!mFilter.isEmpty()) {
|
||||
// Actual Empty Search Result
|
||||
mNoMatchingCardsText.setVisibility(View.VISIBLE);
|
||||
mNoGroupCardsText.setVisibility(View.GONE);
|
||||
@@ -486,11 +502,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 +518,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);
|
||||
@@ -541,6 +596,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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
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>
|
||||
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"
|
||||
|
||||
@@ -8,21 +8,23 @@ mondstern
|
||||
Taco
|
||||
Gediminas Murauskas
|
||||
IllusiveMan196
|
||||
Joel A
|
||||
Samantaz Fox
|
||||
arno-github
|
||||
Sergio Paredes
|
||||
Joel A
|
||||
Nyatsuki
|
||||
StoyanDimitrov
|
||||
Nyatsuki
|
||||
Petr Novák
|
||||
arshbeerSingh
|
||||
Oğuz Ersen
|
||||
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,7 @@ Maciej Błędkowski
|
||||
Mattia
|
||||
pbeckmann
|
||||
Peer Beckmann
|
||||
QuangDNguyen2211
|
||||
Rose Liverman
|
||||
Simone Dotto
|
||||
Subhashish Anand
|
||||
|
||||
@@ -190,4 +190,12 @@
|
||||
<string name="noGroupCards">Тази група не съдържа карти</string>
|
||||
<string name="toggleMoreInfo">Превключване на повече информация</string>
|
||||
<string name="barcodeImageDescriptionWithType">Изображение на щрихкод на карта от вида <xliff:g>%s</xliff:g></string>
|
||||
<string name="swipeToSwitchImages">Плъзване или задържане за смяна на изображения</string>
|
||||
<string name="sort_by">Сортиране по</string>
|
||||
<string name="reverse">Наобратно</string>
|
||||
<string name="sort_by_balance">Наличност</string>
|
||||
<string name="sort_by_expiry">Валидност</string>
|
||||
<string name="sort_by_most_recently_used">Последно използване</string>
|
||||
<string name="sort_by_name">Наименование</string>
|
||||
<string name="sort">Сортиране</string>
|
||||
</resources>
|
||||
@@ -192,4 +192,14 @@
|
||||
</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>
|
||||
</resources>
|
||||
@@ -36,4 +36,15 @@
|
||||
</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>
|
||||
</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>
|
||||
@@ -191,4 +191,11 @@
|
||||
<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>
|
||||
</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>
|
||||
@@ -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>
|
||||
@@ -191,4 +191,11 @@
|
||||
<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>
|
||||
<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>
|
||||
</resources>
|
||||
@@ -1,4 +1,11 @@
|
||||
<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>
|
||||
</resources>
|
||||
@@ -199,4 +199,11 @@
|
||||
<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>
|
||||
</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>
|
||||
@@ -191,4 +191,11 @@
|
||||
</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>
|
||||
</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>
|
||||
@@ -124,6 +124,10 @@
|
||||
|
||||
<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>
|
||||
@@ -239,7 +243,14 @@
|
||||
<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>
|
||||
<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>
|
||||
</resources>
|
||||
|
||||
@@ -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);
|
||||
@@ -316,7 +316,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 +433,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();
|
||||
|
||||
@@ -59,8 +59,9 @@ public class MainActivityTest
|
||||
assertNotNull(menu);
|
||||
|
||||
// The settings, import/export, groups, search and add button should be present
|
||||
assertEquals(menu.size(), 6);
|
||||
assertEquals(menu.size(), 7);
|
||||
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());
|
||||
@@ -95,7 +96,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 +131,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 +227,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<>();
|
||||
|
||||
@@ -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 @@
|
||||
За вашите баркодове, членства, програми за лоялност, талони и билети.
|
||||
За вашите щрихкодове, членства, програми за лоялност, талони и билети.
|
||||
|
||||
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))
|
||||
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í.
|
||||
@@ -1,10 +1,10 @@
|
||||
Přestaňte hledat plastové věrnostní karty při placení v obchodě nebo ve webovém obchodě.
|
||||
<b>Naskenujte si čárové kódy do svého zařízení pomocí jeho fotoaparátu a zapomeňte na karty.</b>
|
||||
😺
|
||||
|
||||
Zapomeňte na peněženku nebo ji mějte ultralehkou na cennosti.
|
||||
😺
|
||||
|
||||
S tímto nezbytným nástrojem pro každodenní nošení (EDC) můžete nahradit zbytečné plasty hotovostí.
|
||||
😺
|
||||
|
||||
- Vyhněte se špehování s velmi malým počtem oprávnění. Žádný přístup k internetu a žádné reklamy.
|
||||
- Přidejte karty nebo kódy se jmény a přizpůsobitelnými barvami.
|
||||
- Ruční zadání kódu, pokud není čárový kód k uložení nebo jej nelze použít.
|
||||
@@ -17,7 +17,6 @@ S tímto nezbytným nástrojem pro každodenní nošení (EDC) můžete nahradit
|
||||
- Zdarma, podporováno příspěvky komunity.
|
||||
- Používejte, studujte, měňte a sdílejte dle libosti; <i>se všemi</i>.
|
||||
- Nejen svobodný software / open source. <i>Copylefted</i> libre software (GPLv3+) správa karet.
|
||||
😺
|
||||
|
||||
Zjednodušte si život a nakupování a už nikdy neztraťte papírovou účtenku, dárkovou kartu pro platbu v obchodě nebo letenku.
|
||||
Vezměte si s sebou všechny své odměny a bonusy a šetřete za pochodu.
|
||||
😺
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
Schluss mit der Suche nach Plastik-Belohnungskarten beim Bezahlen im Geschäft oder Webshop.
|
||||
<b>Scanne EAN-Codes mit der Kamera deines Geräts, du brauchst keine Karten mehr.</b>
|
||||
😺
|
||||
|
||||
Du brauchst keine Geldbörse, oder mach sie federleicht für Wertsachen.
|
||||
😺
|
||||
|
||||
Mit diesem unverzichtbaren (EDC)Werkzeug kannst du nutzloses Plastik durch Bargeld ersetzen.
|
||||
😺
|
||||
|
||||
- Vermeide Spionage mit sehr wenigen Berechtigungen. Kein Internetzugang und keine Werbung.
|
||||
- Füge Karten oder Codes mit Namen und anpassbaren Farben hinzu.
|
||||
- Manuelle Code-Eingabe, wenn kein Barcode gespeichert ist oder nicht funktioniert.
|
||||
@@ -17,7 +17,7 @@ Mit diesem unverzichtbaren (EDC)Werkzeug kannst du nutzloses Plastik durch Barge
|
||||
- Kostenlos, unterstützt durch Gemeinschaftsbeiträge.
|
||||
- Verwende, studiere, ändere und teile es, wie du willst; <i>mit Allen</i>.
|
||||
- Nicht nur freie und quelloffene Software. <i>Copylefted</i> freie Software (GPLv3+) Kartenverwaltung.
|
||||
😺
|
||||
|
||||
Vereinfache dein Leben und Einkäufe, und verliere nie wieder eine Papierrechung, eine Geschenkkarte für die Bezahlung im Geschäft oder ein Flugticket.
|
||||
Habe deine Prämien und Boni immer bei der Hand, und spare unterwegs.
|
||||
😺
|
||||
|
||||
|
||||
2
fastlane/metadata/android/en-US/changelogs/83.txt
Normal file
2
fastlane/metadata/android/en-US/changelogs/83.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Support for changing the sorting order
|
||||
- Prevent Out Of Memory on scanning large pictures for barcode
|
||||
1
fastlane/metadata/android/en-US/changelogs/84.txt
Normal file
1
fastlane/metadata/android/en-US/changelogs/84.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Minor bugfixes and improvements
|
||||
@@ -1,10 +1,10 @@
|
||||
Stop the search for plastic reward cards during store or webshop checkout.
|
||||
<b>Scan barcodes to your device using its camera, forget about cards.</b>
|
||||
😺
|
||||
|
||||
Forget your wallet, or keep it ultralight for valuables.
|
||||
😺
|
||||
|
||||
With this essential everyday carry (EDC) tool you can replace useless plastic with cash.
|
||||
😺
|
||||
|
||||
- Avoid spying with very few permissions. No Internet access and no ads.
|
||||
- Add cards or codes with names and customizable colours.
|
||||
- Manual code entry if there is no barcode to store, or it can't be used.
|
||||
@@ -17,7 +17,6 @@ With this essential everyday carry (EDC) tool you can replace useless plastic wi
|
||||
- Gratis, supported by community contributions.
|
||||
- Use, study, change and share it as you wish; <i>with all</i>.
|
||||
- Not only Free Software / Open Source. <i>Copylefted</i> libre software (GPLv3+) card management.
|
||||
😺
|
||||
|
||||
Simplify your life and shopping, and never lose a paper receipt, in-store payment gift card or airplane ticket again.
|
||||
Take all your rewards and bonuses with you, and save as you go.
|
||||
😺
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
Deja de buscar tarjetas de recompensa de plástico durante la compra en la tienda o en la web.
|
||||
<b>Escanea los códigos de barras en tu dispositivo usando su cámara, olvídate de las tarjetas.</b>
|
||||
😺
|
||||
|
||||
Olvídate de la cartera, o téngala ultraligera para los objetos de valor.
|
||||
😺
|
||||
|
||||
Con esta herramienta esencial para llevar a diario (EDC) puedes sustituir el plástico inútil por el dinero en efectivo.
|
||||
😺
|
||||
|
||||
- Evita el espionaje con muy pocos permisos. Sin acceso a Internet y sin anuncios.
|
||||
- Añade tarjetas o códigos con nombres y colores personalizables.
|
||||
- Introduce manual de códigos si no hay código de barras que almacenar, o no se puede utilizar.
|
||||
@@ -17,7 +17,7 @@ Con esta herramienta esencial para llevar a diario (EDC) puedes sustituir el pl
|
||||
- Gratis, apoyado por las contribuciones de la comunidad.
|
||||
- Utiliza, estudia, cambia y comparte como quieras; <i>con quien quieras</i>.
|
||||
- No sólo Software Libre / Open Source. Es un software de gestión de tarjetas libre y <i>copyleft</i> (GPLv3+).
|
||||
😺
|
||||
|
||||
Simplifica tu vida y tus compras, y no vuelvas a perder un recibo de papel, una tarjeta regalo de pago en tienda o un billete de avión.
|
||||
Lleva contigo todas tus recompensas y bonos, y ahorra sobre la marcha.
|
||||
😺
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
Lopeta muovisten palkintokorttien etsiminen kaupan tai verkkokaupan kassalla.
|
||||
<b>Skannaa viivakoodit laitteeseesi sen kameran avulla, unohda kortit.</b>
|
||||
😺
|
||||
|
||||
Unohda lompakko tai pidä se ultrakevyesti arvoesineitä varten.
|
||||
😺
|
||||
|
||||
Tämän välttämättömän jokapäiväisen kantamisen (EDC) välineen avulla voit korvata turhan muovin käteisellä.
|
||||
😺
|
||||
|
||||
- Vältä vakoilu hyvin vähillä luvilla. Ei Internet-yhteyttä eikä mainoksia.
|
||||
- Lisää kortteja tai koodeja nimillä ja muokattavilla väreillä.
|
||||
- Koodin syöttäminen manuaalisesti, jos viivakoodia ei voi tallentaa tai sitä ei voi käyttää.
|
||||
@@ -17,7 +17,7 @@ Tämän välttämättömän jokapäiväisen kantamisen (EDC) välineen avulla vo
|
||||
- Gratis, yhteisön panoksilla tuettu.
|
||||
- Käytä, tutki, muuta ja jaa sitä haluamallasi tavalla; <i>kaikkien</i> kanssa.
|
||||
- Ei vain vapaat ohjelmistot / avoin lähdekoodi. <i>Copylefted</i> libre-ohjelmisto (GPLv3+) kortinhallinta.
|
||||
😺
|
||||
|
||||
Yksinkertaista elämääsi ja shoppailuasi, äläkä enää koskaan hukkaa paperikuittia, kaupassa maksettavaa lahjakorttia tai lentolippua.
|
||||
Ota kaikki palkintosi ja bonuksesi mukaasi ja säästä matkan aikana.
|
||||
😺
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
Arrêtez de chercher des cartes de fidélité en plastique lors du passage à la caisse des magasins ou des boutiques en ligne.
|
||||
<b>Scannez les codes-barres sur votre appareil en utilisant son appareil photo, oubliez les cartes</b>.
|
||||
😺
|
||||
|
||||
Oubliez votre portefeuille, ou gardez-le ultraléger pour les objets de valeur.
|
||||
😺
|
||||
|
||||
Avec cet outil essentiel à emporter au quotidien, vous pouvez remplacer le plastique inutile par de l'argent liquide.
|
||||
😺
|
||||
|
||||
- Évitez l'espionnage avec très peu de permissions. Aucun accès à Internet et aucune publicité.
|
||||
- Ajoutez des cartes ou des codes avec des noms et des couleurs personnalisables.
|
||||
- Saisie manuelle du code s'il n'y a pas de code-barres à stocker ou s'il ne peut pas être utilisé.
|
||||
@@ -17,7 +17,7 @@ Avec cet outil essentiel à emporter au quotidien, vous pouvez remplacer le plas
|
||||
- Gratis, soutenu par les contributions de la communauté.
|
||||
- Utilisez, étudiez, modifiez et partagez comme vous le souhaitez ; <i>avec tous</i>.
|
||||
- Pas seulement logiciel libre et à code source ouvert <i>logiciel libre à copyleft</i> (GPLv3+) pour la gestion des cartes.
|
||||
😺
|
||||
|
||||
Simplifiez votre vie et vos achats, et ne perdez plus jamais un reçu papier, une carte cadeau de paiement en magasin ou un billet d'avion.
|
||||
Emportez toutes vos récompenses et primes avec vous, et économisez au fur et à mesure.
|
||||
😺
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
Basta con la ricerca di carte premio di plastica quando esci dal negozio.
|
||||
<b>Scannerizza i codici a barre sul tuo dispositivo usando la sua fotocamera, dimentica le carte.</b>
|
||||
😺
|
||||
|
||||
Dimentica il tuo portafoglio, o tienilo ultraleggero per gli oggetti di valore.
|
||||
😺
|
||||
|
||||
Con questo strumento essenziale per il trasporto quotidiano, puoi sostituire la plastica inutile con i contanti.
|
||||
😺
|
||||
|
||||
- Evita di spiare con pochissimi permessi. Nessun accesso a Internet e nessuna pubblicità.
|
||||
- Aggiungi carte o codici con nomi e colori personalizzabili.
|
||||
- Inserimento manuale del codice se non c'è un codice a barre da memorizzare o non può essere utilizzato.
|
||||
@@ -17,7 +17,7 @@ Con questo strumento essenziale per il trasporto quotidiano, puoi sostituire la
|
||||
- Gratis, supportato dai contributi della comunità.
|
||||
- Usalo, studialo, cambialo e condividilo come vuoi; <i>con tutti</i>.
|
||||
- Non solo un software libero. <i>Copylefted</i> software libero (GPLv3+) gestione schede.
|
||||
😺
|
||||
|
||||
Semplifica la tua vita e gli acquisti, e non perdere mai più una ricevuta cartacea, una carta regalo con pagamento in negozio o un biglietto aereo.
|
||||
Porta con te tutti i tuoi premi e bonus, e risparmia mentre vai.
|
||||
😺
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
Nustokite ieškoti plastikinių lojalumo kortelių parduotuvėje ar parduotuvėje internetinėje.
|
||||
<b> Nuskaitykite brūkšninius kodus į savo įrenginį naudodami jo kamerą ir pamirškite korteles.</b>
|
||||
😺
|
||||
|
||||
Pamirškite piniginę arba laikykite ją itin lengvą tik vertingiems daiktams.
|
||||
😺
|
||||
|
||||
Naudodami šį būtiną kasdienio naudojimo (EDC) įrankį galite nenaudingą plastiką pakeisti grynaisiais pinigais.
|
||||
😺
|
||||
|
||||
- Išvenkite šnipinėjimo, programėlė prašo labai nedaug leidimų. Jokios prieigos prie interneto ir jokių reklamų.
|
||||
- Pridėkite korteles ar kodus su pavadinimais ir pasirenkamomis spalvomis.
|
||||
- Rankiniu būdu įveskite kodą, jei nėra saugotino brūkšninio kodo arba jo negalima naudoti.
|
||||
@@ -17,7 +17,7 @@ Naudodami šį būtiną kasdienio naudojimo (EDC) įrankį galite nenaudingą pl
|
||||
- Nemokama, remiama bendruomenės įnašais.
|
||||
- Naudokite, studijuokite, keiskite ir dalinkitės, kaip norite; <i>su visais</i>.
|
||||
- Ne tik laisvoji programinė įranga / atvirasis kodas. <i>"Copylefted"</i> laisvosios programinės įrangos (GPLv3+) kortelių valdymas.
|
||||
😺
|
||||
|
||||
Supaprastinkite savo gyvenimą ir apsipirkimą ir daugiau niekada nepraraskite popierinio kvito, parduotuvės dovanų kortelės ar lėktuvo bilieto.
|
||||
Pasiimkite su savimi visus nuolaidas ir premijas ir taupykite keliaudami.
|
||||
😺
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
Stopp leitingen etter plastikkfordelskort når du er i kassen på nett eller i butikk.
|
||||
<b>Skann strekkoder til enheten din ved bruk av kameraet, og glem kortene.</b>
|
||||
😺
|
||||
|
||||
Glem hele lommeboken, eller behold den ultralett for verdisaker.
|
||||
😺
|
||||
|
||||
Med dette essensielle verktøyet kan du erstatte unyttig plast med kontanter.
|
||||
😺
|
||||
|
||||
- Unngå spionasje med veldig få tilganger. Ingen tilgang til Internett, og ingen reklame.
|
||||
- Legg til kort eller koder med navn og egne farger.
|
||||
- Manuell kodeinnskriving hvis det ikke er noen strekkode å lagre, eller den ikke kan brukes.
|
||||
@@ -17,7 +17,7 @@ Med dette essensielle verktøyet kan du erstatte unyttig plast med kontanter.
|
||||
- Gratis, med støtte fra gemenskapsbidrag.
|
||||
- Bruk, studer, endre og del som du vil; <i>med alle</i>.
|
||||
- Ikke bare åpen kildekode. <i>Gemenhetslig</i> fri programvare (GPLv3+).
|
||||
😺
|
||||
|
||||
Forenkle livet ditt og handlingen, og aldri mist en papirkvittering, butikkbetalingskort, gavekort eller flybillett igjen.
|
||||
Ta alle dine belønninger og bonuser med deg, og spar mens du er på farten.
|
||||
😺
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
Stop met zoeken naar plastic kaarten tijdens het afrekenen.
|
||||
<b>Scan barcodes met de camera en sla ze op op je apparaat.</b>
|
||||
😺
|
||||
|
||||
Vergeet je portemonnee of gebruik hem alleen voor waardevolle dingen.
|
||||
😺
|
||||
|
||||
Met deze essentiële app kun je je waardeloze plastic kaarten weggooien.
|
||||
😺
|
||||
|
||||
- Weinig rechten vereist, geen spionage/tracking, geen internettoegang en geen reclame;
|
||||
- Voorzie kaarten of codes van namen en zelfgekozen kleuren;
|
||||
- Voer codes handmatig in als er geen barcode is;
|
||||
@@ -17,7 +17,7 @@ Met deze essentiële app kun je je waardeloze plastic kaarten weggooien.
|
||||
- Gratis, ondersteund door de gemeenschap;
|
||||
- Bekijk de broncode, pas deze aan en deel deze <i>met iedereen</i> (indien gewenst);
|
||||
- Niet alleen vrije software/open source, maar ook <i>copyleft</i> vrije software (GPLv3+).
|
||||
😺
|
||||
|
||||
Maak je leven en winkeluitjes makkelijker doordat je nooit meer een kaart of bonnetje vergeet.
|
||||
Met deze app heb je ze altijd bij de hand en bespaar je tijd.
|
||||
😺
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
Не нужно искать пластиковые бонусные карты на кассе в магазине или интернет-магазине.
|
||||
<b>Соканируйте штрих-коды на своё устройство с помощью камеры и забудьте о пластиковых картах.</b>
|
||||
😺
|
||||
|
||||
Забудьте о бумажнике или держите его налегке для ценных вещей.
|
||||
😺
|
||||
|
||||
С помощью этого повседневного инструмента вы сможете заменить бесполезный пластик на наличные.
|
||||
😺
|
||||
|
||||
- Нет отслеживания, минимальное количество разрешений. Нет требуется доступ в интернет и нет рекламы.
|
||||
- Добавление карт или штрих-кодов с настраиваемыми именами и цветами.
|
||||
- Возможен ручной ввод данных, если штрих-код отсутствует или не распознаётся.
|
||||
@@ -17,7 +17,7 @@
|
||||
- Безвозмездно, при поддержке сообщества.
|
||||
- Используйте, изучайте, изменяйте и делитесь по своему усмотрению <i>как угодно</i>.
|
||||
- Не просто бесплатное программное обеспечение с открытым исходным кодом. Полностью <i>свободное</i> программное обеспечение (GPLv3+) для управления картами.
|
||||
😺
|
||||
|
||||
Упростите свою жизнь и покупки: больше никогда не потеряется бумажная квитанция, подарочная карта оплаты в магазине или билет на самолёт.
|
||||
Держите все награды и бонусы с собой и сохраняйте по мере их поступления.
|
||||
😺
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
Slipp leta efter bonuskort i plast när du ska betala i affärer eller webbutiker.
|
||||
<b>Skanna in streckkoder i din enhet med hjälp av kameran och glöm sen bort alla kort.</b>
|
||||
😺
|
||||
|
||||
Glöm din plånbok, eller håll den ultralätt när det gäller värdesaker.
|
||||
😺
|
||||
|
||||
Med detta essentiella verktyg kan du ersätta värdelös plast med kontanter.
|
||||
😺
|
||||
|
||||
- Undvik att bli spionerad på genom mycket få behörigheter. Ingen internetanslutning och ingen reklam.
|
||||
- Lägg till kort eller koder med namn och valfria färger.
|
||||
- Koder kan läggas till manuellt om det inte finns någon streckkod att spara, eller om den inte kan användas.
|
||||
@@ -17,7 +17,7 @@ Med detta essentiella verktyg kan du ersätta värdelös plast med kontanter.
|
||||
- Gratis, med stöd av gemenskapens bidrag.
|
||||
- Använd, studera, ändra och dela den som du önskar; <i>med alla</i>.
|
||||
- Inte bara öppen källkod. <i>Copyleftad</i> fri programvara (GPLv3+) för korthantering.
|
||||
😺
|
||||
|
||||
Förenkla ditt liv och din shopping, och förlora aldrig ett papperskvitto, presentkort eller flygbiljett igen.
|
||||
Ta alla dina belöningar och bonusar med dig, och spara nya efter hand.
|
||||
😺
|
||||
|
||||
|
||||
2
fastlane/metadata/android/tr-TR/changelogs/83.txt
Normal file
2
fastlane/metadata/android/tr-TR/changelogs/83.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Sıralama düzenini değiştirme desteği
|
||||
- Barkod için büyük resimleri tararken yetersiz bellek durumunu önle
|
||||
@@ -1,10 +1,10 @@
|
||||
Mağazada veya internette ödeme sırasında plastik ödül kartlarını aramaya son verin.
|
||||
<b>Kamerasını kullanarak barkodları aygıtınıza tarayın, kartları unutun.</b>
|
||||
😺
|
||||
|
||||
Cüzdanınızı unutun veya değerli eşyalarınız için aşırı hafif tutun.
|
||||
😺
|
||||
|
||||
Bu temel günlük taşıma aracıyla işe yaramaz plastiği nakitle değiştirebilirsiniz.
|
||||
😺
|
||||
|
||||
- Çok az izinle casusluktan kaçının. İnternet erişimi ve reklam yok.
|
||||
- Adları ve özelleştirilebilir renkleri olan kartlar veya kodlar ekleyin.
|
||||
- Kaydedilecek barkod yoksa veya kullanılamıyorsa elle kod girişi.
|
||||
@@ -17,7 +17,7 @@ Bu temel günlük taşıma aracıyla işe yaramaz plastiği nakitle değiştireb
|
||||
- Topluluk katkılarıyla desteklenir ve ücretsizdir.
|
||||
- Dilediğiniz gibi kullanın, inceleyin, değiştirin ve <i>herkesle</i> paylaşın.
|
||||
- Yalnızca Özgür Yazılım / Açık Kaynaklı değil. <i>Copyleft lisanslı</i> özgür (GPLv3+) kart yönetimi yazılımı.
|
||||
😺
|
||||
|
||||
Hayatınızı ve alışverişinizi basitleştirin ve bir daha asla kağıt fatura, mağaza içi ödemeli hediye kartı veya uçak bileti kaybetmeyin.
|
||||
Tüm ödüllerinizi yanınıza alın ve kaydedin.
|
||||
😺
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
Тепер можна не шукати свої пластикові картки знижок та програм лояльності при покупці у магазині чи на сайті.
|
||||
<b>Відскануйте штрих-коди на свій пристрій за допомогою його камери та забудьте про картки.</b>
|
||||
😺
|
||||
|
||||
Забудьте свій гаманець чи просто тримайте важливі речі у ньому.
|
||||
😺
|
||||
|
||||
За допомогою цього важливого щоденного мобільного інструменту (ЩМІ) ви можете замінити непотрібний пластик готівкою.
|
||||
😺
|
||||
|
||||
- Уникнення шпигунства за допомогою дуже малої кількості дозволів. Немає доступу до Інтернету та реклами.
|
||||
- Додавання карток або кодів з іменами та настроюваними кольорами.
|
||||
- Введення коду вручну, якщо немає штрих-коду для зберігання або він не може бути використаний.
|
||||
@@ -17,7 +17,7 @@
|
||||
- Безкоштовна, підтримувана внесками громади.
|
||||
- Використовуйте, вивчайте, змінюйте та діліться програмою, як хочете; <i>з усіма</i>.
|
||||
- Не тільки вільне програмне забезпечення / відкритий код. <i>Копілефт</i> вільне програмне забезпечення (GPLv3 +).
|
||||
😺
|
||||
|
||||
Спростіть своє життя та покупки, і ніколи більше не втрачайте паперову квитанцію, подарункову картку магазину або квиток на літак.
|
||||
Візьміть із собою всі свої нагороди та бонуси та економте на ходу.
|
||||
😺
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
在实体店或网店结账时,再也不用翻找塑料积分卡了。
|
||||
<b>用摄像头扫描条形码存储到您的设备,就不需要卡片了。</b>
|
||||
😺
|
||||
|
||||
抛开钱包,或者只携带贵重物品给钱包减负。
|
||||
😺
|
||||
|
||||
有了这个必不可少的日常携带(EDC)工具,你可以用现金取代无用的塑料。
|
||||
😺
|
||||
|
||||
- 要求权限极少,避免隐私泄露。无需互联网接入,没有广告。
|
||||
- 添加卡片或号码,并为其设置名称和颜色。
|
||||
- 如果没有条码可存储,或条码无法使用,可手动输入号码。
|
||||
@@ -17,7 +17,7 @@
|
||||
- 免费的,由社区贡献支持。
|
||||
- 欢迎<i>与所有人</i>随意使用、研究、改变和分享本软件。
|
||||
- 不仅是自由软件/开放源码。<i>Copylefted</i>自由软件(GPLv3+)卡片管理。
|
||||
😺
|
||||
|
||||
简化你的生活和购物,再也不会丢失纸质收据、店内支付礼品卡或飞机票。
|
||||
带上你所有的优惠和积分卡,随时随地省钱。
|
||||
😺
|
||||
|
||||
|
||||
Reference in New Issue
Block a user