diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java b/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java index 84968d753..4ad640955 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java @@ -105,6 +105,12 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter + + diff --git a/app/src/main/res/layout/loyalty_card_layout.xml b/app/src/main/res/layout/loyalty_card_layout.xml index 34b745b16..e6f07a52f 100644 --- a/app/src/main/res/layout/loyalty_card_layout.xml +++ b/app/src/main/res/layout/loyalty_card_layout.xml @@ -158,10 +158,31 @@ android:visibility="gone" tools:visibility="visible" app:layout_constraintTop_toBottomOf="@+id/note" - app:layout_constraintBottom_toTopOf="@+id/balance" + app:layout_constraintBottom_toTopOf="@+id/cardId" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"/> + + Show note Show balance Show validity + Show card ID sharedpreference_card_details_show_name_below_thumbnail sharedpreference_card_details_show_note sharedpreference_card_details_show_balance sharedpreference_card_details_show_validity + sharedpreference_card_details_show_card_id sharedpreference_card_details_show_archived_cards Card view Cards overview diff --git a/app/src/test/java/protect/card_locker/MainActivityTest.java b/app/src/test/java/protect/card_locker/MainActivityTest.java index 754360f21..503eac757 100644 --- a/app/src/test/java/protect/card_locker/MainActivityTest.java +++ b/app/src/test/java/protect/card_locker/MainActivityTest.java @@ -20,6 +20,7 @@ import android.widget.TextView; import androidx.appcompat.widget.SearchView; import androidx.recyclerview.widget.RecyclerView; +import androidx.test.core.app.ApplicationProvider; import com.google.android.material.tabs.TabLayout; import com.google.zxing.BarcodeFormat; @@ -116,6 +117,76 @@ public class MainActivityTest { database.close(); } + @Test + public void cardIdHiddenByDefault() { + ActivityController activityController = Robolectric.buildActivity(MainActivity.class).create(); + + Activity mainActivity = (Activity) activityController.get(); + activityController.start(); + activityController.resume(); + activityController.visible(); + + RecyclerView list = mainActivity.findViewById(R.id.list); + + SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase(); + DBHelper.insertLoyaltyCard(database, "store", "", null, null, new BigDecimal("0"), null, "1234567890", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0); + + activityController.pause(); + activityController.resume(); + activityController.visible(); + + assertEquals(1, list.getAdapter().getItemCount()); + + // Make sure there is enough space to render all + list.measure(0, 0); + list.layout(0, 0, 100, 1000); + + // Card ID is hidden by default + TextView cardIdField = list.findViewHolderForAdapterPosition(0).itemView.findViewById(R.id.cardId); + assertEquals(View.GONE, cardIdField.getVisibility()); + + database.close(); + } + + @Test + public void showCardIdDisplayOption() { + // The display option is read in the adapter's constructor (during onCreate), so the + // preference must be set before the activity is built. + SharedPreferences cardDetailsPref = ApplicationProvider.getApplicationContext().getSharedPreferences( + ApplicationProvider.getApplicationContext().getString(R.string.sharedpreference_card_details), + Activity.MODE_PRIVATE); + cardDetailsPref.edit().putBoolean( + ApplicationProvider.getApplicationContext().getString(R.string.sharedpreference_card_details_show_card_id), true).apply(); + + ActivityController activityController = Robolectric.buildActivity(MainActivity.class).create(); + + Activity mainActivity = (Activity) activityController.get(); + activityController.start(); + activityController.resume(); + activityController.visible(); + + RecyclerView list = mainActivity.findViewById(R.id.list); + + SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase(); + DBHelper.insertLoyaltyCard(database, "store", "", null, null, new BigDecimal("0"), null, "1234567890", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), StandardCharsets.ISO_8859_1, Color.BLACK, 0, null, 0); + + activityController.pause(); + activityController.resume(); + activityController.visible(); + + assertEquals(1, list.getAdapter().getItemCount()); + + // Make sure there is enough space to render all + list.measure(0, 0); + list.layout(0, 0, 100, 1000); + + TextView cardIdField = list.findViewHolderForAdapterPosition(0).itemView.findViewById(R.id.cardId); + assertEquals(View.VISIBLE, cardIdField.getVisibility()); + assertEquals("1234567890", cardIdField.getText().toString()); + + database.close(); + } + @Test public void addFourLoyaltyCardsTwoStarred() // Main screen showing starred cards on top correctly { @@ -510,4 +581,4 @@ public class MainActivityTest { database.close(); } -} \ No newline at end of file +}