15675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy/* 25675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy * Copyright (C) 2011 The Android Open Source Project 35675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy * 45675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy * Licensed under the Apache License, Version 2.0 (the "License"); 55675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy * you may not use this file except in compliance with the License. 65675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy * You may obtain a copy of the License at 75675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy * 85675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy * http://www.apache.org/licenses/LICENSE-2.0 95675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy * 105675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy * Unless required by applicable law or agreed to in writing, software 115675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy * distributed under the License is distributed on an "AS IS" BASIS, 125675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy * See the License for the specific language governing permissions and 145675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy * limitations under the License. 155675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy */ 165675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 175675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedypackage com.android.email.activity; 185675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 19d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErikimport com.android.email.R; 20d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErikimport com.android.emailcommon.provider.Account; 21d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErikimport com.android.emailcommon.provider.EmailContent.AccountColumns; 22d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErikimport com.android.emailcommon.provider.EmailContent.MailboxColumns; 23d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErikimport com.android.emailcommon.provider.HostAuth; 24d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErikimport com.android.emailcommon.provider.Mailbox; 25d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErik 265675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedyimport android.app.Activity; 27b4f6404cd1a8e96d177995cad797e9f440fc979eTodd Kennedyimport android.app.FragmentTransaction; 285675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedyimport android.app.ListFragment; 295675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedyimport android.app.LoaderManager.LoaderCallbacks; 300f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedyimport android.content.ContentValues; 315675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedyimport android.content.Context; 325675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedyimport android.content.CursorLoader; 335675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedyimport android.content.Loader; 34b19516e24836c9479c6ecfbf3d54d58cf64782edTodd Kennedyimport android.content.res.Resources; 355675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedyimport android.database.Cursor; 360f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedyimport android.database.MatrixCursor; 370f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedyimport android.database.MatrixCursor.RowBuilder; 38e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komaloimport android.database.MergeCursor; 390f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedyimport android.net.Uri; 405675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedyimport android.os.Bundle; 415675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedyimport android.view.View; 425675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedyimport android.widget.AdapterView; 43e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komaloimport android.widget.AdapterView.OnItemClickListener; 445675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedyimport android.widget.ListView; 455675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedyimport android.widget.SimpleCursorAdapter; 46e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo 475675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy/** 485675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy * Fragment containing a list of accounts to show during shortcut creation. 49ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy * <p> 50ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy * NOTE: In order to receive callbacks, the activity containing this fragment must implement 51ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy * the {@link PickerCallback} interface. 525675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy */ 535675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedypublic abstract class ShortcutPickerFragment extends ListFragment 545675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy implements OnItemClickListener, LoaderCallbacks<Cursor> { 55ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy /** Callback methods. Enclosing activities must implement to receive fragment notifications. */ 56ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy public static interface PickerCallback { 57e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo /** Builds a mailbox filter for the given account. See MailboxShortcutPickerFragment. */ 58e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo public Integer buildFilter(Account account); 59ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy /** Invoked when an account and mailbox have been selected. */ 60ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy public void onSelected(Account account, long mailboxId); 61ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy /** Required data is missing; either the account and/or mailbox */ 62ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy public void onMissingData(boolean missingAccount, boolean missingMailbox); 63ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy } 64ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy 65ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy /** A no-op callback */ 66ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy private final PickerCallback EMPTY_CALLBACK = new PickerCallback() { 67e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo @Override public Integer buildFilter(Account account) { return null; } 68ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy @Override public void onSelected(Account account, long mailboxId){ getActivity().finish(); } 69ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy @Override public void onMissingData(boolean missingAccount, boolean missingMailbox) { } 70ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy }; 715675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy private final static int LOADER_ID = 0; 725675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy private final static int[] TO_VIEWS = new int[] { 735675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy android.R.id.text1, 745675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy }; 755675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 76ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy PickerCallback mCallback = EMPTY_CALLBACK; 775675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy /** Cursor adapter that provides either the account or mailbox list */ 785675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy private SimpleCursorAdapter mAdapter; 795675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 805675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy @Override 815675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy public void onAttach(Activity activity) { 825675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy super.onAttach(activity); 835675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 84ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy if (activity instanceof PickerCallback) { 85ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy mCallback = (PickerCallback) activity; 86ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy } 875675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy final String[] fromColumns = getFromColumns(); 885675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy mAdapter = new SimpleCursorAdapter(activity, 895675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy android.R.layout.simple_expandable_list_item_1, null, fromColumns, TO_VIEWS, 0); 905675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy setListAdapter(mAdapter); 915675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 925675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy getLoaderManager().initLoader(LOADER_ID, null, this); 935675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy } 945675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 955675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy @Override 965675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy public void onActivityCreated(Bundle savedInstanceState) { 975675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy super.onActivityCreated(savedInstanceState); 985675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 995675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy ListView listView = getListView(); 1005675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy listView.setOnItemClickListener(this); 1015675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy listView.setItemsCanFocus(false); 1025675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy } 1035675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 1045675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy @Override 1055675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 1065675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy mAdapter.swapCursor(data); 1075675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy } 1085675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 1095675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy @Override 1105675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy public void onLoaderReset(Loader<Cursor> loader) { 1115675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy mAdapter.swapCursor(null); 1125675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy } 1135675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 1145675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy /** Returns the cursor columns to map into list */ 1155675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy abstract String[] getFromColumns(); 1165675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 1170f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy // TODO if we add meta-accounts to the database, remove this class entirely 1180f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy private static final class AccountPickerLoader extends CursorLoader { 1190f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy public AccountPickerLoader(Context context, Uri uri, String[] projection, String selection, 1200f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy String[] selectionArgs, String sortOrder) { 1210f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy super(context, uri, projection, selection, selectionArgs, sortOrder); 1220f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy } 1230f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy 1240f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy @Override 1250f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy public Cursor loadInBackground() { 1260f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy Cursor parentCursor = super.loadInBackground(); 127b19516e24836c9479c6ecfbf3d54d58cf64782edTodd Kennedy int cursorCount = parentCursor.getCount(); 128b19516e24836c9479c6ecfbf3d54d58cf64782edTodd Kennedy final Cursor returnCursor; 1290f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy 130b19516e24836c9479c6ecfbf3d54d58cf64782edTodd Kennedy if (cursorCount > 1) { 1310f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy // Only add "All accounts" if there is more than 1 account defined 1320f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy MatrixCursor allAccountCursor = new MatrixCursor(getProjection()); 133b19516e24836c9479c6ecfbf3d54d58cf64782edTodd Kennedy addCombinedAccountRow(allAccountCursor, cursorCount); 1340f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy returnCursor = new MergeCursor(new Cursor[] { allAccountCursor, parentCursor }); 1350f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy } else { 1360f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy returnCursor = parentCursor; 1370f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy } 1380f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy return returnCursor; 1390f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy } 1400f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy 1410f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy /** Adds a row for "All Accounts" into the given cursor */ 142b19516e24836c9479c6ecfbf3d54d58cf64782edTodd Kennedy private void addCombinedAccountRow(MatrixCursor cursor, int accountCount) { 1430f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy Context context = getContext(); 1440f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy Account account = new Account(); 1450f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy account.mId = Account.ACCOUNT_ID_COMBINED_VIEW; 146b19516e24836c9479c6ecfbf3d54d58cf64782edTodd Kennedy Resources res = context.getResources(); 147b19516e24836c9479c6ecfbf3d54d58cf64782edTodd Kennedy String countString = res.getQuantityString(R.plurals.picker_combined_view_account_count, 148b19516e24836c9479c6ecfbf3d54d58cf64782edTodd Kennedy accountCount, accountCount); 149b19516e24836c9479c6ecfbf3d54d58cf64782edTodd Kennedy account.mDisplayName = res.getString(R.string.picker_combined_view_fmt, countString); 1500f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy ContentValues values = account.toContentValues(); 1510f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy RowBuilder row = cursor.newRow(); 1520f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy for (String rowName : cursor.getColumnNames()) { 1530f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy // special case some of the rows ... 1540f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy if (AccountColumns.ID.equals(rowName)) { 1550f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy row.add(Account.ACCOUNT_ID_COMBINED_VIEW); 1560f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy continue; 1570f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy } else if (AccountColumns.IS_DEFAULT.equals(rowName)) { 1580f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy row.add(0); 1590f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy continue; 1600f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy } 1610f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy row.add(values.get(rowName)); 1620f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy } 1630f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy } 1640f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy } 1650f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy 1665675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy /** Account picker */ 1675675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy public static class AccountShortcutPickerFragment extends ShortcutPickerFragment { 168d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErik private volatile Boolean mLoadFinished = new Boolean(false); 1695675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy private final static String[] ACCOUNT_FROM_COLUMNS = new String[] { 1705675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy AccountColumns.DISPLAY_NAME, 1715675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy }; 1725675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 1735675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy @Override 1745675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy public void onActivityCreated(Bundle savedInstanceState) { 1755675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy super.onActivityCreated(savedInstanceState); 1765675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy getActivity().setTitle(R.string.account_shortcut_picker_title); 177d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErik if (!mLoadFinished) { 178d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErik getActivity().setVisible(false); 179d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErik } 1805675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy } 1815675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 1825675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy @Override 1835675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 1845675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy Cursor cursor = (Cursor) parent.getItemAtPosition(position); 185b4f6404cd1a8e96d177995cad797e9f440fc979eTodd Kennedy selectAccountCursor(cursor, true); 1865675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy } 1875675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 1885675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy @Override 1895675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy public Loader<Cursor> onCreateLoader(int id, Bundle args) { 1905675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy Context context = getActivity(); 1910f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy return new AccountPickerLoader( 1925675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy context, Account.CONTENT_URI, Account.CONTENT_PROJECTION, null, null, null); 1935675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy } 1945675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 1955675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy @Override 196e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 197e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy // if there is only one account, auto-select it 198ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy // No accounts; close the dialog 199ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy if (data.getCount() == 0) { 200ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy mCallback.onMissingData(true, false); 201ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy return; 202ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy } 203e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy if (data.getCount() == 1 && data.moveToFirst()) { 204b4f6404cd1a8e96d177995cad797e9f440fc979eTodd Kennedy selectAccountCursor(data, false); 205e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy return; 206e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy } 207e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy super.onLoadFinished(loader, data); 208d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErik mLoadFinished = true; 209d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErik getActivity().setVisible(true); 210e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy } 211e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy 212e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy @Override 2135675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy String[] getFromColumns() { 2145675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy return ACCOUNT_FROM_COLUMNS; 2155675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy } 216e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy 217e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy /** Selects the account specified by the given cursor */ 218b4f6404cd1a8e96d177995cad797e9f440fc979eTodd Kennedy private void selectAccountCursor(Cursor cursor, boolean allowBack) { 219e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy Account account = new Account(); 220e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy account.restore(cursor); 221e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo ShortcutPickerFragment fragment = MailboxShortcutPickerFragment.newInstance( 222e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo getActivity(), account, mCallback.buildFilter(account)); 223b4f6404cd1a8e96d177995cad797e9f440fc979eTodd Kennedy FragmentTransaction transaction = getFragmentManager().beginTransaction(); 224b4f6404cd1a8e96d177995cad797e9f440fc979eTodd Kennedy transaction.replace(R.id.shortcut_list, fragment); 225b4f6404cd1a8e96d177995cad797e9f440fc979eTodd Kennedy if (allowBack) { 226b4f6404cd1a8e96d177995cad797e9f440fc979eTodd Kennedy transaction.addToBackStack(null); 227b4f6404cd1a8e96d177995cad797e9f440fc979eTodd Kennedy } 228b4f6404cd1a8e96d177995cad797e9f440fc979eTodd Kennedy transaction.commitAllowingStateLoss(); 229e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy } 2305675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy } 2315675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 2320f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy // TODO if we add meta-mailboxes to the database, remove this class entirely 2330f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy private static final class MailboxPickerLoader extends CursorLoader { 2340f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy private final long mAccountId; 2352f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy private final boolean mAllowUnread; 2360f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy public MailboxPickerLoader(Context context, Uri uri, String[] projection, String selection, 2372f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy String[] selectionArgs, String sortOrder, long accountId, boolean allowUnread) { 2380f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy super(context, uri, projection, selection, selectionArgs, sortOrder); 2390f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy mAccountId = accountId; 2402f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy mAllowUnread = allowUnread; 2410f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy } 2420f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy 2430f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy @Override 2440f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy public Cursor loadInBackground() { 2452f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy MatrixCursor unreadCursor = 2462f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy new MatrixCursor(MailboxShortcutPickerFragment.MATRIX_PROJECTION); 2472f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy Context context = getContext(); 2482f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy if (mAllowUnread) { 2492f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy // For the special mailboxes, their ID is < 0. The UI list does not deal with 2502f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy // negative values very well, so, add MAX_VALUE to ensure they're positive, but, 2512f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy // don't clash with legitimate mailboxes. 2522f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy String mailboxName = context.getString(R.string.picker_mailbox_name_all_unread); 2532f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy unreadCursor.addRow( 2542f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy new Object[] { 2552f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy Integer.MAX_VALUE + Mailbox.QUERY_ALL_UNREAD, 2562f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy Mailbox.QUERY_ALL_UNREAD, 2572f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy mailboxName, 2582f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy }); 2592f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy } 2602f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy 2610f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy if (mAccountId == Account.ACCOUNT_ID_COMBINED_VIEW) { 2620f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy // Do something special for the "combined" view 2632f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy MatrixCursor combinedMailboxesCursor = 2642f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy new MatrixCursor(MailboxShortcutPickerFragment.MATRIX_PROJECTION); 2650f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy // For the special mailboxes, their ID is < 0. The UI list does not deal with 2660f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy // negative values very well, so, add MAX_VALUE to ensure they're positive, but, 2670f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy // don't clash with legitimate mailboxes. 2682f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy String mailboxName = context.getString(R.string.picker_mailbox_name_all_inbox); 2690f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy combinedMailboxesCursor.addRow( 2702f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy new Object[] { 2712f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy Integer.MAX_VALUE + Mailbox.QUERY_ALL_INBOXES, 2722f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy Mailbox.QUERY_ALL_INBOXES, 2732f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy mailboxName 2742f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy }); 2752f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy return new MergeCursor(new Cursor[] { combinedMailboxesCursor, unreadCursor }); 2760f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy } 2770f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy 2780f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy // Loading for a regular account; perform a normal load 2792f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy return new MergeCursor(new Cursor[] { super.loadInBackground(), unreadCursor }); 2800f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy } 2810f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy } 2820f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy 2835675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy /** Mailbox picker */ 2845675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy public static class MailboxShortcutPickerFragment extends ShortcutPickerFragment { 285e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo /** Allow all mailboxes in the mailbox list */ 286e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo public static int FILTER_ALLOW_ALL = 0; 287e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo /** Only allow an account's INBOX */ 288e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo public static int FILTER_INBOX_ONLY = 1 << 0; 289e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo /** Allow an "unread" mailbox; this is not affected by {@link #FILTER_INBOX_ONLY} */ 290e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo public static int FILTER_ALLOW_UNREAD = 1 << 1; 291e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo /** Fragment argument to set filter values */ 292e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo static final String ARG_FILTER = "MailboxShortcutPickerFragment.filter"; 2935675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy static final String ARG_ACCOUNT = "MailboxShortcutPickerFragment.account"; 294e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo 2952f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy private final static String REAL_ID = "realId"; 2965675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy private final static String[] MAILBOX_FROM_COLUMNS = new String[] { 2975675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy MailboxColumns.DISPLAY_NAME, 2985675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy }; 2995675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy /** Loader projection used for IMAP & POP3 accounts */ 3005675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy private final static String[] IMAP_PROJECTION = new String [] { 3012f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy MailboxColumns.ID, MailboxColumns.ID + " as " + REAL_ID, 3022f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy MailboxColumns.SERVER_ID + " as " + MailboxColumns.DISPLAY_NAME 3035675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy }; 3045675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy /** Loader projection used for EAS accounts */ 3055675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy private final static String[] EAS_PROJECTION = new String [] { 3062f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy MailboxColumns.ID, MailboxColumns.ID + " as " + REAL_ID, 3072f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy MailboxColumns.DISPLAY_NAME 3085675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy }; 3092f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy /** Loader projection used for a matrix cursor */ 3102f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy private final static String[] MATRIX_PROJECTION = new String [] { 3112f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy MailboxColumns.ID, REAL_ID, MailboxColumns.DISPLAY_NAME 3122f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy }; 3132f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy // TODO #ALL_MAILBOX_SELECTION is identical to MailboxesAdapter#ALL_MAILBOX_SELECTION; 3142f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy // create a common selection. Move this to the Mailbox class? 3152f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy /** Selection for all visible mailboxes for an account */ 3165675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy private final static String ALL_MAILBOX_SELECTION = MailboxColumns.ACCOUNT_KEY + "=?" + 3175675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy " AND " + Mailbox.USER_VISIBLE_MAILBOX_SELECTION; 3182f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy /** Selection for just the INBOX of an account */ 3192f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy private final static String INBOX_ONLY_SELECTION = ALL_MAILBOX_SELECTION + 3202f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy " AND " + MailboxColumns.TYPE + " = " + Mailbox.TYPE_INBOX; 321d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErik private volatile Boolean mLoadFinished = new Boolean(false); 3225675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy /** The currently selected account */ 3235675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy private Account mAccount; 324e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo /** The filter values; default to allow all mailboxes */ 325e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo private Integer mFilter; 326e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo 327e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo /** 328e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo * Builds a mailbox shortcut picker for the given account. 329e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo */ 330e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo public static MailboxShortcutPickerFragment newInstance( 331e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo Context context, Account account, Integer filter) { 332e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo 333e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo MailboxShortcutPickerFragment fragment = new MailboxShortcutPickerFragment(); 334e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo Bundle args = new Bundle(); 335e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo args.putParcelable(ARG_ACCOUNT, account); 336e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo args.putInt(ARG_FILTER, filter); 337e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo fragment.setArguments(args); 338e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo return fragment; 339e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo } 340e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo 341e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo /** Returns the mailbox filter */ 342e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo int getFilter() { 343e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo if (mFilter == null) { 344e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo mFilter = getArguments().getInt(ARG_FILTER, FILTER_ALLOW_ALL); 345e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo } 346e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo return mFilter; 347e10215eaff7c06b44b95de87ea46030065ecbee5Ben Komalo } 3485675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 3495675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy @Override 3505675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy public void onAttach(Activity activity) { 3515675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy // Need to setup the account first thing 3525675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy mAccount = getArguments().getParcelable(ARG_ACCOUNT); 3535675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy super.onAttach(activity); 3545675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy } 3555675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 3565675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy @Override 3575675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy public void onActivityCreated(Bundle savedInstanceState) { 3585675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy super.onActivityCreated(savedInstanceState); 3595675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy getActivity().setTitle(R.string.mailbox_shortcut_picker_title); 360d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErik if (!mLoadFinished) { 361d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErik getActivity().setVisible(false); 362d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErik } 3635675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy } 3645675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 3655675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy @Override 3665675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 3675675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy Cursor cursor = (Cursor) parent.getItemAtPosition(position); 3682f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy long mailboxId = cursor.getLong(cursor.getColumnIndex(REAL_ID)); 369ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy mCallback.onSelected(mAccount, mailboxId); 3705675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy } 3715675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 3725675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy @Override 3735675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy public Loader<Cursor> onCreateLoader(int id, Bundle args) { 3745675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy Context context = getActivity(); 3755675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy // TODO Create a fully-qualified path name for Exchange accounts [code should also work 3765675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy // for MoveMessageToDialog.java] 3775675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy HostAuth recvAuth = mAccount.getOrCreateHostAuthRecv(context); 3785675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy final String[] projection; 3795675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy final String orderBy; 3802f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy final String selection; 3815675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy if (recvAuth.isEasConnection()) { 3825675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy projection = EAS_PROJECTION; 3835675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy orderBy = MailboxColumns.DISPLAY_NAME; 3845675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy } else { 3855675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy projection = IMAP_PROJECTION; 3865675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy orderBy = MailboxColumns.SERVER_ID; 3875675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy } 3882f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy if ((getFilter() & FILTER_INBOX_ONLY) == 0) { 3892f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy selection = ALL_MAILBOX_SELECTION; 3902f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy } else { 3912f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy selection = INBOX_ONLY_SELECTION; 3922f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy } 3930f84ff2c082dc4ea774f53fe6877752a769ca258Todd Kennedy return new MailboxPickerLoader( 3942f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy context, Mailbox.CONTENT_URI, projection, selection, 3952f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy new String[] { Long.toString(mAccount.mId) }, orderBy, mAccount.mId, 3962f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy (getFilter() & FILTER_ALLOW_UNREAD) != 0); 3975675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy } 3985675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy 3995675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy @Override 400e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 401ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy // No accounts; close the dialog 402ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy if (data.getCount() == 0) { 403ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy mCallback.onMissingData(false, true); 404ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy return; 405ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy } 406e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy // if there is only one mailbox, auto-select it 407e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy if (data.getCount() == 1 && data.moveToFirst()) { 4082f5ee8e2d1e106340eb2a21b1ada6db1987bd98fTodd Kennedy long mailboxId = data.getLong(data.getColumnIndex(REAL_ID)); 409ae8e612ed5eb00c228070f4f43359cc7eae99932Todd Kennedy mCallback.onSelected(mAccount, mailboxId); 410e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy return; 411e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy } 412e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy super.onLoadFinished(loader, data); 413d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErik mLoadFinished = true; 414d39cf1938a468bb1ba77538140bc2ef80d634e36RoboErik getActivity().setVisible(true); 415e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy } 416e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy 417e2d227ffeda71ef08a11c08c5b1a2345a03091c8Todd Kennedy @Override 4185675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy String[] getFromColumns() { 4195675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy return MAILBOX_FROM_COLUMNS; 4205675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy } 4215675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy } 4225675ea88d3cc4ba9934d2a54fee008fd324d711fTodd Kennedy} 423