From 40f4d4888aa089b36afe0584632093f7e1a257e2 Mon Sep 17 00:00:00 2001 From: Size43 Date: Thu, 4 Jun 2015 16:13:39 +0200 Subject: Adding Feeds/Filters directly from the hamburger menu --- .../main/java/org/rssin/android/FeedsActivity.java | 2 +- .../java/org/rssin/android/FiltersActivity.java | 2 +- .../java/org/rssin/android/HomeScreenActivity.java | 18 +- .../org/rssin/android/NavigationDrawerAdapter.java | 94 ++++++++- .../android/NavigationDrawerFeedFragment.java | 2 +- .../rssin/android/NavigationDrawerFragment.java | 12 +- .../NavigationDrawerManageFeedsFragment.java | 218 ++++++++++++++++++++ .../NavigationDrawerManageFiltersFragment.java | 220 +++++++++++++++++++++ .../org/rssin/android/UnifiedInboxActivity.java | 97 --------- 9 files changed, 550 insertions(+), 115 deletions(-) mode change 100644 => 100755 app/src/main/java/org/rssin/android/FeedsActivity.java create mode 100755 app/src/main/java/org/rssin/android/NavigationDrawerManageFeedsFragment.java create mode 100755 app/src/main/java/org/rssin/android/NavigationDrawerManageFiltersFragment.java delete mode 100755 app/src/main/java/org/rssin/android/UnifiedInboxActivity.java (limited to 'app/src/main/java') diff --git a/app/src/main/java/org/rssin/android/FeedsActivity.java b/app/src/main/java/org/rssin/android/FeedsActivity.java old mode 100644 new mode 100755 index d4b6b6e..bc234d4 --- a/app/src/main/java/org/rssin/android/FeedsActivity.java +++ b/app/src/main/java/org/rssin/android/FeedsActivity.java @@ -39,7 +39,7 @@ public class FeedsActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_feeds); + setContentView(R.layout.fragment_feeds); feedsView = (ListView) findViewById(R.id.feeds_list); diff --git a/app/src/main/java/org/rssin/android/FiltersActivity.java b/app/src/main/java/org/rssin/android/FiltersActivity.java index 63887fe..a8e295c 100755 --- a/app/src/main/java/org/rssin/android/FiltersActivity.java +++ b/app/src/main/java/org/rssin/android/FiltersActivity.java @@ -45,7 +45,7 @@ public class FiltersActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.activity_filters); + setContentView(R.layout.fragment_filters); filtersView = (ListView) findViewById(R.id.filters_list); diff --git a/app/src/main/java/org/rssin/android/HomeScreenActivity.java b/app/src/main/java/org/rssin/android/HomeScreenActivity.java index 082d810..bbae149 100755 --- a/app/src/main/java/org/rssin/android/HomeScreenActivity.java +++ b/app/src/main/java/org/rssin/android/HomeScreenActivity.java @@ -59,18 +59,20 @@ public class HomeScreenActivity extends ActionBarActivity NavigationDrawerAllFeedsFragment initialFragment = NavigationDrawerAllFeedsFragment.newInstance(); FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction() - .replace(R.id.container, initialFragment) + .replace(R.id.container, currentFragment = initialFragment) .commit(); mTitle = "All feeds"; } + private Fragment currentFragment; + @Override public void onNavigationDrawerItemSelected(int position) { // update the main content by replacing fragments if(mNavigationDrawerFragment != null) { FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction() - .replace(R.id.container, mNavigationDrawerFragment.getAdapter().getFragment(position)) + .replace(R.id.container, currentFragment = mNavigationDrawerFragment.getAdapter().getFragment(position)) .commit(); mTitle = mNavigationDrawerFragment.getAdapter().getText(position); } @@ -86,10 +88,7 @@ public class HomeScreenActivity extends ActionBarActivity @Override public boolean onCreateOptionsMenu(Menu menu) { if (!mNavigationDrawerFragment.isDrawerOpen()) { - // Only show items in the action bar relevant to this screen - // if the drawer is not showing. Otherwise, let the drawer - // decide what to show in the action bar. - getMenuInflater().inflate(R.menu.home_screen, menu); + getMenuInflater().inflate(mNavigationDrawerFragment.getCurrentItem().getPreferredMenuId(), menu); restoreActionBar(); return true; } @@ -103,10 +102,9 @@ public class HomeScreenActivity extends ActionBarActivity // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); - //noinspection SimplifiableIfStatement - if (id == R.id.action_settings) { - Intent intent = new Intent(this, UnifiedInboxActivity.class); - startActivity(intent); + if(currentFragment.onOptionsItemSelected(item)) + { + return true; } return super.onOptionsItemSelected(item); diff --git a/app/src/main/java/org/rssin/android/NavigationDrawerAdapter.java b/app/src/main/java/org/rssin/android/NavigationDrawerAdapter.java index f7a1265..39a472c 100755 --- a/app/src/main/java/org/rssin/android/NavigationDrawerAdapter.java +++ b/app/src/main/java/org/rssin/android/NavigationDrawerAdapter.java @@ -1,6 +1,7 @@ package org.rssin.android; import android.content.Context; +import android.content.Intent; import android.database.DataSetObserver; import android.support.v4.app.Fragment; import android.view.LayoutInflater; @@ -27,6 +28,11 @@ class NavigationDrawerAdapter implements ListAdapter { private final List menuItems = new ArrayList<>(); public NavigationDrawerAdapter(Context context) throws IOException { + updateMenu(context); + } + + public void updateMenu(Context context) throws IOException { + menuItems.clear(); menuItems.add(new MenuSection("START")); menuItems.add(new MenuUnifiedInbox()); menuItems.add(new MenuSection("FILTERS")); @@ -36,12 +42,21 @@ class NavigationDrawerAdapter implements ListAdapter { menuItems.add(new MenuFilterItem(f)); } + menuItems.add(new FilterListMenuItem()); + menuItems.add(new MenuSection("FEEDS")); for(Feed f : FeedsList.getInstance(context).getFeeds()) { menuItems.add(new MenuFeedItem(f)); } + + menuItems.add(new FeedListMenuItem()); + + for(DataSetObserver observer : observers) + { + observer.onChanged(); + } } @Override @@ -54,14 +69,15 @@ class NavigationDrawerAdapter implements ListAdapter { return getItemViewType(position) != ITEM_VIEW_TYPE_SEPARATOR; } + private List observers = new ArrayList<>(); @Override public void registerDataSetObserver(DataSetObserver observer) { - + observers.add(observer); } @Override public void unregisterDataSetObserver(DataSetObserver observer) { - + observers.remove(observer); } @Override @@ -143,9 +159,9 @@ class NavigationDrawerAdapter implements ListAdapter { this.text = text; } - public void invokeActionSettings() + public void invokeActionSettings(Context context) { - + } public int getItemViewType() @@ -162,6 +178,56 @@ class NavigationDrawerAdapter implements ListAdapter { { return text; } + + public int getPreferredMenuId() { + return R.menu.global; + } + } + + class FilterListMenuItem extends MenuItem + { + public FilterListMenuItem() + { + super("Manage filters..."); + } + + @Override + public int getItemViewType() { + return ITEM_VIEW_TYPE_NORMAL; + } + + @Override + public Fragment getFragment() { + return NavigationDrawerManageFiltersFragment.newInstance(); + } + + @Override + public int getPreferredMenuId() { + return R.menu.menu_filters; + } + } + + class FeedListMenuItem extends MenuItem + { + public FeedListMenuItem() + { + super("Manage feeds..."); + } + + @Override + public int getItemViewType() { + return ITEM_VIEW_TYPE_NORMAL; + } + + @Override + public Fragment getFragment() { + return NavigationDrawerManageFeedsFragment.newInstance(); + } + + @Override + public int getPreferredMenuId() { + return R.menu.menu_feeds; + } } class MenuUnifiedInbox extends MenuItem @@ -171,6 +237,12 @@ class NavigationDrawerAdapter implements ListAdapter { super("All feeds"); } + @Override + public void invokeActionSettings(Context context) { + Intent intent = new Intent(context, SettingsActivity.class); + context.startActivity(intent); + } + @Override public int getItemViewType() { return ITEM_VIEW_TYPE_NORMAL; @@ -191,6 +263,12 @@ class NavigationDrawerAdapter implements ListAdapter { this.feed = feed; } + @Override + public void invokeActionSettings(Context context) { + Intent intent = new Intent(context, FeedsActivity.class); + context.startActivity(intent); + } + @Override public int getItemViewType() { return ITEM_VIEW_TYPE_NORMAL; @@ -211,6 +289,14 @@ class NavigationDrawerAdapter implements ListAdapter { this.filter = filter; } + @Override + public void invokeActionSettings(Context context) { + filter.ensureFeeds(DefaultStorageProvider.getInstance(context)); + Intent intent = new Intent(context.getApplicationContext(), FilterSettingsActivity.class); + intent.putExtra("filter", filter.hashCode()); + context.startActivity(intent); + } + @Override public int getItemViewType() { return ITEM_VIEW_TYPE_NORMAL; diff --git a/app/src/main/java/org/rssin/android/NavigationDrawerFeedFragment.java b/app/src/main/java/org/rssin/android/NavigationDrawerFeedFragment.java index fd85fc7..901d854 100755 --- a/app/src/main/java/org/rssin/android/NavigationDrawerFeedFragment.java +++ b/app/src/main/java/org/rssin/android/NavigationDrawerFeedFragment.java @@ -42,7 +42,7 @@ public class NavigationDrawerFeedFragment extends Fragment { public static NavigationDrawerFeedFragment newInstance(Feed feed) { NavigationDrawerFeedFragment fragment = new NavigationDrawerFeedFragment(); Bundle args = new Bundle(); - args.putInt(ARG_FEED_NAME, feed.hashCode()); + args.putSerializable(ARG_FEED_NAME, feed); fragment.setArguments(args); return fragment; } diff --git a/app/src/main/java/org/rssin/android/NavigationDrawerFragment.java b/app/src/main/java/org/rssin/android/NavigationDrawerFragment.java index 537e0f8..5289de2 100755 --- a/app/src/main/java/org/rssin/android/NavigationDrawerFragment.java +++ b/app/src/main/java/org/rssin/android/NavigationDrawerFragment.java @@ -165,6 +165,12 @@ public class NavigationDrawerFragment extends Fragment { return; } + try { + adapter.updateMenu(drawerView.getContext()); + } catch (IOException e) { + e.printStackTrace(); + } + if (!mUserLearnedDrawer) { // The user manually opened the drawer; store this flag to prevent auto-showing // the navigation drawer automatically in the future. @@ -255,13 +261,17 @@ public class NavigationDrawerFragment extends Fragment { } if (item.getItemId() == R.id.action_settings) { - adapter.getTypedItem(mCurrentSelectedPosition).invokeActionSettings(); + getCurrentItem().invokeActionSettings(mDrawerLayout.getContext()); return true; } return super.onOptionsItemSelected(item); } + public NavigationDrawerAdapter.MenuItem getCurrentItem() { + return adapter.getTypedItem(mCurrentSelectedPosition); + } + /** * Per the navigation drawer design guidelines, updates the action bar to show the global app * 'context', rather than just what's in the current screen. diff --git a/app/src/main/java/org/rssin/android/NavigationDrawerManageFeedsFragment.java b/app/src/main/java/org/rssin/android/NavigationDrawerManageFeedsFragment.java new file mode 100755 index 0000000..9011226 --- /dev/null +++ b/app/src/main/java/org/rssin/android/NavigationDrawerManageFeedsFragment.java @@ -0,0 +1,218 @@ +package org.rssin.android; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.pm.ActivityInfo; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.InputType; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.TextView; + +import com.android.volley.VolleyError; + +import org.rssin.listener.FallibleListener; +import org.rssin.rssin.Feed; +import org.rssin.rssin.FeedLoaderAndSorter; +import org.rssin.rssin.Filter; +import org.rssin.rssin.R; +import org.rssin.rssin.SortedFeedItemContainer; + +import java.io.IOException; +import java.util.List; + +/** + * @author Jos. + */ +public class NavigationDrawerManageFeedsFragment extends Fragment { + /** + * The fragment argument representing the section number for this + * fragment. + */ + private static final String ARG_FILTER_NAME = "filter_id"; + + private Filter filter; + private View rootView; + + /** + * Returns a new instance of this fragment for the given section + * number. + */ + public static NavigationDrawerManageFeedsFragment newInstance() { + NavigationDrawerManageFeedsFragment fragment = new NavigationDrawerManageFeedsFragment(); + return fragment; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) + { + final Bundle args = getArguments(); + rootView = inflater.inflate(R.layout.fragment_feeds, container, false); + final Context context = rootView.getContext(); + + + feedsView = (ListView) rootView.findViewById(R.id.feeds_list); + + try { + feedsList = FeedsList.getInstance(context); + } catch (IOException e) { + Frontend.error(context, R.string.error_load_feeds, e); + } + + feedAdapter = new FeedAdapter(context, R.layout.item_feed, feedsList.getFeeds()); + feedsView.setAdapter(feedAdapter); + + feedsView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { + @Override + public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { + Feed feed = feedAdapter.getItem(position); + DefaultStorageProvider + .getInstance(context) + .removeFeed(feed.getStorageKey()); + feedsList.getFeeds().remove(feed); + feedAdapter.notifyDataSetChanged(); + return true; + } + }); + + return rootView; + } + + + private FeedsList feedsList; + private ListView feedsView; + private FeedAdapter feedAdapter; + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + int id = item.getItemId(); + + if (id == R.id.feeds_action_add) { + openAddDialog(); + return true; + } + + return super.onOptionsItemSelected(item); + } + + /** + * Open dialog to add new feed + * For the moment, we temporarily disable rotating because we can't get it working otherwise. + * @todo make rotating possible + */ + public void openAddDialog() { + //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); + final Context context = rootView.getContext(); + + AlertDialog.Builder alert = new AlertDialog.Builder(context); + + alert.setTitle("Add feed"); + alert.setMessage("URL:"); + + final EditText input = new EditText(context); + input.setFocusable(true); + input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI); + input.setMaxLines(1); + input.requestFocus(); + + AlertDialog dialog = alert + .setView(input) + .setPositiveButton(getResources().getString(R.string.button_apply), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + String value = input.getText().toString(); + try { + Feed f = new Feed(value); + f.store(DefaultStorageProvider.getInstance(context)); + feedsList.getFeeds().add(f); + feedAdapter.notifyDataSetChanged(); + } catch (Exception e) { + Frontend.error(context, R.string.error_save_feeds, e); + } + //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); + } + }) + .setNegativeButton(getResources().getString(R.string.button_cancel), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); + } + }) + .setOnCancelListener(new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialog) { + //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); + } + }) + .create(); + + dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); + dialog.show(); + } + + /** + * Custom ArrayAdapter to display feeds with our own menu item + */ + private static class FeedAdapter extends SortedArrayAdapter { + + Context context; + int layoutResourceId; + + public FeedAdapter(Context context, int resource, List objects) { + super(context, resource, objects); + this.context = context; + layoutResourceId = resource; + items = objects; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View row = convertView; + FeedHolder holder = null; + + if (row == null) { + LayoutInflater inflater = ((Activity) context).getLayoutInflater(); + row = inflater.inflate(layoutResourceId, parent, false); + + holder = new FeedHolder(); + holder.title = (TextView) row.findViewById(R.id.feed_item_title); + holder.url = (TextView) row.findViewById(R.id.feed_item_url); + + row.setTag(holder); + } else { + holder = (FeedHolder) row.getTag(); + } + + Feed feed = items.get(position); + holder.title.setText(feed.getTitle()); + holder.url.setText(feed.getURL().toString()); + + return row; + } + + /** + * TextViews holder + */ + private static class FeedHolder { + TextView title; + TextView url; + } + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + } +} diff --git a/app/src/main/java/org/rssin/android/NavigationDrawerManageFiltersFragment.java b/app/src/main/java/org/rssin/android/NavigationDrawerManageFiltersFragment.java new file mode 100755 index 0000000..d82aaaa --- /dev/null +++ b/app/src/main/java/org/rssin/android/NavigationDrawerManageFiltersFragment.java @@ -0,0 +1,220 @@ +package org.rssin.android; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.view.WindowManager; +import android.widget.AdapterView; +import android.widget.EditText; +import android.widget.ListView; +import android.widget.TextView; + +import com.android.volley.VolleyError; + +import org.rssin.listener.FallibleListener; +import org.rssin.rssin.Filter; +import org.rssin.rssin.R; +import org.rssin.rssin.SortedFeedItemContainer; +import org.rssin.rssin.UnifiedFilterLoader; + +import java.io.IOException; +import java.util.List; + +/** + * @author Jos. + */ + +public class NavigationDrawerManageFiltersFragment extends Fragment { + + private View rootView; + /** + * Returns a new instance of this fragment for the given section + * number. + */ + public static NavigationDrawerManageFiltersFragment newInstance() { + NavigationDrawerManageFiltersFragment fragment = new NavigationDrawerManageFiltersFragment(); + return fragment; + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + rootView = inflater.inflate(R.layout.fragment_filters, container, false); + final Context context = rootView.getContext(); + + filtersView = (ListView) rootView.findViewById(R.id.filters_list); + + try { + filtersList = FiltersList.getInstance(context); + } catch (IOException ex) { + Frontend.error(context, R.string.error_load_filters, ex); + } + + filterAdapter = new FilterAdapter(context, R.layout.item_filter, filtersList.getFilters()); + filtersView.setAdapter(filterAdapter); + + setupListeners(); + + return rootView; + } + + @Override + public void onAttach(Activity activity) { + super.onAttach(activity); + } + + private FiltersList filtersList; + private ListView filtersView; + private FilterAdapter filterAdapter; + + private AdapterView.OnItemClickListener onFilterClickListener; + private AdapterView.OnItemLongClickListener onFilterLongClickListener; + + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + int id = item.getItemId(); + + if (id == R.id.filters_action_add) { + openAddDialog(); + return true; + } + + return super.onOptionsItemSelected(item); + } + + /** + * Setup listeners for the list items + */ + private void setupListeners() { + onFilterClickListener = new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + Filter item = (Filter) parent.getItemAtPosition(position); + openFilterSettings(item); + } + }; + + filtersView.setOnItemClickListener(onFilterClickListener); + } + + /** + * Open dialog to create new filter + * For the moment, we temporarily disable rotating because we can't get it working otherwise. + * @todo make rotating possible + */ + public void openAddDialog() { + //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); + + AlertDialog.Builder alert = new AlertDialog.Builder(rootView.getContext()); + + alert.setTitle("Add filter"); + alert.setMessage("Title:"); + + final EditText input = new EditText(rootView.getContext()); + input.setFocusable(true); + input.requestFocus(); + + AlertDialog dialog = alert + .setView(input) + .setPositiveButton(getResources().getString(R.string.button_apply), new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int whichButton) { + String value = input.getText().toString(); + try { + Filter f = new Filter(value); + filtersList.getFilters().add(f); + filtersList.save(); + filterAdapter.notifyDataSetChanged(); + openFilterSettings(f); + } catch (Exception e) { + Frontend.error(rootView.getContext(), R.string.error_save_filters, e); + } + //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); + } + }) + .setNegativeButton(getResources().getString(R.string.button_cancel), new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); + } + }) + .setOnCancelListener(new DialogInterface.OnCancelListener() { + @Override + public void onCancel(DialogInterface dialog) { + //setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR); + } + }) + .create(); + + dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); + dialog.show(); + } + + public void openFilterSettings(Filter f) { + f.ensureFeeds(DefaultStorageProvider.getInstance(rootView.getContext())); + Intent intent = new Intent(rootView.getContext().getApplicationContext(), FilterSettingsActivity.class); + intent.putExtra("filter", f.hashCode()); + startActivity(intent); + } + + /** + * Custom ArrayAdapter to display filters with our own menu item + */ + private static class FilterAdapter extends SortedArrayAdapter { + + Context context; + int layoutResourceId; + + public FilterAdapter(Context context, int resource, List objects) { + super(context, resource, objects); + this.context = context; + layoutResourceId = resource; + items = objects; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View row = convertView; + FilterHolder holder = null; + + if (row == null) { + LayoutInflater inflater = ((Activity) context).getLayoutInflater(); + row = inflater.inflate(layoutResourceId, parent, false); + + holder = new FilterHolder(); + holder.title = (TextView) row.findViewById(R.id.filter_item_title); + holder.feeds = (TextView) row.findViewById(R.id.filter_item_feeds); + + row.setTag(holder); + } else { + holder = (FilterHolder) row.getTag(); + } + + Filter filter = items.get(position); + holder.title.setText(filter.getTitle()); + holder.feeds.setText(filter.getFeeds().size() + " " + context.getString(R.string.feeds)); + + return row; + } + + /** + * TextViews holder + */ + private static class FilterHolder { + TextView title; + TextView feeds; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/org/rssin/android/UnifiedInboxActivity.java b/app/src/main/java/org/rssin/android/UnifiedInboxActivity.java deleted file mode 100755 index 5a11621..0000000 --- a/app/src/main/java/org/rssin/android/UnifiedInboxActivity.java +++ /dev/null @@ -1,97 +0,0 @@ -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.rssin.SortedFeedItemContainer; -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 - * @author Camil Staps - */ -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); - - for(Filter filter : filtersList.getFilters()) { - filter.ensureFeedSorter(InternalStorageProvider.getInstance(this)); - filter.ensureFeeds(DefaultStorageProvider.getInstance(this)); - } - - /** - * @todo Load feeds in separate thread so that the UI is immediately available - * - * @todo Now, feed items are only returned after *all* feeds have been loaded. With many - * filters that may take a while, so it would be preferable to return intermediate - * results. We could do this for example with {@link org.rssin.listener.RealtimeListener} - */ - 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); - } - }); - } catch (IOException e) { - Frontend.error(this, R.string.error_load_filters, e); - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.menu_unified_inbox, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); - - if (id == R.id.action_settings) { - Intent intent = new Intent(this, SettingsActivity.class); - startActivity(intent); - } else if (id == R.id.action_filters) { - Intent intent = new Intent(this, FiltersActivity.class); - startActivity(intent); - } else if (id == R.id.action_feeds) { - Intent intent = new Intent(this, FeedsActivity.class); - startActivity(intent); - } - - return super.onOptionsItemSelected(item); - } -} -- cgit v1.2.3