Add feed count in folder layout

This commit is contained in:
Shinokuni 2019-09-21 17:21:46 +02:00
parent 6e2786e233
commit 9096cea9bd
8 changed files with 83 additions and 17 deletions

View File

@ -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<Folder, FoldersAdapter.FolderViewHolder> {
public class FoldersAdapter extends ListAdapter<FolderWithFeedCount, FoldersAdapter.FolderViewHolder> {
private ManageFoldersListener listener;
@ -28,20 +29,21 @@ public class FoldersAdapter extends ListAdapter<Folder, FoldersAdapter.FolderVie
}
private static final DiffUtil.ItemCallback<Folder> DIFF_CALLBACK = new DiffUtil.ItemCallback<Folder>() {
private static final DiffUtil.ItemCallback<FolderWithFeedCount> DIFF_CALLBACK = new DiffUtil.ItemCallback<FolderWithFeedCount>() {
@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<Folder, FoldersAdapter.FolderVie
@Override
public void onBindViewHolder(@NonNull FolderViewHolder holder, int position, @NonNull List<Object> 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<Folder, FoldersAdapter.FolderVie
@Override
public void onBindViewHolder(@NonNull FolderViewHolder holder, int position) {
Folder folder = getItem(position);
FolderWithFeedCount folder = getItem(position);
holder.binding.folderName.setText(folder.getName());
holder.binding.folderName.setText(folder.getFolder().getName());
holder.itemView.setOnClickListener(v -> 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 {

View File

@ -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<Folder> {
@Query("Select * from Folder Where account_id = :accountId Order By name ASC")
public abstract LiveData<List<Folder>> 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<List<FolderWithFeedCount>> getFoldersWithFeedCount(int accountId);
@Query("Select * from Folder Where account_id = :accountId Order By name ASC")
public abstract List<Folder> getFolders(int accountId);

View File

@ -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;
}
}

View File

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

View File

@ -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<List<FolderWithFeedCount>> getFoldersWithFeedCount() {
return db.folderDao().getFoldersWithFeedCount(account.getId());
}
public Completable addFolder(Folder folder) {
return repository.addFolder(folder);
}

View File

@ -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" />
<TextView
android:id="@+id/folder_feeds_count"
style="@style/TextAppearance.AppCompat.Subhead"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
tools:text="15 feeds" />
</RelativeLayout>
</androidx.cardview.widget.CardView>

View File

@ -78,5 +78,7 @@
<string name="number_items_to_parse">Nombre maximum d\'articles par flux</string>
<string name="unlimited">Illimité</string>
<string name="local">Local</string>
<string name="feeds_number">%1$s flux</string>
<string name="feed_number">%1$s flux</string>
</resources>

View File

@ -85,4 +85,6 @@
<string name="number_items_to_parse">Maximum number of items per feed</string>
<string name="unlimited">Unlimited</string>
<string name="local">Local</string>
<string name="feeds_number">%1$s feeds</string>
<string name="feed_number">%1$s feed</string>
</resources>