diff --git a/CHANGELOG.md b/CHANGELOG.md
index cd7149898..05a036602 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
# Changelog
+## Unreleased - 104
+
+- Save card detail expansion state
+
## v2.15.2 - 103 (2022-02-11)
- Fix manual language selection not applying everywhere
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4af7841e0..e27451079 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -134,7 +134,5 @@
-
-
\ No newline at end of file
diff --git a/app/src/main/java/protect/card_locker/CardShortcutConfigure.java b/app/src/main/java/protect/card_locker/CardShortcutConfigure.java
index 4f5fa1e33..d2402f20c 100644
--- a/app/src/main/java/protect/card_locker/CardShortcutConfigure.java
+++ b/app/src/main/java/protect/card_locker/CardShortcutConfigure.java
@@ -4,6 +4,8 @@ import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
@@ -19,6 +21,7 @@ import androidx.recyclerview.widget.RecyclerView;
public class CardShortcutConfigure extends AppCompatActivity implements LoyaltyCardCursorAdapter.CardAdapterListener {
static final String TAG = "Catima";
private SQLiteDatabase mDatabase;
+ private LoyaltyCardCursorAdapter mAdapter;
@Override
public void onCreate(Bundle bundle) {
@@ -33,6 +36,7 @@ public class CardShortcutConfigure extends AppCompatActivity implements LoyaltyC
setContentView(R.layout.simple_toolbar_list_activity);
Toolbar toolbar = findViewById(R.id.toolbar);
toolbar.setTitle(R.string.shortcutSelectCard);
+ setSupportActionBar(toolbar);
// If there are no cards, bail
if (DBHelper.getLoyaltyCardCount(mDatabase) == 0) {
@@ -47,8 +51,8 @@ public class CardShortcutConfigure extends AppCompatActivity implements LoyaltyC
}
Cursor cardCursor = DBHelper.getLoyaltyCardCursor(mDatabase);
- final LoyaltyCardCursorAdapter adapter = new LoyaltyCardCursorAdapter(this, cardCursor, this);
- cardList.setAdapter(adapter);
+ mAdapter = new LoyaltyCardCursorAdapter(this, cardCursor, this);
+ cardList.setAdapter(mAdapter);
}
private void onClickAction(int position) {
@@ -65,6 +69,26 @@ public class CardShortcutConfigure extends AppCompatActivity implements LoyaltyC
finish();
}
+ @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);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem inputItem) {
+ int id = inputItem.getItemId();
+
+ if (id == R.id.action_unfold) {
+ mAdapter.showDetails(!mAdapter.showingDetails());
+ invalidateOptionsMenu();
+
+ return true;
+ }
+
+ return super.onOptionsItemSelected(inputItem);
+ }
@Override
public void onRowClicked(int inputPosition) {
diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java b/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java
index b6f7250f1..8dda3ac54 100644
--- a/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java
+++ b/app/src/main/java/protect/card_locker/LoyaltyCardCursorAdapter.java
@@ -1,6 +1,7 @@
package protect.card_locker;
import android.content.Context;
+import android.content.SharedPreferences;
import android.content.res.Resources;
import android.database.Cursor;
import android.graphics.Bitmap;
@@ -40,7 +41,7 @@ public class LoyaltyCardCursorAdapter extends BaseCursorAdapter 0);
SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
@@ -493,17 +496,8 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard
int id = inputItem.getItemId();
if (id == R.id.action_unfold) {
- boolean shouldShow = !mAdapter.showingDetails();
-
- if (shouldShow) {
- inputItem.setIcon(R.drawable.ic_baseline_unfold_less_24);
- inputItem.setTitle(R.string.action_hide_details);
- } else {
- inputItem.setIcon(R.drawable.ic_baseline_unfold_more_24);
- inputItem.setTitle(R.string.action_show_details);
- }
-
- mAdapter.showDetails(shouldShow);
+ mAdapter.showDetails(!mAdapter.showingDetails());
+ 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 436a98cdd..9dfe62be7 100644
--- a/app/src/main/java/protect/card_locker/ManageGroupActivity.java
+++ b/app/src/main/java/protect/card_locker/ManageGroupActivity.java
@@ -1,12 +1,13 @@
package protect.card_locker;
-
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
@@ -156,6 +157,26 @@ public class ManageGroupActivity extends CatimaAppCompatActivity implements Mana
return ret;
}
+ @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);
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem inputItem) {
+ int id = inputItem.getItemId();
+
+ if (id == R.id.action_unfold) {
+ mAdapter.showDetails(!mAdapter.showingDetails());
+ invalidateOptionsMenu();
+
+ return true;
+ }
+
+ return super.onOptionsItemSelected(inputItem);
+ }
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
diff --git a/app/src/main/java/protect/card_locker/Utils.java b/app/src/main/java/protect/card_locker/Utils.java
index 23f7cb84e..55e9d86d0 100644
--- a/app/src/main/java/protect/card_locker/Utils.java
+++ b/app/src/main/java/protect/card_locker/Utils.java
@@ -15,6 +15,8 @@ import android.os.LocaleList;
import android.provider.MediaStore;
import android.util.Log;
import android.util.TypedValue;
+import android.view.Menu;
+import android.view.MenuItem;
import android.widget.Toast;
import com.google.android.material.color.DynamicColors;
@@ -506,4 +508,14 @@ public class Utils {
activity.getTheme().resolveAttribute(android.R.attr.colorBackground, typedValue, true);
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);
+ }
+ }
}
diff --git a/app/src/main/res/menu/card_details_menu.xml b/app/src/main/res/menu/card_details_menu.xml
new file mode 100644
index 000000000..048bd5092
--- /dev/null
+++ b/app/src/main/res/menu/card_details_menu.xml
@@ -0,0 +1,9 @@
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 57aeee633..8078227eb 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -115,6 +115,8 @@
sharedpreference_sort
sharedpreference_sort_order
sharedpreference_sort_direction
+ sharedpreference_card_details
+ sharedpreference_card_details_show
I want to share a card with you
catima.app
/share