mirror of
https://github.com/CatimaLoyalty/Android.git
synced 2026-01-23 22:38:04 -05:00
Compare commits
138 Commits
v2.41.4
...
revert-298
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
641649d56c | ||
|
|
4518dadcf6 | ||
|
|
f07b7412f5 | ||
|
|
474dc0e5d6 | ||
|
|
202cb91ac3 | ||
|
|
4e2672d9ae | ||
|
|
b281bdf392 | ||
|
|
168245c3c1 | ||
|
|
6d1856ceba | ||
|
|
dc58e89a0d | ||
|
|
16f4866c38 | ||
|
|
93492828dc | ||
|
|
e6fb6fd95b | ||
|
|
57b2f308da | ||
|
|
93d259b1d8 | ||
|
|
daf447cbdd | ||
|
|
9e438e1498 | ||
|
|
ce213356b9 | ||
|
|
f5fa11dcc3 | ||
|
|
841902bcaf | ||
|
|
3de83b6745 | ||
|
|
18ae00f5a4 | ||
|
|
8639bf98f4 | ||
|
|
543c5f9b23 | ||
|
|
102ba18a05 | ||
|
|
54e0ed3f82 | ||
|
|
d86b0043ff | ||
|
|
1a214e6526 | ||
|
|
af7cf16786 | ||
|
|
5ac2405834 | ||
|
|
08325b8528 | ||
|
|
6573c5ea80 | ||
|
|
77ca8e7069 | ||
|
|
3dbd99f052 | ||
|
|
4d34794957 | ||
|
|
8c99189d79 | ||
|
|
4dae3cb826 | ||
|
|
52d4f63418 | ||
|
|
76e3ba2e4a | ||
|
|
1bea439fa0 | ||
|
|
36459d62b6 | ||
|
|
3699a24809 | ||
|
|
fc8691470c | ||
|
|
a03be85474 | ||
|
|
701964bc46 | ||
|
|
18604ba8bd | ||
|
|
b6b9b7c90e | ||
|
|
5aa7217c1b | ||
|
|
7fb5c96322 | ||
|
|
3d9729f992 | ||
|
|
8c61e32798 | ||
|
|
0bb38e4fce | ||
|
|
9eb9e9df25 | ||
|
|
e8d7857044 | ||
|
|
2c782fba62 | ||
|
|
31cd7f009c | ||
|
|
068c0307af | ||
|
|
54c885d1cf | ||
|
|
bbb434e2b5 | ||
|
|
bc879f847d | ||
|
|
1a474e9d22 | ||
|
|
cbb2453f6b | ||
|
|
e372d23b6e | ||
|
|
a3507d5975 | ||
|
|
c4f28c12f8 | ||
|
|
69939d5957 | ||
|
|
c2b0fda80a | ||
|
|
b62a0b0f4f | ||
|
|
5f9376ca63 | ||
|
|
f1087573dc | ||
|
|
62f188eb72 | ||
|
|
cdfa3e6779 | ||
|
|
f64406f70f | ||
|
|
cabae400e6 | ||
|
|
d5b3796ae9 | ||
|
|
442c7c28d4 | ||
|
|
e7fd16dd45 | ||
|
|
868d065d5d | ||
|
|
185b0ff2df | ||
|
|
e60b1cc26a | ||
|
|
5cecad9088 | ||
|
|
f26799c65c | ||
|
|
6046b48285 | ||
|
|
4bf925f1b1 | ||
|
|
fa55a8b354 | ||
|
|
38a8f76b88 | ||
|
|
dc574c0569 | ||
|
|
c52791e029 | ||
|
|
37c31d8a0f | ||
|
|
4e99654d1d | ||
|
|
a9a84ffdfc | ||
|
|
9bb51da3c1 | ||
|
|
3f73224d97 | ||
|
|
b79c62341e | ||
|
|
33a47f2ed1 | ||
|
|
3177e91e58 | ||
|
|
3ec4ffcab2 | ||
|
|
2f8449bb04 | ||
|
|
011f3edcbc | ||
|
|
abb6762a4f | ||
|
|
382a28c983 | ||
|
|
c7a8d343b5 | ||
|
|
bc21a53d44 | ||
|
|
d3bdad56e4 | ||
|
|
c9a2a4acbb | ||
|
|
eaf30e6c2d | ||
|
|
5979160a6a | ||
|
|
0181fde243 | ||
|
|
a5599dc673 | ||
|
|
25290ae202 | ||
|
|
4d36812cd6 | ||
|
|
a9f402cd6d | ||
|
|
2798ba7648 | ||
|
|
349558e62e | ||
|
|
91ca2a220e | ||
|
|
93104e4b40 | ||
|
|
d8adcdd1e5 | ||
|
|
c4b210a8db | ||
|
|
d54323fde0 | ||
|
|
c02be50242 | ||
|
|
a883ce0f43 | ||
|
|
ace353d71d | ||
|
|
18dbb24375 | ||
|
|
78daf54716 | ||
|
|
ee6541ba54 | ||
|
|
e4e9fe05e1 | ||
|
|
9d4035c94e | ||
|
|
293d38bd09 | ||
|
|
28be05600b | ||
|
|
03649820ce | ||
|
|
93515d2f88 | ||
|
|
d7dc70c0df | ||
|
|
ce0738782a | ||
|
|
df738b9c1d | ||
|
|
8bf0033d22 | ||
|
|
01e08e4928 | ||
|
|
90aee54a3c | ||
|
|
b7c42b5c8c |
4
.github/workflows/android.yml
vendored
4
.github/workflows/android.yml
vendored
@@ -50,10 +50,10 @@ jobs:
|
||||
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
|
||||
sudo udevadm control --reload-rules
|
||||
sudo udevadm trigger --name-match=kvm
|
||||
- name: Run instrumented tests (API 21)
|
||||
- name: Run instrumented tests (API 23)
|
||||
uses: ReactiveCircus/android-emulator-runner@v2
|
||||
with:
|
||||
api-level: 21
|
||||
api-level: 23
|
||||
arch: x86_64
|
||||
script: ./gradlew connected${{ matrix.flavor }}DebugAndroidTest
|
||||
- name: Run instrumented tests (API 35)
|
||||
|
||||
3
.github/workflows/update-gradle-wrapper.yml
vendored
3
.github/workflows/update-gradle-wrapper.yml
vendored
@@ -14,6 +14,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
with:
|
||||
persist-credentials: false
|
||||
- name: Update Gradle Wrapper
|
||||
uses: gradle-update/update-gradle-wrapper-action@v2
|
||||
|
||||
15
CHANGELOG.md
15
CHANGELOG.md
@@ -1,5 +1,20 @@
|
||||
# Changelog
|
||||
|
||||
## v2.41.6 - 163 (2026-01-23)
|
||||
|
||||
Android 5.0 and 5.1 are no longer supported starting with this release. If you want to use Catima on these versions, please use version 2.41.5.
|
||||
|
||||
- Auto-detect URLs in card ID and make the clickable in card ID details pop-up
|
||||
- Fix barcode selector activity showing white squares instead of barcodes
|
||||
|
||||
## v2.41.5 - 162 (2026-01-15)
|
||||
|
||||
- Fix list widget sometimes opening wrong card
|
||||
- Fix several bugs with shortcut handling
|
||||
- Fix About activity not using pure black title bar in OLED mode
|
||||
- Fully remove automatic barcode encoding detection
|
||||
- Expose barcode encoding through ContentProvider (used by Gadgetbridge)
|
||||
|
||||
## v2.41.4 - 161 (2026-01-04)
|
||||
|
||||
- Disable automatic barcode encoding detection for now (breaks too many cards)
|
||||
|
||||
@@ -17,10 +17,10 @@ android {
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "me.hackerchick.catima"
|
||||
minSdk = 21
|
||||
minSdk = 23
|
||||
targetSdk = 36
|
||||
versionCode = 161
|
||||
versionName = "2.41.4"
|
||||
versionCode = 163
|
||||
versionName = "2.41.6"
|
||||
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
multiDexEnabled = true
|
||||
|
||||
@@ -11,6 +11,7 @@ import android.view.View;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.google.zxing.EncodeHintType;
|
||||
@@ -58,7 +59,7 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
|
||||
|
||||
BarcodeImageWriterTask(
|
||||
Context context, ImageView imageView, String cardIdString,
|
||||
CatimaBarcode barcodeFormat, @Nullable Charset barcodeEncoding, TextView textView,
|
||||
CatimaBarcode barcodeFormat, @NonNull Charset barcodeEncoding, TextView textView,
|
||||
boolean showFallback, BarcodeImageWriterResultCallback callback, boolean roundCornerPadding, boolean isFullscreen
|
||||
) {
|
||||
mContext = context;
|
||||
@@ -185,26 +186,6 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
|
||||
MultiFormatWriter writer = new MultiFormatWriter();
|
||||
|
||||
Map<EncodeHintType, Object> encodeHints = new ArrayMap<>();
|
||||
Charset chosenEncoding = encoding;
|
||||
// Use charset if defined or guess otherwise
|
||||
if (chosenEncoding != null) {
|
||||
Log.d(TAG, "Encoding explicitly set, " + chosenEncoding.name());
|
||||
} else {
|
||||
// FIXME: Guessing encoding using zxing causes too many false positives and breaks the Deutschlandticket, a common public transport ticket in Germany
|
||||
// See https://github.com/CatimaLoyalty/Android/issues/2932
|
||||
//
|
||||
// So, for now, we just force ISO in the "guessing" path until we figure out a better way to guess
|
||||
// The previous code is commented before, DO NOT UNCOMMENT, IT IS BROKEN
|
||||
//
|
||||
// chosenEncoding = Charset.forName(StringUtils.guessEncoding(cardId.getBytes(), new ArrayMap<>()));
|
||||
// Log.d(TAG, "Guessed encoding: " + chosenEncoding.name());
|
||||
|
||||
// FIXME: Figure out a good way to automatically determine the best format to use, to not break UTF-8 barcodes
|
||||
// However, make sure to NOT break the Deutschlandticket!
|
||||
chosenEncoding = StandardCharsets.ISO_8859_1;
|
||||
Log.w(TAG, "The encoding guessing code path is temporarily disabled due to it breaking Deutschlandticket. Forcing ISO-8859-1...");
|
||||
}
|
||||
|
||||
// We don't want to pass the ISO-8859-1 as an encoding hint as zxing may add this as ECI
|
||||
// inside the barcode.
|
||||
//
|
||||
@@ -218,9 +199,9 @@ public class BarcodeImageWriterTask implements CompatCallable<Bitmap> {
|
||||
// cards without encode hints have never caused any issues (unless they were UTF-8), yet
|
||||
// just days after passing ISO-8859-1 as CHARACTER_SET in the encode hints already 2
|
||||
// scan failures were reported (one for QR, one for Aztec).
|
||||
if (!Objects.equals(chosenEncoding.name(), StandardCharsets.ISO_8859_1.name())) {
|
||||
if (!Objects.equals(encoding.name(), StandardCharsets.ISO_8859_1.name())) {
|
||||
Log.d(TAG, "Chosen encoding is not ISO_8859_1, so passing as encoding hint");
|
||||
encodeHints.put(EncodeHintType.CHARACTER_SET, chosenEncoding);
|
||||
encodeHints.put(EncodeHintType.CHARACTER_SET, encoding);
|
||||
} else {
|
||||
Log.d(TAG, "Not passing encoding as encoding hint");
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import protect.card_locker.async.TaskHandler;
|
||||
@@ -74,6 +75,9 @@ public class BarcodeSelectorAdapter extends ArrayAdapter<CatimaBarcodeWithValue>
|
||||
return viewHolder.image.getTag() != null && (boolean) viewHolder.image.getTag();
|
||||
}
|
||||
|
||||
// FIXME: The examples in the selector activity are always rendering using ISO-8859-1, even if UTF-8 is the selected type
|
||||
// This needs some refactoring to properly retrieve the barcode encoding when rendering an active barcode
|
||||
// This is the case for example when editing an active card, pressing the "Edit barcode" button, then "More options" and then "Enter the barcode manually"
|
||||
private void createBarcodeOption(final ImageView image, final String formatType, final String cardId, final TextView text) {
|
||||
final CatimaBarcode format = CatimaBarcode.fromName(formatType);
|
||||
|
||||
@@ -92,13 +96,13 @@ public class BarcodeSelectorAdapter extends ArrayAdapter<CatimaBarcodeWithValue>
|
||||
|
||||
Log.d(TAG, "Generating barcode for type " + formatType);
|
||||
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, null, text, true, null, true, false);
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, StandardCharsets.ISO_8859_1, text, true, null, true, false);
|
||||
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
Log.d(TAG, "Generating barcode for type " + formatType);
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, null, text, true, null, true, false);
|
||||
BarcodeImageWriterTask barcodeWriter = new BarcodeImageWriterTask(getContext(), image, cardId, format, StandardCharsets.ISO_8859_1, text, true, null, true, false);
|
||||
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,15 +38,10 @@ public class CatimaAppCompatActivity extends AppCompatActivity {
|
||||
Window window = getWindow();
|
||||
if (window != null) {
|
||||
boolean darkMode = Utils.isDarkModeEnabled(this);
|
||||
if (Build.VERSION.SDK_INT >= 23) {
|
||||
View decorView = window.getDecorView();
|
||||
WindowInsetsControllerCompat wic = new WindowInsetsControllerCompat(window, decorView);
|
||||
wic.setAppearanceLightStatusBars(!darkMode);
|
||||
window.setStatusBarColor(Color.TRANSPARENT);
|
||||
} else {
|
||||
// icons are always white back then
|
||||
window.setStatusBarColor(darkMode ? Color.TRANSPARENT : Color.argb(127, 0, 0, 0));
|
||||
}
|
||||
View decorView = window.getDecorView();
|
||||
WindowInsetsControllerCompat wic = new WindowInsetsControllerCompat(window, decorView);
|
||||
wic.setAppearanceLightStatusBars(!darkMode);
|
||||
window.setStatusBarColor(Color.TRANSPARENT);
|
||||
}
|
||||
// XXX android 9 and below has a nasty rendering bug if the theme was patched earlier
|
||||
Utils.postPatchColors(this);
|
||||
@@ -66,7 +61,4 @@ public class CatimaAppCompatActivity extends AppCompatActivity {
|
||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||
}
|
||||
}
|
||||
|
||||
public void onMockedRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ import android.database.sqlite.SQLiteOpenHelper;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
@@ -26,7 +27,7 @@ import java.util.Set;
|
||||
public class DBHelper extends SQLiteOpenHelper {
|
||||
public static final String DATABASE_NAME = "Catima.db";
|
||||
public static final int ORIGINAL_DATABASE_VERSION = 1;
|
||||
public static final int DATABASE_VERSION = 19;
|
||||
public static final int DATABASE_VERSION = 20;
|
||||
|
||||
// NB: changing these values requires a migration
|
||||
public static final int DEFAULT_ZOOM_LEVEL = 100;
|
||||
@@ -116,7 +117,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
LoyaltyCardDbIds.CARD_ID + " TEXT not null," +
|
||||
LoyaltyCardDbIds.BARCODE_ID + " TEXT," +
|
||||
LoyaltyCardDbIds.BARCODE_TYPE + " TEXT," +
|
||||
LoyaltyCardDbIds.BARCODE_ENCODING + " TEXT," +
|
||||
LoyaltyCardDbIds.BARCODE_ENCODING + " TEXT not null," +
|
||||
LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0'," +
|
||||
LoyaltyCardDbIds.LAST_USED + " INTEGER DEFAULT '0', " +
|
||||
LoyaltyCardDbIds.ZOOM_LEVEL + " INTEGER DEFAULT '" + DEFAULT_ZOOM_LEVEL + "', " +
|
||||
@@ -356,6 +357,144 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
if (oldVersion < 19 && newVersion >= 19) {
|
||||
db.execSQL("UPDATE " + LoyaltyCardDbIds.TABLE + " SET " + LoyaltyCardDbIds.BARCODE_ENCODING + " = 'ISO-8859-1' WHERE " + LoyaltyCardDbIds.BARCODE_ENCODING + " IS NULL");
|
||||
}
|
||||
|
||||
if (oldVersion < 20 && newVersion >= 20) {
|
||||
// SQLite doesn't support modify column
|
||||
// So we need to create a temp column to make barcode encoding non-nullable
|
||||
// https://www.sqlite.org/faq.html#q11
|
||||
db.beginTransaction();
|
||||
|
||||
// First migrate all cards to ISO-8859-1
|
||||
db.execSQL("UPDATE " + LoyaltyCardDbIds.TABLE + " SET " + LoyaltyCardDbIds.BARCODE_ENCODING + " = 'ISO-8859-1' WHERE " + LoyaltyCardDbIds.BARCODE_ENCODING + " IS NULL");
|
||||
|
||||
// create temp table
|
||||
db.execSQL("CREATE TEMPORARY TABLE tmp (" +
|
||||
LoyaltyCardDbIds.ID + " INTEGER primary key autoincrement," +
|
||||
LoyaltyCardDbIds.STORE + " TEXT not null," +
|
||||
LoyaltyCardDbIds.NOTE + " TEXT not null," +
|
||||
LoyaltyCardDbIds.VALID_FROM + " INTEGER," +
|
||||
LoyaltyCardDbIds.EXPIRY + " INTEGER," +
|
||||
LoyaltyCardDbIds.BALANCE + " TEXT not null DEFAULT '0'," +
|
||||
LoyaltyCardDbIds.BALANCE_TYPE + " TEXT," +
|
||||
LoyaltyCardDbIds.HEADER_COLOR + " INTEGER," +
|
||||
LoyaltyCardDbIds.CARD_ID + " TEXT not null," +
|
||||
LoyaltyCardDbIds.BARCODE_ID + " TEXT," +
|
||||
LoyaltyCardDbIds.BARCODE_TYPE + " TEXT," +
|
||||
LoyaltyCardDbIds.BARCODE_ENCODING + " TEXT not null," +
|
||||
LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0'," +
|
||||
LoyaltyCardDbIds.LAST_USED + " INTEGER DEFAULT '0', " +
|
||||
LoyaltyCardDbIds.ZOOM_LEVEL + " INTEGER DEFAULT '" + DEFAULT_ZOOM_LEVEL + "', " +
|
||||
LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH + " INTEGER DEFAULT '" + DEFAULT_ZOOM_LEVEL_WIDTH + "', " +
|
||||
LoyaltyCardDbIds.ARCHIVE_STATUS + " INTEGER DEFAULT '0' )");
|
||||
|
||||
// Insert all cards into temp table
|
||||
db.execSQL("INSERT INTO tmp (" +
|
||||
LoyaltyCardDbIds.ID + " ," +
|
||||
LoyaltyCardDbIds.STORE + " ," +
|
||||
LoyaltyCardDbIds.NOTE + " ," +
|
||||
LoyaltyCardDbIds.VALID_FROM + " , " +
|
||||
LoyaltyCardDbIds.EXPIRY + " ," +
|
||||
LoyaltyCardDbIds.BALANCE + " ," +
|
||||
LoyaltyCardDbIds.BALANCE_TYPE + " ," +
|
||||
LoyaltyCardDbIds.HEADER_COLOR + " ," +
|
||||
LoyaltyCardDbIds.CARD_ID + " ," +
|
||||
LoyaltyCardDbIds.BARCODE_ID + " ," +
|
||||
LoyaltyCardDbIds.BARCODE_TYPE + " ," +
|
||||
LoyaltyCardDbIds.BARCODE_ENCODING + " ," +
|
||||
LoyaltyCardDbIds.STAR_STATUS + " ," +
|
||||
LoyaltyCardDbIds.LAST_USED + " ," +
|
||||
LoyaltyCardDbIds.ZOOM_LEVEL + " ," +
|
||||
LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH + " ," +
|
||||
LoyaltyCardDbIds.ARCHIVE_STATUS + ")" +
|
||||
" SELECT " +
|
||||
LoyaltyCardDbIds.ID + " ," +
|
||||
LoyaltyCardDbIds.STORE + " ," +
|
||||
LoyaltyCardDbIds.NOTE + " ," +
|
||||
LoyaltyCardDbIds.VALID_FROM + " ," +
|
||||
LoyaltyCardDbIds.EXPIRY + " ," +
|
||||
LoyaltyCardDbIds.BALANCE + " ," +
|
||||
LoyaltyCardDbIds.BALANCE_TYPE + " ," +
|
||||
LoyaltyCardDbIds.HEADER_COLOR + " ," +
|
||||
LoyaltyCardDbIds.CARD_ID + " ," +
|
||||
LoyaltyCardDbIds.BARCODE_ID + " ," +
|
||||
LoyaltyCardDbIds.BARCODE_TYPE + " ," +
|
||||
LoyaltyCardDbIds.BARCODE_ENCODING + " ," +
|
||||
LoyaltyCardDbIds.STAR_STATUS + " ," +
|
||||
LoyaltyCardDbIds.LAST_USED + " ," +
|
||||
LoyaltyCardDbIds.ZOOM_LEVEL + " ," +
|
||||
LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH + " ," +
|
||||
LoyaltyCardDbIds.ARCHIVE_STATUS +
|
||||
" FROM " + LoyaltyCardDbIds.TABLE);
|
||||
|
||||
// Drop old table
|
||||
db.execSQL("DROP TABLE " + LoyaltyCardDbIds.TABLE);
|
||||
|
||||
// Create table again
|
||||
db.execSQL("CREATE TABLE " + LoyaltyCardDbIds.TABLE + "(" +
|
||||
LoyaltyCardDbIds.ID + " INTEGER primary key autoincrement," +
|
||||
LoyaltyCardDbIds.STORE + " TEXT not null," +
|
||||
LoyaltyCardDbIds.NOTE + " TEXT not null," +
|
||||
LoyaltyCardDbIds.VALID_FROM + " INTEGER," +
|
||||
LoyaltyCardDbIds.EXPIRY + " INTEGER," +
|
||||
LoyaltyCardDbIds.BALANCE + " TEXT not null DEFAULT '0'," +
|
||||
LoyaltyCardDbIds.BALANCE_TYPE + " TEXT," +
|
||||
LoyaltyCardDbIds.HEADER_COLOR + " INTEGER," +
|
||||
LoyaltyCardDbIds.CARD_ID + " TEXT not null," +
|
||||
LoyaltyCardDbIds.BARCODE_ID + " TEXT," +
|
||||
LoyaltyCardDbIds.BARCODE_TYPE + " TEXT," +
|
||||
LoyaltyCardDbIds.BARCODE_ENCODING + " TEXT not null," +
|
||||
LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0'," +
|
||||
LoyaltyCardDbIds.LAST_USED + " INTEGER DEFAULT '0', " +
|
||||
LoyaltyCardDbIds.ZOOM_LEVEL + " INTEGER DEFAULT '" + DEFAULT_ZOOM_LEVEL + "', " +
|
||||
LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH + " INTEGER DEFAULT '" + DEFAULT_ZOOM_LEVEL_WIDTH + "', " +
|
||||
LoyaltyCardDbIds.ARCHIVE_STATUS + " INTEGER DEFAULT '0' )");
|
||||
|
||||
// Insert all temp cards into newly created table
|
||||
db.execSQL("INSERT INTO " + LoyaltyCardDbIds.TABLE + "(" +
|
||||
LoyaltyCardDbIds.ID + " ," +
|
||||
LoyaltyCardDbIds.STORE + " ," +
|
||||
LoyaltyCardDbIds.NOTE + " ," +
|
||||
LoyaltyCardDbIds.VALID_FROM + " , " +
|
||||
LoyaltyCardDbIds.EXPIRY + " ," +
|
||||
LoyaltyCardDbIds.BALANCE + " ," +
|
||||
LoyaltyCardDbIds.BALANCE_TYPE + " ," +
|
||||
LoyaltyCardDbIds.HEADER_COLOR + " ," +
|
||||
LoyaltyCardDbIds.CARD_ID + " ," +
|
||||
LoyaltyCardDbIds.BARCODE_ID + " ," +
|
||||
LoyaltyCardDbIds.BARCODE_TYPE + " ," +
|
||||
LoyaltyCardDbIds.BARCODE_ENCODING + " ," +
|
||||
LoyaltyCardDbIds.STAR_STATUS + " ," +
|
||||
LoyaltyCardDbIds.LAST_USED + " ," +
|
||||
LoyaltyCardDbIds.ZOOM_LEVEL + " ," +
|
||||
LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH + " ," +
|
||||
LoyaltyCardDbIds.ARCHIVE_STATUS + ")" +
|
||||
" SELECT " +
|
||||
LoyaltyCardDbIds.ID + " ," +
|
||||
LoyaltyCardDbIds.STORE + " ," +
|
||||
LoyaltyCardDbIds.NOTE + " ," +
|
||||
LoyaltyCardDbIds.VALID_FROM + " ," +
|
||||
LoyaltyCardDbIds.EXPIRY + " ," +
|
||||
LoyaltyCardDbIds.BALANCE + " ," +
|
||||
LoyaltyCardDbIds.BALANCE_TYPE + " ," +
|
||||
LoyaltyCardDbIds.HEADER_COLOR + " ," +
|
||||
LoyaltyCardDbIds.CARD_ID + " ," +
|
||||
LoyaltyCardDbIds.BARCODE_ID + " ," +
|
||||
LoyaltyCardDbIds.BARCODE_TYPE + " ," +
|
||||
LoyaltyCardDbIds.BARCODE_ENCODING + " ," +
|
||||
LoyaltyCardDbIds.STAR_STATUS + " ," +
|
||||
LoyaltyCardDbIds.LAST_USED + " ," +
|
||||
LoyaltyCardDbIds.ZOOM_LEVEL + " ," +
|
||||
LoyaltyCardDbIds.ZOOM_LEVEL_WIDTH + " ," +
|
||||
LoyaltyCardDbIds.ARCHIVE_STATUS +
|
||||
" FROM tmp");
|
||||
|
||||
// Drop tmp table
|
||||
db.execSQL("DROP TABLE tmp");
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
db.endTransaction();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static Set<String> imageFiles(Context context, final SQLiteDatabase database) {
|
||||
@@ -417,7 +556,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
public static long insertLoyaltyCard(
|
||||
final SQLiteDatabase database, final String store, final String note, final Date validFrom,
|
||||
final Date expiry, final BigDecimal balance, final Currency balanceType, final String cardId,
|
||||
final String barcodeId, final CatimaBarcode barcodeType, final @Nullable Charset barcodeEncoding,
|
||||
final String barcodeId, final CatimaBarcode barcodeType, final @NonNull Charset barcodeEncoding,
|
||||
final Integer headerColor,
|
||||
final int starStatus, final Long lastUsed, final int archiveStatus) {
|
||||
database.beginTransaction();
|
||||
@@ -433,7 +572,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId);
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId);
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null);
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_ENCODING, barcodeEncoding != null ? barcodeEncoding.name() : null);
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_ENCODING, barcodeEncoding.name());
|
||||
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
|
||||
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
|
||||
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
|
||||
@@ -453,7 +592,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
final SQLiteDatabase database, final int id, final String store, final String note,
|
||||
final Date validFrom, final Date expiry, final BigDecimal balance,
|
||||
final Currency balanceType, final String cardId, final String barcodeId,
|
||||
final CatimaBarcode barcodeType, final @Nullable Charset barcodeEncoding,
|
||||
final CatimaBarcode barcodeType, final @NonNull Charset barcodeEncoding,
|
||||
final Integer headerColor, final int starStatus,
|
||||
final Long lastUsed, final int archiveStatus) {
|
||||
database.beginTransaction();
|
||||
@@ -470,7 +609,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId);
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId);
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null);
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_ENCODING, barcodeEncoding != null ? barcodeEncoding.name() : null);
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_ENCODING, barcodeEncoding.name());
|
||||
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
|
||||
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
|
||||
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
|
||||
@@ -490,7 +629,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
SQLiteDatabase database, final int id, final String store, final String note,
|
||||
final Date validFrom, final Date expiry, final BigDecimal balance,
|
||||
final Currency balanceType, final String cardId, final String barcodeId,
|
||||
final CatimaBarcode barcodeType, final @Nullable Charset barcodeEncoding,
|
||||
final CatimaBarcode barcodeType, final @NonNull Charset barcodeEncoding,
|
||||
final Integer headerColor, final int starStatus,
|
||||
final Long lastUsed, final int archiveStatus) {
|
||||
database.beginTransaction();
|
||||
@@ -506,7 +645,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId);
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId);
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null);
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_ENCODING, barcodeEncoding != null ? barcodeEncoding.name() : null);
|
||||
contentValues.put(LoyaltyCardDbIds.BARCODE_ENCODING, barcodeEncoding.name());
|
||||
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
|
||||
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
|
||||
contentValues.put(LoyaltyCardDbIds.LAST_USED, lastUsed != null ? lastUsed : Utils.getUnixTime());
|
||||
|
||||
@@ -70,7 +70,7 @@ public class ImportURIHelper {
|
||||
try {
|
||||
// These values are allowed to be null
|
||||
CatimaBarcode barcodeType = null;
|
||||
Charset barcodeEncoding = null;
|
||||
Charset barcodeEncoding = StandardCharsets.ISO_8859_1;
|
||||
Date validFrom = null;
|
||||
Date expiry = null;
|
||||
BigDecimal balance = new BigDecimal("0");
|
||||
@@ -206,9 +206,7 @@ public class ImportURIHelper {
|
||||
if (loyaltyCard.barcodeType != null) {
|
||||
fragment = appendFragment(fragment, BARCODE_TYPE, loyaltyCard.barcodeType.name());
|
||||
}
|
||||
if (loyaltyCard.barcodeEncoding != null) {
|
||||
fragment = appendFragment(fragment, BARCODE_ENCODING, loyaltyCard.barcodeEncoding.name());
|
||||
}
|
||||
fragment = appendFragment(fragment, BARCODE_ENCODING, loyaltyCard.barcodeEncoding.name());
|
||||
if (loyaltyCard.headerColor != null) {
|
||||
fragment = appendFragment(fragment, HEADER_COLOR, loyaltyCard.headerColor.toString());
|
||||
}
|
||||
|
||||
@@ -69,7 +69,9 @@ class ListWidget : AppWidgetProvider() {
|
||||
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 templateIntent = Intent(context, LoyaltyCardViewActivity::class.java).apply {
|
||||
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
|
||||
}
|
||||
val pendingIntent = PendingIntent.getActivity(
|
||||
context,
|
||||
0,
|
||||
@@ -100,8 +102,7 @@ class ListWidget : AppWidgetProvider() {
|
||||
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
|
||||
// FIXME: The icon flow causes a crash up to Android 12L, so SDK_INT is forced up from 23 to 33
|
||||
// FIXME: The icon flow causes a crash up to Android 12L, so force anything below 33 down this path
|
||||
if (icon != null && Build.VERSION.SDK_INT >= 32) {
|
||||
setInt(R.id.item_container_foreground, "setBackgroundColor", foreground)
|
||||
setImageViewIcon(R.id.item_image, Icon.createWithBitmap(icon))
|
||||
|
||||
@@ -10,6 +10,7 @@ import androidx.annotation.Nullable;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Currency;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
@@ -31,7 +32,6 @@ public class LoyaltyCard {
|
||||
public String barcodeId;
|
||||
@Nullable
|
||||
public CatimaBarcode barcodeType;
|
||||
@Nullable
|
||||
public Charset barcodeEncoding;
|
||||
@Nullable
|
||||
public Integer headerColor;
|
||||
@@ -94,7 +94,7 @@ public class LoyaltyCard {
|
||||
setCardId("");
|
||||
setBarcodeId(null);
|
||||
setBarcodeType(null);
|
||||
setBarcodeEncoding(null);
|
||||
setBarcodeEncoding(StandardCharsets.ISO_8859_1);
|
||||
setHeaderColor(null);
|
||||
setStarStatus(0);
|
||||
setLastUsed(Utils.getUnixTime());
|
||||
@@ -129,7 +129,7 @@ public class LoyaltyCard {
|
||||
public LoyaltyCard(final int id, final String store, final String note, @Nullable final Date validFrom,
|
||||
@Nullable final Date expiry, final BigDecimal balance, @Nullable final Currency balanceType,
|
||||
final String cardId, @Nullable final String barcodeId, @Nullable final CatimaBarcode barcodeType,
|
||||
@Nullable final Charset barcodeEncoding, @Nullable final Integer headerColor, final int starStatus,
|
||||
@NonNull final Charset barcodeEncoding, @Nullable final Integer headerColor, final int starStatus,
|
||||
final long lastUsed, final int zoomLevel, final int zoomLevelWidth, final int archiveStatus,
|
||||
@Nullable Bitmap imageThumbnail, @Nullable String imageThumbnailPath,
|
||||
@Nullable Bitmap imageFront, @Nullable String imageFrontPath,
|
||||
@@ -250,7 +250,7 @@ public class LoyaltyCard {
|
||||
this.barcodeType = barcodeType;
|
||||
}
|
||||
|
||||
public void setBarcodeEncoding(@Nullable Charset barcodeEncoding) {
|
||||
public void setBarcodeEncoding(@NonNull Charset barcodeEncoding) {
|
||||
this.barcodeEncoding = barcodeEncoding;
|
||||
}
|
||||
|
||||
@@ -478,7 +478,7 @@ public class LoyaltyCard {
|
||||
bundle.putString(BUNDLE_LOYALTY_CARD_BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null);
|
||||
}
|
||||
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_BARCODE_ENCODING)) {
|
||||
bundle.putString(BUNDLE_LOYALTY_CARD_BARCODE_ENCODING, barcodeEncoding != null ? barcodeEncoding.name() : null);
|
||||
bundle.putString(BUNDLE_LOYALTY_CARD_BARCODE_ENCODING, barcodeEncoding.name());
|
||||
}
|
||||
if (!exportIsLimited || exportLimit.contains(BUNDLE_LOYALTY_CARD_HEADER_COLOR)) {
|
||||
bundle.putInt(BUNDLE_LOYALTY_CARD_HEADER_COLOR, headerColor != null ? headerColor : -1);
|
||||
@@ -558,8 +558,7 @@ public class LoyaltyCard {
|
||||
int barcodeTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE);
|
||||
CatimaBarcode barcodeType = !cursor.isNull(barcodeTypeColumn) ? CatimaBarcode.fromName(cursor.getString(barcodeTypeColumn)) : null;
|
||||
// barcodeEncoding
|
||||
int barcodeEncodingColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ENCODING);
|
||||
Charset barcodeEncoding = !cursor.isNull(barcodeEncodingColumn) ? Charset.forName(cursor.getString(barcodeEncodingColumn)) : null;
|
||||
Charset barcodeEncoding = Charset.forName(cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ENCODING)));
|
||||
// headerColor
|
||||
int headerColorColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_COLOR);
|
||||
Integer headerColor = !cursor.isNull(headerColorColumn) ? cursor.getInt(headerColorColumn) : null;
|
||||
@@ -615,7 +614,7 @@ public class LoyaltyCard {
|
||||
Utils.equals(a.barcodeId, b.barcodeId) && // nullable String
|
||||
Utils.equals(a.barcodeType == null ? null : a.barcodeType.format(),
|
||||
b.barcodeType == null ? null : b.barcodeType.format()) && // nullable CatimaBarcode with no overridden .equals(), so we need to check .format()
|
||||
Utils.equals(a.barcodeEncoding, b.barcodeEncoding) && // nullable String
|
||||
a.barcodeEncoding.name().equals(b.barcodeEncoding.name()) && // non-nullable String
|
||||
Utils.equals(a.headerColor, b.headerColor) && // nullable Integer
|
||||
a.starStatus == b.starStatus && // non-nullable int
|
||||
a.archiveStatus == b.archiveStatus && // non-nullable int
|
||||
@@ -655,7 +654,7 @@ public class LoyaltyCard {
|
||||
this.cardId,
|
||||
this.barcodeId,
|
||||
this.barcodeType != null ? this.barcodeType.format() : null,
|
||||
this.barcodeEncoding != null ? this.barcodeEncoding.name() : null,
|
||||
this.barcodeEncoding.name(),
|
||||
this.headerColor,
|
||||
this.starStatus,
|
||||
this.lastUsed,
|
||||
|
||||
@@ -232,7 +232,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
|
||||
viewModel.setHasChanged(true);
|
||||
}
|
||||
|
||||
protected void setLoyaltyCardBarcodeEncoding(@Nullable Charset barcodeEncoding) {
|
||||
protected void setLoyaltyCardBarcodeEncoding(@NonNull Charset barcodeEncoding) {
|
||||
viewModel.getLoyaltyCard().setBarcodeEncoding(barcodeEncoding);
|
||||
|
||||
generateBarcode();
|
||||
@@ -594,18 +594,13 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
|
||||
public void onTextChanged(CharSequence s, int start, int before, int count) {
|
||||
if (!s.toString().isEmpty()) {
|
||||
Log.d(TAG, "Setting barcode encoding to " + s.toString());
|
||||
if (s.toString().equals(getString(R.string.automatic))) {
|
||||
setLoyaltyCardBarcodeEncoding(null);
|
||||
} else {
|
||||
setLoyaltyCardBarcodeEncoding(Charset.forName(s.toString()));
|
||||
}
|
||||
setLoyaltyCardBarcodeEncoding(Charset.forName(s.toString()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterTextChanged(Editable s) {
|
||||
ArrayList<String> barcodeEncodingList = new ArrayList<>();
|
||||
barcodeEncodingList.add(getString(R.string.automatic));
|
||||
barcodeEncodingList.add(StandardCharsets.ISO_8859_1.name());
|
||||
barcodeEncodingList.add(StandardCharsets.UTF_8.name());
|
||||
ArrayAdapter<String> barcodeEncodingAdapter = new ArrayAdapter<>(LoyaltyCardEditActivity.this, android.R.layout.select_dialog_item, barcodeEncodingList);
|
||||
@@ -810,7 +805,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
|
||||
CatimaBarcode barcodeType = viewModel.getLoyaltyCard().barcodeType;
|
||||
barcodeTypeField.setText(barcodeType != null ? barcodeType.prettyName() : getString(R.string.noBarcode));
|
||||
Charset barcodeEncoding = viewModel.getLoyaltyCard().barcodeEncoding;
|
||||
barcodeEncodingField.setText(barcodeEncoding != null ? barcodeEncoding.name() : getString(R.string.automatic));
|
||||
barcodeEncodingField.setText(barcodeEncoding.name());
|
||||
|
||||
// We set the balance here (with onResuming/onRestoring == true) to prevent formatBalanceCurrencyField() from setting it (via onTextChanged),
|
||||
// which can cause issues when switching locale because it parses the balance and e.g. the decimal separator may have changed.
|
||||
@@ -1532,7 +1527,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
DBHelper.setLoyaltyCardGroups(mDatabase, viewModel.getLoyaltyCardId(), selectedGroups);
|
||||
|
||||
ShortcutHelper.updateShortcuts(this, DBHelper.getLoyaltyCard(this, mDatabase, viewModel.getLoyaltyCardId()));
|
||||
ShortcutHelper.updateShortcuts(this);
|
||||
|
||||
if (viewModel.getDuplicateFromLoyaltyCardId()) {
|
||||
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
|
||||
|
||||
@@ -89,7 +89,6 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
String cardIdString;
|
||||
String barcodeIdString;
|
||||
CatimaBarcode format;
|
||||
@Nullable
|
||||
Charset barcodeEncoding;
|
||||
|
||||
Bitmap frontImageBitmap;
|
||||
@@ -407,7 +406,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
dialogContentPadding,
|
||||
0
|
||||
);
|
||||
infoTextview.setAutoLinkMask(Linkify.ALL);
|
||||
infoTextview.setAutoLinkMask(Linkify.EMAIL_ADDRESSES | Linkify.PHONE_NUMBERS | Linkify.WEB_URLS);
|
||||
infoTextview.setTextIsSelectable(true);
|
||||
|
||||
SpannableStringBuilder infoText = new SpannableStringBuilder();
|
||||
@@ -702,6 +701,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
}
|
||||
|
||||
TextView cardIdView = new TextView(LoyaltyCardViewActivity.this);
|
||||
cardIdView.setAutoLinkMask(Linkify.EMAIL_ADDRESSES | Linkify.PHONE_NUMBERS | Linkify.WEB_URLS);
|
||||
cardIdView.setText(loyaltyCard.cardId);
|
||||
cardIdView.setTextIsSelectable(true);
|
||||
int contentPadding = getResources().getDimensionPixelSize(R.dimen.alert_dialog_content_padding);
|
||||
@@ -794,7 +794,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
invalidateOptionsMenu();
|
||||
|
||||
ShortcutHelper.updateShortcuts(this, loyaltyCard);
|
||||
ShortcutHelper.updateShortcuts(this);
|
||||
}
|
||||
|
||||
private void setStateBasedOnImageTypes() {
|
||||
@@ -896,7 +896,6 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
DBHelper.updateLoyaltyCardArchiveStatus(database, loyaltyCardId, 1);
|
||||
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
|
||||
@@ -922,7 +921,6 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
|
||||
|
||||
DBHelper.deleteLoyaltyCard(database, LoyaltyCardViewActivity.this, loyaltyCardId);
|
||||
|
||||
ShortcutHelper.removeShortcut(LoyaltyCardViewActivity.this, loyaltyCardId);
|
||||
new ListWidget().updateAll(LoyaltyCardViewActivity.this);
|
||||
|
||||
finish();
|
||||
|
||||
@@ -156,8 +156,6 @@ class MainActivity : CatimaAppCompatActivity(), CardAdapterListener {
|
||||
Log.d(TAG, "Deleting card: " + loyaltyCard.id)
|
||||
|
||||
DBHelper.deleteLoyaltyCard(mDatabase, this@MainActivity, loyaltyCard.id)
|
||||
|
||||
ShortcutHelper.removeShortcut(this@MainActivity, loyaltyCard.id)
|
||||
}
|
||||
val tab = groupsTabLayout.getTabAt(selectedTab)
|
||||
mGroup = tab?.tag
|
||||
@@ -177,7 +175,6 @@ class MainActivity : CatimaAppCompatActivity(), CardAdapterListener {
|
||||
for (loyaltyCard in mAdapter.getSelectedItems()) {
|
||||
Log.d(TAG, "Archiving card: " + loyaltyCard.id)
|
||||
DBHelper.updateLoyaltyCardArchiveStatus(mDatabase, loyaltyCard.id, 1)
|
||||
ShortcutHelper.removeShortcut(this@MainActivity, loyaltyCard.id)
|
||||
updateLoyaltyCardList(false)
|
||||
inputMode.finish()
|
||||
invalidateOptionsMenu()
|
||||
@@ -466,6 +463,7 @@ class MainActivity : CatimaAppCompatActivity(), CardAdapterListener {
|
||||
}
|
||||
|
||||
ListWidget().updateAll(mAdapter.mContext)
|
||||
ShortcutHelper.updateShortcuts(mAdapter.mContext)
|
||||
}
|
||||
|
||||
private fun processParseResultList(
|
||||
|
||||
@@ -34,11 +34,6 @@ public class PermissionUtils {
|
||||
* @return
|
||||
*/
|
||||
public static boolean needsCameraPermission(Activity activity) {
|
||||
// Android only introduced the runtime permission system in Marshmallow (Android 6.0)
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return ContextCompat.checkSelfPermission(activity, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED;
|
||||
}
|
||||
|
||||
@@ -49,21 +44,14 @@ public class PermissionUtils {
|
||||
* @param activity
|
||||
* @param requestCode
|
||||
*/
|
||||
public static void requestStorageReadPermission(CatimaAppCompatActivity activity, int requestCode) {
|
||||
public static void requestStorageReadPermission(Activity activity, int requestCode) {
|
||||
String[] permissions = new String[]{ android.Manifest.permission.READ_EXTERNAL_STORAGE };
|
||||
int[] mockedResults = new int[]{ PackageManager.PERMISSION_GRANTED };
|
||||
|
||||
if (needsStorageReadPermission(activity)) {
|
||||
ActivityCompat.requestPermissions(activity, permissions, requestCode);
|
||||
} else {
|
||||
// FIXME: This points to onMockedRequestPermissionResult instead of to
|
||||
// onRequestPermissionResult because onRequestPermissionResult was only introduced in
|
||||
// Android 6.0 (SDK 23) and we and to support Android 5.0 (SDK 21) too.
|
||||
//
|
||||
// When minSdk becomes 23, this should point to onRequestPermissionResult directly and
|
||||
// the activity input variable should be changed from CatimaAppCompatActivity to
|
||||
// Activity.
|
||||
activity.onMockedRequestPermissionsResult(requestCode, permissions, mockedResults);
|
||||
activity.onRequestPermissionsResult(requestCode, permissions, mockedResults);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,21 +62,14 @@ public class PermissionUtils {
|
||||
* @param activity
|
||||
* @param requestCode
|
||||
*/
|
||||
public static void requestCameraPermission(CatimaAppCompatActivity activity, int requestCode) {
|
||||
public static void requestCameraPermission(Activity activity, int requestCode) {
|
||||
String[] permissions = new String[]{ Manifest.permission.CAMERA };
|
||||
int[] mockedResults = new int[]{ PackageManager.PERMISSION_GRANTED };
|
||||
|
||||
if (needsCameraPermission(activity)) {
|
||||
ActivityCompat.requestPermissions(activity, permissions, requestCode);
|
||||
} else {
|
||||
// FIXME: This points to onMockedRequestPermissionResult instead of to
|
||||
// onRequestPermissionResult because onRequestPermissionResult was only introduced in
|
||||
// Android 6.0 (SDK 23) and we and to support Android 5.0 (SDK 21) too.
|
||||
//
|
||||
// When minSdk becomes 23, this should point to onRequestPermissionResult directly and
|
||||
// the activity input variable should be changed from CatimaAppCompatActivity to
|
||||
// Activity.
|
||||
activity.onMockedRequestPermissionsResult(requestCode, permissions, mockedResults);
|
||||
activity.onRequestPermissionsResult(requestCode, permissions, mockedResults);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,7 @@ import java.io.FileNotFoundException
|
||||
import java.io.IOException
|
||||
import java.math.BigDecimal
|
||||
import java.nio.charset.Charset
|
||||
import java.nio.charset.StandardCharsets
|
||||
import java.text.DateFormat
|
||||
import java.text.ParseException
|
||||
import java.time.ZonedDateTime
|
||||
@@ -41,7 +42,7 @@ class PkpassParser(context: Context, uri: Uri?) {
|
||||
private var cardId: String = context.getString(R.string.noBarcode)
|
||||
private var barcodeId: String? = null
|
||||
private var barcodeType: CatimaBarcode? = null
|
||||
private var barcodeEncoding: Charset? = null
|
||||
private var barcodeEncoding: Charset = StandardCharsets.ISO_8859_1
|
||||
private var headerColor: Int? = null
|
||||
private val starStatus = 0
|
||||
private val lastUsed: Long = 0
|
||||
@@ -348,11 +349,15 @@ class PkpassParser(context: Context, uri: Uri?) {
|
||||
try {
|
||||
cardId = barcodeInfo.getString("altText")
|
||||
barcodeId = barcodeInfo.getString("message")
|
||||
barcodeEncoding = Charset.forName(barcodeInfo.getString("messageEncoding"))
|
||||
} catch (ignored: JSONException) {
|
||||
cardId = barcodeInfo.getString("message")
|
||||
barcodeId = null
|
||||
}
|
||||
|
||||
try {
|
||||
barcodeEncoding = Charset.forName(barcodeInfo.getString("messageEncoding"))
|
||||
} catch (ignored: Exception) {
|
||||
// If encoding is not defined, null or otherwise invalid, stick to the default
|
||||
}
|
||||
|
||||
// Don't set barcodeId if it's the same as cardId
|
||||
|
||||
@@ -543,14 +543,6 @@ class ScanActivity : CatimaAppCompatActivity() {
|
||||
) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
|
||||
onMockedRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
}
|
||||
|
||||
override fun onMockedRequestPermissionsResult(
|
||||
requestCode: Int,
|
||||
permissions: Array<String>,
|
||||
grantResults: IntArray
|
||||
) {
|
||||
val granted =
|
||||
grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED
|
||||
|
||||
|
||||
@@ -2,31 +2,35 @@ package protect.card_locker;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Canvas;
|
||||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.core.content.pm.ShortcutInfoCompat;
|
||||
import androidx.core.content.pm.ShortcutManagerCompat;
|
||||
import androidx.core.graphics.ColorUtils;
|
||||
import androidx.core.graphics.drawable.IconCompat;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
class ShortcutHelper {
|
||||
// Android documentation says that no more than 5 shortcuts
|
||||
// are supported. However, that may be too many, as not all
|
||||
// launcher will show all 5. Instead, the number is limited
|
||||
// to 3 here, so that the most recent shortcut has a good
|
||||
// chance of being shown.
|
||||
private static final int MAX_SHORTCUTS = 3;
|
||||
/**
|
||||
* This variable controls the maximum number of shortcuts available.
|
||||
* It is made public only to make testing easier and should not be
|
||||
* manually modified. We use -1 here as a default value to check if
|
||||
* the value has been set either manually by the test scenario or
|
||||
* automatically in the `updateShortcuts` function.
|
||||
* Its actual value will be set based on the maximum amount of shortcuts
|
||||
* declared by the launcher via `getMaxShortcutCountPerActivity`.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
public static int maxShortcuts = -1;
|
||||
|
||||
// https://developer.android.com/reference/android/graphics/drawable/AdaptiveIconDrawable.html
|
||||
private static final int ADAPTIVE_BITMAP_SCALE = 1;
|
||||
@@ -35,86 +39,42 @@ class ShortcutHelper {
|
||||
private static final int ADAPTIVE_BITMAP_IMAGE_SIZE = ADAPTIVE_BITMAP_VISIBLE_SIZE + 5 * ADAPTIVE_BITMAP_SCALE;
|
||||
|
||||
/**
|
||||
* Add a card to the app shortcuts, and maintain a list of the most
|
||||
* recently used cards. If there is already a shortcut for the card,
|
||||
* the card is marked as the most recently used card. If adding this
|
||||
* card exceeds the max number of shortcuts, then the least recently
|
||||
* used card shortcut is discarded.
|
||||
* Update the dynamic shortcut list with the most recently viewed cards
|
||||
* based on the lastUsed field. Archived cards are excluded from the shortcuts
|
||||
* list. The list keeps at most maxShortcuts number of elements.
|
||||
*/
|
||||
static void updateShortcuts(Context context, LoyaltyCard card) {
|
||||
if (card.archiveStatus == 1) {
|
||||
// Don't add archived card to menu
|
||||
return;
|
||||
static void updateShortcuts(Context context) {
|
||||
if (maxShortcuts == -1) {
|
||||
maxShortcuts = ShortcutManagerCompat.getMaxShortcutCountPerActivity(context);
|
||||
}
|
||||
|
||||
LinkedList<ShortcutInfoCompat> list = new LinkedList<>(ShortcutManagerCompat.getDynamicShortcuts(context));
|
||||
|
||||
SQLiteDatabase database = new DBHelper(context).getReadableDatabase();
|
||||
|
||||
String shortcutId = Integer.toString(card.id);
|
||||
|
||||
// Sort the shortcuts by rank, so working with the relative order will be easier.
|
||||
// This sorts so that the lowest rank is first.
|
||||
Collections.sort(list, Comparator.comparingInt(ShortcutInfoCompat::getRank));
|
||||
|
||||
Integer foundIndex = null;
|
||||
|
||||
for (int index = 0; index < list.size(); index++) {
|
||||
if (list.get(index).getId().equals(shortcutId)) {
|
||||
// Found the item already
|
||||
foundIndex = index;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (foundIndex != null) {
|
||||
// If the item is already found, then the list needs to be
|
||||
// reordered, so that the selected item now has the lowest
|
||||
// rank, thus letting it survive longer.
|
||||
ShortcutInfoCompat found = list.remove(foundIndex.intValue());
|
||||
list.addFirst(found);
|
||||
} else {
|
||||
// The item is new to the list. We add it and trim the list later.
|
||||
ShortcutInfoCompat shortcut = createShortcutBuilder(context, card).build();
|
||||
list.addFirst(shortcut);
|
||||
}
|
||||
|
||||
LinkedList<ShortcutInfoCompat> finalList = new LinkedList<>();
|
||||
SQLiteDatabase database = new DBHelper(context).getReadableDatabase();
|
||||
Cursor loyaltyCardCursor = DBHelper.getLoyaltyCardCursor(
|
||||
database,
|
||||
"",
|
||||
null,
|
||||
DBHelper.LoyaltyCardOrder.LastUsed,
|
||||
DBHelper.LoyaltyCardOrderDirection.Ascending,
|
||||
DBHelper.LoyaltyCardArchiveFilter.Unarchived
|
||||
);
|
||||
|
||||
int rank = 0;
|
||||
|
||||
// The ranks are now updated; the order in the list is the rank.
|
||||
for (int index = 0; index < list.size(); index++) {
|
||||
ShortcutInfoCompat prevShortcut = list.get(index);
|
||||
while (rank < maxShortcuts && loyaltyCardCursor.moveToNext()) {
|
||||
int id = loyaltyCardCursor.getInt(loyaltyCardCursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ID));
|
||||
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(context, database, id);
|
||||
|
||||
LoyaltyCard loyaltyCard = DBHelper.getLoyaltyCard(context, database, Integer.parseInt(prevShortcut.getId()));
|
||||
ShortcutInfoCompat updatedShortcut = createShortcutBuilder(context, loyaltyCard)
|
||||
.setRank(rank)
|
||||
.build();
|
||||
|
||||
// skip outdated cards that no longer exist
|
||||
if (loyaltyCard != null) {
|
||||
ShortcutInfoCompat updatedShortcut = createShortcutBuilder(context, loyaltyCard)
|
||||
.setRank(rank)
|
||||
.build();
|
||||
|
||||
finalList.addLast(updatedShortcut);
|
||||
rank++;
|
||||
|
||||
// trim the list
|
||||
if (rank >= MAX_SHORTCUTS) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
finalList.addLast(updatedShortcut);
|
||||
rank++;
|
||||
}
|
||||
|
||||
ShortcutManagerCompat.setDynamicShortcuts(context, finalList);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the given card id from the app shortcuts, if such a
|
||||
* shortcut exists.
|
||||
*/
|
||||
static void removeShortcut(Context context, int cardId) {
|
||||
ShortcutManagerCompat.removeDynamicShortcuts(context, Collections.singletonList(Integer.toString(cardId)));
|
||||
}
|
||||
|
||||
static @NotNull
|
||||
Bitmap createAdaptiveBitmap(@NotNull Bitmap in, int paddingColor) {
|
||||
Bitmap ret = Bitmap.createBitmap(ADAPTIVE_BITMAP_SIZE, ADAPTIVE_BITMAP_SIZE, Bitmap.Config.ARGB_8888);
|
||||
|
||||
@@ -40,16 +40,9 @@ class UCropWrapper : UCropActivity() {
|
||||
return
|
||||
}
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 23) {
|
||||
val decorView = window.decorView
|
||||
val wic = WindowInsetsControllerCompat(window, decorView)
|
||||
wic.isAppearanceLightStatusBars = !darkMode
|
||||
} else if (!darkMode) {
|
||||
window.statusBarColor = ColorUtils.compositeColors(
|
||||
Color.argb(127, 0, 0, 0),
|
||||
window.statusBarColor
|
||||
)
|
||||
}
|
||||
val decorView = window.decorView
|
||||
val wic = WindowInsetsControllerCompat(window, decorView)
|
||||
wic.isAppearanceLightStatusBars = !darkMode
|
||||
}
|
||||
|
||||
private fun checkViews(darkMode: Boolean) {
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package protect.card_locker.compose
|
||||
|
||||
import androidx.activity.OnBackPressedDispatcher
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.compose.foundation.isSystemInDarkTheme
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
@@ -8,18 +10,38 @@ import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TopAppBar
|
||||
import androidx.compose.material3.TopAppBarDefaults
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.testTag
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import protect.card_locker.R
|
||||
import protect.card_locker.preferences.Settings
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun CatimaTopAppBar(title: String, onBackPressedDispatcher: OnBackPressedDispatcher?) {
|
||||
// Use pure black in OLED theme
|
||||
val context = LocalContext.current
|
||||
val settings = Settings(context)
|
||||
val isDarkMode = when (settings.theme) {
|
||||
AppCompatDelegate.MODE_NIGHT_NO -> false
|
||||
AppCompatDelegate.MODE_NIGHT_YES -> true
|
||||
else -> isSystemInDarkTheme()
|
||||
}
|
||||
|
||||
val appBarColors = if (isDarkMode && settings.oledDark) {
|
||||
TopAppBarDefaults.topAppBarColors().copy(containerColor = Color.Black)
|
||||
} else {
|
||||
TopAppBarDefaults.topAppBarColors()
|
||||
}
|
||||
|
||||
TopAppBar(
|
||||
modifier = Modifier.testTag("topbar_catima"),
|
||||
title = { Text(text = title) },
|
||||
colors = appBarColors,
|
||||
navigationIcon = {
|
||||
if (onBackPressedDispatcher != null) {
|
||||
IconButton(onClick = { onBackPressedDispatcher.onBackPressed() }) {
|
||||
|
||||
@@ -32,7 +32,7 @@ public class CardsContentProvider extends ContentProvider {
|
||||
public static final String MAJOR_COLUMN = "major";
|
||||
public static final String MINOR_COLUMN = "minor";
|
||||
public static final int MAJOR = 1;
|
||||
public static final int MINOR = 0;
|
||||
public static final int MINOR = 1;
|
||||
}
|
||||
|
||||
private static final int URI_VERSION = 0;
|
||||
@@ -52,7 +52,7 @@ public class CardsContentProvider extends ContentProvider {
|
||||
LoyaltyCardDbIds.CARD_ID,
|
||||
LoyaltyCardDbIds.BARCODE_ID,
|
||||
LoyaltyCardDbIds.BARCODE_TYPE,
|
||||
// FIXME: Expose BARCODE_ENCODING but without ever exposing the null value (so apps using this don't have to guess)
|
||||
LoyaltyCardDbIds.BARCODE_ENCODING,
|
||||
LoyaltyCardDbIds.STAR_STATUS,
|
||||
LoyaltyCardDbIds.LAST_USED,
|
||||
LoyaltyCardDbIds.ARCHIVE_STATUS,
|
||||
@@ -77,13 +77,6 @@ public class CardsContentProvider extends ContentProvider {
|
||||
@Nullable final String selection,
|
||||
@Nullable final String[] selectionArgs,
|
||||
@Nullable final String sortOrder) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
|
||||
// Disable the content provider on SDK < 23 since it grants dangerous
|
||||
// permissions at install-time
|
||||
Log.w(TAG, "Content provider read is only available for SDK >= 23");
|
||||
return null;
|
||||
}
|
||||
|
||||
final Settings settings = new Settings(getContext());
|
||||
if (!settings.getAllowContentProviderRead()) {
|
||||
Log.w(TAG, "Content provider read is disabled");
|
||||
|
||||
@@ -155,7 +155,7 @@ public class CatimaExporter implements Exporter {
|
||||
card.cardId,
|
||||
card.barcodeId,
|
||||
card.barcodeType != null ? card.barcodeType.name() : "",
|
||||
card.barcodeEncoding != null ? card.barcodeEncoding.name() : "",
|
||||
card.barcodeEncoding.name(),
|
||||
card.headerColor,
|
||||
card.starStatus,
|
||||
card.lastUsed,
|
||||
|
||||
@@ -462,8 +462,8 @@ public class CatimaImporter implements Importer {
|
||||
// Barcode encoding information is only supported since Catima 2.41.0, so old exports will lack this field
|
||||
// Database migration 19 forcing ISO-8859-1 on all cards, so we should treat imports from old Catima versions the same and force ISO-8859-1 there too
|
||||
// This limits the risk of breaking cards when importing an old database backup
|
||||
Charset barcodeEncoding = null;
|
||||
String unparsedBarcodeEncoding = CSVHelpers.extractString(DBHelper.LoyaltyCardDbIds.BARCODE_ENCODING, record, "ISO-8859-1");
|
||||
Charset barcodeEncoding = StandardCharsets.ISO_8859_1;
|
||||
String unparsedBarcodeEncoding = CSVHelpers.extractString(DBHelper.LoyaltyCardDbIds.BARCODE_ENCODING, record, "");
|
||||
if (!unparsedBarcodeEncoding.isEmpty()) {
|
||||
barcodeEncoding = Charset.forName(unparsedBarcodeEncoding);
|
||||
}
|
||||
|
||||
@@ -160,7 +160,7 @@ public class FidmeImporter implements Importer {
|
||||
cardId,
|
||||
null,
|
||||
barcodeType,
|
||||
null,
|
||||
StandardCharsets.ISO_8859_1,
|
||||
headerColor,
|
||||
starStatus,
|
||||
Utils.getUnixTime(),
|
||||
|
||||
@@ -162,7 +162,7 @@ public class VoucherVaultImporter implements Importer {
|
||||
cardId,
|
||||
null,
|
||||
barcodeType,
|
||||
null,
|
||||
StandardCharsets.ISO_8859_1,
|
||||
headerColor,
|
||||
0,
|
||||
Utils.getUnixTime(),
|
||||
|
||||
@@ -157,12 +157,6 @@ class SettingsActivity : CatimaAppCompatActivity() {
|
||||
true
|
||||
}
|
||||
|
||||
// Disable content provider on SDK < 23 since dangerous permissions
|
||||
// are granted at install-time
|
||||
val contentProviderReadPreference = findPreference<Preference>(getString(R.string.settings_key_allow_content_provider_read))
|
||||
contentProviderReadPreference!!.isVisible =
|
||||
Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
|
||||
|
||||
// Hide crash reporter settings on builds it's not enabled on
|
||||
val crashReporterPreference = findPreference<Preference>("acra.enable")
|
||||
crashReporterPreference!!.isVisible = BuildConfig.useAcraCrashReporter
|
||||
|
||||
@@ -6,29 +6,30 @@ Allan Nordhøy
|
||||
Heimen Stoffels
|
||||
Oğuz Ersen
|
||||
FC (Fay) Stegerman
|
||||
StoyanDimitrov
|
||||
B o d o
|
||||
StoyanDimitrov
|
||||
大王叫我来巡山
|
||||
SlavekB
|
||||
Katharine Chui
|
||||
mondstern
|
||||
IllusiveMan196
|
||||
Silvério Santos
|
||||
Altonss
|
||||
Edgars Andersons
|
||||
Altonss
|
||||
Joel A
|
||||
Michael Moroni
|
||||
Priit Jõerüüt
|
||||
Liner Seven
|
||||
Eric
|
||||
Priit Jõerüüt
|
||||
Fjuro
|
||||
Максим Горпиніч
|
||||
GitSpoon
|
||||
Eric
|
||||
Максим Горпиніч
|
||||
GM
|
||||
Petr Novák
|
||||
laralem
|
||||
Taco
|
||||
nadiafekihahmed
|
||||
Горпиніч Максим Олександрович
|
||||
pfaffenrodt
|
||||
Aayush Gupta
|
||||
Scrambled777
|
||||
@@ -40,7 +41,6 @@ Kachelkaiser
|
||||
Giovanni Donisi
|
||||
Milo Ivir
|
||||
HudobniVolk
|
||||
Горпиніч Максим Олександрович
|
||||
Jiri Grönroos
|
||||
Warder
|
||||
Samantaz Fox
|
||||
@@ -52,6 +52,7 @@ Ankit Tiwari
|
||||
Cliff Heraldo
|
||||
Sergio Paredes
|
||||
Jose Delvani
|
||||
damjang
|
||||
mdvhimself
|
||||
Milan Šalka
|
||||
AMIR-G98
|
||||
@@ -60,7 +61,6 @@ Robin
|
||||
huuhaa
|
||||
Skrripy
|
||||
Govindgopalyadav
|
||||
damjang
|
||||
waffshappen
|
||||
Marnick L'Eau
|
||||
ngocanhtve
|
||||
@@ -68,6 +68,7 @@ aradxxx
|
||||
StellarSand
|
||||
Quentin PAGÈS
|
||||
Projjal Moitra
|
||||
Traductor
|
||||
Aliaksandr Trush
|
||||
e-michalak
|
||||
JungHee Lee
|
||||
@@ -78,7 +79,6 @@ Robin Liu
|
||||
Ricky Tigg
|
||||
Renko
|
||||
Gideon
|
||||
Traductor
|
||||
Denis Shilin
|
||||
しいたけ
|
||||
Alexander Ivanov
|
||||
@@ -90,12 +90,13 @@ Virginie
|
||||
Tim Trek
|
||||
Peter Dave Hello
|
||||
Alì Mortacci
|
||||
MisterCosta96
|
||||
Andre Costa
|
||||
arshbeerSingh
|
||||
Augustin LAVILLE
|
||||
Freddo espresso
|
||||
Vasudev R.
|
||||
Kim Seohyun
|
||||
echo r"0xX4H" | rev
|
||||
rudy3
|
||||
Michael Gangolf
|
||||
PRATHAMESH BHAGAT
|
||||
|
||||
@@ -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>
|
||||
@@ -14,9 +14,9 @@
|
||||
<string name="cancel">إلغاء</string>
|
||||
<string name="save">حفظ</string>
|
||||
<string name="edit">تعديل</string>
|
||||
<string name="delete">مسح</string>
|
||||
<string name="delete">إحذف</string>
|
||||
<string name="confirm">تأكيد</string>
|
||||
<string name="deleteConfirmation">مسح هذة البطاقة نهائيا؟</string>
|
||||
<string name="deleteConfirmation">إحذف هذه البطاقة نهائيا؟</string>
|
||||
<string name="ok">حسنا</string>
|
||||
<string name="share">شارك</string>
|
||||
<string name="sendLabel">ارسل…</string>
|
||||
@@ -24,17 +24,17 @@
|
||||
<string name="addCardTitle">اضف بطاقة</string>
|
||||
<string name="scanCardBarcode">مسح باركود</string>
|
||||
<string name="cardShortcut">اختصار البطاقة</string>
|
||||
<string name="noCardsMessage">اضف بطاقة أولا</string>
|
||||
<string name="noCardsMessage">أضف بطاقة أولا</string>
|
||||
<string name="barcodeImageDescriptionWithType">صورة <xliff:g>%s</xliff:g> الباركود</string>
|
||||
<string name="noCardExistsError">لا يمكن العثور على هذه البطاقة</string>
|
||||
<string name="noCardExistsError">لم يعثر على هذه البطاقة</string>
|
||||
<string name="failedParsingImportUriError">لا يمكن تحليل الرابط المستورد</string>
|
||||
<string name="importExport">استيراد/تصدير</string>
|
||||
<string name="importExportHelp">انشاء نسخة احتياطية من بياناتك يسمح بنقلها إلى جهاز آخر.</string>
|
||||
<string name="importExportHelp">إنشاء نسخة احتياطية من بياناتك تمكنك من نقلها إلى جهاز آخر</string>
|
||||
<string name="importFailed">تعذر إجراء الاستيراد</string>
|
||||
<string name="exportSuccessfulTitle">متصدر</string>
|
||||
<string name="exportSuccessfulTitle">مصدّر</string>
|
||||
<string name="exportFailedTitle">فشل التصدير</string>
|
||||
<string name="exportFailed">لا يمكن عمل التصدير</string>
|
||||
<string name="exportOptionExplanation">ستتم كتابة البيانات في الموقع الذي تختاره.</string>
|
||||
<string name="exportFailed">تعذر التصدير</string>
|
||||
<string name="exportOptionExplanation">ستكون البيانات مكتوبة في المسار الذي تختاره</string>
|
||||
<string name="importOptionFilesystemButton">من نظام الملفات</string>
|
||||
<string name="about">حول</string>
|
||||
<string name="app_copyright_old">بناء على Loyalty Card Keychain
|
||||
@@ -53,7 +53,7 @@
|
||||
<string name="exportSuccessful">تم تصدير البيانات</string>
|
||||
<string name="enter_group_name">أدخل اسم المجموعة</string>
|
||||
<string name="group_edit">تعديل المجموعة</string>
|
||||
<string name="noGroups">اضغط زر + لإضافة مجموعات للتصنيف.</string>
|
||||
<string name="noGroups">اضغط زر + لإضافة مجموعات للتصنيف</string>
|
||||
<string name="noGroupCards">هذه المجموعة فارغة</string>
|
||||
<string name="group_name_already_in_use">اسم المجموعة قيد الاستخدام بالفعل</string>
|
||||
<string name="group_name_is_empty">لا يمكن أن يكون اسم المجموعة فارغًا</string>
|
||||
@@ -73,9 +73,9 @@
|
||||
<string name="importCatima">الاستيراد من Catima</string>
|
||||
<string name="importCatimaMessage">حدّد ملفك تصدير من 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">حدّد للتصدير من FidMe للاستيراد، ثم حدد أنواع الباركود يدويًا بعد ذلك. \nقم بإنشاءها من ملفك التعريفي في FidMe عن طريق اختيار \"حماية البيانات\" ثم النقر على \"استخراج بياناتي\".</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>
|
||||
@@ -122,8 +122,8 @@
|
||||
<string name="archived">تمت أرشفة البطاقة</string>
|
||||
<string name="unarchived">البطاقة غير مؤرشفة</string>
|
||||
<string name="failedLaunchingPhotoPicker">تعذر العثور على تطبيق معرض مدعوم</string>
|
||||
<string name="noGiftCardsGroup">أنشئ بعض البطاقات، ثم عيّنهم لهذه المجموعة.</string>
|
||||
<string name="deleteTitle">مسح بطاقة</string>
|
||||
<string name="noGiftCardsGroup">أنشئ بعض البطاقات، ثم عيّنهم لهذه المجموعة</string>
|
||||
<string name="deleteTitle">إحذف بطاقة</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="zero"><xliff:g>%d</xliff:g> محدد</item>
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> محددة</item>
|
||||
@@ -150,23 +150,23 @@
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> بطاقات ( <xliff:g id="archivedCount">%2$d</xliff:g> مؤرشفة)</item>
|
||||
</plurals>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="zero">مسح <xliff:g>%d</xliff:g> بطاقة</item>
|
||||
<item quantity="one">مسح <xliff:g>%d</xliff:g> بطاقة</item>
|
||||
<item quantity="two">مسح <xliff:g>%d</xliff:g> بطاقتين</item>
|
||||
<item quantity="few">مسح <xliff:g>%d</xliff:g> بطائق</item>
|
||||
<item quantity="many">مسح <xliff:g>%d</xliff:g> بطاقة</item>
|
||||
<item quantity="other">مسح <xliff:g>%d</xliff:g> بطاقة</item>
|
||||
<item quantity="zero">إحذف <xliff:g>%d</xliff:g> بطاقة</item>
|
||||
<item quantity="one">إحذف <xliff:g>%d</xliff:g> بطاقة</item>
|
||||
<item quantity="two">إحذف <xliff:g>%d</xliff:g> بطاقتين</item>
|
||||
<item quantity="few">إحذف <xliff:g>%d</xliff:g> بطائق</item>
|
||||
<item quantity="many">إحذف <xliff:g>%d</xliff:g> بطاقة</item>
|
||||
<item quantity="other">إحذف <xliff:g>%d</xliff:g> بطاقة</item>
|
||||
</plurals>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="zero">مسح هذه <xliff:g>%d</xliff:g> البطاقة نهائيا؟</item>
|
||||
<item quantity="one">مسح هذه <xliff:g>%d</xliff:g> البطاقة نهائيا؟</item>
|
||||
<item quantity="two">مسح هذه <xliff:g>%d</xliff:g> البطاقتين نهائيا؟</item>
|
||||
<item quantity="few">مسح هذه <xliff:g>%d</xliff:g> البطاقات نهائيا؟</item>
|
||||
<item quantity="many">مسح هذه <xliff:g>%d</xliff:g> البطاقات نهائيا؟</item>
|
||||
<item quantity="other">مسح هذه <xliff:g>%d</xliff:g> البطاقات نهائيا؟</item>
|
||||
<item quantity="zero">إحذف هذه <xliff:g>%d</xliff:g> البطاقة نهائيا؟</item>
|
||||
<item quantity="one">إحذف هذه <xliff:g>%d</xliff:g> البطاقة نهائيا؟</item>
|
||||
<item quantity="two">إحذف هذه <xliff:g>%d</xliff:g> البطاقتين نهائيا؟</item>
|
||||
<item quantity="few">إحذف هذه <xliff:g>%d</xliff:g> البطاقات نهائيا؟</item>
|
||||
<item quantity="many">إحذف هذه <xliff:g>%d</xliff:g> البطاقات نهائيا؟</item>
|
||||
<item quantity="other">إحذف هذه <xliff:g>%d</xliff:g> البطاقات نهائيا؟</item>
|
||||
</plurals>
|
||||
<string name="importOptionFilesystemTitle">الاستيراد من نظام الملفات</string>
|
||||
<string name="importOptionFilesystemExplanation">اختر ملفًا محددًا من نظام الملفات.</string>
|
||||
<string name="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>
|
||||
@@ -213,7 +213,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">حدد تصديرك من سلسلة مفاتيح بطاقة الولاء للتصدير.\nانشئها من قائمة استيراد/تصدير في سلسلة مفاتيح بطاقة الولاء عبر ضغط زر تصدير.</string>
|
||||
<string name="failedGeneratingShareURL">تعذر إنشاء عنوان URL قابل للمشاركة</string>
|
||||
<string name="help_translate_this_app">ساعد في ترجمة هذا التطبيق</string>
|
||||
<string name="on_google_play">على Google Play</string>
|
||||
@@ -228,17 +228,17 @@
|
||||
<string name="importCards">استيراد البطاقات</string>
|
||||
<string name="newBalanceSentence">الرصيد الجديد: <xliff:g>%s</xliff:g></string>
|
||||
<string name="cameraPermissionDeniedTitle">تعذر الوصول إلى الكاميرا</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">لمسح الباركود، ستحتاج Catima إلى الوصول إلى الكاميرا. اضغط هنا لتغيير إعدادات الأذونات.</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">لمسح الباركود، ستحتاج كاتيما إلى الوصول إلى الكاميرا. اضغط هنا لتغيير إعدادات الأذونات.</string>
|
||||
<string name="updateBalance">تحديث الرصيد</string>
|
||||
<string name="updateBalanceHint">أدخل المبلغ</string>
|
||||
<string name="storageReadPermissionRequired">الصلاحيه للوصل للتخزين مطلوبة لهذا الاجراء…</string>
|
||||
<string name="storageReadPermissionRequired">الصلاحيه للوصول للتخزين مطلوبة لهذا الاجراء…</string>
|
||||
<string name="validFromDate">عربيه</string>
|
||||
<string name="cameraPermissionRequired">إذن للوصول إلى الكاميرا اللازمة لهذا الإجراء…</string>
|
||||
<string name="anyDate">أي تاريخ</string>
|
||||
<string name="chooseValidFromDate">اختر صالح من التاريخ</string>
|
||||
<string name="validFromSentence">صالح من:<xliff:g>%s</xliff:g></string>
|
||||
<string name="height">الطول</string>
|
||||
<string name="permissionReadCardsDescription">اقرأ بطاقتك مع جميع التفاصيل، بما فيه الملاحضات والصور</string>
|
||||
<string name="permissionReadCardsDescription">اقرأ بطاقتك مع جميع التفاصيل، بما فيه الملاحظات والصور</string>
|
||||
<string name="settings_display_barcode_max_brightness_summary">ظروري لعمل بعض الماسحات الضوئية</string>
|
||||
<string name="permissionReadCardsLabel">اقرأ بطاقات كاتيما</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">حقوق النشر © 2019–<xliff:g>%d</xliff:g> Sylvia van Os والمساهمون</string>
|
||||
@@ -280,7 +280,7 @@
|
||||
<string name="spend">انفق</string>
|
||||
<string name="receive">استلم</string>
|
||||
<string name="amountParsingFailed">كمية غير صحيحة</string>
|
||||
<string name="add_manually_warning_message">في بعض المتاجر قيمة الباركود تختلف عن الرقم الموجود على البطاقة. لهذا السبب إدخال الباركود يدوياً لن ينجح دائماً. من المستحسن فحص الباركود بكاميرا بدلا من ذالك. هل انت مُصِر على الاستكمال؟</string>
|
||||
<string name="add_manually_warning_message">بالنسبة لبعض البطاقات، تختلف قيمة الرمز الشريطي عن الرقم المكتوب عليها. لذا، قد لا ينجح إدخال الرمز الشريطي يدويًا دائمًا. يُنصح بمسح الرمز الشريطي باستخدام الكاميرا. هل ما زلت ترغب في المتابعة؟</string>
|
||||
<string name="addFromPdfFile">تحديد ملف PDF</string>
|
||||
<string name="errorReadingFile">لا يمكن قراءة الملف</string>
|
||||
<string name="failedLaunchingFileManager">لم يتم العثور على مدير ملفات مدعوم</string>
|
||||
@@ -291,7 +291,7 @@
|
||||
<string name="exportCancelled">تم الغاء الاستخراج</string>
|
||||
<string name="useFrontImage">استخدام صورة أمامية</string>
|
||||
<string name="useBackImage">استخدم صورة خلفية</string>
|
||||
<string name="addFromPkpass">اختر ملف الدفتر (.pkpass)</string>
|
||||
<string name="addFromPkpass">اختر ملف الدفتر الحساب [Passbook] (.pkpass. / pkpasses)</string>
|
||||
<string name="unsupportedFile">هذا الملف غير مدعوم</string>
|
||||
<string name="generic_error_please_retry">حدث خطأ ما</string>
|
||||
<string name="settings_use_volume_keys_navigation">بدّل البطاقات باستخدام أزرار الصوت</string>
|
||||
@@ -313,4 +313,16 @@
|
||||
<string name="card_list_widget_name">قائمة البطاقات</string>
|
||||
<string name="cardWithNumber">البطاقة <xliff:g>%d</xliff:g></string>
|
||||
<string name="cardWithNumberAndLocale">البطاقة <xliff:g>%d</xliff:g> (<xliff:g>%s</xliff:g>)</string>
|
||||
<string name="card_list_widget_empty">بعد أن تضيف بطاقات الولاء في كاتيما، ستظهر هنا. وإذا كنت تملك البطاقات، تأكد من عدم وجودهن جميعا في الأرشفة.</string>
|
||||
<string name="pleaseDoNotRotateTheDevice">نرجو منك عدم تدوير الجهاز، أو سيُلغى هذا الإجراء</string>
|
||||
<string name="acra_catima_has_crashed">نأسف، لقد توقف <xliff:g id="app_name">%s</xliff:g>. ساعدنا في إصلاح هذه المشكلة من خلال إرسال تقرير للأخطاء.</string>
|
||||
<string name="acra_explain_crash">بقدر الإمكان، نرجو منك أن تضيف مزيدا من المعلومات عمَّ كنت تفعل هنا:</string>
|
||||
<string name="acra_crash_email_subject">تقرير الأخطاء لـ<xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="copy_value">قيمة النسخ</string>
|
||||
<string name="copied_to_clipboard">تم النسخ إلى الحافظة</string>
|
||||
<string name="nothing_to_copy">لم يتم العثور على قيمة</string>
|
||||
<string name="barcodeEncoding">طريقة ترميز الرمز الشريطي \"الباركود\"</string>
|
||||
<string name="back">رجوع</string>
|
||||
<string name="pref_enable_acra">إخطار بإرسال تقارير الأخطاء</string>
|
||||
<string name="pref_enable_acra_summary">عند التفعيل, سيتم سؤالك للابلاغ بالاعطال عندما تحدث. لا ولن يتم الابلاغ بالاعطال تلفائيا.</string>
|
||||
</resources>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<string name="action_add">Дадаць</string>
|
||||
<string name="app_name">Catima</string>
|
||||
<string name="action_search">Пошук</string>
|
||||
<string name="noGiftCards">Націсніце кнопку + плюс, каб дадаць картку, або імпартуйце праз меню ⋮.</string>
|
||||
<string name="noGiftCards">Націсніце кнопку + плюс, каб дадаць картку, або імпартуйце праз меню ⋮</string>
|
||||
<string name="storeName">Назва</string>
|
||||
<string name="star">Дадаць у абраныя</string>
|
||||
<string name="unstar">Выдаліць з абраных</string>
|
||||
@@ -37,7 +37,7 @@
|
||||
<string name="storageReadPermissionRequired">Для гэтага дзеяння патрабуецца дазвол на чытанне сховішча…</string>
|
||||
<string name="cameraPermissionRequired">Для гэтага дзеяння патрабуецца дазвол на доступ да камеры…</string>
|
||||
<string name="permissionReadCardsLabel">Чытаць карты Catima</string>
|
||||
<string name="exportOptionExplanation">Даныя будуць запісаны ў выбранае вамі месца.</string>
|
||||
<string name="exportOptionExplanation">Даныя будуць запісаны ў выбранае вамі месца</string>
|
||||
<string name="importOptionFilesystemExplanation">Выберыце пэўны файл з файлавай сістэмы.</string>
|
||||
<string name="importOptionFilesystemButton">З файлавай сістэмы</string>
|
||||
<string name="about">Аб праграме</string>
|
||||
@@ -65,7 +65,7 @@
|
||||
<string name="importExport">Імпарт/Экспарт</string>
|
||||
<string name="importOptionFilesystemTitle">Імпарт з файлавай сістэмы</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Аўтарскае права © 2019–<xliff:g>%d</xliff:g> Sylvia van Os і суаўтары</string>
|
||||
<string name="importExportHelp">Рэзервовае капіяванне даных дазваляе перанесці іх на іншую прыладу.</string>
|
||||
<string name="importExportHelp">Рэзервовае капіяванне даных дазваляе перанесці іх на іншую прыладу</string>
|
||||
<string name="failedParsingImportUriError">Не атрымалася разабраць URI імпарту</string>
|
||||
<string name="exportFailedTitle">Не ўдалося экспартаваць</string>
|
||||
<string name="exportFailed">Немагчыма выканаць экспарт</string>
|
||||
@@ -308,4 +308,8 @@
|
||||
<string name="card_list_widget_empty">Пасля таго, як вы дадасце некалькі картак лаяльнасці ў Catima, яны з\'явяцца тут. Калі ў вас ёсць карты, пераканайцеся, што яны не ўсе заархіваваны.</string>
|
||||
<string name="acra_catima_has_crashed">Прабачце, але ў праграме <xliff:g id="app_name">%s</xliff:g> адбыўся збой. Калі ласка, дапамажыце нам выправіць гэту праблему, даслаўшы нам справаздачу аб памылцы.</string>
|
||||
<string name="back">Назад</string>
|
||||
<string name="copy_value">Скапіяваць значэнне</string>
|
||||
<string name="copied_to_clipboard">Скапіявана ў буфер абмену</string>
|
||||
<string name="nothing_to_copy">Значэнне не знойдзенае</string>
|
||||
<string name="barcodeEncoding">Кадыяванне штрых-кодаў</string>
|
||||
</resources>
|
||||
|
||||
@@ -300,6 +300,5 @@
|
||||
<string name="copied_to_clipboard">Копирано</string>
|
||||
<string name="nothing_to_copy">Няма стойност</string>
|
||||
<string name="back">Назад</string>
|
||||
<string name="automatic">Автоматично</string>
|
||||
<string name="barcodeEncoding">Кодиране на щрихкода</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" xmlns:tools="http://schemas.android.com/tools">
|
||||
<string name="save">Snimi</string>
|
||||
<string name="cancel">Odustani</string>
|
||||
<string name="unstar">Ukloni iz omiljenih</string>
|
||||
@@ -8,15 +8,15 @@
|
||||
<string name="note">Zabilješka</string>
|
||||
<string name="storeName">Ime</string>
|
||||
<string name="noMatchingGiftCards">Nema rezultata. Pokušaj promijeniti pretragu.</string>
|
||||
<string name="noGiftCards">Kliknite + Plus dugme da dodate kartu ili uvezete nešto iz menija prvo.</string>
|
||||
<string name="noGiftCards">Kliknite na dugme + plus da biste dodali karticu ili je uvezite iz ⋮ menija</string>
|
||||
<string name="action_add">Dodaj</string>
|
||||
<string name="all">Sve</string>
|
||||
<string name="noGroupCards">Ova grupa ne sadrži nikakve karte</string>
|
||||
<string name="noGroups">Kliknite + Plus dugme da dodate grupe za kategorizaciju prvo.</string>
|
||||
<string name="noGroupCards">Ova grupa je prazna</string>
|
||||
<string name="noGroups">Kliknite na dugme + plus da biste dodali grupe za kategorizaciju</string>
|
||||
<string name="groups">Grupe</string>
|
||||
<string name="enter_group_name">Unesite ime grupe</string>
|
||||
<string name="exportSuccessful">Podaci o kartama izvožen</string>
|
||||
<string name="importSuccessful">Uvezeni podaci o kartama</string>
|
||||
<string name="exportSuccessful">Izvezeni podaci</string>
|
||||
<string name="importSuccessful">Uvezeni podaci</string>
|
||||
<string name="intent_import_card_from_url_share_text">Želim podijeliti čestitku s tobom</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Spriječi zaključavanje ekrana</string>
|
||||
<string name="settings_keep_screen_on">Zadrži ekran</string>
|
||||
@@ -28,38 +28,38 @@
|
||||
<string name="importLoyaltyCardKeychain">Uvezi iz Loyalty Card Keychain</string>
|
||||
<string name="importVoucherVault">Uvezi iz trezora vaučer</string>
|
||||
<string name="barcodeId">Barcode vrijednost</string>
|
||||
<string name="sameAsCardId">Isto kao i kartica</string>
|
||||
<string name="sameAsCardId">Isto kao i ID</string>
|
||||
<string name="setBarcodeId">Postavi vrijednost za bar kod</string>
|
||||
<string name="unsupportedBarcodeType">Ovaj bar kod još nije prikazan. Ona može biti podržana u kasnijoj verziji app.</string>
|
||||
<string name="wrongValueForBarcodeType">Izabrana vrijednost nije izvršna</string>
|
||||
<string name="wrongValueForBarcodeType">Vrijednost nije važeća za odabrani tip barkoda</string>
|
||||
<string name="intent_import_card_from_url_share_multiple_text">Želim podijeliti karte s tobom</string>
|
||||
<string name="frontImageDescription">Slika kartice</string>
|
||||
<string name="backImageDescription">Slika pozadine kartice</string>
|
||||
<string name="frontImageDescription">Prednja slika</string>
|
||||
<string name="backImageDescription">Stražnja slika</string>
|
||||
<string name="photos">Slike</string>
|
||||
<string name="setFrontImage">Postavi naslovnu sliku</string>
|
||||
<string name="setBackImage">Vrati sliku</string>
|
||||
<string name="removeImage">Ukloni sliku</string>
|
||||
<string name="takePhoto">Slikaj</string>
|
||||
<string name="updateBarcodeQuestionTitle">Ažurirati bar kod vrijednost\?</string>
|
||||
<string name="updateBarcodeQuestionText">Promijenio si auto. Da li želite ažurirati bar kod koristiti istu vrijednost\?</string>
|
||||
<string name="updateBarcodeQuestionText">Promijenili ste ID. Želite li ažurirati i barkod da koristi istu vrijednost?</string>
|
||||
<string name="yes">Da</string>
|
||||
<string name="no">Ne.</string>
|
||||
<string name="passwordRequired">Upišite šifru</string>
|
||||
<string name="failedGeneratingShareURL">Ne mogu generisati oštriji URL. Molim vas, prijavite ovo.</string>
|
||||
<string name="passwordRequired">Unesite lozinku</string>
|
||||
<string name="failedGeneratingShareURL">Nije moguće generirati URL za dijeljenje</string>
|
||||
<string name="turn_flashlight_on">Upali lampu</string>
|
||||
<string name="turn_flashlight_off">Ugasi lampu</string>
|
||||
<string name="settings_locale">Jezik</string>
|
||||
<string name="settings_system_locale">Sistem</string>
|
||||
<string name="sort">Poništi sortiranje</string>
|
||||
<string name="sort_by_name">Ime</string>
|
||||
<string name="sort_by_most_recently_used">Nedavno Korišten</string>
|
||||
<string name="sort_by_most_recently_used">Najnovije korišteno</string>
|
||||
<string name="sort_by_expiry">Sajam</string>
|
||||
<string name="reverse">Rikverc</string>
|
||||
<string name="reverse">...obrnutim redoslijedom</string>
|
||||
<string name="sort_by">Sortiraj</string>
|
||||
<string name="noCardExistsError">Nisam mogao pronaći tu karticu</string>
|
||||
<string name="noCardExistsError">Nisam mogao/la pronaći tu karticu</string>
|
||||
<string name="noCardsMessage">Dodaj prvo kartu</string>
|
||||
<string name="addCardTitle">Dodaj Kartu</string>
|
||||
<string name="editCardTitle">Izmijeni Karticu</string>
|
||||
<string name="addCardTitle">Dodaj karticu</string>
|
||||
<string name="editCardTitle">Uredi karticu</string>
|
||||
<string name="sendLabel">Pošalji…</string>
|
||||
<string name="share">Podijeli</string>
|
||||
<string name="deleteConfirmation">Izbriši trajno ovu karticu\?</string>
|
||||
@@ -72,25 +72,238 @@
|
||||
<string name="exportFailed">Nisam uspio izvršiti izvoz</string>
|
||||
<string name="app_copyright_old">Bazirano na Loyalty Card privjesku
|
||||
\ncopyright © 2016-2020 Branden Archer</string>
|
||||
<string name="noGiftCardsGroup">Kreirajte kartice, i dodajte ih ovdje u grupu.</string>
|
||||
<string name="importExportHelp">Backupovanje vaših podataka omogućava njihov prenos na drugi uređaj.</string>
|
||||
<string name="noGiftCardsGroup">Napravite nekoliko kartica, a zatim ih dodijelite grupi ovdje</string>
|
||||
<string name="importExportHelp">Pravljenje sigurnosne kopije podataka omogućava njihovo premještanje na drugi uređaj</string>
|
||||
<string name="importSuccessfulTitle">Uvezeno</string>
|
||||
<string name="exportFailedTitle">Izvoz neuspješan</string>
|
||||
<string name="scanCardBarcode">Skeniraj barkod</string>
|
||||
<string name="cardShortcut">Prečica kartice</string>
|
||||
<string name="failedParsingImportUriError">Nisam uspio parsirati URI za uvoz</string>
|
||||
<string name="importExport">Uvoz/Izvoz</string>
|
||||
<string name="failedParsingImportUriError">Nemogu analizirati URI za uvoz</string>
|
||||
<string name="importExport">Uvoz/izvoz</string>
|
||||
<string name="exportName">Izvoz</string>
|
||||
<string name="importFailedTitle">Uvoz neuspješan</string>
|
||||
<string name="importFailed">Nisam uspio odraditi uvoz</string>
|
||||
<string name="exportSuccessfulTitle">Izvezeno</string>
|
||||
<string name="importing">Uvozim…</string>
|
||||
<string name="exporting">Izvozim…</string>
|
||||
<string name="exportOptionExplanation">Ovi podaci će biti zapisani na lokaciju po Vašoj želji.</string>
|
||||
<string name="exportOptionExplanation">Podaci će biti zapisani na lokaciju po vašem izboru</string>
|
||||
<string name="importOptionFilesystemTitle">Uvoz iz file sistema</string>
|
||||
<string name="importOptionFilesystemExplanation">Izaberite specifični file iz file sistema.</string>
|
||||
<string name="importOptionFilesystemExplanation">Odaberite određenu datoteku iz datotečnog sistema</string>
|
||||
<string name="importOptionFilesystemButton">Iz file sistema</string>
|
||||
<string name="about">O</string>
|
||||
<string name="noBarcode">Nema barkoda</string>
|
||||
<string name="deleteTitle">Obriši karticu</string>
|
||||
</resources>
|
||||
<string name="app_name">Catima</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> odabran</item>
|
||||
<item quantity="few"><xliff:g>%d</xliff:g> odabranih</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> odabrano</item>
|
||||
</plurals>
|
||||
<string name="cameraPermissionRequired">Za ovu radnju potrebna je dozvola za pristup kameri…</string>
|
||||
<plurals name="deleteCardsTitle">
|
||||
<item quantity="one">Obriši <xliff:g>%d</xliff:g> karticu</item>
|
||||
<item quantity="few">Obriši <xliff:g>%d</xliff:g> kartice</item>
|
||||
<item quantity="other">Obriši <xliff:g>%d</xliff:g> kartica</item>
|
||||
</plurals>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="one">Trajno izbrisati ovu <xliff:g>%d</xliff:g> karticu?</item>
|
||||
<item quantity="few">Trajno izbrisati ove <xliff:g>%d</xliff:g> kartice?</item>
|
||||
<item quantity="other">Trajno izbrisati ovih <xliff:g>%d</xliff:g> kartica?</item>
|
||||
</plurals>
|
||||
<plurals name="groupCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> kartica</item>
|
||||
<item quantity="few"><xliff:g>%d</xliff:g> kartice</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> kartica</item>
|
||||
</plurals>
|
||||
<plurals name="balancePoints">
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> poen</item>
|
||||
<item quantity="few"><xliff:g>%s</xliff:g> poena</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> poena</item>
|
||||
</plurals>
|
||||
<plurals name="groupCardCountWithArchived">
|
||||
<item quantity="one"><xliff:g>%1$d</xliff:g> kartica (<xliff:g id="archivedCount">%2$d</xliff:g> archived)</item>
|
||||
<item quantity="few"><xliff:g>%1$d</xliff:g> kartice (<xliff:g id="archivedCount">%2$d</xliff:g> archived)</item>
|
||||
<item quantity="other"><xliff:g>%1$d</xliff:g> kartica (<xliff:g id="archivedCount">%2$d</xliff:g> archived)</item>
|
||||
</plurals>
|
||||
<string name="barcodeImageDescriptionWithType">Slika <xliff:g>%s</xliff:g> barkoda</string>
|
||||
<string name="storageReadPermissionRequired">Za ovu radnju potrebna je dozvola za čitanje pohrane…</string>
|
||||
<string name="permissionReadCardsLabel">Čitajte Catima kartice</string>
|
||||
<string name="permissionReadCardsDescription">da pročita vaše Catima kartice i sve njihove detalje, uključujući bilješke i slike</string>
|
||||
<string name="cameraPermissionDeniedTitle">Nije bilo moguće pristupiti kameri</string>
|
||||
<string name="noCameraPermissionDirectToSystemSetting">Za skeniranje barkodova, Catima će trebati pristup vašoj kameri. Dodirnite ovdje da promijenite postavke dozvola.</string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Autorska prava © 2019–<xliff:g>%d</xliff:g> Sylvia van Os i saradnici</string>
|
||||
<string name="app_copyright_short">Autorska prava © Sylvia van Os i saradnici</string>
|
||||
<string name="app_license">Slobodni softver zaštićen autorskim pravom, licenciran pod GPLv3+</string>
|
||||
<string name="about_title_fmt">O aplikaciji <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="debug_version_fmt">Verzija: <xliff:g id="version">%s</xliff:g></string>
|
||||
<string name="app_libraries">Biblioteke trećih strana: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_resources">Resursi trećih strana: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="selectBarcodeTitle">Odaberite barkod</string>
|
||||
<string name="thumbnailDescription">Sličica</string>
|
||||
<string name="settings">Postavke</string>
|
||||
<string name="failedOpeningFileManager">Nije moguće otvoriti upravitelj datoteka</string>
|
||||
<string name="moveUp">Pomakni se prema gore</string>
|
||||
<string name="moveDown">Pomakni se prema dolje</string>
|
||||
<string name="leaveWithoutSaveTitle">Izlaz</string>
|
||||
<string name="leaveWithoutSaveConfirmation">Napustiti bez spremanja?</string>
|
||||
<string name="addManually">Ručno unesite barkod</string>
|
||||
<string name="addFromImage">Odaberite sliku iz galerije</string>
|
||||
<string name="groupsList">Grupe: <xliff:g>%s</xliff:g></string>
|
||||
<string name="editGroup">Grupa za uređivanje: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryStateSentence">Ističe: <xliff:g>%s</xliff:g></string>
|
||||
<string name="expiryStateSentenceExpired">Isteklo: <xliff:g>%s</xliff:g></string>
|
||||
<string name="balanceSentence">Stanje: <xliff:g>%s</xliff:g></string>
|
||||
<string name="card">Kartica</string>
|
||||
<string name="editBarcode">Uredi barkod</string>
|
||||
<string name="expiryDate">Datum isteka</string>
|
||||
<string name="never">Nikad</string>
|
||||
<string name="chooseExpiryDate">Odaberite datum isteka</string>
|
||||
<string name="moveBarcodeToTopOfScreen">Pomaknite barkod na vrh ekrana</string>
|
||||
<string name="noBarcodeFound">Nije pronađen barkod</string>
|
||||
<string name="errorReadingImage">Nisam mogao/la pročitati sliku</string>
|
||||
<string name="balance">Stanje</string>
|
||||
<string name="currency">Valuta</string>
|
||||
<string name="points">Bodovi</string>
|
||||
<string name="balanceParsingFailed">Nevažeći saldo</string>
|
||||
<string name="chooseImportType">Uvoz podataka iz</string>
|
||||
<string name="app_loyalty_card_keychain">Privjesak za ključeve s karticom vjernosti</string>
|
||||
<string name="privacy_policy">Politika privatnosti</string>
|
||||
<string name="accept">Prihvati</string>
|
||||
<string name="importFidme">Uvoz iz FidMe-a</string>
|
||||
<string name="importFidmeMessage">Odaberite izvoz iz FidMe-a za uvoz i nakon toga ručno odaberite vrste barkodova. \nKreirajte ga iz svog FidMe profila odabirom Zaštita podataka, a zatim pritiskom na Izdvoji moje podatke.</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Odaberite svoj izvoz iz Privjeska za ključeve s karticom vjernosti za uvoz.\nKreirajte ga iz menija Uvoz/Izvoz u Privjesku za ključeve s karticom vjernosti pritiskom na Izvoz.</string>
|
||||
<string name="importVoucherVaultMessage">Odaberite izvoz iz Voucher Vaulta za uvoz. \nKreirajte ga pritiskom na Izvoz u Voucher Vaultu.</string>
|
||||
<string name="switchToBarcode">Prebaci na barkod</string>
|
||||
<string name="openFrontImageInGalleryApp">Otvorite prednju sliku u aplikaciji za pregled slika</string>
|
||||
<string name="switchToBackImage">Prebaci na sliku iz pozadine</string>
|
||||
<string name="switchToFrontImage">Prebaci na prednju sliku</string>
|
||||
<string name="height">Visina</string>
|
||||
<string name="validFromSentence">Važi od: <xliff:g>%s</xliff:g></string>
|
||||
<string name="chooseValidFromDate">Odaberite datum važenja od</string>
|
||||
<string name="anyDate">Bilo koji datum</string>
|
||||
<string name="validFromDate">Vrijedi od</string>
|
||||
<string name="newBalanceSentence">Novo stanje: <xliff:g>%s</xliff:g></string>
|
||||
<string name="currentBalanceSentence">Trenutno stanje: <xliff:g>%s</xliff:g></string>
|
||||
<string name="updateBalanceHint">Unesite iznos</string>
|
||||
<string name="updateBalanceTitle">Koliko ste potrošili ili primili?</string>
|
||||
<string name="importCards">Uvezi kartice</string>
|
||||
<string name="welcome">Dobrodošli u Catima</string>
|
||||
<string name="failedToOpenUrl">Prvo instalirajte web preglednik</string>
|
||||
<string name="nextCard">Sljedeće</string>
|
||||
<string name="previousCard">Prethodno</string>
|
||||
<string name="failedLaunchingPhotoPicker">Nemogu pronaći podržani alat za odabir slika</string>
|
||||
<string name="unarchived">Kartica je vraćena iz arhive</string>
|
||||
<string name="archived">Kartica je arhivirana</string>
|
||||
<string name="unarchive">Vrati iz arhive</string>
|
||||
<string name="archive">Arhiva</string>
|
||||
<string name="duplicateCard">Duplikat</string>
|
||||
<string name="include_if_asking_support">Ako želite zatražiti podršku, uključite sljedeće informacije:</string>
|
||||
<string name="starred">Označeno zvjezdicom</string>
|
||||
<string name="options">Opcije</string>
|
||||
<string name="shortcutSelectCard">Odaberite karticu</string>
|
||||
<string name="translate_platform">na Weblateu</string>
|
||||
<string name="report_error">Prijavi grešku</string>
|
||||
<string name="on_google_play">na Google Play</string>
|
||||
<string name="rate_this_app">Ocijenite ovu aplikaciju</string>
|
||||
<string name="and_data_usage">i korištenje podataka</string>
|
||||
<string name="on_github">na GitHubu</string>
|
||||
<string name="source_repository">Izvorni repozitorij</string>
|
||||
<string name="license">Licenca</string>
|
||||
<string name="help_translate_this_app">Pomozite u prevođenju ove aplikacije</string>
|
||||
<string name="credits">Zasluge</string>
|
||||
<string name="version_history">Historija verzija</string>
|
||||
<string name="sort_by_valid_from">Vrijedi od</string>
|
||||
<string name="barcodeLongPressMessage">U aplikaciji galerija mogu se otvoriti samo slike</string>
|
||||
<string name="failedToRetrieveImageFile">Neuspjevam preuzimanje slikovne datoteke</string>
|
||||
<string name="updateBalance">Ažuriraj stanje</string>
|
||||
<string name="showMoreInfo">Prikaži informacije</string>
|
||||
<string name="app_contributors">Omogućeno zahvaljujući: <xliff:g id="app_contributors">%s</xliff:g></string>
|
||||
<string name="setIcon">Postavi sličicu</string>
|
||||
<string name="selectColor">Odaberite boju</string>
|
||||
<string name="settings_oled_dark_summary">Smanjuje potrošnju baterije na OLED ekranima</string>
|
||||
<string name="settings_oled_dark">Čisto crna pozadina za tamnu temu</string>
|
||||
<string name="exportPasswordHint">Unesite lozinku</string>
|
||||
<string name="exportPassword">Postavite lozinku za zaštitu izvoza (opcionalno)</string>
|
||||
<string name="back">Nazad</string>
|
||||
<string name="barcodeEncoding">Kodiranje barkoda</string>
|
||||
<string name="nothing_to_copy">Nije pronađena vrijednost</string>
|
||||
<string name="settings_dark_theme">Tamno</string>
|
||||
<string name="settings_display_barcode_max_brightness">Posvijetli ekran</string>
|
||||
<string name="settings_display_barcode_max_brightness_summary">Neophodno za rad nekih skenera</string>
|
||||
<string name="settings_keep_screen_on_summary">Onemogućava istek vremena ekrana tokom pregleda kartice</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card_summary">Onemogućava zaključavanje ekrana tokom pregleda kartice</string>
|
||||
<string name="settings_allow_content_provider_read_title">Dozvoli drugim aplikacijama pristup mojim podacima</string>
|
||||
<string name="settings_allow_content_provider_read_summary">Aplikacije će i dalje morati tražiti dozvolu za pristup</string>
|
||||
<string name="settings_use_volume_keys_navigation">Prebacivanje kartica pomoću tipki za jačinu zvuka</string>
|
||||
<string name="settings_use_volume_keys_navigation_summary">Koristite tipke za jačinu zvuka da promijenite koja se kartica prikazuje</string>
|
||||
<string name="group_edit">Uredi grupu</string>
|
||||
<string name="group_name_already_in_use">Naziv grupe se već koristi</string>
|
||||
<string name="group_name_is_empty">Naziv grupe ne smije biti prazan</string>
|
||||
<string name="group_updated">Grupa ažurirana</string>
|
||||
<string name="deleteConfirmationGroup">Izbrisati grupu?</string>
|
||||
<string name="openBackImageInGalleryApp">Otvori sliku pozadi u aplikaciji za pregled slika</string>
|
||||
<string name="setBarcodeHeight">Postavi visinu barkoda</string>
|
||||
<string name="donate">Donirajte</string>
|
||||
<string name="icon_header_click_text">Dugo pritisnite za uređivanje sličice</string>
|
||||
<string name="show_name_below_image_thumbnail">Prikaži ime ispod sličice slike</string>
|
||||
<string name="show_note">Prikaži bilješku</string>
|
||||
<string name="show_balance">Prikaži stanje</string>
|
||||
<string name="show_validity">Prikaži validnost</string>
|
||||
<string name="settings_category_title_cards">Prikaz kartice</string>
|
||||
<string name="settings_category_title_cards_overview">Pregled kartica</string>
|
||||
<string name="settings_column_count_portrait">Kolone u portretnom načinu rada</string>
|
||||
<string name="settings_column_count_landscape">Kolone u pejzažnom načinu rada</string>
|
||||
<string name="settings_automatic_column_count">Automatski</string>
|
||||
<string name="settings_column_count_1">1</string>
|
||||
<string name="settings_column_count_2">2</string>
|
||||
<string name="settings_column_count_3">3</string>
|
||||
<string name="settings_column_count_4">4</string>
|
||||
<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="settings_category_title_general">Općenito</string>
|
||||
<string name="settings_category_title_privacy">Privatnost</string>
|
||||
<string name="action_display_options">Opcije prikaza</string>
|
||||
<string name="show_archived_cards">Prikaži arhivirane kartice</string>
|
||||
<string name="view_online">Pogledajte online</string>
|
||||
<string name="action_more_options">Više opcija</string>
|
||||
<string name="addWithoutBarcode">Dodajte karticu bez barkoda</string>
|
||||
<string name="enter_card_id">Unesite ID broj ili tekst sa vaše kartice</string>
|
||||
<string name="card_id_must_not_be_empty">ID kartice ne smije biti prazan</string>
|
||||
<string name="add_a_card_in_a_different_way">Dodajte karticu na drugačiji način</string>
|
||||
<string name="field_must_not_be_empty">Polje ne smije biti prazno</string>
|
||||
<string name="manually_enter_barcode_instructions">Unesite ID broj ili tekst sa vaše kartice i pritisnite barkod koji izgleda kao onaj na vašoj kartici.</string>
|
||||
<string name="add_manually_warning_title">Preporučuje se skeniranje</string>
|
||||
<string name="add_manually_warning_message">Za neke kartice, vrijednost barkoda se razlikuje od broja napisanog na kartici. Zbog toga, ručni unos barkoda možda neće uvijek funkcionirati. Preporučuje se skeniranje barkoda kamerom. Želite li i dalje nastaviti?</string>
|
||||
<string name="continue_">Nastavi</string>
|
||||
<string name="spend">Potroši</string>
|
||||
<string name="receive">Primi</string>
|
||||
<string name="amountParsingFailed">Nevažeći iznos</string>
|
||||
<string name="addFromPdfFile">Odaberite PDF datoteku</string>
|
||||
<string name="errorReadingFile">Nisam mogao pročitati datoteku</string>
|
||||
<string name="failedLaunchingFileManager">Nije pronađen podržani upravitelj datoteka</string>
|
||||
<string name="multipleBarcodesFoundPleaseChooseOne">Koji od pronađenih barkodova želite koristiti?</string>
|
||||
<string name="pageWithNumber">Stranica <xliff:g>%d</xliff:g></string>
|
||||
<string name="noCameraFoundGuideText">Izgleda da vaš uređaj nema kameru. Ako je ima, pokušajte ponovo pokrenuti uređaj. U suprotnom, koristite dugme Više opcija ispod da biste dodali barkod na drugi način.</string>
|
||||
<string name="importCancelled">Uvoz otkazan</string>
|
||||
<string name="exportCancelled">Izvoz otkazan</string>
|
||||
<string name="useFrontImage">Koristi prednju sliku</string>
|
||||
<string name="useBackImage">Koristi sliku sa zadnje strane</string>
|
||||
<string name="addFromPkpass">Odaberite Passbook datoteku (.pkpass / .pkpasses)</string>
|
||||
<string name="unsupportedFile">Ova datoteka nije podržana</string>
|
||||
<string name="generic_error_please_retry">Došlo je do greške</string>
|
||||
<string name="width">Širina</string>
|
||||
<string name="card_list_widget_name">Lista kartica</string>
|
||||
<string name="setBarcodeWidth">Postavi širinu barkoda</string>
|
||||
<string name="card_list_widget_empty">Nakon što dodate neke kartice vjernosti u Catima, one će se pojaviti ovdje. Ako imate kartice, provjerite da nisu sve arhivirane.</string>
|
||||
<string name="cardWithNumber">Kartica <xliff:g>%d</xliff:g></string>
|
||||
<string name="cardWithNumberAndLocale">Kartica <xliff:g>%d</xliff:g> (<xliff:g>%s</xliff:g>)</string>
|
||||
<string name="pleaseDoNotRotateTheDevice">Molimo vas da ne rotirate uređaj, jer će to prekinuti radnju</string>
|
||||
<string name="acra_catima_has_crashed">Žao nam je, ali aplikacija <xliff:g id="app_name">%s</xliff:g> se srušila. Molimo vas da nam pomognete da riješimo ovaj problem slanjem izvještaja o grešci.</string>
|
||||
<string name="acra_explain_crash">Ako je moguće, molimo vas da dodate više detalja o tome šta ste ovdje radili:</string>
|
||||
<string name="acra_crash_email_subject">Izvještaj o padu aplikacije <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="pref_enable_acra">Zatraži slanje izvještaja o padu programa</string>
|
||||
<string name="pref_enable_acra_summary">Kada je omogućeno, bit ćete upitani da prijavite pad sistema kada se dogodi. Izvještaji o padu sistema se nikada ne šalju automatski.</string>
|
||||
<string name="copy_value">Kopiraj vrijednost</string>
|
||||
<string name="copied_to_clipboard">Kopirano u međuspremnik</string>
|
||||
</resources>
|
||||
|
||||
@@ -306,6 +306,5 @@
|
||||
<string name="copied_to_clipboard">Zkopírováno do schránky</string>
|
||||
<string name="nothing_to_copy">Nenalezena žádná hodnota</string>
|
||||
<string name="barcodeEncoding">Kódování čárového kódu</string>
|
||||
<string name="automatic">Automatické</string>
|
||||
<string name="back">Zpět</string>
|
||||
</resources>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
<string name="note">Bemærk</string>
|
||||
<string name="storeName">Navn</string>
|
||||
<string name="noMatchingGiftCards">Ingen resultater. Prøv at ændre din søgning.</string>
|
||||
<string name="noGiftCards">Klik på + plus-knappen for at tilføje et kort, eller importer kort fra ⋮ menuen.</string>
|
||||
<string name="noGiftCards">Klik på + plus-knappen for at tilføje et kort, eller importer kort fra ⋮ menuen</string>
|
||||
<plurals name="selectedCardCount">
|
||||
<item quantity="one"><xliff:g>%d</xliff:g> valgt kort</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> valgte kort</item>
|
||||
|
||||
@@ -300,6 +300,5 @@
|
||||
<string name="copied_to_clipboard">In die Zwischenablage kopiert</string>
|
||||
<string name="nothing_to_copy">Keinen Betrag gefunden</string>
|
||||
<string name="barcodeEncoding">Barcode-Kodierung</string>
|
||||
<string name="automatic">Automatisch</string>
|
||||
<string name="back">Zurück</string>
|
||||
</resources>
|
||||
|
||||
@@ -299,7 +299,6 @@
|
||||
<string name="copy_value">Αντιγραφή τιμής</string>
|
||||
<string name="copied_to_clipboard">Αντιγράφηκε στο πρόχειρο</string>
|
||||
<string name="nothing_to_copy">Δεν βρέθηκε τιμή</string>
|
||||
<string name="automatic">Αυτόματη</string>
|
||||
<string name="barcodeEncoding">Κωδικοποίηση γραμμωτού κώδικα</string>
|
||||
<string name="back">Πίσω</string>
|
||||
</resources>
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<string name="edit">Editar</string>
|
||||
<string name="delete">Eliminar</string>
|
||||
<string name="confirm">Confirmar</string>
|
||||
<string name="ok">De acuerdo</string>
|
||||
<string name="ok">Aceptar</string>
|
||||
<string name="sendLabel">Enviar…</string>
|
||||
<string name="editCardTitle">Editar tarjeta</string>
|
||||
<string name="addCardTitle">Añadir tarjeta</string>
|
||||
@@ -134,7 +134,7 @@
|
||||
<item quantity="many"><xliff:g>%d</xliff:g> seleccionadas</item>
|
||||
<item quantity="other"><xliff:g>%d</xliff:g> seleccionadas</item>
|
||||
</plurals>
|
||||
<string name="deleteTitle">Eliminar la tarjeta</string>
|
||||
<string name="deleteTitle">Eliminar tarjeta</string>
|
||||
<string name="deleteConfirmation">¿Quiere eliminar permanentemente esta tarjeta\?</string>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="one">¿Borrar esta tarjeta <xliff:g>%d</xliff:g> permanentemente\?</item>
|
||||
@@ -305,4 +305,6 @@
|
||||
<string name="copy_value">Copia valor</string>
|
||||
<string name="copied_to_clipboard">Copiado al portapapeles</string>
|
||||
<string name="nothing_to_copy">Ningún valor encontrado</string>
|
||||
<string name="barcodeEncoding">Codificación de barra de código</string>
|
||||
<string name="back">Atrás</string>
|
||||
</resources>
|
||||
|
||||
@@ -300,6 +300,5 @@
|
||||
<string name="copied_to_clipboard">Kopeeritud lõikelauale</string>
|
||||
<string name="nothing_to_copy">Ühtegi väärtust ei leidu</string>
|
||||
<string name="barcodeEncoding">Triipkoodi kodeerimine</string>
|
||||
<string name="automatic">Automaatne</string>
|
||||
<string name="back">Tagasi</string>
|
||||
</resources>
|
||||
|
||||
@@ -305,4 +305,6 @@
|
||||
<string name="copy_value">Copier la valeur</string>
|
||||
<string name="copied_to_clipboard">Copié dans le presse-papier</string>
|
||||
<string name="nothing_to_copy">Aucune valeur trouvée</string>
|
||||
<string name="barcodeEncoding">Encodage du code-barres</string>
|
||||
<string name="back">Retour</string>
|
||||
</resources>
|
||||
|
||||
@@ -298,4 +298,6 @@
|
||||
<string name="copy_value">Copiar valor</string>
|
||||
<string name="copied_to_clipboard">Copiado ao portapapeis</string>
|
||||
<string name="nothing_to_copy">Non hai ningún valor</string>
|
||||
<string name="barcodeEncoding">Códificación do código de barras</string>
|
||||
<string name="back">Volver</string>
|
||||
</resources>
|
||||
|
||||
@@ -302,4 +302,7 @@
|
||||
<string name="acra_crash_email_subject">Izvještaj o prekidu rada aplikacije <xliff:g id="app_name">%s</xliff:g></string>
|
||||
<string name="pref_enable_acra">Pitaj da li poslati izvještaj o prekidu rada aplikacije</string>
|
||||
<string name="pref_enable_acra_summary">Kada je uključeno, zamolit ćemo te da prijaviš prekid rada aplikacije kada se dogodi. Izvještaji o prekidu rada se nikada ne šalju automatski.</string>
|
||||
<string name="copied_to_clipboard">Kopirano u međuspremnik</string>
|
||||
<string name="back">Natrag</string>
|
||||
<string name="copy_value">Kopiraj vrijednost</string>
|
||||
</resources>
|
||||
|
||||
@@ -305,4 +305,6 @@
|
||||
<string name="copy_value">Copia valore</string>
|
||||
<string name="copied_to_clipboard">Copiato negli appunti</string>
|
||||
<string name="nothing_to_copy">Nessun valore trovato</string>
|
||||
<string name="barcodeEncoding">Codifica codici a barre</string>
|
||||
<string name="back">Indietro</string>
|
||||
</resources>
|
||||
|
||||
@@ -292,4 +292,6 @@
|
||||
<string name="copy_value">値をコピー</string>
|
||||
<string name="copied_to_clipboard">クリップボードへコピー</string>
|
||||
<string name="nothing_to_copy">値が見つかりません</string>
|
||||
<string name="barcodeEncoding">バーコードの符号化</string>
|
||||
<string name="back">戻る</string>
|
||||
</resources>
|
||||
|
||||
@@ -305,4 +305,6 @@
|
||||
<string name="copy_value">Ievietot vērtību starpliktuvē</string>
|
||||
<string name="copied_to_clipboard">Ievietots starpliktuvē</string>
|
||||
<string name="nothing_to_copy">Nav atrasta vērtība</string>
|
||||
<string name="barcodeEncoding">Svītrkoda šifrēšana</string>
|
||||
<string name="back">Atpakaļ</string>
|
||||
</resources>
|
||||
|
||||
@@ -299,4 +299,6 @@
|
||||
<string name="nothing_to_copy">Geen waarde gevonden</string>
|
||||
<string name="copied_to_clipboard">Gekopieerd naar klembord</string>
|
||||
<string name="copy_value">Kopieer waarde</string>
|
||||
<string name="back">Terug</string>
|
||||
<string name="barcodeEncoding">Barcodecodering</string>
|
||||
</resources>
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
<string name="noCardsMessage">Najpierw dodaj kartę</string>
|
||||
<string name="noCardExistsError">Nie można znaleźć tej karty</string>
|
||||
<string name="failedParsingImportUriError">Nie można przeanalizować identyfikatora importu URL</string>
|
||||
<string name="importExport">Importuj/Eksportuj</string>
|
||||
<string name="importExport">Import/eksport</string>
|
||||
<string name="exportName">Eksportuj</string>
|
||||
<string name="importExportHelp">Kopie zapasowe umożliwiają przeniesienie danych na inne urządzenie.</string>
|
||||
<string name="importSuccessfulTitle">Zaimportowano</string>
|
||||
@@ -51,7 +51,7 @@
|
||||
<string name="intent_import_card_from_url_share_text">Chcę udostępnić Ci kartę lojalnościową</string>
|
||||
<string name="deleteConfirmationGroup">Usunąć grupę\?</string>
|
||||
<string name="all">Wszystko</string>
|
||||
<string name="noGroups">Kliknij przycisk + plus, aby dodać grupy do kategoryzacji.</string>
|
||||
<string name="noGroups">Kliknij przycisk +, aby dodać grupy do kategoryzacji</string>
|
||||
<string name="groups">Grupy</string>
|
||||
<string name="enter_group_name">Wpisz nazwę grupy</string>
|
||||
<string name="exportSuccessful">Dane zostały wyeksportowane</string>
|
||||
@@ -71,8 +71,8 @@
|
||||
<string name="settings_locale">Język</string>
|
||||
<string name="turn_flashlight_off">Wyłącz latarkę</string>
|
||||
<string name="turn_flashlight_on">Włącz latarkę</string>
|
||||
<string name="failedGeneratingShareURL">Nie można wygenerować adresu URL do udostępnienia. Proszę to zgłosić.</string>
|
||||
<string name="passwordRequired">Proszę wpisać hasło</string>
|
||||
<string name="failedGeneratingShareURL">Nie można wygenerować adresu URL do udostępnienia</string>
|
||||
<string name="passwordRequired">Wprowadź hasło</string>
|
||||
<string name="no">Nie</string>
|
||||
<string name="yes">Tak</string>
|
||||
<string name="updateBarcodeQuestionText">Zmieniłeś ID. Czy chcesz zaktualizować kod kreskowy, aby używał tej samej wartości\?</string>
|
||||
@@ -90,17 +90,13 @@
|
||||
<string name="setBarcodeId">Ustaw wartość kodu kreskowego</string>
|
||||
<string name="sameAsCardId">Taki sam jak ID</string>
|
||||
<string name="barcodeId">Wartość kodu kreskowego</string>
|
||||
<string name="importVoucherVaultMessage">Wybierz swój <i>vouchervault.json</i> z Voucher Vault, aby zaimportować.
|
||||
\nUtwórz go wpierw klikając Eksportuj w Voucher Vault.</string>
|
||||
<string name="importVoucherVaultMessage">Wybierz swój plik eksportu z Voucher Vault, aby zaimportować. \nUtwórz go wybierając Eksportuj w Voucher Vault.</string>
|
||||
<string name="importVoucherVault">Importuj z Voucher Vault</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Wybierz swój <i>LoyaltyCardKeychain.csv</i> z Loyalty Card Keychain, aby zaimportować.
|
||||
\nUtwórz go z menu Importuj/Eksportuj w Loyalty Card Keychain, wpierw klikając tam Eksportuj.</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">Wybierz swój plik eksportu z Loyalty Card Keychain, aby zaimportować. \nUtwórz go z menu Import/eksport w Loyalty Card Keychain, wybierając opcję Eksportuj.</string>
|
||||
<string name="importLoyaltyCardKeychain">Importuj z Loyalty Card Keychain</string>
|
||||
<string name="importFidmeMessage">Wybierz swój <i>fidme-export-request-xxxxxx.zip</i> z FidMe, aby zaimportować, po czym wybierz typy kodów kreskowych.
|
||||
\nStwórz go ze swojego profilu FidMe, wybierając wpierw Ochrona Danych, a następnie naciskając Wyodrębnij moje dane.</string>
|
||||
<string name="importFidmeMessage">Wybierz swój plik eksportu z FidMe, aby zaimportować, po czym wybierz typy kodów kreskowych. \nStwórz go ze swojego profilu FidMe, wybierając Ochrona Danych, a następnie Wyodrębnij moje dane.</string>
|
||||
<string name="importFidme">Importuj z FidMe</string>
|
||||
<string name="importCatimaMessage">Wybierz swój <i>catima.zip</i> z Catima, aby zaimportować.
|
||||
\nUtwórz go z menu Importuj/Eksportuj innej aplikacji Catima, wpierw klikając tam Eksportuj.</string>
|
||||
<string name="importCatimaMessage">Wybierz swój plik eksportu z Catima, aby zaimportować. \nUtwórz go z menu Import/eksport innej aplikacji Catima poprzez wybór opcji Eksport.</string>
|
||||
<string name="importCatima">Importuj z Catima</string>
|
||||
<string name="accept">Zaakceptuj</string>
|
||||
<string name="privacy_policy">Polityka prywatności</string>
|
||||
@@ -109,7 +105,7 @@
|
||||
<string name="points">Punkty</string>
|
||||
<string name="currency">Waluta</string>
|
||||
<string name="balance">Saldo</string>
|
||||
<string name="errorReadingImage">Nie udało się odczytać zdjęcia</string>
|
||||
<string name="errorReadingImage">Odczytanie zdjęcia nie powiodło się</string>
|
||||
<string name="noBarcodeFound">Nie znaleziono kodu kreskowego</string>
|
||||
<string name="moveBarcodeToTopOfScreen">Przenieś kod kreskowy na górę ekranu</string>
|
||||
<string name="chooseExpiryDate">Wybierz datę wygaśnięcia</string>
|
||||
@@ -137,8 +133,8 @@
|
||||
<string name="noGroupCards">Ta grupa jest pusta</string>
|
||||
<string name="settings_disable_lockscreen_while_viewing_card">Zapobiegaj wyłączeniu ekranu</string>
|
||||
<string name="settings_keep_screen_on">Nie wygaszaj ekranu</string>
|
||||
<string name="app_resources">Otwarte zewnętrzne zasoby: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="app_libraries">Otwarte zewnętrzne biblioteki: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_resources">Zasoby zewnętrzne: <xliff:g id="app_resources_list">%s</xliff:g></string>
|
||||
<string name="app_libraries">Biblioteki zewnętrzne: <xliff:g id="app_libraries_list">%s</xliff:g></string>
|
||||
<string name="app_copyright_fmt" tools:ignore="PluralsCandidate">Wszelkie prawa zastrzeżone © 2019–<xliff:g>%d</xliff:g> Sylvia van Os i współtwórcy</string>
|
||||
<plurals name="deleteCardsConfirmation">
|
||||
<item quantity="one">Usunąć tą <xliff:g>%d</xliff:g> kartę permamentnie\?</item>
|
||||
@@ -184,7 +180,7 @@
|
||||
<string name="group_name_already_in_use">Ta nazwa jest już w użytku</string>
|
||||
<string name="group_name_is_empty">Nazwa grupy nie może być pusta</string>
|
||||
<string name="group_updated">Zaktualizowano grupę</string>
|
||||
<string name="editGroup">Edytowanie grupy: <xliff:g>%s</xliff:g></string>
|
||||
<string name="editGroup">Edycja grupy: <xliff:g>%s</xliff:g></string>
|
||||
<string name="exportPassword">Ustaw hasło, aby zabezpieczyć twoje wyeksportowane dane (opcjonalne)</string>
|
||||
<string name="exportPasswordHint">Wpisz hasło</string>
|
||||
<string name="options">Opcje</string>
|
||||
@@ -243,7 +239,7 @@
|
||||
<string name="show_balance">Pokaż balans</string>
|
||||
<string name="show_validity">Pokaż ważność</string>
|
||||
<string name="show_note">Pokaż notatkę</string>
|
||||
<string name="permissionReadCardsLabel">Odczytaj Karty Catima</string>
|
||||
<string name="permissionReadCardsLabel">Odczytaj karty Catima</string>
|
||||
<string name="permissionReadCardsDescription">odczytywanie swoich kart Catima i ich szczegółów, włącznie z notatkami i obrazkami</string>
|
||||
<string name="settings_allow_content_provider_read_title">Pozwól innym aplikacjom na dostęp do moich danych</string>
|
||||
<string name="settings_display_barcode_max_brightness_summary">Potrzebne aby niektóre skanery działały</string>
|
||||
@@ -275,9 +271,9 @@
|
||||
<string name="receive">Otrzymaj</string>
|
||||
<string name="amountParsingFailed">Nieprawidłowa ilość</string>
|
||||
<string name="add_manually_warning_title">Skanowanie jest zalecane</string>
|
||||
<string name="failedLaunchingFileManager">Nie można znaleźć obsługiwanego menedżera plików</string>
|
||||
<string name="failedLaunchingFileManager">Nie można znaleźć wspieranego menedżera plików</string>
|
||||
<string name="multipleBarcodesFoundPleaseChooseOne">Którego ze znalezionych kodów kreskowych chciałbyś użyć?</string>
|
||||
<string name="add_manually_warning_message">W przypadku niektórych sklepów wartość kodu kreskowego różni się od liczby zapisanej na karcie. Z tego powodu ręczne wprowadzanie kodu kreskowego może nie zawsze działać. Zdecydowanie zaleca się zeskanowanie kodu kreskowego za pomocą aparatu. Czy nadal chcesz kontynuować?</string>
|
||||
<string name="add_manually_warning_message">W przypadku niektórych kart wartość kodu kreskowego różni się od liczby zapisanej na karcie. Z tego powodu ręczne wprowadzanie kodu kreskowego może nie zawsze działać. Zaleca się zeskanowanie kodu kreskowego za pomocą aparatu. Czy nadal chcesz kontynuować?</string>
|
||||
<string name="noCameraFoundGuideText">Nie wykryto kamery. Jeśli twoje urządzenie posiada kamerę, spróbuj uruchomić je ponownie. W innym wypadku wybierz Więcej opcji i dodaj kartę w inny sposób.</string>
|
||||
<string name="importCancelled">Import anulowany</string>
|
||||
<string name="exportCancelled">Eksport anulowany</string>
|
||||
@@ -298,17 +294,21 @@
|
||||
<string name="settings_column_count_1">1</string>
|
||||
<string name="addFromPkpass">Wybierz plik Passbook (.pkpass / .pkpasses)</string>
|
||||
<string name="unsupportedFile">Ten plik nie jest obsługiwany</string>
|
||||
<string name="generic_error_please_retry">Coś poszło nie tak, spróbuj ponownie później...</string>
|
||||
<string name="sort_by_valid_from">Poprawna forma</string>
|
||||
<string name="generic_error_please_retry">Wystąpił błąd</string>
|
||||
<string name="sort_by_valid_from">Ważne od</string>
|
||||
<string name="setBarcodeWidth">Ustaw szerokość kodu kreskowego</string>
|
||||
<string name="width">Szerokość</string>
|
||||
<string name="card_list_widget_empty">Karty lojalnościowe dodane w aplikacji Catima pokażą się tutaj. Jeżeli masz jakieś karty, upewnij się że nie są one zarchiwizowane.</string>
|
||||
<string name="card_list_widget_name">Lista kart</string>
|
||||
<string name="cardWithNumber">Karta <xliff:g>%d</xliff:g></string>
|
||||
<string name="cardWithNumberAndLocale">Karta <xliff:g>%d</xliff:g> (%s)</string>
|
||||
<string name="cardWithNumberAndLocale">Karta <xliff:g>%d</xliff:g> (<xliff:g>%s</xliff:g>)</string>
|
||||
<string name="pleaseDoNotRotateTheDevice">Proszę nie obracać urządzenia, gdyż anuluje to obecne zadanie</string>
|
||||
<string name="acra_explain_crash">Jeśli możliwe, dodaj więcej szczegółów na temat co robiłeś/aś tutaj:</string>
|
||||
<string name="acra_crash_email_subject"><xliff:g id="app_name">%s</xliff:g> raport błędu</string>
|
||||
<string name="pref_enable_acra">Zapytaj o wysłanie raportu błędu</string>
|
||||
<string name="pref_enable_acra_summary">Kiedy zaznaczone, będziesz proszony/a o zgłoszenie raportu błędu, gdyby zaistniał. Raporty błędu nigdy nie są wysyłane automatycznie.</string>
|
||||
<string name="acra_catima_has_crashed">Przepraszamy, ale aplikacja <xliff:g id="app_name">%s</xliff:g> uległa awarii. Prosimy o pomoc w rozwiązaniu tego problemu poprzez przesłanie nam raportu o błędzie.</string>
|
||||
<string name="copy_value">Kopiuj wartość</string>
|
||||
<string name="copied_to_clipboard">Skopiowano do schowka</string>
|
||||
<string name="nothing_to_copy">Nie znaleziono wartości</string>
|
||||
</resources>
|
||||
|
||||
@@ -305,4 +305,6 @@
|
||||
<string name="copy_value">Copiar valor</string>
|
||||
<string name="copied_to_clipboard">Copiado para a área de transferência</string>
|
||||
<string name="nothing_to_copy">Nenhum valor encontrado</string>
|
||||
<string name="barcodeEncoding">codificação de código de barras</string>
|
||||
<string name="back">Voltar</string>
|
||||
</resources>
|
||||
|
||||
@@ -304,4 +304,6 @@
|
||||
<string name="copy_value">Copiar valor</string>
|
||||
<string name="copied_to_clipboard">Copiado para a área de transferência</string>
|
||||
<string name="nothing_to_copy">Nenhum valor encontrado</string>
|
||||
<string name="barcodeEncoding">codificação de código de barras</string>
|
||||
<string name="back">Voltar</string>
|
||||
</resources>
|
||||
|
||||
@@ -311,4 +311,6 @@
|
||||
<string name="copy_value">Скопировать значение</string>
|
||||
<string name="copied_to_clipboard">Скопировано в буфер обмена</string>
|
||||
<string name="nothing_to_copy">Значение не найдено</string>
|
||||
<string name="barcodeEncoding">Кодировка штрих-кода</string>
|
||||
<string name="back">Назад</string>
|
||||
</resources>
|
||||
|
||||
@@ -310,4 +310,6 @@
|
||||
<string name="copy_value">Kopiraj vrednost</string>
|
||||
<string name="copied_to_clipboard">Kopirano v odložišče</string>
|
||||
<string name="nothing_to_copy">Nobena vrednost ni najdena</string>
|
||||
<string name="barcodeEncoding">Kodiranje črtne kode</string>
|
||||
<string name="back">Nazaj</string>
|
||||
</resources>
|
||||
|
||||
@@ -299,4 +299,6 @@
|
||||
<string name="copy_value">Kopiera värde</string>
|
||||
<string name="copied_to_clipboard">Kopierade till urklipp</string>
|
||||
<string name="nothing_to_copy">Inget värde hittades</string>
|
||||
<string name="barcodeEncoding">Streckkods-kodning</string>
|
||||
<string name="back">Tillbaka</string>
|
||||
</resources>
|
||||
|
||||
@@ -264,7 +264,7 @@
|
||||
<item quantity="one"><xliff:g>%s</xliff:g> புள்ளி</item>
|
||||
<item quantity="other"><xliff:g>%s</xliff:g> புள்ளிகள்</item>
|
||||
</plurals>
|
||||
<string name="importLoyaltyCardKeychainMessage">இறக்குமதி செய்ய உங்கள் <i>LoyaltyCardKeychain.csv</i> விசுவாச அட்டை சாவிக்கொத்திலிருந்து ஏற்றுமதி செய். \nமுதலில் அங்கு ஏற்றுமதியை அழுத்துவதன் மூலம் விசுவாச அட்டை சாவிக்கொத்தில் இறக்குமதி/ஏற்றுமதி பட்டியலிலிருந்து அதை உருவாக்கு.</string>
|
||||
<string name="importLoyaltyCardKeychainMessage">இறக்குமதி செய்ய லாயல்டி கார்டு கீசெயினிலிருந்து உங்கள் ஏற்றுமதியைத் தேர்ந்தெடுக்கவும். \nஏற்றுமதியை அழுத்துவதன் மூலம் லாயல்டி கார்டு கீசெயினில் உள்ள இறக்குமதி/ஏற்றுமதி மெனுவிலிருந்து அதை உருவாக்கவும்.</string>
|
||||
<string name="validFromSentence">இதிலிருந்து செல்லுபடியாகும்: <xliff:g>%s</xliff:g></string>
|
||||
<string name="newBalanceSentence">புதிய இருப்பு: <xliff:g>%s</xliff:g></string>
|
||||
<string name="pageWithNumber">பக்கம் <xliff:g>%d</xliff:g></string>
|
||||
|
||||
@@ -299,4 +299,6 @@
|
||||
<string name="copy_value">Değeri kopyala</string>
|
||||
<string name="copied_to_clipboard">Panoya kopyalandı</string>
|
||||
<string name="nothing_to_copy">Değer bulunamadı</string>
|
||||
<string name="barcodeEncoding">Barkod kodlaması</string>
|
||||
<string name="back">Geri</string>
|
||||
</resources>
|
||||
|
||||
@@ -311,4 +311,6 @@
|
||||
<string name="copy_value">Копіювати значення</string>
|
||||
<string name="copied_to_clipboard">Скопійовано в буфер обміну</string>
|
||||
<string name="nothing_to_copy">Значення не знайдено</string>
|
||||
<string name="barcodeEncoding">Кодування штрих-кодів</string>
|
||||
<string name="back">Назад</string>
|
||||
</resources>
|
||||
|
||||
@@ -293,4 +293,6 @@
|
||||
<string name="copy_value">复制值</string>
|
||||
<string name="copied_to_clipboard">已复制到剪贴板</string>
|
||||
<string name="nothing_to_copy">没找到值</string>
|
||||
<string name="barcodeEncoding">条形码编码</string>
|
||||
<string name="back">返回</string>
|
||||
</resources>
|
||||
|
||||
@@ -292,4 +292,6 @@
|
||||
<string name="copy_value">複製值</string>
|
||||
<string name="copied_to_clipboard">已複製到剪貼簿</string>
|
||||
<string name="nothing_to_copy">未找到值</string>
|
||||
<string name="barcodeEncoding">條碼編碼</string>
|
||||
<string name="back">返回</string>
|
||||
</resources>
|
||||
|
||||
@@ -344,6 +344,5 @@
|
||||
<string name="copied_to_clipboard">Copied to clipboard</string>
|
||||
<string name="nothing_to_copy">No value found</string>
|
||||
<string name="barcodeEncoding">Barcode encoding</string>
|
||||
<string name="automatic">Automatic</string>
|
||||
<string name="back">Back</string>
|
||||
</resources>
|
||||
|
||||
@@ -42,7 +42,7 @@ public class DatabaseTest {
|
||||
@Test
|
||||
public void addRemoveOneGiftCard() {
|
||||
assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
@@ -58,7 +58,7 @@ public class DatabaseTest {
|
||||
assertEquals("cardId", loyaltyCard.cardId);
|
||||
assertEquals(null, loyaltyCard.barcodeId);
|
||||
assertEquals(BarcodeFormat.UPC_A, loyaltyCard.barcodeType.format());
|
||||
assertEquals(null, loyaltyCard.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, loyaltyCard.barcodeEncoding);
|
||||
assertEquals(DEFAULT_HEADER_COLOR, loyaltyCard.headerColor);
|
||||
assertEquals(0, loyaltyCard.starStatus);
|
||||
assertEquals(0, loyaltyCard.archiveStatus);
|
||||
@@ -71,7 +71,7 @@ public class DatabaseTest {
|
||||
|
||||
@Test
|
||||
public void updateGiftCard() {
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
@@ -99,7 +99,7 @@ public class DatabaseTest {
|
||||
|
||||
@Test
|
||||
public void updateGiftCardOnlyStar() {
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
@@ -119,7 +119,7 @@ public class DatabaseTest {
|
||||
assertEquals("cardId", loyaltyCard.cardId);
|
||||
assertEquals(null, loyaltyCard.barcodeId);
|
||||
assertEquals(BarcodeFormat.UPC_A, loyaltyCard.barcodeType.format());
|
||||
assertEquals(null, loyaltyCard.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, loyaltyCard.barcodeEncoding);
|
||||
assertEquals(DEFAULT_HEADER_COLOR, loyaltyCard.headerColor);
|
||||
assertEquals(1, loyaltyCard.starStatus);
|
||||
assertEquals(0, loyaltyCard.archiveStatus);
|
||||
@@ -130,14 +130,14 @@ public class DatabaseTest {
|
||||
assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
|
||||
boolean result = DBHelper.updateLoyaltyCard(mDatabase, 1, "store1", "note1", null, null, new BigDecimal("0"), null, "cardId1",
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, DEFAULT_HEADER_COLOR, 0, null, 0);
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, DEFAULT_HEADER_COLOR, 0, null, 0);
|
||||
assertEquals(false, result);
|
||||
assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void emptyGiftCardValues() {
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "", "", null, null, new BigDecimal("0"), null, "", null, null, null, null, 0, null,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "", "", null, null, new BigDecimal("0"), null, "", null, null, StandardCharsets.ISO_8859_1, null, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
@@ -153,7 +153,7 @@ public class DatabaseTest {
|
||||
assertEquals("", loyaltyCard.cardId);
|
||||
assertEquals(null, loyaltyCard.barcodeId);
|
||||
assertEquals(null, loyaltyCard.barcodeType);
|
||||
assertEquals(null, loyaltyCard.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, loyaltyCard.barcodeEncoding);
|
||||
// headerColor is randomly generated when not given, so skip
|
||||
assertEquals(0, loyaltyCard.starStatus);
|
||||
assertEquals(0, loyaltyCard.archiveStatus);
|
||||
@@ -214,10 +214,10 @@ public class DatabaseTest {
|
||||
for (int index = CARDS_TO_ADD - 1; index >= 0; index--) {
|
||||
if (index == CARDS_TO_ADD - 1) {
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, null, new BigDecimal("0"), null, "cardId" + index,
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, index, 1, null,0);
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, index, 1, null,0);
|
||||
} else {
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "store" + index, "note" + index, null, null, new BigDecimal("0"), null, "cardId" + index,
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, index, 0, null,0);
|
||||
null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, index, 0, null,0);
|
||||
}
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
@@ -241,7 +241,7 @@ public class DatabaseTest {
|
||||
assertEquals("cardId" + index, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.CARD_ID)));
|
||||
assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ID)));
|
||||
assertEquals(BarcodeFormat.UPC_A.toString(), cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE)));
|
||||
assertEquals(null, cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ENCODING)));
|
||||
assertEquals(StandardCharsets.ISO_8859_1.name(), cursor.getString(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_ENCODING)));
|
||||
assertEquals(index, cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.HEADER_COLOR)));
|
||||
assertEquals(1, cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STAR_STATUS)));
|
||||
|
||||
@@ -317,7 +317,7 @@ public class DatabaseTest {
|
||||
public void updateGroup() {
|
||||
// Create card
|
||||
assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
@@ -429,7 +429,7 @@ public class DatabaseTest {
|
||||
public void cardAddAndRemoveGroups() {
|
||||
// Create card
|
||||
assertEquals(0, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
@@ -525,7 +525,7 @@ public class DatabaseTest {
|
||||
|
||||
@Test
|
||||
public void updateGiftCardOnlyBalance() {
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, DEFAULT_HEADER_COLOR, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
assertEquals(1, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
@@ -545,7 +545,7 @@ public class DatabaseTest {
|
||||
assertEquals("cardId", loyaltyCard.cardId);
|
||||
assertEquals(null, loyaltyCard.barcodeId);
|
||||
assertEquals(BarcodeFormat.UPC_A, loyaltyCard.barcodeType.format());
|
||||
assertEquals(null, loyaltyCard.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, loyaltyCard.barcodeEncoding);
|
||||
assertEquals(DEFAULT_HEADER_COLOR, loyaltyCard.headerColor);
|
||||
assertEquals(0, loyaltyCard.starStatus);
|
||||
assertEquals(0, loyaltyCard.archiveStatus);
|
||||
|
||||
@@ -74,7 +74,7 @@ public class ImportExportTest {
|
||||
for (int index = cardsToAdd; index > 4; index--) {
|
||||
String storeName = String.format("store, \"%4d", index);
|
||||
String note = String.format("note, \"%4d", index);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, null, index, 1, null,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, index, 1, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
}
|
||||
@@ -82,7 +82,7 @@ public class ImportExportTest {
|
||||
String storeName = String.format("store, \"%4d", index);
|
||||
String note = String.format("note, \"%4d", index);
|
||||
//if index is even
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, null, index, 0, null,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, index, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
}
|
||||
@@ -91,7 +91,7 @@ public class ImportExportTest {
|
||||
|
||||
@Test
|
||||
public void addLoyaltyCardsWithExpiryNeverPastTodayFuture() {
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "No Expiry", "", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, 0, null,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, "No Expiry", "", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, 0, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
|
||||
@@ -105,11 +105,11 @@ public class ImportExportTest {
|
||||
assertEquals(BARCODE_DATA, card.cardId);
|
||||
assertEquals(null, card.barcodeId);
|
||||
assertEquals(BARCODE_TYPE.format(), card.barcodeType.format());
|
||||
assertEquals(null, card.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
|
||||
assertEquals(Integer.valueOf(0), card.headerColor);
|
||||
assertEquals(0, card.starStatus);
|
||||
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "Past", "", null, new Date((long) 1), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, 0, null,0);
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "Past", "", null, new Date((long) 1), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, 0, 0, null,0);
|
||||
result = (id != -1);
|
||||
assertTrue(result);
|
||||
|
||||
@@ -123,11 +123,11 @@ public class ImportExportTest {
|
||||
assertEquals(BARCODE_DATA, card.cardId);
|
||||
assertEquals(null, card.barcodeId);
|
||||
assertEquals(BARCODE_TYPE.format(), card.barcodeType.format());
|
||||
assertEquals(null, card.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
|
||||
assertEquals(Integer.valueOf(0), card.headerColor);
|
||||
assertEquals(0, card.starStatus);
|
||||
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "Today", "", null, new Date(), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, 0, null,0);
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "Today", "", null, new Date(), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, 0, 0, null,0);
|
||||
result = (id != -1);
|
||||
assertTrue(result);
|
||||
|
||||
@@ -142,13 +142,13 @@ public class ImportExportTest {
|
||||
assertEquals(BARCODE_DATA, card.cardId);
|
||||
assertEquals(null, card.barcodeId);
|
||||
assertEquals(BARCODE_TYPE.format(), card.barcodeType.format());
|
||||
assertEquals(null, card.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
|
||||
assertEquals(Integer.valueOf(0), card.headerColor);
|
||||
assertEquals(0, card.starStatus);
|
||||
|
||||
// This will break after 19 January 2038
|
||||
// If someone is still maintaining this code base by then: I love you
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "Future", "", null, new Date(2147483648000L), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, 0, 0, null,0);
|
||||
id = DBHelper.insertLoyaltyCard(mDatabase, "Future", "", null, new Date(2147483648000L), new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, 0, 0, null,0);
|
||||
result = (id != -1);
|
||||
assertTrue(result);
|
||||
|
||||
@@ -162,7 +162,7 @@ public class ImportExportTest {
|
||||
assertEquals(BARCODE_DATA, card.cardId);
|
||||
assertEquals(null, card.barcodeId);
|
||||
assertEquals(BARCODE_TYPE.format(), card.barcodeType.format());
|
||||
assertEquals(null, card.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
|
||||
assertEquals(Integer.valueOf(0), card.headerColor);
|
||||
assertEquals(0, card.starStatus);
|
||||
|
||||
@@ -193,7 +193,7 @@ public class ImportExportTest {
|
||||
assertEquals(BARCODE_DATA, card.cardId);
|
||||
assertEquals(null, card.barcodeId);
|
||||
assertEquals(BARCODE_TYPE.format(), card.barcodeType.format());
|
||||
assertEquals(null, card.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
|
||||
assertEquals(Integer.valueOf(index), card.headerColor);
|
||||
assertEquals(0, card.starStatus);
|
||||
|
||||
@@ -225,7 +225,7 @@ public class ImportExportTest {
|
||||
assertEquals(BARCODE_DATA, card.cardId);
|
||||
assertEquals(null, card.barcodeId);
|
||||
assertEquals(BARCODE_TYPE.format(), card.barcodeType.format());
|
||||
assertEquals(null, card.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
|
||||
assertEquals(Integer.valueOf(index), card.headerColor);
|
||||
assertEquals(0, card.starStatus);
|
||||
}
|
||||
@@ -257,7 +257,7 @@ public class ImportExportTest {
|
||||
assertEquals(BARCODE_DATA, card.cardId);
|
||||
assertEquals(null, card.barcodeId);
|
||||
assertEquals(BARCODE_TYPE.format(), card.barcodeType.format());
|
||||
assertEquals(null, card.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
|
||||
assertEquals(Integer.valueOf(index), card.headerColor);
|
||||
assertEquals(1, card.starStatus);
|
||||
|
||||
@@ -280,7 +280,7 @@ public class ImportExportTest {
|
||||
assertEquals(BARCODE_DATA, card.cardId);
|
||||
assertEquals(null, card.barcodeId);
|
||||
assertEquals(BARCODE_TYPE.format(), card.barcodeType.format());
|
||||
assertEquals(null, card.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
|
||||
assertEquals(Integer.valueOf(index), card.headerColor);
|
||||
assertEquals(0, card.starStatus);
|
||||
|
||||
@@ -859,7 +859,7 @@ public class ImportExportTest {
|
||||
loyaltyCardIconImages.put(loyaltyCardId, bitmap1);
|
||||
|
||||
// Create card 2
|
||||
loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 2", "", null, null, new BigDecimal(0), null, "123456", null, null, null, 2, 1, null,0);
|
||||
loyaltyCardId = (int) DBHelper.insertLoyaltyCard(mDatabase, "Card 2", "", null, null, new BigDecimal(0), null, "123456", null, null, StandardCharsets.ISO_8859_1, 2, 1, null,0);
|
||||
loyaltyCardHashMap.put(loyaltyCardId, DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, loyaltyCardId));
|
||||
|
||||
// Export everything
|
||||
@@ -977,7 +977,7 @@ public class ImportExportTest {
|
||||
assertEquals("1234", card1.cardId);
|
||||
assertEquals("5432", card1.barcodeId);
|
||||
assertEquals(BarcodeFormat.QR_CODE, card1.barcodeType.format());
|
||||
assertEquals(null, card1.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card1.barcodeEncoding);
|
||||
assertEquals(1, (long) card1.headerColor);
|
||||
assertEquals(0, card1.starStatus);
|
||||
assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card1.id, ImageLocationType.front));
|
||||
@@ -995,7 +995,7 @@ public class ImportExportTest {
|
||||
assertEquals("a", card8.cardId);
|
||||
assertEquals(null, card8.barcodeId);
|
||||
assertEquals(null, card8.barcodeType);
|
||||
assertEquals(null, card8.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card8.barcodeEncoding);
|
||||
assertEquals(-5317, (long) card8.headerColor);
|
||||
assertEquals(0, card8.starStatus);
|
||||
assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card8.id, ImageLocationType.front));
|
||||
@@ -1013,7 +1013,7 @@ public class ImportExportTest {
|
||||
assertEquals("A", card2.cardId);
|
||||
assertEquals(null, card2.barcodeId);
|
||||
assertEquals(null, card2.barcodeType);
|
||||
assertEquals(null, card2.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card2.barcodeEncoding);
|
||||
assertEquals(-9977996, (long) card2.headerColor);
|
||||
assertEquals(0, card2.starStatus);
|
||||
assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card2.id, ImageLocationType.front));
|
||||
@@ -1031,7 +1031,7 @@ public class ImportExportTest {
|
||||
assertEquals("dhd", card3.cardId);
|
||||
assertEquals(null, card3.barcodeId);
|
||||
assertEquals(null, card3.barcodeType);
|
||||
assertEquals(null, card3.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card3.barcodeEncoding);
|
||||
assertEquals(-9977996, (long) card3.headerColor);
|
||||
assertEquals(0, card3.starStatus);
|
||||
assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card3.id, ImageLocationType.front));
|
||||
@@ -1049,7 +1049,7 @@ public class ImportExportTest {
|
||||
assertEquals("dhshsvshs", card4.cardId);
|
||||
assertEquals(null, card4.barcodeId);
|
||||
assertEquals(null, card4.barcodeType);
|
||||
assertEquals(null, card4.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card4.barcodeEncoding);
|
||||
assertEquals(-10902850, (long) card4.headerColor);
|
||||
assertEquals(1, card4.starStatus);
|
||||
assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card4.id, ImageLocationType.front));
|
||||
@@ -1085,7 +1085,7 @@ public class ImportExportTest {
|
||||
assertEquals("a", card6.cardId);
|
||||
assertEquals("-5317", card6.barcodeId);
|
||||
assertEquals(BarcodeFormat.AZTEC, card6.barcodeType.format());
|
||||
assertEquals(null, card6.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card6.barcodeEncoding);
|
||||
assertEquals(null, card6.headerColor);
|
||||
assertEquals(0, card6.starStatus);
|
||||
assertEquals(null, Utils.retrieveCardImage(activity.getApplicationContext(), card6.id, ImageLocationType.front));
|
||||
@@ -1133,7 +1133,7 @@ public class ImportExportTest {
|
||||
assertEquals("82825292629272726", card.cardId);
|
||||
assertEquals(null, card.barcodeId);
|
||||
assertEquals(null, card.barcodeType);
|
||||
assertEquals(null, card.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
|
||||
assertEquals(0, card.starStatus);
|
||||
|
||||
card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 2);
|
||||
@@ -1147,7 +1147,7 @@ public class ImportExportTest {
|
||||
assertEquals("123456", card.cardId);
|
||||
assertEquals(null, card.barcodeId);
|
||||
assertEquals(null, card.barcodeType);
|
||||
assertEquals(null, card.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
|
||||
assertEquals(0, card.starStatus);
|
||||
|
||||
card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 3);
|
||||
@@ -1161,7 +1161,7 @@ public class ImportExportTest {
|
||||
assertEquals("123435363634", card.cardId);
|
||||
assertEquals(null, card.barcodeId);
|
||||
assertEquals(null, card.barcodeType);
|
||||
assertEquals(null, card.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
|
||||
assertEquals(0, card.starStatus);
|
||||
|
||||
TestHelpers.getEmptyDb(activity);
|
||||
@@ -1187,7 +1187,7 @@ public class ImportExportTest {
|
||||
assertEquals("123456", card.cardId);
|
||||
assertEquals(null, card.barcodeId);
|
||||
assertEquals(BarcodeFormat.CODE_128, card.barcodeType.format());
|
||||
assertEquals(null, card.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
|
||||
assertEquals(Color.GRAY, (long) card.headerColor);
|
||||
assertEquals(0, card.starStatus);
|
||||
|
||||
@@ -1202,7 +1202,7 @@ public class ImportExportTest {
|
||||
assertEquals("26846363", card.cardId);
|
||||
assertEquals(null, card.barcodeId);
|
||||
assertEquals(BarcodeFormat.CODE_39, card.barcodeType.format());
|
||||
assertEquals(null, card.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, card.barcodeEncoding);
|
||||
assertEquals(Color.rgb(128, 0, 128), (long) card.headerColor);
|
||||
assertEquals(0, card.starStatus);
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ public class ImportURITest {
|
||||
@Test
|
||||
public void ensureNoCrashOnMissingHeaderFields() throws InvalidObjectException, UnsupportedEncodingException {
|
||||
// Generate card
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), null, null, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("EUR"), BarcodeFormat.UPC_A.toString(), null, CatimaBarcode.fromBarcode(BarcodeFormat.QR_CODE), StandardCharsets.ISO_8859_1, null, 0, null,0);
|
||||
|
||||
// Get card
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
|
||||
@@ -187,7 +187,7 @@ public class ImportURITest {
|
||||
assertEquals("12345", parsedCard.cardId);
|
||||
assertEquals(null, parsedCard.barcodeId);
|
||||
assertEquals(BarcodeFormat.ITF, parsedCard.barcodeType.format());
|
||||
assertEquals(null, parsedCard.barcodeEncoding);
|
||||
assertEquals(StandardCharsets.ISO_8859_1, parsedCard.barcodeEncoding);
|
||||
assertEquals(Integer.valueOf(-416706), parsedCard.headerColor);
|
||||
assertEquals(0, parsedCard.starStatus);
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.shadows.ShadowLog;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Currency;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@@ -96,7 +97,7 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapterEmptyNote() {
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
|
||||
|
||||
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
|
||||
@@ -111,7 +112,7 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapterWithNote() {
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
|
||||
|
||||
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
|
||||
@@ -126,10 +127,10 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapterStarring() {
|
||||
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeA", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,1));
|
||||
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeB", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 1, null,1));
|
||||
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeC", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0));
|
||||
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeD", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 1, null,0));
|
||||
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeA", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,1));
|
||||
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeB", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 1, null,1));
|
||||
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeC", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0));
|
||||
assertNotEquals(-1, DBHelper.insertLoyaltyCard(mDatabase, "storeD", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 1, null,0));
|
||||
|
||||
assertEquals(4, DBHelper.getLoyaltyCardCount(mDatabase));
|
||||
|
||||
@@ -177,7 +178,7 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapter0Points() {
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
|
||||
|
||||
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
|
||||
@@ -192,7 +193,7 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapter0EUR() {
|
||||
DBHelper.insertLoyaltyCard(mDatabase,"store", "", null, null, new BigDecimal("0"), Currency.getInstance("EUR"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(mDatabase,"store", "", null, null, new BigDecimal("0"), Currency.getInstance("EUR"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
|
||||
|
||||
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
|
||||
@@ -207,7 +208,7 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapter100Points() {
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("100"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
|
||||
|
||||
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
|
||||
@@ -222,7 +223,7 @@ public class LoyaltyCardCursorAdapterTest {
|
||||
|
||||
@Test
|
||||
public void TestCursorAdapter10USD() {
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("USD"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(mDatabase, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("USD"), "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
|
||||
LoyaltyCard card = DBHelper.getLoyaltyCard(activity.getApplicationContext(), mDatabase, 1);
|
||||
|
||||
Cursor cursor = DBHelper.getLoyaltyCardCursor(mDatabase);
|
||||
|
||||
@@ -213,12 +213,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
assertEquals(CatimaBarcode.fromName(barcodeType).format(), card.barcodeType.format());
|
||||
}
|
||||
|
||||
// The special "Automatic" string shouldn't actually be written to the loyalty card
|
||||
if (barcodeEncoding.equals(activity.getApplicationContext().getString(R.string.automatic))) {
|
||||
assertEquals(null, card.barcodeEncoding);
|
||||
} else {
|
||||
assertEquals(Charset.forName(barcodeEncoding), card.barcodeEncoding);
|
||||
}
|
||||
assertEquals(Charset.forName(barcodeEncoding), card.barcodeEncoding);
|
||||
|
||||
assertNotNull(card.headerColor);
|
||||
|
||||
@@ -374,7 +369,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Check default settings
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), "ISO-8859-1", null, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -409,7 +404,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Check default settings
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, newCard ? "" : "store", newCard ? "" : "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), newCard ? "" : EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), newCard ? context.getString(R.string.noBarcode) : EAN_BARCODE_TYPE.prettyName(), newCard ? context.getString(R.string.automatic) : StandardCharsets.UTF_8.name(), null, null);
|
||||
checkAllFields(activity, newCard ? ViewMode.ADD_CARD : ViewMode.UPDATE_CARD, newCard ? "" : "store", newCard ? "" : "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), newCard ? "" : EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), newCard ? context.getString(R.string.noBarcode) : EAN_BARCODE_TYPE.prettyName(), newCard ? "ISO-8859-1" : "UTF-8", null, null);
|
||||
|
||||
// Change everything
|
||||
final EditText storeField = activity.findViewById(R.id.storeNameEdit);
|
||||
@@ -488,7 +483,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
Activity activity = (Activity) activityController.get();
|
||||
final Context context = activity.getApplicationContext();
|
||||
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), "ISO-8859-1", null, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -548,18 +543,18 @@ public class LoyaltyCardViewActivityTest {
|
||||
Activity activity = (Activity) activityController.get();
|
||||
final Context context = activity.getApplicationContext();
|
||||
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), "ISO-8859-1", null, null);
|
||||
|
||||
// Complete barcode capture successfully
|
||||
captureBarcodeWithResult(activity, true);
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
// Save and check the loyalty card
|
||||
saveLoyaltyCardWithArguments(activity, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), new BigDecimal("0"), context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.name(), context.getString(R.string.automatic), true);
|
||||
saveLoyaltyCardWithArguments(activity, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), new BigDecimal("0"), context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.name(), "ISO-8859-1", true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -572,7 +567,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
Activity activity = (Activity) activityController.get();
|
||||
final Context context = activity.getApplicationContext();
|
||||
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), "ISO-8859-1", null, null);
|
||||
|
||||
// Complete barcode capture in failure
|
||||
captureBarcodeWithResult(activity, false);
|
||||
@@ -580,7 +575,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), "ISO-8859-1", null, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -593,13 +588,13 @@ public class LoyaltyCardViewActivityTest {
|
||||
LoyaltyCardEditActivity activity = (LoyaltyCardEditActivity) activityController.get();
|
||||
final Context context = activity.getApplicationContext();
|
||||
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "", context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), "ISO-8859-1", null, null);
|
||||
|
||||
// Complete barcode capture successfully
|
||||
captureBarcodeWithResult(activity, true);
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
// Cancel the loyalty card creation
|
||||
assertEquals(false, activity.isFinishing());
|
||||
@@ -644,7 +639,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, Color.BLACK, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
|
||||
Activity activity = (Activity) activityController.get();
|
||||
@@ -653,7 +648,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -707,7 +702,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, null, Color.BLACK, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
|
||||
LoyaltyCardEditActivity activity = (LoyaltyCardEditActivity) activityController.get();
|
||||
@@ -716,13 +711,13 @@ public class LoyaltyCardViewActivityTest {
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
// Complete barcode capture successfully
|
||||
captureBarcodeWithResult(activity, true);
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
// Cancel the loyalty card creation
|
||||
assertEquals(false, activity.isFinishing());
|
||||
@@ -746,7 +741,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, null, Color.BLACK, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
|
||||
Activity activity = (Activity) activityController.get();
|
||||
@@ -755,7 +750,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
// Set date to today
|
||||
MaterialAutoCompleteTextView expiryField = activity.findViewById(R.id.expiryField);
|
||||
@@ -769,17 +764,17 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void startWithLoyaltyCardExpirySetNoExpiry() throws IOException {
|
||||
public void startWithLoyaltyCardExpirySetNoExpiry() {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, new Date(), new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, null, Color.BLACK, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, new Date(), new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
|
||||
Activity activity = (Activity) activityController.get();
|
||||
@@ -788,13 +783,13 @@ public class LoyaltyCardViewActivityTest {
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
// Set date to never
|
||||
MaterialAutoCompleteTextView expiryField = activity.findViewById(R.id.expiryField);
|
||||
expiryField.setText(expiryField.getAdapter().getItem(0).toString(), false);
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -804,7 +799,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, null, Color.BLACK, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
|
||||
Activity activity = (Activity) activityController.get();
|
||||
@@ -813,7 +808,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
// Set balance to 10 points
|
||||
EditText balanceField = activity.findViewById(R.id.balanceField);
|
||||
@@ -842,7 +837,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "10.00", "€", EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE.toString(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), DateFormat.getDateInstance(DateFormat.LONG).format(new Date()), "10.00", "€", EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE.toString(), "ISO-8859-1", null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -855,7 +850,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("USD"), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, null, Color.BLACK, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("10.00"), Currency.getInstance("USD"), EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
|
||||
Activity activity = (Activity) activityController.get();
|
||||
@@ -864,7 +859,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "10.00", "$", EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "10.00", "$", EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
@@ -886,7 +881,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", "₩", EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", "₩", EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -896,7 +891,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, null, Color.BLACK, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
|
||||
Activity activity = (Activity) activityController.get();
|
||||
@@ -905,7 +900,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
// Change barcode ID
|
||||
EditText barcodeField = activity.findViewById(R.id.barcodeIdField);
|
||||
@@ -918,7 +913,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
AlertDialog updateBarcodeIdDialog = (AlertDialog) (ShadowDialog.getLatestDialog());
|
||||
assertNull(updateBarcodeIdDialog);
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -928,7 +923,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, null, Color.BLACK, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, null, EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
|
||||
Activity activity = (Activity) activityController.get();
|
||||
@@ -937,7 +932,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
// Change card ID
|
||||
EditText cardIdField = activity.findViewById(R.id.cardIdView);
|
||||
@@ -952,7 +947,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "123456", context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "123456", context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -962,7 +957,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, null, Color.BLACK, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
|
||||
Activity activity = (Activity) activityController.get();
|
||||
@@ -971,7 +966,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
// Change card ID
|
||||
EditText cardIdField = activity.findViewById(R.id.cardIdView);
|
||||
@@ -989,7 +984,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "654321", context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "654321", context.getString(R.string.sameAsCardId), EAN_BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -999,7 +994,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, null, Color.BLACK, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
|
||||
Activity activity = (Activity) activityController.get();
|
||||
@@ -1008,7 +1003,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
activityController.visible();
|
||||
activityController.resume();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), EAN_BARCODE_DATA, "123456", EAN_BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
// Change card ID
|
||||
EditText cardIdField = activity.findViewById(R.id.cardIdView);
|
||||
@@ -1026,17 +1021,17 @@ public class LoyaltyCardViewActivityTest {
|
||||
|
||||
shadowOf(getMainLooper()).idle();
|
||||
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "654321", "123456", EAN_BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "654321", "123456", EAN_BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
database.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void checkMenu() throws IOException {
|
||||
public void checkMenu() {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, Color.BLACK, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId);
|
||||
Activity activity = (Activity) activityController.get();
|
||||
@@ -1081,7 +1076,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, Color.BLACK, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId);
|
||||
Activity activity = (Activity) activityController.get();
|
||||
@@ -1102,7 +1097,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, null, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, null, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId);
|
||||
Activity activity = (Activity) activityController.get();
|
||||
@@ -1123,7 +1118,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, null, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, null, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
|
||||
Activity activity = (Activity) activityController.get();
|
||||
@@ -1133,7 +1128,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
activityController.resume();
|
||||
|
||||
// Save and check the loyalty card
|
||||
saveLoyaltyCardWithArguments(activity, "store", "note", activity.getApplicationContext().getString(R.string.anyDate), activity.getApplicationContext().getString(R.string.never), new BigDecimal("0"), activity.getApplicationContext().getString(R.string.points), BARCODE_DATA, activity.getApplicationContext().getString(R.string.sameAsCardId), BARCODE_TYPE.name(), activity.getApplicationContext().getString(R.string.automatic), false);
|
||||
saveLoyaltyCardWithArguments(activity, "store", "note", activity.getApplicationContext().getString(R.string.anyDate), activity.getApplicationContext().getString(R.string.never), new BigDecimal("0"), activity.getApplicationContext().getString(R.string.points), BARCODE_DATA, activity.getApplicationContext().getString(R.string.sameAsCardId), BARCODE_TYPE.name(), "ISO-8859-1", false);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -1143,7 +1138,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, null, null, Color.BLACK, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, null, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
|
||||
Activity activity = (Activity) activityController.get();
|
||||
@@ -1153,7 +1148,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
activityController.resume();
|
||||
|
||||
// Save and check the loyalty card
|
||||
saveLoyaltyCardWithArguments(activity, "store", "note", activity.getApplicationContext().getString(R.string.anyDate), activity.getApplicationContext().getString(R.string.never), new BigDecimal("0"), activity.getApplicationContext().getString(R.string.points), BARCODE_DATA, activity.getApplicationContext().getString(R.string.sameAsCardId), activity.getApplicationContext().getString(R.string.noBarcode), activity.getApplicationContext().getString(R.string.automatic), false);
|
||||
saveLoyaltyCardWithArguments(activity, "store", "note", activity.getApplicationContext().getString(R.string.anyDate), activity.getApplicationContext().getString(R.string.never), new BigDecimal("0"), activity.getApplicationContext().getString(R.string.points), BARCODE_DATA, activity.getApplicationContext().getString(R.string.sameAsCardId), activity.getApplicationContext().getString(R.string.noBarcode), "ISO-8859-1", false);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -1163,7 +1158,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, Color.BLACK, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(true, (int) cardId);
|
||||
Activity activity = (Activity) activityController.get();
|
||||
@@ -1173,18 +1168,18 @@ public class LoyaltyCardViewActivityTest {
|
||||
activityController.resume();
|
||||
|
||||
// First check if the card is as expected
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), BARCODE_TYPE.prettyName(), "ISO-8859-1", null, null);
|
||||
|
||||
// Complete empty barcode selection successfully
|
||||
selectBarcodeWithResult(activity, BARCODE_DATA, null, true);
|
||||
activityController.resume();
|
||||
|
||||
// Check if the barcode type is NO_BARCODE as expected
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.UPDATE_CARD, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), "ISO-8859-1", null, null);
|
||||
assertEquals(View.GONE, activity.findViewById(R.id.barcodeLayout).getVisibility());
|
||||
|
||||
// Check if the special NO_BARCODE string doesn't get saved
|
||||
saveLoyaltyCardWithArguments(activity, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), new BigDecimal("0"), context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), context.getString(R.string.automatic), false);
|
||||
saveLoyaltyCardWithArguments(activity, "store", "note", context.getString(R.string.anyDate), context.getString(R.string.never), new BigDecimal("0"), context.getString(R.string.points), BARCODE_DATA, context.getString(R.string.sameAsCardId), context.getString(R.string.noBarcode), "ISO-8859-1", false);
|
||||
|
||||
database.close();
|
||||
}
|
||||
@@ -1194,7 +1189,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, Color.BLACK, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId);
|
||||
Activity activity = (Activity) activityController.get();
|
||||
@@ -1231,7 +1226,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, null, Color.BLACK, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId);
|
||||
AppCompatActivity activity = (AppCompatActivity) activityController.get();
|
||||
@@ -1327,7 +1322,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(context).getWritableDatabase();
|
||||
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, null, null, Color.BLACK, 0, null, 0);
|
||||
long cardId = DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, BARCODE_DATA, null, null, StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0);
|
||||
|
||||
ActivityController activityController = createActivityWithLoyaltyCard(false, (int) cardId);
|
||||
AppCompatActivity activity = (AppCompatActivity) activityController.get();
|
||||
@@ -1402,7 +1397,7 @@ public class LoyaltyCardViewActivityTest {
|
||||
Activity activity = (Activity) activityController.get();
|
||||
final Context context = activity.getApplicationContext();
|
||||
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "Example Store", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "123456", context.getString(R.string.sameAsCardId), "Aztec", context.getString(R.string.automatic), null, null);
|
||||
checkAllFields(activity, ViewMode.ADD_CARD, "Example Store", "", context.getString(R.string.anyDate), context.getString(R.string.never), "0", context.getString(R.string.points), "123456", context.getString(R.string.sameAsCardId), "Aztec", "ISO-8859-1", null, null);
|
||||
assertEquals(-416706, ((ColorDrawable) activity.findViewById(R.id.thumbnail).getBackground()).getColor());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,6 +32,7 @@ import org.robolectric.android.controller.ActivityController;
|
||||
import org.robolectric.shadows.ShadowActivity;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -97,7 +98,7 @@ public class MainActivityTest {
|
||||
assertEquals(0, list.getAdapter().getItemCount());
|
||||
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase();
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "store", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
|
||||
|
||||
assertEquals(View.VISIBLE, helpSection.getVisibility());
|
||||
assertEquals(View.GONE, noMatchingCardsText.getVisibility());
|
||||
@@ -132,10 +133,10 @@ public class MainActivityTest {
|
||||
assertEquals(0, list.getAdapter().getItemCount());
|
||||
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase();
|
||||
DBHelper.insertLoyaltyCard(database, "storeB", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "storeA", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "storeD", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 1, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "storeC", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 1, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "storeB", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "storeA", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "storeD", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 1, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "storeC", "note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 1, null,0);
|
||||
|
||||
assertEquals(View.VISIBLE, helpSection.getVisibility());
|
||||
assertEquals(View.GONE, noMatchingCardsText.getVisibility());
|
||||
@@ -229,8 +230,8 @@ public class MainActivityTest {
|
||||
TabLayout groupTabs = mainActivity.findViewById(R.id.groups);
|
||||
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase();
|
||||
DBHelper.insertLoyaltyCard(database, "The First Store", "Initial note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "The Second Store", "Secondary note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "The First Store", "Initial note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "The Second Store", "Secondary note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
|
||||
|
||||
DBHelper.insertGroup(database, "Group one");
|
||||
List<Group> groups = new ArrayList<>();
|
||||
@@ -485,8 +486,8 @@ public class MainActivityTest {
|
||||
|
||||
|
||||
SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase();
|
||||
DBHelper.insertLoyaltyCard(database, "The First Store", "Initial note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "The Second Store", "Secondary note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), null, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "The First Store", "Initial note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
|
||||
DBHelper.insertLoyaltyCard(database, "The Second Store", "Secondary note", null, null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null,0);
|
||||
|
||||
String finalQuery = "store";
|
||||
assert mSearchView != null;
|
||||
|
||||
@@ -492,7 +492,7 @@ class PkpassTest {
|
||||
Assert.assertEquals("No barcode", parsedCard.cardId)
|
||||
Assert.assertEquals(null, parsedCard.barcodeId)
|
||||
Assert.assertEquals(null, parsedCard.barcodeType)
|
||||
Assert.assertEquals(null, parsedCard.barcodeEncoding)
|
||||
Assert.assertEquals(StandardCharsets.ISO_8859_1, parsedCard.barcodeEncoding)
|
||||
Assert.assertEquals(Color.parseColor("#FFFFFF"), parsedCard.headerColor)
|
||||
Assert.assertEquals(0, parsedCard.starStatus)
|
||||
Assert.assertEquals(0, parsedCard.archiveStatus)
|
||||
@@ -559,7 +559,7 @@ class PkpassTest {
|
||||
Assert.assertEquals("No barcode", parsedCard.cardId)
|
||||
Assert.assertEquals(null, parsedCard.barcodeId)
|
||||
Assert.assertEquals(null, parsedCard.barcodeType)
|
||||
Assert.assertEquals(null, parsedCard.barcodeEncoding)
|
||||
Assert.assertEquals(StandardCharsets.ISO_8859_1, parsedCard.barcodeEncoding)
|
||||
Assert.assertEquals(Color.parseColor("#FFFFFF"), parsedCard.headerColor)
|
||||
Assert.assertEquals(0, parsedCard.starStatus)
|
||||
Assert.assertEquals(0, parsedCard.archiveStatus)
|
||||
|
||||
125
app/src/test/java/protect/card_locker/ShortcutHelperTest.java
Normal file
125
app/src/test/java/protect/card_locker/ShortcutHelperTest.java
Normal file
@@ -0,0 +1,125 @@
|
||||
package protect.card_locker;
|
||||
|
||||
import static org.junit.Assert.assertArrayEquals;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.graphics.Color;
|
||||
|
||||
import androidx.core.content.pm.ShortcutInfoCompat;
|
||||
import androidx.core.content.pm.ShortcutManagerCompat;
|
||||
|
||||
import com.google.zxing.BarcodeFormat;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.robolectric.Robolectric;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.android.controller.ActivityController;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Comparator;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class ShortcutHelperTest {
|
||||
private Activity mActivity;
|
||||
private SQLiteDatabase mDatabase;
|
||||
private int id1;
|
||||
private int id2;
|
||||
private int id3;
|
||||
private int id4;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
mActivity = Robolectric.setupActivity(MainActivity.class);
|
||||
mDatabase = TestHelpers.getEmptyDb(mActivity).getWritableDatabase();
|
||||
|
||||
long now = System.currentTimeMillis();
|
||||
id1 = (int) DBHelper.insertLoyaltyCard(mDatabase, "store1", "note1", null, null, new BigDecimal("0"), null, "cardId1", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, now,0);
|
||||
id2 = (int) DBHelper.insertLoyaltyCard(mDatabase, "store2", "note2", null, null, new BigDecimal("0"), null, "cardId2", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, now + 10,0);
|
||||
id3 = (int) DBHelper.insertLoyaltyCard(mDatabase, "store3", "note3", null, null, new BigDecimal("0"), null, "cardId3", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, now + 20,0);
|
||||
id4 = (int) DBHelper.insertLoyaltyCard(mDatabase, "store4", "note4", null, null, new BigDecimal("0"), null, "cardId4", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, now + 30,0);
|
||||
|
||||
ShortcutHelper.maxShortcuts = 3;
|
||||
}
|
||||
|
||||
private Integer[] getShortcutIds(Context context) {
|
||||
return ShortcutManagerCompat.getDynamicShortcuts(context)
|
||||
.stream()
|
||||
.sorted(Comparator.comparingInt(ShortcutInfoCompat::getRank))
|
||||
.map(shortcut -> Integer.parseInt(shortcut.getId()))
|
||||
.toArray(Integer[]::new);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onArchiveUnarchive() {
|
||||
ActivityController activityController = Robolectric.buildActivity(MainActivity.class).create();
|
||||
|
||||
Activity mainActivity = (Activity) activityController.get();
|
||||
|
||||
activityController.pause();
|
||||
activityController.resume();
|
||||
|
||||
assertEquals(3, ShortcutManagerCompat.getDynamicShortcuts(mainActivity).stream().count());
|
||||
|
||||
Integer[] ids = getShortcutIds(mainActivity);
|
||||
|
||||
assertArrayEquals(new Integer[] {id4, id3, id2}, ids);
|
||||
|
||||
DBHelper.updateLoyaltyCardArchiveStatus(mDatabase, id4, 1);
|
||||
|
||||
activityController.pause();
|
||||
activityController.resume();
|
||||
|
||||
Integer[] idsAfterArchive = getShortcutIds(mainActivity);
|
||||
|
||||
assertArrayEquals(new Integer[] {id3, id2, id1}, idsAfterArchive);
|
||||
|
||||
DBHelper.updateLoyaltyCardArchiveStatus(mDatabase, id4, 0);
|
||||
|
||||
activityController.pause();
|
||||
activityController.resume();
|
||||
|
||||
Integer[] idsAfterUnarchive = getShortcutIds(mainActivity);
|
||||
|
||||
assertArrayEquals(new Integer[] {id4, id3, id2}, idsAfterUnarchive);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onAddRemoveFavorite() {
|
||||
ActivityController activityController = Robolectric.buildActivity(MainActivity.class).create();
|
||||
|
||||
Activity mainActivity = (Activity) activityController.get();
|
||||
|
||||
activityController.pause();
|
||||
activityController.resume();
|
||||
|
||||
assertEquals(3, ShortcutManagerCompat.getDynamicShortcuts(mainActivity).stream().count());
|
||||
|
||||
Integer[] ids = getShortcutIds(mainActivity);
|
||||
|
||||
assertArrayEquals(new Integer[] {id4, id3, id2}, ids);
|
||||
|
||||
DBHelper.updateLoyaltyCardStarStatus(mDatabase, id1, 1);
|
||||
|
||||
activityController.pause();
|
||||
activityController.resume();
|
||||
|
||||
Integer[] idsAfterFav = getShortcutIds(mainActivity);
|
||||
|
||||
assertArrayEquals(new Integer[] {id1, id4, id3}, idsAfterFav);
|
||||
|
||||
DBHelper.updateLoyaltyCardStarStatus(mDatabase, id1, 0);
|
||||
|
||||
activityController.pause();
|
||||
activityController.resume();
|
||||
|
||||
Integer[] idsAfterUnfav = getShortcutIds(mainActivity);
|
||||
|
||||
assertArrayEquals(new Integer[] {id4, id3, id2}, idsAfterUnfav);
|
||||
}
|
||||
}
|
||||
@@ -11,6 +11,7 @@ import com.google.zxing.BarcodeFormat;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.math.BigDecimal;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class TestHelpers {
|
||||
private static final String BARCODE_DATA = "428311627547";
|
||||
@@ -55,7 +56,7 @@ public class TestHelpers {
|
||||
for (int index = cardsToAdd; index > 0; index--) {
|
||||
String storeName = String.format("store, \"%4d", index);
|
||||
String note = String.format("note, \"%4d", index);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, null, index, 0, null,0);
|
||||
long id = DBHelper.insertLoyaltyCard(mDatabase, storeName, note, null, null, new BigDecimal(String.valueOf(index)), null, BARCODE_DATA, null, BARCODE_TYPE, StandardCharsets.ISO_8859_1, index, 0, null,0);
|
||||
boolean result = (id != -1);
|
||||
assertTrue(result);
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ public class CardsContentProviderTest {
|
||||
assertArrayEquals("column names", new String[]{"major", "minor"}, cursor.getColumnNames());
|
||||
cursor.moveToNext();
|
||||
assertEquals("major version", 1, cursor.getInt(cursor.getColumnIndexOrThrow("major")));
|
||||
assertEquals("minor version", 0, cursor.getInt(cursor.getColumnIndexOrThrow("minor")));
|
||||
assertEquals("minor version", 1, cursor.getInt(cursor.getColumnIndexOrThrow("minor")));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ public class CardsContentProviderTest {
|
||||
final String[] expectedColumns = new String[]{
|
||||
"_id", "store", "validfrom", "expiry", "balance", "balancetype",
|
||||
"note", "headercolor", "cardid", "barcodeid",
|
||||
"barcodetype", "starstatus", "lastused", "archive"
|
||||
"barcodetype", "barcodeencoding", "starstatus", "lastused", "archive"
|
||||
};
|
||||
|
||||
assertEquals("number of columns", expectedColumns.length, cursor.getColumnCount());
|
||||
@@ -136,6 +136,7 @@ public class CardsContentProviderTest {
|
||||
final String actualCardId = cursor.getString(cursor.getColumnIndexOrThrow("cardid"));
|
||||
final String actualBarcodeId = cursor.getString(cursor.getColumnIndexOrThrow("barcodeid"));
|
||||
final String actualBarcodeType = cursor.getString(cursor.getColumnIndexOrThrow("barcodetype"));
|
||||
final String actualBarcodeEncoding = cursor.getString(cursor.getColumnIndexOrThrow("barcodeencoding"));
|
||||
final int actualHeaderColor = cursor.getInt(cursor.getColumnIndexOrThrow("headercolor"));
|
||||
final int actualStarred = cursor.getInt(cursor.getColumnIndexOrThrow("starstatus"));
|
||||
final long actualLastUsed = cursor.getLong(cursor.getColumnIndexOrThrow("lastused"));
|
||||
@@ -151,6 +152,7 @@ public class CardsContentProviderTest {
|
||||
assertEquals("CardId", cardId, actualCardId);
|
||||
assertEquals("BarcodeId", barcodeId, actualBarcodeId);
|
||||
assertEquals("BarcodeType", barcodeType.format().name(), actualBarcodeType);
|
||||
assertEquals("barcodeEncoding", barcodeEncoding.name(), actualBarcodeEncoding);
|
||||
assertEquals("HeaderColorColumn", headerColor, actualHeaderColor);
|
||||
assertEquals("Starred", starStatus, actualStarred);
|
||||
assertEquals("LastUsed", lastUsed, actualLastUsed);
|
||||
|
||||
@@ -15,7 +15,7 @@ An [export](./EXPORT_FORMAT.md) always contains all values. A [card sharing URL]
|
||||
| cardid | Required | Any string | The loyalty card ID |
|
||||
| barcodeid | Optional | Any string | The value of the loyalty card barcode, if different from the loyalty card ID |
|
||||
| barcodetype | Optional | AZTEC, CODABAR, CODE_39, CODE_93, CODE_128, DATA_MATRIX, EAN_8, EAN_13, ITF, MAXICODE, PDF_417, QR_CODE, RSS_14, RSS_EXPANDED, UPC_A, UPC_E | The type of loyalty card barcode used |
|
||||
| barcodeencoding | Optional | Either `null` (automatic detection using zxing's `guessEncoding` function) or any [StandardCharset](https://developer.android.com/reference/java/nio/charset/StandardCharsets)'s `.name()` output. Only `ISO-8859-1` and `UTF-8` are user selectable | The encoding used to render the loyalty card barcode |
|
||||
| barcodeencoding | Optional | Any [StandardCharset](https://developer.android.com/reference/java/nio/charset/StandardCharsets)'s `.name()` output. Only `ISO-8859-1` and `UTF-8` are user selectable | The encoding used to render the loyalty card barcode |
|
||||
| headercolor | Optional | A valid Android color value (https://developer.android.com/reference/android/graphics/Color) | The color to use in the header and card background |
|
||||
| starstatus | Ignored | 0,1 | If the card is "starred" |
|
||||
| lastused | Ignored | Any UNIX timestamp | When the loyalty card was last opened |
|
||||
|
||||
@@ -37,26 +37,27 @@ A major version change implies breaking changes (eg. columns being renamed or re
|
||||
| Column | Type | Description | Value |
|
||||
|---------|-------|-------------------|-------|
|
||||
| `major` | `int` | The major version | `1` |
|
||||
| `minor` | `int` | The minor version | `0` |
|
||||
| `minor` | `int` | The minor version | `1` |
|
||||
|
||||
### /cards
|
||||
|
||||
| Column | Type | Description |
|
||||
|---------------|----------|----------------------------|
|
||||
| `_id` | `int` | Unique card ID |
|
||||
| `store` | `String` | Card name |
|
||||
| `validfrom` | `long` | Timestamp from which the card is valid (unix epoch millis). |
|
||||
| `expiry` | `long` | Expiration timestamp (unix epoch millis). |
|
||||
| `balance` | `String` | Current balance, as a string-formatted big decimal. |
|
||||
| `balancetype` | `String` | Balance currency code, ISO 4217. |
|
||||
| `note` | `String` | A note. |
|
||||
| `headercolor` | `int` | Header color, in RGBA. |
|
||||
| `cardid` | `String` | Card ID. |
|
||||
| `barcodeid` | `String` | Barcode value. If empty, it's the same as the card ID. |
|
||||
| `barcodetype` | `String` | The barcode type name, matching [com.google.zxing.BarcodeFormat](https://zxing.github.io/zxing/apidocs/com/google/zxing/BarcodeFormat.html). |
|
||||
| `starstatus` | `int` | 1 if starred, 0 if not |
|
||||
| `lastused` | `long` | Timestamp of last card usage (unix epoch millis). |
|
||||
| `archive` | `int` | 1 if archived, 0 if not |
|
||||
| Column | Type | Description |
|
||||
|-------------------|----------|----------------------------|
|
||||
| `_id` | `int` | Unique card ID |
|
||||
| `store` | `String` | Card name |
|
||||
| `validfrom` | `long` | Timestamp from which the card is valid (unix epoch millis). |
|
||||
| `expiry` | `long` | Expiration timestamp (unix epoch millis). |
|
||||
| `balance` | `String` | Current balance, as a string-formatted big decimal. |
|
||||
| `balancetype` | `String` | Balance currency code, ISO 4217. |
|
||||
| `note` | `String` | A note. |
|
||||
| `headercolor` | `int` | Header color, in RGBA. |
|
||||
| `cardid` | `String` | Card ID. |
|
||||
| `barcodeid` | `String` | Barcode value. If empty, it's the same as the card ID. |
|
||||
| `barcodetype` | `String` | The barcode type name, matching [com.google.zxing.BarcodeFormat](https://zxing.github.io/zxing/apidocs/com/google/zxing/BarcodeFormat.html). |
|
||||
| `barcodeencoding` | `String` | The barcode encoding used to render the barcode, matching a [StandardCharset](https://developer.android.com/reference/java/nio/charset/StandardCharsets)'s `.name()` output. Only `ISO-8859-1` and `UTF-8` are user selectable. |
|
||||
| `starstatus` | `int` | 1 if starred, 0 if not |
|
||||
| `lastused` | `long` | Timestamp of last card usage (unix epoch millis). |
|
||||
| `archive` | `int` | 1 if archived, 0 if not |
|
||||
|
||||
### /groups
|
||||
|
||||
|
||||
@@ -37,10 +37,10 @@ Food
|
||||
Fashion
|
||||
|
||||
_id,store,note,validfrom,expiry,balance,balancetype,cardid,barcodeid,barcodetype,barcodeencoding,headercolor,starstatus,lastused,archive
|
||||
1,Clothing Store,Note about store,,,0,,qw,,,,-45147,1,1730493938,0
|
||||
2,Department Store,,,,0,,A,,,,-1499549,0,1730493491,0
|
||||
3,Grocery Store,,,1453633200000,50,,dhd,,,,-11751600,0,1730493369,0
|
||||
4,Pharmacy,,,,0,,dhshsvshs,,,,-16766866,0,1684347330,1
|
||||
1,Clothing Store,Note about store,,,0,,qw,,,ISO-8859-1,-45147,1,1730493938,0
|
||||
2,Department Store,,,,0,,A,,,ISO-8859-1,-1499549,0,1730493491,0
|
||||
3,Grocery Store,,,1453633200000,50,,dhd,,,UTF-8,-11751600,0,1730493369,0
|
||||
4,Pharmacy,,,,0,,dhshsvshs,,,ISO-8859-1,-16766866,0,1684347330,1
|
||||
5,Restaurant,Note about restaurant here,,,0,,98765432,,CODE_128,UTF-8,-10902850,0,1730493357,0
|
||||
6,Shoe Store,,,,0,,zhxbx,,AZTEC,ISO-8859-1,-6543440,0,1684347744,0
|
||||
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
أوقف البحث عن بطاقات المكافآت البلاستيكية أثناء الخروج من المتجر أو المتجر الإلكتروني.
|
||||
<b> امسح الباركود ضوئيًا إلى جهازك باستخدام الكاميرا الخاصة به ، وتجاهل البطاقات. </b>
|
||||
توقف عن بحثك لبطاقات المكافآت البلاستيكية عندما تخرج من المتجر أو تطبيق التسوق.
|
||||
<b> امسح الباركود ضوئيًا إلى جهازك باستخدام الكاميرا ، وتجاهل تلك البطاقات الفعلية. </b>
|
||||
|
||||
انس محفظتك ، أو اجعلها خفيفة للغاية للأشياء الثمينة.
|
||||
انس محفظتك ، أو اجعلها خفيفة للغايةلتحفظ أغراضك الثمينة
|
||||
|
||||
باستخدام أداة الحمل اليومية الأساسية، يمكنك استبدال البلاستيك عديم الفائدة بالنقود.
|
||||
|
||||
- تجنب التجسس بأذونات قليلة جدًا. لا يوجد اتصال بالإنترنت ولا إعلانات.
|
||||
- إضافة بطاقات أو أكواد بأسماء وألوان قابلة للتخصيص.
|
||||
- إدخال رمز يدويًا إذا لم يكن هناك رمز شريطي لتخزينه ، أو لا يمكن استخدامه.
|
||||
- استيراد البطاقات والأكواد من الملفات، Stocard, Loyalty Card Keychain, FidMe, Catima و Voucher Vault.
|
||||
- قم بعمل نسخة احتياطية لجميع بطاقاتك وانقلها إلى جهاز جديد إذا أردت.
|
||||
- شارك القسائم والعروض الحصرية والرموز الترويجية أو البطاقات والرموز باستخدام أي تطبيق.
|
||||
- يتميز بأذونات قليلة جدًا. لا اتصال بالإنترنت ولا إعلانات!
|
||||
- أضف بطاقات أو أكواد بأسماء وألوان على ذوقك
|
||||
- عندما لا يوجد رمز باركود، يمكنك إدخال الرمز يدويا ، أو لا يمكن استخدامه.
|
||||
- استورد البطاقات والأكواد من الملفات، Stocard, Loyalty Card Keychain, FidMe, Catima و Voucher Vault.
|
||||
- احم بياناتك من الضياع باستخدام نسخة احتياطية لجميع بطاقاتك وإذا أردت يمكنك نقلها إلى جهاز جديد.
|
||||
- شارك القسائم والعروض الحصرية والرموز الترويجية أو البطاقات والرموز في أي تطبيق
|
||||
- المظهر الداكن وخيارات إمكانية الوصول للمستخدمين ضعاف البصر.
|
||||
- صنع للجميع من قبل مجتمع البرمجيات الحرة.
|
||||
- ترجمات محلية الصنع لأكثر من 20 لغة.
|
||||
- مجانا ، بدعم من مساهمات المجتمع.
|
||||
- مصنوع للجميع من مطورين لبرامج مفتوحة المصدر!
|
||||
- مترجم لأكثر من 20 لغة.
|
||||
- مجاني بالكامل، بدعم من مساهمات المجتمع.
|
||||
- استخدمها وادرسها وقم بتغييرها وشاركها كما يحلو لك ؛ <i> مع الجميع </i>.
|
||||
- ليس فقط البرمجيات الحرة / المصدر المفتوح. إدارة بطاقات <i>متروكة الحقوق</i> البرمجيات الحرة (+GPLv3).
|
||||
- التطبيق ليس فقط مفتوح المصدر. بل إدارة بطاقات <i>متروكة الحقوق</i> البرمجيات الحرة (+GPLv3).
|
||||
|
||||
قم بتبسيط حياتك والتسوق ، ولا تفقد الإيصال الورقي أو بطاقة هدايا الدفع في المتجر أو تذكرة الطائرة مرة أخرى.
|
||||
خذ كل مكافآتك ومكافآتك معك ، واحفظها كما تذهب.
|
||||
بسط حياتك وتجربة تسوقك ، ولا تخف من فقدان الإيصال الورقي أو بطاقة هدايا الدفع في المتجر أو تذكرة الطائرة مرة أخرى!
|
||||
احفظ كل مكافآتك وهداياك معك أينما ذهبت.
|
||||
|
||||
3
fastlane/metadata/android/bs/changelogs/10.txt
Normal file
3
fastlane/metadata/android/bs/changelogs/10.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Promijenjen je zadani naziv datoteke za uvoz/izvoz. (pull #84 (https://github.com/brarcher/loyalty-card-locker/pull/84))
|
||||
- Ispravljen je niz znakova na stranici za uvoz/izvoz. (pull #87 (https://github.com/brarcher/loyalty-card-locker/pull/87))
|
||||
- Poboljšan je izgled stranice za pregled kartice. Tekst bi trebao biti lakše čitljiv i moguće ga je odabrati dugim klikom. (pull #91 (https://github.com/brarcher/loyalty-card-locker/pull/91))
|
||||
2
fastlane/metadata/android/bs/changelogs/100.txt
Normal file
2
fastlane/metadata/android/bs/changelogs/100.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Sakrivanje ikona za pretragu, proširivanje i sortiranje dok ne postoji barem jedna kartica
|
||||
- Razne ispravke tema
|
||||
3
fastlane/metadata/android/bs/changelogs/101.txt
Normal file
3
fastlane/metadata/android/bs/changelogs/101.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Ispravljen problem sa rezačem koji ne koristi boju teme
|
||||
- Ispravljeni manji problemi sa temama
|
||||
- Dodata čisto crna tamna tema za OLED ekrane
|
||||
2
fastlane/metadata/android/bs/changelogs/102.txt
Normal file
2
fastlane/metadata/android/bs/changelogs/102.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Razne manje ispravke
|
||||
- Ispravljen pad programa prilikom korištenja norveškog prijevoda
|
||||
2
fastlane/metadata/android/bs/changelogs/103.txt
Normal file
2
fastlane/metadata/android/bs/changelogs/103.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Ispravljeno je da se ručni odabir jezika nije primjenjivao svugdje
|
||||
- Ispravljeno rušenje programa u prikazu za uređivanje na lokacijama bez regije
|
||||
2
fastlane/metadata/android/bs/changelogs/104.txt
Normal file
2
fastlane/metadata/android/bs/changelogs/104.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Sačuvaj stanje proširenja detalja kartice
|
||||
- Manje ispravke korisničkog interfejsa
|
||||
2
fastlane/metadata/android/bs/changelogs/105.txt
Normal file
2
fastlane/metadata/android/bs/changelogs/105.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Ispravljeno pojavljivanje sive kocke na nevažećoj vrijednosti za barkod
|
||||
- Ispravke uvoza Stocard-a
|
||||
1
fastlane/metadata/android/bs/changelogs/106.txt
Normal file
1
fastlane/metadata/android/bs/changelogs/106.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Ispravljena greška zbog koje se neki nizovi znakova prikazuju kao jedan znak
|
||||
1
fastlane/metadata/android/bs/changelogs/107.txt
Normal file
1
fastlane/metadata/android/bs/changelogs/107.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Ispravke uvoza Stocard-a
|
||||
5
fastlane/metadata/android/bs/changelogs/108.txt
Normal file
5
fastlane/metadata/android/bs/changelogs/108.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
- Dodana funkcija dupliranja kartica
|
||||
- Ne dozvoliti odabir isteka prije 1970. (ionako nikada nisu radili)
|
||||
- Dodana podrška za arhiviranje kartica
|
||||
- Premjestiti brisanje iz uređivanja u pregled
|
||||
- Ukloniti ikonu zaključavanja rotacije u korist nove postavke zaključavanja rotacije
|
||||
1
fastlane/metadata/android/bs/changelogs/109.txt
Normal file
1
fastlane/metadata/android/bs/changelogs/109.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Ispravljena je netačna boja teksta na dugmetu "Bez barkoda"
|
||||
1
fastlane/metadata/android/bs/changelogs/112.txt
Normal file
1
fastlane/metadata/android/bs/changelogs/112.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Učinite mogućnost postavljanja prilagođenog zaglavlja vidljivijom
|
||||
3
fastlane/metadata/android/bs/changelogs/113.txt
Normal file
3
fastlane/metadata/android/bs/changelogs/113.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Dodavanje dugmadi "prethodna" i "sljedeća" u prikaz kartice vjernosti
|
||||
- Ispravljanje boje prednjeg plana na dugmetu za uređivanje
|
||||
- Zamjena ikone za spremanje na disketi kvačicom
|
||||
3
fastlane/metadata/android/bs/changelogs/114.txt
Normal file
3
fastlane/metadata/android/bs/changelogs/114.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Dodata monohromatska ikona za Android 13
|
||||
- Poboljšan prvi ekran za pokretanje
|
||||
- Ispravke uvoza iz Fidme-a
|
||||
4
fastlane/metadata/android/bs/changelogs/115.txt
Normal file
4
fastlane/metadata/android/bs/changelogs/115.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
- Otvaranje slike u galeriji dugim pritiskom
|
||||
- Primjena Material stila na dijaloge
|
||||
- Podrška za kreiranje kartice dijeljenjem slike na Catima
|
||||
- Dodavanje dugmeta za brzo trošenje na ekran kartice
|
||||
2
fastlane/metadata/android/bs/changelogs/116.txt
Normal file
2
fastlane/metadata/android/bs/changelogs/116.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Ispravljen dijalog za brzu potrošnju koji ne dozvoljava , separator
|
||||
- Podrška za učitavanje slike iz upravitelja datoteka
|
||||
2
fastlane/metadata/android/bs/changelogs/117.txt
Normal file
2
fastlane/metadata/android/bs/changelogs/117.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Uklonite nepotrebne dozvole
|
||||
- Ciljajte na Android 13
|
||||
2
fastlane/metadata/android/bs/changelogs/118.txt
Normal file
2
fastlane/metadata/android/bs/changelogs/118.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Podrška za podešavanje početka važenja kartice
|
||||
- Ispravljen uvoz Stocard-a (promijenjen je format izvoza Stocard-a)
|
||||
1
fastlane/metadata/android/bs/changelogs/119.txt
Normal file
1
fastlane/metadata/android/bs/changelogs/119.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Koristite Material You boje na više uređaja (ažuriranje Google biblioteke)
|
||||
1
fastlane/metadata/android/bs/changelogs/12.txt
Normal file
1
fastlane/metadata/android/bs/changelogs/12.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Spriječen pad sistema prilikom rotiranja ekrana u prvom pokretanju uvodnog čarobnjaka.
|
||||
3
fastlane/metadata/android/bs/changelogs/120.txt
Normal file
3
fastlane/metadata/android/bs/changelogs/120.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Potpuni redizajn glavnog ekrana i ekrana za pregled kartica vjernosti
|
||||
- Materijal koji vi dizajnirate za ekran postavki
|
||||
- Ispravljen pad aplikacije prilikom korištenja opcije "Snimi fotografiju" s onemogućenom aplikacijom kamere
|
||||
1
fastlane/metadata/android/bs/changelogs/121.txt
Normal file
1
fastlane/metadata/android/bs/changelogs/121.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Ažurirajte korištene biblioteke
|
||||
3
fastlane/metadata/android/bs/changelogs/122.txt
Normal file
3
fastlane/metadata/android/bs/changelogs/122.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Dugo pritisnite ikonu kartice u prikazu aktivnosti da biste je promijenili
|
||||
- Poboljšan stil dugmadi na ekranu Grupa
|
||||
- Ispravljene su dugačke vrijednosti barkoda koje su uzrokovale da se barkod smanji na nulu
|
||||
2
fastlane/metadata/android/bs/changelogs/123.txt
Normal file
2
fastlane/metadata/android/bs/changelogs/123.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
- Manja poboljšanja korisničkog interfejsa
|
||||
- Ispravljena je greška zbog koje novi dizajn nije upotrebljiv na uređajima sa kvadratnim ekranima
|
||||
1
fastlane/metadata/android/bs/changelogs/124.txt
Normal file
1
fastlane/metadata/android/bs/changelogs/124.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Podrška za odabir tačnog broja detalja za pregled kartice
|
||||
1
fastlane/metadata/android/bs/changelogs/125.txt
Normal file
1
fastlane/metadata/android/bs/changelogs/125.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Elegantnije rješavanje problema s nedostajućim bojama zaglavlja
|
||||
1
fastlane/metadata/android/bs/changelogs/126.txt
Normal file
1
fastlane/metadata/android/bs/changelogs/126.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Razne ispravke za RTL
|
||||
4
fastlane/metadata/android/bs/changelogs/127.txt
Normal file
4
fastlane/metadata/android/bs/changelogs/127.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
- Poboljšanja renderiranja barkodova
|
||||
- Osnovna interoperabilnost s vanjskim aplikacijama (Android 6.0+)
|
||||
- Reorganizirani ekran postavki
|
||||
- Ispravljen uvoz iz nekih preglednika koji dodaju završnu oznaku / URL-u za dijeljenje
|
||||
1
fastlane/metadata/android/bs/changelogs/128.txt
Normal file
1
fastlane/metadata/android/bs/changelogs/128.txt
Normal file
@@ -0,0 +1 @@
|
||||
- Ispravljen rijedak pad sistema
|
||||
3
fastlane/metadata/android/bs/changelogs/129.txt
Normal file
3
fastlane/metadata/android/bs/changelogs/129.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
- Poboljšan Catima uvoznik (ispravljeni nedostaci kartica prilikom uvoza)
|
||||
- Ispravljen pad sistema prilikom rotiranja ekrana prilikom podešavanja datuma važenja/isteka
|
||||
- Manje izmjene korisničkog interfejsa
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user