Android Open Source - holoreader R S S Content Provider






From Project

Back to project page holoreader.

License

The source code is released under:

GNU General Public License

If you think the Android project holoreader listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package de.hdodenhof.holoreader.provider;
/*from   w  w w.  j av  a  2  s .c  om*/
import android.content.ContentProvider;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.net.Uri;
import android.text.TextUtils;

import de.hdodenhof.holoreader.provider.SQLiteHelper.ArticleDAO;
import de.hdodenhof.holoreader.provider.SQLiteHelper.FeedDAO;

public class RSSContentProvider extends ContentProvider {

    private SQLiteHelper mSQLiteHelper;

    private static final String AUTHORITY = "de.hdodenhof.holoreader.RSSProvider";

    public static final int FEEDS = 110;
    public static final int FEED_ID = 120;
    public static final int ARTICLES = 210;
    public static final int ARTICLE_ID = 220;

    private static final String BASE_PATH_FEEDS = "feeds";
    private static final String BASE_PATH_ARTICLES = "articles";

    public static final Uri URI_FEEDS = Uri.parse("content://" + AUTHORITY + "/" + BASE_PATH_FEEDS);
    public static final Uri URI_ARTICLES = Uri.parse("content://" + AUTHORITY + "/" + BASE_PATH_ARTICLES);

    public static final String TYPE_FEEDS = ContentResolver.CURSOR_DIR_BASE_TYPE + "/feeds";
    public static final String ITEM_TYPE_FEEDS = ContentResolver.CURSOR_ITEM_BASE_TYPE + "/feed";
    public static final String TYPE_ARTICLES = ContentResolver.CURSOR_DIR_BASE_TYPE + "/articles";
    public static final String ITEM_TYPE_ARTICLES = ContentResolver.CURSOR_ITEM_BASE_TYPE + "/article";

    private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);

    static {
        sURIMatcher.addURI(AUTHORITY, BASE_PATH_FEEDS, FEEDS);
        sURIMatcher.addURI(AUTHORITY, BASE_PATH_FEEDS + "/#", FEED_ID);
        sURIMatcher.addURI(AUTHORITY, BASE_PATH_ARTICLES, ARTICLES);
        sURIMatcher.addURI(AUTHORITY, BASE_PATH_ARTICLES + "/#", ARTICLE_ID);
    }

    @Override
    public boolean onCreate() {
        mSQLiteHelper = new SQLiteHelper(getContext());
        return true;
    }

    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {

        SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();

        int uriType = sURIMatcher.match(uri);
        switch (uriType) {
        case FEEDS:
            queryBuilder.setTables(FeedDAO.VIEW);
            break;
        case FEED_ID:
            queryBuilder.setTables(FeedDAO.VIEW);
            queryBuilder.appendWhere(FeedDAO._ID + "=" + uri.getLastPathSegment());
            break;
        case ARTICLES:
            queryBuilder.setTables(ArticleDAO.VIEW);
            break;
        case ARTICLE_ID:
            queryBuilder.setTables(ArticleDAO.VIEW);
            queryBuilder.appendWhere(ArticleDAO._ID + "=" + uri.getLastPathSegment());
            break;
        default:
            throw new IllegalArgumentException("Unknown URI: " + uri);
        }

        SQLiteDatabase database = mSQLiteHelper.getWritableDatabase();
        Cursor cursor = queryBuilder.query(database, projection, selection, selectionArgs, null, null, sortOrder);

        cursor.setNotificationUri(getContext().getContentResolver(), uri);

        return cursor;

    }

    @Override
    public String getType(Uri uri) {
        return null;
    }

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        int uriType = sURIMatcher.match(uri);
        SQLiteDatabase database = mSQLiteHelper.getWritableDatabase();
        long mID = 0;
        Uri returnUri;

        switch (uriType) {
        case FEEDS:
            mID = database.insert(FeedDAO.TABLE, null, values);
            returnUri = Uri.parse(BASE_PATH_FEEDS + "/" + mID);
            break;
        case ARTICLES:
            mID = database.insert(ArticleDAO.TABLE, null, values);
            returnUri = Uri.parse(BASE_PATH_ARTICLES + "/" + mID);
            break;
        default:
            throw new IllegalArgumentException("Unknown URI: " + uri);
        }

        getContext().getContentResolver().notifyChange(uri, null);
        if (uriType == ARTICLES) {
            getContext().getContentResolver().notifyChange(URI_FEEDS, null);
        }

        return returnUri;
    }

    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        int uriType = sURIMatcher.match(uri);
        SQLiteDatabase database = mSQLiteHelper.getWritableDatabase();
        int rowsDeleted = 0;
        String id;

        switch (uriType) {
        case FEEDS:
            rowsDeleted = database.delete(FeedDAO.TABLE, selection, selectionArgs);
            break;
        case FEED_ID:
            id = uri.getLastPathSegment();
            if (TextUtils.isEmpty(selection)) {
                rowsDeleted = database.delete(FeedDAO.TABLE, FeedDAO._ID + "=" + id, null);
            } else {
                rowsDeleted = database.delete(FeedDAO.TABLE, FeedDAO._ID + "=" + id + " and " + selection, selectionArgs);
            }
            break;
        case ARTICLES:
            rowsDeleted = database.delete(ArticleDAO.TABLE, selection, selectionArgs);
            getContext().getContentResolver().notifyChange(URI_FEEDS, null);
            break;
        case ARTICLE_ID:
            id = uri.getLastPathSegment();
            if (TextUtils.isEmpty(selection)) {
                rowsDeleted = database.delete(ArticleDAO.TABLE, ArticleDAO._ID + "=" + id, null);
            } else {
                rowsDeleted = database.delete(ArticleDAO.TABLE, ArticleDAO._ID + "=" + id + " and " + selection, selectionArgs);
            }
            getContext().getContentResolver().notifyChange(URI_ARTICLES, null);
            getContext().getContentResolver().notifyChange(URI_FEEDS, null);
            break;
        default:
            throw new IllegalArgumentException("Unknown URI: " + uri);
        }

        getContext().getContentResolver().notifyChange(uri, null);
        return rowsDeleted;
    }

    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        int uriype = sURIMatcher.match(uri);
        SQLiteDatabase database = mSQLiteHelper.getWritableDatabase();
        int rowsUpdated = 0;
        String id;

        switch (uriype) {
        case FEEDS:
            rowsUpdated = database.update(FeedDAO.TABLE, values, selection, selectionArgs);
            break;
        case FEED_ID:
            id = uri.getLastPathSegment();
            if (TextUtils.isEmpty(selection)) {
                rowsUpdated = database.update(FeedDAO.TABLE, values, FeedDAO._ID + "=" + id, null);
            } else {
                rowsUpdated = database.update(FeedDAO.TABLE, values, FeedDAO._ID + "=" + id + " and " + selection, selectionArgs);
            }
            getContext().getContentResolver().notifyChange(URI_FEEDS, null);
            break;
        case ARTICLES:
            rowsUpdated = database.update(ArticleDAO.TABLE, values, selection, selectionArgs);
            if (values.containsKey(ArticleDAO.READ)) {
                getContext().getContentResolver().notifyChange(URI_FEEDS, null);
            }
            break;
        case ARTICLE_ID:
            id = uri.getLastPathSegment();
            if (TextUtils.isEmpty(selection)) {
                rowsUpdated = database.update(ArticleDAO.TABLE, values, ArticleDAO._ID + "=" + id, null);
            } else {
                rowsUpdated = database.update(ArticleDAO.TABLE, values, ArticleDAO._ID + "=" + id + " and " + selection, selectionArgs);
            }
            getContext().getContentResolver().notifyChange(URI_ARTICLES, null);
            if (values.containsKey(ArticleDAO.READ)) {
                getContext().getContentResolver().notifyChange(URI_FEEDS, null);
            }
            break;
        default:
            throw new IllegalArgumentException("Unknown URI: " + uri);
        }

        getContext().getContentResolver().notifyChange(uri, null);
        return rowsUpdated;
    }

}




