SyncResult.java revision 9066cfe9886ac131c34d59ed0e2d287b0e3c0087
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.content;
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcelable;
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This class is used to store information about the result of a sync
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic final class SyncResult implements Parcelable {
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final boolean syncAlreadyInProgress;
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean tooManyDeletions;
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean tooManyRetries;
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean databaseError;
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean fullSyncRequested;
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean partialSyncUnavailable;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean moreRecordsToGet;
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public final SyncStats stats;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final SyncResult ALREADY_IN_PROGRESS;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static {
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        ALREADY_IN_PROGRESS = new SyncResult(true);
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public SyncResult() {
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this(false);
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private SyncResult(boolean syncAlreadyInProgress) {
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.syncAlreadyInProgress = syncAlreadyInProgress;
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.tooManyDeletions = false;
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.tooManyRetries = false;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.fullSyncRequested = false;
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.partialSyncUnavailable = false;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.moreRecordsToGet = false;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        this.stats = new SyncStats();
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private SyncResult(Parcel parcel) {
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        syncAlreadyInProgress = parcel.readInt() != 0;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        tooManyDeletions = parcel.readInt() != 0;
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        tooManyRetries = parcel.readInt() != 0;
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        databaseError = parcel.readInt() != 0;
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        fullSyncRequested = parcel.readInt() != 0;
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        partialSyncUnavailable = parcel.readInt() != 0;
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        moreRecordsToGet = parcel.readInt() != 0;
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        stats = new SyncStats(parcel);
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean hasHardError() {
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return stats.numParseExceptions > 0
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                || stats.numConflictDetectedExceptions > 0
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                || stats.numAuthExceptions > 0
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                || tooManyDeletions
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                || tooManyRetries
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                || databaseError;
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean hasSoftError() {
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return syncAlreadyInProgress || stats.numIoExceptions > 0;
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean hasError() {
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return hasSoftError() || hasHardError();
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public boolean madeSomeProgress() {
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return ((stats.numDeletes > 0) && !tooManyDeletions)
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                || stats.numInserts > 0
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                || stats.numUpdates > 0;
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void clear() {
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (syncAlreadyInProgress) {
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            throw new UnsupportedOperationException(
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    "you are not allowed to clear the ALREADY_IN_PROGRESS SyncStats");
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        tooManyDeletions = false;
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        tooManyRetries = false;
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        databaseError = false;
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        fullSyncRequested = false;
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        partialSyncUnavailable = false;
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        moreRecordsToGet = false;
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        stats.clear();
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public static final Creator<SyncResult> CREATOR = new Creator<SyncResult>() {
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public SyncResult createFromParcel(Parcel in) {
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new SyncResult(in);
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        public SyncResult[] newArray(int size) {
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            return new SyncResult[size];
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    };
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int describeContents() {
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel parcel, int flags) {
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeInt(syncAlreadyInProgress ? 1 : 0);
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeInt(tooManyDeletions ? 1 : 0);
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeInt(tooManyRetries ? 1 : 0);
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeInt(databaseError ? 1 : 0);
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeInt(fullSyncRequested ? 1 : 0);
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeInt(partialSyncUnavailable ? 1 : 0);
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        parcel.writeInt(moreRecordsToGet ? 1 : 0);
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        stats.writeToParcel(parcel, flags);
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toString() {
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        StringBuilder sb = new StringBuilder();
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(" syncAlreadyInProgress: ").append(syncAlreadyInProgress);
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(" tooManyDeletions: ").append(tooManyDeletions);
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(" tooManyRetries: ").append(tooManyRetries);
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(" databaseError: ").append(databaseError);
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(" fullSyncRequested: ").append(fullSyncRequested);
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(" partialSyncUnavailable: ").append(partialSyncUnavailable);
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(" moreRecordsToGet: ").append(moreRecordsToGet);
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        sb.append(" stats: ").append(stats);
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return sb.toString();
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Generates a debugging string indicating the status.
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * The string consist of a sequence of code letter followed by the count.
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Code letters are f - fullSyncRequested, r - partialSyncUnavailable,
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * X - hardError, e - numParseExceptions, c - numConflictDetectedExceptions,
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * a - numAuthExceptions, D - tooManyDeletions, R - tooManyRetries,
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * b - databaseError, x - softError, l - syncAlreadyInProgress,
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * I - numIoExceptions
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return debugging string.
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public String toDebugString() {
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        StringBuffer sb = new StringBuffer();
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (fullSyncRequested) {
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append("f1");
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (partialSyncUnavailable) {
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append("r1");
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (hasHardError()) {
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append("X1");
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (stats.numParseExceptions > 0) {
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append("e").append(stats.numParseExceptions);
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (stats.numConflictDetectedExceptions > 0) {
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append("c").append(stats.numConflictDetectedExceptions);
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (stats.numAuthExceptions > 0) {
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append("a").append(stats.numAuthExceptions);
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (tooManyDeletions) {
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append("D1");
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (tooManyRetries) {
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append("R1");
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (databaseError) {
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append("b1");
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (hasSoftError()) {
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append("x1");
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (syncAlreadyInProgress) {
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append("l1");
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (stats.numIoExceptions > 0) {
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            sb.append("I").append(stats.numIoExceptions);
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return sb.toString();
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
179