// Path: src/com/crossbowffs/quotelock/api/QuoteData.java
// public class QuoteData {
//     private final String mQuoteText;
//     private final String mQuoteSource;
// 
//     /**
//      * Creates a new quote data object. The parameters may be {@code null},
//      * in which case they are replaced with an empty string.
//      *
//      * @param quoteText The first line (text) of the quote.
//      * @param quoteSource The second line (author) of the quote.
//      */
//     public QuoteData(String quoteText, String quoteSource) {
//         mQuoteText = quoteText;
//         mQuoteSource = quoteSource;
//     }
// 
//     /**
//      * Gets the first line of the quote. Will not be {@code null}.
//      */
//     public String getQuoteText() {
//         String text = mQuoteText;
//         if (text == null) {
//             text = "";
//         }
//         return text;
//     }
// 
//     /**
//      * Gets the second line of the quote. Will not be {@code null}.
//      */
//     public String getQuoteSource() {
//         String source = mQuoteSource;
//         if (source == null) {
//             source = "";
//         }
//         return source;
//     }
// }
// 
// Path: src/com/crossbowffs/quotelock/modules/custom/provider/CustomQuoteContract.java
// public class CustomQuoteContract {
//     public static final String AUTHORITY = BuildConfig.APPLICATION_ID + ".modules.custom.provider";
//     public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);
// 
//     public static class Quotes implements BaseColumns {
//         public static final String TABLE = "quotes";
//         public static final Uri CONTENT_URI = Uri.withAppendedPath(CustomQuoteContract.CONTENT_URI, TABLE);
//         public static final String CONTENT_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE + "/vnd.crossbowffs.quote";
//         public static final String CONTENT_ITEM_TYPE = ContentResolver.CURSOR_ITEM_BASE_TYPE + "/vnd.crossbowffs.quote";
// 
//         public static final String TEXT = "text";
//         public static final String SOURCE = "source";
//         public static final String[] ALL = {
//             _ID,
//             TEXT,
//             SOURCE
//         };
//     }
// }


import android.app.AlertDialog;
import android.app.ListActivity;
import android.app.LoaderManager;
import android.content.*;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.*;
import android.widget.*;
import com.crossbowffs.quotelock.R;
import com.crossbowffs.quotelock.api.QuoteData;
import com.crossbowffs.quotelock.modules.custom.provider.CustomQuoteContract;
        switch (item.getItemId()) {
        case R.id.edit_quote:
            showEditQuoteDialog(rowId);
            return true;
        case R.id.delete_quote:
            deleteQuote(rowId);
            return true;
        default:
            return super.onContextItemSelected(item);
        }
    }

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        return new CursorLoader(this,
            CustomQuoteContract.Quotes.CONTENT_URI,
            CustomQuoteContract.Quotes.ALL,
            null, null, null);
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        mAdapter.changeCursor(data);
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
        mAdapter.changeCursor(null);
    }

// Path: src/com/crossbowffs/quotelock/api/QuoteData.java
// public class QuoteData {
//     private final String mQuoteText;
//     private final String mQuoteSource;
// 
//     /**
//      * Creates a new quote data object. The parameters may be {@code null},
//      * in which case they are replaced with an empty string.
//      *
//      * @param quoteText The first line (text) of the quote.
//      * @param quoteSource The second line (author) of the quote.
//      */
//     public QuoteData(String quoteText, String quoteSource) {
//         mQuoteText = quoteText;
//         mQuoteSource = quoteSource;
//     }
// 
//     /**
//      * Gets the first line of the quote. Will not be {@code null}.
//      */
//     public String getQuoteText() {
//         String text = mQuoteText;
//         if (text == null) {
//             text = "";
//         }
//         return text;
//     }
// 
//     /**
//      * Gets the second line of the quote. Will not be {@code null}.
//      */
//     public String getQuoteSource() {
//         String source = mQuoteSource;
//         if (source == null) {
//             source = "";
//         }
//         return source;
//     }
// }
// 
// Path: src/com/crossbowffs/quotelock/modules/custom/provider/CustomQuoteContract.java
// public class CustomQuoteContract {
//     public static final String AUTHORITY = BuildConfig.APPLICATION_ID + ".modules.custom.provider";
//     public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY);
// 
//     public static class Quotes implements BaseColumns {
//         public static final String TABLE = "quotes";
//         public static final Uri CONTENT_URI = Uri.withAppendedPath(CustomQuoteContract.CONTENT_URI, TABLE);
//         public static final String CONTENT_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE + "/vnd.crossbowffs.quote";
//         public static final String CONTENT_ITEM_TYPE = ContentResolver.CURSOR_ITEM_BASE_TYPE + "/vnd.crossbowffs.quote";
// 
//         public static final String TEXT = "text";
//         public static final String SOURCE = "source";
//         public static final String[] ALL = {
//             _ID,
//             TEXT,
//             SOURCE
//         };
//     }
// }


// Path: src/com/crossbowffs/quotelock/modules/custom/app/CustomQuoteConfigActivity.java
import android.app.AlertDialog;
import android.app.ListActivity;
import android.app.LoaderManager;
import android.content.*;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.*;
import android.widget.*;
import com.crossbowffs.quotelock.R;
import com.crossbowffs.quotelock.api.QuoteData;
import com.crossbowffs.quotelock.modules.custom.provider.CustomQuoteContract;

        switch (item.getItemId()) {
        case R.id.edit_quote:
            showEditQuoteDialog(rowId);
            return true;
        case R.id.delete_quote:
            deleteQuote(rowId);
            return true;
        default:
            return super.onContextItemSelected(item);
        }
    }

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {
        return new CursorLoader(this,
            CustomQuoteContract.Quotes.CONTENT_URI,
            CustomQuoteContract.Quotes.ALL,
            null, null, null);
    }

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        mAdapter.changeCursor(data);
    }

    @Override
    public void onLoaderReset(Loader<Cursor> loader) {
        mAdapter.changeCursor(null);
    }

    private QuoteData queryQuote(long rowId) {