SyncOperation.java revision 307da1a46b4c9b711bafe8fbaaa6b98e8868c18e
1307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintanapackage android.content; 2307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana 3307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintanaimport android.accounts.Account; 4307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintanaimport android.os.Bundle; 5307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintanaimport android.os.SystemClock; 6307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana 7307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana/** 8307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana * Value type that represents a sync operation. 9307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana * @hide 10307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana */ 11307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintanapublic class SyncOperation implements Comparable { 12307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana public final Account account; 13307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana public int syncSource; 14307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana public String authority; 15307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana public Bundle extras; 16307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana public final String key; 17307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana public long earliestRunTime; 18307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana public boolean expedited; 19307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana public SyncStorageEngine.PendingOperation pendingOperation; 20307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana 21307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana public SyncOperation(Account account, int source, String authority, Bundle extras, 22307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana long delay) { 23307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana this.account = account; 24307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana this.syncSource = source; 25307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana this.authority = authority; 26307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana this.extras = new Bundle(extras); 27307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana removeFalseExtra(ContentResolver.SYNC_EXTRAS_UPLOAD); 28307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana removeFalseExtra(ContentResolver.SYNC_EXTRAS_MANUAL); 29307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana removeFalseExtra(ContentResolver.SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS); 30307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana removeFalseExtra(ContentResolver.SYNC_EXTRAS_EXPEDITED); 31307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana removeFalseExtra(ContentResolver.SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS); 32307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana final long now = SystemClock.elapsedRealtime(); 33307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana if (delay < 0) { 34307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana this.expedited = true; 35307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana this.earliestRunTime = now; 36307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana } else { 37307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana this.expedited = false; 38307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana this.earliestRunTime = now + delay; 39307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana } 40307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana this.key = toKey(); 41307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana } 42307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana 43307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana private void removeFalseExtra(String extraName) { 44307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana if (!extras.getBoolean(extraName, false)) { 45307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana extras.remove(extraName); 46307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana } 47307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana } 48307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana 49307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana SyncOperation(SyncOperation other) { 50307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana this.account = other.account; 51307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana this.syncSource = other.syncSource; 52307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana this.authority = other.authority; 53307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana this.extras = new Bundle(other.extras); 54307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana this.expedited = other.expedited; 55307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana this.earliestRunTime = SystemClock.elapsedRealtime(); 56307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana this.key = toKey(); 57307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana } 58307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana 59307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana public String toString() { 60307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana StringBuilder sb = new StringBuilder(); 61307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana sb.append("authority: ").append(authority); 62307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana sb.append(" account: ").append(account); 63307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana sb.append(" extras: "); 64307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana extrasToStringBuilder(extras, sb); 65307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana sb.append(" syncSource: ").append(syncSource); 66307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana sb.append(" when: ").append(earliestRunTime); 67307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana sb.append(" expedited: ").append(expedited); 68307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana return sb.toString(); 69307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana } 70307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana 71307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana private String toKey() { 72307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana StringBuilder sb = new StringBuilder(); 73307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana sb.append("authority: ").append(authority); 74307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana sb.append(" account: ").append(account); 75307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana sb.append(" extras: "); 76307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana extrasToStringBuilder(extras, sb); 77307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana return sb.toString(); 78307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana } 79307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana 80307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana public static void extrasToStringBuilder(Bundle bundle, StringBuilder sb) { 81307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana sb.append("["); 82307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana for (String key : bundle.keySet()) { 83307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana sb.append(key).append("=").append(bundle.get(key)).append(" "); 84307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana } 85307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana sb.append("]"); 86307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana } 87307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana 88307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana public int compareTo(Object o) { 89307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana SyncOperation other = (SyncOperation)o; 90307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana if (earliestRunTime == other.earliestRunTime) { 91307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana return 0; 92307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana } 93307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana return (earliestRunTime < other.earliestRunTime) ? -1 : 1; 94307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana } 95307da1a46b4c9b711bafe8fbaaa6b98e8868c18eFred Quintana} 96