From 0335d67541a106936d69a703a5fe0084d86c64b6 Mon Sep 17 00:00:00 2001 From: Shinokuni Date: Sat, 2 Feb 2019 15:10:13 +0000 Subject: [PATCH] Improving item layout for items without image cover and fixing some null pointer exceptions for the favicon url and the image url --- .../com/readrops/app/LocalFeedRepository.java | 30 +++--- .../com/readrops/app/MainItemListAdapter.java | 19 ++-- .../readrops/app/database/dao/ItemDao.java | 2 +- .../readrops/app/database/entities/Item.java | 4 + app/src/main/res/layout/activity_main.xml | 13 ++- app/src/main/res/layout/image_item.xml | 92 +++++++++++++++++++ app/src/main/res/layout/image_list_item.xml | 85 ----------------- .../readrops/readropslibrary/HtmlParser.java | 6 +- 8 files changed, 134 insertions(+), 117 deletions(-) create mode 100644 app/src/main/res/layout/image_item.xml delete mode 100644 app/src/main/res/layout/image_list_item.xml diff --git a/app/src/main/java/com/readrops/app/LocalFeedRepository.java b/app/src/main/java/com/readrops/app/LocalFeedRepository.java index 8ad24216..de020d59 100644 --- a/app/src/main/java/com/readrops/app/LocalFeedRepository.java +++ b/app/src/main/java/com/readrops/app/LocalFeedRepository.java @@ -125,10 +125,7 @@ public class LocalFeedRepository extends ARepository implements QueryCallback { if (dbFeed == null) { dbFeed = Feed.feedFromRSS(rssFeed.getChannel()); - String favUrl = HtmlParser.getFaviconLink(dbFeed.getSiteUrl()); - dbFeed.setIconUrl(favUrl); - dbFeed.setColor(getFaviconColor(favUrl)); - + setFavIconUtils(dbFeed); dbFeed.setId((int)(database.feedDao().insert(dbFeed))); } @@ -147,10 +144,7 @@ public class LocalFeedRepository extends ARepository implements QueryCallback { if (dbFeed == null) { dbFeed = Feed.feedFromATOM(feed); - String favUrl = HtmlParser.getFaviconLink(dbFeed.getSiteUrl()); - dbFeed.setIconUrl(favUrl); - dbFeed.setColor(getFaviconColor(favUrl)); - + setFavIconUtils(dbFeed); dbFeed.setId((int)(database.feedDao().insert(dbFeed))); } @@ -170,10 +164,7 @@ public class LocalFeedRepository extends ARepository implements QueryCallback { if (dbFeed == null) { dbFeed = Feed.feedFromJSON(feed); - String favUrl = HtmlParser.getFaviconLink(dbFeed.getSiteUrl()); - dbFeed.setIconUrl(favUrl); - dbFeed.setColor(getFaviconColor(favUrl)); - + setFavIconUtils(dbFeed); dbFeed.setId((int)(database.feedDao().insert(dbFeed))); } @@ -197,6 +188,14 @@ public class LocalFeedRepository extends ARepository implements QueryCallback { } } + private void setFavIconUtils(Feed feed) throws IOException { + String favUrl = HtmlParser.getFaviconLink(feed.getSiteUrl()); + if (favUrl != null) { + feed.setIconUrl(favUrl); + feed.setColor(getFaviconColor(favUrl)); + } + } + private @ColorInt int getFaviconColor(String favUrl) throws IOException { Bitmap favicon = getFaviconFromUrl(favUrl); Palette palette = Palette.from(favicon).generate(); @@ -209,9 +208,12 @@ public class LocalFeedRepository extends ARepository implements QueryCallback { Request request = new Request.Builder().url(url).build(); Response response = okHttpClient.newCall(request).execute(); - InputStream inputStream = response.body().byteStream(); - return BitmapFactory.decodeStream(inputStream); + if (response.isSuccessful()) { + InputStream inputStream = response.body().byteStream(); + return BitmapFactory.decodeStream(inputStream); + } else + return null; } } diff --git a/app/src/main/java/com/readrops/app/MainItemListAdapter.java b/app/src/main/java/com/readrops/app/MainItemListAdapter.java index c73ec4ca..755019bb 100644 --- a/app/src/main/java/com/readrops/app/MainItemListAdapter.java +++ b/app/src/main/java/com/readrops/app/MainItemListAdapter.java @@ -27,7 +27,7 @@ import com.readrops.app.database.entities.Item; import java.util.Collections; import java.util.List; -public class MainItemListAdapter extends ListAdapter implements ListPreloader.PreloadModelProvider { +public class MainItemListAdapter extends ListAdapter implements ListPreloader.PreloadModelProvider { private RequestManager manager; private OnItemClickListener listener; @@ -60,15 +60,15 @@ public class MainItemListAdapter extends ListAdapter { @@ -134,11 +135,11 @@ public class MainItemListAdapter extends ListAdapter> getAll(); - @Query("Select Item.id, title, Item.description, image_link, pub_date, name, color, icon_url from Item Inner Join Feed on Item.feed_id = Feed.id Order By pub_date DESC, Item.id") + @Query("Select Item.id, title, Item.description, image_link, pub_date, name, color, icon_url from Item Inner Join Feed on Item.feed_id = Feed.id Order By Item.id ASC") LiveData> getAllItemWithFeeds(); @Query("Select case When :guid In (Select guid from Item) Then 'true' else 'false' end") diff --git a/app/src/main/java/com/readrops/app/database/entities/Item.java b/app/src/main/java/com/readrops/app/database/entities/Item.java index 80bf0c08..66c55db8 100644 --- a/app/src/main/java/com/readrops/app/database/entities/Item.java +++ b/app/src/main/java/com/readrops/app/database/entities/Item.java @@ -125,6 +125,10 @@ public class Item { this.feedId = feedId; } + public boolean hasImage() { + return getImageLink() != null; + } + public static List itemsFromRSS(List items, Feed feed) throws ParseException { List dbItems = new ArrayList<>(); diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 2ccf2745..34628245 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -2,10 +2,10 @@ + tools:context=".MainActivity"> + tools:listitem="@layout/image_item" /> @@ -46,9 +46,8 @@ android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="16dp" - android:src="@drawable/ic_add_white" android:onClick="displayAddFeedDialog" - /> + android:src="@drawable/ic_add_white" /> @@ -59,7 +58,7 @@ android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" - app:menu="@menu/drawer_view" - app:headerLayout="@layout/nav_header"/> + app:headerLayout="@layout/nav_header" + app:menu="@menu/drawer_view" /> \ No newline at end of file diff --git a/app/src/main/res/layout/image_item.xml b/app/src/main/res/layout/image_item.xml new file mode 100644 index 00000000..5e49b207 --- /dev/null +++ b/app/src/main/res/layout/image_item.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/image_list_item.xml b/app/src/main/res/layout/image_list_item.xml deleted file mode 100644 index 88bb7012..00000000 --- a/app/src/main/res/layout/image_list_item.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/readropslibrary/src/main/java/com/readrops/readropslibrary/HtmlParser.java b/readropslibrary/src/main/java/com/readrops/readropslibrary/HtmlParser.java index fabaad5e..4bb97c71 100644 --- a/readropslibrary/src/main/java/com/readrops/readropslibrary/HtmlParser.java +++ b/readropslibrary/src/main/java/com/readrops/readropslibrary/HtmlParser.java @@ -100,7 +100,11 @@ public final class HtmlParser { public static String getDescImageLink(String description) { Document document = Jsoup.parse(description); + Elements elements = document.select("img"); - return document.select("img").first().attr("src"); + if (!elements.isEmpty()) + return elements.first().attr("src"); + else + return null; } }