diff options
author | Fabrice Di Meglio <fdimeglio@google.com> | 2010-12-14 19:45:11 -0800 |
---|---|---|
committer | Fabrice Di Meglio <fdimeglio@google.com> | 2010-12-15 14:31:50 -0800 |
commit | 31ffa0439d85b9abe06bd0ee35545524e36575fc (patch) | |
tree | 957495fba37373e3f38fb5b0423786c53ae7b4f7 /src/com | |
parent | 7553ebea45f7e5dba91224b2749be304a2a27d8f (diff) | |
download | packages_apps_Settings-31ffa0439d85b9abe06bd0ee35545524e36575fc.tar.gz packages_apps_Settings-31ffa0439d85b9abe06bd0ee35545524e36575fc.tar.bz2 packages_apps_Settings-31ffa0439d85b9abe06bd0ee35545524e36575fc.zip |
Fix bug #3248308 (On account set up, turn on sync for all apps by default; delay sync until after user selects Finish)
- reuse code by making AccountSyncSettings work in two modes: either use SyncManager or not
Change-Id: I29fc6820aa41ad4689745ed97d38248474033e7e
Diffstat (limited to 'src/com')
-rw-r--r-- | src/com/android/settings/accounts/AccountSyncSettings.java | 96 | ||||
-rw-r--r-- | src/com/android/settings/accounts/AccountSyncSettingsInAddAccount.java | 24 |
2 files changed, 72 insertions, 48 deletions
diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java index cbd8feedb..b782ed836 100644 --- a/src/com/android/settings/accounts/AccountSyncSettings.java +++ b/src/com/android/settings/accounts/AccountSyncSettings.java @@ -50,8 +50,6 @@ import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; -import android.view.View.OnClickListener; -import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; @@ -74,17 +72,17 @@ public class AccountSyncSettings extends AccountPreferenceBase { private TextView mProviderId; private ImageView mProviderIcon; private TextView mErrorInfoView; - protected View mRemoveAccountArea; private java.text.DateFormat mDateFormat; private java.text.DateFormat mTimeFormat; private Account mAccount; // List of all accounts, updated when accounts are added/removed // We need to re-scan the accounts on sync events, in case sync state changes. private Account[] mAccounts; - private Button mRemoveAccountButton; private ArrayList<SyncStateCheckBoxPreference> mCheckBoxes = new ArrayList<SyncStateCheckBoxPreference>(); private ArrayList<String> mInvisibleAdapters = Lists.newArrayList(); + // Tell if we will use the current SyncManager data or just the User input + protected boolean mUseSyncManagerFeedsState = true; @Override public Dialog onCreateDialog(final int id) { @@ -266,7 +264,7 @@ public class AccountSyncSettings extends AccountPreferenceBase { @Override public boolean onPreferenceTreeClick(PreferenceScreen preferences, Preference preference) { - if (preference instanceof SyncStateCheckBoxPreference) { + if (preference instanceof SyncStateCheckBoxPreference && mUseSyncManagerFeedsState) { SyncStateCheckBoxPreference syncPref = (SyncStateCheckBoxPreference) preference; String authority = syncPref.getAuthority(); Account account = syncPref.getAccount(); @@ -347,6 +345,10 @@ public class AccountSyncSettings extends AccountPreferenceBase { @Override protected void onSyncStateUpdated() { if (!isResumed()) return; + setFeedsState(mUseSyncManagerFeedsState); + } + + private void setFeedsState(boolean useSyncManager) { // iterate over all the preferences, setting the state properly for each Date date = new Date(); List<SyncInfo> currentSyncs = ContentResolver.getCurrentSyncs(); @@ -365,49 +367,53 @@ public class AccountSyncSettings extends AccountPreferenceBase { String authority = syncPref.getAuthority(); Account account = syncPref.getAccount(); - SyncStatusInfo status = ContentResolver.getSyncStatus(account, authority); - boolean syncEnabled = ContentResolver.getSyncAutomatically(account, authority); - boolean authorityIsPending = status == null ? false : status.pending; - boolean initialSync = status == null ? false : status.initialize; - - boolean activelySyncing = isSyncing(currentSyncs, account, authority); - boolean lastSyncFailed = status != null - && status.lastFailureTime != 0 - && status.getLastFailureMesgAsInt(0) - != ContentResolver.SYNC_ERROR_SYNC_ALREADY_IN_PROGRESS; - if (!syncEnabled) lastSyncFailed = false; - if (lastSyncFailed && !activelySyncing && !authorityIsPending) { - syncIsFailing = true; - } - if (Log.isLoggable(TAG, Log.VERBOSE)) { - Log.d(TAG, "Update sync status: " + account + " " + authority + - " active = " + activelySyncing + " pend =" + authorityIsPending); - } + if (useSyncManager) { + SyncStatusInfo status = ContentResolver.getSyncStatus(account, authority); + boolean syncEnabled = ContentResolver.getSyncAutomatically(account, authority); + boolean authorityIsPending = status == null ? false : status.pending; + boolean initialSync = status == null ? false : status.initialize; + + boolean activelySyncing = isSyncing(currentSyncs, account, authority); + boolean lastSyncFailed = status != null + && status.lastFailureTime != 0 + && status.getLastFailureMesgAsInt(0) + != ContentResolver.SYNC_ERROR_SYNC_ALREADY_IN_PROGRESS; + if (!syncEnabled) lastSyncFailed = false; + if (lastSyncFailed && !activelySyncing && !authorityIsPending) { + syncIsFailing = true; + } + if (Log.isLoggable(TAG, Log.VERBOSE)) { + Log.d(TAG, "Update sync status: " + account + " " + authority + + " active = " + activelySyncing + " pend =" + authorityIsPending); + } - final long successEndTime = (status == null) ? 0 : status.lastSuccessTime; - if (successEndTime != 0) { - date.setTime(successEndTime); - final String timeString = mDateFormat.format(date) + " " - + mTimeFormat.format(date); - syncPref.setSummary(timeString); + final long successEndTime = (status == null) ? 0 : status.lastSuccessTime; + if (successEndTime != 0) { + date.setTime(successEndTime); + final String timeString = mDateFormat.format(date) + " " + + mTimeFormat.format(date); + syncPref.setSummary(timeString); + } else { + syncPref.setSummary(""); + } + int syncState = ContentResolver.getIsSyncable(account, authority); + + syncPref.setActive(activelySyncing && (syncState >= 0) && + !initialSync); + syncPref.setPending(authorityIsPending && (syncState >= 0) && + !initialSync); + + syncPref.setFailed(lastSyncFailed); + ConnectivityManager connManager = + (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + final boolean masterSyncAutomatically = ContentResolver.getMasterSyncAutomatically(); + final boolean backgroundDataEnabled = connManager.getBackgroundDataSetting(); + final boolean oneTimeSyncMode = !masterSyncAutomatically || !backgroundDataEnabled; + syncPref.setOneTimeSyncMode(oneTimeSyncMode); + syncPref.setChecked(oneTimeSyncMode || syncEnabled); } else { - syncPref.setSummary(""); + syncPref.setChecked(true); } - int syncState = ContentResolver.getIsSyncable(account, authority); - - syncPref.setActive(activelySyncing && (syncState >= 0) && - !initialSync); - syncPref.setPending(authorityIsPending && (syncState >= 0) && - !initialSync); - - syncPref.setFailed(lastSyncFailed); - ConnectivityManager connManager = - (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); - final boolean masterSyncAutomatically = ContentResolver.getMasterSyncAutomatically(); - final boolean backgroundDataEnabled = connManager.getBackgroundDataSetting(); - final boolean oneTimeSyncMode = !masterSyncAutomatically || !backgroundDataEnabled; - syncPref.setOneTimeSyncMode(oneTimeSyncMode); - syncPref.setChecked(oneTimeSyncMode || syncEnabled); } mErrorInfoView.setVisibility(syncIsFailing ? View.VISIBLE : View.GONE); getActivity().invalidateOptionsMenu(); diff --git a/src/com/android/settings/accounts/AccountSyncSettingsInAddAccount.java b/src/com/android/settings/accounts/AccountSyncSettingsInAddAccount.java index 8fa576ab1..5b3af83f8 100644 --- a/src/com/android/settings/accounts/AccountSyncSettingsInAddAccount.java +++ b/src/com/android/settings/accounts/AccountSyncSettingsInAddAccount.java @@ -1,11 +1,11 @@ package com.android.settings.accounts; +import android.accounts.Account; +import android.content.ContentResolver; +import android.preference.Preference; import com.android.settings.R; -import android.app.Activity; -import android.content.ContentResolver; -import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; @@ -27,6 +27,8 @@ public class AccountSyncSettingsInAddAccount extends AccountSyncSettings mFinishArea.setVisibility(View.VISIBLE); mFinishButton = (View) rootView.findViewById(R.id.finish_button); mFinishButton.setOnClickListener(this); + + mUseSyncManagerFeedsState = false; } @Override @@ -37,6 +39,22 @@ public class AccountSyncSettingsInAddAccount extends AccountSyncSettings } public void onClick(View v) { + applySyncSettingsToSyncManager(); finish(); } + + private void applySyncSettingsToSyncManager() { + for (int i = 0, count = getPreferenceScreen().getPreferenceCount(); i < count; i++) { + Preference pref = getPreferenceScreen().getPreference(i); + if (! (pref instanceof SyncStateCheckBoxPreference)) { + continue; + } + SyncStateCheckBoxPreference syncPref = (SyncStateCheckBoxPreference) pref; + + String authority = syncPref.getAuthority(); + Account account = syncPref.getAccount(); + + ContentResolver.setSyncAutomatically(account, authority, syncPref.isChecked()); + } + } } |