diff --git a/app/src/main/java/com/readrops/app/BasedRepository.java b/app/src/main/java/com/readrops/app/BasedRepository.java index afb31dc4..191d010c 100644 --- a/app/src/main/java/com/readrops/app/BasedRepository.java +++ b/app/src/main/java/com/readrops/app/BasedRepository.java @@ -3,6 +3,7 @@ package com.readrops.app; import android.app.Application; import android.arch.lifecycle.LiveData; +import com.readrops.app.database.ItemWithFeed; import com.readrops.app.database.entities.Item; import com.readrops.readropslibrary.ParsingResult; @@ -12,7 +13,7 @@ public class BasedRepository extends ARepository { super(application); } - public LiveData getItemById(int id) { + public LiveData getItemById(int id) { return database.itemDao().getItemById(id); } diff --git a/app/src/main/java/com/readrops/app/ItemActivity.java b/app/src/main/java/com/readrops/app/ItemActivity.java index 4725ad28..edc48637 100644 --- a/app/src/main/java/com/readrops/app/ItemActivity.java +++ b/app/src/main/java/com/readrops/app/ItemActivity.java @@ -3,18 +3,27 @@ package com.readrops.app; import android.arch.lifecycle.ViewModelProvider; import android.content.Intent; import android.graphics.Bitmap; +import android.graphics.Color; +import android.support.design.widget.AppBarLayout; import android.support.design.widget.CollapsingToolbarLayout; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.util.Log; +import android.webkit.WebSettings; import android.webkit.WebView; import android.widget.ImageView; +import android.widget.TextView; +import com.readrops.app.database.entities.Item; import com.readrops.app.utils.GlideApp; +import com.readrops.app.utils.ReadropsWebView; import com.readrops.app.utils.Utils; import com.readrops.readropslibrary.Utils.LibUtils; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + import java.io.IOException; import java.util.concurrent.Executors; import java.util.concurrent.ThreadPoolExecutor; @@ -22,6 +31,9 @@ import java.util.concurrent.ThreadPoolExecutor; public class ItemActivity extends AppCompatActivity { private ItemViewModel viewModel; + private TextView title; + private TextView author; + private TextView readTime; @Override protected void onCreate(Bundle savedInstanceState) { @@ -39,7 +51,9 @@ public class ItemActivity extends AppCompatActivity { getSupportActionBar().setDisplayHomeAsUpEnabled(true); CollapsingToolbarLayout toolbarLayout = findViewById(R.id.collapsing_layout); - toolbarLayout.setTitle(""); + AppBarLayout appBarLayout = findViewById(R.id.app_bar_layout); + if (imageUrl == null) + appBarLayout.setExpanded(false); ImageView imageView = findViewById(R.id.collapsing_layout_image); @@ -47,11 +61,20 @@ public class ItemActivity extends AppCompatActivity { .load(imageUrl) .into(imageView); - WebView webView = findViewById(R.id.item_webview); + ReadropsWebView webView = findViewById(R.id.item_webview); + title = findViewById(R.id.activity_item_title); + author = findViewById(R.id.activity_item_author); + readTime = findViewById(R.id.activity_item_readtime); viewModel = ViewModelProvider.AndroidViewModelFactory.getInstance(getApplication()).create(ItemViewModel.class); - viewModel.getItemById(itemId).observe(this, item -> { - webView.loadData(item.getContent(), LibUtils.HTML_CONTENT_TYPE, "utf-8"); + viewModel.getItemById(itemId).observe(this, itemWithFeed -> { + Item item = itemWithFeed.getItem(); + + toolbarLayout.setTitle(itemWithFeed.getFeedName()); + toolbar.setTitle(itemWithFeed.getFeedName()); + title.setText(item.getTitle()); + + webView.setItem(itemWithFeed); }); } } diff --git a/app/src/main/java/com/readrops/app/ItemViewModel.java b/app/src/main/java/com/readrops/app/ItemViewModel.java index f01cd30e..450bb0a3 100644 --- a/app/src/main/java/com/readrops/app/ItemViewModel.java +++ b/app/src/main/java/com/readrops/app/ItemViewModel.java @@ -6,6 +6,7 @@ import android.arch.lifecycle.LiveData; import android.support.annotation.NonNull; import com.readrops.app.database.Database; +import com.readrops.app.database.ItemWithFeed; import com.readrops.app.database.entities.Item; public class ItemViewModel extends AndroidViewModel { @@ -18,7 +19,7 @@ public class ItemViewModel extends AndroidViewModel { repository = new BasedRepository(application); } - public LiveData getItemById(int id) { + public LiveData getItemById(int id) { return repository.getItemById(id); } diff --git a/app/src/main/java/com/readrops/app/LocalFeedRepository.java b/app/src/main/java/com/readrops/app/LocalFeedRepository.java index 09c9d9e6..09bbd763 100644 --- a/app/src/main/java/com/readrops/app/LocalFeedRepository.java +++ b/app/src/main/java/com/readrops/app/LocalFeedRepository.java @@ -214,7 +214,7 @@ public class LocalFeedRepository extends ARepository implements QueryCallback { } } - dbItem.setDescription(Jsoup.parse(dbItem.getDescription()).text()); + dbItem.setCleanDescription(Jsoup.parse(dbItem.getDescription()).text()); } database.itemDao().insert(dbItem); diff --git a/app/src/main/java/com/readrops/app/MainItemListAdapter.java b/app/src/main/java/com/readrops/app/MainItemListAdapter.java index 397ced92..2de068bc 100644 --- a/app/src/main/java/com/readrops/app/MainItemListAdapter.java +++ b/app/src/main/java/com/readrops/app/MainItemListAdapter.java @@ -175,9 +175,9 @@ 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 Item.id DESC") + @Query("Select Item.id, title, clean_description, image_link, pub_date, name, color, icon_url from Item Inner Join Feed on Item.feed_id = Feed.id Order By Item.id DESC") LiveData> getAllItemWithFeeds(); @Query("Select case When :guid In (Select guid from Item) Then 'true' else 'false' end") @@ -32,6 +32,6 @@ public interface ItemDao { @Insert void insertAll(List items); - @Query("Select * from Item Where id = :id") - LiveData getItemById(int id); + @Query("Select title, Item.description, content, pub_date, author, 0 as color, name from Item Inner Join Feed on Item.feed_id = Feed.id And Item.id = :id") + LiveData getItemById(int id); } 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 82e643b3..8493ffbc 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 @@ -26,6 +26,9 @@ public class Item { private String description; + @ColumnInfo(name = "clean_description") + private String cleanDescription; + private String link; @ColumnInfo(name = "image_link") @@ -68,6 +71,14 @@ public class Item { this.description = description; } + public String getCleanDescription() { + return cleanDescription; + } + + public void setCleanDescription(String cleanDescription) { + this.cleanDescription = cleanDescription; + } + public String getLink() { return link; } @@ -128,6 +139,13 @@ public class Item { return getImageLink() != null; } + public String getText() { + if (content != null) + return content; + else + return description; + } + public static List itemsFromRSS(List items, Feed feed) throws ParseException { List dbItems = new ArrayList<>(); diff --git a/app/src/main/java/com/readrops/app/utils/ReadropsWebView.java b/app/src/main/java/com/readrops/app/utils/ReadropsWebView.java new file mode 100644 index 00000000..c01e05c3 --- /dev/null +++ b/app/src/main/java/com/readrops/app/utils/ReadropsWebView.java @@ -0,0 +1,49 @@ +package com.readrops.app.utils; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.util.AttributeSet; +import android.webkit.WebSettings; +import android.webkit.WebView; + +import com.readrops.app.R; +import com.readrops.app.database.ItemWithFeed; +import com.readrops.app.database.entities.Item; +import com.readrops.readropslibrary.Utils.LibUtils; + +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +public class ReadropsWebView extends WebView { + + private ItemWithFeed itemWithFeed; + + public ReadropsWebView(Context context, AttributeSet attrs) { + super(context, attrs); + + init(); + } + + public void setItem(ItemWithFeed itemWithFeed) { + this.itemWithFeed = itemWithFeed; + loadData(getText(), LibUtils.HTML_CONTENT_TYPE, "utf-8"); + } + + @SuppressLint("SetJavaScriptEnabled") + private void init() { + WebSettings settings = getSettings(); + + settings.setJavaScriptEnabled(true); + setBackgroundColor(getResources().getColor(R.color.colorBackground)); + } + + private String getText() { + Document document = Jsoup.parse(itemWithFeed.getItem().getText()); + + document.head().append(""); + + return document.toString(); + } + + +} diff --git a/app/src/main/java/com/readrops/app/utils/Utils.java b/app/src/main/java/com/readrops/app/utils/Utils.java index 26c775f0..ea550ff9 100644 --- a/app/src/main/java/com/readrops/app/utils/Utils.java +++ b/app/src/main/java/com/readrops/app/utils/Utils.java @@ -1,10 +1,13 @@ package com.readrops.app.utils; +import android.app.Activity; +import android.app.Application; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Handler; import android.os.Looper; +import android.util.DisplayMetrics; import android.widget.Toast; import java.io.IOException; @@ -45,4 +48,11 @@ public final class Utils { return null; } + public static int getDeviceWidth(Activity activity) { + DisplayMetrics displayMetrics = new DisplayMetrics(); + activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); + + return displayMetrics.widthPixels; + } + } diff --git a/app/src/main/res/layout/activity_item.xml b/app/src/main/res/layout/activity_item.xml index bf15a948..5bc3d357 100644 --- a/app/src/main/res/layout/activity_item.xml +++ b/app/src/main/res/layout/activity_item.xml @@ -8,6 +8,7 @@ tools:context=".ItemActivity"> @@ -39,14 +40,56 @@ - + android:layout_height="wrap_content"> + + + + + + + + + + + + + diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 7ea59af4..39684178 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -16,4 +16,10 @@ true + +