Zepp OS: Honor Catima barcode encoding if available

This commit is contained in:
José Rebelo
2026-02-07 14:17:40 +00:00
parent 6edd12ec6e
commit 081af1664d
5 changed files with 29 additions and 4 deletions
+1
View File
@@ -28,6 +28,7 @@
<w>btbr</w>
<w>böhler</w>
<w>carsten</w>
<w>catima</w>
<w>chamorro</w>
<w>codeberg</w>
<w>colmi</w>
@@ -46,6 +46,7 @@ import androidx.preference.PreferenceCategory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -230,6 +231,12 @@ public class LoyaltyCardsSettingsFragment extends AbstractPreferenceFragment {
}
values.removeAll(toRemove);
syncGroups.setSummary(TextUtils.join(", ", values));
syncGroups.setOnPreferenceChangeListener((preference, newValue) -> {
//noinspection unchecked
syncGroups.setSummary(TextUtils.join(", ", (Collection<String>) newValue));
return true;
});
}
}
@@ -25,6 +25,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.math.BigDecimal;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Currency;
import java.util.Date;
@@ -172,6 +174,9 @@ public class CatimaContentProvider {
final int starred = cursor.getInt(cursor.getColumnIndexOrThrow(LoyaltyCardDbIds.STAR_STATUS));
final long lastUsed = cursor.getLong(cursor.getColumnIndexOrThrow(LoyaltyCardDbIds.LAST_USED));
final int archiveStatus = cursor.getInt(cursor.getColumnIndexOrThrow(LoyaltyCardDbIds.ARCHIVE_STATUS));
// Barcode encoding since content provider version 1.1
final int barcodeEncodingColumn = cursor.getColumnIndex(LoyaltyCardDbIds.BARCODE_ENCODING);
final String barcodeEncoding = barcodeEncodingColumn >= 0 ? cursor.getString(barcodeEncodingColumn) : StandardCharsets.ISO_8859_1.name();
int barcodeTypeColumn = cursor.getColumnIndexOrThrow(LoyaltyCardDbIds.BARCODE_TYPE);
int balanceTypeColumn = cursor.getColumnIndexOrThrow(LoyaltyCardDbIds.BALANCE_TYPE);
@@ -212,6 +217,7 @@ public class CatimaContentProvider {
cardId,
barcodeId,
barcodeFormat,
barcodeEncoding,
headerColor,
starred != 0,
archiveStatus != 0,
@@ -221,7 +227,7 @@ public class CatimaContentProvider {
/**
* Copied from Catima, protect.card_locker.DBHelper.LoyaltyCardDbGroups.
* Commit: 8607e1c2
* Commit: a5599dc
*/
public static class LoyaltyCardDbGroups {
public static final String TABLE = "groups";
@@ -231,12 +237,13 @@ public class CatimaContentProvider {
/**
* Copied from Catima, protect.card_locker.DBHelper.LoyaltyCardDbIds.
* Commit: 8607e1c2
* Commit: a5599dc
*/
public static class LoyaltyCardDbIds {
public static final String TABLE = "cards";
public static final String ID = "_id";
public static final String STORE = "store";
public static final String VALID_FROM = "validfrom";
public static final String EXPIRY = "expiry";
public static final String BALANCE = "balance";
public static final String BALANCE_TYPE = "balancetype";
@@ -246,6 +253,7 @@ public class CatimaContentProvider {
public static final String CARD_ID = "cardid";
public static final String BARCODE_ID = "barcodeid";
public static final String BARCODE_TYPE = "barcodetype";
public static final String BARCODE_ENCODING = "barcodeencoding";
public static final String STAR_STATUS = "starstatus";
public static final String LAST_USED = "lastused";
public static final String ZOOM_LEVEL = "zoomlevel";
@@ -254,7 +262,7 @@ public class CatimaContentProvider {
/**
* Copied from Catima, protect.card_locker.DBHelper.LoyaltyCardDbIdsGroups.
* Commit: 8607e1c2
* Commit: a5599dc
*/
public static class LoyaltyCardDbIdsGroups {
public static final String TABLE = "cardsGroups";
@@ -23,6 +23,7 @@ import org.apache.commons.lang3.builder.CompareToBuilder;
import java.io.Serializable;
import java.math.BigDecimal;
import java.nio.charset.Charset;
import java.util.Currency;
import java.util.Date;
import java.util.Locale;
@@ -46,6 +47,8 @@ public class LoyaltyCard implements Serializable, Comparable<LoyaltyCard> {
@Nullable
private final Integer color;
private final String barcodeEncoding;
private final boolean starred;
private final boolean archived;
private final long lastUsed;
@@ -59,6 +62,7 @@ public class LoyaltyCard implements Serializable, Comparable<LoyaltyCard> {
final String cardId,
@Nullable final String barcodeId,
@Nullable final BarcodeFormat barcodeFormat,
final String barcodeEncoding,
@Nullable final Integer color,
final boolean starred,
final boolean archived,
@@ -72,6 +76,7 @@ public class LoyaltyCard implements Serializable, Comparable<LoyaltyCard> {
this.cardId = cardId;
this.barcodeId = barcodeId;
this.barcodeFormat = barcodeFormat;
this.barcodeEncoding = barcodeEncoding;
this.color = color;
this.starred = starred;
this.archived = archived;
@@ -116,6 +121,10 @@ public class LoyaltyCard implements Serializable, Comparable<LoyaltyCard> {
return barcodeFormat;
}
public Charset getBarcodeEncoding() {
return Charset.forName(barcodeEncoding);
}
@Nullable
public Integer getColor() {
return color;
@@ -209,7 +209,7 @@ public class ZeppOsLoyaltyCardService extends AbstractZeppOsService {
baos.write(0);
if (card.getBarcodeId() != null) {
baos.write(card.getBarcodeId().getBytes(StandardCharsets.UTF_8));
baos.write(card.getBarcodeId().getBytes(card.getBarcodeEncoding()));
} else {
baos.write(card.getCardId().getBytes(StandardCharsets.UTF_8));
}