SyncResult.java revision 9066cfe9886ac131c34d59ed0e2d287b0e3c0087
1package android.content; 2 3import android.os.Parcel; 4import android.os.Parcelable; 5 6/** 7 * This class is used to store information about the result of a sync 8 * 9 * @hide 10 */ 11public final class SyncResult implements Parcelable { 12 public final boolean syncAlreadyInProgress; 13 public boolean tooManyDeletions; 14 public boolean tooManyRetries; 15 public boolean databaseError; 16 public boolean fullSyncRequested; 17 public boolean partialSyncUnavailable; 18 public boolean moreRecordsToGet; 19 public final SyncStats stats; 20 public static final SyncResult ALREADY_IN_PROGRESS; 21 22 static { 23 ALREADY_IN_PROGRESS = new SyncResult(true); 24 } 25 26 public SyncResult() { 27 this(false); 28 } 29 30 private SyncResult(boolean syncAlreadyInProgress) { 31 this.syncAlreadyInProgress = syncAlreadyInProgress; 32 this.tooManyDeletions = false; 33 this.tooManyRetries = false; 34 this.fullSyncRequested = false; 35 this.partialSyncUnavailable = false; 36 this.moreRecordsToGet = false; 37 this.stats = new SyncStats(); 38 } 39 40 private SyncResult(Parcel parcel) { 41 syncAlreadyInProgress = parcel.readInt() != 0; 42 tooManyDeletions = parcel.readInt() != 0; 43 tooManyRetries = parcel.readInt() != 0; 44 databaseError = parcel.readInt() != 0; 45 fullSyncRequested = parcel.readInt() != 0; 46 partialSyncUnavailable = parcel.readInt() != 0; 47 moreRecordsToGet = parcel.readInt() != 0; 48 stats = new SyncStats(parcel); 49 } 50 51 public boolean hasHardError() { 52 return stats.numParseExceptions > 0 53 || stats.numConflictDetectedExceptions > 0 54 || stats.numAuthExceptions > 0 55 || tooManyDeletions 56 || tooManyRetries 57 || databaseError; 58 } 59 60 public boolean hasSoftError() { 61 return syncAlreadyInProgress || stats.numIoExceptions > 0; 62 } 63 64 public boolean hasError() { 65 return hasSoftError() || hasHardError(); 66 } 67 68 public boolean madeSomeProgress() { 69 return ((stats.numDeletes > 0) && !tooManyDeletions) 70 || stats.numInserts > 0 71 || stats.numUpdates > 0; 72 } 73 74 public void clear() { 75 if (syncAlreadyInProgress) { 76 throw new UnsupportedOperationException( 77 "you are not allowed to clear the ALREADY_IN_PROGRESS SyncStats"); 78 } 79 tooManyDeletions = false; 80 tooManyRetries = false; 81 databaseError = false; 82 fullSyncRequested = false; 83 partialSyncUnavailable = false; 84 moreRecordsToGet = false; 85 stats.clear(); 86 } 87 88 public static final Creator<SyncResult> CREATOR = new Creator<SyncResult>() { 89 public SyncResult createFromParcel(Parcel in) { 90 return new SyncResult(in); 91 } 92 93 public SyncResult[] newArray(int size) { 94 return new SyncResult[size]; 95 } 96 }; 97 98 public int describeContents() { 99 return 0; 100 } 101 102 public void writeToParcel(Parcel parcel, int flags) { 103 parcel.writeInt(syncAlreadyInProgress ? 1 : 0); 104 parcel.writeInt(tooManyDeletions ? 1 : 0); 105 parcel.writeInt(tooManyRetries ? 1 : 0); 106 parcel.writeInt(databaseError ? 1 : 0); 107 parcel.writeInt(fullSyncRequested ? 1 : 0); 108 parcel.writeInt(partialSyncUnavailable ? 1 : 0); 109 parcel.writeInt(moreRecordsToGet ? 1 : 0); 110 stats.writeToParcel(parcel, flags); 111 } 112 113 @Override 114 public String toString() { 115 StringBuilder sb = new StringBuilder(); 116 sb.append(" syncAlreadyInProgress: ").append(syncAlreadyInProgress); 117 sb.append(" tooManyDeletions: ").append(tooManyDeletions); 118 sb.append(" tooManyRetries: ").append(tooManyRetries); 119 sb.append(" databaseError: ").append(databaseError); 120 sb.append(" fullSyncRequested: ").append(fullSyncRequested); 121 sb.append(" partialSyncUnavailable: ").append(partialSyncUnavailable); 122 sb.append(" moreRecordsToGet: ").append(moreRecordsToGet); 123 sb.append(" stats: ").append(stats); 124 return sb.toString(); 125 } 126 127 /** 128 * Generates a debugging string indicating the status. 129 * The string consist of a sequence of code letter followed by the count. 130 * Code letters are f - fullSyncRequested, r - partialSyncUnavailable, 131 * X - hardError, e - numParseExceptions, c - numConflictDetectedExceptions, 132 * a - numAuthExceptions, D - tooManyDeletions, R - tooManyRetries, 133 * b - databaseError, x - softError, l - syncAlreadyInProgress, 134 * I - numIoExceptions 135 * @return debugging string. 136 */ 137 public String toDebugString() { 138 StringBuffer sb = new StringBuffer(); 139 140 if (fullSyncRequested) { 141 sb.append("f1"); 142 } 143 if (partialSyncUnavailable) { 144 sb.append("r1"); 145 } 146 if (hasHardError()) { 147 sb.append("X1"); 148 } 149 if (stats.numParseExceptions > 0) { 150 sb.append("e").append(stats.numParseExceptions); 151 } 152 if (stats.numConflictDetectedExceptions > 0) { 153 sb.append("c").append(stats.numConflictDetectedExceptions); 154 } 155 if (stats.numAuthExceptions > 0) { 156 sb.append("a").append(stats.numAuthExceptions); 157 } 158 if (tooManyDeletions) { 159 sb.append("D1"); 160 } 161 if (tooManyRetries) { 162 sb.append("R1"); 163 } 164 if (databaseError) { 165 sb.append("b1"); 166 } 167 if (hasSoftError()) { 168 sb.append("x1"); 169 } 170 if (syncAlreadyInProgress) { 171 sb.append("l1"); 172 } 173 if (stats.numIoExceptions > 0) { 174 sb.append("I").append(stats.numIoExceptions); 175 } 176 return sb.toString(); 177 } 178} 179