blob: bb24ccd5a5edb01d468e8cecda31a5d2bbd1272b [file] [log] [blame]
Dianne Hackborn231cc602009-04-27 17:10:36 -07001/*
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
17package android.content;
18
19import android.os.Parcel;
20import android.os.Parcelable;
21import android.util.Log;
22
Fred Quintanac5d1c6d2010-01-27 12:17:49 -080023import java.util.ArrayList;
24
Dianne Hackborn231cc602009-04-27 17:10:36 -070025/** @hide */
26public class SyncStatusInfo implements Parcelable {
Fred Quintanac5d1c6d2010-01-27 12:17:49 -080027 static final int VERSION = 2;
28
Dianne Hackborn231cc602009-04-27 17:10:36 -070029 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;
Fred Quintanac5d1c6d2010-01-27 12:17:49 -080036 public int numSourcePeriodic;
Dianne Hackborn231cc602009-04-27 17:10:36 -070037 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;
Costin Manolache5ed64cd2009-09-22 14:41:46 -070044 public boolean initialize;
Georgi Nikolovdbe846b2013-06-25 14:09:56 -070045
46 // Warning: It is up to the external caller to ensure there are
47 // no race conditions when accessing this list
48 private ArrayList<Long> periodicSyncTimes;
Fred Quintanac5d1c6d2010-01-27 12:17:49 -080049
50 private static final String TAG = "Sync";
51
Jeff Sharkey7a96c392012-11-15 14:01:46 -080052 public SyncStatusInfo(int authorityId) {
Dianne Hackborn231cc602009-04-27 17:10:36 -070053 this.authorityId = authorityId;
54 }
55
56 public int getLastFailureMesgAsInt(int def) {
Alon Albert5c113fa2013-02-07 08:07:32 -080057 final int i = ContentResolver.syncErrorStringToInt(lastFailureMesg);
58 if (i > 0) {
59 return i;
60 } else {
61 Log.d(TAG, "Unknown lastFailureMesg:" + lastFailureMesg);
62 return def;
Dianne Hackborn231cc602009-04-27 17:10:36 -070063 }
Dianne Hackborn231cc602009-04-27 17:10:36 -070064 }
Fred Quintanac5d1c6d2010-01-27 12:17:49 -080065
Dianne Hackborn231cc602009-04-27 17:10:36 -070066 public int describeContents() {
67 return 0;
68 }
69
70 public void writeToParcel(Parcel parcel, int flags) {
71 parcel.writeInt(VERSION);
72 parcel.writeInt(authorityId);
73 parcel.writeLong(totalElapsedTime);
74 parcel.writeInt(numSyncs);
75 parcel.writeInt(numSourcePoll);
76 parcel.writeInt(numSourceServer);
77 parcel.writeInt(numSourceLocal);
78 parcel.writeInt(numSourceUser);
79 parcel.writeLong(lastSuccessTime);
80 parcel.writeInt(lastSuccessSource);
81 parcel.writeLong(lastFailureTime);
82 parcel.writeInt(lastFailureSource);
83 parcel.writeString(lastFailureMesg);
84 parcel.writeLong(initialFailureTime);
85 parcel.writeInt(pending ? 1 : 0);
Costin Manolache5ed64cd2009-09-22 14:41:46 -070086 parcel.writeInt(initialize ? 1 : 0);
Fred Quintanac5d1c6d2010-01-27 12:17:49 -080087 if (periodicSyncTimes != null) {
88 parcel.writeInt(periodicSyncTimes.size());
89 for (long periodicSyncTime : periodicSyncTimes) {
90 parcel.writeLong(periodicSyncTime);
91 }
92 } else {
93 parcel.writeInt(-1);
94 }
Dianne Hackborn231cc602009-04-27 17:10:36 -070095 }
96
Jeff Sharkey7a96c392012-11-15 14:01:46 -080097 public SyncStatusInfo(Parcel parcel) {
Dianne Hackborn231cc602009-04-27 17:10:36 -070098 int version = parcel.readInt();
Fred Quintanac5d1c6d2010-01-27 12:17:49 -080099 if (version != VERSION && version != 1) {
Dianne Hackborn231cc602009-04-27 17:10:36 -0700100 Log.w("SyncStatusInfo", "Unknown version: " + version);
101 }
102 authorityId = parcel.readInt();
103 totalElapsedTime = parcel.readLong();
104 numSyncs = parcel.readInt();
105 numSourcePoll = parcel.readInt();
106 numSourceServer = parcel.readInt();
107 numSourceLocal = parcel.readInt();
108 numSourceUser = parcel.readInt();
109 lastSuccessTime = parcel.readLong();
110 lastSuccessSource = parcel.readInt();
111 lastFailureTime = parcel.readLong();
112 lastFailureSource = parcel.readInt();
113 lastFailureMesg = parcel.readString();
114 initialFailureTime = parcel.readLong();
115 pending = parcel.readInt() != 0;
Costin Manolache5ed64cd2009-09-22 14:41:46 -0700116 initialize = parcel.readInt() != 0;
Fred Quintanac5d1c6d2010-01-27 12:17:49 -0800117 if (version == 1) {
118 periodicSyncTimes = null;
119 } else {
120 int N = parcel.readInt();
121 if (N < 0) {
122 periodicSyncTimes = null;
123 } else {
124 periodicSyncTimes = new ArrayList<Long>();
125 for (int i=0; i<N; i++) {
126 periodicSyncTimes.add(parcel.readLong());
127 }
128 }
129 }
Dianne Hackborn231cc602009-04-27 17:10:36 -0700130 }
Fred Quintanac5d1c6d2010-01-27 12:17:49 -0800131
Georgi Nikolovdbe846b2013-06-25 14:09:56 -0700132 public SyncStatusInfo(SyncStatusInfo other) {
133 authorityId = other.authorityId;
134 totalElapsedTime = other.totalElapsedTime;
135 numSyncs = other.numSyncs;
136 numSourcePoll = other.numSourcePoll;
137 numSourceServer = other.numSourceServer;
138 numSourceLocal = other.numSourceLocal;
139 numSourceUser = other.numSourceUser;
140 numSourcePeriodic = other.numSourcePeriodic;
141 lastSuccessTime = other.lastSuccessTime;
142 lastSuccessSource = other.lastSuccessSource;
143 lastFailureTime = other.lastFailureTime;
144 lastFailureSource = other.lastFailureSource;
145 lastFailureMesg = other.lastFailureMesg;
146 initialFailureTime = other.initialFailureTime;
147 pending = other.pending;
148 initialize = other.initialize;
149 if (other.periodicSyncTimes != null) {
150 periodicSyncTimes = new ArrayList<Long>(other.periodicSyncTimes);
151 }
152 }
153
Fred Quintanac5d1c6d2010-01-27 12:17:49 -0800154 public void setPeriodicSyncTime(int index, long when) {
Georgi Nikolovdbe846b2013-06-25 14:09:56 -0700155 // The list is initialized lazily when scheduling occurs so we need to make sure
156 // we initialize elements < index to zero (zero is ignore for scheduling purposes)
Fred Quintanac5d1c6d2010-01-27 12:17:49 -0800157 ensurePeriodicSyncTimeSize(index);
158 periodicSyncTimes.set(index, when);
159 }
160
Georgi Nikolovdbe846b2013-06-25 14:09:56 -0700161 public long getPeriodicSyncTime(int index) {
162 if (periodicSyncTimes != null && index < periodicSyncTimes.size()) {
163 return periodicSyncTimes.get(index);
164 } else {
165 return 0;
166 }
167 }
168
169 public void removePeriodicSyncTime(int index) {
170 if (periodicSyncTimes != null && index < periodicSyncTimes.size()) {
171 periodicSyncTimes.remove(index);
172 }
173 }
174
175 public static final Creator<SyncStatusInfo> CREATOR = new Creator<SyncStatusInfo>() {
176 public SyncStatusInfo createFromParcel(Parcel in) {
177 return new SyncStatusInfo(in);
178 }
179
180 public SyncStatusInfo[] newArray(int size) {
181 return new SyncStatusInfo[size];
182 }
183 };
184
Fred Quintanac5d1c6d2010-01-27 12:17:49 -0800185 private void ensurePeriodicSyncTimeSize(int index) {
186 if (periodicSyncTimes == null) {
187 periodicSyncTimes = new ArrayList<Long>(0);
188 }
189
190 final int requiredSize = index + 1;
191 if (periodicSyncTimes.size() < requiredSize) {
192 for (int i = periodicSyncTimes.size(); i < requiredSize; i++) {
193 periodicSyncTimes.add((long) 0);
194 }
195 }
196 }
Dianne Hackborn231cc602009-04-27 17:10:36 -0700197}