Modifying item request to have feed name

This commit is contained in:
Shinokuni 2019-01-31 21:28:11 +00:00
parent bab22e99ee
commit bf15c04c68
7 changed files with 80 additions and 57 deletions

View File

@ -6,6 +6,7 @@ import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import com.readrops.app.database.ItemWithFeed;
import com.readrops.app.database.entities.Feed;
import com.readrops.app.database.entities.Item;
import com.readrops.readropslibrary.HtmlParser;
@ -28,18 +29,16 @@ public class LocalFeedRepository extends ARepository implements QueryCallback {
private static final String TAG = LocalFeedRepository.class.getSimpleName();
private LiveData<List<Item>> items;
private List<Feed> feeds;
private LiveData<List<ItemWithFeed>> itemsWhithFeed;
public LocalFeedRepository(Application application) {
super(application);
items = database.itemDao().getAll();
//feeds = database.feedDao().getAllFeeds();
itemsWhithFeed = database.itemDao().getAllItemWithFeeds();
}
public LiveData<List<Item>> getItems() {
return items;
public LiveData<List<ItemWithFeed>> getItemsWhithFeed() {
return itemsWhithFeed;
}
@Override

View File

@ -23,6 +23,7 @@ import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.integration.recyclerview.RecyclerViewPreloader;
import com.bumptech.glide.util.ViewPreloadSizeProvider;
import com.readrops.app.database.ItemWithFeed;
import com.readrops.app.database.entities.Item;
import com.readrops.readropslibrary.ParsingResult;
@ -44,7 +45,7 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S
private NavigationView navigationView;
private DrawerLayout drawerLayout;
private List<Item> newItems;
private List<ItemWithFeed> newItems;
private TreeMap<LocalDateTime, Item> itemsMap;
@ -84,15 +85,11 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S
itemsMap = new TreeMap<>(LocalDateTime::compareTo);
newItems = new ArrayList<>();
viewModel.getItems().observe(this, (List<Item> items) -> {
/*for (Item item : items) {
itemsMap.put(item.getFormatedDate(), item);
}*/
newItems = items;
viewModel.getItemsWithFeed().observe(this, (itemWithFeeds -> {
newItems = itemWithFeeds;
if (!refreshLayout.isRefreshing())
adapter.submitList(newItems);
});
}));
refreshLayout = findViewById(R.id.swipe_refresh_layout);
refreshLayout.setOnRefreshListener(this);

View File

@ -6,7 +6,6 @@ import android.support.annotation.Nullable;
import android.support.v7.recyclerview.extensions.ListAdapter;
import android.support.v7.util.DiffUtil;
import android.support.v7.widget.RecyclerView;
import android.util.Patterns;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -22,13 +21,13 @@ import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions;
import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.transition.DrawableCrossFadeFactory;
import com.bumptech.glide.util.ViewPreloadSizeProvider;
import com.readrops.app.database.ItemWithFeed;
import com.readrops.app.database.entities.Item;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
public class MainItemListAdapter extends ListAdapter<Item, MainItemListAdapter.ViewHolder> implements ListPreloader.PreloadModelProvider<String> {
public class MainItemListAdapter extends ListAdapter<ItemWithFeed, MainItemListAdapter.ViewHolder> implements ListPreloader.PreloadModelProvider<String> {
private RequestManager manager;
private OnItemClickListener listener;
@ -41,16 +40,19 @@ public class MainItemListAdapter extends ListAdapter<Item, MainItemListAdapter.V
this.preloadSizeProvider = preloadSizeProvider;
}
private static final DiffUtil.ItemCallback<Item> DIFF_CALLBACK = new DiffUtil.ItemCallback<Item>() {
private static final DiffUtil.ItemCallback<ItemWithFeed> DIFF_CALLBACK = new DiffUtil.ItemCallback<ItemWithFeed>() {
@Override
public boolean areItemsTheSame(@NonNull Item item, @NonNull Item t1) {
return item.getId() == t1.getId();
public boolean areItemsTheSame(@NonNull ItemWithFeed item, @NonNull ItemWithFeed t1) {
return item.getItem().getId() == t1.getItem().getId();
}
@Override
public boolean areContentsTheSame(@NonNull Item item, @NonNull Item t1) {
return item.getTitle().equals(t1.getTitle()) &&
item.getDescription().equals(t1.getDescription());
public boolean areContentsTheSame(@NonNull ItemWithFeed itemWithFeed, @NonNull ItemWithFeed t1) {
Item item = itemWithFeed.getItem();
Item item1 = t1.getItem();
return item.getTitle().equals(item1.getTitle()) &&
item.getDescription().equals(item1.getDescription());
}
};
@ -67,8 +69,8 @@ public class MainItemListAdapter extends ListAdapter<Item, MainItemListAdapter.V
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i) {
Item item = getItem(i);
viewHolder.bind(item);
ItemWithFeed itemWithFeed = getItem(i);
viewHolder.bind(itemWithFeed);
preloadSizeProvider.setView(viewHolder.itemImage);
@ -76,8 +78,8 @@ public class MainItemListAdapter extends ListAdapter<Item, MainItemListAdapter.V
RequestOptions requestOptions = new RequestOptions();
requestOptions = requestOptions.transforms(new CenterCrop(), new RoundedCorners(16));
if (item.getImageLink() != null)
manager.load(item.getImageLink())
if (itemWithFeed.getItem().getImageLink() != null)
manager.load(itemWithFeed.getItem().getImageLink())
.apply(requestOptions)
.transition(DrawableTransitionOptions.withCrossFade(fadeFactory))
.into(viewHolder.itemImage);
@ -86,7 +88,7 @@ public class MainItemListAdapter extends ListAdapter<Item, MainItemListAdapter.V
@NonNull
@Override
public List<String> getPreloadItems(int position) {
String url = getItem(position).getImageLink();
String url = getItem(position).getItem().getImageLink();
return Collections.singletonList(url);
}
@ -98,7 +100,7 @@ public class MainItemListAdapter extends ListAdapter<Item, MainItemListAdapter.V
}
public interface OnItemClickListener {
void onItemClick(Item item);
void onItemClick(ItemWithFeed itemWithFeed);
}
public void setOnItemClickListener(OnItemClickListener listener) {
@ -110,6 +112,7 @@ public class MainItemListAdapter extends ListAdapter<Item, MainItemListAdapter.V
private TextView itemTitle;
private ImageView itemImage;
private TextView date;
private TextView feedName;
ViewHolder(@NonNull View itemView) {
super(itemView);
@ -124,11 +127,14 @@ public class MainItemListAdapter extends ListAdapter<Item, MainItemListAdapter.V
itemTitle = itemView.findViewById(R.id.item_title);
itemImage = itemView.findViewById(R.id.item_image);
date = itemView.findViewById(R.id.item_date);
feedName = itemView.findViewById(R.id.item_feed_title);
}
private void bind(Item item) {
private void bind(ItemWithFeed itemWithFeed) {
Item item = itemWithFeed.getItem();
itemTitle.setText(item.getTitle());
date.setText(DateUtils.formatedDateByLocal(item.getFormatedDate()));
date.setText(DateUtils.formatedDateByLocal(item.getPubDate()));
feedName.setText(itemWithFeed.getFeedName());
}
}
}

View File

@ -7,6 +7,7 @@ import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.Observer;
import android.support.annotation.NonNull;
import com.readrops.app.database.ItemWithFeed;
import com.readrops.app.database.entities.Item;
import com.readrops.readropslibrary.ParsingResult;
@ -14,7 +15,7 @@ import java.util.List;
public class MainViewModel extends AndroidViewModel {
private LiveData<List<Item>> items;
private LiveData<List<ItemWithFeed>> itemsWithFeed;
private LocalFeedRepository repository;
public MainViewModel(@NonNull Application application) {
@ -22,11 +23,11 @@ public class MainViewModel extends AndroidViewModel {
repository = new LocalFeedRepository(application);
items = repository.getItems();
itemsWithFeed = repository.getItemsWhithFeed();
}
public LiveData<List<Item>> getItems() {
return items;
public LiveData<List<ItemWithFeed>> getItemsWithFeed() {
return itemsWithFeed;
}
public void setSimpleCallback(SimpleCallback simpleCallback) {

View File

@ -0,0 +1,31 @@
package com.readrops.app.database;
import android.arch.persistence.room.ColumnInfo;
import android.arch.persistence.room.Embedded;
import com.readrops.app.database.entities.Item;
public class ItemWithFeed {
@Embedded
private Item item;
@ColumnInfo(name = "name")
private String feedName;
public Item getItem() {
return item;
}
public void setItem(Item item) {
this.item = item;
}
public String getFeedName() {
return feedName;
}
public void setFeedName(String feedName) {
this.feedName = feedName;
}
}

View File

@ -6,6 +6,7 @@ import android.arch.persistence.room.Dao;
import android.arch.persistence.room.Insert;
import android.arch.persistence.room.Query;
import com.readrops.app.database.ItemWithFeed;
import com.readrops.app.database.entities.Item;
import java.util.List;
@ -16,9 +17,12 @@ public interface ItemDao {
@Query("Select * from Item Where feed_id = :feedId")
LiveData<List<Item>> getAllByFeed(int feedId);
@Query("Select * from Item Order By formatedDate DESC")
@Query("Select * from Item Order By pub_date DESC")
LiveData<List<Item>> getAll();
@Query("Select Item.id, title, Item.description, image_link, pub_date, name from Item Inner Join Feed on Item.feed_id = Feed.id Order By pub_date DESC, Item.id")
LiveData<List<ItemWithFeed>> getAllItemWithFeeds();
@Query("Select case When :guid In (Select guid from Item) Then 'true' else 'false' end")
String guidExist(String guid);

View File

@ -5,14 +5,12 @@ import android.arch.persistence.room.*;
import com.readrops.app.DateUtils;
import com.readrops.readropslibrary.localfeed.atom.ATOMEntry;
import com.readrops.readropslibrary.localfeed.json.JSONItem;
import com.readrops.readropslibrary.localfeed.rss.RSSChannel;
import com.readrops.readropslibrary.localfeed.rss.RSSItem;
import org.joda.time.LocalDateTime;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@ -36,9 +34,7 @@ public class Item {
private String author;
@ColumnInfo(name = "pub_date")
private String pubDate;
private LocalDateTime formatedDate;
private LocalDateTime pubDate;
private String content;
@ -96,22 +92,14 @@ public class Item {
this.author = author;
}
public String getPubDate() {
public LocalDateTime getPubDate() {
return pubDate;
}
public void setPubDate(String pubDate) {
public void setPubDate(LocalDateTime pubDate) {
this.pubDate = pubDate;
}
public LocalDateTime getFormatedDate() {
return formatedDate;
}
public void setFormatedDate(LocalDateTime formatedDate) {
this.formatedDate = formatedDate;
}
public String getContent() {
return content;
}
@ -149,8 +137,7 @@ public class Item {
newItem.setTitle(item.getTitle());
newItem.setImageLink(item.getImageLink());
newItem.setPubDate(item.getPubDate());
newItem.setFormatedDate(DateUtils.stringToDateTime(item.getPubDate(), DateUtils.RSS_DATE_FORMAT));
newItem.setPubDate(DateUtils.stringToDateTime(item.getPubDate(), DateUtils.RSS_DATE_FORMAT));
newItem.setLink(item.getLink());
newItem.setFeedId(feed.getId());
@ -172,8 +159,7 @@ public class Item {
dbItem.setGuid(item.getId());
dbItem.setTitle(item.getTitle());
dbItem.setPubDate(item.getUpdated());
dbItem.setFormatedDate(DateUtils.stringToDateTime(item.getUpdated(), DateUtils.ATOM_JSON_DATE_FORMAT));
dbItem.setPubDate(DateUtils.stringToDateTime(item.getUpdated(), DateUtils.ATOM_JSON_DATE_FORMAT));
dbItem.setLink(item.getLink().getHref());
@ -195,8 +181,7 @@ public class Item {
dbItem.setGuid(item.getId());
dbItem.setTitle(item.getTitle());
dbItem.setPubDate(item.getPubDate());
dbItem.setFormatedDate(DateUtils.stringToDateTime(item.getPubDate(), DateUtils.ATOM_JSON_DATE_FORMAT));
dbItem.setPubDate(DateUtils.stringToDateTime(item.getPubDate(), DateUtils.ATOM_JSON_DATE_FORMAT));
dbItem.setLink(item.getUrl());