diff options
Diffstat (limited to 'core/java/android/content/PeriodicSync.java')
-rw-r--r-- | core/java/android/content/PeriodicSync.java | 150 |
1 files changed, 131 insertions, 19 deletions
diff --git a/core/java/android/content/PeriodicSync.java b/core/java/android/content/PeriodicSync.java index 513a556..6aca151 100644 --- a/core/java/android/content/PeriodicSync.java +++ b/core/java/android/content/PeriodicSync.java @@ -22,67 +22,170 @@ import android.os.Parcel; import android.accounts.Account; /** - * Value type that contains information about a periodic sync. Is parcelable, making it suitable - * for passing in an IPC. + * Value type that contains information about a periodic sync. */ public class PeriodicSync implements Parcelable { - /** The account to be synced */ + /** The account to be synced. Can be null. */ public final Account account; - /** The authority of the sync */ + /** The authority of the sync. Can be null. */ public final String authority; + /** The service for syncing, if this is an anonymous sync. Can be null.*/ + public final ComponentName service; /** Any extras that parameters that are to be passed to the sync adapter. */ public final Bundle extras; - /** How frequently the sync should be scheduled, in seconds. */ + /** How frequently the sync should be scheduled, in seconds. Kept around for API purposes. */ public final long period; + /** Whether this periodic sync uses a service. */ + public final boolean isService; + /** + * How much flexibility can be taken in scheduling the sync, in seconds. + * {@hide} + */ + public final long flexTime; - /** Creates a new PeriodicSync, copying the Bundle */ - public PeriodicSync(Account account, String authority, Bundle extras, long period) { + /** + * Creates a new PeriodicSync, copying the Bundle. SM no longer uses this ctor - kept around + * becuse it is part of the API. + * Note - even calls to the old API will not use this ctor, as + * they are given a default flex time. + */ + public PeriodicSync(Account account, String authority, Bundle extras, long periodInSeconds) { this.account = account; this.authority = authority; + this.service = null; + this.isService = false; + if (extras == null) { + this.extras = new Bundle(); + } else { + this.extras = new Bundle(extras); + } + this.period = periodInSeconds; + // Old API uses default flex time. No-one should be using this ctor anyway. + this.flexTime = 0L; + } + + // TODO: Add copy ctor from SyncRequest? + + /** + * Create a copy of a periodic sync. + * {@hide} + */ + public PeriodicSync(PeriodicSync other) { + this.account = other.account; + this.authority = other.authority; + this.service = other.service; + this.isService = other.isService; + this.extras = new Bundle(other.extras); + this.period = other.period; + this.flexTime = other.flexTime; + } + + /** + * A PeriodicSync for a sync with a specified provider. + * {@hide} + */ + public PeriodicSync(Account account, String authority, Bundle extras, + long period, long flexTime) { + this.account = account; + this.authority = authority; + this.service = null; + this.isService = false; + this.extras = new Bundle(extras); + this.period = period; + this.flexTime = flexTime; + } + + /** + * A PeriodicSync for a sync with a specified SyncService. + * {@hide} + */ + public PeriodicSync(ComponentName service, Bundle extras, + long period, + long flexTime) { + this.account = null; + this.authority = null; + this.service = service; + this.isService = true; this.extras = new Bundle(extras); this.period = period; + this.flexTime = flexTime; } + private PeriodicSync(Parcel in) { + this.isService = (in.readInt() != 0); + if (this.isService) { + this.service = in.readParcelable(null); + this.account = null; + this.authority = null; + } else { + this.account = in.readParcelable(null); + this.authority = in.readString(); + this.service = null; + } + this.extras = in.readBundle(); + this.period = in.readLong(); + this.flexTime = in.readLong(); + } + + @Override public int describeContents() { return 0; } + @Override public void writeToParcel(Parcel dest, int flags) { - account.writeToParcel(dest, flags); - dest.writeString(authority); + dest.writeInt(isService ? 1 : 0); + if (account == null && authority == null) { + dest.writeParcelable(service, flags); + } else { + dest.writeParcelable(account, flags); + dest.writeString(authority); + } dest.writeBundle(extras); dest.writeLong(period); + dest.writeLong(flexTime); } public static final Creator<PeriodicSync> CREATOR = new Creator<PeriodicSync>() { + @Override public PeriodicSync createFromParcel(Parcel source) { - return new PeriodicSync(Account.CREATOR.createFromParcel(source), - source.readString(), source.readBundle(), source.readLong()); + return new PeriodicSync(source); } + @Override public PeriodicSync[] newArray(int size) { return new PeriodicSync[size]; } }; + @Override public boolean equals(Object o) { if (o == this) { return true; } - if (!(o instanceof PeriodicSync)) { return false; } - final PeriodicSync other = (PeriodicSync) o; - - return account.equals(other.account) - && authority.equals(other.authority) - && period == other.period - && syncExtrasEquals(extras, other.extras); + if (this.isService != other.isService) { + return false; + } + boolean equal = false; + if (this.isService) { + equal = service.equals(other.service); + } else { + equal = account.equals(other.account) + && authority.equals(other.authority); + } + return equal + && period == other.period + && syncExtrasEquals(extras, other.extras); } - /** {@hide} */ + /** + * Periodic sync extra comparison function. + * {@hide} + */ public static boolean syncExtrasEquals(Bundle b1, Bundle b2) { if (b1.size() != b2.size()) { return false; @@ -100,4 +203,13 @@ public class PeriodicSync implements Parcelable { } return true; } + + @Override + public String toString() { + return "account: " + account + + ", authority: " + authority + + ", service: " + service + + ". period: " + period + "s " + + ", flex: " + flexTime; + } } |