diff --git a/emailcommon/src/com/android/emailcommon/provider/Account.java b/emailcommon/src/com/android/emailcommon/provider/Account.java index c7cfe3d8b..76ef70d82 100755 --- a/emailcommon/src/com/android/emailcommon/provider/Account.java +++ b/emailcommon/src/com/android/emailcommon/provider/Account.java @@ -99,13 +99,11 @@ public final class Account extends EmailContent implements AccountColumns, Parce public static Uri CONTENT_URI; public static Uri RESET_NEW_MESSAGE_COUNT_URI; public static Uri NOTIFIER_URI; - public static Uri DEFAULT_ACCOUNT_ID_URI; public static void initAccount() { CONTENT_URI = Uri.parse(EmailContent.CONTENT_URI + "/account"); RESET_NEW_MESSAGE_COUNT_URI = Uri.parse(EmailContent.CONTENT_URI + "/resetNewMessageCount"); NOTIFIER_URI = Uri.parse(EmailContent.CONTENT_NOTIFIER_URI + "/account"); - DEFAULT_ACCOUNT_ID_URI = Uri.parse(EmailContent.CONTENT_URI + "/account/default"); } public String mDisplayName; @@ -116,7 +114,6 @@ public final class Account extends EmailContent implements AccountColumns, Parce public long mHostAuthKeyRecv; public long mHostAuthKeySend; public int mFlags; - public boolean mIsDefault; // note: callers should use getDefaultAccountId() public String mCompatibilityUuid; public String mSenderName; public String mProtocolVersion; @@ -141,20 +138,19 @@ public final class Account extends EmailContent implements AccountColumns, Parce public static final int CONTENT_HOST_AUTH_KEY_RECV_COLUMN = 6; public static final int CONTENT_HOST_AUTH_KEY_SEND_COLUMN = 7; public static final int CONTENT_FLAGS_COLUMN = 8; - public static final int CONTENT_IS_DEFAULT_COLUMN = 9; - public static final int CONTENT_COMPATIBILITY_UUID_COLUMN = 10; - public static final int CONTENT_SENDER_NAME_COLUMN = 11; - public static final int CONTENT_PROTOCOL_VERSION_COLUMN = 12; - public static final int CONTENT_NEW_MESSAGE_COUNT_COLUMN = 13; - public static final int CONTENT_SECURITY_SYNC_KEY_COLUMN = 14; - public static final int CONTENT_SIGNATURE_COLUMN = 15; - public static final int CONTENT_POLICY_KEY = 16; + public static final int CONTENT_COMPATIBILITY_UUID_COLUMN = 9; + public static final int CONTENT_SENDER_NAME_COLUMN = 10; + public static final int CONTENT_PROTOCOL_VERSION_COLUMN = 11; + public static final int CONTENT_NEW_MESSAGE_COUNT_COLUMN = 12; + public static final int CONTENT_SECURITY_SYNC_KEY_COLUMN = 13; + public static final int CONTENT_SIGNATURE_COLUMN = 14; + public static final int CONTENT_POLICY_KEY = 15; public static final String[] CONTENT_PROJECTION = new String[] { RECORD_ID, AccountColumns.DISPLAY_NAME, AccountColumns.EMAIL_ADDRESS, AccountColumns.SYNC_KEY, AccountColumns.SYNC_LOOKBACK, AccountColumns.SYNC_INTERVAL, AccountColumns.HOST_AUTH_KEY_RECV, - AccountColumns.HOST_AUTH_KEY_SEND, AccountColumns.FLAGS, AccountColumns.IS_DEFAULT, + AccountColumns.HOST_AUTH_KEY_SEND, AccountColumns.FLAGS, AccountColumns.COMPATIBILITY_UUID, AccountColumns.SENDER_NAME, AccountColumns.PROTOCOL_VERSION, AccountColumns.NEW_MESSAGE_COUNT, AccountColumns.SECURITY_SYNC_KEY, @@ -175,12 +171,6 @@ public final class Account extends EmailContent implements AccountColumns, Parce public static final String[] ACCOUNT_FLAGS_PROJECTION = new String[] { AccountColumns.ID, AccountColumns.FLAGS}; - public static final int ACCOUNT_IS_DEFAULT_COLUMN_ID = 0; - public static final int ACCOUNT_IS_DEFAULT_COLUMN_IS_DEFAULT = 1; - public static final String[] ACCOUNT_IS_DEFAULT_PROJECTION = new String[] { - AccountColumns.ID, AccountColumns.IS_DEFAULT - }; - public static final String MAILBOX_SELECTION = MessageColumns.MAILBOX_KEY + " =?"; @@ -252,7 +242,6 @@ public final class Account extends EmailContent implements AccountColumns, Parce mHostAuthKeyRecv = cursor.getLong(CONTENT_HOST_AUTH_KEY_RECV_COLUMN); mHostAuthKeySend = cursor.getLong(CONTENT_HOST_AUTH_KEY_SEND_COLUMN); mFlags = cursor.getInt(CONTENT_FLAGS_COLUMN); - mIsDefault = cursor.getInt(CONTENT_IS_DEFAULT_COLUMN) == 1; mCompatibilityUuid = cursor.getString(CONTENT_COMPATIBILITY_UUID_COLUMN); mSenderName = cursor.getString(CONTENT_SENDER_NAME_COLUMN); mProtocolVersion = cursor.getString(CONTENT_PROTOCOL_VERSION_COLUMN); @@ -435,15 +424,6 @@ public final class Account extends EmailContent implements AccountColumns, Parce return (account.mFlags & Account.FLAGS_SUPPORTS_SEARCH) != 0; } - /** - * Set the account to be the default account. If this is set to "true", when the account - * is saved, all other accounts will have the same value set to "false". - * @param newDefaultState the new default state - if true, others will be cleared. - */ - public void setDefaultAccount(boolean newDefaultState) { - mIsDefault = newDefaultState; - } - /** * @return {@link Uri} to this {@link Account} in the * {@code content://com.android.email.provider/account/UUID} format, which is safe to use @@ -509,24 +489,39 @@ public final class Account extends EmailContent implements AccountColumns, Parce } /** - * Return the id of the default account. If one hasn't been explicitly specified, return - * the first one in the database (the logic is provided within EmailProvider) + * Return the id of the default account. If one hasn't been explicitly specified, return the + * first one in the database. If no account exists, returns {@link #NO_ACCOUNT}. + * * @param context the caller's context - * @return the id of the default account, or Account.NO_ACCOUNT if there are no accounts + * @param lastUsedAccountId the last used account id, which is the basis of the default account */ - static public long getDefaultAccountId(Context context) { - final Cursor c = context.getContentResolver().query( - Account.DEFAULT_ACCOUNT_ID_URI, Account.ID_PROJECTION, null, null, null); + public static long getDefaultAccountId(final Context context, final long lastUsedAccountId) { + final Cursor cursor = context.getContentResolver().query( + CONTENT_URI, ID_PROJECTION, null, null, null); + + long firstAccount = NO_ACCOUNT; + try { - if (c != null && c.moveToFirst()) { - return c.getLong(Account.ID_PROJECTION_COLUMN); + if (cursor != null && cursor.moveToFirst()) { + do { + final long accountId = cursor.getLong(Account.ID_PROJECTION_COLUMN); + + if (accountId == lastUsedAccountId) { + return accountId; + } + + if (firstAccount == NO_ACCOUNT) { + firstAccount = accountId; + } + } while (cursor.moveToNext()); } } finally { - if (c != null) { - c.close(); + if (cursor != null) { + cursor.close(); } } - return Account.NO_ACCOUNT; + + return firstAccount; } /** @@ -664,35 +659,6 @@ public final class Account extends EmailContent implements AccountColumns, Parce return policy.mRequireManualSyncWhenRoaming; } - /** - * Override update to enforce a single default account, and do it atomically - */ - @Override - public int update(Context context, ContentValues cv) { - if (cv.containsKey(AccountColumns.IS_DEFAULT) && - cv.getAsBoolean(AccountColumns.IS_DEFAULT)) { - ArrayList ops = new ArrayList(); - ContentValues cv1 = new ContentValues(); - cv1.put(AccountColumns.IS_DEFAULT, false); - // Clear the default flag in all accounts - ops.add(ContentProviderOperation.newUpdate(CONTENT_URI).withValues(cv1).build()); - // Update this account - ops.add(ContentProviderOperation - .newUpdate(ContentUris.withAppendedId(CONTENT_URI, mId)) - .withValues(cv).build()); - try { - context.getContentResolver().applyBatch(EmailContent.AUTHORITY, ops); - return 1; - } catch (RemoteException e) { - // There is nothing to be done here; fail by returning 0 - } catch (OperationApplicationException e) { - // There is nothing to be done here; fail by returning 0 - } - return 0; - } - return super.update(context, cv); - } - /* * Override this so that we can store the HostAuth's first and link them to the Account * (non-Javadoc) @@ -706,8 +672,7 @@ public final class Account extends EmailContent implements AccountColumns, Parce // This logic is in place so I can (a) short circuit the expensive stuff when // possible, and (b) override (and throw) if anyone tries to call save() or update() // directly for Account, which are unsupported. - if (mHostAuthRecv == null && mHostAuthSend == null && mIsDefault == false && - mPolicy != null) { + if (mHostAuthRecv == null && mHostAuthSend == null && mPolicy != null) { return super.save(context); } @@ -731,15 +696,6 @@ public final class Account extends EmailContent implements AccountColumns, Parce .build()); } - // Create operations for making this the only default account - // Note, these are always updates because they change existing accounts - if (mIsDefault) { - index++; - ContentValues cv1 = new ContentValues(); - cv1.put(AccountColumns.IS_DEFAULT, 0); - ops.add(ContentProviderOperation.newUpdate(CONTENT_URI).withValues(cv1).build()); - } - // Now do the Account ContentValues cv = null; if (recvIndex >= 0 || sendIndex >= 0) { @@ -795,7 +751,6 @@ public final class Account extends EmailContent implements AccountColumns, Parce values.put(AccountColumns.HOST_AUTH_KEY_RECV, mHostAuthKeyRecv); values.put(AccountColumns.HOST_AUTH_KEY_SEND, mHostAuthKeySend); values.put(AccountColumns.FLAGS, mFlags); - values.put(AccountColumns.IS_DEFAULT, mIsDefault); values.put(AccountColumns.COMPATIBILITY_UUID, mCompatibilityUuid); values.put(AccountColumns.SENDER_NAME, mSenderName); values.put(AccountColumns.PROTOCOL_VERSION, mProtocolVersion); @@ -845,7 +800,6 @@ public final class Account extends EmailContent implements AccountColumns, Parce dest.writeLong(mHostAuthKeyRecv); dest.writeLong(mHostAuthKeySend); dest.writeInt(mFlags); - dest.writeByte(mIsDefault ? (byte)1 : (byte)0); dest.writeString(mCompatibilityUuid); dest.writeString(mSenderName); dest.writeString(mProtocolVersion); @@ -883,7 +837,6 @@ public final class Account extends EmailContent implements AccountColumns, Parce mHostAuthKeyRecv = in.readLong(); mHostAuthKeySend = in.readLong(); mFlags = in.readInt(); - mIsDefault = in.readByte() == 1; mCompatibilityUuid = in.readString(); mSenderName = in.readString(); mProtocolVersion = in.readString(); diff --git a/emailcommon/src/com/android/emailcommon/provider/EmailContent.java b/emailcommon/src/com/android/emailcommon/provider/EmailContent.java index 67da5cff6..b3cbf2204 100755 --- a/emailcommon/src/com/android/emailcommon/provider/EmailContent.java +++ b/emailcommon/src/com/android/emailcommon/provider/EmailContent.java @@ -1552,7 +1552,13 @@ public abstract class EmailContent { public static final String HOST_AUTH_KEY_SEND = "hostAuthKeySend"; // Flags public static final String FLAGS = "flags"; - // Default account + /** + * Default account + * + * @deprecated This should never be used any more, as default accounts are handled + * differently now + */ + @Deprecated public static final String IS_DEFAULT = "isDefault"; // Old-Style UUID for compatibility with previous versions public static final String COMPATIBILITY_UUID = "compatibilityUuid"; diff --git a/res/layout-sw600dp/account_setup_basics_common.xml b/res/layout-sw600dp/account_setup_basics_common.xml index aed76a6ec..947399dcc 100644 --- a/res/layout-sw600dp/account_setup_basics_common.xml +++ b/res/layout-sw600dp/account_setup_basics_common.xml @@ -71,32 +71,4 @@ android:nextFocusDown="@+id/next" /> - - - - - diff --git a/res/layout-sw600dp/account_setup_options_common.xml b/res/layout-sw600dp/account_setup_options_common.xml index 0b73f50ca..d68a4b082 100644 --- a/res/layout-sw600dp/account_setup_options_common.xml +++ b/res/layout-sw600dp/account_setup_options_common.xml @@ -60,31 +60,9 @@ android:layout_width="match_parent" /> - - - - diff --git a/res/layout/account_setup_options.xml b/res/layout/account_setup_options.xml index a17e3f8a8..c4f17242e 100644 --- a/res/layout/account_setup_options.xml +++ b/res/layout/account_setup_options.xml @@ -59,11 +59,6 @@ android:layout_height="wrap_content" android:layout_width="match_parent" /> - %s. Every 30 minutes Every hour - - - Send email from this account by default Notify me when email arrives @@ -909,11 +906,6 @@ as %s. Your login to %s failed; the server said: %s Do you want to update your username and/or password? - - Default account - - - Send email from this account by default diff --git a/res/xml/account_settings_preferences.xml b/res/xml/account_settings_preferences.xml index 98b08ec57..ac443d405 100755 --- a/res/xml/account_settings_preferences.xml +++ b/res/xml/account_settings_preferences.xml @@ -41,11 +41,6 @@ android:title="@string/account_settings_edit_quick_responses_label" android:summary="@string/account_settings_edit_quick_responses_summary" /> - - diff --git a/src/com/android/email/activity/setup/AccountSettingsFragment.java b/src/com/android/email/activity/setup/AccountSettingsFragment.java index e8a93d3fe..2534db93e 100644 --- a/src/com/android/email/activity/setup/AccountSettingsFragment.java +++ b/src/com/android/email/activity/setup/AccountSettingsFragment.java @@ -88,7 +88,6 @@ public class AccountSettingsFragment extends EmailPreferenceFragment private static final String PREFERENCE_FREQUENCY = "account_check_frequency"; private static final String PREFERENCE_BACKGROUND_ATTACHMENTS = "account_background_attachments"; - private static final String PREFERENCE_DEFAULT = "account_default"; private static final String PREFERENCE_CATEGORY_DATA_USAGE = "data_usage"; private static final String PREFERENCE_CATEGORY_NOTIFICATIONS = "account_notifications"; private static final String PREFERENCE_CATEGORY_SERVER = "account_servers"; @@ -115,7 +114,6 @@ public class AccountSettingsFragment extends EmailPreferenceFragment private ListPreference mCheckFrequency; private ListPreference mSyncWindow; private CheckBoxPreference mAccountBackgroundAttachments; - private CheckBoxPreference mAccountDefault; private CheckBoxPreference mInboxNotify; private CheckBoxPreference mInboxVibrate; private Preference mInboxRingtone; @@ -127,7 +125,6 @@ public class AccountSettingsFragment extends EmailPreferenceFragment private Context mContext; private Account mAccount; private boolean mAccountDirty; - private long mDefaultAccountId; private Callback mCallback = EmptyCallback.INSTANCE; private boolean mStarted; private boolean mLoaded; @@ -440,9 +437,9 @@ public class AccountSettingsFragment extends EmailPreferenceFragment /** * Async task to load account in order to view/edit it */ - private class LoadAccountTask extends AsyncTask { + private class LoadAccountTask extends AsyncTask { @Override - protected Object[] doInBackground(Long... params) { + protected Account doInBackground(Long... params) { long accountId = params[0]; Account account = Account.restoreAccountWithId(mContext, accountId); if (account != null) { @@ -454,20 +451,17 @@ public class AccountSettingsFragment extends EmailPreferenceFragment account = null; } } - long defaultAccountId = Account.getDefaultAccountId(mContext); - return new Object[] { account, Long.valueOf(defaultAccountId) }; + return account; } @Override - protected void onPostExecute(Object[] results) { - if (results != null && !isCancelled()) { - Account account = (Account) results[0]; + protected void onPostExecute(Account account) { + if (!isCancelled()) { if (account == null) { mSaveOnExit = false; mCallback.abandonEdit(); } else { mAccount = account; - mDefaultAccountId = (Long) results[1]; if (mStarted && !mLoaded) { loadSettings(); } @@ -727,10 +721,6 @@ public class AccountSettingsFragment extends EmailPreferenceFragment mAccountBackgroundAttachments.setOnPreferenceChangeListener(this); } - mAccountDefault = (CheckBoxPreference) findPreference(PREFERENCE_DEFAULT); - mAccountDefault.setChecked(mAccount.mId == mDefaultAccountId); - mAccountDefault.setOnPreferenceChangeListener(this); - mInboxNotify = (CheckBoxPreference) findPreference( FolderPreferences.PreferenceKeys.NOTIFICATIONS_ENABLED); mInboxNotify.setOnPreferenceChangeListener(this); @@ -874,7 +864,6 @@ public class AccountSettingsFragment extends EmailPreferenceFragment newFlags |= mAccountBackgroundAttachments.isChecked() ? Account.FLAGS_BACKGROUND_ATTACHMENTS : 0; - mAccount.setDefaultAccount(mAccountDefault.isChecked()); // If the display name has been cleared, we'll reset it to the default value (email addr) mAccount.setDisplayName(mAccountDescription.getText().trim()); // The sender name must never be empty (this is enforced by the preference editor) diff --git a/src/com/android/email/activity/setup/AccountSettingsUtils.java b/src/com/android/email/activity/setup/AccountSettingsUtils.java index 79f1e9ffb..a2234c26d 100644 --- a/src/com/android/email/activity/setup/AccountSettingsUtils.java +++ b/src/com/android/email/activity/setup/AccountSettingsUtils.java @@ -84,7 +84,6 @@ public class AccountSettingsUtils { */ public static ContentValues getAccountContentValues(Account account) { ContentValues cv = new ContentValues(); - cv.put(AccountColumns.IS_DEFAULT, account.mIsDefault); cv.put(AccountColumns.DISPLAY_NAME, account.getDisplayName()); cv.put(AccountColumns.SENDER_NAME, account.getSenderName()); cv.put(AccountColumns.SIGNATURE, account.getSignature()); diff --git a/src/com/android/email/activity/setup/AccountSetupBasics.java b/src/com/android/email/activity/setup/AccountSetupBasics.java index efe10bdbd..adaf2f222 100644 --- a/src/com/android/email/activity/setup/AccountSetupBasics.java +++ b/src/com/android/email/activity/setup/AccountSetupBasics.java @@ -35,11 +35,11 @@ import android.text.TextWatcher; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; -import android.widget.CheckBox; import android.widget.EditText; import android.widget.Toast; import com.android.email.EmailAddressValidator; +import com.android.email.Preferences; import com.android.email.R; import com.android.email.activity.ActivityHelper; import com.android.email.activity.UiUtilities; @@ -110,7 +110,6 @@ public class AccountSetupBasics extends AccountSetupActivity // Support for UI private EditText mEmailView; private EditText mPasswordView; - private CheckBox mDefaultView; private final EmailAddressValidator mEmailValidator = new EmailAddressValidator(); private Provider mProvider; private Button mManualButton; @@ -242,15 +241,10 @@ public class AccountSetupBasics extends AccountSetupActivity mEmailView = (EditText) UiUtilities.getView(this, R.id.account_email); mPasswordView = (EditText) UiUtilities.getView(this, R.id.account_password); - mDefaultView = (CheckBox) UiUtilities.getView(this, R.id.account_default); mEmailView.addTextChangedListener(this); mPasswordView.addTextChangedListener(this); - // If there are one or more accounts already in existence, then display - // the "use as default" checkbox (it defaults to hidden). - new DisplayCheckboxTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); - boolean manualButtonDisplayed = true; // Configure buttons @@ -432,16 +426,20 @@ public class AccountSetupBasics extends AccountSetupActivity private final Callable mOwnerLookupCallable = new Callable() { @Override public String call() { - Context context = AccountSetupBasics.this; - String name = null; - long defaultId = Account.getDefaultAccountId(context); + final Context context = AccountSetupBasics.this; + + final long lastUsedAccountId = + Preferences.getPreferences(context).getLastUsedAccountId(); + final long defaultId = Account.getDefaultAccountId(context, lastUsedAccountId); + if (defaultId != -1) { - Account account = Account.restoreAccountWithId(context, defaultId); + final Account account = Account.restoreAccountWithId(context, defaultId); if (account != null) { - name = account.getSenderName(); + return account.getSenderName(); } } - return name; + + return null; } }; @@ -469,7 +467,7 @@ public class AccountSetupBasics extends AccountSetupActivity sendAuth.setLogin(mProvider.outgoingUsername, password); // Populate the setup data, assuming that the duplicate account check will succeed - populateSetupData(getOwnerName(), email, mDefaultView.isChecked()); + populateSetupData(getOwnerName(), email); // Stop here if the login credentials duplicate an existing account // Launch an Async task to do the work @@ -590,7 +588,7 @@ public class AccountSetupBasics extends AccountSetupActivity sendAuth.setLogin(user, password); sendAuth.setConnection(null, domain, HostAuth.PORT_UNKNOWN, HostAuth.FLAG_NONE); - populateSetupData(getOwnerName(), email, mDefaultView.isChecked()); + populateSetupData(getOwnerName(), email); SetupData.setAllowAutodiscover(allowAutoDiscover); AccountSetupType.actionSelectAccountType(this); @@ -616,7 +614,7 @@ public class AccountSetupBasics extends AccountSetupActivity HostAuth sendAuth = account.getOrCreateHostAuthSend(this); HostAuth.setHostAuthFromString(sendAuth, outgoing); - populateSetupData(user, email, false); + populateSetupData(user, email); } catch (URISyntaxException e) { // If we can't set up the URL, don't continue - account setup pages will fail too Toast.makeText( @@ -638,13 +636,11 @@ public class AccountSetupBasics extends AccountSetupActivity /** * Populate SetupData's account with complete setup info. */ - private void populateSetupData(String senderName, String senderEmail, boolean isDefault) { + private void populateSetupData(String senderName, String senderEmail) { Account account = SetupData.getAccount(); account.setSenderName(senderName); account.setEmailAddress(senderEmail); account.setDisplayName(senderEmail); - account.setDefaultAccount(isDefault); - SetupData.setDefault(isDefault); // TODO - why duplicated, if already set in account setDefaultsForProtocol(this, account); } @@ -674,28 +670,6 @@ public class AccountSetupBasics extends AccountSetupActivity throw new IllegalStateException(); } - /** - * AsyncTask checks count of accounts and displays "use this account as default" checkbox - * if there are more than one. - */ - private class DisplayCheckboxTask extends AsyncTask { - - @Override - protected Integer doInBackground(Void... params) { - return EmailContent.count(AccountSetupBasics.this, Account.CONTENT_URI); - } - - @Override - protected void onPostExecute(Integer numAccounts) { - if (numAccounts > 0) { - Activity a = AccountSetupBasics.this; - UiUtilities.setVisibilitySafe(mDefaultView, View.VISIBLE); - UiUtilities.setVisibilitySafe(a, R.id.account_default_divider_1, View.VISIBLE); - UiUtilities.setVisibilitySafe(a, R.id.account_default_divider_2, View.VISIBLE); - } - } - } - private void onEnableProceedButtons(boolean enabled) { mManualButton.setEnabled(enabled); mNextButton.setEnabled(enabled); diff --git a/src/com/android/email/activity/setup/AccountSetupOptions.java b/src/com/android/email/activity/setup/AccountSetupOptions.java index 9bd37117a..62f1cbe01 100644 --- a/src/com/android/email/activity/setup/AccountSetupOptions.java +++ b/src/com/android/email/activity/setup/AccountSetupOptions.java @@ -57,7 +57,6 @@ import java.io.IOException; public class AccountSetupOptions extends AccountSetupActivity implements OnClickListener { private Spinner mCheckFrequencyView; private Spinner mSyncWindowView; - private CheckBox mDefaultView; private CheckBox mNotifyView; private CheckBox mSyncContactsView; private CheckBox mSyncCalendarView; @@ -86,7 +85,6 @@ public class AccountSetupOptions extends AccountSetupActivity implements OnClick mCheckFrequencyView = (Spinner) UiUtilities.getView(this, R.id.account_check_frequency); mSyncWindowView = (Spinner) UiUtilities.getView(this, R.id.account_sync_window); - mDefaultView = (CheckBox) UiUtilities.getView(this, R.id.account_default); mNotifyView = (CheckBox) UiUtilities.getView(this, R.id.account_notify); mSyncContactsView = (CheckBox) UiUtilities.getView(this, R.id.account_sync_contacts); mSyncCalendarView = (CheckBox) UiUtilities.getView(this, R.id.account_sync_calendar); @@ -121,12 +119,6 @@ public class AccountSetupOptions extends AccountSetupActivity implements OnClick enableLookbackSpinner(); } - // Note: It is OK to use mAccount.mIsDefault here *only* because the account - // has not been written to the DB yet. Ordinarily, call Account.getDefaultAccountId(). - if (account.mIsDefault || SetupData.isDefault()) { - mDefaultView.setChecked(true); - } - mNotifyView.setChecked(true); // By default, we want notifications on SpinnerOption.setSpinnerOptionValue(mCheckFrequencyView, account.getSyncInterval()); @@ -221,7 +213,6 @@ public class AccountSetupOptions extends AccountSetupActivity implements OnClick int window = (Integer)((SpinnerOption)mSyncWindowView.getSelectedItem()).value; account.setSyncLookback(window); } - account.setDefaultAccount(mDefaultView.isChecked()); if (account.mHostAuthRecv == null) { throw new IllegalStateException("in AccountSetupOptions with null mHostAuthRecv"); diff --git a/src/com/android/email/activity/setup/SetupData.java b/src/com/android/email/activity/setup/SetupData.java index c753cb562..d083aad3c 100644 --- a/src/com/android/email/activity/setup/SetupData.java +++ b/src/com/android/email/activity/setup/SetupData.java @@ -57,7 +57,6 @@ public class SetupData implements Parcelable { private boolean mAllowAutodiscover = true; private Policy mPolicy; private boolean mAutoSetup = false; - private boolean mDefault = false; private AccountAuthenticatorResponse mAccountAuthenticatorResponse = null; // We only have one instance of SetupData; if/when the process is destroyed, this data will be @@ -151,14 +150,6 @@ public class SetupData implements Parcelable { getInstance().mAutoSetup = autoSetup; } - static public boolean isDefault() { - return getInstance().mDefault; - } - - static public void setDefault(boolean _default) { - getInstance().mDefault = _default; - } - static public AccountAuthenticatorResponse getAccountAuthenticatorResponse() { return getInstance().mAccountAuthenticatorResponse; } @@ -197,7 +188,6 @@ public class SetupData implements Parcelable { mAllowAutodiscover = true; mCheckSettingsMode = 0; mAccount = new Account(); - mDefault = false; mUsername = null; mPassword = null; mAccountAuthenticatorResponse = null; @@ -232,7 +222,6 @@ public class SetupData implements Parcelable { dest.writeInt(mAllowAutodiscover ? 1 : 0); dest.writeParcelable(mPolicy, 0); dest.writeInt(mAutoSetup ? 1 : 0); - dest.writeInt(mDefault ? 1 : 0); dest.writeParcelable(mAccountAuthenticatorResponse, 0); } @@ -246,7 +235,6 @@ public class SetupData implements Parcelable { mAllowAutodiscover = in.readInt() == 1; mPolicy = in.readParcelable(loader); mAutoSetup = in.readInt() == 1; - mDefault = in.readInt() == 1; mAccountAuthenticatorResponse = in.readParcelable(loader); } @@ -276,7 +264,6 @@ public class SetupData implements Parcelable { } sb.append(":a/d=" + data.mAllowAutodiscover); sb.append(":auto=" + data.mAutoSetup); - sb.append(":default=" + data.mDefault); sb.append(":check="); if (SetupData.isCheckIncoming()) sb.append("in+"); if (SetupData.isCheckOutgoing()) sb.append("out+"); diff --git a/src/com/android/email/provider/EmailProvider.java b/src/com/android/email/provider/EmailProvider.java index ef9439696..dca1d94f8 100644 --- a/src/com/android/email/provider/EmailProvider.java +++ b/src/com/android/email/provider/EmailProvider.java @@ -166,10 +166,9 @@ public class EmailProvider extends ContentProvider { private static final int ACCOUNT_ID = ACCOUNT_BASE + 1; private static final int ACCOUNT_RESET_NEW_COUNT = ACCOUNT_BASE + 2; private static final int ACCOUNT_RESET_NEW_COUNT_ID = ACCOUNT_BASE + 3; - private static final int ACCOUNT_DEFAULT_ID = ACCOUNT_BASE + 4; - private static final int ACCOUNT_CHECK = ACCOUNT_BASE + 5; - private static final int ACCOUNT_PICK_TRASH_FOLDER = ACCOUNT_BASE + 6; - private static final int ACCOUNT_PICK_SENT_FOLDER = ACCOUNT_BASE + 7; + private static final int ACCOUNT_CHECK = ACCOUNT_BASE + 4; + private static final int ACCOUNT_PICK_TRASH_FOLDER = ACCOUNT_BASE + 5; + private static final int ACCOUNT_PICK_SENT_FOLDER = ACCOUNT_BASE + 6; private static final int MAILBOX_BASE = 0x1000; private static final int MAILBOX = MAILBOX_BASE; @@ -856,7 +855,6 @@ public class EmailProvider extends ContentProvider { // A specific account // insert into this URI causes a mailbox to be added to the account matcher.addURI(EmailContent.AUTHORITY, "account/#", ACCOUNT_ID); - matcher.addURI(EmailContent.AUTHORITY, "account/default", ACCOUNT_DEFAULT_ID); matcher.addURI(EmailContent.AUTHORITY, "accountCheck/#", ACCOUNT_CHECK); // Special URI to reset the new message count. Only update works, and values @@ -1096,31 +1094,6 @@ public class EmailProvider extends ContentProvider { case MAILBOX_MESSAGE_COUNT: c = getMailboxMessageCount(uri); return c; - case ACCOUNT_DEFAULT_ID: - // We want either the row which has isDefault set, or we want the lowest valued - // account id if none are isDefault. I don't think there's a way to express this - // simply in sql so we get all account ids and loop through them manually. - final Cursor accounts = db.query(Account.TABLE_NAME, - Account.ACCOUNT_IS_DEFAULT_PROJECTION, - null, null, null, null, null, null); - long defaultAccountId = Account.NO_ACCOUNT; - while (accounts.moveToNext()) { - final long accountId = - accounts.getLong(Account.ACCOUNT_IS_DEFAULT_COLUMN_ID); - if (accounts.getInt(Account.ACCOUNT_IS_DEFAULT_COLUMN_IS_DEFAULT) == 1) { - defaultAccountId = accountId; - break; - } else if (defaultAccountId == Account.NO_ACCOUNT || - accountId < defaultAccountId) { - defaultAccountId = accountId; - } - } - // Return a cursor with an id projection - final MatrixCursor mc = - new MatrixCursorWithCachedColumns(EmailContent.ID_PROJECTION, 1); - mc.addRow(new Object[] {defaultAccountId}); - c = mc; - break; case BODY: case MESSAGE: case UPDATED_MESSAGE: @@ -1617,8 +1590,13 @@ public class EmailProvider extends ContentProvider { Uri messageUri = null; if (TextUtils.equals(method, UIProvider.AccountCallMethods.SEND_MESSAGE)) { messageUri = uiSendDraftMessage(accountId, extras); + Preferences.getPreferences(getContext()).setLastUsedAccountId(accountId); } else if (TextUtils.equals(method, UIProvider.AccountCallMethods.SAVE_MESSAGE)) { messageUri = uiSaveDraftMessage(accountId, extras); + } else if (TextUtils.equals(method, UIProvider.AccountCallMethods.SET_CURRENT_ACCOUNT)) { + LogUtils.d(TAG, "Unhandled (but expected) Content provider method: %s", method); + } else { + LogUtils.wtf(TAG, "Unexpected Content provider method: %s", method); } final Bundle result; @@ -2759,7 +2737,9 @@ public class EmailProvider extends ContentProvider { } private void addCombinedAccountRow(MatrixCursor mc) { - final long id = Account.getDefaultAccountId(getContext()); + final long lastUsedAccountId = + Preferences.getPreferences(getContext()).getLastUsedAccountId(); + final long id = Account.getDefaultAccountId(getContext(), lastUsedAccountId); if (id == Account.NO_ACCOUNT) return; // Build a map of the requested columns to the appropriate positions