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