diff options
Diffstat (limited to 'src/com')
4 files changed, 57 insertions, 13 deletions
diff --git a/src/com/android/email/activity/setup/AccountCheckSettingsFragment.java b/src/com/android/email/activity/setup/AccountCheckSettingsFragment.java index a9c1a9691..f11f54cd2 100644 --- a/src/com/android/email/activity/setup/AccountCheckSettingsFragment.java +++ b/src/com/android/email/activity/setup/AccountCheckSettingsFragment.java @@ -417,6 +417,10 @@ public class AccountCheckSettingsFragment extends Fragment { EmailServiceProxy.VALIDATE_BUNDLE_ERROR_MESSAGE); return new MessagingException(resultCode, errorMessage); } + + // Save account capabilities + mAccount.mCapabilities = bundle.getInt( + EmailServiceProxy.SETTINGS_BUNDLE_CAPABILITIES, 0); } final EmailServiceInfo info; diff --git a/src/com/android/email/activity/setup/AccountSettingsFragment.java b/src/com/android/email/activity/setup/AccountSettingsFragment.java index 97d4f9ea8..26e476455 100644 --- a/src/com/android/email/activity/setup/AccountSettingsFragment.java +++ b/src/com/android/email/activity/setup/AccountSettingsFragment.java @@ -69,6 +69,7 @@ import com.android.emailcommon.provider.EmailContent; import com.android.emailcommon.provider.EmailContent.AccountColumns; import com.android.emailcommon.provider.Mailbox; import com.android.emailcommon.provider.Policy; +import com.android.emailcommon.service.EmailServiceProxy; import com.android.mail.preferences.AccountPreferences; import com.android.mail.preferences.FolderPreferences; import com.android.mail.preferences.FolderPreferences.NotificationLight; @@ -84,7 +85,9 @@ import com.android.mail.utils.LogUtils; import com.android.mail.utils.NotificationUtils; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; /** @@ -243,10 +246,7 @@ public class AccountSettingsFragment extends MailAccountPrefsFragment final CharSequence [] syncIntervals = savedInstanceState.getCharSequenceArray(SAVESTATE_SYNC_INTERVALS); mCheckFrequency = (ListPreference) findPreference(PREFERENCE_FREQUENCY); - if (mCheckFrequency != null) { - mCheckFrequency.setEntries(syncIntervalStrings); - mCheckFrequency.setEntryValues(syncIntervals); - } + fillCheckFrecuency(syncIntervalStrings, syncIntervals); } } @@ -382,16 +382,15 @@ public class AccountSettingsFragment extends MailAccountPrefsFragment final android.accounts.Account androidAcct = new android.accounts.Account( mAccount.mEmailAddress, mServiceInfo.accountType); if (Integer.parseInt(summary) == Account.CHECK_INTERVAL_NEVER) { - // Disable syncing from the account manager. Leave the current sync frequency - // in the database. + // Disable syncing from the account manager. ContentResolver.setSyncAutomatically(androidAcct, EmailContent.AUTHORITY, false); } else { // Enable syncing from the account manager. ContentResolver.setSyncAutomatically(androidAcct, EmailContent.AUTHORITY, true); - cv.put(AccountColumns.SYNC_INTERVAL, Integer.parseInt(summary)); } + cv.put(AccountColumns.SYNC_INTERVAL, Integer.parseInt(summary)); } } else if (key.equals(PREFERENCE_SYNC_WINDOW)) { final String summary = newValue.toString(); @@ -749,8 +748,7 @@ public class AccountSettingsFragment extends MailAccountPrefsFragment R.string.preferences_signature_summary_not_set); mCheckFrequency = (ListPreference) findPreference(PREFERENCE_FREQUENCY); - mCheckFrequency.setEntries(mServiceInfo.syncIntervalStrings); - mCheckFrequency.setEntryValues(mServiceInfo.syncIntervals); + fillCheckFrecuency(mServiceInfo.syncIntervalStrings, mServiceInfo.syncIntervals); if (mServiceInfo.syncContacts || mServiceInfo.syncCalendar) { // This account allows syncing of contacts and/or calendar, so we will always have // separate preferences to enable or disable syncing of email, contacts, and calendar. @@ -1182,4 +1180,28 @@ public class AccountSettingsFragment extends MailAccountPrefsFragment } mInboxLights.setOn(notificationLight.mOn); } + + private void fillCheckFrecuency(CharSequence[] labels, CharSequence[] values) { + if (mCheckFrequency == null) { + return; + } + + // Check push capability prior to include as an option + if (mAccount != null) { + boolean hasPushCapability = mAccount.hasCapability(EmailServiceProxy.CAPABILITY_PUSH); + List<CharSequence> valuesList = new ArrayList<>(Arrays.asList(values)); + int checkIntervalPushPos = valuesList.indexOf( + String.valueOf(Account.CHECK_INTERVAL_PUSH)); + if (!hasPushCapability && checkIntervalPushPos != -1) { + List<CharSequence> labelsList = new ArrayList<>(Arrays.asList(labels)); + labelsList.remove(checkIntervalPushPos); + valuesList.remove(checkIntervalPushPos); + labels = labelsList.toArray(new CharSequence[labelsList.size()]); + values = valuesList.toArray(new CharSequence[valuesList.size()]); + } + } + mCheckFrequency.setEntries(labels); + mCheckFrequency.setEntryValues(values); + mCheckFrequency.setDefaultValue(values); + } } diff --git a/src/com/android/email/activity/setup/AccountSetupFinal.java b/src/com/android/email/activity/setup/AccountSetupFinal.java index adaa32aa1..5386a7e4a 100644 --- a/src/com/android/email/activity/setup/AccountSetupFinal.java +++ b/src/com/android/email/activity/setup/AccountSetupFinal.java @@ -917,7 +917,7 @@ public class AccountSetupFinal extends AccountSetupActivity public void setDefaultsForProtocol(Account account) { final EmailServiceUtils.EmailServiceInfo info = mSetupData.getIncomingServiceInfo(this); if (info == null) return; - account.mSyncInterval = info.defaultSyncInterval; + account.setSyncInterval(info.defaultSyncInterval); account.mSyncLookback = info.defaultLookback; if (info.offerLocalDeletes) { account.setDeletePolicy(info.defaultLocalDeletes); diff --git a/src/com/android/email/activity/setup/AccountSetupOptionsFragment.java b/src/com/android/email/activity/setup/AccountSetupOptionsFragment.java index 9d048c119..287a0d323 100644 --- a/src/com/android/email/activity/setup/AccountSetupOptionsFragment.java +++ b/src/com/android/email/activity/setup/AccountSetupOptionsFragment.java @@ -29,8 +29,13 @@ import com.android.email.activity.UiUtilities; import com.android.email.service.EmailServiceUtils; import com.android.emailcommon.provider.Account; import com.android.emailcommon.provider.Policy; +import com.android.emailcommon.service.EmailServiceProxy; import com.android.emailcommon.service.SyncWindow; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + public class AccountSetupOptionsFragment extends AccountSetupFragment { private Spinner mCheckFrequencyView; private Spinner mSyncWindowView; @@ -90,11 +95,24 @@ public class AccountSetupOptionsFragment extends AccountSetupFragment { final CharSequence[] frequencyEntries = serviceInfo.syncIntervalStrings; // Now create the array used by the sync interval Spinner - final SpinnerOption[] checkFrequencies = new SpinnerOption[frequencyEntries.length]; + int checkIntervalPushPos = -1; + SpinnerOption[] checkFrequencies = new SpinnerOption[frequencyEntries.length]; for (int i = 0; i < frequencyEntries.length; i++) { - checkFrequencies[i] = new SpinnerOption( - Integer.valueOf(frequencyValues[i].toString()), frequencyEntries[i].toString()); + Integer value = Integer.valueOf(frequencyValues[i].toString()); + if (value.intValue() == Account.CHECK_INTERVAL_PUSH) { + checkIntervalPushPos = i; + } + checkFrequencies[i] = new SpinnerOption(value, frequencyEntries[i].toString()); } + + // Ensure that push capability is supported by the server + boolean hasPushCapability = account.hasCapability(EmailServiceProxy.CAPABILITY_PUSH); + if (!hasPushCapability && checkIntervalPushPos != -1) { + List<SpinnerOption> options = new ArrayList<>(Arrays.asList(checkFrequencies)); + options.remove(checkIntervalPushPos); + checkFrequencies = options.toArray(new SpinnerOption[options.size()]); + } + final ArrayAdapter<SpinnerOption> checkFrequenciesAdapter = new ArrayAdapter<>(getActivity(), android.R.layout.simple_spinner_item, checkFrequencies); |