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