diff options
author | Dianne Hackborn <hackbod@google.com> | 2009-04-29 18:20:00 -0700 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2009-05-05 12:41:42 -0700 |
commit | 0d7f0197e6c9d3603c67dbe19006a3ebc904bc77 (patch) | |
tree | d1a854097539382f57a9ca7c344a26137ae094aa | |
parent | 0de8da0195f6ad14a403b4d713d461caf8ce0e31 (diff) | |
download | GoogleSubscribedFeedsProvider-0d7f0197e6c9d3603c67dbe19006a3ebc904bc77.tar.gz |
Update for SyncStorageEngine rewrite.
-rw-r--r-- | src/com/android/settings/SyncSettings.java | 196 |
1 files changed, 82 insertions, 114 deletions
diff --git a/src/com/android/settings/SyncSettings.java b/src/com/android/settings/SyncSettings.java index ce7496e..930d11d 100644 --- a/src/com/android/settings/SyncSettings.java +++ b/src/com/android/settings/SyncSettings.java @@ -21,11 +21,16 @@ import com.android.providers.subscribedfeeds.R; import android.app.ActivityThread; import android.app.AlertDialog; import android.app.Dialog; +import android.content.ActiveSyncInfo; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.content.DialogInterface; +import android.content.IContentService; +import android.content.ISyncStatusObserver; import android.content.Intent; +import android.content.SyncStatusInfo; +import android.content.SyncStorageEngine; import android.content.pm.ProviderInfo; import android.net.ConnectivityManager; import android.net.Uri; @@ -37,7 +42,6 @@ import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceScreen; import android.provider.Gmail; -import android.provider.Sync; import android.provider.SubscribedFeeds; import android.text.TextUtils; import android.view.Menu; @@ -55,10 +59,9 @@ import java.util.Observer; import com.google.android.googlelogin.GoogleLoginServiceConstants; import com.google.android.googlelogin.GoogleLoginServiceHelper; -public class SyncSettings - extends PreferenceActivity - implements Observer { +public class SyncSettings extends PreferenceActivity { + IContentService mContentService; List<String> mProviderNames; List<ProviderInfo> mProviderInfos; @@ -80,20 +83,18 @@ public class SyncSettings private static final String BACKGROUND_DATA_INTENT_EXTRA_NAME = "value"; - Sync.Settings.QueryMap mSyncSettings; - private static final int MENU_SYNC_NOW_ID = Menu.FIRST; private static final int MENU_SYNC_CANCEL_ID = Menu.FIRST + 1; private static final int GET_ACCOUNT_REQUEST = 14376; - private Sync.Active.QueryMap mActiveSyncQueryMap = null; - private Sync.Status.QueryMap mStatusSyncQueryMap = null; - private static final int DIALOG_DISABLE_BACKGROUND_DATA = 1; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); + + mContentService = ContentResolver.getContentService(); + setContentView(R.layout.sync_settings_list_content); addPreferencesFromResource(R.xml.sync_settings); @@ -105,20 +106,6 @@ public class SyncSettings mDateFormat = DateFormat.getDateFormat(this); mTimeFormat = DateFormat.getTimeFormat(this); - mStatusSyncQueryMap = new Sync.Status.QueryMap(getContentResolver(), - false /* don't keep updated yet, we will change this in onResume()/onPause() */, - null /* use this thread's handler for notifications */); - mStatusSyncQueryMap.addObserver(mSyncSuccessesObserver); - - mActiveSyncQueryMap = new Sync.Active.QueryMap(getContentResolver(), - false /* don't keep updated yet, we will change this in onResume()/onPause() */, - null /* use this thread's handler for notifications */); - mActiveSyncQueryMap.addObserver(mSyncActiveObserver); - - mSyncSettings = new Sync.Settings.QueryMap(getContentResolver(), - true /* keep updated */, null); - mSyncSettings.addObserver(this); - mAutoSyncCheckBox = (CheckBoxPreference) findPreference(SYNC_CHECKBOX_KEY); if (icicle == null) checkForAccount(); // First launch only; ignore orientation changes. @@ -166,7 +153,11 @@ public class SyncSettings @Override public boolean onPrepareOptionsMenu(Menu menu) { super.onPrepareOptionsMenu(menu); - final boolean syncActive = mActiveSyncQueryMap.getActiveSyncInfo() != null; + boolean syncActive = false; + try { + syncActive = mContentService.getActiveSync() != null; + } catch (RemoteException e) { + } menu.findItem(MENU_SYNC_NOW_ID).setVisible(!syncActive); menu.findItem(MENU_SYNC_CANCEL_ID).setVisible(syncActive); return true; @@ -204,33 +195,29 @@ public class SyncSettings @Override protected void onResume() { super.onResume(); - mActiveSyncQueryMap.setKeepUpdated(true); - mStatusSyncQueryMap.setKeepUpdated(true); + try { + mContentService.addStatusChangeListener( + SyncStorageEngine.CHANGE_ACTIVE + | SyncStorageEngine.CHANGE_STATUS + | SyncStorageEngine.CHANGE_SETTINGS, + mSyncStatusObserver); + } catch (RemoteException e) { + } onSyncStateUpdated(); } @Override protected void onPause() { super.onPause(); - mActiveSyncQueryMap.setKeepUpdated(false); - mStatusSyncQueryMap.setKeepUpdated(false); + try { + mContentService.removeStatusChangeListener(mSyncStatusObserver); + } catch (RemoteException e) { + } } @Override protected void onDestroy() { super.onDestroy(); - if (mSyncSettings != null) { - mSyncSettings.close(); - mSyncSettings = null; - } - if (mActiveSyncQueryMap != null) { - mActiveSyncQueryMap.close(); - mActiveSyncQueryMap = null; - } - if (mStatusSyncQueryMap != null) { - mStatusSyncQueryMap.close(); - mStatusSyncQueryMap = null; - } } private void initUI() { @@ -243,7 +230,10 @@ public class SyncSettings // Set the Auto Sync toggle state CheckBoxPreference autoSync = (CheckBoxPreference) findPreference(SYNC_CHECKBOX_KEY); - autoSync.setChecked(mSyncSettings.getListenForNetworkTickles()); + try { + autoSync.setChecked(mContentService.getListenForNetworkTickles()); + } catch (RemoteException e) { + } setOneTimeSyncMode(!autoSync.isChecked()); // Find individual sync provider's states and initialize the toggles @@ -254,8 +244,11 @@ public class SyncSettings if (pref.hasKey() && pref.getKey().startsWith(SYNC_KEY_PREFIX)) { CheckBoxPreference toggle = (CheckBoxPreference) pref; String providerName = toggle.getKey().substring(SYNC_KEY_PREFIX.length()); - boolean enabled = - mSyncSettings.getSyncProviderAutomatically(providerName); + boolean enabled = false; + try { + enabled = mContentService.getSyncProviderAutomatically(providerName); + } catch (RemoteException e) { + } toggle.setChecked(enabled); } } @@ -279,10 +272,17 @@ public class SyncSettings } } } else if (key.equals(SYNC_CHECKBOX_KEY)) { - boolean oldListenForTickles = mSyncSettings.getListenForNetworkTickles(); + boolean oldListenForTickles = false; + try { + oldListenForTickles = mContentService.getListenForNetworkTickles(); + } catch (RemoteException e) { + } boolean listenForTickles = togglePreference.isChecked(); if (oldListenForTickles != listenForTickles) { - mSyncSettings.setListenForNetworkTickles(listenForTickles); + try { + mContentService.setListenForNetworkTickles(listenForTickles); + } catch (RemoteException e) { + } Intent intent = new Intent(); intent.setAction(SYNC_CONNECTION_SETTING_CHANGED); sendBroadcast(intent); @@ -301,9 +301,16 @@ public class SyncSettings startSync(providerName); } else { boolean syncOn = togglePreference.isChecked(); - boolean oldSyncState = mSyncSettings.getSyncProviderAutomatically(providerName); + boolean oldSyncState = false; + try { + oldSyncState = mContentService.getSyncProviderAutomatically(providerName); + } catch (RemoteException e) { + } if (syncOn != oldSyncState) { - mSyncSettings.setSyncProviderAutomatically(providerName, syncOn); + try { + mContentService.setSyncProviderAutomatically(providerName, syncOn); + } catch (RemoteException e) { + } if (syncOn) { startSync(providerName); } else { @@ -411,63 +418,24 @@ public class SyncSettings getContentResolver().cancelSync(Uri.parse("content://" + authority)); } - private Observer mSyncSuccessesObserver = new Observer() { - public void update(Observable o, Object arg) { - onSyncStateUpdated(); - } - }; - - private Observer mSyncActiveObserver = new Observer() { - public void update(Observable o, Object arg) { - onSyncStateUpdated(); - } - }; - - /** - * Returns the status row that matches the authority. If there are multiples accounts for - * the authority, the row with the latest LAST_SUCCESS_TIME column is returned. - * @param authority the authority whose row should be selected - * @return the ContentValues for the authority, or null if none exists - */ - private ContentValues getStatusByAuthority(String authority) { - ContentValues row = null; - Map<String, ContentValues> rows = mStatusSyncQueryMap.getRows(); - for (ContentValues values : rows.values()) { - if (values.getAsString(Sync.Status.AUTHORITY).equals(authority)) { - if (row == null) { - row = values; - continue; + private ISyncStatusObserver mSyncStatusObserver = new ISyncStatusObserver.Stub() { + public void onStatusChanged(int which) throws RemoteException { + getWindow().getDecorView().getHandler().post(new Runnable() { + public void run() { + onSyncStateUpdated(); } - final Long curTime = row.getAsLong(Sync.Status.LAST_SUCCESS_TIME); - if (curTime == null) { - row = values; - continue; - } - final Long newTime = values.getAsLong(Sync.Status.LAST_SUCCESS_TIME); - if (newTime == null) continue; - if (newTime > curTime) { - row = values; - } - } - } - return row; - } - - boolean isAuthorityPending(String authority) { - Map<String, ContentValues> rows = mStatusSyncQueryMap.getRows(); - for (ContentValues values : rows.values()) { - if (values.getAsString(Sync.Status.AUTHORITY).equals(authority) - && values.getAsLong(Sync.Status.PENDING) != 0) { - return true; - } + }); } - return false; - } + }; private void onSyncStateUpdated() { // iterate over all the preferences, setting the state properly for each Date date = new Date(); - ContentValues activeSyncValues = mActiveSyncQueryMap.getActiveSyncInfo(); + ActiveSyncInfo activeSyncValues = null; + try { + activeSyncValues = mContentService.getActiveSync(); + } catch (RemoteException e) { + } boolean syncIsFailing = false; int count = getPreferenceScreen().getPreferenceCount(); for (int i = 0; i < count; i++) { @@ -476,24 +444,29 @@ public class SyncSettings if (!TextUtils.isEmpty(prefKey) && prefKey.startsWith(SYNC_KEY_PREFIX)) { String authority = prefKey.substring(SYNC_KEY_PREFIX.length()); SyncStateCheckBoxPreference toggle = (SyncStateCheckBoxPreference)pref; - ContentValues status = getStatusByAuthority(authority); - - boolean syncEnabled = mSyncSettings.getSyncProviderAutomatically(authority); + SyncStatusInfo status = null; + boolean syncEnabled = false; + boolean authorityIsPending = false; + try { + status = mContentService.getStatusByAuthority(authority); + syncEnabled = mContentService.getSyncProviderAutomatically(authority); + authorityIsPending = mContentService.isAuthorityPending(null, authority); + } catch (RemoteException e) { + } - boolean authorityIsPending = isAuthorityPending(authority); boolean activelySyncing = activeSyncValues != null - && activeSyncValues.getAsString(Sync.Active.AUTHORITY).equals(authority); + && activeSyncValues.authority.equals(authority); boolean lastSyncFailed = status != null - && status.getAsString(Sync.Status.LAST_FAILURE_MESG) != null - && status.getAsLong(Sync.Status.LAST_FAILURE_MESG) - != Sync.Status.ERROR_SYNC_ALREADY_IN_PROGRESS; + && status.lastFailureTime != 0 + && status.getLastFailureMesgAsInt(0) + != SyncStorageEngine.ERROR_SYNC_ALREADY_IN_PROGRESS; if (!syncEnabled) lastSyncFailed = false; if (lastSyncFailed && !activelySyncing && !authorityIsPending) { syncIsFailing = true; } - final Long successEndTime = - status == null ? null : status.getAsLong(Sync.Status.LAST_SUCCESS_TIME); - if (successEndTime != null) { + final long successEndTime = + status == null ? 0 : status.lastSuccessTime; + if (successEndTime != 0) { date.setTime(successEndTime); final String timeString = mDateFormat.format(date) + " " + mTimeFormat.format(date); @@ -508,9 +481,4 @@ public class SyncSettings } mErrorInfoView.setVisibility(syncIsFailing ? View.VISIBLE : View.GONE); } - - /** called when the sync settings change */ - public void update(Observable o, Object arg) { - onSyncStateUpdated(); - } } |