diff --git a/CHANGELOG.md b/CHANGELOG.md index a01fc4d59..822266013 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ ## Unreleased - 114 - Add Monochrome icon for Android 13 +- Improve first launch screen +- Move archive info from overflow menu to bottom of card list ## v2.19.0 - 113 diff --git a/app/src/main/java/protect/card_locker/MainActivity.java b/app/src/main/java/protect/card_locker/MainActivity.java index f5ad96f0f..ce6c83749 100644 --- a/app/src/main/java/protect/card_locker/MainActivity.java +++ b/app/src/main/java/protect/card_locker/MainActivity.java @@ -17,6 +17,7 @@ import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.widget.CheckBox; +import android.widget.TextView; import android.widget.Toast; import com.google.android.material.floatingactionbutton.FloatingActionButton; @@ -64,9 +65,10 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard protected DBHelper.LoyaltyCardOrderDirection mOrderDirection = DBHelper.LoyaltyCardOrderDirection.Ascending; protected int selectedTab = 0; private RecyclerView mCardList; - private View mHelpText; + private View mHelpSection; private View mNoMatchingCardsText; private View mNoGroupCardsText; + private TextView mOpenArchiveText; private boolean mArchiveMode; public static final String BUNDLE_ARCHIVE_MODE = "archiveMode"; @@ -282,16 +284,25 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard View.OnTouchListener gestureTouchListener = (v, event) -> mGestureDetector.onTouchEvent(event); - mHelpText = findViewById(R.id.helpText); + mHelpSection = findViewById(R.id.helpSection); mNoMatchingCardsText = findViewById(R.id.noMatchingCardsText); mNoGroupCardsText = findViewById(R.id.noGroupCardsText); + mOpenArchiveText = findViewById(R.id.openArchiveLinkText); mCardList = findViewById(R.id.list); - mHelpText.setOnTouchListener(gestureTouchListener); mNoMatchingCardsText.setOnTouchListener(gestureTouchListener); mCardList.setOnTouchListener(gestureTouchListener); mNoGroupCardsText.setOnTouchListener(gestureTouchListener); + // Open archive on archive text click + mOpenArchiveText.setOnClickListener(view -> { + Intent i = new Intent(getApplicationContext(), MainActivity.class); + Bundle bundle = new Bundle(); + bundle.putBoolean("archiveMode", true); + i.putExtras(bundle); + startActivity(i); + }); + mAdapter = new LoyaltyCardCursorAdapter(this, null, this); mCardList.setAdapter(mAdapter); registerForContextMenu(mCardList); @@ -461,10 +472,14 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard // We want the cardList to be visible regardless of the filtered match count // to ensure that the noMatchingCardsText doesn't end up being shown below // the keyboard - mHelpText.setVisibility(View.GONE); + mHelpSection.setVisibility(View.GONE); mNoGroupCardsText.setVisibility(View.GONE); - if (mAdapter.getItemCount() > 0) { + int archiveCount = + mArchiveMode ? 0 : + group != null ? DBHelper.getArchivedCardsCount(mDatabase, group._id) : DBHelper.getArchivedCardsCount(mDatabase); + + if (mAdapter.getItemCount() + archiveCount > 0) { mCardList.setVisibility(View.VISIBLE); mNoMatchingCardsText.setVisibility(View.GONE); } else { @@ -479,9 +494,12 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard mNoGroupCardsText.setVisibility(View.VISIBLE); } } + + mOpenArchiveText.setText(getResources().getQuantityString(R.plurals.viewArchivedCardsWithCount, archiveCount, archiveCount)); + mOpenArchiveText.setVisibility(archiveCount > 0 ? View.VISIBLE : View.GONE); } else { mCardList.setVisibility(View.GONE); - mHelpText.setVisibility(View.VISIBLE); + mHelpSection.setVisibility(View.VISIBLE); mNoMatchingCardsText.setVisibility(View.GONE); mNoGroupCardsText.setVisibility(View.GONE); @@ -566,13 +584,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard } }); } - if(!mArchiveMode) { - if (DBHelper.getArchivedCardsCount(mDatabase) == 0) { - inputMenu.findItem(R.id.action_archived).setVisible(false); - } else { - inputMenu.findItem(R.id.action_archived).setVisible(true); - } - } return super.onCreateOptionsMenu(inputMenu); } @@ -658,15 +669,6 @@ public class MainActivity extends CatimaAppCompatActivity implements LoyaltyCard return true; } - if(id == R.id.action_archived){ - Intent i = new Intent(getApplicationContext(), MainActivity.class); - Bundle bundle = new Bundle(); - bundle.putBoolean("archiveMode", true); - i.putExtras(bundle); - startActivity(i); - return true; - } - return super.onOptionsItemSelected(inputItem); } diff --git a/app/src/main/java/protect/card_locker/ManageGroupActivity.java b/app/src/main/java/protect/card_locker/ManageGroupActivity.java index 9dfe62be7..4b5174dc4 100644 --- a/app/src/main/java/protect/card_locker/ManageGroupActivity.java +++ b/app/src/main/java/protect/card_locker/ManageGroupActivity.java @@ -35,7 +35,7 @@ public class ManageGroupActivity extends CatimaAppCompatActivity implements Mana protected Group mGroup = null; private RecyclerView mCardList; - private TextView mHelpText; + private TextView noGroupCardsText; private EditText mGroupNameText; private boolean mGroupNameNotInUse; @@ -49,7 +49,7 @@ public class ManageGroupActivity extends CatimaAppCompatActivity implements Mana mDatabase = new DBHelper(this).getWritableDatabase(); - mHelpText = findViewById(R.id.helpText); + noGroupCardsText = findViewById(R.id.noGroupCardsText); mCardList = findViewById(R.id.list); FloatingActionButton saveButton = findViewById(R.id.fabSave); @@ -133,7 +133,7 @@ public class ManageGroupActivity extends CatimaAppCompatActivity implements Mana finish(); }); // this setText is here because content_main.xml is reused from main activity - mHelpText.setText(getResources().getText(R.string.noGiftCardsGroup)); + noGroupCardsText.setText(getResources().getText(R.string.noGiftCardsGroup)); updateLoyaltyCardList(); } @@ -191,10 +191,10 @@ public class ManageGroupActivity extends CatimaAppCompatActivity implements Mana if (mAdapter.getItemCount() == 0) { mCardList.setVisibility(View.GONE); - mHelpText.setVisibility(View.VISIBLE); + noGroupCardsText.setVisibility(View.VISIBLE); } else { mCardList.setVisibility(View.VISIBLE); - mHelpText.setVisibility(View.GONE); + noGroupCardsText.setVisibility(View.GONE); } } diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml index 76975f0d5..ab02b2779 100644 --- a/app/src/main/res/layout/content_main.xml +++ b/app/src/main/res/layout/content_main.xml @@ -1,50 +1,84 @@ - - - - - - - - + android:layout_height="wrap_content" + android:orientation="vertical"> - + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/main_menu.xml b/app/src/main/res/menu/main_menu.xml index a1f1c882e..b0e238a8a 100644 --- a/app/src/main/res/menu/main_menu.xml +++ b/app/src/main/res/menu/main_menu.xml @@ -26,10 +26,6 @@ android:icon="@drawable/ic_folder_white" android:title="@string/groups" app:showAsAction="never"/> - Previous Next Install a web browser first + + View archive (%1$d card) + View archive (%1$d cards) + + Welcome to Catima diff --git a/app/src/test/java/protect/card_locker/MainActivityTest.java b/app/src/test/java/protect/card_locker/MainActivityTest.java index 0b172557c..2d881730c 100644 --- a/app/src/test/java/protect/card_locker/MainActivityTest.java +++ b/app/src/test/java/protect/card_locker/MainActivityTest.java @@ -7,6 +7,7 @@ import android.database.sqlite.SQLiteDatabase; import android.graphics.Color; import android.view.Menu; import android.view.View; +import android.widget.LinearLayout; import android.widget.TextView; import com.google.android.material.tabs.TabLayout; @@ -41,8 +42,8 @@ public class MainActivityTest { Activity activity = Robolectric.setupActivity(MainActivity.class); assertNotNull(activity); - TextView helpText = activity.findViewById(R.id.helpText); - assertEquals(View.VISIBLE, helpText.getVisibility()); + LinearLayout helpSection = activity.findViewById(R.id.helpSection); + assertEquals(View.VISIBLE, helpSection.getVisibility()); TextView noMatchingCardsText = activity.findViewById(R.id.noMatchingCardsText); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); @@ -59,7 +60,7 @@ public class MainActivityTest { assertNotNull(menu); // The settings, import/export, groups, search and add button should be present - assertEquals(menu.size(), 8); + assertEquals(menu.size(), 7); 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()); @@ -87,7 +88,7 @@ public class MainActivityTest { activityController.start(); activityController.resume(); - TextView helpText = mainActivity.findViewById(R.id.helpText); + LinearLayout helpSection = mainActivity.findViewById(R.id.helpSection); TextView noMatchingCardsText = mainActivity.findViewById(R.id.noMatchingCardsText); RecyclerView list = mainActivity.findViewById(R.id.list); @@ -96,14 +97,14 @@ public class MainActivityTest { SQLiteDatabase database = TestHelpers.getEmptyDb(mainActivity).getWritableDatabase(); DBHelper.insertLoyaltyCard(database, "store", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 0, null,0); - assertEquals(View.VISIBLE, helpText.getVisibility()); + assertEquals(View.VISIBLE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.GONE, list.getVisibility()); activityController.pause(); activityController.resume(); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.VISIBLE, list.getVisibility()); @@ -122,7 +123,7 @@ public class MainActivityTest { activityController.resume(); activityController.visible(); - TextView helpText = mainActivity.findViewById(R.id.helpText); + LinearLayout helpSection = mainActivity.findViewById(R.id.helpSection); TextView noMatchingCardsText = mainActivity.findViewById(R.id.noMatchingCardsText); RecyclerView list = mainActivity.findViewById(R.id.list); @@ -134,7 +135,7 @@ public class MainActivityTest { DBHelper.insertLoyaltyCard(database, "storeD", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,0); DBHelper.insertLoyaltyCard(database, "storeC", "note", null, new BigDecimal("0"), null, "cardId", null, CatimaBarcode.fromBarcode(BarcodeFormat.UPC_A), Color.BLACK, 1, null,0); - assertEquals(View.VISIBLE, helpText.getVisibility()); + assertEquals(View.VISIBLE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.GONE, list.getVisibility()); @@ -142,7 +143,7 @@ public class MainActivityTest { activityController.resume(); activityController.visible(); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.VISIBLE, list.getVisibility()); @@ -217,7 +218,7 @@ public class MainActivityTest { activityController.start(); activityController.resume(); - TextView helpText = mainActivity.findViewById(R.id.helpText); + LinearLayout helpSection = mainActivity.findViewById(R.id.helpSection); TextView noMatchingCardsText = mainActivity.findViewById(R.id.noMatchingCardsText); RecyclerView list = mainActivity.findViewById(R.id.list); TabLayout groupTabs = mainActivity.findViewById(R.id.groups); @@ -234,7 +235,7 @@ public class MainActivityTest { activityController.pause(); activityController.resume(); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.VISIBLE, list.getVisibility()); @@ -245,7 +246,7 @@ public class MainActivityTest { activityController.pause(); activityController.resume(); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.VISIBLE, list.getVisibility()); @@ -257,7 +258,7 @@ public class MainActivityTest { activityController.pause(); activityController.resume(); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.VISIBLE, list.getVisibility()); @@ -266,7 +267,7 @@ public class MainActivityTest { // Switch back to all groups groupTabs.selectTab(groupTabs.getTabAt(0)); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.VISIBLE, list.getVisibility()); @@ -277,7 +278,7 @@ public class MainActivityTest { activityController.pause(); activityController.resume(); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.VISIBLE, list.getVisibility()); @@ -289,7 +290,7 @@ public class MainActivityTest { activityController.pause(); activityController.resume(); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.VISIBLE, list.getVisibility()); @@ -298,7 +299,7 @@ public class MainActivityTest { // Switch back to all groups groupTabs.selectTab(groupTabs.getTabAt(0)); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.VISIBLE, list.getVisibility()); @@ -309,7 +310,7 @@ public class MainActivityTest { activityController.pause(); activityController.resume(); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.VISIBLE, list.getVisibility()); @@ -321,7 +322,7 @@ public class MainActivityTest { activityController.pause(); activityController.resume(); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.VISIBLE, list.getVisibility()); @@ -330,7 +331,7 @@ public class MainActivityTest { // Switch back to all groups groupTabs.selectTab(groupTabs.getTabAt(0)); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.VISIBLE, list.getVisibility()); @@ -341,7 +342,7 @@ public class MainActivityTest { activityController.pause(); activityController.resume(); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.VISIBLE, list.getVisibility()); @@ -355,7 +356,7 @@ public class MainActivityTest { shadowOf(getMainLooper()).idle(); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.VISIBLE, noMatchingCardsText.getVisibility()); assertEquals(View.GONE, list.getVisibility()); @@ -364,7 +365,7 @@ public class MainActivityTest { // Switch back to all groups groupTabs.selectTab(groupTabs.getTabAt(0)); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.VISIBLE, list.getVisibility()); @@ -377,7 +378,7 @@ public class MainActivityTest { shadowOf(getMainLooper()).idle(); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.VISIBLE, noMatchingCardsText.getVisibility()); assertEquals(View.GONE, list.getVisibility()); @@ -391,7 +392,7 @@ public class MainActivityTest { shadowOf(getMainLooper()).idle(); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.VISIBLE, noMatchingCardsText.getVisibility()); assertEquals(View.GONE, list.getVisibility()); @@ -400,7 +401,7 @@ public class MainActivityTest { // Switch back to all groups groupTabs.selectTab(groupTabs.getTabAt(0)); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.VISIBLE, noMatchingCardsText.getVisibility()); assertEquals(View.GONE, list.getVisibility()); @@ -413,7 +414,7 @@ public class MainActivityTest { shadowOf(getMainLooper()).idle(); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.VISIBLE, list.getVisibility()); @@ -427,7 +428,7 @@ public class MainActivityTest { shadowOf(getMainLooper()).idle(); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.VISIBLE, list.getVisibility()); @@ -436,7 +437,7 @@ public class MainActivityTest { // Switch back to all groups groupTabs.selectTab(groupTabs.getTabAt(0)); - assertEquals(View.GONE, helpText.getVisibility()); + assertEquals(View.GONE, helpSection.getVisibility()); assertEquals(View.GONE, noMatchingCardsText.getVisibility()); assertEquals(View.VISIBLE, list.getVisibility());