/* * Copyright (c) 2015, Nils Braden * * This file is part of ttrss-reader-fork. This program is free software; you * can redistribute it and/or modify it under the terms of the GNU * General Public License as published by the Free Software Foundation; * either version 3 of the License, or (at your option) any later * version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. You should have received a * copy of the GNU General Public License along with this program; If * not, see http://www.gnu.org/licenses/. */ package org.ttrssreader.gui.fragments; import org.ttrssreader.R; import org.ttrssreader.controllers.Controller; import org.ttrssreader.controllers.DBHelper; import org.ttrssreader.gui.dialogs.YesNoUpdaterDialog; import org.ttrssreader.gui.interfaces.IItemSelectedListener.TYPE; import org.ttrssreader.model.FeedAdapter; import org.ttrssreader.model.ListContentProvider; import org.ttrssreader.model.pojos.Category; import org.ttrssreader.model.updaters.ReadStateUpdater; import org.ttrssreader.model.updaters.UnsubscribeUpdater; import org.ttrssreader.model.updaters.Updater; import org.ttrssreader.utils.AsyncTask; import android.app.Activity; import android.content.CursorLoader; import android.content.Loader; import android.database.Cursor; import android.net.Uri; import android.net.Uri.Builder; import android.os.Bundle; import android.view.ContextMenu; import android.view.Menu; import android.view.View; import android.widget.AdapterView.AdapterContextMenuInfo; import java.util.List; public class FeedListFragment extends MainListFragment { @SuppressWarnings("unused") private static final String TAG = FeedListFragment.class.getSimpleName(); private static final TYPE THIS_TYPE = TYPE.FEED; public static final String FRAGMENT = "FEED_FRAGMENT"; private static final String FEED_CAT_ID = "FEED_CAT_ID"; private static final int MARK_GROUP = 300; private static final int MARK_READ = MARK_GROUP + 1; private static final int UNSUBSCRIBE = MARK_GROUP + 2; // Extras private int categoryId; private Uri feedUri; public static FeedListFragment newInstance(int id) { // Create a new fragment instance FeedListFragment detail = new FeedListFragment(); detail.categoryId = id; detail.setRetainInstance(true); return detail; } @Override public void onCreate(Bundle instance) { Controller.getInstance().lastOpenedFeeds.clear(); if (instance != null) categoryId = instance.getInt(FEED_CAT_ID); setHasOptionsMenu(true); super.onCreate(instance); } @Override public void onActivityCreated(Bundle instance) { adapter = new FeedAdapter(getActivity()); getLoaderManager().restartLoader(TYPE_FEED_ID, null, this); super.onActivityCreated(instance); } @Override public void onSaveInstanceState(Bundle outState) { outState.putInt(FEED_CAT_ID, categoryId); super.onSaveInstanceState(outState); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.add(MARK_GROUP, MARK_READ, Menu.NONE, R.string.Commons_MarkRead); menu.add(MARK_GROUP, UNSUBSCRIBE, Menu.NONE, R.string.Subscribe_unsubscribe); } @Override public boolean onContextItemSelected(android.view.MenuItem item) { AdapterContextMenuInfo cmi = (AdapterContextMenuInfo) item.getMenuInfo(); if (cmi == null) return false; switch (item.getItemId()) { case MARK_READ: new Updater(getActivity(), new ReadStateUpdater(adapter.getId(cmi.position), 42)) .executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); return true; case UNSUBSCRIBE: YesNoUpdaterDialog dialog = YesNoUpdaterDialog .getInstance(new UnsubscribeUpdater(adapter.getId(cmi.position)), R.string.Dialog_unsubscribeTitle, R.string.Dialog_unsubscribeText); dialog.show(getFragmentManager(), YesNoUpdaterDialog.DIALOG); return true; } return false; } @Override public TYPE getType() { return THIS_TYPE; } public int getCategoryId() { return categoryId; } public List<Integer> getFeedIds() { return adapter.getIds(); } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { if (id == TYPE_FEED_ID) { Builder builder = ListContentProvider.CONTENT_URI_FEED.buildUpon(); builder.appendQueryParameter(ListContentProvider.PARAM_CAT_ID, categoryId + ""); feedUri = builder.build(); return new CursorLoader(getActivity(), feedUri, null, null, null, null); } return null; } @Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { if (loader.getId() == TYPE_FEED_ID) adapter.changeCursor(data); super.onLoadFinished(loader, data); } @Override public void onLoaderReset(Loader<Cursor> loader) { if (loader.getId() == TYPE_FEED_ID) adapter.changeCursor(null); } @Override protected void fetchOtherData() { Category category = DBHelper.getInstance().getCategory(categoryId); if (category != null) title = category.title; unreadCount = DBHelper.getInstance().getUnreadCount(categoryId, true); } @Override public void doRefresh() { Activity activity = getActivity(); if (activity != null && feedUri != null) activity.getContentResolver().notifyChange(feedUri, null); super.doRefresh(); } @Override public boolean isEmptyPlaceholder() { return categoryId == Integer.MIN_VALUE; } }