From 5ed0e9efec0dcfd13db8b1d353bb7e8b282282a5 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Fri, 17 Aug 2018 12:09:30 -0300 Subject: [PATCH] Implement new empty state icons --- briar-android/artwork/empty_state_blog.svg | 91 +++++++++++++++++++ .../artwork/empty_state_contact_list.svg | 56 ++++++++++++ .../artwork/empty_state_forum_list.svg | 81 +++++++++++++++++ .../artwork/empty_state_group_list.svg | 86 ++++++++++++++++++ .../briar/android/blog/FeedFragment.java | 2 + .../android/contact/ContactListFragment.java | 2 + .../android/forum/ForumListFragment.java | 1 - .../privategroup/list/GroupListFragment.java | 2 + .../briar/android/view/BriarRecyclerView.java | 52 +++++++++-- .../main/res/drawable/ic_empty_state_blog.xml | 21 +++++ .../drawable/ic_empty_state_contact_list.xml | 9 ++ .../drawable/ic_empty_state_forum_list.xml | 15 +++ .../drawable/ic_empty_state_group_list.xml | 18 ++++ .../main/res/layout/briar_recycler_view.xml | 72 +++++++++++++-- .../main/res/layout/fragment_forum_list.xml | 18 ++-- briar-android/src/main/res/values/attrs.xml | 2 + briar-android/src/main/res/values/strings.xml | 12 ++- 17 files changed, 508 insertions(+), 32 deletions(-) create mode 100644 briar-android/artwork/empty_state_blog.svg create mode 100644 briar-android/artwork/empty_state_contact_list.svg create mode 100644 briar-android/artwork/empty_state_forum_list.svg create mode 100644 briar-android/artwork/empty_state_group_list.svg create mode 100644 briar-android/src/main/res/drawable/ic_empty_state_blog.xml create mode 100644 briar-android/src/main/res/drawable/ic_empty_state_contact_list.xml create mode 100644 briar-android/src/main/res/drawable/ic_empty_state_forum_list.xml create mode 100644 briar-android/src/main/res/drawable/ic_empty_state_group_list.xml diff --git a/briar-android/artwork/empty_state_blog.svg b/briar-android/artwork/empty_state_blog.svg new file mode 100644 index 000000000..eb1cd25c7 --- /dev/null +++ b/briar-android/artwork/empty_state_blog.svg @@ -0,0 +1,91 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/briar-android/artwork/empty_state_contact_list.svg b/briar-android/artwork/empty_state_contact_list.svg new file mode 100644 index 000000000..efc3f10ba --- /dev/null +++ b/briar-android/artwork/empty_state_contact_list.svg @@ -0,0 +1,56 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/briar-android/artwork/empty_state_forum_list.svg b/briar-android/artwork/empty_state_forum_list.svg new file mode 100644 index 000000000..101eca192 --- /dev/null +++ b/briar-android/artwork/empty_state_forum_list.svg @@ -0,0 +1,81 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/briar-android/artwork/empty_state_group_list.svg b/briar-android/artwork/empty_state_group_list.svg new file mode 100644 index 000000000..58e0218d7 --- /dev/null +++ b/briar-android/artwork/empty_state_group_list.svg @@ -0,0 +1,86 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java index 6d8223681..6c44abbc4 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/blog/FeedFragment.java @@ -81,7 +81,9 @@ public class FeedFragment extends BaseFragment implements list = v.findViewById(R.id.postList); list.setLayoutManager(layoutManager); list.setAdapter(adapter); + list.setEmptyImage(R.drawable.ic_empty_state_blog); list.setEmptyText(R.string.blogs_feed_empty_state); + list.setEmptyAction(R.string.blogs_feed_empty_state_action); return v; } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java index 2dc00d67f..5ab78c73c 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/contact/ContactListFragment.java @@ -148,7 +148,9 @@ public class ContactListFragment extends BaseFragment implements EventListener { list = contentView.findViewById(R.id.list); list.setLayoutManager(new LinearLayoutManager(getContext())); list.setAdapter(adapter); + list.setEmptyImage(R.drawable.ic_empty_state_contact_list); list.setEmptyText(getString(R.string.no_contacts)); + list.setEmptyAction(getString(R.string.no_contacts_action)); return contentView; } diff --git a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListFragment.java index 7817169b1..8e6b1fa2a 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/forum/ForumListFragment.java @@ -97,7 +97,6 @@ public class ForumListFragment extends BaseEventFragment implements list = contentView.findViewById(R.id.forumList); list.setLayoutManager(new LinearLayoutManager(getActivity())); list.setAdapter(adapter); - list.setEmptyText(getString(R.string.no_forums)); snackbar = Snackbar.make(list, "", LENGTH_INDEFINITE); snackbar.getView().setBackgroundResource(R.color.briar_primary); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListFragment.java index d12ee9087..2015069be 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListFragment.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/privategroup/list/GroupListFragment.java @@ -69,7 +69,9 @@ public class GroupListFragment extends BaseFragment implements adapter = new GroupListAdapter(getContext(), this); list = v.findViewById(R.id.list); + list.setEmptyImage(R.drawable.ic_empty_state_group_list); list.setEmptyText(R.string.groups_list_empty); + list.setEmptyAction(R.string.groups_list_empty_action); list.setLayoutManager(new LinearLayoutManager(getContext())); list.setAdapter(adapter); diff --git a/briar-android/src/main/java/org/briarproject/briar/android/view/BriarRecyclerView.java b/briar-android/src/main/java/org/briarproject/briar/android/view/BriarRecyclerView.java index 69d063bf9..61e6bffeb 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/view/BriarRecyclerView.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/view/BriarRecyclerView.java @@ -2,8 +2,13 @@ package org.briarproject.briar.android.view; import android.content.Context; import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; import android.os.Handler; import android.os.Looper; +import android.support.annotation.DrawableRes; +import android.support.annotation.StringRes; +import android.support.constraint.Group; +import android.support.v7.widget.AppCompatImageView; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView.Adapter; import android.util.AttributeSet; @@ -29,7 +34,9 @@ public class BriarRecyclerView extends FrameLayout { private final Handler handler = new Handler(Looper.getMainLooper()); private RecyclerView recyclerView; - private TextView emptyView; + private Group emptyState; + private AppCompatImageView emptyImage; + private TextView emptyText, emptyAction; private ProgressBar progressBar; private RecyclerView.AdapterDataObserver emptyObserver; private Runnable refresher = null; @@ -51,9 +58,15 @@ public class BriarRecyclerView extends FrameLayout { R.styleable.BriarRecyclerView); isScrollingToEnd = attributes .getBoolean(R.styleable.BriarRecyclerView_scrollToEnd, true); + Drawable drawable = attributes + .getDrawable(R.styleable.BriarRecyclerView_emptyImage); + if (drawable != null) setEmptyImage(drawable); String emtpyText = attributes.getString(R.styleable.BriarRecyclerView_emptyText); if (emtpyText != null) setEmptyText(emtpyText); + String emtpyAction = + attributes.getString(R.styleable.BriarRecyclerView_emptyAction); + if (emtpyAction != null) setEmptyAction(emtpyAction); attributes.recycle(); } @@ -68,7 +81,10 @@ public class BriarRecyclerView extends FrameLayout { R.layout.briar_recycler_view, this, true); recyclerView = v.findViewById(R.id.recyclerView); - emptyView = v.findViewById(R.id.emptyView); + emptyState = v.findViewById(R.id.emptyState); + emptyImage = v.findViewById(R.id.emptyImage); + emptyText = v.findViewById(R.id.emptyText); + emptyAction = v.findViewById(R.id.emptyAction); progressBar = v.findViewById(R.id.progressBar); showProgressBar(); @@ -129,20 +145,40 @@ public class BriarRecyclerView extends FrameLayout { } } + public void setEmptyImage(Drawable drawable) { + if (recyclerView == null) initViews(); + emptyImage.setImageDrawable(drawable); + } + + public void setEmptyImage(@DrawableRes int res) { + if (recyclerView == null) initViews(); + emptyImage.setImageResource(res); + } + public void setEmptyText(String text) { if (recyclerView == null) initViews(); - emptyView.setText(text); + emptyText.setText(text); + } + + public void setEmptyText(@StringRes int res) { + if (recyclerView == null) initViews(); + emptyText.setText(res); + } + + public void setEmptyAction(String text) { + if (recyclerView == null) initViews(); + emptyAction.setText(text); } - public void setEmptyText(int res) { + public void setEmptyAction(@StringRes int res) { if (recyclerView == null) initViews(); - emptyView.setText(res); + emptyAction.setText(res); } public void showProgressBar() { if (recyclerView == null) initViews(); recyclerView.setVisibility(INVISIBLE); - emptyView.setVisibility(INVISIBLE); + emptyState.setVisibility(INVISIBLE); progressBar.setVisibility(VISIBLE); } @@ -151,11 +187,11 @@ public class BriarRecyclerView extends FrameLayout { Adapter adapter = recyclerView.getAdapter(); if (adapter != null) { if (adapter.getItemCount() == 0) { - emptyView.setVisibility(VISIBLE); + emptyState.setVisibility(VISIBLE); recyclerView.setVisibility(INVISIBLE); } else { // use GONE here so empty view doesn't use space on small lists - emptyView.setVisibility(GONE); + emptyState.setVisibility(GONE); recyclerView.setVisibility(VISIBLE); } progressBar.setVisibility(GONE); diff --git a/briar-android/src/main/res/drawable/ic_empty_state_blog.xml b/briar-android/src/main/res/drawable/ic_empty_state_blog.xml new file mode 100644 index 000000000..a93f3eb1a --- /dev/null +++ b/briar-android/src/main/res/drawable/ic_empty_state_blog.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/briar-android/src/main/res/drawable/ic_empty_state_contact_list.xml b/briar-android/src/main/res/drawable/ic_empty_state_contact_list.xml new file mode 100644 index 000000000..560b137c5 --- /dev/null +++ b/briar-android/src/main/res/drawable/ic_empty_state_contact_list.xml @@ -0,0 +1,9 @@ + + + diff --git a/briar-android/src/main/res/drawable/ic_empty_state_forum_list.xml b/briar-android/src/main/res/drawable/ic_empty_state_forum_list.xml new file mode 100644 index 000000000..132ec634e --- /dev/null +++ b/briar-android/src/main/res/drawable/ic_empty_state_forum_list.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/briar-android/src/main/res/drawable/ic_empty_state_group_list.xml b/briar-android/src/main/res/drawable/ic_empty_state_group_list.xml new file mode 100644 index 000000000..21f892221 --- /dev/null +++ b/briar-android/src/main/res/drawable/ic_empty_state_group_list.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/briar-android/src/main/res/layout/briar_recycler_view.xml b/briar-android/src/main/res/layout/briar_recycler_view.xml index ad5012041..e3791373f 100644 --- a/briar-android/src/main/res/layout/briar_recycler_view.xml +++ b/briar-android/src/main/res/layout/briar_recycler_view.xml @@ -1,6 +1,8 @@ - @@ -10,24 +12,78 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" - tools:listitem="@layout/list_item_contact"/> + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:listitem="@layout/list_item_contact" + tools:visibility="visible"/> + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintLeft_toLeftOf="parent" + app:layout_constraintRight_toRightOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:visibility="invisible"/> - + + + + - \ No newline at end of file + + + \ No newline at end of file diff --git a/briar-android/src/main/res/layout/fragment_forum_list.xml b/briar-android/src/main/res/layout/fragment_forum_list.xml index 6b09a7ff6..2a34c3e78 100644 --- a/briar-android/src/main/res/layout/fragment_forum_list.xml +++ b/briar-android/src/main/res/layout/fragment_forum_list.xml @@ -1,15 +1,11 @@ - - - - - + android:layout_height="match_parent" + app:emptyAction="@string/no_forums_action" + app:emptyImage="@drawable/ic_empty_state_forum_list" + app:emptyText="@string/no_forums" + app:layout_behavior="org.briarproject.briar.android.view.BriarRecyclerViewBehavior"/> diff --git a/briar-android/src/main/res/values/attrs.xml b/briar-android/src/main/res/values/attrs.xml index 8655d2126..d2e212bb7 100644 --- a/briar-android/src/main/res/values/attrs.xml +++ b/briar-android/src/main/res/values/attrs.xml @@ -3,7 +3,9 @@ + + diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml index fa73572f3..d9b3fc2f0 100644 --- a/briar-android/src/main/res/values/strings.xml +++ b/briar-android/src/main/res/values/strings.xml @@ -121,7 +121,8 @@ Sorry - No contacts to show\n\nTap the + icon to add a contact + No contacts to show + Tap the + icon to add a contact No messages. No messages to show Type message @@ -177,7 +178,8 @@ - No groups to show\n\nTap the + icon to create a group, or ask your contacts to share groups with you + No groups to show + Tap the + icon to create a group, or ask your contacts to share groups with you Created by %s %d message @@ -233,7 +235,8 @@ Contact relationship is not visible to the group - No forums to show\n\nTap the + icon to create a forum, or ask your contacts to share forums with you + No forums to show + Tap the + icon to create a forum, or ask your contacts to share forums with you Create Forum Choose a name for your forum Create Forum @@ -293,7 +296,8 @@ Blog Post Created New Blog Post Received Scroll To - No posts to show\n\nPosts from your contacts and blogs you subscribe to will appear here\n\nTap the pen icon to write a post + No posts to show + Posts from your contacts and blogs you subscribe to will appear here\n\nTap the pen icon to write a post Remove Blog Are you sure that you want to remove this blog?\n\nPosts will be removed from your device but not from other people\'s devices.\n\nAny contacts you\'ve shared this blog with might stop receiving updates. Remove -- GitLab