Merge pull request #1009 from CatimaLoyalty/feature/archiveTextLinkBelowCards

Put archive link below card list
This commit is contained in:
Sylvia van Os
2022-09-05 19:53:12 +02:00
committed by GitHub
7 changed files with 140 additions and 100 deletions

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -1,50 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="protect.card_locker.MainActivity"
tools:showIn="@layout/main_activity">
<TextView
style="@style/AppTheme.TextView.NoData"
android:id="@+id/helpText"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/noGiftCards"
android:visibility="gone"/>
<TextView
style="@style/AppTheme.TextView.NoData"
android:id="@+id/noMatchingCardsText"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/noMatchingGiftCards"
android:visibility="gone"/>
<TextView
style="@style/AppTheme.TextView.NoData"
android:id="@+id/noGroupCardsText"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:text="@string/noGroupCards"
android:visibility="gone"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="@integer/main_view_card_columns"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="80dp"
android:clipToPadding="false"
android:scrollbars="vertical"
android:visibility="gone"/>
android:layout_height="wrap_content"
android:orientation="vertical">
</RelativeLayout>
<LinearLayout
android:id="@+id/helpSection"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone">
<ImageView
android:layout_width="match_parent"
android:layout_height="184dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_launcher_foreground" />
<TextView
style="@style/TextAppearance.Material3.HeadlineLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/welcome" />
<TextView
style="@style/AppTheme.TextView.NoData"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/noGiftCards"/>
</LinearLayout>
<TextView
style="@style/AppTheme.TextView.NoData"
android:id="@+id/noMatchingCardsText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/noMatchingGiftCards"
android:visibility="gone"/>
<TextView
style="@style/AppTheme.TextView.NoData"
android:id="@+id/noGroupCardsText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/noGroupCards"
android:visibility="gone"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="@integer/main_view_card_columns"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:visibility="gone"/>
<TextView
style="@style/AppTheme.TextView.NoData"
android:id="@+id/openArchiveLinkText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:visibility="gone"/>
<View
android:id="@+id/bottomPadding"
android:layout_width="match_parent"
android:layout_height="80dp" />
</LinearLayout>
</androidx.core.widget.NestedScrollView>

View File

@@ -26,10 +26,6 @@
android:icon="@drawable/ic_folder_white"
android:title="@string/groups"
app:showAsAction="never"/>
<item
android:id="@+id/action_archived"
android:title="@string/archiveList"
app:showAsAction="never"/>
<item
android:id="@+id/action_import_export"
android:icon="@drawable/ic_import_export_white_24dp"

View File

@@ -293,4 +293,9 @@
<string name="previousCard">Previous</string>
<string name="nextCard">Next</string>
<string name="failedToOpenUrl">Install a web browser first</string>
<plurals name="viewArchivedCardsWithCount">
<item quantity="one">View archive (<xliff:g>%1$d</xliff:g> card)</item>
<item quantity="other">View archive (<xliff:g>%1$d</xliff:g> cards)</item>
</plurals>
<string name="welcome">Welcome to Catima</string>
</resources>

View File

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