Add feed count in folder layout
This commit is contained in:
parent
6e2786e233
commit
9096cea9bd
@ -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 {
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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>
|
||||
|
@ -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>
|
@ -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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user