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());