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