diff --git a/app/src/main/java/com/beemdevelopment/aegis/ViewMode.java b/app/src/main/java/com/beemdevelopment/aegis/ViewMode.java
index edc35863..e1e4e694 100644
--- a/app/src/main/java/com/beemdevelopment/aegis/ViewMode.java
+++ b/app/src/main/java/com/beemdevelopment/aegis/ViewMode.java
@@ -30,4 +30,15 @@ public enum ViewMode {
return R.layout.card_entry;
}
}
+
+ /**
+ * Retrieves the height (in dp) that the divider between entries should have in this view mode.
+ */
+ public float getDividerHeight() {
+ if (this == ViewMode.COMPACT) {
+ return 0;
+ }
+
+ return 20;
+ }
}
diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryHolder.java b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryHolder.java
index f9d88850..a5ac27ac 100644
--- a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryHolder.java
+++ b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryHolder.java
@@ -27,7 +27,6 @@ public class EntryHolder extends RecyclerView.ViewHolder {
private ImageView _profileDrawable;
private DatabaseEntry _entry;
private ImageView _buttonRefresh;
- private View _entryDivider;
private boolean _hidden;
private int _tapToRevealTime;
@@ -46,8 +45,6 @@ public class EntryHolder extends RecyclerView.ViewHolder {
_profileDrawable = view.findViewById(R.id.ivTextDrawable);
_buttonRefresh = view.findViewById(R.id.buttonRefresh);
- _entryDivider = view.findViewById(R.id.entryDivider);
-
_progressBar = view.findViewById(R.id.progressBar);
int primaryColorId = view.getContext().getResources().getColor(R.color.colorPrimary);
_progressBar.getProgressDrawable().setColorFilter(primaryColorId, PorterDuff.Mode.SRC_IN);
@@ -122,11 +119,6 @@ public class EntryHolder extends RecyclerView.ViewHolder {
_progressBar.setVisibility(showProgress ? View.VISIBLE : View.GONE);
if (showProgress) {
_progressBar.setPeriod(((TotpInfo) _entry.getInfo()).getPeriod());
-
- if (_entryDivider != null) {
- _entryDivider.setVisibility(View.GONE);
- }
-
startRefreshLoop();
} else {
stopRefreshLoop();
diff --git a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryListView.java b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryListView.java
index 1df8f8fd..6a2fe4ba 100644
--- a/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryListView.java
+++ b/app/src/main/java/com/beemdevelopment/aegis/ui/views/EntryListView.java
@@ -1,6 +1,7 @@
package com.beemdevelopment.aegis.ui.views;
import android.content.Context;
+import android.graphics.Rect;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@@ -18,7 +19,10 @@ import com.beemdevelopment.aegis.otp.TotpInfo;
import java.util.List;
+import androidx.annotation.NonNull;
+import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
+import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -29,8 +33,10 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
private SimpleItemTouchHelperCallback _touchCallback;
private RecyclerView _recyclerView;
+ private RecyclerView.ItemDecoration _dividerDecoration;
private PeriodProgressBar _progressBar;
private boolean _showProgress;
+ private ViewMode _viewMode;
private UiRefresher _refresher;
@@ -38,11 +44,10 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
_adapter = new EntryAdapter(this);
- _showProgress = false;
}
@Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_entry_list_view, container, false);
_progressBar = view.findViewById(R.id.progressBar);
@@ -106,7 +111,9 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
}
public void setViewMode(ViewMode mode) {
- _adapter.setViewMode(mode);
+ _viewMode = mode;
+ updateDividerDecoration();
+ _adapter.setViewMode(_viewMode);
}
public void refresh(boolean hard) {
@@ -147,7 +154,7 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
@Override
public void onPeriodUniformityChanged(boolean isUniform) {
- _showProgress = isUniform;
+ setShowProgress(isUniform);
if (_showProgress) {
_progressBar.setVisibility(View.VISIBLE);
_progressBar.setPeriod(_adapter.getUniformPeriod());
@@ -199,6 +206,28 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
_recyclerView.scheduleLayoutAnimation();
}
+ private void setShowProgress(boolean showProgress) {
+ _showProgress = showProgress;
+ updateDividerDecoration();
+ }
+
+ private void updateDividerDecoration() {
+ if (_dividerDecoration != null) {
+ _recyclerView.removeItemDecoration(_dividerDecoration);
+ }
+
+ float height = _viewMode.getDividerHeight();
+ if (_showProgress && height == 0) {
+ DividerItemDecoration divider = new DividerItemDecoration(getContext(), DividerItemDecoration.VERTICAL);
+ divider.setDrawable(ContextCompat.getDrawable(getContext(), R.drawable.entry_divider));
+ _dividerDecoration = divider;
+ } else {
+ _dividerDecoration = new VerticalSpaceItemDecoration(height);
+ }
+
+ _recyclerView.addItemDecoration(_dividerDecoration);
+ }
+
public interface Listener {
void onEntryClick(DatabaseEntry entry);
void onEntryMove(DatabaseEntry entry1, DatabaseEntry entry2);
@@ -206,4 +235,22 @@ public class EntryListView extends Fragment implements EntryAdapter.Listener {
void onEntryChange(DatabaseEntry entry);
void onScroll(int dx, int dy);
}
+
+ private class VerticalSpaceItemDecoration extends RecyclerView.ItemDecoration {
+ private int _height;
+
+ private VerticalSpaceItemDecoration(float dp) {
+ // convert dp to pixels
+ _height = (int) (dp * (getContext().getResources().getDisplayMetrics().densityDpi / 160f));
+ }
+
+ @Override
+ public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
+ if (parent.getChildAdapterPosition(view) == 0) {
+ // the first item should also have a top margin
+ outRect.top = _height;
+ }
+ outRect.bottom = _height;
+ }
+ }
}
diff --git a/app/src/main/res/drawable/entry_divider.xml b/app/src/main/res/drawable/entry_divider.xml
new file mode 100644
index 00000000..6bbd9f27
--- /dev/null
+++ b/app/src/main/res/drawable/entry_divider.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_auth.xml b/app/src/main/res/layout/activity_auth.xml
index c983d69d..ad701c64 100644
--- a/app/src/main/res/layout/activity_auth.xml
+++ b/app/src/main/res/layout/activity_auth.xml
@@ -5,7 +5,7 @@
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:background="?attr/background"
- tools:context="com.beemdevelopment.aegis.com.impy.aegis.ui.AuthActivity">
+ tools:context="com.beemdevelopment.aegis.ui.AuthActivity">
+ android:layout_height="match_parent"
+ tools:context="com.beemdevelopment.aegis.ui.EditEntryActivity">
+ tools:context="com.beemdevelopment.aegis.ui.GroupManagerActivity">
+ app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
+ tools:context="com.beemdevelopment.aegis.ui.IntroActivity">
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 4fcff72d..6ad35c5c 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -6,14 +6,14 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
- tools:context="com.beemdevelopment.aegis.com.impy.aegis.ui.MainActivity">
+ tools:context="com.beemdevelopment.aegis.ui.MainActivity">
+ app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"/>
+ tools:context="com.beemdevelopment.aegis.ui.ScannerActivity">
diff --git a/app/src/main/res/layout/activity_slots.xml b/app/src/main/res/layout/activity_slots.xml
index d55962cc..6306d0d1 100644
--- a/app/src/main/res/layout/activity_slots.xml
+++ b/app/src/main/res/layout/activity_slots.xml
@@ -6,15 +6,12 @@
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:background="?attr/background"
-
- tools:context="com.beemdevelopment.aegis.com.impy.aegis.ui.SlotManagerActivity">
-
-
+ tools:context="com.beemdevelopment.aegis.ui.SlotManagerActivity">
+ app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">
-
-
diff --git a/app/src/main/res/layout/card_entry_small.xml b/app/src/main/res/layout/card_entry_small.xml
index 482f42c0..246f8b28 100644
--- a/app/src/main/res/layout/card_entry_small.xml
+++ b/app/src/main/res/layout/card_entry_small.xml
@@ -6,7 +6,6 @@
android:clickable="true"
android:focusable="true"
android:layout_height="wrap_content"
- android:layout_marginTop="20dp"
android:orientation="vertical">
+ tools:context="com.beemdevelopment.aegis.ui.EditEntryActivity">
-
+ tools:context="com.beemdevelopment.aegis.ui.MainActivity">
-
+ tools:context="com.beemdevelopment.aegis.ui.ScannerActivity">
-
+ tools:context="com.beemdevelopment.aegis.ui.SlotManagerActivity">