diff --git a/CHANGELOG.md b/CHANGELOG.md index 17ef2df49..6d94b1c88 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## Unreleased - 124 + +- Support selecting exactly which details to view in card overview + ## v2.23.3 - 123 - Minor UI improvements diff --git a/app/src/main/java/protect/card_locker/CardShortcutConfigure.java b/app/src/main/java/protect/card_locker/CardShortcutConfigure.java index a34916a63..207f8d9ec 100644 --- a/app/src/main/java/protect/card_locker/CardShortcutConfigure.java +++ b/app/src/main/java/protect/card_locker/CardShortcutConfigure.java @@ -81,7 +81,7 @@ public class CardShortcutConfigure extends CatimaAppCompatActivity implements Lo @Override public boolean onCreateOptionsMenu(Menu inputMenu) { getMenuInflater().inflate(R.menu.card_details_menu, inputMenu); - Utils.updateMenuCardDetailsButtonState(inputMenu.findItem(R.id.action_unfold), mAdapter.showingDetails()); + return super.onCreateOptionsMenu(inputMenu); } @@ -89,8 +89,8 @@ public class CardShortcutConfigure extends CatimaAppCompatActivity implements Lo public boolean onOptionsItemSelected(MenuItem inputItem) { int id = inputItem.getItemId(); - if (id == R.id.action_unfold) { - mAdapter.showDetails(!mAdapter.showingDetails()); + if (id == R.id.action_shown_details) { + mAdapter.showSelectDetailDisplayDialog(); invalidateOptionsMenu(); return true; diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java b/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java index ca6704ce9..86b42a457 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java @@ -4,7 +4,6 @@ import android.content.Context; import android.content.SharedPreferences; import android.content.res.Resources; import android.database.Cursor; -import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.util.SparseBooleanArray; @@ -18,12 +17,14 @@ import android.widget.TextView; import com.google.android.material.card.MaterialCardView; import com.google.android.material.color.MaterialColors; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import java.math.BigDecimal; import java.text.DateFormat; import java.util.ArrayList; import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.content.ContextCompat; import androidx.core.graphics.BlendModeColorFilterCompat; @@ -31,7 +32,6 @@ import androidx.core.graphics.BlendModeCompat; import androidx.recyclerview.widget.RecyclerView; import protect.card_locker.databinding.LoyaltyCardLayoutBinding; -import protect.card_locker.preferences.Settings; public class LoyaltyCardCursorAdapter extends BaseCursorAdapter { private int mCurrentSelectedIndex = -1; @@ -41,7 +41,10 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter { + if (i == 0) { + alwaysShowName(b); + } else if (i == 1) { + showNote(b); + } else if (i == 2) { + showBalance(b); + } else if (i == 3) { + showValidity(b); + } else { + throw new IndexOutOfBoundsException("No such index exists in LoyaltyCardCursorAdapter show details view"); + } + } + ); + builder.setPositiveButton(R.string.ok, (dialog, i) -> dialog.dismiss()); + + AlertDialog dialog = builder.create(); + dialog.show(); } @NonNull @@ -105,32 +183,32 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter 0); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); @@ -653,8 +649,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard onBackPressed(); } - if (id == R.id.action_unfold) { - mAdapter.showDetails(!mAdapter.showingDetails()); + if (id == R.id.action_shown_details) { + mAdapter.showSelectDetailDisplayDialog(); invalidateOptionsMenu(); return true; diff --git a/app/src/main/java/protect/card_locker/ManageGroupActivity.java b/app/src/main/java/protect/card_locker/ManageGroupActivity.java index a161bf922..d518ca0a8 100644 --- a/app/src/main/java/protect/card_locker/ManageGroupActivity.java +++ b/app/src/main/java/protect/card_locker/ManageGroupActivity.java @@ -21,7 +21,6 @@ import java.util.HashMap; import java.util.Map; import androidx.annotation.NonNull; -import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; import androidx.recyclerview.widget.RecyclerView; @@ -160,7 +159,7 @@ public class ManageGroupActivity extends CatimaAppCompatActivity implements Mana @Override public boolean onCreateOptionsMenu(Menu inputMenu) { getMenuInflater().inflate(R.menu.card_details_menu, inputMenu); - Utils.updateMenuCardDetailsButtonState(inputMenu.findItem(R.id.action_unfold), mAdapter.showingDetails()); + return super.onCreateOptionsMenu(inputMenu); } @@ -168,8 +167,8 @@ public class ManageGroupActivity extends CatimaAppCompatActivity implements Mana public boolean onOptionsItemSelected(MenuItem inputItem) { int id = inputItem.getItemId(); - if (id == R.id.action_unfold) { - mAdapter.showDetails(!mAdapter.showingDetails()); + if (id == R.id.action_shown_details) { + mAdapter.showSelectDetailDisplayDialog(); invalidateOptionsMenu(); return true; diff --git a/app/src/main/java/protect/card_locker/Utils.java b/app/src/main/java/protect/card_locker/Utils.java index 024e0ea6e..35f47e60d 100644 --- a/app/src/main/java/protect/card_locker/Utils.java +++ b/app/src/main/java/protect/card_locker/Utils.java @@ -560,16 +560,6 @@ public class Utils { activity.findViewById(android.R.id.content).setBackgroundColor(typedValue.data); } - public static void updateMenuCardDetailsButtonState(MenuItem item, boolean currentlyExpanded) { - if (currentlyExpanded) { - item.setIcon(R.drawable.ic_baseline_unfold_less_24); - item.setTitle(R.string.action_hide_details); - } else { - item.setIcon(R.drawable.ic_baseline_unfold_more_24); - item.setTitle(R.string.action_show_details); - } - } - public static int getHeaderColorFromImage(Bitmap image, int fallback) { if (image == null) { return fallback; @@ -603,23 +593,25 @@ public class Utils { return result.toString(); } - public static void setIconOrTextWithBackground(Context context, LoyaltyCard loyaltyCard, ImageView backgroundOrIcon, TextView textWhenNoImage) { + public static void setIconOrTextWithBackground(Context context, LoyaltyCard loyaltyCard, ImageView backgroundOrIcon, TextView textWhenNoImage, boolean alwaysShowTextView) { Bitmap icon = Utils.retrieveCardImage(context, loyaltyCard.id, ImageLocationType.icon); + int headerColor = loyaltyCard.headerColor != null ? loyaltyCard.headerColor : LetterBitmap.getDefaultColor(context, loyaltyCard.store); + if (icon != null) { Log.d("onResume", "setting icon image"); - textWhenNoImage.setVisibility(View.GONE); - backgroundOrIcon.setImageBitmap(icon); backgroundOrIcon.setBackgroundColor(Color.TRANSPARENT); } else { - textWhenNoImage.setVisibility(View.VISIBLE); - - int headerColor = loyaltyCard.headerColor != null ? loyaltyCard.headerColor : LetterBitmap.getDefaultColor(context, loyaltyCard.store); - backgroundOrIcon.setImageBitmap(null); backgroundOrIcon.setBackgroundColor(headerColor); + } + + if (icon == null || alwaysShowTextView) { + textWhenNoImage.setVisibility(View.VISIBLE); textWhenNoImage.setText(loyaltyCard.store); textWhenNoImage.setTextColor(Utils.needsDarkForeground(headerColor) ? Color.BLACK : Color.WHITE); + } else { + textWhenNoImage.setVisibility(View.GONE); } } diff --git a/app/src/main/res/drawable/baseline_visibility_24.xml b/app/src/main/res/drawable/baseline_visibility_24.xml new file mode 100644 index 000000000..c06596754 --- /dev/null +++ b/app/src/main/res/drawable/baseline_visibility_24.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/menu/archive_menu.xml b/app/src/main/res/menu/archive_menu.xml index 29b190f25..710618a33 100644 --- a/app/src/main/res/menu/archive_menu.xml +++ b/app/src/main/res/menu/archive_menu.xml @@ -10,9 +10,9 @@ app:showAsAction="always|collapseActionView" android:visible="false"/> diff --git a/app/src/main/res/menu/main_menu.xml b/app/src/main/res/menu/main_menu.xml index a1f1c882e..c5fe0f2d8 100644 --- a/app/src/main/res/menu/main_menu.xml +++ b/app/src/main/res/menu/main_menu.xml @@ -10,9 +10,9 @@ app:showAsAction="always|collapseActionView" android:visible="false"/> sharedpreference_sort_order sharedpreference_sort_direction sharedpreference_card_details - sharedpreference_card_details_show I want to share a card with you catima.app /share @@ -314,4 +313,12 @@ Set barcode height Donate Long press to edit icon + Always show name + Show note + Show balance + Show validity + sharedpreference_card_details_always_show_name + sharedpreference_card_details_show_note + sharedpreference_card_details_show_balance + sharedpreference_card_details_show_validity diff --git a/app/src/test/java/protect/card_locker/MainActivityTest.java b/app/src/test/java/protect/card_locker/MainActivityTest.java index c76386c83..45251217d 100644 --- a/app/src/test/java/protect/card_locker/MainActivityTest.java +++ b/app/src/test/java/protect/card_locker/MainActivityTest.java @@ -62,7 +62,7 @@ public class MainActivityTest { assertEquals(menu.size(), 8); assertEquals("Search", menu.findItem(R.id.action_search).getTitle().toString()); assertEquals("Sort", menu.findItem(R.id.action_sort).getTitle().toString()); - assertEquals("Hide details", menu.findItem(R.id.action_unfold).getTitle().toString()); + assertEquals("Show details", menu.findItem(R.id.action_shown_details).getTitle().toString()); assertEquals("Groups", menu.findItem(R.id.action_manage_groups).getTitle().toString()); assertEquals("Archive", menu.findItem(R.id.action_archived).getTitle().toString()); assertEquals("Import/Export", menu.findItem(R.id.action_import_export).getTitle().toString());