mirror of
https://github.com/CatimaLoyalty/Android.git
synced 2025-12-24 15:47:53 -05:00
Compare commits
236 Commits
create-pul
...
v2.36.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a514f285f7 | ||
|
|
5634df1f5a | ||
|
|
f2b46310de | ||
|
|
a646717277 | ||
|
|
63e992be5c | ||
|
|
98a574f223 | ||
|
|
6dfbcc3577 | ||
|
|
4c00c8b94d | ||
|
|
cde3dd8ecf | ||
|
|
e22ad2c4a8 | ||
|
|
62aeadae71 | ||
|
|
7e89db428b | ||
|
|
50e13c22c6 | ||
|
|
7e323dc342 | ||
|
|
c0cd051831 | ||
|
|
b1b97c8972 | ||
|
|
256687ecdb | ||
|
|
9829cc3100 | ||
|
|
2aa8be2642 | ||
|
|
75a6482c0e | ||
|
|
14e953db4c | ||
|
|
60e3c864c8 | ||
|
|
87ca4a5dd3 | ||
|
|
a70671cf0b | ||
|
|
67d7ea4ca2 | ||
|
|
53f58940dd | ||
|
|
f2639612f0 | ||
|
|
d29344af73 | ||
|
|
32635bdc9a | ||
|
|
8457cc06d2 | ||
|
|
a8316769a1 | ||
|
|
2f6bae7333 | ||
|
|
e951402049 | ||
|
|
4d5e3043ff | ||
|
|
d57f528165 | ||
|
|
14e84e5e0f | ||
|
|
fe79d3e866 | ||
|
|
88369ea070 | ||
|
|
944e83e480 | ||
|
|
8bb15bcb57 | ||
|
|
cb6358892b | ||
|
|
9956f6de34 | ||
|
|
893bd551e0 | ||
|
|
5c67459330 | ||
|
|
e2988ec29a | ||
|
|
2c96b11725 | ||
|
|
0d52a49e8b | ||
|
|
504ab7f148 | ||
|
|
d75f228632 | ||
|
|
410f0f2a6f | ||
|
|
c4672d282c | ||
|
|
9297fee839 | ||
|
|
acc72c0937 | ||
|
|
54c27f7038 | ||
|
|
7277ff26fc | ||
|
|
9a0149def8 | ||
|
|
e217e99864 | ||
|
|
9674af3bae | ||
|
|
a2b85dd37a | ||
|
|
220fe96268 | ||
|
|
917b6cfb7d | ||
|
|
0b687e1788 | ||
|
|
b35fa810ef | ||
|
|
0d1e10d064 | ||
|
|
96359e5942 | ||
|
|
bf63390f65 | ||
|
|
6f54981333 | ||
|
|
aed145239b | ||
|
|
99a8c917b9 | ||
|
|
ef39f30fd7 | ||
|
|
24e996e1a9 | ||
|
|
4178dce4e2 | ||
|
|
514eaae616 | ||
|
|
5692251668 | ||
|
|
6208dd3fd9 | ||
|
|
85288a3658 | ||
|
|
bae7e676b4 | ||
|
|
6ae7491a18 | ||
|
|
e5de694711 | ||
|
|
996cd2cd2c | ||
|
|
8f6bd8c266 | ||
|
|
599d58e3c7 | ||
|
|
1dd58bf2d0 | ||
|
|
90cf3adc25 | ||
|
|
26797addb8 | ||
|
|
b320e6f253 | ||
|
|
48d9ac4eed | ||
|
|
388eb273e4 | ||
|
|
0eee713712 | ||
|
|
3ff1262149 | ||
|
|
f4a420b699 | ||
|
|
b35b0cf1f9 | ||
|
|
2f4ee75c85 | ||
|
|
b3356b6575 | ||
|
|
359a37c8a6 | ||
|
|
a5a57fe8c8 | ||
|
|
c1f088c191 | ||
|
|
fec8d05927 | ||
|
|
466f068e36 | ||
|
|
b5880223a5 | ||
|
|
0a8a621fad | ||
|
|
5267607b79 | ||
|
|
5474a516f4 | ||
|
|
221b8cd7d1 | ||
|
|
2b544a74bd | ||
|
|
bcb7df24ec | ||
|
|
59fb95a4a7 | ||
|
|
157617fe4a | ||
|
|
ecdfeee3e6 | ||
|
|
3cd3a53268 | ||
|
|
9edf3c3028 | ||
|
|
82d8addafa | ||
|
|
3b446145b8 | ||
|
|
92fec8558e | ||
|
|
df858a7d65 | ||
|
|
a4c0c51a45 | ||
|
|
33d4b3ab7c | ||
|
|
06dc720108 | ||
|
|
a24805232c | ||
|
|
5ec1bcb721 | ||
|
|
cddc273333 | ||
|
|
0bd46b96cb | ||
|
|
2b6926c800 | ||
|
|
ceb6bb8328 | ||
|
|
8fd88e29ec | ||
|
|
d97b1cc1d0 | ||
|
|
baf2848ce0 | ||
|
|
b16ea272ae | ||
|
|
59fa7d143d | ||
|
|
658cfd2d4a | ||
|
|
a428db36c4 | ||
|
|
469eaefcb6 | ||
|
|
e991c9fdc1 | ||
|
|
43c9e7f7ac | ||
|
|
b410f100e8 | ||
|
|
e2413f8538 | ||
|
|
745f1ba8cc | ||
|
|
482b16e772 | ||
|
|
f284c4807f | ||
|
|
9927d6a544 | ||
|
|
0b4c474ece | ||
|
|
344e853839 | ||
|
|
865f5f67d7 | ||
|
|
5f8e7ab702 | ||
|
|
6ac864e3aa | ||
|
|
e0a012f3a4 | ||
|
|
5f1ae9db8e | ||
|
|
dcb5cd882e | ||
|
|
9d27df7e10 | ||
|
|
a11682181c | ||
|
|
a9b7f47053 | ||
|
|
809a91b16a | ||
|
|
2c6e56342c | ||
|
|
df2b7ffc1b | ||
|
|
3c5f28b496 | ||
|
|
7942bfc3f7 | ||
|
|
9e8e7fd8c2 | ||
|
|
e8c5caa2f3 | ||
|
|
b697aa389a | ||
|
|
a19f5b91a8 | ||
|
|
e1ebeec623 | ||
|
|
7734727e16 | ||
|
|
d4d1e9e649 | ||
|
|
b3b45fcc50 | ||
|
|
3bf63b855f | ||
|
|
c24ac94307 | ||
|
|
94c8f1f82d | ||
|
|
5d455a31b3 | ||
|
|
b43fe087d6 | ||
|
|
c7c414c218 | ||
|
|
775b55fd23 | ||
|
|
4cb601e0ce | ||
|
|
c42533aba5 | ||
|
|
df919417cb | ||
|
|
90afc5594f | ||
|
|
7b62e1871d | ||
|
|
fc483b449b | ||
|
|
62dbc9c97f | ||
|
|
ed9beb0752 | ||
|
|
6b750ff84b | ||
|
|
17be2599f0 | ||
|
|
20820c27f8 | ||
|
|
b83f629c09 | ||
|
|
bfc79f6d97 | ||
|
|
e297620ea2 | ||
|
|
83e5240871 | ||
|
|
2e68290d0c | ||
|
|
690d405f87 | ||
|
|
4c711a991a | ||
|
|
79795ff328 | ||
|
|
c178fb230e | ||
|
|
0acaf0598a | ||
|
|
7b99bf86fa | ||
|
|
6cf68abfc7 | ||
|
|
0e95dadb6c | ||
|
|
77b525809d | ||
|
|
d624316207 | ||
|
|
353c8090a9 | ||
|
|
7928cf8332 | ||
|
|
75bcade01c | ||
|
|
2d33774b56 | ||
|
|
26e5a1fbab | ||
|
|
b516736b6c | ||
|
|
881b3fefef | ||
|
|
a4c14e3c88 | ||
|
|
2943b64634 | ||
|
|
0af74ef8de | ||
|
|
8556507c6a | ||
|
|
ff8c662423 | ||
|
|
9314637094 | ||
|
|
8def5cbe5b | ||
|
|
6c7f21d6fd | ||
|
|
edc3c38d14 | ||
|
|
4045566514 | ||
|
|
9b5af3b221 | ||
|
|
b5fc0af979 | ||
|
|
4c643b3c61 | ||
|
|
01e198c94b | ||
|
|
6b09656164 | ||
|
|
21b051c422 | ||
|
|
9a8fa4ad1a | ||
|
|
2ac2f07c80 | ||
|
|
e893923164 | ||
|
|
ebacb6fe4c | ||
|
|
fb329f410a | ||
|
|
f95d7d62dd | ||
|
|
482303b775 | ||
|
|
d02a359cc3 | ||
|
|
9b24158acc | ||
|
|
cf65476f16 | ||
|
|
02d04614e0 | ||
|
|
a543d4d4bf | ||
|
|
f4de708e42 | ||
|
|
f1079f4e5d | ||
|
|
4d09077b2f | ||
|
|
f62fc879c5 |
8
.github/workflows/android.yml
vendored
8
.github/workflows/android.yml
vendored
@@ -24,7 +24,7 @@ permissions:
|
||||
security-events: none
|
||||
statuses: none
|
||||
env:
|
||||
JAVA_HOME: /usr/lib/jvm/java-17-openjdk-amd64
|
||||
JAVA_HOME: /usr/lib/jvm/java-21-openjdk-amd64
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
@@ -36,10 +36,10 @@ jobs:
|
||||
- name: Fail on bad translations
|
||||
run: if grep -ri "<xliff" app/src/main/res/values*/strings.xml; then echo "Invalidly escaped translations found"; exit 1; fi
|
||||
- uses: gradle/actions/wrapper-validation@v4
|
||||
- name: set up OpenJDK 17
|
||||
- name: set up OpenJDK 21
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y openjdk-17-jdk-headless
|
||||
sudo apt-get install -y openjdk-21-jdk-headless
|
||||
sudo update-alternatives --auto java
|
||||
- name: Build
|
||||
run: ./gradlew assemble${{ matrix.flavor }}Release
|
||||
@@ -64,8 +64,6 @@ jobs:
|
||||
api-level: 35
|
||||
arch: x86_64
|
||||
script: ./gradlew connected${{ matrix.flavor }}DebugAndroidTest
|
||||
- name: SpotBugs
|
||||
run: ./gradlew spotbugs${{ matrix.flavor }}Release
|
||||
- name: Archive test results
|
||||
if: always()
|
||||
uses: actions/upload-artifact@v4.6.2
|
||||
|
||||
33
.github/workflows/gradle-update.yml
vendored
33
.github/workflows/gradle-update.yml
vendored
@@ -1,33 +0,0 @@
|
||||
name: Gradle update
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: '3 6 * * *'
|
||||
permissions:
|
||||
actions: none
|
||||
checks: none
|
||||
contents: write
|
||||
deployments: none
|
||||
discussions: none
|
||||
id-token: none
|
||||
issues: none
|
||||
packages: none
|
||||
pages: none
|
||||
pull-requests: write
|
||||
repository-projects: none
|
||||
security-events: none
|
||||
statuses: none
|
||||
jobs:
|
||||
gradle-update:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4.2.2
|
||||
- uses: obfusk/gradle-update-action@v3.0.0
|
||||
id: gradle-update
|
||||
- uses: gradle/actions/wrapper-validation@v4
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@v7.0.8
|
||||
with:
|
||||
title: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"
|
||||
commit-message: "Update Gradle to ${{ steps.gradle-update.outputs.version }}"
|
||||
branch-suffix: timestamp
|
||||
@@ -11,6 +11,7 @@ MIN_PERCENT = 90
|
||||
NOT_LANGS = ("night", "w600dp")
|
||||
REPLACE_CODES = {
|
||||
"el": "el-rGR",
|
||||
"he": "iw",
|
||||
"id": "in-rID",
|
||||
"ro": "ro-rRO",
|
||||
"zh_Hans": "zh-rCN",
|
||||
|
||||
11
CHANGELOG.md
11
CHANGELOG.md
@@ -1,6 +1,15 @@
|
||||
# Changelog
|
||||
|
||||
## Unreleased - 148
|
||||
## v2.36.0 - 150 (2025-08-05)
|
||||
|
||||
- Add a widget showing all non-archived cards
|
||||
- Prevent the keyboard from overlapping the save button in edit and group screens
|
||||
|
||||
## v2.35.1 - 149 (2025-06-17)
|
||||
|
||||
- Dependency and translation updates
|
||||
|
||||
## v2.35.0 - 148 (2025-05-17)
|
||||
|
||||
- Add ability to choose barcode width in fullscreen view
|
||||
- Remove confusing import from app function
|
||||
|
||||
@@ -36,10 +36,6 @@ These are the Android lint checker, run using:
|
||||
|
||||
# ./gradlew lintRelease
|
||||
|
||||
and SpotBugs, run using:
|
||||
|
||||
# ./gradlew spotbugsRelease
|
||||
|
||||
The final check is by testing the application on a live device and verifying
|
||||
the basic functionality works as expected.
|
||||
|
||||
|
||||
5
Gemfile
5
Gemfile
@@ -1,3 +1,8 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
gem "fastlane"
|
||||
|
||||
# https://github.com/fastlane/fastlane/issues/29183
|
||||
gem "abbrev"
|
||||
gem "mutex_m"
|
||||
gem "ostruct"
|
||||
|
||||
45
Gemfile.lock
45
Gemfile.lock
@@ -5,29 +5,31 @@ GEM
|
||||
base64
|
||||
nkf
|
||||
rexml
|
||||
abbrev (0.1.2)
|
||||
addressable (2.8.7)
|
||||
public_suffix (>= 2.0.2, < 7.0)
|
||||
artifactory (3.0.17)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.3.2)
|
||||
aws-partitions (1.1072.0)
|
||||
aws-sdk-core (3.220.2)
|
||||
aws-eventstream (1.4.0)
|
||||
aws-partitions (1.1117.0)
|
||||
aws-sdk-core (3.226.0)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.992.0)
|
||||
aws-sigv4 (~> 1.9)
|
||||
base64
|
||||
jmespath (~> 1, >= 1.6.1)
|
||||
aws-sdk-kms (1.99.0)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
logger
|
||||
aws-sdk-kms (1.105.0)
|
||||
aws-sdk-core (~> 3, >= 3.225.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sdk-s3 (1.182.0)
|
||||
aws-sdk-core (~> 3, >= 3.216.0)
|
||||
aws-sdk-s3 (1.189.1)
|
||||
aws-sdk-core (~> 3, >= 3.225.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sigv4 (1.11.0)
|
||||
aws-sigv4 (1.12.1)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
base64 (0.2.0)
|
||||
base64 (0.3.0)
|
||||
claide (1.1.0)
|
||||
colored (1.2)
|
||||
colored2 (3.1.2)
|
||||
@@ -56,10 +58,10 @@ GEM
|
||||
faraday (>= 0.8.0)
|
||||
http-cookie (~> 1.0.0)
|
||||
faraday-em_http (1.0.0)
|
||||
faraday-em_synchrony (1.0.0)
|
||||
faraday-em_synchrony (1.0.1)
|
||||
faraday-excon (1.1.0)
|
||||
faraday-httpclient (1.0.1)
|
||||
faraday-multipart (1.1.0)
|
||||
faraday-multipart (1.1.1)
|
||||
multipart-post (~> 2.0)
|
||||
faraday-net_http (1.0.2)
|
||||
faraday-net_http_persistent (1.2.0)
|
||||
@@ -69,7 +71,7 @@ GEM
|
||||
faraday_middleware (1.2.1)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.4.0)
|
||||
fastlane (2.227.0)
|
||||
fastlane (2.228.0)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
artifactory (~> 3.0)
|
||||
@@ -109,7 +111,7 @@ GEM
|
||||
tty-spinner (>= 0.8.0, < 1.0.0)
|
||||
word_wrap (~> 1.0.0)
|
||||
xcodeproj (>= 1.13.0, < 2.0.0)
|
||||
xcpretty (~> 0.4.0)
|
||||
xcpretty (~> 0.4.1)
|
||||
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
|
||||
fastlane-sirp (1.0.0)
|
||||
sysrandom (~> 1.0)
|
||||
@@ -156,22 +158,24 @@ GEM
|
||||
httpclient (2.9.0)
|
||||
mutex_m
|
||||
jmespath (1.6.2)
|
||||
json (2.10.2)
|
||||
json (2.12.2)
|
||||
jwt (2.10.1)
|
||||
base64
|
||||
logger (1.7.0)
|
||||
mini_magick (4.13.2)
|
||||
mini_mime (1.1.5)
|
||||
multi_json (1.15.0)
|
||||
multipart-post (2.4.1)
|
||||
mutex_m (0.3.0)
|
||||
nanaimo (0.4.0)
|
||||
naturally (2.2.1)
|
||||
naturally (2.3.0)
|
||||
nkf (0.2.0)
|
||||
optparse (0.6.0)
|
||||
os (1.1.4)
|
||||
ostruct (0.6.1)
|
||||
plist (3.7.2)
|
||||
public_suffix (6.0.1)
|
||||
rake (13.2.1)
|
||||
public_suffix (6.0.2)
|
||||
rake (13.3.0)
|
||||
representable (3.2.0)
|
||||
declarative (< 0.1.0)
|
||||
trailblazer-option (>= 0.1.1, < 0.2.0)
|
||||
@@ -182,7 +186,7 @@ GEM
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.4.1)
|
||||
security (0.1.5)
|
||||
signet (0.19.0)
|
||||
signet (0.20.0)
|
||||
addressable (~> 2.8)
|
||||
faraday (>= 0.17.5, < 3.a)
|
||||
jwt (>= 1.5, < 3.0)
|
||||
@@ -209,7 +213,7 @@ GEM
|
||||
colored2 (~> 3.1)
|
||||
nanaimo (~> 0.4.0)
|
||||
rexml (>= 3.3.6, < 4.0)
|
||||
xcpretty (0.4.0)
|
||||
xcpretty (0.4.1)
|
||||
rouge (~> 3.28.0)
|
||||
xcpretty-travis-formatter (1.0.1)
|
||||
xcpretty (~> 0.2, >= 0.0.7)
|
||||
@@ -218,7 +222,10 @@ PLATFORMS
|
||||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
abbrev
|
||||
fastlane
|
||||
mutex_m
|
||||
ostruct
|
||||
|
||||
BUNDLED WITH
|
||||
2.5.22
|
||||
|
||||
@@ -1,17 +1,12 @@
|
||||
import com.android.build.gradle.internal.tasks.factory.dependsOn
|
||||
import com.github.spotbugs.snom.SpotBugsTask
|
||||
|
||||
plugins {
|
||||
id("com.android.application")
|
||||
id("com.github.spotbugs")
|
||||
id("org.jetbrains.kotlin.android")
|
||||
}
|
||||
|
||||
spotbugs {
|
||||
ignoreFailures.set(false)
|
||||
setEffort("max")
|
||||
excludeFilter.set(file("./config/spotbugs/exclude.xml"))
|
||||
reportsDir.set(layout.buildDirectory.file("reports/spotbugs/").get().asFile)
|
||||
kotlin {
|
||||
jvmToolchain(21)
|
||||
}
|
||||
|
||||
android {
|
||||
@@ -22,13 +17,13 @@ android {
|
||||
applicationId = "me.hackerchick.catima"
|
||||
minSdk = 21
|
||||
targetSdk = 35
|
||||
versionCode = 147
|
||||
versionName = "2.34.5"
|
||||
versionCode = 150
|
||||
versionName = "2.36.0"
|
||||
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
multiDexEnabled = true
|
||||
|
||||
resourceConfigurations += listOf("ar", "be", "bg", "bn", "bn-rIN", "bs", "cs", "da", "de", "el-rGR", "en", "eo", "es", "es-rAR", "et", "fi", "fr", "gl", "he-rIL", "hi", "hr", "hu", "in-rID", "is", "it", "ja", "ko", "lt", "lv", "nb-rNO", "nl", "oc", "pl", "pt", "pt-rBR", "pt-rPT", "ro-rRO", "ru", "sk", "sl", "sr", "sv", "ta", "tr", "uk", "vi", "zh-rCN", "zh-rTW")
|
||||
resourceConfigurations += listOf("ar", "be", "bg", "bn", "bn-rIN", "bs", "cs", "da", "de", "el-rGR", "en", "eo", "es", "es-rAR", "et", "fa", "fi", "fr", "gl", "he-rIL", "hi", "hr", "hu", "in-rID", "is", "it", "ja", "ko", "lt", "lv", "nb-rNO", "nl", "oc", "pl", "pt", "pt-rBR", "pt-rPT", "ro-rRO", "ru", "sk", "sl", "sr", "sv", "ta", "tr", "uk", "vi", "zh-rCN", "zh-rTW")
|
||||
|
||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
@@ -104,15 +99,20 @@ android {
|
||||
lintConfig = file("lint.xml")
|
||||
}
|
||||
kotlinOptions {
|
||||
jvmTarget = "17"
|
||||
jvmTarget = "21"
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_21
|
||||
targetCompatibility = JavaVersion.VERSION_21
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
// AndroidX
|
||||
implementation("androidx.appcompat:appcompat:1.7.0")
|
||||
implementation("androidx.appcompat:appcompat:1.7.1")
|
||||
implementation("androidx.constraintlayout:constraintlayout:2.2.1")
|
||||
implementation("androidx.core:core-ktx:1.16.0")
|
||||
implementation("androidx.core:core-remoteviews:1.1.0")
|
||||
implementation("androidx.core:core-splashscreen:1.0.1")
|
||||
implementation("androidx.exifinterface:exifinterface:1.4.1")
|
||||
implementation("androidx.palette:palette:1.0.0")
|
||||
@@ -128,34 +128,19 @@ dependencies {
|
||||
implementation("com.jaredrummler:colorpicker:1.1.0")
|
||||
implementation("net.lingala.zip4j:zip4j:2.11.5")
|
||||
|
||||
// SpotBugs
|
||||
implementation("io.wcm.tooling.spotbugs:io.wcm.tooling.spotbugs.annotations:1.0.0")
|
||||
|
||||
// Testing
|
||||
val androidXTestVersion = "1.6.1"
|
||||
val androidXTestVersion = "1.7.0"
|
||||
val junitVersion = "4.13.2"
|
||||
testImplementation("androidx.test:core:$androidXTestVersion")
|
||||
testImplementation("junit:junit:$junitVersion")
|
||||
testImplementation("org.robolectric:robolectric:4.14.1")
|
||||
testImplementation("org.robolectric:robolectric:4.15.1")
|
||||
|
||||
androidTestImplementation("androidx.test:core:$androidXTestVersion")
|
||||
androidTestImplementation("junit:junit:$junitVersion")
|
||||
androidTestImplementation("androidx.test.ext:junit:1.2.1")
|
||||
androidTestImplementation("androidx.test.ext:junit:1.3.0")
|
||||
androidTestImplementation("androidx.test:runner:$androidXTestVersion")
|
||||
androidTestImplementation("androidx.test.uiautomator:uiautomator:2.3.0")
|
||||
androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1")
|
||||
}
|
||||
|
||||
tasks.withType<SpotBugsTask>().configureEach {
|
||||
description = "Run spotbugs"
|
||||
group = "verification"
|
||||
|
||||
//classes = fileTree("build/intermediates/javac/debug/compileDebugJavaWithJavac/classes")
|
||||
//source = fileTree("src/main/java")
|
||||
//classpath = files()
|
||||
|
||||
reports.maybeCreate("xml").required.set(false)
|
||||
reports.maybeCreate("html").required.set(true)
|
||||
androidTestImplementation("androidx.test.espresso:espresso-core:3.7.0")
|
||||
}
|
||||
|
||||
tasks.register("copyRawResFiles", Copy::class) {
|
||||
|
||||
@@ -30,6 +30,20 @@
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme"
|
||||
android:localeConfig="@xml/locales_config">
|
||||
|
||||
<receiver
|
||||
android:name=".ListWidget"
|
||||
android:label="@string/card_list_widget_name"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.appwidget.provider"
|
||||
android:resource="@xml/list_widget_info" />
|
||||
</receiver>
|
||||
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="true"
|
||||
@@ -75,7 +89,8 @@
|
||||
<activity
|
||||
android:name=".ManageGroupActivity"
|
||||
android:label="@string/group_edit"
|
||||
android:theme="@style/AppTheme.NoActionBar"/>
|
||||
android:theme="@style/AppTheme.NoActionBar"
|
||||
android:windowSoftInputMode="adjustResize"/>
|
||||
<activity
|
||||
android:name=".LoyaltyCardViewActivity"
|
||||
android:exported="true"
|
||||
|
||||
@@ -1,126 +0,0 @@
|
||||
package protect.card_locker;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ListView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import protect.card_locker.databinding.BarcodeSelectorActivityBinding;
|
||||
|
||||
/**
|
||||
* This activity is callable and will allow a user to enter
|
||||
* barcode data and generate all barcodes possible for
|
||||
* the data. The user may then select any barcode, where its
|
||||
* data and type will be returned to the caller.
|
||||
*/
|
||||
public class BarcodeSelectorActivity extends CatimaAppCompatActivity implements BarcodeSelectorAdapter.BarcodeSelectorListener {
|
||||
private BarcodeSelectorActivityBinding binding;
|
||||
private static final String TAG = "Catima";
|
||||
|
||||
// Result this activity will return
|
||||
public static final String BARCODE_CONTENTS = "contents";
|
||||
public static final String BARCODE_FORMAT = "format";
|
||||
|
||||
private final Handler typingDelayHandler = new Handler(Looper.getMainLooper());
|
||||
public static final Integer INPUT_DELAY = 250;
|
||||
|
||||
private BarcodeSelectorAdapter mAdapter;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
binding = BarcodeSelectorActivityBinding.inflate(getLayoutInflater());
|
||||
setTitle(R.string.selectBarcodeTitle);
|
||||
setContentView(binding.getRoot());
|
||||
Utils.applyWindowInsets(binding.getRoot());
|
||||
Toolbar toolbar = binding.toolbar;
|
||||
setSupportActionBar(toolbar);
|
||||
enableToolbarBackButton();
|
||||
|
||||
EditText cardId = binding.cardId;
|
||||
ListView mBarcodeList = binding.barcodes;
|
||||
mAdapter = new BarcodeSelectorAdapter(this, new ArrayList<>(), this);
|
||||
mBarcodeList.setAdapter(mAdapter);
|
||||
|
||||
cardId.addTextChangedListener(new SimpleTextWatcher() {
|
||||
@Override
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
// Delay the input processing so we avoid overload
|
||||
typingDelayHandler.removeCallbacksAndMessages(null);
|
||||
|
||||
typingDelayHandler.postDelayed(() -> {
|
||||
Log.d(TAG, "Entered text: " + s);
|
||||
|
||||
runOnUiThread(() -> {
|
||||
generateBarcodes(s.toString());
|
||||
});
|
||||
}, INPUT_DELAY);
|
||||
}
|
||||
});
|
||||
|
||||
final Bundle b = getIntent().getExtras();
|
||||
final String initialCardId = b != null ? b.getString(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID) : null;
|
||||
|
||||
if (initialCardId != null) {
|
||||
cardId.setText(initialCardId);
|
||||
} else {
|
||||
generateBarcodes("");
|
||||
}
|
||||
}
|
||||
|
||||
private void generateBarcodes(String value) {
|
||||
// Update barcodes
|
||||
ArrayList<CatimaBarcodeWithValue> barcodes = new ArrayList<>();
|
||||
for (BarcodeFormat barcodeFormat : CatimaBarcode.barcodeFormats) {
|
||||
CatimaBarcode catimaBarcode = CatimaBarcode.fromBarcode(barcodeFormat);
|
||||
barcodes.add(new CatimaBarcodeWithValue(catimaBarcode, value));
|
||||
}
|
||||
mAdapter.setBarcodes(barcodes);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (item.getItemId() == android.R.id.home) {
|
||||
setResult(Activity.RESULT_CANCELED);
|
||||
finish();
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRowClicked(int inputPosition, View view) {
|
||||
CatimaBarcodeWithValue barcodeWithValue = mAdapter.getItem(inputPosition);
|
||||
CatimaBarcode catimaBarcode = barcodeWithValue.catimaBarcode();
|
||||
|
||||
if (!mAdapter.isValid(view)) {
|
||||
Toast.makeText(this, getString(R.string.wrongValueForBarcodeType), Toast.LENGTH_LONG).show();
|
||||
return;
|
||||
}
|
||||
|
||||
String barcodeFormat = catimaBarcode.format().name();
|
||||
String value = barcodeWithValue.value();
|
||||
|
||||
Log.d(TAG, "Selected barcode type " + barcodeFormat);
|
||||
|
||||
Intent result = new Intent();
|
||||
result.putExtra(BARCODE_FORMAT, barcodeFormat);
|
||||
result.putExtra(BARCODE_CONTENTS, value);
|
||||
BarcodeSelectorActivity.this.setResult(RESULT_OK, result);
|
||||
finish();
|
||||
}
|
||||
}
|
||||
118
app/src/main/java/protect/card_locker/BarcodeSelectorActivity.kt
Normal file
118
app/src/main/java/protect/card_locker/BarcodeSelectorActivity.kt
Normal file
@@ -0,0 +1,118 @@
|
||||
package protect.card_locker
|
||||
|
||||
import android.content.Intent
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.Menu
|
||||
import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.widget.Toast
|
||||
import androidx.core.view.MenuProvider
|
||||
import androidx.core.widget.doOnTextChanged
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.launch
|
||||
import protect.card_locker.BarcodeSelectorAdapter.BarcodeSelectorListener
|
||||
import protect.card_locker.databinding.BarcodeSelectorActivityBinding
|
||||
|
||||
/**
|
||||
* This activity is callable and will allow a user to enter
|
||||
* barcode data and generate all barcodes possible for
|
||||
* the data. The user may then select any barcode, where its
|
||||
* data and type will be returned to the caller.
|
||||
*/
|
||||
class BarcodeSelectorActivity : CatimaAppCompatActivity(), BarcodeSelectorListener, MenuProvider {
|
||||
|
||||
private lateinit var binding: BarcodeSelectorActivityBinding
|
||||
private lateinit var mAdapter: BarcodeSelectorAdapter
|
||||
|
||||
companion object {
|
||||
private const val TAG = "Catima"
|
||||
|
||||
// Result this activity will return
|
||||
const val BARCODE_CONTENTS = "contents"
|
||||
const val BARCODE_FORMAT = "format"
|
||||
|
||||
const val INPUT_DELAY = 250L
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
addMenuProvider(this)
|
||||
binding = BarcodeSelectorActivityBinding.inflate(layoutInflater)
|
||||
setTitle(R.string.selectBarcodeTitle)
|
||||
setContentView(binding.getRoot())
|
||||
Utils.applyWindowInsets(binding.getRoot())
|
||||
setSupportActionBar(binding.toolbar)
|
||||
enableToolbarBackButton()
|
||||
|
||||
var typingDelayJob: Job? = null
|
||||
val cardId = binding.cardId
|
||||
val mBarcodeList = binding.barcodes
|
||||
mAdapter = BarcodeSelectorAdapter(this, ArrayList<CatimaBarcodeWithValue?>(), this)
|
||||
mBarcodeList.adapter = mAdapter
|
||||
|
||||
cardId.doOnTextChanged { s, _, _, _ ->
|
||||
typingDelayJob?.cancel()
|
||||
typingDelayJob =
|
||||
lifecycleScope.launch {
|
||||
delay(INPUT_DELAY) // Delay the input processing so we avoid overload
|
||||
Log.d(TAG, "Entered text: $s")
|
||||
generateBarcodes(s.toString())
|
||||
}
|
||||
}
|
||||
|
||||
val initialCardId = intent.extras?.getString(LoyaltyCard.BUNDLE_LOYALTY_CARD_CARD_ID)
|
||||
|
||||
initialCardId?.let {
|
||||
cardId.setText(initialCardId)
|
||||
} ?: generateBarcodes("")
|
||||
|
||||
}
|
||||
|
||||
private fun generateBarcodes(value: String?) {
|
||||
// Update barcodes
|
||||
val barcodes = ArrayList<CatimaBarcodeWithValue?>()
|
||||
CatimaBarcode.barcodeFormats.forEach {
|
||||
val catimaBarcode = CatimaBarcode.fromBarcode(it)
|
||||
barcodes.add(CatimaBarcodeWithValue(catimaBarcode, value))
|
||||
}
|
||||
mAdapter.setBarcodes(barcodes)
|
||||
}
|
||||
|
||||
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {}
|
||||
|
||||
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
|
||||
if (menuItem.itemId == android.R.id.home) {
|
||||
setResult(RESULT_CANCELED)
|
||||
finish()
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onRowClicked(inputPosition: Int, view: View) {
|
||||
val barcodeWithValue = mAdapter.getItem(inputPosition)
|
||||
val catimaBarcode = barcodeWithValue!!.catimaBarcode()
|
||||
|
||||
if (!mAdapter.isValid(view)) {
|
||||
Toast.makeText(this, getString(R.string.wrongValueForBarcodeType), Toast.LENGTH_LONG).show()
|
||||
return
|
||||
}
|
||||
|
||||
val barcodeFormat = catimaBarcode.format().name
|
||||
val value = barcodeWithValue.value()
|
||||
|
||||
Log.d(TAG, "Selected barcode type $barcodeFormat")
|
||||
|
||||
Intent().apply {
|
||||
putExtra(BARCODE_FORMAT, barcodeFormat)
|
||||
putExtra(BARCODE_CONTENTS, value)
|
||||
setResult(RESULT_OK, this)
|
||||
}
|
||||
finish()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,111 +0,0 @@
|
||||
package protect.card_locker;
|
||||
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.content.pm.ShortcutInfoCompat;
|
||||
import androidx.core.content.pm.ShortcutManagerCompat;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
|
||||
import protect.card_locker.databinding.CardShortcutConfigureActivityBinding;
|
||||
import protect.card_locker.preferences.Settings;
|
||||
|
||||
/**
|
||||
* The configuration screen for creating a shortcut.
|
||||
*/
|
||||
public class CardShortcutConfigure extends CatimaAppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener {
|
||||
private CardShortcutConfigureActivityBinding binding;
|
||||
static final String TAG = "Catima";
|
||||
private SQLiteDatabase mDatabase;
|
||||
private LoyaltyCardCursorAdapter mAdapter;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle bundle) {
|
||||
super.onCreate(bundle);
|
||||
binding = CardShortcutConfigureActivityBinding.inflate(getLayoutInflater());
|
||||
mDatabase = new DBHelper(this).getReadableDatabase();
|
||||
|
||||
// Set the result to CANCELED. This will cause nothing to happen if the
|
||||
// aback button is pressed.
|
||||
setResult(RESULT_CANCELED);
|
||||
|
||||
setContentView(binding.getRoot());
|
||||
Utils.applyWindowInsets(binding.getRoot());
|
||||
Toolbar toolbar = binding.toolbar;
|
||||
toolbar.setTitle(R.string.shortcutSelectCard);
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
// If there are no cards, bail
|
||||
int cardCount = DBHelper.getLoyaltyCardCount(mDatabase);
|
||||
if (cardCount == 0) {
|
||||
Toast.makeText(this, R.string.noCardsMessage, Toast.LENGTH_LONG).show();
|
||||
finish();
|
||||
}
|
||||
|
||||
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.All);
|
||||
mAdapter = new LoyaltyCardCursorAdapter(this, cardCursor, this, null);
|
||||
binding.list.setAdapter(mAdapter);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
|
||||
var layoutManager = (GridLayoutManager) binding.list.getLayoutManager();
|
||||
if (layoutManager != null) {
|
||||
var settings = new Settings(this);
|
||||
layoutManager.setSpanCount(settings.getPreferredColumnCount());
|
||||
}
|
||||
}
|
||||
|
||||
private void onClickAction(int position) {
|
||||
Cursor selected = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.All);
|
||||
selected.moveToPosition(position);
|
||||
LoyaltyCard loyaltyCard = LoyaltyCard.fromCursor(CardShortcutConfigure.this, selected);
|
||||
|
||||
Log.d(TAG, "Creating shortcut for card " + loyaltyCard.store + "," + loyaltyCard.id);
|
||||
|
||||
ShortcutInfoCompat shortcut = ShortcutHelper.createShortcutBuilder(CardShortcutConfigure.this, loyaltyCard).build();
|
||||
|
||||
setResult(RESULT_OK, ShortcutManagerCompat.createShortcutResultIntent(CardShortcutConfigure.this, shortcut));
|
||||
|
||||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu inputMenu) {
|
||||
getMenuInflater().inflate(R.menu.card_details_menu, inputMenu);
|
||||
|
||||
return super.onCreateOptionsMenu(inputMenu);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem inputItem) {
|
||||
int id = inputItem.getItemId();
|
||||
|
||||
if (id == R.id.action_display_options) {
|
||||
mAdapter.showDisplayOptionsDialog();
|
||||
invalidateOptionsMenu();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onOptionsItemSelected(inputItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRowClicked(int inputPosition) {
|
||||
onClickAction(inputPosition);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRowLongClicked(int inputPosition) {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,96 @@
|
||||
package protect.card_locker
|
||||
|
||||
import android.database.sqlite.SQLiteDatabase
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.Menu
|
||||
import android.view.MenuInflater
|
||||
import android.view.MenuItem
|
||||
import android.widget.Toast
|
||||
import androidx.core.content.pm.ShortcutManagerCompat
|
||||
import androidx.core.view.MenuProvider
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import protect.card_locker.LoyaltyCardCursorAdapter.CardAdapterListener
|
||||
import protect.card_locker.databinding.CardShortcutConfigureActivityBinding
|
||||
import protect.card_locker.preferences.Settings
|
||||
|
||||
class CardShortcutConfigure : CatimaAppCompatActivity(), CardAdapterListener, MenuProvider {
|
||||
|
||||
private lateinit var binding: CardShortcutConfigureActivityBinding
|
||||
private lateinit var mDatabase: SQLiteDatabase
|
||||
private lateinit var mAdapter: LoyaltyCardCursorAdapter
|
||||
|
||||
private companion object {
|
||||
private const val TAG: String = "Catima"
|
||||
}
|
||||
|
||||
public override fun onCreate(savedInstanceBundle: Bundle?) {
|
||||
super.onCreate(savedInstanceBundle)
|
||||
addMenuProvider(this)
|
||||
binding = CardShortcutConfigureActivityBinding.inflate(layoutInflater)
|
||||
mDatabase = DBHelper(this).readableDatabase
|
||||
|
||||
// Set the result to CANCELED.
|
||||
// This will cause nothing to happen if the back button is pressed.
|
||||
setResult(RESULT_CANCELED)
|
||||
|
||||
setContentView(binding.getRoot())
|
||||
Utils.applyWindowInsets(binding.getRoot())
|
||||
|
||||
binding.toolbar.apply {
|
||||
setTitle(R.string.shortcutSelectCard)
|
||||
setSupportActionBar(this)
|
||||
}
|
||||
|
||||
// If there are no cards, bail
|
||||
if (DBHelper.getLoyaltyCardCount(mDatabase) == 0) {
|
||||
Toast.makeText(this, R.string.noCardsMessage, Toast.LENGTH_LONG).show()
|
||||
finish()
|
||||
}
|
||||
|
||||
val cardCursor = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.All)
|
||||
mAdapter = LoyaltyCardCursorAdapter(this, cardCursor, this, null)
|
||||
binding.list.setAdapter(mAdapter)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
|
||||
val layoutManager = binding.list.layoutManager as GridLayoutManager?
|
||||
layoutManager?.setSpanCount(Settings(this).getPreferredColumnCount())
|
||||
}
|
||||
|
||||
private fun onClickAction(position: Int) {
|
||||
val selected = DBHelper.getLoyaltyCardCursor(mDatabase, DBHelper.LoyaltyCardArchiveFilter.All)
|
||||
selected.moveToPosition(position)
|
||||
val loyaltyCard = LoyaltyCard.fromCursor(this, selected)
|
||||
|
||||
Log.d(TAG, "Creating shortcut for card ${loyaltyCard.store}, ${loyaltyCard.id}")
|
||||
|
||||
val shortcut = ShortcutHelper.createShortcutBuilder(this, loyaltyCard).build()
|
||||
|
||||
setResult(RESULT_OK,
|
||||
ShortcutManagerCompat.createShortcutResultIntent(this, shortcut))
|
||||
|
||||
finish()
|
||||
}
|
||||
|
||||
override fun onCreateMenu(inputMenu: Menu, menuInflater: MenuInflater) {
|
||||
menuInflater.inflate(R.menu.card_details_menu, inputMenu)
|
||||
}
|
||||
|
||||
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
|
||||
if (menuItem.itemId == R.id.action_display_options) {
|
||||
mAdapter.showDisplayOptionsDialog()
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
override fun onRowClicked(inputPosition: Int) {
|
||||
onClickAction(inputPosition)
|
||||
}
|
||||
|
||||
override fun onRowLongClicked(inputPosition: Int) {
|
||||
// do nothing
|
||||
}
|
||||
}
|
||||
130
app/src/main/java/protect/card_locker/ListWidget.kt
Normal file
130
app/src/main/java/protect/card_locker/ListWidget.kt
Normal file
@@ -0,0 +1,130 @@
|
||||
package protect.card_locker
|
||||
|
||||
import android.app.PendingIntent
|
||||
import android.appwidget.AppWidgetManager
|
||||
import android.appwidget.AppWidgetProvider
|
||||
import android.content.ComponentName
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.Icon
|
||||
import android.os.Build
|
||||
import android.view.View
|
||||
import android.widget.RemoteViews
|
||||
import androidx.core.widget.RemoteViewsCompat
|
||||
import protect.card_locker.DBHelper.LoyaltyCardArchiveFilter
|
||||
|
||||
class ListWidget : AppWidgetProvider() {
|
||||
fun updateAll(context: Context) {
|
||||
val appWidgetManager = AppWidgetManager.getInstance(context)
|
||||
val componentName = ComponentName(context, ListWidget::class.java)
|
||||
onUpdate(
|
||||
context,
|
||||
appWidgetManager,
|
||||
appWidgetManager.getAppWidgetIds(componentName)
|
||||
)
|
||||
}
|
||||
|
||||
override fun onUpdate(
|
||||
context: Context,
|
||||
appWidgetManager: AppWidgetManager,
|
||||
appWidgetIds: IntArray
|
||||
) {
|
||||
for (appWidgetId in appWidgetIds) {
|
||||
val database = DBHelper(context).readableDatabase
|
||||
|
||||
// Get cards
|
||||
val order = Utils.getLoyaltyCardOrder(context);
|
||||
val orderDirection = Utils.getLoyaltyCardOrderDirection(context);
|
||||
|
||||
val loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(
|
||||
database,
|
||||
"",
|
||||
null,
|
||||
order,
|
||||
orderDirection,
|
||||
LoyaltyCardArchiveFilter.Unarchived
|
||||
)
|
||||
|
||||
// Bind every card to cell in the grid
|
||||
var hasCards = false
|
||||
val remoteCollectionItemsBuilder = RemoteViewsCompat.RemoteCollectionItems.Builder()
|
||||
if (loyaltyCardCursor.moveToFirst()) {
|
||||
do {
|
||||
val loyaltyCard = LoyaltyCard.fromCursor(context, loyaltyCardCursor)
|
||||
remoteCollectionItemsBuilder.addItem(
|
||||
loyaltyCard.id.toLong(),
|
||||
createRemoteViews(
|
||||
context, loyaltyCard
|
||||
)
|
||||
)
|
||||
hasCards = true
|
||||
} while (loyaltyCardCursor.moveToNext())
|
||||
}
|
||||
loyaltyCardCursor.close()
|
||||
|
||||
// Create the base empty view
|
||||
var views = RemoteViews(context.packageName, R.layout.list_widget_empty)
|
||||
|
||||
if (hasCards) {
|
||||
// If we have cards, create the list
|
||||
views = RemoteViews(context.packageName, R.layout.list_widget)
|
||||
val templateIntent = Intent(context, LoyaltyCardViewActivity::class.java)
|
||||
val pendingIntent = PendingIntent.getActivity(
|
||||
context,
|
||||
0,
|
||||
templateIntent,
|
||||
PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
|
||||
)
|
||||
views.setPendingIntentTemplate(R.id.grid_view, pendingIntent)
|
||||
|
||||
RemoteViewsCompat.setRemoteAdapter(
|
||||
context,
|
||||
views,
|
||||
appWidgetId,
|
||||
R.id.grid_view,
|
||||
remoteCollectionItemsBuilder.build()
|
||||
)
|
||||
}
|
||||
|
||||
// Let Android know the widget is ready for display
|
||||
appWidgetManager.updateAppWidget(appWidgetId, views)
|
||||
}
|
||||
}
|
||||
|
||||
private fun createRemoteViews(context: Context, loyaltyCard: LoyaltyCard): RemoteViews {
|
||||
// Create a single cell for the grid view, bind it to open in the LoyaltyCardViewActivity
|
||||
// Note: Android 5 will not use bitmaps
|
||||
val remoteViews = RemoteViews(context.packageName, R.layout.list_widget_item).apply {
|
||||
val headerColor = Utils.getHeaderColor(context, loyaltyCard)
|
||||
val foreground = if (Utils.needsDarkForeground(headerColor)) Color.BLACK else Color.WHITE
|
||||
setInt(R.id.item_container_foreground, "setBackgroundColor", headerColor)
|
||||
val icon = loyaltyCard.getImageThumbnail(context)
|
||||
// setImageViewIcon is not supported on Android 5, so force Android 5 down the text path
|
||||
if (icon != null && Build.VERSION.SDK_INT >= 23) {
|
||||
setInt(R.id.item_container_foreground, "setBackgroundColor", foreground)
|
||||
setImageViewIcon(R.id.item_image, Icon.createWithBitmap(icon))
|
||||
setViewVisibility(R.id.item_text, View.INVISIBLE)
|
||||
setViewVisibility(R.id.item_image, View.VISIBLE)
|
||||
} else {
|
||||
setImageViewBitmap(R.id.item_image, null)
|
||||
setTextViewText(R.id.item_text, loyaltyCard.store)
|
||||
setViewVisibility(R.id.item_text, View.VISIBLE)
|
||||
setViewVisibility(R.id.item_image, View.INVISIBLE)
|
||||
setTextColor(
|
||||
R.id.item_text,
|
||||
foreground
|
||||
)
|
||||
}
|
||||
|
||||
// Add the card ID to the intent template
|
||||
val fillInIntent = Intent().apply {
|
||||
putExtra(LoyaltyCardViewActivity.BUNDLE_ID, loyaltyCard.id)
|
||||
}
|
||||
|
||||
setOnClickFillInIntent(R.id.item_container, fillInIntent)
|
||||
}
|
||||
|
||||
return remoteViews
|
||||
}
|
||||
}
|
||||
@@ -44,6 +44,9 @@ import androidx.appcompat.widget.AppCompatTextView;
|
||||
import androidx.appcompat.widget.Toolbar;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.content.FileProvider;
|
||||
import androidx.core.graphics.Insets;
|
||||
import androidx.core.view.ViewCompat;
|
||||
import androidx.core.view.WindowInsetsCompat;
|
||||
import androidx.exifinterface.media.ExifInterface;
|
||||
import androidx.lifecycle.ViewModelProvider;
|
||||
|
||||
@@ -297,7 +300,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
|
||||
super.onCreate(savedInstanceState);
|
||||
binding = LoyaltyCardEditActivityBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
Utils.applyWindowInsets(binding.getRoot());
|
||||
Utils.applyWindowInsetsAndFabOffset(binding.getRoot(), binding.fabSave);
|
||||
|
||||
viewModel = new ViewModelProvider(this).get(LoyaltyCardEditActivityViewModel.class);
|
||||
|
||||
@@ -576,7 +579,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
binding.tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
|
||||
@Override
|
||||
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings("NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE")
|
||||
public void onTabSelected(TabLayout.Tab tab) {
|
||||
viewModel.setTabIndex(tab.getPosition());
|
||||
showPart(tab.getText().toString());
|
||||
@@ -588,7 +590,6 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
|
||||
}
|
||||
|
||||
@Override
|
||||
@edu.umd.cs.findbugs.annotations.SuppressFBWarnings("NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE")
|
||||
public void onTabReselected(TabLayout.Tab tab) {
|
||||
viewModel.setTabIndex(tab.getPosition());
|
||||
showPart(tab.getText().toString());
|
||||
|
||||
@@ -880,6 +880,8 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
} else if (id == R.id.action_star_unstar) {
|
||||
DBHelper.updateLoyaltyCardStarStatus(database, loyaltyCardId, loyaltyCard.starStatus == 0 ? 1 : 0);
|
||||
|
||||
new ListWidget().updateAll(LoyaltyCardViewActivity.this);
|
||||
|
||||
// Re-init loyaltyCard with new data from DB
|
||||
onResume();
|
||||
invalidateOptionsMenu();
|
||||
@@ -890,6 +892,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
Toast.makeText(LoyaltyCardViewActivity.this, R.string.archived, Toast.LENGTH_LONG).show();
|
||||
|
||||
ShortcutHelper.removeShortcut(LoyaltyCardViewActivity.this, loyaltyCardId);
|
||||
new ListWidget().updateAll(LoyaltyCardViewActivity.this);
|
||||
|
||||
// Re-init loyaltyCard with new data from DB
|
||||
onResume();
|
||||
@@ -915,6 +918,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
DBHelper.deleteLoyaltyCard(database, LoyaltyCardViewActivity.this, loyaltyCardId);
|
||||
|
||||
ShortcutHelper.removeShortcut(LoyaltyCardViewActivity.this, loyaltyCardId);
|
||||
new ListWidget().updateAll(LoyaltyCardViewActivity.this);
|
||||
|
||||
finish();
|
||||
dialog.dismiss();
|
||||
|
||||
@@ -2,6 +2,8 @@ package protect.card_locker;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.SearchManager;
|
||||
import android.appwidget.AppWidgetManager;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
@@ -330,22 +332,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
selectedTab = activeTabPref.getInt(getString(R.string.sharedpreference_active_tab), 0);
|
||||
|
||||
// Restore sort preferences from Shared Preferences
|
||||
// If one of the sorting prefererences has never been set or is set to an invalid value,
|
||||
// stick to the defaults.
|
||||
SharedPreferences sortPref = getApplicationContext().getSharedPreferences(
|
||||
getString(R.string.sharedpreference_sort),
|
||||
Context.MODE_PRIVATE);
|
||||
|
||||
String orderString = sortPref.getString(getString(R.string.sharedpreference_sort_order), null);
|
||||
String orderDirectionString = sortPref.getString(getString(R.string.sharedpreference_sort_direction), null);
|
||||
|
||||
if (orderString != null && orderDirectionString != null) {
|
||||
try {
|
||||
mOrder = DBHelper.LoyaltyCardOrder.valueOf(orderString);
|
||||
mOrderDirection = DBHelper.LoyaltyCardOrderDirection.valueOf(orderDirectionString);
|
||||
} catch (IllegalArgumentException ignored) {
|
||||
}
|
||||
}
|
||||
mOrder = Utils.getLoyaltyCardOrder(this);
|
||||
mOrderDirection = Utils.getLoyaltyCardOrderDirection(this);
|
||||
|
||||
mGroup = null;
|
||||
|
||||
@@ -442,6 +430,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
if (mCurrentActionMode != null) {
|
||||
mCurrentActionMode.finish();
|
||||
}
|
||||
|
||||
new ListWidget().updateAll(mAdapter.mContext);
|
||||
}
|
||||
|
||||
private void processParseResultList(List<ParseResult> parseResultList, String group, boolean closeAppOnNoBarcode) {
|
||||
@@ -709,6 +699,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
|
||||
showReversed.isChecked() ? DBHelper.LoyaltyCardOrderDirection.Descending : DBHelper.LoyaltyCardOrderDirection.Ascending
|
||||
);
|
||||
|
||||
new ListWidget().updateAll(this);
|
||||
|
||||
dialog.dismiss();
|
||||
});
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ public class ManageGroupActivity extends CatimaAppCompatActivity implements Mana
|
||||
super.onCreate(inputSavedInstanceState);
|
||||
binding = ActivityManageGroupBinding.inflate(getLayoutInflater());
|
||||
setContentView(binding.getRoot());
|
||||
Utils.applyWindowInsets(binding.getRoot());
|
||||
Utils.applyWindowInsetsAndFabOffset(binding.getRoot(), binding.fabSave);
|
||||
Toolbar toolbar = binding.toolbar;
|
||||
setSupportActionBar(toolbar);
|
||||
|
||||
|
||||
@@ -67,8 +67,17 @@ class PkpassParser(context: Context, uri: Uri?) {
|
||||
try {
|
||||
mContext.contentResolver.openInputStream(uri).use { inputStream ->
|
||||
ZipInputStream(inputStream).use { zipInputStream ->
|
||||
var localFileHeader: LocalFileHeader
|
||||
while ((zipInputStream.nextEntry.also { localFileHeader = it }) != null) {
|
||||
var localFileHeader: LocalFileHeader?
|
||||
|
||||
while (true) {
|
||||
// Retrieve the next file
|
||||
localFileHeader = zipInputStream.nextEntry
|
||||
|
||||
// If no next file, exit loop
|
||||
if (localFileHeader == null) {
|
||||
break
|
||||
}
|
||||
|
||||
// Ignore directories
|
||||
if (localFileHeader.isDirectory) continue
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.content.res.TypedArray;
|
||||
@@ -50,6 +51,7 @@ import androidx.palette.graphics.Palette;
|
||||
|
||||
import com.google.android.material.color.DynamicColors;
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton;
|
||||
import com.google.zxing.BinaryBitmap;
|
||||
import com.google.zxing.LuminanceSource;
|
||||
import com.google.zxing.MultiFormatReader;
|
||||
@@ -594,6 +596,11 @@ public class Utils {
|
||||
double width = bitmap.getWidth();
|
||||
double height = bitmap.getHeight();
|
||||
|
||||
// Early exit
|
||||
if (Math.max(width, height) <= maxSize) {
|
||||
return bitmap;
|
||||
}
|
||||
|
||||
if (height > width) {
|
||||
double scale = height / maxSize;
|
||||
height = maxSize;
|
||||
@@ -1134,6 +1141,27 @@ public class Utils {
|
||||
return WindowInsetsCompat.CONSUMED;
|
||||
});
|
||||
}
|
||||
|
||||
public static void applyWindowInsetsAndFabOffset(View root, FloatingActionButton fab) {
|
||||
/* This function is a copy of applyWindowInsets, with the added behaviour that it ensures the FAB will be displayed vertically above the keyboard at all times */
|
||||
ViewCompat.setOnApplyWindowInsetsListener(root, (view, windowInsets) -> {
|
||||
Insets insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||||
|
||||
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
|
||||
layoutParams.leftMargin = insets.left;
|
||||
layoutParams.bottomMargin = insets.bottom;
|
||||
layoutParams.rightMargin = insets.right;
|
||||
layoutParams.topMargin = insets.top;
|
||||
view.setLayoutParams(layoutParams);
|
||||
|
||||
// This is required to move the FAB above the keyboard when keyboard is open
|
||||
Insets imeInsets = windowInsets.getInsets(WindowInsetsCompat.Type.ime());
|
||||
boolean isKeyboardVisible = windowInsets.isVisible(WindowInsetsCompat.Type.ime());
|
||||
fab.setTranslationY(isKeyboardVisible ? (- imeInsets.bottom) : 0);
|
||||
|
||||
return WindowInsetsCompat.CONSUMED;
|
||||
});
|
||||
}
|
||||
|
||||
public static ImageView.ScaleType getRecommendedScaleTypeForThumbnailImage(@Nullable Bitmap image) {
|
||||
// Return something sensible if no image
|
||||
@@ -1149,4 +1177,40 @@ public class Utils {
|
||||
|
||||
return ImageView.ScaleType.FIT_CENTER;
|
||||
}
|
||||
|
||||
public static DBHelper.LoyaltyCardOrder getLoyaltyCardOrder(Context context) {
|
||||
SharedPreferences sortPref = context.getSharedPreferences(
|
||||
"sharedpreference_sort",
|
||||
Context.MODE_PRIVATE
|
||||
);
|
||||
|
||||
String orderString = sortPref.getString("sharedpreference_sort_order", null);
|
||||
|
||||
if (orderString != null) {
|
||||
try {
|
||||
return DBHelper.LoyaltyCardOrder.valueOf(orderString);
|
||||
} catch (IllegalArgumentException ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
return DBHelper.LoyaltyCardOrder.Alpha;
|
||||
}
|
||||
|
||||
public static DBHelper.LoyaltyCardOrderDirection getLoyaltyCardOrderDirection(Context context) {
|
||||
SharedPreferences sortPref = context.getSharedPreferences(
|
||||
"sharedpreference_sort",
|
||||
Context.MODE_PRIVATE
|
||||
);
|
||||
|
||||
String orderDirectionString = sortPref.getString("sharedpreference_sort_direction", null);
|
||||
|
||||
if (orderDirectionString != null) {
|
||||
try {
|
||||
return DBHelper.LoyaltyCardOrderDirection.valueOf(orderDirectionString);
|
||||
} catch (IllegalArgumentException ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
return DBHelper.LoyaltyCardOrderDirection.Ascending;
|
||||
}
|
||||
}
|
||||
|
||||
BIN
app/src/main/res/drawable-nodpi/widget_preview.png
Normal file
BIN
app/src/main/res/drawable-nodpi/widget_preview.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 44 KiB |
18
app/src/main/res/layout/list_widget.xml
Normal file
18
app/src/main/res/layout/list_widget.xml
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/widget_layout"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<!-- android:columnWidth must be kept in sync with list_widget_item.xml -->
|
||||
<GridView
|
||||
android:id="@+id/grid_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:numColumns="auto_fit"
|
||||
android:columnWidth="107dp"
|
||||
android:verticalSpacing="4dp"
|
||||
android:horizontalSpacing="4dp"
|
||||
android:gravity="center"/>
|
||||
</LinearLayout>
|
||||
17
app/src/main/res/layout/list_widget_empty.xml
Normal file
17
app/src/main/res/layout/list_widget_empty.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/widget_layout"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/no_cards_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:text="@string/card_list_widget_empty"
|
||||
app:autoSizeTextType="uniform"
|
||||
app:autoSizeMinTextSize="12sp"
|
||||
app:autoSizeMaxTextSize="100sp"
|
||||
app:autoSizeStepGranularity="2sp" />
|
||||
</LinearLayout>
|
||||
36
app/src/main/res/layout/list_widget_item.xml
Normal file
36
app/src/main/res/layout/list_widget_item.xml
Normal file
@@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
85.6dp : 53.98dp
|
||||
Both multiplied by 1.25 to fit better
|
||||
-->
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="107dp"
|
||||
android:layout_height="67.475dp"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="vertical"
|
||||
android:gravity="center"
|
||||
android:id="@+id/item_container"
|
||||
android:background="@drawable/round_outline"
|
||||
android:clipToOutline="true">
|
||||
|
||||
<FrameLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/item_container_foreground">
|
||||
|
||||
<ImageView
|
||||
android:id="@+id/item_image"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="center|center" />
|
||||
|
||||
<TextView
|
||||
android:id="@+id/item_text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:autoSizeMinTextSize="6sp"
|
||||
app:autoSizeTextType="uniform"
|
||||
android:layout_gravity="center|center"
|
||||
android:gravity="center" />
|
||||
</FrameLayout>
|
||||
</FrameLayout>
|
||||
@@ -16,62 +16,65 @@ Altonss
|
||||
B o d o
|
||||
Michael Moroni
|
||||
Eric
|
||||
Silvério Santos
|
||||
Максим Горпиніч
|
||||
GM
|
||||
Priit Jõerüüt
|
||||
laralem
|
||||
Petr Novák
|
||||
Joel A
|
||||
Priit Jõerüüt
|
||||
Taco
|
||||
Edgars Andersons
|
||||
Taco
|
||||
nadiafekihahmed
|
||||
pfaffenrodt
|
||||
Aayush Gupta
|
||||
Scrambled777
|
||||
Silvério Santos
|
||||
ikanakova
|
||||
Giovanni Donisi
|
||||
HudobniVolk
|
||||
Jiri Grönroos
|
||||
Nyatsuki
|
||||
Balázs Meskó
|
||||
Milo Ivir
|
||||
josé m
|
||||
Samantaz Fox
|
||||
Balázs Meskó
|
||||
Milo Ivir
|
||||
Fjuro
|
||||
Cliff Heraldo
|
||||
Sergio Paredes
|
||||
Ankit Tiwari
|
||||
Arno-github
|
||||
Jose Delvani
|
||||
mdvhimself
|
||||
Milan Šalka
|
||||
Kachelkaiser
|
||||
Jose Delvani
|
||||
Warder
|
||||
GitSpoon
|
||||
Milan Šalka
|
||||
mdvhimself
|
||||
Skrripy
|
||||
Vasilis
|
||||
huuhaa
|
||||
தமிழ் நேரம்
|
||||
waffshappen
|
||||
Marnick L'Eau
|
||||
ngocanhtve
|
||||
Vasilis
|
||||
StellarSand
|
||||
Quentin PAGÈS
|
||||
Projjal Moitra
|
||||
Robin
|
||||
JungHee Lee
|
||||
hajertabbane
|
||||
Ziad OUALHADJ
|
||||
Robin Liu
|
||||
Ricky Tigg
|
||||
Renko
|
||||
Denis Shilin
|
||||
しいたけ
|
||||
Alexander Ivanov
|
||||
Fjuro
|
||||
Miha Frangež
|
||||
Viet Nguyen Hoang
|
||||
stavpup
|
||||
hajertabbane
|
||||
ehrt74
|
||||
Virginie
|
||||
Tim Trek
|
||||
Ricky Tigg
|
||||
Peter Dave Hello
|
||||
Michael Gangolf
|
||||
rudy3
|
||||
@@ -80,5 +83,5 @@ Govind S Nair
|
||||
Freddo espresso
|
||||
Augustin LAVILLE
|
||||
arshbeerSingh
|
||||
Aliaksandr Trush
|
||||
MisterCosta96
|
||||
Aliaksandr Trush
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="action_search">بحث</string>
|
||||
<string name="action_add">أضف</string>
|
||||
<string name="noGiftCards">اضغط على زر الإضافة+ لإضافة بطاقة، أو استورد من ⋮ القائمة.</string>
|
||||
<string name="noGiftCards">اضغط على زر الإضافة + لإضافة بطاقة، أو استورد من ⋮ القائمة.</string>
|
||||
<string name="noMatchingGiftCards">لا نتائج. حاول تغيير كلمات البحث.</string>
|
||||
<string name="storeName">اسم</string>
|
||||
<string name="note">مذكرة</string>
|
||||
@@ -44,9 +44,9 @@
|
||||
<string name="selectBarcodeTitle">اختار الباركود</string>
|
||||
<string name="thumbnailDescription">صورة مصغرة</string>
|
||||
<string name="starImage">نجم مفضل</string>
|
||||
<string name="settings">اعدادات</string>
|
||||
<string name="settings_light_theme">فاتح</string>
|
||||
<string name="settings_dark_theme">داكن</string>
|
||||
<string name="settings">الإعدادات</string>
|
||||
<string name="settings_light_theme">فاتحة</string>
|
||||
<string name="settings_dark_theme">داكنة</string>
|
||||
<string name="settings_card_orientation">اتجاه الشاشة</string>
|
||||
<string name="settings_portrait_orientation">الوضع الرأسي</string>
|
||||
<string name="settings_landscape_orientation">الوضع الأفقي</string>
|
||||
@@ -63,7 +63,7 @@
|
||||
<string name="group_updated">تم تحديث المجموعة</string>
|
||||
<string name="all">الكل</string>
|
||||
<string name="deleteConfirmationGroup">هل تريد حذف المجموعة؟</string>
|
||||
<string name="failedOpeningFileManager">قم بتثبيت مدير الملفات أولاً.</string>
|
||||
<string name="failedOpeningFileManager">ثبِّت مدير الملفات أولاً.</string>
|
||||
<string name="moveUp">تحرك لأعلى</string>
|
||||
<string name="addFromImage">حدد صورة من المعرض</string>
|
||||
<string name="balance">الرصيد</string>
|
||||
@@ -74,19 +74,16 @@
|
||||
<string name="privacy_policy">سياسة الخصوصية</string>
|
||||
<string name="accept">قبول</string>
|
||||
<string name="importCatima">الاستيراد من Catima</string>
|
||||
<string name="importCatimaMessage">حدد ملفك <i>catima.zip</i> تصدير من Catima للاستيراد.
|
||||
\nقم بإنشائه من قائمة الاستيراد / التصدير لتطبيق Catima آخر بالضغط على تصدير هناك أولاً.</string>
|
||||
<string name="importCatimaMessage">حدّد ملفك <i>catima.zip</i> تصدير من Catima للاستيراد. \nإنشئها من قائمة الاستيراد / التصدير لتطبيق Catima آخر بالضغط على تصدير هناك أولاً.</string>
|
||||
<string name="importFidme">الاستيراد من FidMe</string>
|
||||
<string name="importFidmeMessage">حدد ملفك <i>fidme-export-request-xxxxxx.zip</i> تصدير من FidMe للاستيراد ، ثم حدد أنواع الباركود يدويًا بعد ذلك.
|
||||
\nقم بإنشائه من ملف تعريف FidMe الخاص بك عن طريق اختيار حماية البيانات ثم الضغط على استخراج بياناتي أولاً.</string>
|
||||
<string name="importFidmeMessage">حدّد ملفك <i>fidme-export-request-xxxxxx.zip</i> تصدير من FidMe للاستيراد، ثم حدد أنواع الباركود يدويًا بعد ذلك. \nإنشئها من ملف تعريف FidMe الخاص بك عن طريق اختيار حماية البيانات ثم الضغط على استخراج بياناتي أولاً.</string>
|
||||
<string name="importStocardMessage">حدد ملفك <i>***.zip</i> تصدير من Stocard للاستيراد.
|
||||
\nاحصل عليه عن طريق إرسال بريد إلكتروني إلى support@stocardapp.com لطلب تصدير بياناتك.</string>
|
||||
<string name="importVoucherVault">الاستيراد من Voucher Vault</string>
|
||||
<string name="importVoucherVaultMessage">حدد ملفك <i>vouchervault.json</i> تصدير من Voucher Vault للاستيراد.
|
||||
\nقم بإنشائه بالضغط على تصدير في Voucher Vault أولاً.</string>
|
||||
<string name="importVoucherVaultMessage">حدّد ملفك <i>vouchervault.json</i> تصدير من Voucher Vault للاستيراد. \nإنشئها بالضغط على تصدير في Voucher Vault أولاً.</string>
|
||||
<string name="barcodeId">قيمة الباركود</string>
|
||||
<string name="sameAsCardId">نفس بطاقة الهوية</string>
|
||||
<string name="setBarcodeId">قم بتعيين قيمة الباركود</string>
|
||||
<string name="setBarcodeId">عيّن قيمة الباركود</string>
|
||||
<string name="unsupportedBarcodeType">لا يمكن عرض نوع الباركود هذا. قد يكون مدعومًا في إصدار أحدث من التطبيق.</string>
|
||||
<string name="wrongValueForBarcodeType">القيمة غير صالحة لنوع الباركود المحدد</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">أريد مشاركة بعض البطاقات معك</string>
|
||||
@@ -102,9 +99,9 @@
|
||||
<string name="yes">نعم</string>
|
||||
<string name="no">لا</string>
|
||||
<string name="passwordRequired">الرجاء إدخال كلمة المرور</string>
|
||||
<string name="exportPassword">قم بتعيين كلمة مرور لحماية التصدير (اختياري)</string>
|
||||
<string name="exportPassword">عيّن كلمة مرور لحماية التصدير (اختياري)</string>
|
||||
<string name="exportPasswordHint">أدخل كلمة المرور</string>
|
||||
<string name="turn_flashlight_on">قم بتشغيل المصباح</string>
|
||||
<string name="turn_flashlight_on">شغّل المصباح</string>
|
||||
<string name="turn_flashlight_off">أطفئ المصباح</string>
|
||||
<string name="settings_locale">لغة</string>
|
||||
<string name="settings_system_locale">النظام</string>
|
||||
@@ -131,7 +128,7 @@
|
||||
<string name="shortcutSelectCard">اختر بطاقة</string>
|
||||
<string name="options">خيارات</string>
|
||||
<string name="starred">مميز بنجمة</string>
|
||||
<string name="include_if_asking_support">إذا كنت ترغب في طلب الدعم ، فقم بتضمين المعلومات التالية:</string>
|
||||
<string name="include_if_asking_support">إذا كنت ترغب في طلب الدعم، ضمّن المعلومات التالية:</string>
|
||||
<string name="duplicateCard">كرر</string>
|
||||
<string name="archive">ضع الي الأرشيف</string>
|
||||
<string name="unarchive">أخرج من الأرشيف</string>
|
||||
@@ -185,7 +182,7 @@
|
||||
<string name="importOptionFilesystemExplanation">اختر ملفًا محددًا من نظام الملفات.</string>
|
||||
<string name="about_title_fmt">حول <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">نسخة: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="settings_system_theme">نظام</string>
|
||||
<string name="settings_system_theme">النظام</string>
|
||||
<string name="settings_lock_on_opening_orientation">قفل على الاتجاه عند فتح البطاقة</string>
|
||||
<string name="app_resources">موارد الطرف الثالث الحرة: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="settings_follow_system_orientation">نظام المتابعة</string>
|
||||
@@ -231,8 +228,7 @@
|
||||
<string name="report_error">الإبلاغ عن خطأ</string>
|
||||
<string name="sort_by_expiry">انقضاء</string>
|
||||
<string name="importLoyaltyCardKeychain">الاستيراد من Loyalty Card Keychain</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">حدد ملفك <i>LoyaltyCardKeychain.csv</i> التصدير من Loyalty Card Keychain للاستيراد.
|
||||
\nقم بإنشائه من قائمة الاستيراد / التصدير في Loyalty Card Keychain بالضغط على تصدير هناك أولاً.</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">حدّد ملفك <i>LoyaltyCardKeychain.csv</i> التصدير من Loyalty Card Keychain للاستيراد. \nإنشئها من قائمة الاستيراد / التصدير في Loyalty Card Keychain بالضغط على تصدير هناك أولاً.</string>
|
||||
<string name="importStocard">الاستيراد من Stocard</string>
|
||||
<string name="failedGeneratingShareURL">تعذر إنشاء عنوان URL قابل للمشاركة. الرجاء الإبلاغ عن هذا.</string>
|
||||
<string name="help_translate_this_app">ساعد في ترجمة هذا التطبيق</string>
|
||||
@@ -243,7 +239,7 @@
|
||||
<string name="failedToRetrieveImageFile">فشل في استخراج ملف الصورة</string>
|
||||
<string name="barcodeLongPressMessage">يمكن فتح صور فقط في تطبيق معرض الصور</string>
|
||||
<string name="failedToOpenUrl">ثبت متصفح ويب أولاً</string>
|
||||
<string name="welcome">مرحبا بك في كاتيما</string>
|
||||
<string name="welcome">مرحبًا بك في كاتيما</string>
|
||||
<string name="updateBalanceTitle">كم أنفقت أو استلمت؟</string>
|
||||
<string name="currentBalanceSentence">الرصيد الحالي: <xliff:g> %s </xliff:g></string>
|
||||
<string name="importCards">استيراد البطاقات</string>
|
||||
@@ -282,7 +278,7 @@
|
||||
<string name="setBarcodeHeight">ضبط ارتفاع الباركود</string>
|
||||
<string name="openBackImageInGalleryApp">فتح الصورة الخلفية في تطبيق المعرض</string>
|
||||
<string name="settings_allow_content_provider_read_title">السماح للتطبيقات الأخرى بالوصول إلى بياناتي</string>
|
||||
<string name="donate">يتبرع</string>
|
||||
<string name="donate">تبرّع</string>
|
||||
<string name="show_archived_cards">عرض البطاقات المؤرشفة</string>
|
||||
<string name="settings_category_title_privacy">خصوصية</string>
|
||||
<string name="show_balance">إظهار التوازن</string>
|
||||
@@ -313,11 +309,11 @@
|
||||
<string name="exportCancelled">تم الغاء الاستخراج</string>
|
||||
<string name="useFrontImage">استخدام صورة أمامية</string>
|
||||
<string name="useBackImage">استخدم صورة خلفية</string>
|
||||
<string name="addFromPkpass">اختر ملف الدفتر(.pkpass)</string>
|
||||
<string name="addFromPkpass">اختر ملف الدفتر (.pkpass)</string>
|
||||
<string name="unsupportedFile">هذا الملف غير مدعوم</string>
|
||||
<string name="generic_error_please_retry">نعتذر، حدث خطأ ما، حاول مرة أخرى...</string>
|
||||
<string name="settings_use_volume_keys_navigation">تبديل البطاقات باستخدام أزرار الصوت</string>
|
||||
<string name="settings_use_volume_keys_navigation_summary">تبديل البطاقات الظاهرة باستخدام أزرار الصوت</string>
|
||||
<string name="settings_use_volume_keys_navigation">بدّل البطاقات باستخدام أزرار الصوت</string>
|
||||
<string name="settings_use_volume_keys_navigation_summary">بدّل البطاقات الظاهرة باستخدام أزرار الصوت</string>
|
||||
<string name="settings_category_title_cards_overview">نظرة عامة على البطاقات</string>
|
||||
<string name="settings_column_count_portrait">الأعمدة في الوضع الرأسي</string>
|
||||
<string name="settings_column_count_landscape">الأعمدة في الوضع الأفقي</string>
|
||||
|
||||
@@ -308,4 +308,6 @@
|
||||
<string name="sort_by_valid_from">Начало валидност</string>
|
||||
<string name="width">Ширина</string>
|
||||
<string name="setBarcodeWidth">Задаване ширина на щрих кода</string>
|
||||
<string name="card_list_widget_name">Списък с карти</string>
|
||||
<string name="card_list_widget_empty">Когато добавите карти в Catima те ще се покажат тук. Ако имате карти уверете се, че са извън архива.</string>
|
||||
</resources>
|
||||
|
||||
@@ -314,4 +314,6 @@
|
||||
<string name="sort_by_valid_from">Platnost od</string>
|
||||
<string name="setBarcodeWidth">Nastavit šířku čárového kódu</string>
|
||||
<string name="width">Šířka</string>
|
||||
<string name="card_list_widget_name">Seznam karet</string>
|
||||
<string name="card_list_widget_empty">Karty přidané do aplikace Catima se zobrazí zde. Pokud máte karty, ujistěte se, že nejsou všechny archivovány.</string>
|
||||
</resources>
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
<string name="importLoyaltyCardKeychain">Aus Loyalty Card Keychain importieren</string>
|
||||
<string name="importFidmeMessage">Wähle deinen <i>fidme-export-request-xxxxxx.zip</i>-Export aus FidMe zum Importieren aus und wähle anschließend die Barcodetypen manuell aus. \nOder erstelle ihn aus deinem FidMe-Profil, indem du Datenschutz wählst und dann zuerst auf Meine Daten extrahieren drückst.</string>
|
||||
<string name="importFidme">Aus FidMe importieren</string>
|
||||
<string name="importCatimaMessage">Wähle deinen <i>catima.zip</i>-Export aus Catima zum Importieren aus.\nErstelle ihn aus dem Import/Export-Menü einer anderen Catima-Anwendung, indem du dort zuerst Export drückst.</string>
|
||||
<string name="importCatimaMessage">Wähle deinen „<i>catima.zip</i>-Export“ von Catima zum Importieren aus.\nErstelle ihn zuerst aus dem Import/Export-Menü einer anderen Catima-Anwendung, indem du dort Export drückst.</string>
|
||||
<string name="importCatima">Aus Catima importieren</string>
|
||||
<string name="setBarcodeId">Barcodewert festlegen</string>
|
||||
<string name="sameAsCardId">Entspricht Kartennummer</string>
|
||||
@@ -304,4 +304,6 @@
|
||||
<string name="sort_by_valid_from">Gültig ab</string>
|
||||
<string name="width">Breite</string>
|
||||
<string name="setBarcodeWidth">Barcodebreite einstellen</string>
|
||||
<string name="card_list_widget_empty">Nachdem du einige Treuekarten in Catima hinzugefügt hast, werden sie hier angezeigt. Wenn du Karten hast, stelle sicher, dass sie nicht alle archiviert sind.</string>
|
||||
<string name="card_list_widget_name">Kartenliste</string>
|
||||
</resources>
|
||||
|
||||
@@ -307,4 +307,6 @@
|
||||
<string name="sort_by_valid_from">Έναρξη ισχύος</string>
|
||||
<string name="setBarcodeWidth">Ορισμός πλάτους γραμμωτού κώδικα</string>
|
||||
<string name="width">Πλάτος</string>
|
||||
<string name="card_list_widget_empty">Αφού προσθέσετε μερικές κάρτες επιβράβευσης στο Catima, θα εμφανιστούν εδώ. Εάν έχετε κάρτες, βεβαιωθείτε ότι δεν είναι όλες αρχειοθετημένες.</string>
|
||||
<string name="card_list_widget_name">Λίστα καρτών</string>
|
||||
</resources>
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
<string name="points">Punkte</string>
|
||||
<string name="balanceParsingFailed">Vigane maksejääk</string>
|
||||
<string name="app_loyalty_card_keychain">Loyalty Card Keychain</string>
|
||||
<string name="privacy_policy">Privaatsuspoliitika</string>
|
||||
<string name="privacy_policy">Andmekaitsepõhimõtted</string>
|
||||
<string name="accept">Nõustu</string>
|
||||
<string name="importCatima">Impordi Catima varukoopiast</string>
|
||||
<string name="importCatimaMessage">Importimiseks vali varem tehtud <i>catima.zip</i> Catima ekspordifail. \nSellise faili saad luua mõnes teises seadmes olevast Catima rakendusest Import/Eksport menüüst valikust Eksport.</string>
|
||||
@@ -303,4 +303,6 @@
|
||||
<string name="sort_by_valid_from">Kehtib alates</string>
|
||||
<string name="setBarcodeWidth">Määratle triipkoodi laius</string>
|
||||
<string name="width">Laius</string>
|
||||
<string name="card_list_widget_name">Kaartide loend</string>
|
||||
<string name="card_list_widget_empty">Kui lisad Catimasse kliendikaarte, siis saavad nad olema nähtavad siin. Kui sul on kaardid lisatud, siis palun kontrolli, et nad kõik poleks arhiveeritud.</string>
|
||||
</resources>
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
<string name="importExport">ایمپورت/خروجی گرفتن</string>
|
||||
<string name="settings_category_title_privacy">حریم شخصی</string>
|
||||
<string name="settings_category_title_general">عمومی</string>
|
||||
<string name="settings_category_title_cards">کارتها</string>
|
||||
<string name="settings_category_title_cards">نمایش کارت</string>
|
||||
<string name="barcodeImageDescriptionWithType">تصویر بارکد <xliff:g>%s</xliff:g></string>
|
||||
<string name="importOptionFilesystemButton">از فایل های سیستم</string>
|
||||
<string name="about">درباره</string>
|
||||
@@ -112,7 +112,7 @@
|
||||
<string name="about_title_fmt">درباره <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">نسخه <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="chooseExpiryDate">انتخاب تاریخ انقضاء</string>
|
||||
<string name="app_libraries">کتابخانه های شخص ثالث: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_libraries">کتابخانه های آزاد شخص ثالث: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_copyright_old">بر اساس کارت وفاداری Keychain\nکپی رایت © 2016-2020 سازنده : Branden</string>
|
||||
<string name="app_license">نرمافزار آزاد با حقوق کپیلفت، تحت مجوز GPLv3+</string>
|
||||
<string name="groups">گروهها</string>
|
||||
@@ -188,4 +188,118 @@
|
||||
<string name="height">ارتفاع</string>
|
||||
<string name="add_manually_warning_message">برای برخی از فروشگاهها، مقدار بارکد با عدد نوشته شده روی کارت متفاوت است. به همین دلیل، وارد کردن دستی بارکد ممکن است همیشه کار نکند. اکیداً توصیه میشود که به جای آن، بارکد را با دوربین خود اسکن کنید. آیا هنوز میخواهید ادامه دهید؟</string>
|
||||
<string name="generic_error_please_retry">ببخشید، مشکلی پیش آمده، لطفا دوباره امتحان کنید...</string>
|
||||
<string name="settings_magenta_theme">سرخابی</string>
|
||||
<string name="welcome">یه کتیما خوش آمدید</string>
|
||||
<string name="chooseValidFromDate">مقداری درست از تاریخ برگزینید</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">میخواهم چند کارت به شما بدهم</string>
|
||||
<string name="frontImageDescription">عکس نمایه</string>
|
||||
<string name="backImageDescription">عکس پشتِسر</string>
|
||||
<string name="photos">عکسها</string>
|
||||
<string name="setFrontImage">عکس روبهرو را بگذارید</string>
|
||||
<string name="yes">بله</string>
|
||||
<string name="no">نه</string>
|
||||
<string name="updateBarcodeQuestionTitle">مقدار بارکد را بهروز میکنید؟</string>
|
||||
<string name="updateBarcodeQuestionText">شما شناسه را تغییر دادید. میخواهید بارکد را هم بهروز کنید تا همین مقدار را بهکار ببرید؟</string>
|
||||
<string name="failedGeneratingShareURL">نتوانستم آدرس همرسانیپذیر بسازم. لطفن این را گزارش کنید.</string>
|
||||
<string name="turn_flashlight_on">چراغقوه را روشن کنید</string>
|
||||
<string name="settings_locale">زبان</string>
|
||||
<string name="settings_oled_dark">پسزمینهی یکدست سیاه برای حالت تاریک</string>
|
||||
<string name="settings_oled_dark_summary">استفادهی باتری را برای نمایشگرهای OLED کاهش میدهد</string>
|
||||
<string name="setIcon">قالب پیشنمایه را بگمارید</string>
|
||||
<string name="settings_theme_color">رنگ زمینه</string>
|
||||
<string name="settings_catima_theme">کتیما</string>
|
||||
<string name="settings_system_locale">سیستم</string>
|
||||
<string name="selectColor">رنگ را برگزینید</string>
|
||||
<string name="settings_violet_theme">بنفش</string>
|
||||
<string name="settings_blue_theme">آبی</string>
|
||||
<string name="settings_sky_blue_theme">آبی آسمانی</string>
|
||||
<string name="settings_green_theme">سبز</string>
|
||||
<string name="settings_brown_theme">قهوهای</string>
|
||||
<string name="app_contributors">با کمک او ممکن شد: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="sort">مرتبکردن</string>
|
||||
<string name="showMoreInfo">نمایش اطلاعات</string>
|
||||
<string name="credits">اعتبارها</string>
|
||||
<string name="archived">کارت بایگانی شد</string>
|
||||
<string name="unarchived">کارت از بایگانی برچیده شد</string>
|
||||
<string name="show_validity">درستی را نشان دهید</string>
|
||||
<string name="wrongValueForBarcodeType">مقدار برای نوع بارکد برگزیده درست نیست</string>
|
||||
<string name="setBackImage">عکس پشتِسر را بگذارید</string>
|
||||
<string name="removeImage">عکس را برچینید</string>
|
||||
<string name="passwordRequired">لطفا گذرواژه را وارد کنید</string>
|
||||
<string name="previousCard">پیشین</string>
|
||||
<string name="turn_flashlight_off">چراغقوه را خاموش کنید</string>
|
||||
<string name="settings_pink_theme">صورتی</string>
|
||||
<string name="updateBalance">بهروزرسانی موجودی</string>
|
||||
<string name="barcodeLongPressMessage">تنها عکس میتواند در گالری برنامه باز شود</string>
|
||||
<string name="sort_by_name">نام</string>
|
||||
<string name="sort_by_most_recently_used">بهتازگی استفادهشده</string>
|
||||
<string name="sort_by_expiry">انقضا</string>
|
||||
<string name="sort_by">مرتب کن با</string>
|
||||
<string name="include_if_asking_support">اگر میخواهید پشتیبانی درخواست کنید، اطلاعات زیر را پر کنید:</string>
|
||||
<string name="unarchive">برچیدن بایگانی</string>
|
||||
<string name="switchToBackImage">به عکس پشتِسر جابهجا کنید</string>
|
||||
<string name="openBackImageInGalleryApp">عکس پشتِسر را در برنامهی گالری باز کنید</string>
|
||||
<string name="setBarcodeHeight">ارتفاع بارگد را بگمارید</string>
|
||||
<string name="donate">کمک مالی کنید</string>
|
||||
<string name="icon_header_click_text">برای ویرایش قاب پیشنمایه فشار داده و نگهدارید</string>
|
||||
<string name="show_name_below_image_thumbnail">زیر عکس پیشنمایه نام را نشان دهید</string>
|
||||
<string name="show_note">یادداشت را نشان دهید</string>
|
||||
<string name="settings_category_title_cards_overview">نگاهی به کارتها</string>
|
||||
<string name="settings_column_count_portrait">ستونها در حالت پرتره</string>
|
||||
<string name="settings_automatic_column_count">خودکار</string>
|
||||
<string name="settings_column_count_2">۲</string>
|
||||
<string name="settings_column_count_3">۳</string>
|
||||
<string name="settings_column_count_4">۴</string>
|
||||
<string name="settings_column_count_5">۵</string>
|
||||
<string name="settings_column_count_6">۶</string>
|
||||
<string name="failedLaunchingPhotoPicker">نتوانستم یک برنامهی گالری پشتیبانیشده بیابم</string>
|
||||
<string name="show_balance">موجودی را نشان دهید</string>
|
||||
<string name="settings_column_count_landscape">ستونها در حالت لنداسکیپ</string>
|
||||
<string name="settings_column_count_1">۱</string>
|
||||
<string name="sort_by_valid_from">درست از</string>
|
||||
<string name="reverse">بهترتیب برعکس</string>
|
||||
<string name="version_history">تاریخچهی نسخه</string>
|
||||
<string name="license">مجوز</string>
|
||||
<string name="source_repository">مخزن منبع</string>
|
||||
<string name="report_error">خطا را گزارش کنید</string>
|
||||
<string name="translate_platform">در وبلیت</string>
|
||||
<string name="shortcutSelectCard">یک کارت برگزینید</string>
|
||||
<string name="options">گزینهها</string>
|
||||
<string name="starred">نشانشده</string>
|
||||
<string name="on_github">روی گیتهاب</string>
|
||||
<string name="and_data_usage">و مصرف داده</string>
|
||||
<string name="rate_this_app">به این برنامه رتبه بدهید</string>
|
||||
<string name="on_google_play">در گوگلپلی</string>
|
||||
<string name="archive">بایگانی</string>
|
||||
<string name="updateBalanceHint">مقدار را وارد کنید</string>
|
||||
<string name="currentBalanceSentence">موجودی کنونی: <xliff:g>%s</xliff:g></string>
|
||||
<string name="newBalanceSentence">موجودی تازه: <xliff:g>%s</xliff:g></string>
|
||||
<string name="validFromDate">معتبر از</string>
|
||||
<string name="anyDate">هر تاریخی</string>
|
||||
<string name="validFromSentence">درست از: <xliff:g>%s</xliff:g></string>
|
||||
<string name="switchToFrontImage">به عکس روبهرو جابهجا کنید</string>
|
||||
<string name="nextCard">پسین</string>
|
||||
<string name="failedToOpenUrl">نخست یک مرورگر وب نصب کنید</string>
|
||||
<string name="updateBalanceTitle">چقدر خرج یا دریافت کردید؟</string>
|
||||
<string name="switchToBarcode">به بارکد جابهجا کنید</string>
|
||||
<string name="openFrontImageInGalleryApp">عکس روبهرو را در برنامهی گالری باز کنید</string>
|
||||
<string name="add_a_card_in_a_different_way">یک کارت به روشی متفاوت بیافزایید</string>
|
||||
<string name="takePhoto">عکس بگیرید</string>
|
||||
<string name="settings_column_count_7">۷</string>
|
||||
<string name="manually_enter_barcode_instructions">شماره شناسایی یا متنی که روی کارت شماست را وارد کنید و بارکدی را که شبیه بارکد روی کارت شماست فشار دهید.</string>
|
||||
<string name="failedLaunchingFileManager">نتوانستم یک مدیر فایل پشتیبانیشده پیدا کنم</string>
|
||||
<string name="useFrontImage">از تصویر جلو استفاده کنید</string>
|
||||
<string name="useBackImage">از تصویر پشت استفاده کنید</string>
|
||||
<string name="pageWithNumber">صفحه <xliff:g>%d</xliff:g></string>
|
||||
<string name="multipleBarcodesFoundPleaseChooseOne">از کدام یک از بارکدهای پیدا شده میخواهید استفاده کنید؟</string>
|
||||
<string name="width">عرض</string>
|
||||
<string name="setBarcodeWidth">تنظیم عرض بارکد</string>
|
||||
<string name="unsupportedFile">این فایل پشتیبانی نمیشود</string>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> کارت (<xliff:g id="archivedCount">%2$d</xliff:g> بایگانی شده)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> کارت (<xliff:g id="archivedCount">%2$d</xliff:g> بایگانی شده)</item>
|
||||
</plurals>
|
||||
<string name="spend">خرج کردن</string>
|
||||
<string name="addFromPkpass">یک فایل دفترچه حساب (.pkpass) انتخاب کنید</string>
|
||||
<string name="noCameraFoundGuideText">به نظر نمیرسد دستگاه شما دوربین داشته باشد. اگر دارد، دستگاه را مجدداً راهاندازی کنید. در غیر این صورت، از دکمه گزینههای بیشتر در زیر برای افزودن بارکد به روش دیگری استفاده کنید.</string>
|
||||
</resources>
|
||||
|
||||
@@ -306,4 +306,8 @@
|
||||
<string name="unsupportedFile">Tämä tiedosto ei ole tuettu</string>
|
||||
<string name="generic_error_please_retry">Pahoittelut, jokin meni pieleen. Yritä uudelleen...</string>
|
||||
<string name="sort_by_valid_from">Voimassa alkaen</string>
|
||||
<string name="width">Leveys</string>
|
||||
<string name="setBarcodeWidth">Aseta viivakoodin leveys</string>
|
||||
<string name="card_list_widget_name">Korttiluettelo</string>
|
||||
<string name="card_list_widget_empty">Kun olet lisännyt kanta-asiakaskortteja Catimaan, ne näkyvät täällä. Jos sinulla on kortteja, varmista, etteivät ne kaikki ole arkistoituja.</string>
|
||||
</resources>
|
||||
|
||||
@@ -314,4 +314,6 @@
|
||||
<string name="sort_by_valid_from">Valide à partir du</string>
|
||||
<string name="width">Largeur</string>
|
||||
<string name="setBarcodeWidth">Définir la largeur du code-barres</string>
|
||||
<string name="card_list_widget_name">Liste des cartes</string>
|
||||
<string name="card_list_widget_empty">Après avoir ajouter des cartes de fidélité dans Catima, elles apparaîtront ici. Si vous avez des cartes, assurez-vous qu\'elles ne soient pas archivées.</string>
|
||||
</resources>
|
||||
|
||||
@@ -302,4 +302,6 @@
|
||||
<string name="sort_by_valid_from">Válido desde</string>
|
||||
<string name="width">Anchura</string>
|
||||
<string name="setBarcodeWidth">Establecer anchura do código de barras</string>
|
||||
<string name="card_list_widget_name">Lista de tarxetas</string>
|
||||
<string name="card_list_widget_empty">Aquí aparecerán as tarxetas fidelidade cando as engadas a Catima. Se tes tarxetas mira que non estean arquivadas.</string>
|
||||
</resources>
|
||||
|
||||
@@ -306,4 +306,6 @@
|
||||
<string name="settings_column_count_4">4</string>
|
||||
<string name="settings_column_count_7">7</string>
|
||||
<string name="sort_by_valid_from">Érvényesség kezdete</string>
|
||||
<string name="width">Szélesség</string>
|
||||
<string name="setBarcodeWidth">Vonalkód szélességének beállítása</string>
|
||||
</resources>
|
||||
|
||||
@@ -300,4 +300,5 @@
|
||||
<string name="unsupportedFile">File ini tidak didukung</string>
|
||||
<string name="generic_error_please_retry">Maaf, terjadi kesalahan, silakan coba lagi...</string>
|
||||
<string name="sort_by_valid_from">Berlaku dari</string>
|
||||
<string name="width">Lebar</string>
|
||||
</resources>
|
||||
|
||||
@@ -314,4 +314,6 @@
|
||||
<string name="sort_by_valid_from">Valido da</string>
|
||||
<string name="setBarcodeWidth">Imposta la larghezza del codice a barre</string>
|
||||
<string name="width">Larghezza</string>
|
||||
<string name="card_list_widget_name">Lista delle carte</string>
|
||||
<string name="card_list_widget_empty">Dopo aver aggiunto alcune carte fedeltà in Catima, queste appariranno qui. Se hai delle carte, assicurati che non siano tutte archiviate.</string>
|
||||
</resources>
|
||||
|
||||
11
app/src/main/res/values-iw/strings.xml
Normal file
11
app/src/main/res/values-iw/strings.xml
Normal file
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="action_search">חיפוש</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> נבחר</item>
|
||||
<item quantity="two"><xliff:g>%d</xliff:g> נבחרו</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> נבחרו</item>
|
||||
</plurals>
|
||||
<string name="action_add">הוסף</string>
|
||||
<string name="noGiftCards">לחץ על כפתור הפלוס (+) כדי להוסיף כרטיס, או ייבא מתפריט ⋮.</string>
|
||||
</resources>
|
||||
@@ -51,7 +51,7 @@
|
||||
<string name="intent_import_card_from_url_share_text">カード共有をしましょう</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">バーコード表示中に画面をロックしない</string>
|
||||
<string name="settings_keep_screen_on">バーコード表示中に画面を点けたままにする</string>
|
||||
<string name="settings_display_barcode_max_brightness">バーコード表示画面を明るくする</string>
|
||||
<string name="settings_display_barcode_max_brightness">画面を明るくする</string>
|
||||
<string name="settings_dark_theme">ダーク</string>
|
||||
<string name="settings_light_theme">ライト</string>
|
||||
<string name="settings_system_theme">システムに従う</string>
|
||||
@@ -189,7 +189,7 @@
|
||||
<string name="chooseValidFromDate">有効期限を選択</string>
|
||||
<string name="anyDate">無期限</string>
|
||||
<string name="app_name">Catima</string>
|
||||
<string name="settings_card_orientation">バーコードの向き</string>
|
||||
<string name="settings_card_orientation">画面の向き</string>
|
||||
<string name="settings_display_barcode_max_brightness_summary">仕事をするためにいくつかのスキャナーが必要</string>
|
||||
<string name="settings_follow_system_orientation">システムに従う</string>
|
||||
<string name="storageReadPermissionRequired">このアクションのためにストレージの読み取り権限を許可…</string>
|
||||
@@ -239,4 +239,8 @@
|
||||
<string name="settings_column_count_4">4</string>
|
||||
<string name="settings_category_title_privacy">プライバシー</string>
|
||||
<string name="exportCancelled">輸出がキャンセルされた</string>
|
||||
<string name="settings_allow_content_provider_read_title">他のアプリが自分のデータにアクセスすることを許可する</string>
|
||||
<string name="permissionReadCardsDescription">Catimaカードと、ノートや画像を含むすべての詳細を読み取る</string>
|
||||
<string name="settings_use_volume_keys_navigation_summary">ボリュームボタンを使ってどのカードを表示するかを変更する</string>
|
||||
<string name="unsupportedFile">このファイルはサポートされていません</string>
|
||||
</resources>
|
||||
|
||||
@@ -300,4 +300,6 @@
|
||||
<string name="settings_automatic_column_count">자동</string>
|
||||
<string name="settings_column_count_1">1</string>
|
||||
<string name="sort_by_valid_from">유효 기간</string>
|
||||
<string name="width">너비</string>
|
||||
<string name="setBarcodeWidth">바코드 너비를 설정하세요</string>
|
||||
</resources>
|
||||
|
||||
@@ -309,4 +309,6 @@
|
||||
<string name="sort_by_valid_from">Derīga no</string>
|
||||
<string name="setBarcodeWidth">Iestatīt svītrkoda platumu</string>
|
||||
<string name="width">Platums</string>
|
||||
<string name="card_list_widget_name">Karšu saraksts</string>
|
||||
<string name="card_list_widget_empty">Pēc klienta karšu pievienošanas Catima tās parādīsies šeit. Ja Tev ir kartes, jāpārliecinās, ka tās visas nav arhivētas.</string>
|
||||
</resources>
|
||||
|
||||
@@ -84,6 +84,14 @@
|
||||
<string name="settings_theme">थीम</string>
|
||||
<string name="settings_light_theme">उजळ</string>
|
||||
<string name="settings">सेटिंग्ज</string>
|
||||
<string name="settings_card_orientation">बार्कोड अभिमुखता</string>
|
||||
<string name="settings_card_orientation">स्क्रीन ओरिएंटेशन</string>
|
||||
<string name="thumbnailDescription">लघुप्रतिमा</string>
|
||||
</resources>
|
||||
<string name="settings_keep_screen_on_summary">कार्ड पाहताना स्क्रीन टाइमआउट बंद करते</string>
|
||||
<string name="settings_follow_sensor_orientation">नेहमी फिरवा (सिस्टम सेटिंग्ज दुर्लक्षित करेल)</string>
|
||||
<string name="settings_lock_on_opening_orientation">कार्ड उघडताना वापरला जाणारा लॉक टू ओरिएंटेशन</string>
|
||||
<string name="settings_display_barcode_max_brightness">स्क्रीन उजळवा</string>
|
||||
<string name="settings_display_barcode_max_brightness_summary">काही स्कॅनर्सना काम करण्यासाठी आवश्यक</string>
|
||||
<string name="settings_keep_screen_on">स्क्रीन चालू ठेवा</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">स्क्रीन लॉक प्रतिबंधित करा</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card_summary">कार्ड पाहताना स्क्रीन लॉक बंद करते</string>
|
||||
</resources>
|
||||
|
||||
@@ -306,4 +306,8 @@
|
||||
<string name="unsupportedFile">Dit bestand wordt niet ondersteund</string>
|
||||
<string name="generic_error_please_retry">Sorry, er ging iets mis. Probeer het opnieuw.</string>
|
||||
<string name="sort_by_valid_from">Op geldig vanaf</string>
|
||||
<string name="width">Breedte</string>
|
||||
<string name="setBarcodeWidth">Stel Barcodebreedte in</string>
|
||||
<string name="card_list_widget_name">Kaartenlijst</string>
|
||||
<string name="card_list_widget_empty">Zodra er kaarten in Catima toegevoegd zijn worden deze hier getoond. Heb je al kaarten? Controleer dan of deze niet gearchiveerd zijn.</string>
|
||||
</resources>
|
||||
|
||||
@@ -314,4 +314,6 @@
|
||||
<string name="sort_by_valid_from">Válido a partir de</string>
|
||||
<string name="width">Largura</string>
|
||||
<string name="setBarcodeWidth">Definir largura do código de barras</string>
|
||||
<string name="card_list_widget_name">Lista de cartões</string>
|
||||
<string name="card_list_widget_empty">Depois que você adicionar alguns cartões de fidelidade no Catima, eles aparecerão aqui. Se você tiver cartões, verifique se eles não estão todos arquivados.</string>
|
||||
</resources>
|
||||
|
||||
@@ -314,4 +314,6 @@
|
||||
<string name="sort_by_valid_from">Válido a partir de</string>
|
||||
<string name="width">Largura</string>
|
||||
<string name="setBarcodeWidth">Definir a largura do código de barras</string>
|
||||
<string name="card_list_widget_name">Lista de cartões</string>
|
||||
<string name="card_list_widget_empty">Após adicionar cartões de fidelidade em Catima, eles aparecerão aqui. Se tem cartões, certifique-se de que não estão todos arquivados.</string>
|
||||
</resources>
|
||||
|
||||
@@ -308,4 +308,6 @@
|
||||
<string name="generic_error_please_retry">Lamento, ocorreu um erro, tente novamente...</string>
|
||||
<string name="setBarcodeWidth">Definir Largura do Código de Barra</string>
|
||||
<string name="width">Largura</string>
|
||||
<string name="card_list_widget_name">Lista de cartões</string>
|
||||
<string name="card_list_widget_empty">Após adicionar cartões de fidelidade em Catima, eles aparecerão aqui. Se tem cartões, certifique-se de que não estão todos arquivados.</string>
|
||||
</resources>
|
||||
|
||||
@@ -307,4 +307,6 @@
|
||||
<string name="addFromPkpass">Selectează un fișier de tip Passbook (.pkpass)</string>
|
||||
<string name="unsupportedFile">Acest fișier nu este suportat</string>
|
||||
<string name="generic_error_please_retry">Scuze, ceva nu a funționat. Încearcă din nou ...</string>
|
||||
<string name="width">Lățime</string>
|
||||
<string name="setBarcodeWidth">Setează Lățimea Codului de Bare</string>
|
||||
</resources>
|
||||
|
||||
@@ -320,4 +320,6 @@
|
||||
<string name="sort_by_valid_from">Начало действия</string>
|
||||
<string name="width">Ширина</string>
|
||||
<string name="setBarcodeWidth">Указать ширину штрих-кода</string>
|
||||
<string name="card_list_widget_name">Список карт</string>
|
||||
<string name="card_list_widget_empty">После добавления карт лояльности в Catima, они появятся здесь. Если у вас есть карты, убедитесь, что они не архивированы.</string>
|
||||
</resources>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<string name="edit">Upraviť</string>
|
||||
<string name="delete">Vymazať</string>
|
||||
<string name="confirm">Potvrdiť</string>
|
||||
<string name="ok">Áno</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="sendLabel">Odoslať…</string>
|
||||
<string name="editCardTitle">Upraviť kartu</string>
|
||||
<string name="addCardTitle">Pridať kartu</string>
|
||||
@@ -21,10 +21,10 @@
|
||||
<string name="importExport">Import/Export</string>
|
||||
<string name="exportName">Export</string>
|
||||
<string name="importExportHelp">Zálohovanie vašich údajov umožňuje ich presun na iné zariadenie.</string>
|
||||
<string name="importSuccessfulTitle">Importované</string>
|
||||
<string name="importSuccessfulTitle">Úspešne importované</string>
|
||||
<string name="importFailedTitle">Import zlyhal</string>
|
||||
<string name="importFailed">Nemožno vykonať import</string>
|
||||
<string name="exportSuccessfulTitle">Exportované</string>
|
||||
<string name="exportSuccessfulTitle">Úspešne exportované</string>
|
||||
<string name="exportFailedTitle">Export zlyhal</string>
|
||||
<string name="exportFailed">Nemožno vykonať export</string>
|
||||
<string name="importing">Importujem…</string>
|
||||
@@ -33,13 +33,13 @@
|
||||
<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="about">O aplikácii</string>
|
||||
<string name="app_license">Copyleftovaný slobodný softvér s licenciou GPLv3+</string>
|
||||
<string name="app_license">Slobodný softvér s copyleft licenciou GPLv3+</string>
|
||||
<string name="about_title_fmt">O <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Verzia: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="selectBarcodeTitle">Vyberte čiarový kód</string>
|
||||
<string name="thumbnailDescription">Miniatúra</string>
|
||||
<string name="settings">Nastavenia</string>
|
||||
<string name="settings_display_barcode_max_brightness">Zvýrazniť obrazovku zobrazenia čiarových kódov</string>
|
||||
<string name="settings_display_barcode_max_brightness">Zvýšiť jas obrazovky pri zobrazení čiarového kódu</string>
|
||||
<string name="deleteTitle">Odstrániť kartu</string>
|
||||
<string name="deleteConfirmation">Naozaj chcete túto kartu odstrániť?</string>
|
||||
<string name="star">Pridať k obľúbeným</string>
|
||||
@@ -50,7 +50,7 @@
|
||||
<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="balance">Zostatok</string>
|
||||
<string name="errorReadingImage">Obrázok sa nepodarilo prečítať</string>
|
||||
<string name="noBarcodeFound">Nenašiel sa žiadny čiarový kód</string>
|
||||
<string name="moveBarcodeToTopOfScreen">Presun čiarového kódu do hornej časti obrazovky</string>
|
||||
@@ -59,7 +59,7 @@
|
||||
<string name="addFromImage">Vyberte obrázok z galérie</string>
|
||||
<string name="addManually">Zadajte čiarový kód ručne</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Odísť bez uloženia\?</string>
|
||||
<string name="leaveWithoutSaveTitle">Výstup</string>
|
||||
<string name="leaveWithoutSaveTitle">Ukončiť</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>
|
||||
@@ -71,13 +71,13 @@
|
||||
<string name="enter_group_name">Zadajte názov skupiny</string>
|
||||
<string name="exportSuccessful">Údaje exportované</string>
|
||||
<string name="importSuccessful">Údaje importované</string>
|
||||
<string name="intent_import_card_from_url_share_text">Chcem sa s vami podeliť o pohľadnicu</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Zabrániť uzamknutiu obrazovky</string>
|
||||
<string name="settings_keep_screen_on">Nechajte obrazovku zapnutú</string>
|
||||
<string name="intent_import_card_from_url_share_text">Zdieľam kartu</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Nezamykať obrazovku</string>
|
||||
<string name="settings_keep_screen_on">Nevypínať obrazovku</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_dark_theme">Tmavá</string>
|
||||
<string name="settings_light_theme">Svetlá</string>
|
||||
<string name="settings_system_theme">Podľa nastavení systému</string>
|
||||
<string name="settings_theme">Téma</string>
|
||||
<string name="starImage">Obľúbená hviezda</string>
|
||||
<string name="exportOptionExplanation">Údaje sa zapíšu na vami zvolené miesto.</string>
|
||||
@@ -107,7 +107,7 @@
|
||||
</plurals>
|
||||
<string name="group_edit">Upraviť skupinu</string>
|
||||
<string name="group_name_already_in_use">Tento názov skupiny sa už používa</string>
|
||||
<string name="group_name_is_empty">Názov skupiny nesmie byť prázdne</string>
|
||||
<string name="group_name_is_empty">Názov skupiny nesmie byť prázdny</string>
|
||||
<string name="group_updated">Skupina bola aktualizovaná</string>
|
||||
<string name="editGroup">Úprava skupiny: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryStateSentence">Platí do: <xliff:g>%s</xliff:g></string>
|
||||
@@ -153,7 +153,7 @@
|
||||
<string name="credits">Poďakovanie</string>
|
||||
<string name="card">Karta</string>
|
||||
<string name="rate_this_app">Ohodnoťte túto aplikáciu</string>
|
||||
<string name="exportPassword">Nastavenie hesla na ochranu exportu (voliteľné)</string>
|
||||
<string name="exportPassword">Nastavte heslo na ochranu exportu (voliteľné)</string>
|
||||
<string name="exportPasswordHint">Zadajte heslo</string>
|
||||
<string name="failedGeneratingShareURL">Nepodarilo sa vygenerovať zdieľateľnú adresu URL. Nahláste to, prosím.</string>
|
||||
<string name="turn_flashlight_off">Vypnúť svetlo</string>
|
||||
@@ -168,7 +168,7 @@
|
||||
<string name="barcodeId">Hodnota čiarového kódu</string>
|
||||
<string name="sameAsCardId">Rovnaké ako ID</string>
|
||||
<string name="setBarcodeId">Nastavenie hodnoty čiarového kódu</string>
|
||||
<string name="unsupportedBarcodeType">Tento typ čiarového kódu zatiaľ nie je možné zobraziť. Možno bude podporovaný v neskoršej verzii aplikácie.</string>
|
||||
<string name="unsupportedBarcodeType">Tento typ čiarového kódu zatiaľ nie je možné zobraziť. Možno bude podporovaný v novšej verzii aplikácie.</string>
|
||||
<string name="wrongValueForBarcodeType">Hodnota nie je platná pre vybraný typ čiarového kódu</string>
|
||||
<string name="frontImageDescription">Obrázok prednej strany</string>
|
||||
<string name="backImageDescription">Obrázok zadnej strany</string>
|
||||
@@ -184,7 +184,7 @@
|
||||
<string name="noGiftCardsGroup">Zatiaľ nemáte žiadne vernostné karty. Keď nejaké pridáte, môžete ich priradiť ku skupine tu.</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">Na skenovanie čiarových kódov potrebuje Catima prístup k fotoaparátu. Ťuknite sem a zmeňte nastavenia oprávnení.</string>
|
||||
<string name="importCards">Importovať karty</string>
|
||||
<string name="settings_card_orientation">Orientácia obrazovky čiarového kódu</string>
|
||||
<string name="settings_card_orientation">Orientácia obrazovky</string>
|
||||
<string name="settings_lock_on_opening_orientation">Zamknúť na orientáciu použitú pri otváraní karty</string>
|
||||
<string name="app_loyalty_card_keychain">Kľúčenka vernostných kariet</string>
|
||||
<string name="settings_oled_dark">Čisto čierne pozadie pre tmavú tému</string>
|
||||
@@ -195,7 +195,7 @@
|
||||
<string name="starred">S hviezdičkou</string>
|
||||
<string name="duplicateCard">Duplikovať</string>
|
||||
<string name="archive">Archivovať</string>
|
||||
<string name="unarchive">Vrátiť z archivu</string>
|
||||
<string name="unarchive">Vrátiť z archívu</string>
|
||||
<string name="archived">Karta archivovaná</string>
|
||||
<string name="unarchived">Karta vrátená z archívu</string>
|
||||
<string name="previousCard">Predošlá</string>
|
||||
@@ -244,13 +244,13 @@
|
||||
<string name="icon_header_click_text">Dlhým stlačením upravíte miniatúru</string>
|
||||
<string name="settings_category_title_general">Všeobecné</string>
|
||||
<string name="settings_category_title_privacy">Súkromie</string>
|
||||
<string name="settings_keep_screen_on_summary">Zakázanie časového limitu obrazovky počas prezerania karty</string>
|
||||
<string name="settings_display_barcode_max_brightness_summary">Potrebné pre fungovanie niektorých skenerov</string>
|
||||
<string name="settings_keep_screen_on_summary">Ponechať obrazovku aktívnu počas prezerania karty</string>
|
||||
<string name="settings_display_barcode_max_brightness_summary">Pre zaistenie čitateľnosti pre niektoré skenery</string>
|
||||
<string name="settings_allow_content_provider_read_summary">Aplikácie budú musieť stále žiadať o povolenie, aby im bol udelený prístup</string>
|
||||
<string name="openBackImageInGalleryApp">Otvorenie spätného obrázka v aplikácii galéria</string>
|
||||
<string name="openBackImageInGalleryApp">Otvorenie zadného obrázka v aplikácii galéria</string>
|
||||
<string name="openFrontImageInGalleryApp">Otvorenie predného obrázka v aplikácii galéria</string>
|
||||
<string name="setBarcodeHeight">Nastavenie výšky čiarového kódu</string>
|
||||
<string name="show_balance">Ukážte rovnováhu</string>
|
||||
<string name="show_balance">Ukážte zostatok</string>
|
||||
<string name="show_name_below_image_thumbnail">Zobraziť názov pod miniatúrou obrázka</string>
|
||||
<string name="show_validity">Zobraziť platnosť</string>
|
||||
<string name="permissionReadCardsLabel">Načítať Catima karty</string>
|
||||
@@ -258,14 +258,14 @@
|
||||
<string name="switchToBackImage">Prepnutie na zadný obrázok</string>
|
||||
<string name="height">Výška</string>
|
||||
<string name="switchToFrontImage">Prepnutie na predný obrázok</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card_summary">Zakázanie uzamknutia obrazovky počas prezerania karty</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card_summary">Zakázanie zamknutia obrazovky počas prezerania karty</string>
|
||||
<string name="settings_allow_content_provider_read_title">Povolenie prístupu k mojim údajom iným aplikáciám</string>
|
||||
<string name="settings_oled_dark_summary">Znižuje spotrebu batérie na displejoch OLED</string>
|
||||
<string name="settings_oled_dark_summary">Znižuje spotrebu batérie na obrazovkách typu OLED</string>
|
||||
<string name="switchToBarcode">Prepnutie na čiarový kód</string>
|
||||
<string name="settings_category_title_cards">Zobrazenie karty</string>
|
||||
<string name="donate">Darujte</string>
|
||||
<string name="card_id_must_not_be_empty">ID karty nesmie byť prázdne</string>
|
||||
<string name="balanceParsingFailed">Neplatná rovnováha</string>
|
||||
<string name="balanceParsingFailed">Neplatný zostatok</string>
|
||||
<string name="add_a_card_in_a_different_way">Pridať kartu iným spôsobom</string>
|
||||
<string name="view_online">Zobraziť online</string>
|
||||
<string name="manually_enter_barcode_instructions">Zadajte číslo ID alebo text na karte a stlačte čiarový kód, ktorý vyzerá ako ten na vašej karte.</string>
|
||||
@@ -273,18 +273,18 @@
|
||||
<string name="enter_card_id">Zadajte číslo ID alebo text na karte</string>
|
||||
<string name="action_display_options">Možnosti zobrazenia</string>
|
||||
<string name="addWithoutBarcode">Pridať kartu bez čiarového kódu</string>
|
||||
<string name="app_copyright_short">Copyright © Sylvia van Os a prispievateľov</string>
|
||||
<string name="app_copyright_short">Copyright © Sylvia van Os a prispievatelia</string>
|
||||
<string name="field_must_not_be_empty">Pole nesmie byť prázdne</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019–<xliff:g>%d</xliff:g> Sylvia van Os a prispievateľov</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Copyright © 2019–<xliff:g>%d</xliff:g> Sylvia van Os a prispievatelia</string>
|
||||
<string name="show_archived_cards">Zobraziť archivované karty</string>
|
||||
<string name="app_name">Katima</string>
|
||||
<string name="settings_follow_sensor_orientation">Vždy otáčať (ignoruje nastavenie systému)</string>
|
||||
<string name="app_name">Catima</string>
|
||||
<string name="settings_follow_sensor_orientation">Vždy otočiť (ignoruje nastavenie systému)</string>
|
||||
<string name="continue_">Pokračovať</string>
|
||||
<string name="spend">Utratené</string>
|
||||
<string name="receive">Prijaté</string>
|
||||
<string name="amountParsingFailed">Neplatná hodnota</string>
|
||||
<string name="add_manually_warning_title">Skenovanie je odporúčané</string>
|
||||
<string name="add_manually_warning_message">V niektorých obchodoch nie je číslo na cenovke totožné s čiarovým kódom, preto je lepšie zoskenovať čiarový kód. Chcete napriek tomu pokračovať?</string>
|
||||
<string name="add_manually_warning_message">V niektorých obchodoch sa hodnota čiarového kódu líši od čísla uvedeného na karte. Z tohto dôvodu nemusí manuálne zadanie čiarového kódu vždy fungovať. Dôrazne odporúčame naskenovať čiarový kód pomocou fotoaparátu. Chcete napriek tomu pokračovať?</string>
|
||||
<string name="addFromPdfFile">Vyberte súbor PDF</string>
|
||||
<string name="errorReadingFile">Súbor sa nepodarilo prečítať</string>
|
||||
<string name="failedLaunchingFileManager">Nepodarilo sa nájsť podporovaného správcu súborov</string>
|
||||
@@ -312,6 +312,8 @@
|
||||
<string name="settings_column_count_6">6</string>
|
||||
<string name="settings_column_count_7">7</string>
|
||||
<string name="addFromPkpass">Vyberte súbor Passbook (.pkpass)</string>
|
||||
<string name="settings_use_volume_keys_navigation">Prepínanie kariet pomocou tlačidiel hlasitosti</string>
|
||||
<string name="settings_use_volume_keys_navigation_summary">Zobrazovanú kartu môžete zmeniť pomocou tlačidiel hlasitosti</string>
|
||||
<string name="settings_use_volume_keys_navigation">Zmena kariet pomocou tlačidiel hlasitosti</string>
|
||||
<string name="settings_use_volume_keys_navigation_summary">Pre posúvanie medzi kartami používať tlačidlá hlasitosti</string>
|
||||
<string name="card_list_widget_name">Zoznam kariet</string>
|
||||
<string name="card_list_widget_empty">Po pridaní vernostných kariet do Catima sa zobrazia tu. Ak máte karty, uistite sa, že nie sú všetky archivované.</string>
|
||||
</resources>
|
||||
|
||||
@@ -308,4 +308,6 @@
|
||||
<string name="sort_by_valid_from">İtibaren Geçerli</string>
|
||||
<string name="width">Genişlik</string>
|
||||
<string name="setBarcodeWidth">Barkod Genişliğini Ayarla</string>
|
||||
<string name="card_list_widget_name">Kart listesi</string>
|
||||
<string name="card_list_widget_empty">Catima\'ya sadakat kartları eklediğinizde, burada gözükecekler. Eğer kartlarınız varsa, arşivlemediğinizden emin olun.</string>
|
||||
</resources>
|
||||
|
||||
@@ -319,4 +319,6 @@
|
||||
<string name="sort_by_valid_from">Діє з</string>
|
||||
<string name="width">Ширина</string>
|
||||
<string name="setBarcodeWidth">Встановити ширину штрих-коду</string>
|
||||
<string name="card_list_widget_name">Список карток</string>
|
||||
<string name="card_list_widget_empty">Після того, як ви додасте кілька карток лояльності в Catima, вони з’являться тут. Якщо у вас є картки, переконайтеся, що вони не всі заархівовані.</string>
|
||||
</resources>
|
||||
|
||||
@@ -296,4 +296,10 @@
|
||||
<string name="settings_column_count_5">5</string>
|
||||
<string name="settings_column_count_6">6</string>
|
||||
<string name="settings_column_count_7">7</string>
|
||||
<string name="sort_by_valid_from">Có hiệu lực từ</string>
|
||||
<string name="addFromPkpass">Chọn tệp Passbook (.pkpass)</string>
|
||||
<string name="unsupportedFile">Tập tin này không được hỗ trợ</string>
|
||||
<string name="generic_error_please_retry">Xin lỗi, có gì đó không ổn, vui lòng thử lại...</string>
|
||||
<string name="width">Chiều rộng</string>
|
||||
<string name="setBarcodeWidth">Đặt chiều rộng mã vạch</string>
|
||||
</resources>
|
||||
|
||||
@@ -302,4 +302,6 @@
|
||||
<string name="sort_by_valid_from">有效期开始日</string>
|
||||
<string name="width">宽度</string>
|
||||
<string name="setBarcodeWidth">设置条码宽度</string>
|
||||
<string name="card_list_widget_name">卡片列表</string>
|
||||
<string name="card_list_widget_empty">在 Catima 中添加了一些会员卡后,它们会出现在这里。如果你有卡片,确保不是所有都已归档。</string>
|
||||
</resources>
|
||||
|
||||
@@ -117,7 +117,7 @@
|
||||
<item>es</item>
|
||||
<item>es-rAR</item>
|
||||
<item>et</item>
|
||||
<!-- <item>fa</item> -->
|
||||
<item>fa</item>
|
||||
<item>fi</item>
|
||||
<!-- <item>fil</item> -->
|
||||
<item>fr</item>
|
||||
@@ -129,6 +129,7 @@
|
||||
<item>in-rID</item>
|
||||
<item>is</item>
|
||||
<item>it</item>
|
||||
<!-- <item>iw</item> -->
|
||||
<item>ja</item>
|
||||
<!-- <item>kn</item> -->
|
||||
<item>ko</item>
|
||||
|
||||
@@ -362,5 +362,7 @@
|
||||
<string name="unsupportedFile">This file is not supported</string>
|
||||
<string name="generic_error_please_retry">Sorry, something went wrong, please try again...</string>
|
||||
<string name="width">Width</string>
|
||||
<string name="card_list_widget_name">Card list</string>
|
||||
<string name="setBarcodeWidth">Set Barcode Width</string>
|
||||
<string name="card_list_widget_empty">After you add some loyalty cards in Catima, they will appear here. If you have cards, make sure they are not all archived.</string>
|
||||
</resources>
|
||||
|
||||
12
app/src/main/res/xml/list_widget_info.xml
Normal file
12
app/src/main/res/xml/list_widget_info.xml
Normal file
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:initialKeyguardLayout="@layout/list_widget"
|
||||
android:initialLayout="@layout/list_widget"
|
||||
android:minWidth="245dp"
|
||||
android:minHeight="54dp"
|
||||
android:previewImage="@drawable/widget_preview"
|
||||
android:resizeMode="horizontal|vertical"
|
||||
android:targetCellWidth="4"
|
||||
android:targetCellHeight="2"
|
||||
android:updatePeriodMillis="86400000"
|
||||
android:widgetCategory="home_screen" />
|
||||
@@ -15,6 +15,7 @@
|
||||
<locale android:name="es" />
|
||||
<locale android:name="es-AR" />
|
||||
<locale android:name="et" />
|
||||
<locale android:name="fa" />
|
||||
<locale android:name="fi" />
|
||||
<locale android:name="fr" />
|
||||
<locale android:name="gl" />
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
|
||||
plugins {
|
||||
id("com.android.application") version "8.10.0" apply false
|
||||
id("com.github.spotbugs") version "5.1.4" apply false
|
||||
id("org.jetbrains.kotlin.android") version "2.1.10" apply false
|
||||
id("com.android.application") version "8.12.0" apply false
|
||||
id("org.jetbrains.kotlin.android") version "2.2.0" apply false
|
||||
}
|
||||
|
||||
allprojects {
|
||||
|
||||
20
build.sh
20
build.sh
@@ -5,19 +5,19 @@ IFS=$'\n\t'
|
||||
### build.sh
|
||||
### Builds Catima the same way rbtlog/IzzyOnDroid does for reproducible builds
|
||||
|
||||
if [ -z "${ANDROID_SDK_ROOT:-}" ]; then
|
||||
echo "ANDROID_SDK_ROOT is not set, setting to $HOME/Android/Sdk";
|
||||
export ANDROID_SDK_ROOT=$HOME/Android/Sdk
|
||||
if [ -z "${ANDROID_HOME:-}" ]; then
|
||||
echo "ANDROID_HOME is not set, setting to $HOME/Android/Sdk";
|
||||
export ANDROID_HOME=$HOME/Android/Sdk
|
||||
fi
|
||||
|
||||
if [ -z "${JAVA_HOME:-}" ]; then
|
||||
echo "JAVA_HOME is not set, setting to Java 17"
|
||||
echo "JAVA_HOME is not set, setting to Java 21"
|
||||
if [ -f "/etc/debian_version" ]; then
|
||||
echo "Debian-based distro, Java 17 is /usr/lib/jvm/java-17-openjdk-amd64"
|
||||
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
|
||||
echo "Debian-based distro, Java 21 is /usr/lib/jvm/java-21-openjdk-amd64"
|
||||
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk-amd64
|
||||
else
|
||||
echo "Not Debian-based, assuming Fedora and setting Java 17 as /usr/lib/jvm/java-17-openjdk"
|
||||
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
|
||||
echo "Not Debian-based, assuming Fedora and setting Java 21 as /usr/lib/jvm/java-21-openjdk"
|
||||
export JAVA_HOME=/usr/lib/jvm/java-21-openjdk
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -39,13 +39,13 @@ else
|
||||
KEYSTORE_ALIAS=catima
|
||||
fi
|
||||
|
||||
apksigner_version="$(ls -1 "$HOME/Android/Sdk/build-tools/" | tail -n 1)"
|
||||
apksigner_version="$(ls -1 "$ANDROID_HOME/build-tools/" | tail -n 1)"
|
||||
|
||||
for flavourDir in $flavourDirs; do
|
||||
flavourName="$(basename "$flavourDir")"
|
||||
echo "Signing $flavourName flavour..."
|
||||
cp "$flavourDir/release/app-$flavourName-release-unsigned.apk" "$flavourDir/release/app-$flavourName-release.apk"
|
||||
"$HOME/Android/Sdk/build-tools/$apksigner_version/apksigner" sign -v --ks "$KEYSTORE" --ks-key-alias "$KEYSTORE_ALIAS" "$flavourDir/release/app-$flavourName-release.apk"
|
||||
"$ANDROID_HOME/build-tools/$apksigner_version/apksigner" sign -v --ks "$KEYSTORE" --ks-key-alias "$KEYSTORE_ALIAS" "$flavourDir/release/app-$flavourName-release.apk"
|
||||
|
||||
echo "Build finished (signed)"
|
||||
echo "Your $flavourName flavour is at $flavourDir/release/app-$flavourName-release.apk"
|
||||
|
||||
@@ -7,7 +7,9 @@ Copylefted libre software (GPLv3+) card management app.
|
||||
[](https://f-droid.org/packages/me.hackerchick.catima/)
|
||||
[](https://play.google.com/store/apps/details?id=me.hackerchick.catima)
|
||||
|
||||

|
||||
[](https://shields.rbtlog.dev/me.hackerchick.catima)
|
||||
|
||||
[](https://github.com/CatimaLoyalty/Android/actions/workflows/android.yml)
|
||||
[](https://hosted.weblate.org/engage/catima/)
|
||||
|
||||
[](https://matrix.to/#/%23catima:matrix.org)
|
||||
@@ -59,7 +61,7 @@ For FidMe you need to select the barcode type for each entry afterwards.
|
||||
|
||||
# Building
|
||||
|
||||
Building can either be done through Android Studio (not reproducible!) or the build.sh script in this repository (reproducible with OpenJDK 17). This script can also sign the build.
|
||||
Building can either be done through Android Studio (not reproducible!) or the build.sh script in this repository (reproducible with OpenJDK 21). This script can also sign the build.
|
||||
|
||||
Build without signing:
|
||||
```
|
||||
|
||||
@@ -10,4 +10,4 @@
|
||||
7. Upload `app/build/outputs/apk/gplay/release/app-gplay-release.apk` to Google Play Open Testing
|
||||
8. Push the version update commit: `git push`
|
||||
9. Create a new release on GitHub and attach the `app/build/outputs/apk/foss/release/app-foss-release.apk` and `SHA256SUMS` files
|
||||
10. After the release has been approved on Google Play Production, update the metadata there: `bundle exec fastlane supply --version_code <VERSION_CODE>`
|
||||
10. When pushing the release to Google Play Production, update the metadata there: `bundle exec fastlane supply --version_code <VERSION_CODE>`
|
||||
|
||||
8
fastlane/metadata/android/ar/changelogs/14.txt
Normal file
8
fastlane/metadata/android/ar/changelogs/14.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
إضافة خيار في القائمة لقفل تدوير الشاشة عند عرض بطاقة. إذا تم تفعيل القفل، فستنتقل الشاشة إلى وضعها "الطبيعي" وسيتم منع أي تدوير إضافي للشاشة.
|
||||
(طلب السحب رقم #128 https://github.com/brarcher/loyalty-card-locker/pull/128)
|
||||
|
||||
إذا تم اختيار بطاقة من الشاشة الرئيسية ولم يمكن تحميلها، فإن التطبيق يتعامل مع الحالة بشكل سليم ويعرض رسالة تنبيه.
|
||||
(طلب السحب رقم #132 https://github.com/brarcher/loyalty-card-locker/pull/132)
|
||||
|
||||
تصحيح حالة عدم العثور على معرفات التخطيط (layout IDs) الخاصة بمعالج التمهيد (intro wizard).
|
||||
(
|
||||
1
fastlane/metadata/android/ar/changelogs/140.txt
Normal file
1
fastlane/metadata/android/ar/changelogs/140.txt
Normal file
@@ -0,0 +1 @@
|
||||
إصلاح التفاف النص في مربع حوار الإضافة
|
||||
4
fastlane/metadata/android/ar/changelogs/141.txt
Normal file
4
fastlane/metadata/android/ar/changelogs/141.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
* تغيير عدد الأعمدة الافتراضي في الشاشات الواسعة إلى 4
|
||||
* السماح بتعديل عدد الأعمدة للوضعين العمودي والأفقي من خلال الإعدادات
|
||||
* الاحتفاظ بفلتر البحث في الشاشة الرئيسية عند تدوير الشاشة أو فتح بطاقة
|
||||
* تحديد الحد الأقصى لطول عرض الملاحظة في الشاشة الرئيسية
|
||||
3
fastlane/metadata/android/ar/changelogs/142.txt
Normal file
3
fastlane/metadata/android/ar/changelogs/142.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
* إضافة دعم لملفات Passbook (.pkpass)
|
||||
* إصلاح استيراد ملفات PDF الشفافة
|
||||
* تحسين عرض الصور المصغرة الشفافة
|
||||
1
fastlane/metadata/android/ar/changelogs/143.txt
Normal file
1
fastlane/metadata/android/ar/changelogs/143.txt
Normal file
@@ -0,0 +1 @@
|
||||
* إصلاح الانهيار عند فتح ملفات pkpass غير الصالحة
|
||||
1
fastlane/metadata/android/ar/changelogs/144.txt
Normal file
1
fastlane/metadata/android/ar/changelogs/144.txt
Normal file
@@ -0,0 +1 @@
|
||||
* تحسين عرض أيقونات الأرشيف/المميزة بنجمة
|
||||
3
fastlane/metadata/android/ar/changelogs/145.txt
Normal file
3
fastlane/metadata/android/ar/changelogs/145.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
* استهداف أندرويد 15
|
||||
* إصلاح مشكلة تغطية لوحة المفاتيح لزر الحفظ في شاشة التعديل
|
||||
* إصلاح عدم اكتشاف بعض ملفات pkpass كملفات pkpass (دعم نوع MIME: application/vnd-com.apple.pkpass)
|
||||
2
fastlane/metadata/android/ar/changelogs/146.txt
Normal file
2
fastlane/metadata/android/ar/changelogs/146.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
* إمكانية فرز البطاقات حسب تاريخ بداية الصلاحية
|
||||
* التراجع مؤقتًا عن استهداف أندرويد 15 والعودة إلى أندرويد 14 لإصلاح بعض مشاكل واجهة المستخدم
|
||||
3
fastlane/metadata/android/ar/changelogs/147.txt
Normal file
3
fastlane/metadata/android/ar/changelogs/147.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
* استهداف نظام أندرويد 15
|
||||
* إصلاح الانهيار عند قراءة ملفات pkpass غير المدعومة
|
||||
* تحسين دعم ملفات pkpass
|
||||
3
fastlane/metadata/android/ar/changelogs/148.txt
Normal file
3
fastlane/metadata/android/ar/changelogs/148.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
* إضافة القدرة على اختيار عرض الرمز الشريطي في عرض الشاشة الكاملة
|
||||
* إزالة الاستيراد المربك من وظيفة التطبيق
|
||||
* إصلاحات متنوعة في المسح
|
||||
1
fastlane/metadata/android/ar/changelogs/149.txt
Normal file
1
fastlane/metadata/android/ar/changelogs/149.txt
Normal file
@@ -0,0 +1 @@
|
||||
- تحديثات التبعية و الترجمة
|
||||
2
fastlane/metadata/android/ar/changelogs/15.txt
Normal file
2
fastlane/metadata/android/ar/changelogs/15.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
* إضافة دعم للاختصارات في التطبيق (Android 7.1+)، حيث ستظهر أكثر البطاقات استخدامًا كاختصارات. (pull #145 ([https://github.com/brarcher/loyalty-card-locker/pull/145](https://github.com/brarcher/loyalty-card-locker/pull/145)))
|
||||
* إضافة عنصر واجهة مستخدم يعمل مثل اختصار التطبيق المثبت، لدعم الأجهزة التي تعمل بنظام Android أقل من 7.1. (pull #142 ([https://github.com/brarcher/loyalty-card-locker/pull/142](https://github.com/brarcher/loyalty-card-locker/pull/142)))
|
||||
5
fastlane/metadata/android/ar/changelogs/16.txt
Normal file
5
fastlane/metadata/android/ar/changelogs/16.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
* إضافة دعم لإضافة اختصارات إلى الشاشة الرئيسية عند إضافة أو تعديل بطاقة. (pull #155 ([https://github.com/brarcher/loyalty-card-locker/pull/155](https://github.com/brarcher/loyalty-card-locker/pull/155)))
|
||||
* إزالة عنصر واجهة المستخدم، لأنه كان بديلاً غير مناسب للاختصارات. (pull #155 ([https://github.com/brarcher/loyalty-card-locker/pull/155](https://github.com/brarcher/loyalty-card-locker/pull/155)))
|
||||
* إصلاح مشكلة تصدير النسخ الاحتياطية على Android 7+. (pull #153 ([https://github.com/brarcher/loyalty-card-locker/pull/153](https://github.com/brarcher/loyalty-card-locker/pull/153)))
|
||||
* الإبلاغ عن نوع MIME أكثر دقة عند تصدير بيانات النسخة الاحتياطية. (pull #156 ([https://github.com/brarcher/loyalty-card-locker/pull/156](https://github.com/brarcher/loyalty-card-locker/pull/156)))
|
||||
* إصلاح الخطأ الذي كان يمنع تعديل بطاقة. (pull #155 ([https://github.com/brarcher/loyalty-card-locker/pull/155](https://github.com/brarcher/loyalty-card-locker/pull/155)))
|
||||
2
fastlane/metadata/android/ar/changelogs/17.txt
Normal file
2
fastlane/metadata/android/ar/changelogs/17.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
* إضافة دعم لإضافة اختصارات بطاقات الولاء من المشغّل / الشاشة الرئيسية. (pull #161 ([https://github.com/brarcher/loyalty-card-locker/pull/161](https://github.com/brarcher/loyalty-card-locker/pull/161)))
|
||||
* إزالة الدعم لإضافة اختصارات بطاقات الولاء من التطبيق نفسه. هذا يزيل الحاجة إلى إذن الاختصار. (pull #163 ([https://github.com/brarcher/loyalty-card-locker/pull/163](https://github.com/brarcher/loyalty-card-locker/pull/163)))
|
||||
2
fastlane/metadata/android/ar/changelogs/18.txt
Normal file
2
fastlane/metadata/android/ar/changelogs/18.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
* إصلاح مشكلة في Android SDK 24+ حيث كان استخدام خيار استيراد مُختار الملفات يتسبب في تعطل التطبيق. (pull #170 ([https://github.com/brarcher/loyalty-card-locker/pull/170](https://github.com/brarcher/loyalty-card-locker/pull/170)))
|
||||
* أيقونة جديدة ونظام ألوان جديد. (pull #171 ([https://github.com/brarcher/loyalty-card-locker/pull/171](https://github.com/brarcher/loyalty-card-locker/pull/171)))
|
||||
3
fastlane/metadata/android/ar/changelogs/19.txt
Normal file
3
fastlane/metadata/android/ar/changelogs/19.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
* إصلاح تعطل التطبيق عند استيراد بعض أنواع ملفات CSV التالفة. (pull #177 ([https://github.com/brarcher/loyalty-card-locker/pull/177](https://github.com/brarcher/loyalty-card-locker/pull/177)))
|
||||
* إصلاح استيراد النسخ الاحتياطية مباشرة من نظام الملفات. (pull #180 ([https://github.com/brarcher/loyalty-card-locker/pull/180](https://github.com/brarcher/loyalty-card-locker/pull/180)))
|
||||
* إصلاح استيراد النسخ الاحتياطية من بعض أنواع مقدمي المحتوى. (pull #179 ([https://github.com/brarcher/loyalty-card-locker/pull/179](https://github.com/brarcher/loyalty-card-locker/pull/179)))
|
||||
3
fastlane/metadata/android/ar/changelogs/2.txt
Normal file
3
fastlane/metadata/android/ar/changelogs/2.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
* ترجمات إيطالية
|
||||
* دعم لجميع أنواع الباركود أحادية الأبعاد (كان في البداية يتم دعم باركود المنتجات فقط)
|
||||
* إضافة إذن الكاميرا المطلوب، الذي كان مفقودًا في البداية
|
||||
1
fastlane/metadata/android/ar/changelogs/20.txt
Normal file
1
fastlane/metadata/android/ar/changelogs/20.txt
Normal file
@@ -0,0 +1 @@
|
||||
* حل مؤقت لمشكلة التعطل أثناء التثبيت على بعض إصدارات أندرويد (من المحتمل أن تكون أندرويد 5 وما دون).
|
||||
2
fastlane/metadata/android/ar/changelogs/21.txt
Normal file
2
fastlane/metadata/android/ar/changelogs/21.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
* تحسين تنسيق عرض قائمة البطاقات. (طلب السحب رقم 188: [الرابط](https://github.com/brarcher/loyalty-card-locker/pull/188))
|
||||
* تحسين تنسيق عرض البطاقة عند فتحها. (طلب السحب رقم 190: [الرابط](https://github.com/brarcher/loyalty-card-locker/pull/190))
|
||||
1
fastlane/metadata/android/ar/changelogs/22.txt
Normal file
1
fastlane/metadata/android/ar/changelogs/22.txt
Normal file
@@ -0,0 +1 @@
|
||||
* تغييرات في عرض البطاقة لعرض الملاحظة، والسماح لمعرّف البطاقة بأن يمتد لعدة أسطر، وعرض اسم المتجر. (طلب السحب رقم 197: [الرابط](https://github.com/brarcher/loyalty-card-locker/pull/197))
|
||||
3
fastlane/metadata/android/ar/changelogs/23.txt
Normal file
3
fastlane/metadata/android/ar/changelogs/23.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
* إضافة مساحة هادئة في بداية ونهاية الرموز الشريطية (الباركود). (طلب السحب رقم 200: [الرابط](https://github.com/brarcher/loyalty-card-locker/pull/200))
|
||||
* إضافة خيارات لتخصيص ألوان خط و خلفية اسم المتجر. (طلب السحب رقم 203: [الرابط](https://github.com/brarcher/loyalty-card-locker/pull/203))
|
||||
* إضافة خيارات لتعديل حجم الخط في صفحة قائمة البطاقات وصفحة البطاقة المفردة. (طلب السحب رقم 204: [الرابط](https://github.com/brarcher/loyalty-card-locker/pull/204))
|
||||
5
fastlane/metadata/android/ar/changelogs/24.txt
Normal file
5
fastlane/metadata/android/ar/changelogs/24.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
* تحديث الترجمات. (طلب السحب رقم 208: [الرابط](https://github.com/brarcher/loyalty-card-locker/pull/208))
|
||||
* تحديثات على عرض الرموز الشريطية (الباركود): (طلب السحب رقم 209: [الرابط](https://github.com/brarcher/loyalty-card-locker/pull/209))
|
||||
|
||||
* إعادة تحميل واجهة عرض البطاقة عند تدوير الشاشة، لضمان أن يكون حجم صورة الباركود صحيحًا.
|
||||
* عرض الرموز الشريطية أحادية البُعد (1D) في مساحة أكبر، مما يسمح لها بملء الشاشة بشكل أفضل.
|
||||
2
fastlane/metadata/android/ar/changelogs/25.txt
Normal file
2
fastlane/metadata/android/ar/changelogs/25.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
* تقليل المساحة في الرأس (Header) عند عرض بطاقة. (طلب السحب رقم 213: [الرابط](https://github.com/brarcher/loyalty-card-locker/pull/213))
|
||||
* تعطيل الصوت (الصفير) عند مسح رمز شريطي (باركود). (طلب السحب رقم 216: [الرابط](https://github.com/brarcher/loyalty-card-locker/pull/216))
|
||||
1
fastlane/metadata/android/ar/changelogs/26.txt
Normal file
1
fastlane/metadata/android/ar/changelogs/26.txt
Normal file
@@ -0,0 +1 @@
|
||||
* منع تعطل التطبيق عند نفاد الذاكرة أثناء عرض رمز شريطي (باركود). (طلب السحب رقم 219: [الرابط](https://github.com/brarcher/loyalty-card-locker/pull/219))
|
||||
2
fastlane/metadata/android/ar/changelogs/27.txt
Normal file
2
fastlane/metadata/android/ar/changelogs/27.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- تقليل الحد الأدنى لإصدار مجموعة أدوات مطوري البرامج من 17 إلى 15. (طلب سحب رقم 226 (https://github.com/brarcher/loyalty-card-locker/pull/226))
|
||||
- إزالة إستخدام مكتبة apache الموروثة, أستخدمت فقط في مرحلة أختبار الوحدة ولم تعد مطلوبة.(طلب سحب رقم 225 (https://github.com/brarcher/loyalty-card-locker/pull/225))
|
||||
5
fastlane/metadata/android/ar/changelogs/28.txt
Normal file
5
fastlane/metadata/android/ar/changelogs/28.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
- أُضيفت ترجمات
|
||||
- اللغة البولندية (طلب سحب رقم 232 (https://github.com/brarcher/loyalty-card-locker/pull/232))
|
||||
- اللغة الإسبانية (طلب سحب رقم 232 (https://github.com/brarcher/loyalty-card-locker/pull/232))
|
||||
- اللغة السلوفاكية (طلب سحب رقم 232 (https://github.com/brarcher/loyalty-card-locker/pull/232))
|
||||
- حدثت الترجمات (طلب سحب رقم 239 (https://github.com/brarcher/loyalty-card-locker/pull/239))
|
||||
2
fastlane/metadata/android/ar/changelogs/29.txt
Normal file
2
fastlane/metadata/android/ar/changelogs/29.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- إصلاح الترجمة الإسبانية (طلب سحب رقم 224 (https://github.com/brarcher/loyalty-card-locker/pull/244))
|
||||
- تحديث الترجمات (طلب سحب رقم 224 (https://github.com/brarcher/loyalty-card-locker/pull/244))
|
||||
14
fastlane/metadata/android/ar/changelogs/3.txt
Normal file
14
fastlane/metadata/android/ar/changelogs/3.txt
Normal file
@@ -0,0 +1,14 @@
|
||||
- الآن رسمياً ندعم الباركودات التالية ذات أحادية الأبعاد و ثنائية الأبعاد:
|
||||
- AZTEC
|
||||
- CODABAR
|
||||
- CODE_39
|
||||
- CODE_128
|
||||
- DATA_MATRIX
|
||||
- EAN_8
|
||||
- EAN_13
|
||||
- ITF
|
||||
- PDF_417
|
||||
- QR_CODE
|
||||
- UPC_A
|
||||
|
||||
- الباركودات المُوَلَّدة بواسطة البرنامج الآن تظهر بشكل أكبر من أجل تسهيل عملية المسح بإستخدام جهاز المسح (القارئ الضوئي)
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 22 KiB |
@@ -1 +1 @@
|
||||
Catima
|
||||
كاتيما - محفظة بطاقة الولاء
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
- Přidána možnost výběru šířky čárového kódu v celoobrazovkovém zobrazení
|
||||
- Odstraněna matoucí funkce importu z aplikace
|
||||
- Různé opravy skenování
|
||||
- Opraven pád při načtení souboru pkpass bez čárového kódu
|
||||
|
||||
1
fastlane/metadata/android/cs-CZ/changelogs/149.txt
Normal file
1
fastlane/metadata/android/cs-CZ/changelogs/149.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Aktualizace závislostí a překladů
|
||||
2
fastlane/metadata/android/cs-CZ/changelogs/150.txt
Normal file
2
fastlane/metadata/android/cs-CZ/changelogs/150.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Přidán widget zobrazující všechny nearchivované karty
|
||||
- Zabránění překrytí tlačítka uložení klávesnicí na stránkách úpravy a skupin
|
||||
@@ -1,3 +1,4 @@
|
||||
- Die Barcodebreite kann in der Vollbildansicht eingestellt werden
|
||||
- Verwirrende Importfunktion „Andere App verwenden“ entfernt
|
||||
- Verschiedene Korrekturen bzgl. „Barcode scannen“
|
||||
- Verhindert Absturz beim Laden einer pkpass-Datei ohne Barcode
|
||||
|
||||
1
fastlane/metadata/android/de-DE/changelogs/149.txt
Normal file
1
fastlane/metadata/android/de-DE/changelogs/149.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Übersetzungs- und Abhängigkeitsaktualisierungen
|
||||
2
fastlane/metadata/android/de-DE/changelogs/150.txt
Normal file
2
fastlane/metadata/android/de-DE/changelogs/150.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Widget, das alle nichtarchvierten Karten anzeigt, hinzugefügt
|
||||
- Beugt dem Verdecken der „Speichern“-Taste durch die Tastatur in der Bearbeitungs- bzw. Gruppenansicht vor
|
||||
1
fastlane/metadata/android/en-US/changelogs/149.txt
Normal file
1
fastlane/metadata/android/en-US/changelogs/149.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Dependency and translation updates
|
||||
2
fastlane/metadata/android/en-US/changelogs/150.txt
Normal file
2
fastlane/metadata/android/en-US/changelogs/150.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Add a widget showing all non-archived cards
|
||||
- Prevent the keyboard from overlapping the save button in edit and group screens
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user