/* * 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.model; import org.ttrssreader.controllers.DBHelper; import android.content.ContentProvider; import android.content.ContentValues; import android.content.UriMatcher; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; public class ListContentProvider extends ContentProvider { @SuppressWarnings("unused") private static final String TAG = ListContentProvider.class.getSimpleName(); private static final String AUTHORITY = "org.ttrssreader"; // Uri path segments private static final int CATS = 1; private static final int FEEDS = 2; private static final int HEADLINES = 3; // Params public static final String PARAM_CAT_ID = "categoryId"; public static final String PARAM_FEED_ID = "feedId"; public static final String PARAM_SELECT_FOR_CAT = "selectArticlesForCategory"; // Public information: private static final String BASE_PATH_CATEGORIES = "categories"; private static final String BASE_PATH_FEEDS = "feeds"; private static final String BASE_PATH_HEADLINES = "headlines"; public static final Uri CONTENT_URI_CAT = Uri.parse("content://" + AUTHORITY + "/" + BASE_PATH_CATEGORIES); public static final Uri CONTENT_URI_FEED = Uri.parse("content://" + AUTHORITY + "/" + BASE_PATH_FEEDS); public static final Uri CONTENT_URI_HEAD = Uri.parse("content://" + AUTHORITY + "/" + BASE_PATH_HEADLINES); private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH); static { // Request all items: sURIMatcher.addURI(AUTHORITY, BASE_PATH_CATEGORIES, CATS); sURIMatcher.addURI(AUTHORITY, BASE_PATH_FEEDS, FEEDS); sURIMatcher.addURI(AUTHORITY, BASE_PATH_HEADLINES, HEADLINES); } @Override public boolean onCreate() { return false; } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { // Parse parameters: int categoryId = -1; int feedId = -1; boolean selectArticlesForCategory = false; String paramCat = uri.getQueryParameter(PARAM_CAT_ID); if (paramCat != null) categoryId = Integer.parseInt(paramCat); String paramFeedId = uri.getQueryParameter(PARAM_FEED_ID); if (paramFeedId != null) feedId = Integer.parseInt(paramFeedId); String paramSelectArticles = uri.getQueryParameter(PARAM_SELECT_FOR_CAT); if (paramSelectArticles != null) selectArticlesForCategory = ("1".equals(paramSelectArticles)); // Retrieve CursorHelper: MainCursorHelper cursorHelper; int uriType = sURIMatcher.match(uri); switch (uriType) { case CATS: cursorHelper = new CategoryCursorHelper(); break; case FEEDS: cursorHelper = new FeedCursorHelper(categoryId); break; case HEADLINES: cursorHelper = new FeedHeadlineCursorHelper(feedId, categoryId, selectArticlesForCategory); break; default: throw new IllegalArgumentException("Unknown URI: " + uri); } Cursor cursor = cursorHelper.makeQuery(DBHelper.getInstance().getOpenHelper().getReadableDatabase()); if (getContext() != null) cursor.setNotificationUri(getContext().getContentResolver(), uri); return cursor; } @Override public String getType(Uri uri) { return null; } @Override final public Uri insert(Uri uri, ContentValues values) { throw new NoSuchMethodError(); // Not implemented! } @Override final public int delete(Uri uri, String selection, String[] selectionArgs) { throw new NoSuchMethodError(); // Not implemented! } @Override final public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { throw new NoSuchMethodError(); // Not implemented! } }