Java Source Code List

de.hdodenhof.holoreader.Config.java
de.hdodenhof.holoreader.activities.DisplayArticleActivity.java
de.hdodenhof.holoreader.activities.DisplayFeedActivity.java
de.hdodenhof.holoreader.activities.EditFeedsActivity.java
de.hdodenhof.holoreader.activities.HoloReaderActivity.java
de.hdodenhof.holoreader.activities.HomeActivity.java
de.hdodenhof.holoreader.fragments.ArticleFragment.java
de.hdodenhof.holoreader.fragments.ArticleListFragment.java
de.hdodenhof.holoreader.fragments.CustomListFragment.java
de.hdodenhof.holoreader.fragments.DynamicDialogFragment.java
de.hdodenhof.holoreader.fragments.EditFeedsFragment.java
de.hdodenhof.holoreader.fragments.FeedListFragment.java
de.hdodenhof.holoreader.gcm.GCMIntentService.java
de.hdodenhof.holoreader.gcm.GCMReceiver.java
de.hdodenhof.holoreader.gcm.GCMServerUtilities.java
de.hdodenhof.holoreader.gcm.VOFeed.java
de.hdodenhof.holoreader.listadapters.EditFeedAdapter.java
de.hdodenhof.holoreader.listadapters.RSSAdapter.java
de.hdodenhof.holoreader.listadapters.RSSArticleAdapter.java
de.hdodenhof.holoreader.listadapters.RSSFeedAdapter.java
de.hdodenhof.holoreader.misc.ArticleViewPager.java
de.hdodenhof.holoreader.misc.ChangelogDialog.java
de.hdodenhof.holoreader.misc.CheckableLinearLayout.java
de.hdodenhof.holoreader.misc.CustomScrollView.java
de.hdodenhof.holoreader.misc.DiskLruImageCache.java
de.hdodenhof.holoreader.misc.FragmentCallback.java
de.hdodenhof.holoreader.misc.Helpers.java
de.hdodenhof.holoreader.misc.MarkReadRunnable.java
de.hdodenhof.holoreader.misc.OnArticleChangedListener.java
de.hdodenhof.holoreader.provider.RSSContentProvider.java
de.hdodenhof.holoreader.provider.SQLiteHelper.java
de.hdodenhof.holoreader.services.RefreshFeedListener.java
de.hdodenhof.holoreader.services.RefreshFeedService.java
de.hdodenhof.holoreader.tasks.AddFeedTask.java