From 9096cea9bd3dbba53de16da71f14bee566e222f3 Mon Sep 17 00:00:00 2001 From: Shinokuni Date: Sat, 21 Sep 2019 17:21:46 +0200 Subject: [PATCH] Add feed count in folder layout --- .../readrops/app/adapters/FoldersAdapter.java | 34 ++++++++++++------- .../readrops/app/database/dao/FolderDao.java | 6 +++- .../database/pojo/FolderWithFeedCount.java | 34 +++++++++++++++++++ .../app/fragments/FoldersFragment.java | 2 +- .../ManageFeedsFoldersViewModel.java | 7 +++- app/src/main/res/layout/folder_layout.xml | 13 ++++++- app/src/main/res/values-fr-rFR/strings.xml | 2 ++ app/src/main/res/values/strings.xml | 2 ++ 8 files changed, 83 insertions(+), 17 deletions(-) create mode 100644 app/src/main/java/com/readrops/app/database/pojo/FolderWithFeedCount.java diff --git a/app/src/main/java/com/readrops/app/adapters/FoldersAdapter.java b/app/src/main/java/com/readrops/app/adapters/FoldersAdapter.java index 54456f4f..bd77bed9 100644 --- a/app/src/main/java/com/readrops/app/adapters/FoldersAdapter.java +++ b/app/src/main/java/com/readrops/app/adapters/FoldersAdapter.java @@ -13,11 +13,12 @@ import androidx.recyclerview.widget.RecyclerView; import com.readrops.app.R; import com.readrops.app.database.entities.Folder; +import com.readrops.app.database.pojo.FolderWithFeedCount; import com.readrops.app.databinding.FolderLayoutBinding; import java.util.List; -public class FoldersAdapter extends ListAdapter { +public class FoldersAdapter extends ListAdapter { private ManageFoldersListener listener; @@ -28,20 +29,21 @@ public class FoldersAdapter extends ListAdapter DIFF_CALLBACK = new DiffUtil.ItemCallback() { + private static final DiffUtil.ItemCallback DIFF_CALLBACK = new DiffUtil.ItemCallback() { @Override - public boolean areItemsTheSame(@NonNull Folder oldItem, @NonNull Folder newItem) { - return oldItem.getId() == newItem.getId(); + public boolean areItemsTheSame(@NonNull FolderWithFeedCount oldItem, @NonNull FolderWithFeedCount newItem) { + return oldItem.getFolder().getId() == newItem.getFolder().getId(); } @Override - public boolean areContentsTheSame(@NonNull Folder oldItem, @NonNull Folder newItem) { - return TextUtils.equals(oldItem.getName(), newItem.getName()); + public boolean areContentsTheSame(@NonNull FolderWithFeedCount oldItem, @NonNull FolderWithFeedCount newItem) { + return TextUtils.equals(oldItem.getFolder().getName(), newItem.getFolder().getName()) && + oldItem.getFeedCount() == newItem.getFeedCount(); } @Nullable @Override - public Object getChangePayload(@NonNull Folder oldItem, @NonNull Folder newItem) { + public Object getChangePayload(@NonNull FolderWithFeedCount oldItem, @NonNull FolderWithFeedCount newItem) { return newItem; } }; @@ -58,9 +60,12 @@ public class FoldersAdapter extends ListAdapter payloads) { if (payloads.size() > 0) { - Folder folder = (Folder) payloads.get(0); + FolderWithFeedCount folder = (FolderWithFeedCount) payloads.get(0); - holder.binding.folderName.setText(folder.getName()); + holder.binding.folderName.setText(folder.getFolder().getName()); + + int stringRes = folder.getFeedCount() > 1 ? R.string.feeds_number : R.string.feed_number; + holder.binding.folderFeedsCount.setText(holder.itemView.getContext().getString(stringRes, String.valueOf(folder.getFeedCount()))); } else onBindViewHolder(holder, position); @@ -68,15 +73,18 @@ public class FoldersAdapter extends ListAdapter listener.onClick(folder)); + int stringRes = folder.getFeedCount() > 1 ? R.string.feeds_number : R.string.feed_number; + holder.binding.folderFeedsCount.setText(holder.itemView.getContext().getString(stringRes, String.valueOf(folder.getFeedCount()))); + + holder.itemView.setOnClickListener(v -> listener.onClick(folder.getFolder())); } public Folder getFolder(int position) { - return getItem(position); + return getItem(position).getFolder(); } public interface ManageFoldersListener { diff --git a/app/src/main/java/com/readrops/app/database/dao/FolderDao.java b/app/src/main/java/com/readrops/app/database/dao/FolderDao.java index 341c8ed0..6291ede6 100644 --- a/app/src/main/java/com/readrops/app/database/dao/FolderDao.java +++ b/app/src/main/java/com/readrops/app/database/dao/FolderDao.java @@ -5,8 +5,9 @@ import androidx.room.Dao; import androidx.room.Query; import androidx.room.Transaction; -import com.readrops.app.database.entities.account.Account; import com.readrops.app.database.entities.Folder; +import com.readrops.app.database.entities.account.Account; +import com.readrops.app.database.pojo.FolderWithFeedCount; import java.util.ArrayList; import java.util.List; @@ -17,6 +18,9 @@ public abstract class FolderDao implements BaseDao { @Query("Select * from Folder Where account_id = :accountId Order By name ASC") public abstract LiveData> getAllFolders(int accountId); + @Query("Select Folder.*, count(Feed.id) as feed_count from Folder Left Join Feed on Folder.id = Feed.folder_id Where Folder.account_id = :accountId Group by Folder.id Order By name ASC") + public abstract LiveData> getFoldersWithFeedCount(int accountId); + @Query("Select * from Folder Where account_id = :accountId Order By name ASC") public abstract List getFolders(int accountId); diff --git a/app/src/main/java/com/readrops/app/database/pojo/FolderWithFeedCount.java b/app/src/main/java/com/readrops/app/database/pojo/FolderWithFeedCount.java new file mode 100644 index 00000000..999b9501 --- /dev/null +++ b/app/src/main/java/com/readrops/app/database/pojo/FolderWithFeedCount.java @@ -0,0 +1,34 @@ +package com.readrops.app.database.pojo; + +import androidx.room.ColumnInfo; +import androidx.room.Embedded; + +import com.readrops.app.database.entities.Folder; + +public class FolderWithFeedCount { + + @Embedded + private Folder folder; + + @ColumnInfo(name = "feed_count") + private int feedCount; + + public FolderWithFeedCount() { + } + + public Folder getFolder() { + return folder; + } + + public void setFolder(Folder folder) { + this.folder = folder; + } + + public int getFeedCount() { + return feedCount; + } + + public void setFeedCount(int feedCount) { + this.feedCount = feedCount; + } +} 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 32e2f810..2081a190 100644 --- a/app/src/main/java/com/readrops/app/fragments/FoldersFragment.java +++ b/app/src/main/java/com/readrops/app/fragments/FoldersFragment.java @@ -69,7 +69,7 @@ public class FoldersFragment extends Fragment { viewModel = ViewModelProviders.of(this).get(ManageFeedsFoldersViewModel.class); viewModel.setAccount(account); - viewModel.getFolders().observe(this, folders -> adapter.submitList(folders)); + viewModel.getFoldersWithFeedCount().observe(this, folders -> adapter.submitList(folders)); } @Override diff --git a/app/src/main/java/com/readrops/app/viewmodels/ManageFeedsFoldersViewModel.java b/app/src/main/java/com/readrops/app/viewmodels/ManageFeedsFoldersViewModel.java index 66dacf76..3d4e0ee2 100644 --- a/app/src/main/java/com/readrops/app/viewmodels/ManageFeedsFoldersViewModel.java +++ b/app/src/main/java/com/readrops/app/viewmodels/ManageFeedsFoldersViewModel.java @@ -7,10 +7,11 @@ import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import com.readrops.app.database.Database; -import com.readrops.app.database.entities.account.Account; import com.readrops.app.database.entities.Feed; import com.readrops.app.database.entities.Folder; +import com.readrops.app.database.entities.account.Account; import com.readrops.app.database.pojo.FeedWithFolder; +import com.readrops.app.database.pojo.FolderWithFeedCount; import com.readrops.app.repositories.ARepository; import java.util.List; @@ -64,6 +65,10 @@ public class ManageFeedsFoldersViewModel extends AndroidViewModel { return folders; } + public LiveData> getFoldersWithFeedCount() { + return db.folderDao().getFoldersWithFeedCount(account.getId()); + } + public Completable addFolder(Folder folder) { return repository.addFolder(folder); } diff --git a/app/src/main/res/layout/folder_layout.xml b/app/src/main/res/layout/folder_layout.xml index 09455a70..ab1fd741 100644 --- a/app/src/main/res/layout/folder_layout.xml +++ b/app/src/main/res/layout/folder_layout.xml @@ -22,7 +22,18 @@ style="@style/TextAppearance.AppCompat.Subhead" android:layout_width="wrap_content" android:layout_height="wrap_content" - tools:text="Dossier 1" /> + android:layout_alignParentStart="true" + android:layout_toStartOf="@id/folder_feeds_count" + tools:text="Folder 1" /> + + + diff --git a/app/src/main/res/values-fr-rFR/strings.xml b/app/src/main/res/values-fr-rFR/strings.xml index 628ac911..1cf4baf3 100644 --- a/app/src/main/res/values-fr-rFR/strings.xml +++ b/app/src/main/res/values-fr-rFR/strings.xml @@ -78,5 +78,7 @@ Nombre maximum d\'articles par flux Illimité Local + %1$s flux + %1$s flux \ 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 3eae6dac..d049a15a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -85,4 +85,6 @@ Maximum number of items per feed Unlimited Local + %1$s feeds + %1$s feed