The list item displays now an image when available (found in its description)
This commit is contained in:
parent
9704b2bb5c
commit
fb9a1a706c
BIN
.idea/caches/build_file_checksums.ser
generated
BIN
.idea/caches/build_file_checksums.ser
generated
Binary file not shown.
@ -46,7 +46,7 @@ dependencies {
|
|||||||
implementation "android.arch.persistence.room:runtime:1.1.1"
|
implementation "android.arch.persistence.room:runtime:1.1.1"
|
||||||
annotationProcessor "android.arch.persistence.room:compiler:1.1.1"
|
annotationProcessor "android.arch.persistence.room:compiler:1.1.1"
|
||||||
|
|
||||||
implementation "joda-time:joda-time:2.3"
|
implementation "joda-time:joda-time:2.9.9"
|
||||||
|
|
||||||
implementation 'com.android.support:cardview-v7:28.0.0'
|
implementation 'com.android.support:cardview-v7:28.0.0'
|
||||||
}
|
}
|
||||||
|
@ -37,8 +37,6 @@ public abstract class ARepository {
|
|||||||
protected void failureCallBackInMainThread(Exception ex) {
|
protected void failureCallBackInMainThread(Exception ex) {
|
||||||
Handler handler = new Handler(Looper.getMainLooper());
|
Handler handler = new Handler(Looper.getMainLooper());
|
||||||
|
|
||||||
handler.post(() -> {
|
handler.post(() -> callback.onFailure(ex));
|
||||||
callback.onFailure(ex);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import android.util.Log;
|
|||||||
import com.readrops.app.database.Database;
|
import com.readrops.app.database.Database;
|
||||||
import com.readrops.app.database.entities.Feed;
|
import com.readrops.app.database.entities.Feed;
|
||||||
import com.readrops.app.database.entities.Item;
|
import com.readrops.app.database.entities.Item;
|
||||||
|
import com.readrops.readropslibrary.HtmlParser;
|
||||||
import com.readrops.readropslibrary.QueryCallback;
|
import com.readrops.readropslibrary.QueryCallback;
|
||||||
import com.readrops.readropslibrary.localfeed.AItem;
|
import com.readrops.readropslibrary.localfeed.AItem;
|
||||||
import com.readrops.readropslibrary.localfeed.RSSNetwork;
|
import com.readrops.readropslibrary.localfeed.RSSNetwork;
|
||||||
@ -117,6 +118,8 @@ public class LocalFeedRepository extends ARepository implements QueryCallback {
|
|||||||
|
|
||||||
for (Item dbItem : dbItems) {
|
for (Item dbItem : dbItems) {
|
||||||
if (!Boolean.valueOf(database.itemDao().guidExist(dbItem.getGuid()))) {
|
if (!Boolean.valueOf(database.itemDao().guidExist(dbItem.getGuid()))) {
|
||||||
|
dbItem.setImageLink(HtmlParser.getDescImageLink(dbItem.getDescription()));
|
||||||
|
|
||||||
database.itemDao().insert(dbItem);
|
database.itemDao().insert(dbItem);
|
||||||
Log.d(TAG, "adding " + dbItem.getTitle());
|
Log.d(TAG, "adding " + dbItem.getTitle());
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,10 @@ import android.support.v7.widget.Toolbar;
|
|||||||
import android.support.v7.widget.helper.ItemTouchHelper;
|
import android.support.v7.widget.helper.ItemTouchHelper;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import com.bumptech.glide.Glide;
|
||||||
|
import com.bumptech.glide.RequestManager;
|
||||||
import com.readrops.app.database.entities.Item;
|
import com.readrops.app.database.entities.Item;
|
||||||
|
|
||||||
|
|
||||||
@ -114,7 +117,7 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S
|
|||||||
private void initRecyclerView() {
|
private void initRecyclerView() {
|
||||||
recyclerView = findViewById(R.id.items_recycler_view);
|
recyclerView = findViewById(R.id.items_recycler_view);
|
||||||
|
|
||||||
adapter = new MainItemListAdapter();
|
adapter = new MainItemListAdapter(Glide.with(this));
|
||||||
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
|
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
|
||||||
recyclerView.setLayoutManager(layoutManager);
|
recyclerView.setLayoutManager(layoutManager);
|
||||||
|
|
||||||
@ -162,8 +165,8 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure(Exception ex) {
|
public void onFailure(Exception e) {
|
||||||
|
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -10,13 +10,17 @@ import android.view.ViewGroup;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import com.bumptech.glide.Glide;
|
||||||
|
import com.bumptech.glide.RequestManager;
|
||||||
import com.readrops.app.database.entities.Item;
|
import com.readrops.app.database.entities.Item;
|
||||||
|
|
||||||
public class MainItemListAdapter extends ListAdapter<Item, MainItemListAdapter.ViewHolder> {
|
public class MainItemListAdapter extends ListAdapter<Item, MainItemListAdapter.ViewHolder> {
|
||||||
|
|
||||||
|
private RequestManager manager;
|
||||||
|
|
||||||
public MainItemListAdapter() {
|
public MainItemListAdapter(RequestManager manager) {
|
||||||
super(DIFF_CALLBACK);
|
super(DIFF_CALLBACK);
|
||||||
|
this.manager = manager;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final DiffUtil.ItemCallback<Item> DIFF_CALLBACK = new DiffUtil.ItemCallback<Item>() {
|
private static final DiffUtil.ItemCallback<Item> DIFF_CALLBACK = new DiffUtil.ItemCallback<Item>() {
|
||||||
@ -46,11 +50,8 @@ public class MainItemListAdapter extends ListAdapter<Item, MainItemListAdapter.V
|
|||||||
Item item = getItem(i);
|
Item item = getItem(i);
|
||||||
viewHolder.bind(item);
|
viewHolder.bind(item);
|
||||||
|
|
||||||
/*Thread thread = new Thread(() -> {
|
if (item.getImageLink() != null)
|
||||||
String imageUrl = PageParser.getOGImageLink(item.getLink());
|
manager.load(item.getImageLink()).into(viewHolder.itemImage);
|
||||||
Glide.with(context).load(imageUrl).into(viewHolder.itemImage);
|
|
||||||
});*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static class ViewHolder extends RecyclerView.ViewHolder {
|
static class ViewHolder extends RecyclerView.ViewHolder {
|
||||||
|
@ -4,5 +4,5 @@ public interface SimpleCallback {
|
|||||||
|
|
||||||
void onSuccess();
|
void onSuccess();
|
||||||
|
|
||||||
void onFailure(Exception ex);
|
void onFailure(Exception e);
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ public abstract class Database extends RoomDatabase {
|
|||||||
public void onCreate(@NonNull SupportSQLiteDatabase db) {
|
public void onCreate(@NonNull SupportSQLiteDatabase db) {
|
||||||
super.onCreate(db);
|
super.onCreate(db);
|
||||||
|
|
||||||
Feed feed1 = new Feed("XDA Developers", "desc", "https://www.xda-developers.com/feed/");
|
Feed feed1 = new Feed("Le Media", "this is a description", "https://lemediapresse.fr/feed/");
|
||||||
|
|
||||||
new Thread(() -> database.feedDao().insert(feed1)).start();
|
new Thread(() -> database.feedDao().insert(feed1)).start();
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ import java.io.IOException;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public final class PageParser {
|
public final class HtmlParser {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse the html page to get the first rss url
|
* Parse the html page to get the first rss url
|
||||||
@ -84,4 +84,10 @@ public final class PageParser {
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String getDescImageLink(String description) {
|
||||||
|
Document document = Jsoup.parse(description);
|
||||||
|
|
||||||
|
return document.select("img").first().attr("src");
|
||||||
|
}
|
||||||
}
|
}
|
@ -51,12 +51,12 @@ public class RSSNetwork {
|
|||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
private void parseFeed(InputStream stream, RSSType type, QueryCallback callback, String url) throws Exception {
|
private void parseFeed(InputStream stream, RSSType type, QueryCallback callback, String url) throws Exception {
|
||||||
//String xml = Utils.inputStreamToString(stream);
|
String xml = Utils.inputStreamToString(stream);
|
||||||
Serializer serializer = new Persister();
|
Serializer serializer = new Persister();
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case RSS_2:
|
case RSS_2:
|
||||||
RSSFeed rssFeed = serializer.read(RSSFeed.class, stream);
|
RSSFeed rssFeed = serializer.read(RSSFeed.class, xml);
|
||||||
callback.onSyncSuccess(rssFeed.getChannel().getItems(), type, url);
|
callback.onSyncSuccess(rssFeed.getChannel().getItems(), type, url);
|
||||||
break;
|
break;
|
||||||
case RSS_ATOM:
|
case RSS_ATOM:
|
||||||
|
@ -12,7 +12,7 @@ public class RSSItem extends AItem {
|
|||||||
@Element(name = "title", required = false)
|
@Element(name = "title", required = false)
|
||||||
private String title;
|
private String title;
|
||||||
|
|
||||||
@Element(name = "description", required = false)
|
@Element(name = "description", required = false, data = true)
|
||||||
private String description;
|
private String description;
|
||||||
|
|
||||||
@Element(name = "link", required = false)
|
@Element(name = "link", required = false)
|
||||||
@ -27,7 +27,7 @@ public class RSSItem extends AItem {
|
|||||||
@Element(name = "pubDate", required = false)
|
@Element(name = "pubDate", required = false)
|
||||||
private String pubDate;
|
private String pubDate;
|
||||||
|
|
||||||
@Element(name = "encoded",required = false)
|
@Element(name = "encoded",required = false, data = true)
|
||||||
@Namespace(prefix = "content")
|
@Namespace(prefix = "content")
|
||||||
private String content;
|
private String content;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user