1bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook/*
2bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Copyright (C) 2011 The Android Open Source Project
3bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
4bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Licensed under the Apache License, Version 2.0 (the "License");
5bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * you may not use this file except in compliance with the License.
6bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * You may obtain a copy of the License at
7bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
8bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *      http://www.apache.org/licenses/LICENSE-2.0
9bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
10bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Unless required by applicable law or agreed to in writing, software
11bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * distributed under the License is distributed on an "AS IS" BASIS,
12bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * See the License for the specific language governing permissions and
14bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * limitations under the License.
15bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */
16bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
17bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookpackage com.android.email.widget;
18bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
19bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport com.android.email.R;
20bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport com.android.email.data.ThrottlingCursorLoader;
21bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport com.android.emailcommon.provider.Account;
22bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport com.android.emailcommon.provider.EmailContent;
23bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport com.android.emailcommon.provider.EmailContent.Message;
24bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport com.android.emailcommon.provider.EmailContent.MessageColumns;
25bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport com.android.emailcommon.provider.Mailbox;
26bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
27bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport android.content.Context;
28bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport android.content.res.Resources;
29bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport android.database.Cursor;
30bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookimport android.database.CursorWrapper;
31bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
32bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook/**
33bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * Loader for {@link EmailWidget}.
34bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *
35bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * This loader not only loads the messages, but also:
36bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * - The number of accounts.
37bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook * - The message count shown in the widget header.
38bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *   It's currently just the same as the message count, but this will be updated to the unread
39bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook *   counts for inboxes.
40bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook */
41bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrookclass EmailWidgetLoader extends ThrottlingCursorLoader {
42bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    private static final String SORT_TIMESTAMP_DESCENDING = MessageColumns.TIMESTAMP + " DESC";
43bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
44bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    // The projection to be used by the WidgetLoader
45bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    private static final String[] WIDGET_PROJECTION = new String[] {
46bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            EmailContent.RECORD_ID, MessageColumns.DISPLAY_NAME, MessageColumns.TIMESTAMP,
47bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            MessageColumns.SUBJECT, MessageColumns.FLAG_READ, MessageColumns.FLAG_FAVORITE,
48bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            MessageColumns.FLAG_ATTACHMENT, MessageColumns.MAILBOX_KEY, MessageColumns.SNIPPET,
49bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            MessageColumns.ACCOUNT_KEY, MessageColumns.FLAGS
50bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            };
51bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public static final int WIDGET_COLUMN_ID = 0;
52bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public static final int WIDGET_COLUMN_DISPLAY_NAME = 1;
53bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public static final int WIDGET_COLUMN_TIMESTAMP = 2;
54bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public static final int WIDGET_COLUMN_SUBJECT = 3;
55bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public static final int WIDGET_COLUMN_FLAG_READ = 4;
56bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public static final int WIDGET_COLUMN_FLAG_FAVORITE = 5;
57bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public static final int WIDGET_COLUMN_FLAG_ATTACHMENT = 6;
58bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public static final int WIDGET_COLUMN_MAILBOX_KEY = 7;
59bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public static final int WIDGET_COLUMN_SNIPPET = 8;
60bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public static final int WIDGET_COLUMN_ACCOUNT_KEY = 9;
61bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public static final int WIDGET_COLUMN_FLAGS = 10;
62bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
63bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    private long mAccountId;
64bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    private long mMailboxId;
65bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
66bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    /**
67bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * Cursor data specifically for use by the Email widget. Contains a cursor of messages in
68bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * addition to a message count and account name. The later elements were opportunistically
69bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * placed in this cursor. We could have defined multiple loaders for these items.
70bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     */
71bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    static class WidgetCursor extends CursorWrapper {
72bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        private final int mMessageCount;
73bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        private final String mAccountName;
74bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        private final String mMailboxName;
75bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
76bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        public WidgetCursor(Cursor cursor, int messageCount, String accountName,
77bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                String mailboxName) {
78bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            super(cursor);
79bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            mMessageCount = messageCount;
80bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            mAccountName = accountName;
81bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            mMailboxName = mailboxName;
82bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        }
83bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
84bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        /**
85bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook         * Gets the count to be shown on the widget header. If the currently viewed mailbox ID is
86bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook         * not {@link Mailbox#QUERY_ALL_FAVORITES}, it is the unread count, which is different from
87bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook         * number of records returned by {@link #getCount()}.
88bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook         */
89bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        public int getMessageCount() {
90bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            return mMessageCount;
91bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        }
92bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        /** Gets the display name of the account */
93bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        public String getAccountName() {
94bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            return mAccountName;
95bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        }
96bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        /** Gets the display name of the mailbox */
97bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        public String getMailboxName() {
98bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            return mMailboxName;
99bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        }
100bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    }
101bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
102bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    private final Context mContext;
103bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
104bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    EmailWidgetLoader(Context context) {
105bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        super(context, Message.CONTENT_URI, WIDGET_PROJECTION, null,
106bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                null, SORT_TIMESTAMP_DESCENDING);
107bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        mContext = context;
108bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    }
109bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
110bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    @Override
111bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    public Cursor loadInBackground() {
112bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        final Cursor messagesCursor = super.loadInBackground();
113bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
114bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        // Reset the notification Uri to our Message table notifier URI
115bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        messagesCursor.setNotificationUri(mContext.getContentResolver(), Message.NOTIFIER_URI);
116bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
117bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        final int messageCount;
118bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        if (mMailboxId != Mailbox.QUERY_ALL_FAVORITES) {
119bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            String selection = "(" + getSelection() + " ) AND " + MessageColumns.FLAG_READ + " = 0";
120bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            messageCount = EmailContent.count(mContext, Message.CONTENT_URI, selection,
121bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                    getSelectionArgs());
122bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        } else {
123bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            // Just use the number of all messages shown.
124bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            messageCount = messagesCursor.getCount();
125bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        }
126bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        Account account = Account.restoreAccountWithId(mContext, mAccountId);
127bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        final String accountName;
128bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        if (account != null) {
129bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            accountName = account.mDisplayName;
130bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        } else {
131bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            if (mAccountId == Account.ACCOUNT_ID_COMBINED_VIEW) {
132bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                int accountCount = EmailContent.count(mContext, Account.CONTENT_URI);
133bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                Resources res = mContext.getResources();
134bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                String countString =
135bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                        res.getQuantityString(R.plurals.picker_combined_view_account_count,
136bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                        accountCount, accountCount);
137bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                accountName = res.getString(R.string.picker_combined_view_fmt, countString);
138bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            } else {
139bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                // TODO What to use here? "unknown"? Account is real, but, doesn't exist.
140bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                accountName = null;
141bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            }
142bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        }
143bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        final String mailboxName;
144bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        if (mMailboxId > 0) {
145bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            Mailbox mailbox = Mailbox.restoreMailboxWithId(mContext, mMailboxId);
146bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            if (mailbox != null) {
147bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                mailboxName = mailbox.mDisplayName;    // regular mailbox
148bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            } else {
149bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                // TODO What use here? "unknown"? Mailbox is "real", but, doesn't exist.
150bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                mailboxName = null;
151bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            }
152bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        } else {
153bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            if (mMailboxId == Mailbox.QUERY_ALL_INBOXES) {
154bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                mailboxName = mContext.getString(R.string.picker_mailbox_name_all_inbox);
155bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            } else { // default to all unread for the account's inbox
156bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                mailboxName = mContext.getString(R.string.picker_mailbox_name_all_unread);
157bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            }
158bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        }
159bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
160bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        return new WidgetCursor(messagesCursor, messageCount, accountName, mailboxName);
161bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    }
162bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
163bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    /**
164bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * Stop any pending load, reset selection parameters, and start loading.
165bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     *
166bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * Must be called from the UI thread
167bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     *
168bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * @param accountId The ID of the account. May be {@link Account#ACCOUNT_ID_COMBINED_VIEW}.
169bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     * @param mailboxId The mailbox to load; may either be a real mailbox or the pseudo mailbox
170bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     *          {@link Mailbox#QUERY_ALL_INBOXES} or {@link Mailbox#QUERY_ALL_UNREAD}. If it's
171bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     *          neither of these pseudo mailboxes, {@link Mailbox#QUERY_ALL_UNREAD} will be used.
172bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook     */
173bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    void load(long accountId, long mailboxId) {
174bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        reset();
175bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        mAccountId = accountId;
176bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        mMailboxId = mailboxId;
177bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        setSelectionAndArgs();
178bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        startLoading();
179bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    }
180bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook
181bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    /** Sets the loader's selection and arguments depending upon the account and mailbox */
182bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    private void setSelectionAndArgs() {
183bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        if (mAccountId == Account.ACCOUNT_ID_COMBINED_VIEW) {
184bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            if (mMailboxId == Mailbox.QUERY_ALL_INBOXES) {
185bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                setSelection(Message.ALL_INBOX_SELECTION);
186bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            } else { // default to all unread
187bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                setSelection(Message.ALL_UNREAD_SELECTION);
188bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            }
189bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            setSelectionArgs(null);
190bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        } else {
191bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            if (mMailboxId > 0L) {
192bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                // Simple mailbox selection
193bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                setSelection(
194bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                    MessageColumns.ACCOUNT_KEY + "=? AND " +
195bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                    MessageColumns.MAILBOX_KEY + "=?");
196bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                setSelectionArgs(
197bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                        new String[] { Long.toString(mAccountId), Long.toString(mMailboxId) });
198bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            } else {
199bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                if (mMailboxId == Mailbox.QUERY_ALL_INBOXES) {
200bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                    setSelection(Message.PER_ACCOUNT_INBOX_SELECTION);
201bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                } else { // default to all unread for the account's inbox
202bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                    setSelection(Message.PER_ACCOUNT_UNREAD_SELECTION);
203bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                }
204bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook                setSelectionArgs(new String[] { Long.toString(mAccountId) });
205bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook            }
206bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook        }
207bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook    }
208bc47398187c6ffd132435e51d8d61e6ec79a79dbPaul Westbrook}
209