1 /* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.content; 18 19 import android.os.Parcel; 20 import android.os.Parcelable; 21 import android.util.Log; 22 23 import java.util.ArrayList; 24 25 /** @hide */ 26 public class SyncStatusInfo implements Parcelable { 27 static final int VERSION = 2; 28 29 public final int authorityId; 30 public long totalElapsedTime; 31 public int numSyncs; 32 public int numSourcePoll; 33 public int numSourceServer; 34 public int numSourceLocal; 35 public int numSourceUser; 36 public int numSourcePeriodic; 37 public long lastSuccessTime; 38 public int lastSuccessSource; 39 public long lastFailureTime; 40 public int lastFailureSource; 41 public String lastFailureMesg; 42 public long initialFailureTime; 43 public boolean pending; 44 public boolean initialize; 45 public ArrayList<Long> periodicSyncTimes; 46 47 private static final String TAG = "Sync"; 48 49 SyncStatusInfo(int authorityId) { 50 this.authorityId = authorityId; 51 } 52 53 public int getLastFailureMesgAsInt(int def) { 54 try { 55 if (lastFailureMesg != null) { 56 return Integer.parseInt(lastFailureMesg); 57 } 58 } catch (NumberFormatException e) { 59 Log.d(TAG, "error parsing lastFailureMesg of " + lastFailureMesg, e); 60 } 61 return def; 62 } 63 64 public int describeContents() { 65 return 0; 66 } 67 68 public void writeToParcel(Parcel parcel, int flags) { 69 parcel.writeInt(VERSION); 70 parcel.writeInt(authorityId); 71 parcel.writeLong(totalElapsedTime); 72 parcel.writeInt(numSyncs); 73 parcel.writeInt(numSourcePoll); 74 parcel.writeInt(numSourceServer); 75 parcel.writeInt(numSourceLocal); 76 parcel.writeInt(numSourceUser); 77 parcel.writeLong(lastSuccessTime); 78 parcel.writeInt(lastSuccessSource); 79 parcel.writeLong(lastFailureTime); 80 parcel.writeInt(lastFailureSource); 81 parcel.writeString(lastFailureMesg); 82 parcel.writeLong(initialFailureTime); 83 parcel.writeInt(pending ? 1 : 0); 84 parcel.writeInt(initialize ? 1 : 0); 85 if (periodicSyncTimes != null) { 86 parcel.writeInt(periodicSyncTimes.size()); 87 for (long periodicSyncTime : periodicSyncTimes) { 88 parcel.writeLong(periodicSyncTime); 89 } 90 } else { 91 parcel.writeInt(-1); 92 } 93 } 94 95 SyncStatusInfo(Parcel parcel) { 96 int version = parcel.readInt(); 97 if (version != VERSION && version != 1) { 98 Log.w("SyncStatusInfo", "Unknown version: " + version); 99 } 100 authorityId = parcel.readInt(); 101 totalElapsedTime = parcel.readLong(); 102 numSyncs = parcel.readInt(); 103 numSourcePoll = parcel.readInt(); 104 numSourceServer = parcel.readInt(); 105 numSourceLocal = parcel.readInt(); 106 numSourceUser = parcel.readInt(); 107 lastSuccessTime = parcel.readLong(); 108 lastSuccessSource = parcel.readInt(); 109 lastFailureTime = parcel.readLong(); 110 lastFailureSource = parcel.readInt(); 111 lastFailureMesg = parcel.readString(); 112 initialFailureTime = parcel.readLong(); 113 pending = parcel.readInt() != 0; 114 initialize = parcel.readInt() != 0; 115 if (version == 1) { 116 periodicSyncTimes = null; 117 } else { 118 int N = parcel.readInt(); 119 if (N < 0) { 120 periodicSyncTimes = null; 121 } else { 122 periodicSyncTimes = new ArrayList<Long>(); 123 for (int i=0; i<N; i++) { 124 periodicSyncTimes.add(parcel.readLong()); 125 } 126 } 127 } 128 } 129 130 public void setPeriodicSyncTime(int index, long when) { 131 ensurePeriodicSyncTimeSize(index); 132 periodicSyncTimes.set(index, when); 133 } 134 135 private void ensurePeriodicSyncTimeSize(int index) { 136 if (periodicSyncTimes == null) { 137 periodicSyncTimes = new ArrayList<Long>(0); 138 } 139 140 final int requiredSize = index + 1; 141 if (periodicSyncTimes.size() < requiredSize) { 142 for (int i = periodicSyncTimes.size(); i < requiredSize; i++) { 143 periodicSyncTimes.add((long) 0); 144 } 145 } 146 } 147 148 public long getPeriodicSyncTime(int index) { 149 if (periodicSyncTimes == null || periodicSyncTimes.size() < (index + 1)) { 150 return 0; 151 } 152 return periodicSyncTimes.get(index); 153 } 154 155 public void removePeriodicSyncTime(int index) { 156 ensurePeriodicSyncTimeSize(index); 157 periodicSyncTimes.remove(index); 158 } 159 160 public static final Creator<SyncStatusInfo> CREATOR = new Creator<SyncStatusInfo>() { 161 public SyncStatusInfo createFromParcel(Parcel in) { 162 return new SyncStatusInfo(in); 163 } 164 165 public SyncStatusInfo[] newArray(int size) { 166 return new SyncStatusInfo[size]; 167 } 168 }; 169 }