diff options
author | Stefan Niedermann <info@niedermann.it> | 2021-10-08 14:17:36 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2021-10-08 14:17:36 +0300 |
commit | 5c124bc92b8d31aab4b70b5e530beb0153445eec (patch) | |
tree | 9de9c5b3d87f1181e1bfa06c66e0e3a7092c2d2e | |
parent | e3bcc15c2f2494c6f23ded2d1f4ad30b12f2d69f (diff) |
Also intent sub categories which have deeper sub categories
Signed-off-by: Stefan Niedermann <info@niedermann.it>
5 files changed, 71 insertions, 26 deletions
diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java index 2897bb38..c99a21c1 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MainViewModel.java @@ -351,6 +351,9 @@ public class MainViewModel extends AndroidViewModel { lastSecondaryCategory.icon = NavigationAdapter.ICON_SUB_MULTIPLE; } else if (belongsToLastPrimaryCategory) { if (isCategoryOpen) { + if(currentSecondaryCategory == null) { + throw new IllegalStateException("Current secondary category is null. Last primary category: " + lastPrimaryCategory); + } item.label = currentSecondaryCategory; item.id = "category:" + item.label; item.icon = NavigationAdapter.ICON_SUB_FOLDER; diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/navigation/NavigationItem.java b/app/src/main/java/it/niedermann/owncloud/notes/main/navigation/NavigationItem.java index e291d1db..2879746d 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/navigation/NavigationItem.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/navigation/NavigationItem.java @@ -93,4 +93,15 @@ public class NavigationItem { result = 31 * result + (type != null ? type.hashCode() : 0); return result; } + + @Override + public String toString() { + return "NavigationItem{" + + "id='" + id + '\'' + + ", label='" + label + '\'' + + ", icon=" + icon + + ", count=" + count + + ", type=" + type + + '}'; + } }
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/navigation/NavigationViewHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/main/navigation/NavigationViewHolder.java index 1af734d2..8fb03dfa 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/navigation/NavigationViewHolder.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/navigation/NavigationViewHolder.java @@ -1,5 +1,7 @@ package it.niedermann.owncloud.notes.main.navigation; +import static java.util.Objects.requireNonNull; + import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; @@ -15,8 +17,6 @@ import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.databinding.ItemNavigationBinding; import it.niedermann.owncloud.notes.shared.util.NoteUtil; -import static java.util.Objects.requireNonNull; - class NavigationViewHolder extends RecyclerView.ViewHolder { @NonNull private final View view; @@ -62,7 +62,9 @@ class NavigationViewHolder extends RecyclerView.ViewHolder { view.setSelected(isSelected); ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); - params.leftMargin = item.icon == NavigationAdapter.ICON_SUB_FOLDER ? view.getResources().getDimensionPixelSize(R.dimen.margin_25) : 0; + params.leftMargin = item.icon == NavigationAdapter.ICON_SUB_FOLDER || item.icon == NavigationAdapter.ICON_SUB_MULTIPLE + ? view.getResources().getDimensionPixelSize(R.dimen.spacer_3x) + : 0; view.requestLayout(); } }
\ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 09c59517..ebf6b15f 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -38,6 +38,4 @@ <dimen name="widget_note_list_fav_icon_width">26dp</dimen> <dimen name="widget_note_list_fav_icon_height">20dp</dimen> - <dimen name="margin_25">25dp</dimen> - </resources> diff --git a/app/src/test/java/it/niedermann/owncloud/notes/main/MainViewModelTest.java b/app/src/test/java/it/niedermann/owncloud/notes/main/MainViewModelTest.java index afdb59c1..ef58dc4c 100644 --- a/app/src/test/java/it/niedermann/owncloud/notes/main/MainViewModelTest.java +++ b/app/src/test/java/it/niedermann/owncloud/notes/main/MainViewModelTest.java @@ -36,16 +36,6 @@ public class MainViewModelTest { private Context context; private Method fromCategoriesWithNotesCount; - private final List<CategoryWithNotesCount> categoriesWithNotesCount = List.of( - new CategoryWithNotesCount(1, "Foo", 13), - new CategoryWithNotesCount(1, "Bar", 30), - new CategoryWithNotesCount(1, "Bar/abc", 10), - new CategoryWithNotesCount(1, "Bar/abc/def", 5), - new CategoryWithNotesCount(1, "Bar/xyz/zyx", 10), - new CategoryWithNotesCount(1, "Bar/aaa/bbb", 8), - new CategoryWithNotesCount(1, "Bar/ddd", 2), - new CategoryWithNotesCount(1, "Baz", 13) - ); @Before public void setup() throws NoSuchMethodException { @@ -57,7 +47,7 @@ public class MainViewModelTest { @Test public void fromCategoriesWithNotesCount_nothing_expanded() throws InvocationTargetException, IllegalAccessException { //noinspection unchecked - final var navigationItems = (List<NavigationItem>) fromCategoriesWithNotesCount.invoke(null, context, "", categoriesWithNotesCount, 56, 0); + final var navigationItems = (List<NavigationItem>) fromCategoriesWithNotesCount.invoke(null, context, "", getSaneCategoriesWithNotesCount(), 56, 0); assertNotNull(navigationItems); assertEquals(5, navigationItems.size()); @@ -71,7 +61,7 @@ public class MainViewModelTest { @Test public void fromCategoriesWithNotesCount_Bar_expanded() throws InvocationTargetException, IllegalAccessException { //noinspection unchecked - final var navigationItems = (List<NavigationItem>) fromCategoriesWithNotesCount.invoke(null, context, "Bar", categoriesWithNotesCount, 56, 0); + final var navigationItems = (List<NavigationItem>) fromCategoriesWithNotesCount.invoke(null, context, "Bar", getSaneCategoriesWithNotesCount(), 56, 0); assertNotNull(navigationItems); assertEquals(9, navigationItems.size()); @@ -86,20 +76,61 @@ public class MainViewModelTest { assertEquals("Baz", navigationItems.get(8).label); } + @Test + public void fromCategoriesWithNotesCount_invalid_expanded() throws InvocationTargetException, IllegalAccessException { + //noinspection unchecked + final var navigationItems = (List<NavigationItem>) fromCategoriesWithNotesCount.invoke(null, context, "ThisCategoryDoesNotExist", getSaneCategoriesWithNotesCount(), 56, 0); + + assertNotNull(navigationItems); + assertEquals(5, navigationItems.size()); + assertEquals(ENavigationCategoryType.RECENT, navigationItems.get(0).type); + assertEquals(ENavigationCategoryType.FAVORITES, navigationItems.get(1).type); + assertEquals("Foo", navigationItems.get(2).label); + assertEquals("Bar", navigationItems.get(3).label); + assertEquals("Baz", navigationItems.get(4).label); + } + /** * Expanded sub categories are not supported and should therefore be treated like an unknown category */ @Test public void fromCategoriesWithNotesCount_subcategory_expanded() throws InvocationTargetException, IllegalAccessException { //noinspection unchecked - final var bar_abcExpanded = (List<NavigationItem>) fromCategoriesWithNotesCount.invoke(null, context, "Bar/abc", categoriesWithNotesCount, 56, 0); - - assertNotNull(bar_abcExpanded); - assertEquals(5, bar_abcExpanded.size()); - assertEquals(ENavigationCategoryType.RECENT, bar_abcExpanded.get(0).type); - assertEquals(ENavigationCategoryType.FAVORITES, bar_abcExpanded.get(1).type); - assertEquals("Foo", bar_abcExpanded.get(2).label); - assertEquals("Bar", bar_abcExpanded.get(3).label); - assertEquals("Baz", bar_abcExpanded.get(4).label); + final var navigationItems = (List<NavigationItem>) fromCategoriesWithNotesCount.invoke(null, context, "Bar/abc", getSaneCategoriesWithNotesCount(), 56, 0); + + assertNotNull(navigationItems); + assertEquals(5, navigationItems.size()); + assertEquals(ENavigationCategoryType.RECENT, navigationItems.get(0).type); + assertEquals(ENavigationCategoryType.FAVORITES, navigationItems.get(1).type); + assertEquals("Foo", navigationItems.get(2).label); + assertEquals("Bar", navigationItems.get(3).label); + assertEquals("Baz", navigationItems.get(4).label); + } + + @Test + public void fromCategoriesWithNotesCount_only_deep_category_without_favorites() throws InvocationTargetException, IllegalAccessException { + //noinspection unchecked + final var navigationItems = (List<NavigationItem>) fromCategoriesWithNotesCount.invoke(null, context, "Bar/abc", List.of( + new CategoryWithNotesCount(1, "Bar/abc/def", 5) + ), 0, 0); + + assertNotNull(navigationItems); + assertEquals(3, navigationItems.size()); + assertEquals(ENavigationCategoryType.RECENT, navigationItems.get(0).type); + assertEquals(ENavigationCategoryType.FAVORITES, navigationItems.get(1).type); + assertEquals("Bar", navigationItems.get(2).label); + } + + private static List<CategoryWithNotesCount> getSaneCategoriesWithNotesCount() { + return List.of( + new CategoryWithNotesCount(1, "Foo", 13), + new CategoryWithNotesCount(1, "Bar", 30), + new CategoryWithNotesCount(1, "Bar/abc", 10), + new CategoryWithNotesCount(1, "Bar/abc/def", 5), + new CategoryWithNotesCount(1, "Bar/xyz/zyx", 10), + new CategoryWithNotesCount(1, "Bar/aaa/bbb", 8), + new CategoryWithNotesCount(1, "Bar/ddd", 2), + new CategoryWithNotesCount(1, "Baz", 13) + ); } }
\ No newline at end of file |