diff --git a/CHANGELOG.md b/CHANGELOG.md
index bf079e14c..571ae41c6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
# Changelog
+## Unreleased
+
+Changes:
+
+- Remember active group tab between screens and sessions
+
## v1.2.1 (2020-11-17)
Changes:
diff --git a/app/build.gradle b/app/build.gradle
index 97cf942e0..7029f5d82 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -13,8 +13,8 @@ android {
applicationId "me.hackerchick.catima"
minSdkVersion 16
targetSdkVersion 29
- versionCode 44
- versionName "1.2.0"
+ versionCode 45
+ versionName "1.2.1"
}
buildTypes {
release {
diff --git a/app/src/main/java/protect/card_locker/MainActivity.java b/app/src/main/java/protect/card_locker/MainActivity.java
index c76638db5..e75c93d9d 100644
--- a/app/src/main/java/protect/card_locker/MainActivity.java
+++ b/app/src/main/java/protect/card_locker/MainActivity.java
@@ -6,6 +6,7 @@ import android.content.ClipboardManager;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
@@ -63,6 +64,14 @@ public class MainActivity extends AppCompatActivity implements GestureDetector.O
public void onTabSelected(TabLayout.Tab tab) {
selectedTab = tab.getPosition();
updateLoyaltyCardList(filter, tab.getTag());
+
+ // Store active tab in Shared Preference to restore next app launch
+ SharedPreferences activeTabPref = getApplicationContext().getSharedPreferences(
+ getString(R.string.sharedpreference_active_tab),
+ Context.MODE_PRIVATE);
+ SharedPreferences.Editor activeTabPrefEditor = activeTabPref.edit();
+ activeTabPrefEditor.putInt(getString(R.string.sharedpreference_active_tab), selectedTab);
+ activeTabPrefEditor.apply();
}
@Override
@@ -107,15 +116,22 @@ public class MainActivity extends AppCompatActivity implements GestureDetector.O
}
}
+ // Start of active tab logic
TabLayout groupsTabLayout = findViewById(R.id.groups);
- boolean hasReset = updateTabGroups(groupsTabLayout);
+ updateTabGroups(groupsTabLayout);
+
+ // Restore active tab from Shared Preference
+ SharedPreferences activeTabPref = getApplicationContext().getSharedPreferences(
+ getString(R.string.sharedpreference_active_tab),
+ Context.MODE_PRIVATE);
+ selectedTab = activeTabPref.getInt(getString(R.string.sharedpreference_active_tab), 0);
Object group = null;
if (groupsTabLayout.getTabCount() != 0) {
TabLayout.Tab tab = groupsTabLayout.getTabAt(0);
- if (!hasReset) {
+ if (selectedTab < groupsTabLayout.getTabCount()) {
tab = groupsTabLayout.getTabAt(selectedTab);
}
@@ -123,6 +139,7 @@ public class MainActivity extends AppCompatActivity implements GestureDetector.O
group = tab.getTag();
}
updateLoyaltyCardList(filter, group);
+ // End of active tab logic
FloatingActionButton addButton = findViewById(R.id.fabAdd);
addButton.setOnClickListener(new View.OnClickListener() {
@@ -241,7 +258,7 @@ public class MainActivity extends AppCompatActivity implements GestureDetector.O
});
}
- public boolean updateTabGroups(TabLayout groupsTabLayout)
+ public void updateTabGroups(TabLayout groupsTabLayout)
{
final DBHelper db = new DBHelper(this);
@@ -250,42 +267,24 @@ public class MainActivity extends AppCompatActivity implements GestureDetector.O
if (newGroups.size() == 0) {
groupsTabLayout.removeAllTabs();
groupsTabLayout.setVisibility(View.GONE);
- return true;
+ return;
}
- // -1 because there is an "All" tab
- boolean isChanged = groupsTabLayout.getTabCount() - 1 != newGroups.size();
+ groupsTabLayout.removeAllTabs();
- if (!isChanged) {
- for (int i = 0; i < newGroups.size(); i++) {
- if (!((Group) groupsTabLayout.getTabAt(i + 1).getTag())._id.equals(newGroups.get(i)._id)) {
- isChanged = true;
- break;
- }
- }
+ TabLayout.Tab allTab = groupsTabLayout.newTab();
+ allTab.setText(R.string.all);
+ allTab.setTag(null);
+ groupsTabLayout.addTab(allTab, false);
+
+ for (Group group : newGroups) {
+ TabLayout.Tab tab = groupsTabLayout.newTab();
+ tab.setText(group._id);
+ tab.setTag(group);
+ groupsTabLayout.addTab(tab, false);
}
- if (isChanged) {
- groupsTabLayout.removeAllTabs();
-
- TabLayout.Tab allTab = groupsTabLayout.newTab();
- allTab.setText(R.string.all);
- allTab.setTag(null);
- groupsTabLayout.addTab(allTab);
-
- for (Group group : newGroups) {
- TabLayout.Tab tab = groupsTabLayout.newTab();
- tab.setText(group._id);
- tab.setTag(group);
- groupsTabLayout.addTab(tab);
- }
-
- groupsTabLayout.setVisibility(View.VISIBLE);
-
- return true;
- }
-
- return false;
+ groupsTabLayout.setVisibility(View.VISIBLE);
}
@Override
diff --git a/app/src/main/java/protect/card_locker/ManageGroupsActivity.java b/app/src/main/java/protect/card_locker/ManageGroupsActivity.java
index 1b83723ba..435ade395 100644
--- a/app/src/main/java/protect/card_locker/ManageGroupsActivity.java
+++ b/app/src/main/java/protect/card_locker/ManageGroupsActivity.java
@@ -1,6 +1,8 @@
package protect.card_locker;
+import android.content.Context;
import android.content.DialogInterface;
+import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.Bundle;
import android.text.InputType;
@@ -88,6 +90,16 @@ public class ManageGroupsActivity extends AppCompatActivity
registerForContextMenu(groupList);
}
+ private void invalidateHomescreenActiveTab()
+ {
+ SharedPreferences activeTabPref = getApplicationContext().getSharedPreferences(
+ getString(R.string.sharedpreference_active_tab),
+ Context.MODE_PRIVATE);
+ SharedPreferences.Editor activeTabPrefEditor = activeTabPref.edit();
+ activeTabPrefEditor.putInt(getString(R.string.sharedpreference_active_tab), 0);
+ activeTabPrefEditor.apply();
+ }
+
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
@@ -119,6 +131,8 @@ public class ManageGroupsActivity extends AppCompatActivity
public void onClick(DialogInterface dialog, int which) {
db.updateGroup(groupName, input.getText().toString());
updateGroupList();
+ // Rename may change ordering, so invalidate
+ invalidateHomescreenActiveTab();
}
});
builder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
@@ -147,6 +161,8 @@ public class ManageGroupsActivity extends AppCompatActivity
public void onClick(DialogInterface dialog, int which) {
db.deleteGroup(groupName);
updateGroupList();
+ // Delete may change ordering, so invalidate
+ invalidateHomescreenActiveTab();
}
});
builder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
@@ -171,6 +187,8 @@ public class ManageGroupsActivity extends AppCompatActivity
public void onClick(DialogInterface dialog, int which) {
db.insertGroup(input.getText().toString());
updateGroupList();
+ // Create may change ordering, so invalidate
+ invalidateHomescreenActiveTab();
}
});
builder.setNegativeButton(getString(R.string.cancel), new DialogInterface.OnClickListener() {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f857a0eb6..1dc8e9d21 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -117,6 +117,8 @@
Lock barcode orientation
pref_lock_barcode_orientation
+ sharedpreference_active_tab
+
I want to share a card with you
thelastproject.github.io
/Catima/share