From e59f32251ee90757f3b802df45aac8e82d0b75b5 Mon Sep 17 00:00:00 2001 From: Size43 Date: Thu, 28 May 2015 21:34:36 +0200 Subject: Unified inbox + fixed adding feeds to filter --- .../java/org/rssin/android/FeedItemAdapter.java | 59 +++++++++++++++ .../java/org/rssin/android/FilterActivity.java | 87 +--------------------- .../org/rssin/android/FilterSettingsActivity.java | 1 + .../org/rssin/android/UnifiedInboxActivity.java | 52 +++++++++++++ app/src/main/java/org/rssin/rssin/Feed.java | 1 + app/src/main/java/org/rssin/rssin/Filter.java | 6 +- 6 files changed, 116 insertions(+), 90 deletions(-) create mode 100755 app/src/main/java/org/rssin/android/FeedItemAdapter.java mode change 100644 => 100755 app/src/main/java/org/rssin/android/FilterActivity.java mode change 100644 => 100755 app/src/main/java/org/rssin/android/FilterSettingsActivity.java mode change 100644 => 100755 app/src/main/java/org/rssin/android/UnifiedInboxActivity.java mode change 100644 => 100755 app/src/main/java/org/rssin/rssin/Feed.java (limited to 'app/src/main/java') diff --git a/app/src/main/java/org/rssin/android/FeedItemAdapter.java b/app/src/main/java/org/rssin/android/FeedItemAdapter.java new file mode 100755 index 0000000..5ecb820 --- /dev/null +++ b/app/src/main/java/org/rssin/android/FeedItemAdapter.java @@ -0,0 +1,59 @@ +package org.rssin.android; + +/** + * @author Jos. + */ + +import android.support.v7.widget.RecyclerView; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import org.rssin.rss.FeedItem; +import org.rssin.rssin.R; + +import java.util.List; + +public class FeedItemAdapter extends RecyclerView.Adapter { + List feedItems; + + public FeedItemAdapter(List objects) { + feedItems = objects; + } + + @Override + public FeedItemHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View itemView = LayoutInflater. + from(parent.getContext()). + inflate(R.layout.item_feeditem, parent, false); + return new FeedItemHolder(itemView); + } + + @Override + public void onBindViewHolder(FeedItemHolder holder, int position) { + FeedItem item = feedItems.get(position); + holder.title.setText(item.getTitle()); + holder.summary.setText(Html.fromHtml(item.getDescription())); + } + + @Override + public int getItemCount() { + return feedItems.size(); + } + + /** + * TextViews holder + */ + static class FeedItemHolder extends RecyclerView.ViewHolder { + TextView title; + TextView summary; + + public FeedItemHolder(View itemView) { + super(itemView); + title = (TextView) itemView.findViewById(R.id.feeditem_title); + summary = (TextView) itemView.findViewById(R.id.feeditem_summary); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/rssin/android/FilterActivity.java b/app/src/main/java/org/rssin/android/FilterActivity.java old mode 100644 new mode 100755 index 6c827d1..252101a --- a/app/src/main/java/org/rssin/android/FilterActivity.java +++ b/app/src/main/java/org/rssin/android/FilterActivity.java @@ -1,21 +1,13 @@ package org.rssin.android; import android.app.Activity; -import android.content.Context; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; -import android.text.Html; -import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.ListView; -import android.widget.TextView; import com.android.volley.VolleyError; @@ -34,15 +26,13 @@ public class FilterActivity extends ActionBarActivity { private Filter filter; private RecyclerView mRecyclerView; - private RecyclerView.Adapter mAdapter; - private RecyclerView.LayoutManager mLayoutManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_filter); - mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view); - mLayoutManager = new LinearLayoutManager(this); + mRecyclerView = (RecyclerView) findViewById(R.id.filter_feeditems); + RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this); mRecyclerView.setLayoutManager(mLayoutManager); try { @@ -60,7 +50,6 @@ public class FilterActivity extends ActionBarActivity { setTitle(filter.getTitle()); - final Activity activity = this; FeedLoaderAndSorter loaderAndSorter = new FeedLoaderAndSorter(filter); loaderAndSorter.getFilteredFeedItems(new VolleyFetcher(this), new FallibleListener, VolleyError>() { @Override @@ -107,76 +96,4 @@ public class FilterActivity extends ActionBarActivity { Frontend.warning(this, R.string.error_save_feedsorter, e); } } - - /** - * Custom ArrayAdapter to display Keywords - */ - private static class FeedItemAdapter extends RecyclerView.Adapter { - List feedItems; - - public FeedItemAdapter(List objects) { - feedItems = objects; - } - -// @Override -// public View getView(int position, View convertView, ViewGroup parent) { -// View row = convertView; -// KeywordHolder holder = null; -// -// if (row == null) { -// LayoutInflater inflater = ((Activity) context).getLayoutInflater(); -// row = inflater.inflate(layoutResourceId, parent, false); -// -// holder = new KeywordHolder(); -// holder.title = (TextView) row.findViewById(R.id.feeditem_title); -// holder.summary = (TextView) row.findViewById(R.id.feeditem_summary); -// -// row.setTag(holder); -// } else { -// holder = (KeywordHolder) row.getTag(); -// } -// -// FeedItem feedItem = feedItems.get(position); -// holder.title.setText(feedItem.getTitle()); -// holder.summary.setText(Html.fromHtml(feedItem.getDescription())); -// -// return row; -// } - - @Override - public KeywordHolder onCreateViewHolder(ViewGroup parent, int viewType) { - View itemView = LayoutInflater. - from(parent.getContext()). - inflate(R.layout.item_feeditem, parent, false); - return new KeywordHolder(itemView); - } - - @Override - public void onBindViewHolder(KeywordHolder holder, int position) { - FeedItem item = feedItems.get(position); - holder.title.setText(item.getTitle()); - holder.summary.setText(item.getDescription()); - } - - @Override - public int getItemCount() { - return feedItems.size(); - } - - /** - * TextViews holder - */ - static class KeywordHolder extends RecyclerView.ViewHolder { - TextView title; - TextView summary; - - public KeywordHolder(View itemView) { - super(itemView); - title = (TextView) itemView.findViewById(R.id.feeditem_title); - summary = (TextView) itemView.findViewById(R.id.feeditem_summary); - } - } - - - } } diff --git a/app/src/main/java/org/rssin/android/FilterSettingsActivity.java b/app/src/main/java/org/rssin/android/FilterSettingsActivity.java old mode 100644 new mode 100755 index b896689..ac5538f --- a/app/src/main/java/org/rssin/android/FilterSettingsActivity.java +++ b/app/src/main/java/org/rssin/android/FilterSettingsActivity.java @@ -258,6 +258,7 @@ public class FilterSettingsActivity extends ActionBarActivity { try { filter.store(DefaultStorageProvider.getInstance()); + feed.store(DefaultStorageProvider.getInstance()); feedAdapter.notifyDataSetChanged(); editText.setText(""); } catch (Exception e) { diff --git a/app/src/main/java/org/rssin/android/UnifiedInboxActivity.java b/app/src/main/java/org/rssin/android/UnifiedInboxActivity.java old mode 100644 new mode 100755 index d99a1e0..54dab68 --- a/app/src/main/java/org/rssin/android/UnifiedInboxActivity.java +++ b/app/src/main/java/org/rssin/android/UnifiedInboxActivity.java @@ -3,10 +3,22 @@ package org.rssin.android; import android.content.Intent; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.Menu; import android.view.MenuItem; +import com.android.volley.VolleyError; + +import org.rssin.listener.FallibleListener; +import org.rssin.rss.FeedItem; +import org.rssin.rssin.FeedLoaderAndSorter; +import org.rssin.rssin.Filter; import org.rssin.rssin.R; +import org.rssin.rssin.UnifiedFilterLoader; + +import java.io.IOException; +import java.util.List; /** * Unified view of all filters @@ -14,10 +26,50 @@ import org.rssin.rssin.R; */ public class UnifiedInboxActivity extends ActionBarActivity { + private FiltersList filtersList; + private RecyclerView mRecyclerView; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_unified_inbox); + + mRecyclerView = (RecyclerView) findViewById(R.id.unified_inbox_feeditems); + RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this); + mRecyclerView.setLayoutManager(mLayoutManager); + + try { + filtersList = FiltersList.getInstance(this); + } catch (IOException e) { + Frontend.error(this, R.string.error_load_filters, e); + } + + Intent intent = getIntent(); + int filterHashCode = intent.getIntExtra("filter", -1); + + // @todo Check on -1? Shouldn't happen anyway. + for(Filter filter : filtersList.getFilters()) { + filter.ensureFeedSorter(DefaultStorageProvider.getInstance(this)); + filter.ensureFeeds(DefaultStorageProvider.getInstance(this)); + } + + setTitle("Inbox"); + + UnifiedFilterLoader loaderAndSorter = new UnifiedFilterLoader(filtersList.getFilters()); + loaderAndSorter.getFilteredFeedItems(new VolleyFetcher(this), new FallibleListener, VolleyError>() { + @Override + public void onReceive(List data) { + + FeedItemAdapter feedItemAdapter = new FeedItemAdapter(data); + mRecyclerView.setAdapter(feedItemAdapter); + mRecyclerView.setHasFixedSize(true); + } + + @Override + public void onError(VolleyError error) { + Frontend.error(getBaseContext(), R.string.error_net_load); + } + }); } @Override diff --git a/app/src/main/java/org/rssin/rssin/Feed.java b/app/src/main/java/org/rssin/rssin/Feed.java old mode 100644 new mode 100755 index b5c4e2e..ea7e310 --- a/app/src/main/java/org/rssin/rssin/Feed.java +++ b/app/src/main/java/org/rssin/rssin/Feed.java @@ -98,6 +98,7 @@ public class Feed implements Storable, Comparable { if (storageKey == null) { storageKey = storageProvider.uniqueKey(); } + storageProvider.store(storageKey, this); } diff --git a/app/src/main/java/org/rssin/rssin/Filter.java b/app/src/main/java/org/rssin/rssin/Filter.java index 8fd9c7b..6d2c11f 100755 --- a/app/src/main/java/org/rssin/rssin/Filter.java +++ b/app/src/main/java/org/rssin/rssin/Filter.java @@ -91,11 +91,7 @@ public class Filter implements Storable, Comparable { * @return */ public String getKeywordsAsString() { - Keyword[] keywords = new Keyword[this.keywords.size()]; - int i = 0; - for (Keyword keyword : this.keywords) { - keywords[i++] = keyword; - } + Keyword[] keywords = this.keywords.toArray(new Keyword[this.keywords.size()]); return TextUtils.join(", ", keywords); } -- cgit v1.2.3