diff --git a/app/src/main/java/protect/card_locker/DBHelper.java b/app/src/main/java/protect/card_locker/DBHelper.java
index 53ec2ea5ca..dc0888c190 100644
--- a/app/src/main/java/protect/card_locker/DBHelper.java
+++ b/app/src/main/java/protect/card_locker/DBHelper.java
@@ -47,6 +47,7 @@ public static class LoyaltyCardDbIds {
public static final String LAST_USED = "lastused";
public static final String ZOOM_LEVEL = "zoomlevel";
public static final String ARCHIVE_STATUS = "archive";
+ public static final String USAGE_NUMBER = "usagenumber";
}
public static class LoyaltyCardDbIdsGroups {
@@ -65,7 +66,9 @@ public static class LoyaltyCardDbFTS {
public enum LoyaltyCardOrder {
Alpha,
LastUsed,
- Expiry
+ Expiry,
+
+ UsageNumber
}
public enum LoyaltyCardOrderDirection {
@@ -103,6 +106,7 @@ public void onCreate(SQLiteDatabase db) {
LoyaltyCardDbIds.HEADER_COLOR + " INTEGER," +
LoyaltyCardDbIds.CARD_ID + " TEXT not null," +
LoyaltyCardDbIds.BARCODE_ID + " TEXT," +
+ LoyaltyCardDbIds.USAGE_NUMBER + " INTEGER DEFAULT '0', " +
LoyaltyCardDbIds.BARCODE_TYPE + " TEXT," +
LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0'," +
LoyaltyCardDbIds.LAST_USED + " INTEGER DEFAULT '0', " +
@@ -189,6 +193,7 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
LoyaltyCardDbIds.HEADER_COLOR + " INTEGER," +
LoyaltyCardDbIds.CARD_ID + " TEXT not null," +
LoyaltyCardDbIds.BARCODE_ID + " TEXT," +
+ LoyaltyCardDbIds.USAGE_NUMBER + " INTEGER DEFAULT '0', " +
LoyaltyCardDbIds.BARCODE_TYPE + " TEXT," +
LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0' )");
@@ -202,6 +207,7 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
LoyaltyCardDbIds.HEADER_COLOR + " ," +
LoyaltyCardDbIds.CARD_ID + " ," +
LoyaltyCardDbIds.BARCODE_ID + " ," +
+ LoyaltyCardDbIds.USAGE_NUMBER + " , " +
LoyaltyCardDbIds.BARCODE_TYPE + " ," +
LoyaltyCardDbIds.STAR_STATUS + ")" +
" SELECT " +
@@ -214,6 +220,7 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
LoyaltyCardDbIds.HEADER_COLOR + " ," +
LoyaltyCardDbIds.CARD_ID + " ," +
LoyaltyCardDbIds.BARCODE_ID + " ," +
+ LoyaltyCardDbIds.USAGE_NUMBER + " , " +
" NULLIF(" + LoyaltyCardDbIds.BARCODE_TYPE + ",'') ," +
LoyaltyCardDbIds.STAR_STATUS +
" FROM " + LoyaltyCardDbIds.TABLE);
@@ -230,6 +237,7 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
LoyaltyCardDbIds.HEADER_COLOR + " INTEGER," +
LoyaltyCardDbIds.CARD_ID + " TEXT not null," +
LoyaltyCardDbIds.BARCODE_ID + " TEXT," +
+ LoyaltyCardDbIds.USAGE_NUMBER + " INTEGER DEFAULT '0', " +
LoyaltyCardDbIds.BARCODE_TYPE + " TEXT," +
LoyaltyCardDbIds.STAR_STATUS + " INTEGER DEFAULT '0' )");
@@ -243,6 +251,7 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
LoyaltyCardDbIds.HEADER_COLOR + " ," +
LoyaltyCardDbIds.CARD_ID + " ," +
LoyaltyCardDbIds.BARCODE_ID + " ," +
+ LoyaltyCardDbIds.USAGE_NUMBER + " , " +
LoyaltyCardDbIds.BARCODE_TYPE + " ," +
LoyaltyCardDbIds.STAR_STATUS + ")" +
" SELECT " +
@@ -416,6 +425,7 @@ public static long insertLoyaltyCard(
contentValues.put(LoyaltyCardDbIds.BALANCE_TYPE, balanceType != null ? balanceType.getCurrencyCode() : null);
contentValues.put(LoyaltyCardDbIds.CARD_ID, cardId);
contentValues.put(LoyaltyCardDbIds.BARCODE_ID, barcodeId);
+ contentValues.put(LoyaltyCardDbIds.USAGE_NUMBER, 0);
contentValues.put(LoyaltyCardDbIds.BARCODE_TYPE, barcodeType != null ? barcodeType.name() : null);
contentValues.put(LoyaltyCardDbIds.HEADER_COLOR, headerColor);
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
@@ -437,7 +447,7 @@ public static boolean updateLoyaltyCard(
final Date validFrom, final Date expiry, final BigDecimal balance,
final Currency balanceType, final String cardId, final String barcodeId,
final CatimaBarcode barcodeType, final Integer headerColor, final int starStatus,
- final Long lastUsed, final int archiveStatus) {
+ final Long lastUsed, final int archiveStatus ) {
database.beginTransaction();
// Card
@@ -477,6 +487,24 @@ public static boolean updateLoyaltyCardArchiveStatus(SQLiteDatabase database, fi
return (rowsUpdated == 1);
}
+ public static boolean updateLoyaltyCardUsageNumber(SQLiteDatabase database, final int id) {
+
+ LoyaltyCard to_update_card = getLoyaltyCard(database,id);
+ int usage_number = to_update_card.usage_number + 1;
+
+ ContentValues contentValues = new ContentValues();
+
+ contentValues.put(LoyaltyCardDbIds.USAGE_NUMBER, usage_number);
+ Log.d("updateLoyaltyCardULevel", "Card Id = " + id + " usage number = " + usage_number);
+ int rowsUpdated = database.update(LoyaltyCardDbIds.TABLE, contentValues,
+ whereAttrs(LoyaltyCardDbIds.ID),
+ withArgs(to_update_card.id));
+ Log.d("updateLoyaltyCardZLevel", "Rows changed = " + rowsUpdated);
+
+ return (rowsUpdated == 1);
+
+ }
+
public static boolean updateLoyaltyCardStarStatus(SQLiteDatabase database, final int id, final int starStatus) {
ContentValues contentValues = new ContentValues();
contentValues.put(LoyaltyCardDbIds.STAR_STATUS, starStatus);
@@ -687,18 +715,31 @@ public static Cursor getLoyaltyCardCursor(SQLiteDatabase database, String filter
String orderField = getFieldForOrder(order);
- return database.rawQuery("SELECT " + LoyaltyCardDbIds.TABLE + ".* FROM " + LoyaltyCardDbIds.TABLE +
- " JOIN " + LoyaltyCardDbFTS.TABLE +
- " ON " + LoyaltyCardDbFTS.TABLE + "." + LoyaltyCardDbFTS.ID + " = " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ID +
- (filter.trim().isEmpty() ? " " : " AND " + LoyaltyCardDbFTS.TABLE + " MATCH ? ") +
- groupFilter.toString() +
- archiveFilterString +
- " ORDER BY " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ARCHIVE_STATUS + " ASC, " +
- LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STAR_STATUS + " DESC, " +
- " (CASE WHEN " + LoyaltyCardDbIds.TABLE + "." + orderField + " IS NULL THEN 1 ELSE 0 END), " +
- LoyaltyCardDbIds.TABLE + "." + orderField + " COLLATE NOCASE " + getDbDirection(order, direction) + ", " +
- LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STORE + " COLLATE NOCASE ASC " +
- limitString, filter.trim().isEmpty() ? null : new String[]{TextUtils.join("* ", filter.split(" ")) + '*'}, null);
+ if(order != LoyaltyCardOrder.UsageNumber)
+ return database.rawQuery("SELECT " + LoyaltyCardDbIds.TABLE + ".* FROM " + LoyaltyCardDbIds.TABLE +
+ " JOIN " + LoyaltyCardDbFTS.TABLE +
+ " ON " + LoyaltyCardDbFTS.TABLE + "." + LoyaltyCardDbFTS.ID + " = " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ID +
+ (filter.trim().isEmpty() ? " " : " AND " + LoyaltyCardDbFTS.TABLE + " MATCH ? ") +
+ groupFilter.toString() +
+ archiveFilterString +
+ " ORDER BY " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ARCHIVE_STATUS + " ASC, " +
+ LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STAR_STATUS + " DESC, " +
+ " (CASE WHEN " + LoyaltyCardDbIds.TABLE + "." + orderField + " IS NULL THEN 1 ELSE 0 END), " +
+ LoyaltyCardDbIds.TABLE + "." + orderField + " COLLATE NOCASE " + getDbDirection(order, direction) + ", " +
+ LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STORE + " COLLATE NOCASE ASC " +
+ limitString, filter.trim().isEmpty() ? null : new String[]{TextUtils.join("* ", filter.split(" ")) + '*'}, null);
+ else
+ return database.rawQuery("SELECT " + LoyaltyCardDbIds.TABLE + ".* FROM " + LoyaltyCardDbIds.TABLE +
+ " JOIN " + LoyaltyCardDbFTS.TABLE +
+ " ON " + LoyaltyCardDbFTS.TABLE + "." + LoyaltyCardDbFTS.ID + " = " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.ID +
+ (filter.trim().isEmpty() ? " " : " AND " + LoyaltyCardDbFTS.TABLE + " MATCH ? ") +
+ groupFilter.toString() +
+ archiveFilterString +
+ " ORDER BY " + LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.USAGE_NUMBER + " DESC, "+
+ " (CASE WHEN " + LoyaltyCardDbIds.TABLE + "." + orderField + " IS NULL THEN 1 ELSE 0 END), " +
+ LoyaltyCardDbIds.TABLE + "." + orderField + " COLLATE NOCASE " + getDbDirection(order, direction) + ", " +
+ LoyaltyCardDbIds.TABLE + "." + LoyaltyCardDbIds.STORE + " COLLATE NOCASE ASC " +
+ limitString, filter.trim().isEmpty() ? null : new String[]{TextUtils.join("* ", filter.split(" ")) + '*'}, null);
}
/**
@@ -900,6 +941,10 @@ private static String getFieldForOrder(LoyaltyCardOrder order) {
return LoyaltyCardDbIds.EXPIRY;
}
+ if (order == LoyaltyCardOrder.UsageNumber) {
+ return LoyaltyCardDbIds.USAGE_NUMBER;
+ }
+
throw new IllegalArgumentException("Unknown order " + order);
}
diff --git a/app/src/main/java/protect/card_locker/GroupCursorAdapter.java b/app/src/main/java/protect/card_locker/GroupCursorAdapter.java
index 96b350d08a..87dd7ac993 100644
--- a/app/src/main/java/protect/card_locker/GroupCursorAdapter.java
+++ b/app/src/main/java/protect/card_locker/GroupCursorAdapter.java
@@ -53,6 +53,8 @@ public void onBindViewHolder(GroupListItemViewHolder inputHolder, Cursor inputCu
int groupCardCount = DBHelper.getGroupCardCount(mDatabase, group._id);
int archivedCardCount = DBHelper.getArchivedCardsCount(mDatabase, group._id);
+ System.out.println("Try to find 1");
+
Resources resources = mContext.getResources();
String cardCountText;
diff --git a/app/src/main/java/protect/card_locker/ImportURIHelper.java b/app/src/main/java/protect/card_locker/ImportURIHelper.java
index e01cd1b6da..bcbd6a37cb 100644
--- a/app/src/main/java/protect/card_locker/ImportURIHelper.java
+++ b/app/src/main/java/protect/card_locker/ImportURIHelper.java
@@ -27,6 +27,8 @@ public class ImportURIHelper {
private static final String BARCODE_TYPE = DBHelper.LoyaltyCardDbIds.BARCODE_TYPE;
private static final String HEADER_COLOR = DBHelper.LoyaltyCardDbIds.HEADER_COLOR;
+ private static final String USAGE_NUMBER = DBHelper.LoyaltyCardDbIds.USAGE_NUMBER;
+
private final Context context;
private final String[] hosts = new String[3];
private final String[] paths = new String[3];
@@ -92,6 +94,7 @@ public LoyaltyCard parse(Uri uri) throws InvalidObjectException {
String note = kv.get(NOTE);
String cardId = kv.get(CARD_ID);
String barcodeId = kv.get(BARCODE_ID);
+ int usage_number = Integer.parseInt(kv.get(USAGE_NUMBER));
if (store == null || note == null || cardId == null)
throw new InvalidObjectException("Not a valid import URI: " + uri.toString());
@@ -122,7 +125,7 @@ public LoyaltyCard parse(Uri uri) throws InvalidObjectException {
headerColor = Integer.parseInt(unparsedHeaderColor);
}
- return new LoyaltyCard(-1, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, 0, Utils.getUnixTime(), 100, 0);
+ return new LoyaltyCard(-1, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, 0, Utils.getUnixTime(), 100, 0, usage_number);
} catch (NullPointerException | NumberFormatException | UnsupportedEncodingException | ArrayIndexOutOfBoundsException ex) {
throw new InvalidObjectException("Not a valid import URI");
}
diff --git a/app/src/main/java/protect/card_locker/LoyaltyCard.java b/app/src/main/java/protect/card_locker/LoyaltyCard.java
index d8cbdea9b1..d581a5cf0d 100644
--- a/app/src/main/java/protect/card_locker/LoyaltyCard.java
+++ b/app/src/main/java/protect/card_locker/LoyaltyCard.java
@@ -34,12 +34,14 @@ public class LoyaltyCard implements Parcelable {
public final long lastUsed;
public int zoomLevel;
+ public int usage_number;
+
public LoyaltyCard(final int id, final String store, final String note, final Date validFrom,
final Date expiry, final BigDecimal balance, final Currency balanceType,
- final String cardId, @Nullable final String barcodeId,
- @Nullable final CatimaBarcode barcodeType,
+ final String cardId, @Nullable final String barcodeId, @Nullable final CatimaBarcode barcodeType,
@Nullable final Integer headerColor, final int starStatus,
- final long lastUsed, final int zoomLevel, final int archiveStatus) {
+ final long lastUsed, final int zoomLevel, final int archiveStatus,
+ int usage_number) {
this.id = id;
this.store = store;
this.note = note;
@@ -55,6 +57,7 @@ public LoyaltyCard(final int id, final String store, final String note, final Da
this.lastUsed = lastUsed;
this.zoomLevel = zoomLevel;
this.archiveStatus = archiveStatus;
+ this.usage_number = usage_number;
}
protected LoyaltyCard(Parcel in) {
@@ -110,6 +113,7 @@ public static LoyaltyCard toLoyaltyCard(Cursor cursor) {
int starred = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.STAR_STATUS));
long lastUsed = cursor.getLong(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.LAST_USED));
int zoomLevel = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ZOOM_LEVEL));
+ int usage_number = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.USAGE_NUMBER));
int archived = cursor.getInt(cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.ARCHIVE_STATUS));
int barcodeTypeColumn = cursor.getColumnIndexOrThrow(DBHelper.LoyaltyCardDbIds.BARCODE_TYPE);
@@ -142,7 +146,7 @@ public static LoyaltyCard toLoyaltyCard(Cursor cursor) {
headerColor = cursor.getInt(headerColorColumn);
}
- return new LoyaltyCard(id, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId, barcodeType, headerColor, starred, lastUsed, zoomLevel, archived);
+ return new LoyaltyCard(id, store, note, validFrom, expiry, balance, balanceType, cardId, barcodeId ,barcodeType, headerColor, starred, lastUsed, zoomLevel, archived, usage_number);
}
@Override
diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java
index a2e7b30986..f46b9368c5 100644
--- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java
+++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java
@@ -1,6 +1,5 @@
package protect.card_locker;
-import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.DatePickerDialog;
@@ -73,7 +72,6 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
-import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.AppCompatTextView;
import androidx.appcompat.widget.Toolbar;
@@ -222,7 +220,8 @@ private static LoyaltyCard updateTempState(LoyaltyCard loyaltyCard, LoyaltyCardF
(int) (fieldName == LoyaltyCardField.starStatus ? value : loyaltyCard.starStatus),
0, // Unimportant, always set to null in doSave so the DB updates it to the current timestamp
100, // Unimportant, not updated in doSave, defaults to 100 for new cards
- (int) (fieldName == LoyaltyCardField.archiveStatus ? value : loyaltyCard.archiveStatus)
+ (int) (fieldName == LoyaltyCardField.archiveStatus ? value : loyaltyCard.archiveStatus),
+ (int) (fieldName == LoyaltyCardField.usage_number ? value : 0)
);
}
@@ -755,7 +754,7 @@ public void onResume() {
}
} else {
// New card, use default values
- tempLoyaltyCard = new LoyaltyCard(-1, "", "", null, null, new BigDecimal("0"), null, "", null, null, null, 0, Utils.getUnixTime(), 100,0);
+ tempLoyaltyCard = new LoyaltyCard(-1, "", "", null, null, new BigDecimal("0"), null, "", null, null, null, 0, Utils.getUnixTime(), 100,0, 0);
}
}
diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardField.java b/app/src/main/java/protect/card_locker/LoyaltyCardField.java
index a516630f83..e96ca6cbeb 100644
--- a/app/src/main/java/protect/card_locker/LoyaltyCardField.java
+++ b/app/src/main/java/protect/card_locker/LoyaltyCardField.java
@@ -11,6 +11,7 @@ public enum LoyaltyCardField {
cardId,
barcodeId,
barcodeType,
+ usage_number,
headerColor,
starStatus,
archiveStatus
diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java
index e04aaedde5..b9da090da3 100644
--- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java
+++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java
@@ -308,6 +308,7 @@ private void setCenterGuideline(int zoomLevel) {
@Override
protected void onCreate(Bundle savedInstanceState) {
+
if (savedInstanceState == null) {
Bundle incomingIntentExtras = getIntent().getExtras();
@@ -428,6 +429,8 @@ public void onStopTrackingTouch(SeekBar seekBar) {
maximizeButton.setOnClickListener(v -> setFullscreen(true));
minimizeButton.setOnClickListener(v -> setFullscreen(false));
+ DBHelper.updateLoyaltyCardUsageNumber(database, loyaltyCardId);
+
editButton = binding.fabEdit;
editButton.setOnClickListener(v -> {
Intent intent = new Intent(getApplicationContext(), LoyaltyCardEditActivity.class);
@@ -466,7 +469,10 @@ public void onLayoutChange(View v, int left, int top, int right, int bottom, int
iconImage.setClipBounds(new Rect(left, top, right, bottom));
}
});
+
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
+ //this.database
+
}
private SpannableStringBuilder padSpannableString(SpannableStringBuilder spannableStringBuilder) {
diff --git a/app/src/main/java/protect/card_locker/MainActivity.java b/app/src/main/java/protect/card_locker/MainActivity.java
index 2546d2ae10..2a446c4b15 100644
--- a/app/src/main/java/protect/card_locker/MainActivity.java
+++ b/app/src/main/java/protect/card_locker/MainActivity.java
@@ -67,7 +67,7 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
private int mLoyaltyCardCount = 0;
protected String mFilter = "";
protected Object mGroup = null;
- protected DBHelper.LoyaltyCardOrder mOrder = DBHelper.LoyaltyCardOrder.Alpha;
+ protected DBHelper.LoyaltyCardOrder mOrder = DBHelper.LoyaltyCardOrder.UsageNumber;
protected DBHelper.LoyaltyCardOrderDirection mOrderDirection = DBHelper.LoyaltyCardOrderDirection.Ascending;
protected int selectedTab = 0;
private RecyclerView mCardList;
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index e354b719a2..691a1e22be 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -12,5 +12,6 @@
- @string/sort_by_name
- @string/sort_by_most_recently_used
- @string/sort_by_expiry
+ - @string/sort_by_usage
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9eee9d21d9..1331c863f3 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -263,6 +263,7 @@
Balance
…in reversed order
+ Usage
Sort by
Version History
]]>