From 23bd60b47641bd1c16cf335d52ace3a68b183daa Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Sat, 4 Jan 2020 22:26:00 +0100 Subject: [PATCH] Add tab to switch between multiple barcodes of same store --- .../java/protect/card_locker/DBHelper.java | 31 +++++++++++++ .../card_locker/LoyaltyCardViewActivity.java | 46 +++++++++++++++++++ .../res/layout/loyalty_card_view_layout.xml | 14 +++++- 3 files changed, 90 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/protect/card_locker/DBHelper.java b/app/src/main/java/protect/card_locker/DBHelper.java index 6952accae..5ac813d95 100644 --- a/app/src/main/java/protect/card_locker/DBHelper.java +++ b/app/src/main/java/protect/card_locker/DBHelper.java @@ -7,6 +7,9 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; +import java.util.ArrayList; +import java.util.List; + public class DBHelper extends SQLiteOpenHelper { public static final String DATABASE_NAME = "LoyaltyCards.db"; @@ -170,6 +173,34 @@ public class DBHelper extends SQLiteOpenHelper return res; } + /** + * Returns a list of all loyalty cards of the given store. + * + * @param store + * @return List + */ + public List getLoyaltyCardsForStore(String store) { + List loyaltyCards = new ArrayList<>(); + + SQLiteDatabase db = getReadableDatabase(); + String[] selectionArgs = { store }; + + Cursor res = db.rawQuery("select * from " + LoyaltyCardDbIds.TABLE + + " WHERE " + LoyaltyCardDbIds.STORE + " IS ? " + + " ORDER BY " + LoyaltyCardDbIds.STORE + " COLLATE NOCASE ASC", selectionArgs, null); + + try + { + while (res.moveToNext()) { + loyaltyCards.add(LoyaltyCard.toLoyaltyCard(res)); + } + } finally { + res.close(); + } + + return loyaltyCards; + } + public int getLoyaltyCardCount() { // An empty string will match everything diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java index 50712e423..b33f5d029 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardViewActivity.java @@ -26,8 +26,11 @@ import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; +import com.google.android.material.tabs.TabLayout; import com.google.zxing.BarcodeFormat; +import java.util.List; + import protect.card_locker.preferences.Settings; @@ -36,6 +39,8 @@ public class LoyaltyCardViewActivity extends AppCompatActivity private static final String TAG = "CardLocker"; private static final double LUMINANCE_MIDPOINT = 0.5; + TabLayout tabLayout; + TabLayout.OnTabSelectedListener onTabSelectedListener; TextView cardIdFieldView; TextView noteView; View noteViewDivider; @@ -44,6 +49,7 @@ public class LoyaltyCardViewActivity extends AppCompatActivity View collapsingToolbarLayout; int loyaltyCardId; LoyaltyCard loyaltyCard; + List storeCards; boolean rotationEnabled; DBHelper db; ImportURIHelper importURIHelper; @@ -96,6 +102,20 @@ public class LoyaltyCardViewActivity extends AppCompatActivity db = new DBHelper(this); importURIHelper = new ImportURIHelper(this); + tabLayout = findViewById(R.id.tabLayout); + onTabSelectedListener = new TabLayout.OnTabSelectedListener() { + @Override + public void onTabSelected(TabLayout.Tab tab) { + loyaltyCardId = storeCards.get(tab.getPosition()).id; + onResume(); + } + + @Override + public void onTabUnselected(TabLayout.Tab tab) {} + + @Override + public void onTabReselected(TabLayout.Tab tab) {} + }; cardIdFieldView = findViewById(R.id.cardIdView); noteView = findViewById(R.id.noteView); noteViewDivider = findViewById(R.id.noteViewDivider); @@ -142,6 +162,32 @@ public class LoyaltyCardViewActivity extends AppCompatActivity return; } + storeCards = db.getLoyaltyCardsForStore(loyaltyCard.store); + tabLayout.removeOnTabSelectedListener(onTabSelectedListener); + tabLayout.removeAllTabs(); + for(int i = 0; i < storeCards.size(); i++) + { + LoyaltyCard storeCard = storeCards.get(i); + + String loyaltyCardText = storeCard.note; + if(loyaltyCardText.isEmpty()) + { + loyaltyCardText = String.valueOf(i + 1); + } + + tabLayout.addTab(tabLayout.newTab().setText(loyaltyCardText)); + + if(storeCard.id == loyaltyCardId) + { + tabLayout.getTabAt(i).select(); + } + } + tabLayout.addOnTabSelectedListener(onTabSelectedListener); + if(tabLayout.getTabCount() > 1) + { + tabLayout.setVisibility(View.VISIBLE); + } + String formatString = loyaltyCard.barcodeType; final BarcodeFormat format = !formatString.isEmpty() ? BarcodeFormat.valueOf(formatString) : null; final String cardIdString = loyaltyCard.cardId; diff --git a/app/src/main/res/layout/loyalty_card_view_layout.xml b/app/src/main/res/layout/loyalty_card_view_layout.xml index e224353cf..8f644d213 100644 --- a/app/src/main/res/layout/loyalty_card_view_layout.xml +++ b/app/src/main/res/layout/loyalty_card_view_layout.xml @@ -27,6 +27,18 @@ android:orientation="horizontal" app:layout_constraintGuide_percent="0.5"/> + +