Compare commits

...

54 Commits

Author SHA1 Message Date
Sylvia van Os
f932d8f6e4 Release Catima 2.16.2 2022-03-31 23:11:03 +02:00
bors[bot]
5e3399cd32 Merge #857
857: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: 109247019824 <stoyan@gmx.com>
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
2022-03-31 20:57:20 +00:00
Oğuz Ersen
b736f31dc2 Translated using Weblate (Turkish)
Currently translated at 60.0% (63 of 105 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2022-03-31 22:56:04 +02:00
109247019824
ff285430c0 Translated using Weblate (Bulgarian)
Currently translated at 4.7% (5 of 105 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/bg/
2022-03-31 22:56:04 +02:00
bors[bot]
504c1ac516 Merge #855
855: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Tony C <kodo60@gmail.com>
2022-03-31 16:12:14 +00:00
Tony C
c4746fe2b9 Translated using Weblate (French)
Currently translated at 19.2% (20 of 104 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2022-03-31 18:09:35 +02:00
Sylvia van Os
99383d4fc6 Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2022-03-30 19:45:18 +02:00
Sylvia van Os
71cd16caac Fix broken colours in Fidme import 2022-03-30 19:45:10 +02:00
Sylvia van Os
6a04077cec Merge pull request #854 from CatimaLoyalty/create-pull-request/patch-1648585831
Update Fastlane changelogs
2022-03-29 22:31:42 +02:00
TheLastProject
5664ff5631 Update Fastlane changelogs 2022-03-29 20:30:30 +00:00
Sylvia van Os
48764e266e Update CHANGELOG 2022-03-29 22:29:55 +02:00
Sylvia van Os
435cfd2839 Merge pull request #853 from weblate/weblate-catima-catima
Translations update from Hosted Weblate
2022-03-29 22:20:08 +02:00
Sylvia van Os
34639f2a2e Don't render text sequences as single character 2022-03-29 22:19:12 +02:00
Joel A
ce9c3bffe6 Translated using Weblate (Swedish)
Currently translated at 1.9% (2 of 104 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sv/
2022-03-29 21:09:59 +02:00
Sylvia van Os
d0d15393f6 Merge pull request #850 from CatimaLoyalty/create-pull-request/patch-1648357620
Update contributors
2022-03-27 11:11:27 +02:00
TheLastProject
e9eaf51e40 Update contributors 2022-03-27 05:07:00 +00:00
bors[bot]
de8a843414 Merge #849
849: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Altons <marsupilami450@gmail.com>
2022-03-26 21:35:52 +00:00
Altons
0ad4c683b7 Translated using Weblate (German)
Currently translated at 6.7% (7 of 104 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/de/
2022-03-26 22:09:45 +01:00
Altons
fdbff0f942 Translated using Weblate (French)
Currently translated at 18.2% (19 of 104 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2022-03-26 22:09:45 +01:00
Sylvia van Os
a02d9fd995 Merge pull request #846 from CatimaLoyalty/dependabot/gradle/androidx.core-core-splashscreen-1.0.0-beta02
Bump core-splashscreen from 1.0.0-beta01 to 1.0.0-beta02
2022-03-25 21:51:52 +01:00
Sylvia van Os
d7f43f8a2b Release Catima 2.16.1 2022-03-25 20:51:01 +01:00
bors[bot]
3cbd69c6c7 Merge #847
847: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
2022-03-25 18:11:08 +00:00
Oğuz Ersen
1cff0e29e4 Translated using Weblate (Turkish)
Currently translated at 59.6% (62 of 104 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2022-03-25 15:09:48 +01:00
Sylvia van Os
e718ffb77d Translated using Weblate (Swedish)
Currently translated at 1.9% (2 of 104 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sv/
2022-03-25 15:09:45 +01:00
Sylvia van Os
c2d711650f Translated using Weblate (Slovak)
Currently translated at 1.9% (2 of 104 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/sk/
2022-03-25 15:09:45 +01:00
Sylvia van Os
f205045916 Translated using Weblate (French)
Currently translated at 17.3% (18 of 104 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fr/
2022-03-25 15:09:45 +01:00
Sylvia van Os
6ed6e683b5 Translated using Weblate (Slovak)
Currently translated at 82.7% (201 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/sk/
2022-03-25 15:09:44 +01:00
Sylvia van Os
1612bed309 Translated using Weblate (French)
Currently translated at 100.0% (243 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/fr/
2022-03-25 15:09:43 +01:00
Sylvia van Os
ac8a2c445c Translated using Weblate (Spanish)
Currently translated at 69.1% (168 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/es/
2022-03-25 15:09:43 +01:00
dependabot[bot]
f98203fc5d Bump core-splashscreen from 1.0.0-beta01 to 1.0.0-beta02
Bumps core-splashscreen from 1.0.0-beta01 to 1.0.0-beta02.

---
updated-dependencies:
- dependency-name: androidx.core:core-splashscreen
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-24 02:26:52 +00:00
Sylvia van Os
82298d0d50 Merge pull request #845 from CatimaLoyalty/create-pull-request/patch-1648059304
Update Fastlane changelogs
2022-03-23 19:16:13 +01:00
TheLastProject
916515f8b2 Update Fastlane changelogs 2022-03-23 18:15:04 +00:00
Sylvia van Os
b5e6d40857 Merge branch 'master' of github.com:TheLastProject/loyalty-card-locker 2022-03-23 19:14:19 +01:00
Sylvia van Os
efef397870 Fix gray block appearing on invalid value for barcode 2022-03-23 19:13:54 +01:00
Sylvia van Os
377438b6ae Merge pull request #844 from CatimaLoyalty/fix/843
Stocard import fixes
2022-03-23 17:58:39 +01:00
Sylvia van Os
27443db945 Import fix 2022-03-23 17:31:11 +01:00
Sylvia van Os
420886bc3f Make SpotBugs happy 2022-03-22 21:59:35 +01:00
Sylvia van Os
86a01d36db Fix background color generation 2022-03-22 21:46:37 +01:00
Sylvia van Os
329293fa7c Support custom providers in Stocard import 2022-03-22 21:26:36 +01:00
Sylvia van Os
26bbea7377 Fix Stocard import getting stuck 2022-03-22 20:25:39 +01:00
Sylvia van Os
50385c6e0e Merge pull request #842 from CatimaLoyalty/create-pull-request/patch-1647753417
Update contributors
2022-03-20 11:25:33 +01:00
TheLastProject
43c45c9c0c Update contributors 2022-03-20 05:16:57 +00:00
bors[bot]
17cdc58b19 Merge #841
841: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: huuhaa <huuhaa.tm+gitlab@gmail.com>
2022-03-14 16:25:13 +00:00
huuhaa
4960b77ca3 Translated using Weblate (Finnish)
Currently translated at 2.9% (3 of 103 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/fi/
2022-03-14 14:56:44 +01:00
Sylvia van Os
a7c6ac695e Merge pull request #838 from CatimaLoyalty/create-pull-request/patch-1647148614
Update contributors
2022-03-13 11:05:48 +01:00
TheLastProject
63dfe27b25 Update contributors 2022-03-13 05:16:54 +00:00
bors[bot]
2ec44046a8 Merge #837
837: Translations update from Hosted Weblate r=TheLastProject a=weblate

Translations update from [Hosted Weblate](https://hosted.weblate.org) for [Catima/Android](https://hosted.weblate.org/projects/catima/catima/).


It also includes following components:

* [Catima/Android (Fastlane)](https://hosted.weblate.org/projects/catima/fastlane/)



Current translation status:

![Weblate translation status](https://hosted.weblate.org/widgets/catima/-/catima/horizontal-auto.svg)


Co-authored-by: 109247019824 <stoyan@gmx.com>
Co-authored-by: Sylvia van Os <sylvia@hackerchick.me>
Co-authored-by: Jane Kong <myonjane@gmail.com>
Co-authored-by: Michael Moroni <michaelmoroni@disroot.org>
Co-authored-by: Oğuz Ersen <oguz@ersen.moe>
2022-03-12 09:28:40 +00:00
Oğuz Ersen
0363bc67e4 Translated using Weblate (Turkish)
Currently translated at 59.2% (61 of 103 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/tr/
2022-03-12 09:54:37 +01:00
Sylvia van Os
affa434679 Translated using Weblate (Bulgarian)
Currently translated at 100.0% (243 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2022-03-12 09:54:35 +01:00
Michael Moroni
ded151830e Translated using Weblate (Italian)
Currently translated at 8.7% (9 of 103 strings)

Translation: Catima/Android (Fastlane)
Translate-URL: https://hosted.weblate.org/projects/catima/fastlane/it/
2022-03-12 09:54:35 +01:00
109247019824
e1b604c1d2 Translated using Weblate (Bulgarian)
Currently translated at 99.5% (242 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2022-03-11 07:55:45 +01:00
Jane Kong
45d9353b54 Translated using Weblate (Chinese (Simplified))
Currently translated at 96.7% (235 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/zh_Hans/
2022-03-11 07:55:45 +01:00
Sylvia van Os
ceceda560a Translated using Weblate (Bulgarian)
Currently translated at 100.0% (243 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2022-03-11 07:55:45 +01:00
109247019824
088c25dbad Translated using Weblate (Bulgarian)
Currently translated at 99.5% (242 of 243 strings)

Translation: Catima/Android
Translate-URL: https://hosted.weblate.org/projects/catima/catima/bg/
2022-03-11 07:55:45 +01:00
32 changed files with 244 additions and 69 deletions

View File

@@ -1,5 +1,14 @@
# Changelog
## v2.16.2 - 106 (2022-03-31)
- Fix some character sequences being shown as a single character
## v2.16.1 - 105 (2022-03-25)
- Fix gray block appearing on invalid value for barcode
- Stocard import fixes
## v2.16.0 - 104 (2022-03-09)
- Save card detail expansion state

View File

@@ -18,8 +18,8 @@ android {
applicationId "me.hackerchick.catima"
minSdkVersion 21
targetSdkVersion 31
versionCode 104
versionName "2.16.0"
versionCode 106
versionName "2.16.2"
vectorDrawables.useSupportLibrary true
multiDexEnabled true
@@ -90,7 +90,7 @@ dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
// Splash Screen
implementation 'androidx.core:core-splashscreen:1.0.0-beta01'
implementation 'androidx.core:core-splashscreen:1.0.0-beta02'
// Third-party
implementation 'com.journeyapps:zxing-android-embedded:4.3.0@aar'

View File

@@ -73,9 +73,10 @@ class LetterBitmap {
String firstChar = displayName.substring(0, 1).toUpperCase();
int firstCharEnd = 2;
while (firstCharEnd <= displayName.length()) {
// test for the longest render-able string
// Test for the longest render-able string
// But ignore containing only a-Z0-9 to not render things like ffi as a single character
String test = displayName.substring(0, firstCharEnd);
if (PaintCompat.hasGlyph(paint, test)) {
if (!isAlphabetical(test) && PaintCompat.hasGlyph(paint, test)) {
firstChar = test;
}
firstCharEnd++;
@@ -124,6 +125,10 @@ class LetterBitmap {
return colors.getColor(color, Color.BLACK);
}
private static boolean isAlphabetical(String string) {
return string.matches("[a-zA-Z0-9]*");
}
/**
* Determine the color which the letter tile will use if no default
* color is provided.

View File

@@ -855,10 +855,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
// Generate random header color
if (tempLoyaltyCard.headerColor == null) {
// Select a random color to start out with.
TypedArray colors = getResources().obtainTypedArray(R.array.letter_tile_colors);
final int color = (int) (Math.random() * colors.length());
updateTempState(LoyaltyCardField.headerColor, colors.getColor(color, Color.BLACK));
colors.recycle();
updateTempState(LoyaltyCardField.headerColor, Utils.getRandomHeaderColor(this));
}
// It can't be null because we set it in updateTempState but SpotBugs insists it can be
@@ -919,7 +916,7 @@ public class LoyaltyCardEditActivity extends CatimaAppCompatActivity {
protected void setColorFromIcon() {
Object icon = thumbnail.getTag();
if (icon != null && (icon instanceof Bitmap)) {
updateTempState(LoyaltyCardField.headerColor, new Palette.Builder((Bitmap) icon).generate().getDominantColor(tempLoyaltyCard.headerColor != null ? tempLoyaltyCard.headerColor : R.attr.colorPrimary));
updateTempState(LoyaltyCardField.headerColor, Utils.getHeaderColorFromImage((Bitmap) icon, tempLoyaltyCard.headerColor != null ? tempLoyaltyCard.headerColor : R.attr.colorPrimary));
} else {
Log.d("setColorFromIcon", "attempting header color change from icon but icon does not exist");
}

View File

@@ -122,6 +122,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
private final int HEADER_FILTER_ALPHA = 127;
final private TaskHandler mTasks = new TaskHandler();
Runnable barcodeImageGenerationFinishedCallback;
@Override
public boolean onDown(MotionEvent e) {
@@ -286,6 +287,19 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
iconImage = findViewById(R.id.icon_image);
landscapeToolbar = findViewById(R.id.toolbar_landscape);
barcodeImageGenerationFinishedCallback = () -> {
if (!(boolean) mainImage.getTag()) {
mainImage.setVisibility(View.GONE);
imageTypes.remove(ImageType.BARCODE);
// Redraw UI
setDotIndicator(Utils.isDarkModeEnabled(LoyaltyCardViewActivity.this));
setFullscreen(isFullscreen);
Toast.makeText(LoyaltyCardViewActivity.this, getString(R.string.wrongValueForBarcodeType), Toast.LENGTH_LONG).show();
}
};
centerGuideline = findViewById(R.id.centerGuideline);
barcodeScaler = findViewById(R.id.barcodeScaler);
barcodeScaler.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@@ -649,22 +663,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
imageTypes.add(ImageType.IMAGE_BACK);
}
dotIndicator.removeAllViews();
if (imageTypes.size() >= 2) {
dots = new ImageView[imageTypes.size()];
for (int i = 0; i < imageTypes.size(); i++) {
dots[i] = new ImageView(this);
dots[i].setImageDrawable(getDotIcon(false, darkMode));
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(8, 0, 8, 0);
dotIndicator.addView(dots[i], params);
}
dotIndicator.setVisibility(View.VISIBLE);
}
setDotIndicator(darkMode);
setFullscreen(isFullscreen);
@@ -818,7 +817,7 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
format,
null,
false,
null,
barcodeImageGenerationFinishedCallback,
addPadding);
mTasks.executeTask(TaskHandler.TYPE.BARCODE, barcodeWriter);
}
@@ -900,6 +899,25 @@ public class LoyaltyCardViewActivity extends CatimaAppCompatActivity implements
drawMainImage(newIndex, false, isFullscreen);
}
private void setDotIndicator(boolean darkMode) {
dotIndicator.removeAllViews();
if (imageTypes.size() >= 2) {
dots = new ImageView[imageTypes.size()];
for (int i = 0; i < imageTypes.size(); i++) {
dots[i] = new ImageView(this);
dots[i].setImageDrawable(getDotIcon(false, darkMode));
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(8, 0, 8, 0);
dotIndicator.addView(dots[i], params);
}
dotIndicator.setVisibility(View.VISIBLE);
}
}
/**
* When enabled, hides the status bar and moves the barcode to the top of the screen.
* <p>

View File

@@ -5,6 +5,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
@@ -48,6 +49,7 @@ import androidx.appcompat.app.AppCompatDelegate;
import androidx.core.graphics.ColorUtils;
import androidx.exifinterface.media.ExifInterface;
import androidx.palette.graphics.Palette;
import protect.card_locker.preferences.Settings;
public class Utils {
@@ -518,4 +520,18 @@ public class Utils {
item.setTitle(R.string.action_show_details);
}
}
public static int getHeaderColorFromImage(Bitmap image, int fallback) {
if (image == null) {
return fallback;
}
return new Palette.Builder(image).generate().getDominantColor(R.attr.colorPrimary);
}
public static int getRandomHeaderColor(Context context) {
TypedArray colors = context.getResources().obtainTypedArray(R.array.letter_tile_colors);
final int color = (int) (Math.random() * colors.length());
return colors.getColor(color, Color.BLACK);
}
}

View File

@@ -21,6 +21,7 @@ import java.text.ParseException;
import protect.card_locker.CatimaBarcode;
import protect.card_locker.DBHelper;
import protect.card_locker.FormatException;
import protect.card_locker.Utils;
/**
* Class for importing a database from CSV (Comma Separate Values)
@@ -56,7 +57,7 @@ public class FidmeImporter implements Importer {
try {
for (CSVRecord record : fidmeParser) {
importLoyaltyCard(database, record);
importLoyaltyCard(context, database, record);
if (Thread.currentThread().isInterrupted()) {
throw new InterruptedException();
@@ -75,7 +76,7 @@ public class FidmeImporter implements Importer {
* Import a single loyalty card into the database using the given
* session.
*/
private void importLoyaltyCard(SQLiteDatabase database, CSVRecord record)
private void importLoyaltyCard(Context context, SQLiteDatabase database, CSVRecord record)
throws FormatException {
// A loyalty card export from Fidme contains the following fields:
// Retailer (store name)
@@ -117,11 +118,12 @@ public class FidmeImporter implements Importer {
// TODO: Hook this into our own loyalty card DB if we ever get one
CatimaBarcode barcodeType = null;
// No favourite data in the export either
// No favourite data or colour in the export either
int starStatus = 0;
int headerColor = Utils.getRandomHeaderColor(context);
// TODO: Front and back image
DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, null, starStatus, null);
DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, headerColor, starStatus, null);
}
}

View File

@@ -41,13 +41,13 @@ import protect.card_locker.ZipUtils;
public class StocardImporter implements Importer {
public void importData(Context context, SQLiteDatabase database, InputStream input, char[] password) throws IOException, FormatException, JSONException, ParseException {
HashMap<String, HashMap<String, Object>> loyaltyCardHashMap = new HashMap<>();
HashMap<String, HashMap<String, String>> providers = new HashMap<>();
HashMap<String, HashMap<String, Object>> providers = new HashMap<>();
final CSVParser parser = new CSVParser(new InputStreamReader(context.getResources().openRawResource(R.raw.stocard_stores), StandardCharsets.UTF_8), CSVFormat.RFC4180.builder().setHeader().build());
try {
for (CSVRecord record : parser) {
HashMap<String, String> recordData = new HashMap<>();
HashMap<String, Object> recordData = new HashMap<>();
recordData.put("name", record.get("name"));
recordData.put("barcodeFormat", record.get("barcodeFormat"));
@@ -62,6 +62,8 @@ public class StocardImporter implements Importer {
ZipInputStream zipInputStream = new ZipInputStream(input, password);
String[] providersFileName = null;
String[] customProvidersBaseName = null;
String customProviderId = "";
String[] cardBaseName = null;
String cardName = "";
LocalFileHeader localFileHeader;
@@ -78,6 +80,14 @@ public class StocardImporter implements Importer {
nameParts[0],
"analytics-properties.json"
};
customProvidersBaseName = new String[]{
nameParts[0],
"sync",
"data",
"users",
nameParts[0],
"loyalty-card-custom-providers"
};
cardBaseName = new String[]{
nameParts[0],
"sync",
@@ -88,6 +98,33 @@ public class StocardImporter implements Importer {
};
}
if (startsWith(nameParts, customProvidersBaseName, 1)) {
// Extract providerId
customProviderId = nameParts[customProvidersBaseName.length].split("\\.", 2)[0];
// Name file
if (nameParts.length == customProvidersBaseName.length + 1) {
// Ignore the .txt file
if (fileName.endsWith(".json")) {
JSONObject jsonObject = ZipUtils.readJSON(zipInputStream);
providers = appendToHashMap(
providers,
customProviderId,
"name",
jsonObject.getString("name")
);
}
} else if (fileName.endsWith("logo.png")) {
providers = appendToHashMap(
providers,
customProviderId,
"logo",
ZipUtils.readImage(zipInputStream)
);
}
}
if (startsWith(nameParts, cardBaseName, 1)) {
// Extract cardName
cardName = nameParts[cardBaseName.length].split("\\.", 2)[0];
@@ -98,24 +135,33 @@ public class StocardImporter implements Importer {
if (fileName.endsWith(".json")) {
JSONObject jsonObject = ZipUtils.readJSON(zipInputStream);
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
loyaltyCardHashMap = appendToHashMap(
loyaltyCardHashMap,
cardName,
"cardId",
jsonObject.getString("input_id")
);
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
// Provider ID can be either custom or not, extract whatever version is relevant
String customProviderPrefix = "/users/" + nameParts[0] + "/loyalty-card-custom-providers/";
String providerId = jsonObject
.getJSONObject("input_provider_reference")
.getString("identifier");
if (providerId.startsWith(customProviderPrefix)) {
providerId = providerId.substring(customProviderPrefix.length());
} else {
providerId = providerId.substring("/loyalty-card-providers/".length());
}
loyaltyCardHashMap = appendToHashMap(
loyaltyCardHashMap,
cardName,
"_providerId",
jsonObject
.getJSONObject("input_provider_reference")
.getString("identifier")
.substring("/loyalty-card-providers/".length())
providerId
);
if (jsonObject.has("input_barcode_format")) {
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
loyaltyCardHashMap = appendToHashMap(
loyaltyCardHashMap,
cardName,
"barcodeType",
@@ -124,7 +170,7 @@ public class StocardImporter implements Importer {
}
}
} else if (fileName.endsWith("notes/default.json")) {
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
loyaltyCardHashMap = appendToHashMap(
loyaltyCardHashMap,
cardName,
"note",
@@ -132,14 +178,14 @@ public class StocardImporter implements Importer {
.getString("content")
);
} else if (fileName.endsWith("/images/front.png")) {
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
loyaltyCardHashMap = appendToHashMap(
loyaltyCardHashMap,
cardName,
"frontImage",
ZipUtils.readImage(zipInputStream)
);
} else if (fileName.endsWith("/images/back.png")) {
loyaltyCardHashMap = appendToLoyaltyCardHashMap(
loyaltyCardHashMap = appendToHashMap(
loyaltyCardHashMap,
cardName,
"backImage",
@@ -155,14 +201,14 @@ public class StocardImporter implements Importer {
for (HashMap<String, Object> loyaltyCardData : loyaltyCardHashMap.values()) {
String providerId = (String) loyaltyCardData.get("_providerId");
HashMap<String, String> providerData = providers.get(providerId);
HashMap<String, Object> providerData = providers.get(providerId);
String store = providerData != null ? providerData.get("name") : providerId;
String store = providerData != null ? providerData.get("name").toString() : providerId;
String note = (String) Utils.mapGetOrDefault(loyaltyCardData, "note", "");
String cardId = (String) loyaltyCardData.get("cardId");
String barcodeTypeString = (String) Utils.mapGetOrDefault(loyaltyCardData, "barcodeType", providerData != null ? providerData.get("barcodeFormat") : null);
CatimaBarcode barcodeType = null;
if (barcodeTypeString != null) {
if (barcodeTypeString != null && !barcodeTypeString.isEmpty()) {
if (barcodeTypeString.equals("RSS_DATABAR_EXPANDED")) {
barcodeType = CatimaBarcode.fromBarcode(BarcodeFormat.RSS_EXPANDED);
} else {
@@ -170,7 +216,18 @@ public class StocardImporter implements Importer {
}
}
long loyaltyCardInternalId = DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, null, 0, null);
int headerColor = Utils.getRandomHeaderColor(context);
Bitmap cardIcon = null;
if (providerData != null && providerData.containsKey("logo")) {
cardIcon = (Bitmap) providerData.get("logo");
headerColor = Utils.getHeaderColorFromImage(cardIcon, headerColor);
}
long loyaltyCardInternalId = DBHelper.insertLoyaltyCard(database, store, note, null, BigDecimal.valueOf(0), null, cardId, null, barcodeType, headerColor, 0, null);
if (cardIcon != null) {
Utils.saveCardImage(context, cardIcon, (int) loyaltyCardInternalId, ImageLocationType.icon);
}
if (loyaltyCardData.containsKey("frontImage")) {
Utils.saveCardImage(context, (Bitmap) loyaltyCardData.get("frontImage"), (int) loyaltyCardInternalId, ImageLocationType.front);
@@ -197,7 +254,7 @@ public class StocardImporter implements Importer {
return true;
}
private HashMap<String, HashMap<String, Object>> appendToLoyaltyCardHashMap(HashMap<String, HashMap<String, Object>> loyaltyCardHashMap, String cardID, String key, Object value) {
private HashMap<String, HashMap<String, Object>> appendToHashMap(HashMap<String, HashMap<String, Object>> loyaltyCardHashMap, String cardID, String key, Object value) {
HashMap<String, Object> loyaltyCardData = loyaltyCardHashMap.get(cardID);
if (loyaltyCardData == null) {
loyaltyCardData = new HashMap<>();

View File

@@ -7,11 +7,11 @@ solokot
Katharine Chui
mondstern
Oğuz Ersen
IllusiveMan196
Altonss
IllusiveMan196
Petr Novák
Joel A
StoyanDimitrov
Joel A
Taco
Gediminas Murauskas
Nyatsuki
@@ -20,8 +20,8 @@ Samantaz Fox
arno-github
Ankit Tiwari
Sergio Paredes
laralem
huuhaa
laralem
arshbeerSingh
Miha Frangež
sr093906
@@ -33,6 +33,7 @@ betsythefc
Silvério Santos
waffshappen
ati3
Jane Kong
K. Herbert
Still Hsu
String E. Fighter
@@ -45,7 +46,6 @@ KovalevArtem
Clonewayx
D. Domig
Diego
Jane Kong
Lukas Grassauer
Marnick L'Eau
Michalis

View File

@@ -440,7 +440,7 @@ _id,name,barcodeFormat
450,CAD,EAN_13
451,Camomilla,EAN_13
452,"Carpisa Yamamay",EAN_13
453,Carrefour,EAN_13
453,Carrefour,CODE_128
454,"Cisalfa Sport",EAN_13
455,Coin,ITF
456,Comet,EAN_13
1 _id name barcodeFormat
440 450 CAD EAN_13
441 451 Camomilla EAN_13
442 452 Carpisa Yamamay EAN_13
443 453 Carrefour EAN_13 CODE_128
444 454 Cisalfa Sport EAN_13
445 455 Coin ITF
446 456 Comet EAN_13

View File

@@ -64,7 +64,7 @@
<string name="share">Compartir</string>
<string name="barcodeNoBarcode">Esta tarjeta no tiene código de barras</string>
<string name="barcodeType">Tipo de código de barras</string>
<string name="noMatchingGiftCards">No se ha encontrado nada. Pruebe a modificar su búsqueda.</string>
<string name="noMatchingGiftCards">Sin resultados. Pruebe modificando su búsqueda.</string>
<string name="action_search">Buscar</string>
<string name="app_revision_fmt">Información de la revisión: <xliff:g id="app_revision_url">%s</xliff:g></string>
<string name="noGroups">Primero pulse en el botón «+» para añadir grupos de categorización.</string>

View File

@@ -229,6 +229,6 @@
<item quantity="one"><xliff:g>%s</xliff:g> point</item>
<item quantity="other"><xliff:g>%s</xliff:g> points</item>
</plurals>
<string name="settings_oled_dark">Fond noir pur pour le thème sombre</string>
<string name="settings_oled_dark">Fond noir pour le thème sombre</string>
<string name="include_if_asking_support">Si vous voulez demander de l\'aide, incluez les informations suivantes :</string>
</resources>

View File

@@ -207,5 +207,5 @@
<string name="no">Nie</string>
<string name="passwordRequired">Zadajte prosím heslo</string>
<string name="parsingBalanceFailed"><xliff:g>%s</xliff:g> sa nezdá byť platným zostatkom.</string>
<string name="noGiftCardsGroup">Vytvorte niekoľko kariet a potom ich priraďte k tejto skupine.</string>
</resources>
<string name="noGiftCardsGroup">Zatiaľ nemáte žiadne vernostné karty. Keď nejaké pridáte, môžete ich priradiť ku skupine tu.</string>
</resources>

View File

@@ -175,4 +175,47 @@
<plurals name="balancePoints">
<item quantity="other"><xliff:g>%s</xliff:g></item>
</plurals>
<string name="settings_locale">语言</string>
<string name="setIcon">设置图标</string>
<string name="settings_pink_theme">粉色</string>
<string name="settings_oled_dark">纯黑色背景的深色主题</string>
<string name="hideMoreInfo">隐藏信息</string>
<string name="translate_platform">在Weblate上</string>
<string name="settings_sky_blue_theme">天蓝</string>
<string name="showMoreInfo">显示信息</string>
<string name="options">选项</string>
<string name="source_repository">源码库</string>
<string name="include_if_asking_support">请求帮助时,请填写下列信息:</string>
<string name="exportPasswordHint">输入密码</string>
<string name="settings_grey_theme">灰色</string>
<string name="sort">排序</string>
<string name="version_history">历史版本</string>
<string name="rate_this_app">给这个应用评分</string>
<string name="on_google_play">在Google Play上</string>
<string name="report_error">报告错误</string>
<string name="shortcutSelectCard">选择一张卡片</string>
<string name="group_name_already_in_use">组名已在使用中</string>
<string name="group_name_is_empty">组名不可为空</string>
<string name="settings_brown_theme">棕色</string>
<string name="settings_green_theme">绿色</string>
<string name="sort_by_most_recently_used">最近使用</string>
<string name="sort_by_name">名称</string>
<string name="help_translate_this_app">帮助翻译此应用</string>
<string name="sort_by_balance">余额</string>
<string name="swipeToSwitchImages">滑动或长按来切换图片</string>
<string name="reverse">倒序</string>
<string name="sort_by">排序方式</string>
<string name="selectColor">选择颜色</string>
<string name="settings_theme_color">主题色</string>
<string name="settings_blue_theme">蓝色</string>
<string name="sort_by_expiry">到期日</string>
<string name="settings_catima_theme">Catima</string>
<string name="noGroupCards">该组是空的</string>
<string name="on_github">在GitHub上</string>
<string name="group_updated">群组已更新</string>
<string name="editGroup">编辑组:<xliff:g>%s</xliff:g></string>
<string name="settings_system_locale">系统</string>
<string name="exportPassword">设置密码来保护导出的内容(可选)</string>
<string name="settings_magenta_theme">紫红</string>
<string name="settings_violet_theme">紫色</string>
</resources>

View File

@@ -64,9 +64,6 @@ import static org.robolectric.Shadows.shadowOf;
public class ImportExportTest {
private Activity activity;
private SQLiteDatabase mDatabase;
private long nowMs;
private long lastYearMs;
private final int MONTHS_PER_YEAR = 12;
private final String BARCODE_DATA = "428311627547";
private final CatimaBarcode BARCODE_TYPE = CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A);
@@ -77,11 +74,6 @@ public class ImportExportTest {
activity = Robolectric.setupActivity(MainActivity.class);
mDatabase = TestHelpers.getEmptyDb(activity).getWritableDatabase();
nowMs = System.currentTimeMillis();
Calendar lastYear = Calendar.getInstance();
lastYear.set(Calendar.YEAR, lastYear.get(Calendar.YEAR) - 1);
lastYearMs = lastYear.getTimeInMillis();
}
/**

View File

@@ -0,0 +1 @@
- Нов дизайн с Material You

View File

@@ -0,0 +1,2 @@
- Grauer Block bei ungültigem Wert für Barcode behoben
- Korrekturen beim Stocard-Import

View File

@@ -0,0 +1,2 @@
- Fix gray block appearing on invalid value for barcode
- Stocard import fixes

View File

@@ -0,0 +1 @@
- Fix some character sequences being shown as a single character

View File

@@ -1,9 +1,9 @@
Lopeta muovisten bonuskorttien etsiminen kaupan tai verkkokaupan kassalla.
<b>Skannaa viivakoodit laitteeseesi sen kameran avulla, unohda kortit.</b>
Unohda lompakko tai pidä se ultrakevyesti arvoesineitä varten.
Unohda lompakko tai pidä se ultrakevye arvoesineitä varten.
Tämän välttämättömän jokapäiväisen kantamisen (EDC) välineen avulla voit korvata turhan muovin käteisellä.
Tämän päivittäiseen käyttöön suunnitellun sovelluksen avulla voit korvata turhan muovin käteisellä.
- Vältä vakoilu hyvin vähillä luvilla. Ei Internet-yhteyttä eikä mainoksia.
- Lisää kortteja tai koodeja nimillä ja muokattavilla väreillä.
@@ -14,7 +14,7 @@ Tämän välttämättömän jokapäiväisen kantamisen (EDC) välineen avulla vo
- Tumma teema ja saavutettavuusvaihtoehdot näkövammaisille käyttäjille.
- Libre-ohjelmistoyhteisön kaikille tekemä.
- Lokalisoidut käsintehdyt käännökset yli 20 kielelle.
- Gratis, yhteisön panoksilla tuettu.
- Ilmainen, yhteisön panoksilla tuettu.
- Käytä, tutki, muuta ja jaa sitä haluamallasi tavalla; <i>kaikkien</i> kanssa.
- Ei vain vapaat ohjelmistot / avoin lähdekoodi. <i>Copylefted</i> libre-ohjelmisto (GPLv3+) kortinhallinta.

View File

@@ -0,0 +1,2 @@
- Plusieurs corrections mineures
- Correction des plantages en langue norvégienne

View File

@@ -0,0 +1,2 @@
- Sauvegarde de l'état d'expansion du détail de carte
- Corrections mineures de l'interface utilisateur

View File

@@ -0,0 +1,2 @@
- Correction du bloc gris apparaissant sur une valeur invalide pour un code-barres
- Corrections pour l'importation de Stocard

View File

@@ -0,0 +1,14 @@
- Est désormais officiellement compatible avec les codes-barres à une et deux dimensions suivants :
- AZTEC
- CODABAR
- CODE_39
- CODE_128
- DATA_MATRIX
- EAN_8
- EAN_13
- ITF
- PDF_417
- QR_CODE
- UPC_A
- Les codes-barres sont maintenant affichés plus grand, afin d'en faciliter la lecture

View File

@@ -0,0 +1,2 @@
- Vari errori minori sistemati
- Sistemata la chiusura inaspettata dell'app quando si usa la lingua norvegese

View File

@@ -0,0 +1,2 @@
- Sistemata la selezione manuale della lingua che non veniva applicata dappertutto
- Sistemata la chiusura inaspettata dell'app quando si facevano delle modifiche con una lingua priva di differenze regionali

View File

@@ -0,0 +1 @@
Pre vaše čiarové kódy, členstvá, vernostné programy, kupóny a vstupenky.

View File

@@ -0,0 +1 @@
Catima - Vernostné karty

View File

@@ -1 +1 @@
Catima
Catima — Kundklubbsplånboken

View File

@@ -1 +1,2 @@
- Kart ayrıntısı genişletme durumunu kaydet
- Küçük kullanıcı arayüzü düzeltmeleri

View File

@@ -0,0 +1,2 @@
- Barkod için geçersiz değerde görünen gri blok düzeltildi
- Stocard içe aktarma düzeltmeleri

View File

@@ -0,0 +1 @@
- Bazı karakter dizilerinin tek karakter olarak gösterilmesi düzeltildi