summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorFabrice Di Meglio <fdimeglio@google.com>2010-12-14 19:45:11 -0800
committerFabrice Di Meglio <fdimeglio@google.com>2010-12-15 14:31:50 -0800
commit31ffa0439d85b9abe06bd0ee35545524e36575fc (patch)
tree957495fba37373e3f38fb5b0423786c53ae7b4f7 /src/com
parent7553ebea45f7e5dba91224b2749be304a2a27d8f (diff)
downloadpackages_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.java96
-rw-r--r--src/com/android/settings/accounts/AccountSyncSettingsInAddAccount.java24
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());
+ }
+ }
}