From dc552b29e7a66a3160542afc31bc30d7b70754c2 Mon Sep 17 00:00:00 2001 From: Shinokuni Date: Sun, 29 Sep 2019 13:25:18 +0200 Subject: [PATCH] Add custom view to show an empty list message for folder, feed and item lists --- .../readrops/app/activities/MainActivity.java | 3 +- .../readrops/app/fragments/FeedsFragment.java | 13 ++++++-- .../app/fragments/FoldersFragment.java | 10 +++++- .../com/readrops/app/utils/EmptyListView.kt | 28 ++++++++++++++++ app/src/main/res/layout/activity_main.xml | 23 +++---------- app/src/main/res/layout/empty_list_view.xml | 32 +++++++++++++++++++ app/src/main/res/layout/fragment_feeds.xml | 16 ++++++++-- app/src/main/res/layout/fragment_folders.xml | 19 ++++++++++- app/src/main/res/values-fr-rFR/strings.xml | 3 +- app/src/main/res/values/attrs.xml | 9 ++++++ app/src/main/res/values/strings.xml | 1 + 11 files changed, 129 insertions(+), 28 deletions(-) create mode 100644 app/src/main/java/com/readrops/app/utils/EmptyListView.kt create mode 100644 app/src/main/res/layout/empty_list_view.xml create mode 100644 app/src/main/res/values/attrs.xml diff --git a/app/src/main/java/com/readrops/app/activities/MainActivity.java b/app/src/main/java/com/readrops/app/activities/MainActivity.java index 4e9b8a5e..b4a0ab50 100644 --- a/app/src/main/java/com/readrops/app/activities/MainActivity.java +++ b/app/src/main/java/com/readrops/app/activities/MainActivity.java @@ -9,6 +9,7 @@ import android.view.ActionMode; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RelativeLayout; import android.widget.TextView; @@ -90,7 +91,7 @@ public class MainActivity extends AppCompatActivity implements SwipeRefreshLayou private MainViewModel viewModel; private DrawerManager drawerManager; - private RelativeLayout emptyListLayout; + private LinearLayout emptyListLayout; private RelativeLayout syncProgressLayout; private TextView syncProgress; private ProgressBar syncProgressBar; diff --git a/app/src/main/java/com/readrops/app/fragments/FeedsFragment.java b/app/src/main/java/com/readrops/app/fragments/FeedsFragment.java index 16d8cbe9..158aa0f3 100644 --- a/app/src/main/java/com/readrops/app/fragments/FeedsFragment.java +++ b/app/src/main/java/com/readrops/app/fragments/FeedsFragment.java @@ -9,7 +9,6 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.databinding.DataBindingUtil; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProviders; import androidx.recyclerview.widget.LinearLayoutManager; @@ -69,13 +68,21 @@ public class FeedsFragment extends Fragment { viewModel = ViewModelProviders.of(this).get(ManageFeedsFoldersViewModel.class); viewModel.setAccount(account); - viewModel.getFeedsWithFolder().observe(this, feedWithFolders -> adapter.submitList(feedWithFolders)); + viewModel.getFeedsWithFolder().observe(this, feedWithFolders -> { + adapter.submitList(feedWithFolders); + + if (feedWithFolders.size() > 0) { + binding.feedsEmptyList.setVisibility(View.GONE); + } else { + binding.feedsEmptyList.setVisibility(View.VISIBLE); + } + }); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - binding = DataBindingUtil.inflate(inflater, R.layout.fragment_feeds, container, false); + binding = FragmentFeedsBinding.inflate(inflater); return binding.getRoot(); } diff --git a/app/src/main/java/com/readrops/app/fragments/FoldersFragment.java b/app/src/main/java/com/readrops/app/fragments/FoldersFragment.java index 3b4e2e32..206bf9b0 100644 --- a/app/src/main/java/com/readrops/app/fragments/FoldersFragment.java +++ b/app/src/main/java/com/readrops/app/fragments/FoldersFragment.java @@ -67,7 +67,15 @@ public class FoldersFragment extends Fragment { viewModel = ViewModelProviders.of(this).get(ManageFeedsFoldersViewModel.class); viewModel.setAccount(account); - viewModel.getFoldersWithFeedCount().observe(this, folders -> adapter.submitList(folders)); + viewModel.getFoldersWithFeedCount().observe(this, folders -> { + adapter.submitList(folders); + + if (folders.size() > 0) { + binding.foldersEmptyList.setVisibility(View.GONE); + } else { + binding.foldersEmptyList.setVisibility(View.VISIBLE); + } + }); } @Override diff --git a/app/src/main/java/com/readrops/app/utils/EmptyListView.kt b/app/src/main/java/com/readrops/app/utils/EmptyListView.kt new file mode 100644 index 00000000..e237b915 --- /dev/null +++ b/app/src/main/java/com/readrops/app/utils/EmptyListView.kt @@ -0,0 +1,28 @@ +package com.readrops.app.utils + +import android.content.Context +import android.util.AttributeSet +import android.view.View +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import com.readrops.app.R + +/** + * A simple custom view to display a empty list message + */ +class EmptyListView(context: Context, attrs: AttributeSet) : LinearLayout(context, attrs) { + + init { + // no binding here, it makes the view rendering fail + View.inflate(context, R.layout.empty_list_view, this) + val imageView: ImageView = findViewById(R.id.empty_list_image) + val textView: TextView = findViewById(R.id.empty_list_text_v) + + val attributes = context.obtainStyledAttributes(attrs, R.styleable.EmptyListView) + imageView.setImageDrawable(attributes.getDrawable(R.styleable.EmptyListView_image)) + textView.text = attributes.getString(R.styleable.EmptyListView_text) + + attributes.recycle() + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 7696ca32..da2b6ac6 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -84,29 +84,14 @@ android:layout_height="match_parent" android:animateLayoutChanges="true"> - - - - - - - - + android:visibility="gone" /> + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_feeds.xml b/app/src/main/res/layout/fragment_feeds.xml index 41b5a7b6..5d41fac8 100644 --- a/app/src/main/res/layout/fragment_feeds.xml +++ b/app/src/main/res/layout/fragment_feeds.xml @@ -1,5 +1,6 @@ @@ -12,9 +13,20 @@ android:id="@+id/feeds_recyclerview" android:layout_width="match_parent" android:layout_height="match_parent" - tools:listItem="@layout/feed_layout"> + tools:itemCount="5" + tools:listitem="@layout/feed_layout" /> - + diff --git a/app/src/main/res/layout/fragment_folders.xml b/app/src/main/res/layout/fragment_folders.xml index 9c10ca96..0373d814 100644 --- a/app/src/main/res/layout/fragment_folders.xml +++ b/app/src/main/res/layout/fragment_folders.xml @@ -1,5 +1,6 @@ @@ -11,6 +12,22 @@ + android:layout_height="match_parent" + tools:itemCount="5" + tools:listitem="@layout/folder_layout" /> + + + + \ No newline at end of file diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 92f0e3d9..ff412738 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -27,7 +27,7 @@ Nom du flux Modifier le flux Dossier - Pas de dossier + Aucun dossier Retour Supprimer le flux ? Charger @@ -81,5 +81,6 @@ %1$s flux %1$s flux Supprimer + Aucun item \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml new file mode 100644 index 00000000..fcec13df --- /dev/null +++ b/app/src/main/res/values/attrs.xml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8413d62b..117b29b8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -89,4 +89,5 @@ %1$s feed Delete
%2$s]]>
+ No item