Merge "Fix build break; support folder query"

This commit is contained in:
Marc Blank 2012-02-21 17:33:16 -08:00 committed by Android (Google) Code Review
commit fdf84f35bc

View File

@ -201,6 +201,7 @@ public class EmailProvider extends ContentProvider {
private static final int UI_SENDDRAFT = UI_BASE + 8;
private static final int UI_FOLDER_REFRESH = UI_BASE + 9;
private static final int UI_FOLDER_STATUS = UI_BASE + 10;
private static final int UI_FOLDER = UI_BASE + 11;
// MUST ALWAYS EQUAL THE LAST OF THE PREVIOUS BASE CONSTANTS
private static final int LAST_EMAIL_PROVIDER_DB_BASE = UI_BASE;
@ -404,6 +405,7 @@ public class EmailProvider extends ContentProvider {
matcher.addURI(EmailContent.AUTHORITY, "uisenddraft/#", UI_SENDDRAFT);
matcher.addURI(EmailContent.AUTHORITY, "uirefresh/#", UI_FOLDER_REFRESH);
matcher.addURI(EmailContent.AUTHORITY, "uistatus/#", UI_FOLDER_STATUS);
matcher.addURI(EmailContent.AUTHORITY, "uifolder/#", UI_FOLDER);
}
/**
@ -901,6 +903,9 @@ public class EmailProvider extends ContentProvider {
private static final Uri UIPROVIDER_MESSAGE_NOTIFIER =
Uri.parse("content://" + UIProvider.AUTHORITY + "/uimessages");
private static final Uri UIPROVIDER_MAILBOX_NOTIFIER =
Uri.parse("content://" + UIProvider.AUTHORITY + "/uifolder");
@Override
public Uri insert(Uri uri, ContentValues values) {
int match = findMatch(uri, "insert");
@ -1121,6 +1126,7 @@ public class EmailProvider extends ContentProvider {
case UI_FOLDERS:
case UI_MESSAGES:
case UI_MESSAGE:
case UI_FOLDER:
// For now, we don't allow selection criteria within these queries
if (selection != null || selectionArgs != null) {
throw new IllegalArgumentException("UI queries can't have selection/args");
@ -1871,7 +1877,6 @@ outer:
.add(UIProvider.FolderColumns.UNREAD_COUNT, MailboxColumns.UNREAD_COUNT)
.add(UIProvider.FolderColumns.TOTAL_COUNT, MailboxColumns.MESSAGE_COUNT)
.add(UIProvider.FolderColumns.REFRESH_URI, uriWithId("uirefresh"))
.add(UIProvider.FolderColumns.STATUS_URI, uriWithId("uistatus"))
.build();
/**
@ -1983,6 +1988,18 @@ outer:
return sb.toString();
}
/**
* Generate a "single mailbox" SQLite query, given a projection from UnifiedEmail
*
* @param uiProjection as passed from UnifiedEmail
* @return the SQLite query to be executed on the EmailProvider database
*/
private String genQueryMailbox(String[] uiProjection) {
StringBuilder sb = genSelect(sFolderListMap, uiProjection);
sb.append(" FROM " + Mailbox.TABLE_NAME + " WHERE " + MailboxColumns.ID + "=?");
return sb.toString();
}
/**
* Generate the "subfolder list" SQLite query, given a projection from UnifiedEmail
*
@ -2026,6 +2043,7 @@ outer:
*/
private Cursor uiQuery(int match, Uri uri, String[] uiProjection) {
Context context = getContext();
ContentResolver resolver = context.getContentResolver();
SQLiteDatabase db = getDatabase(context);
// Should we ever return null, or throw an exception??
Cursor c = null;
@ -2049,11 +2067,17 @@ outer:
case UI_MESSAGE:
c = db.rawQuery(genQueryViewMessage(uiProjection), new String[] {id});
break;
case UI_FOLDER:
c = db.rawQuery(genQueryMailbox(uiProjection), new String[] {id});
// We'll notify on changes to the particular mailbox via the EmailProvider Uri
c.setNotificationUri(resolver,
ContentUris.withAppendedId(Mailbox.CONTENT_URI, Long.parseLong(id)));
return c;
}
if (c != null) {
// Notify UIProvider on changes
// Make this more specific to actual query later on...
c.setNotificationUri(context.getContentResolver(), UIPROVIDER_MESSAGE_NOTIFIER);
c.setNotificationUri(resolver, UIPROVIDER_MESSAGE_NOTIFIER);
}
return c;
}