1897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki/*
2897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki * Copyright (C) 2011 The Android Open Source Project
3897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki *
4897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki * Licensed under the Apache License, Version 2.0 (the "License");
5897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki * you may not use this file except in compliance with the License.
6897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki * You may obtain a copy of the License at
7897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki *
8897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki *      http://www.apache.org/licenses/LICENSE-2.0
9897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki *
10897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki * Unless required by applicable law or agreed to in writing, software
11897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki * distributed under the License is distributed on an "AS IS" BASIS,
12897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki * See the License for the specific language governing permissions and
14897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki * limitations under the License.
15897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki */
16897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki
17897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onukipackage com.android.email.widget;
18897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki
19cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedyimport com.android.email.R;
20897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onukiimport com.android.email.data.ThrottlingCursorLoader;
21f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blankimport com.android.emailcommon.provider.Account;
22897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onukiimport com.android.emailcommon.provider.EmailContent;
23897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onukiimport com.android.emailcommon.provider.EmailContent.Message;
24897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onukiimport com.android.emailcommon.provider.EmailContent.MessageColumns;
2544f5cd67c97da6a5c7e63a73b4dca7057b83cdbbTodd Kennedyimport com.android.emailcommon.provider.Mailbox;
26897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki
27897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onukiimport android.content.Context;
28cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedyimport android.content.res.Resources;
29897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onukiimport android.database.Cursor;
30897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onukiimport android.database.CursorWrapper;
31897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki
32897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki/**
33897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki * Loader for {@link EmailWidget}.
34897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki *
35897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki * This loader not only loads the messages, but also:
36897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki * - The number of accounts.
37897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki * - The message count shown in the widget header.
38897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki *   It's currently just the same as the message count, but this will be updated to the unread
39897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki *   counts for inboxes.
40897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki */
4144f5cd67c97da6a5c7e63a73b4dca7057b83cdbbTodd Kennedyclass EmailWidgetLoader extends ThrottlingCursorLoader {
42897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    private static final String SORT_TIMESTAMP_DESCENDING = MessageColumns.TIMESTAMP + " DESC";
43897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki
44897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    // The projection to be used by the WidgetLoader
45897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    private static final String[] WIDGET_PROJECTION = new String[] {
46897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki            EmailContent.RECORD_ID, MessageColumns.DISPLAY_NAME, MessageColumns.TIMESTAMP,
47897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki            MessageColumns.SUBJECT, MessageColumns.FLAG_READ, MessageColumns.FLAG_FAVORITE,
48897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki            MessageColumns.FLAG_ATTACHMENT, MessageColumns.MAILBOX_KEY, MessageColumns.SNIPPET,
49897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki            MessageColumns.ACCOUNT_KEY, MessageColumns.FLAGS
50897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki            };
51897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    public static final int WIDGET_COLUMN_ID = 0;
52897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    public static final int WIDGET_COLUMN_DISPLAY_NAME = 1;
53897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    public static final int WIDGET_COLUMN_TIMESTAMP = 2;
54897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    public static final int WIDGET_COLUMN_SUBJECT = 3;
55897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    public static final int WIDGET_COLUMN_FLAG_READ = 4;
56897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    public static final int WIDGET_COLUMN_FLAG_FAVORITE = 5;
57897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    public static final int WIDGET_COLUMN_FLAG_ATTACHMENT = 6;
58897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    public static final int WIDGET_COLUMN_MAILBOX_KEY = 7;
59897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    public static final int WIDGET_COLUMN_SNIPPET = 8;
60897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    public static final int WIDGET_COLUMN_ACCOUNT_KEY = 9;
61897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    public static final int WIDGET_COLUMN_FLAGS = 10;
62897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki
6344f5cd67c97da6a5c7e63a73b4dca7057b83cdbbTodd Kennedy    private long mAccountId;
6444f5cd67c97da6a5c7e63a73b4dca7057b83cdbbTodd Kennedy    private long mMailboxId;
6544f5cd67c97da6a5c7e63a73b4dca7057b83cdbbTodd Kennedy
66897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    /**
67fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy     * Cursor data specifically for use by the Email widget. Contains a cursor of messages in
68fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy     * addition to a message count and account name. The later elements were opportunistically
69fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy     * placed in this cursor. We could have defined multiple loaders for these items.
70897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki     */
71fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy    static class WidgetCursor extends CursorWrapper {
72897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki        private final int mMessageCount;
73fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy        private final String mAccountName;
74cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy        private final String mMailboxName;
75897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki
76cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy        public WidgetCursor(Cursor cursor, int messageCount, String accountName,
77cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy                String mailboxName) {
78897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki            super(cursor);
79897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki            mMessageCount = messageCount;
80fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy            mAccountName = accountName;
81cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy            mMailboxName = mailboxName;
82897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki        }
83897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki
84897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki        /**
85fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy         * Gets the count to be shown on the widget header. If the currently viewed mailbox ID is
86fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy         * not {@link Mailbox#QUERY_ALL_FAVORITES}, it is the unread count, which is different from
87fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy         * number of records returned by {@link #getCount()}.
88897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki         */
89897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki        public int getMessageCount() {
90897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki            return mMessageCount;
91897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki        }
92fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy        /** Gets the display name of the account */
93fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy        public String getAccountName() {
94fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy            return mAccountName;
95fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy        }
96cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy        /** Gets the display name of the mailbox */
97cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy        public String getMailboxName() {
98cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy            return mMailboxName;
99cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy        }
100897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    }
101897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki
102897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    private final Context mContext;
103897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki
10444f5cd67c97da6a5c7e63a73b4dca7057b83cdbbTodd Kennedy    EmailWidgetLoader(Context context) {
105897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki        super(context, Message.CONTENT_URI, WIDGET_PROJECTION, null,
106897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki                null, SORT_TIMESTAMP_DESCENDING);
107897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki        mContext = context;
108897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    }
109897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki
110897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    @Override
111897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    public Cursor loadInBackground() {
112897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki        final Cursor messagesCursor = super.loadInBackground();
113897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki
114897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki        // Reset the notification Uri to our Message table notifier URI
115897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki        messagesCursor.setNotificationUri(mContext.getContentResolver(), Message.NOTIFIER_URI);
116897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki
117fc4006b2760aadc98e87a09472b717dcd966db42Makoto Onuki        final int messageCount;
11844f5cd67c97da6a5c7e63a73b4dca7057b83cdbbTodd Kennedy        if (mMailboxId != Mailbox.QUERY_ALL_FAVORITES) {
11944f5cd67c97da6a5c7e63a73b4dca7057b83cdbbTodd Kennedy            String selection = "(" + getSelection() + " ) AND " + MessageColumns.FLAG_READ + " = 0";
12044f5cd67c97da6a5c7e63a73b4dca7057b83cdbbTodd Kennedy            messageCount = EmailContent.count(mContext, Message.CONTENT_URI, selection,
12144f5cd67c97da6a5c7e63a73b4dca7057b83cdbbTodd Kennedy                    getSelectionArgs());
122fc4006b2760aadc98e87a09472b717dcd966db42Makoto Onuki        } else {
123fc4006b2760aadc98e87a09472b717dcd966db42Makoto Onuki            // Just use the number of all messages shown.
124fc4006b2760aadc98e87a09472b717dcd966db42Makoto Onuki            messageCount = messagesCursor.getCount();
125fc4006b2760aadc98e87a09472b717dcd966db42Makoto Onuki        }
126fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy        Account account = Account.restoreAccountWithId(mContext, mAccountId);
127fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy        final String accountName;
128fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy        if (account != null) {
129fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy            accountName = account.mDisplayName;
130fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy        } else {
131cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy            if (mAccountId == Account.ACCOUNT_ID_COMBINED_VIEW) {
132cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy                int accountCount = EmailContent.count(mContext, Account.CONTENT_URI);
133cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy                Resources res = mContext.getResources();
134cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy                String countString =
135cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy                        res.getQuantityString(R.plurals.picker_combined_view_account_count,
136cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy                        accountCount, accountCount);
137cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy                accountName = res.getString(R.string.picker_combined_view_fmt, countString);
138cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy            } else {
139cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy                // TODO What to use here? "unknown"? Account is real, but, doesn't exist.
140cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy                accountName = null;
141cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy            }
142cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy        }
143cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy        final String mailboxName;
144cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy        if (mMailboxId > 0) {
145cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy            Mailbox mailbox = Mailbox.restoreMailboxWithId(mContext, mMailboxId);
146cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy            if (mailbox != null) {
147cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy                mailboxName = mailbox.mDisplayName;    // regular mailbox
148cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy            } else {
149cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy                // TODO What use here? "unknown"? Mailbox is "real", but, doesn't exist.
150cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy                mailboxName = null;
151cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy            }
152cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy        } else {
153cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy            if (mMailboxId == Mailbox.QUERY_ALL_INBOXES) {
154cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy                mailboxName = mContext.getString(R.string.picker_mailbox_name_all_inbox);
155cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy            } else { // default to all unread for the account's inbox
156cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy                mailboxName = mContext.getString(R.string.picker_mailbox_name_all_unread);
157cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy            }
158fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy        }
159897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki
160cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy        return new WidgetCursor(messagesCursor, messageCount, accountName, mailboxName);
161897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    }
162897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki
163897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    /**
164897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki     * Stop any pending load, reset selection parameters, and start loading.
165897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki     *
166897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki     * Must be called from the UI thread
167897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki     *
168fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy     * @param accountId The ID of the account. May be {@link Account#ACCOUNT_ID_COMBINED_VIEW}.
169cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy     * @param mailboxId The mailbox to load; may either be a real mailbox or the pseudo mailbox
170cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy     *          {@link Mailbox#QUERY_ALL_INBOXES} or {@link Mailbox#QUERY_ALL_UNREAD}. If it's
171cf772cc8ad38fe4eb929964c3839d7388dfd585cTodd Kennedy     *          neither of these pseudo mailboxes, {@link Mailbox#QUERY_ALL_UNREAD} will be used.
172897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki     */
17344f5cd67c97da6a5c7e63a73b4dca7057b83cdbbTodd Kennedy    void load(long accountId, long mailboxId) {
174897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki        reset();
17544f5cd67c97da6a5c7e63a73b4dca7057b83cdbbTodd Kennedy        mAccountId = accountId;
17644f5cd67c97da6a5c7e63a73b4dca7057b83cdbbTodd Kennedy        mMailboxId = mailboxId;
177fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy        setSelectionAndArgs();
178897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki        startLoading();
179897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki    }
180fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy
181fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy    /** Sets the loader's selection and arguments depending upon the account and mailbox */
182fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy    private void setSelectionAndArgs() {
183fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy        if (mAccountId == Account.ACCOUNT_ID_COMBINED_VIEW) {
184fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy            if (mMailboxId == Mailbox.QUERY_ALL_INBOXES) {
185fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy                setSelection(Message.ALL_INBOX_SELECTION);
186fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy            } else { // default to all unread
187fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy                setSelection(Message.ALL_UNREAD_SELECTION);
188fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy            }
189fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy            setSelectionArgs(null);
190fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy        } else {
191fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy            if (mMailboxId > 0L) {
192fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy                // Simple mailbox selection
1930b4602b5d926d0cd1a913963497eec674cf1cea3Todd Kennedy                setSelection(
1940b4602b5d926d0cd1a913963497eec674cf1cea3Todd Kennedy                    MessageColumns.ACCOUNT_KEY + "=? AND " +
1950b4602b5d926d0cd1a913963497eec674cf1cea3Todd Kennedy                    MessageColumns.MAILBOX_KEY + "=?");
196fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy                setSelectionArgs(
197fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy                        new String[] { Long.toString(mAccountId), Long.toString(mMailboxId) });
198fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy            } else {
199fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy                if (mMailboxId == Mailbox.QUERY_ALL_INBOXES) {
200fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy                    setSelection(Message.PER_ACCOUNT_INBOX_SELECTION);
201fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy                } else { // default to all unread for the account's inbox
202fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy                    setSelection(Message.PER_ACCOUNT_UNREAD_SELECTION);
203fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy                }
204fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy                setSelectionArgs(new String[] { Long.toString(mAccountId) });
205fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy            }
206fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy        }
207fa1b3a8f37eada5efad690b7abd32ae248aa2f2bTodd Kennedy    }
208897a0ea81c8cddcb142d6ac7f7c47801858c8537Makoto Onuki}
209