1231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn/* 2231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn * Copyright (C) 2009 The Android Open Source Project 3231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn * 4231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn * Licensed under the Apache License, Version 2.0 (the "License"); 5231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn * you may not use this file except in compliance with the License. 6231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn * You may obtain a copy of the License at 7231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn * 8231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn * http://www.apache.org/licenses/LICENSE-2.0 9231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn * 10231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn * Unless required by applicable law or agreed to in writing, software 11231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn * distributed under the License is distributed on an "AS IS" BASIS, 12231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn * See the License for the specific language governing permissions and 14231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn * limitations under the License. 15231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn */ 16231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn 17231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackbornpackage android.content; 18231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn 19231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackbornimport android.os.Parcel; 20231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackbornimport android.os.Parcelable; 21231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackbornimport android.util.Log; 22231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn 23c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintanaimport java.util.ArrayList; 24c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 25231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn/** @hide */ 26231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackbornpublic class SyncStatusInfo implements Parcelable { 27c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana static final int VERSION = 2; 28c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 29231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public final int authorityId; 30231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public long totalElapsedTime; 31231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public int numSyncs; 32231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public int numSourcePoll; 33231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public int numSourceServer; 34231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public int numSourceLocal; 35231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public int numSourceUser; 36c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana public int numSourcePeriodic; 37231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public long lastSuccessTime; 38231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public int lastSuccessSource; 39231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public long lastFailureTime; 40231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public int lastFailureSource; 41231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public String lastFailureMesg; 42231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public long initialFailureTime; 43231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public boolean pending; 445ed64cd06ce308e91a5ab74e51bcea5fba9a3860Costin Manolache public boolean initialize; 45c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana public ArrayList<Long> periodicSyncTimes; 46c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 47c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana private static final String TAG = "Sync"; 48c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 49231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn SyncStatusInfo(int authorityId) { 50231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn this.authorityId = authorityId; 51231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn } 52231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn 53231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public int getLastFailureMesgAsInt(int def) { 54231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn try { 55231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn if (lastFailureMesg != null) { 56231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn return Integer.parseInt(lastFailureMesg); 57231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn } 58231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn } catch (NumberFormatException e) { 59c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana Log.d(TAG, "error parsing lastFailureMesg of " + lastFailureMesg, e); 60231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn } 61231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn return def; 62231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn } 63c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 64231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public int describeContents() { 65231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn return 0; 66231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn } 67231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn 68231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public void writeToParcel(Parcel parcel, int flags) { 69231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn parcel.writeInt(VERSION); 70231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn parcel.writeInt(authorityId); 71231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn parcel.writeLong(totalElapsedTime); 72231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn parcel.writeInt(numSyncs); 73231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn parcel.writeInt(numSourcePoll); 74231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn parcel.writeInt(numSourceServer); 75231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn parcel.writeInt(numSourceLocal); 76231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn parcel.writeInt(numSourceUser); 77231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn parcel.writeLong(lastSuccessTime); 78231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn parcel.writeInt(lastSuccessSource); 79231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn parcel.writeLong(lastFailureTime); 80231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn parcel.writeInt(lastFailureSource); 81231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn parcel.writeString(lastFailureMesg); 82231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn parcel.writeLong(initialFailureTime); 83231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn parcel.writeInt(pending ? 1 : 0); 845ed64cd06ce308e91a5ab74e51bcea5fba9a3860Costin Manolache parcel.writeInt(initialize ? 1 : 0); 85c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana if (periodicSyncTimes != null) { 86c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana parcel.writeInt(periodicSyncTimes.size()); 87c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana for (long periodicSyncTime : periodicSyncTimes) { 88c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana parcel.writeLong(periodicSyncTime); 89c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 90c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } else { 91c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana parcel.writeInt(-1); 92c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 93231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn } 94231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn 95231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn SyncStatusInfo(Parcel parcel) { 96231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn int version = parcel.readInt(); 97c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana if (version != VERSION && version != 1) { 98231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn Log.w("SyncStatusInfo", "Unknown version: " + version); 99231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn } 100231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn authorityId = parcel.readInt(); 101231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn totalElapsedTime = parcel.readLong(); 102231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn numSyncs = parcel.readInt(); 103231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn numSourcePoll = parcel.readInt(); 104231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn numSourceServer = parcel.readInt(); 105231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn numSourceLocal = parcel.readInt(); 106231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn numSourceUser = parcel.readInt(); 107231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn lastSuccessTime = parcel.readLong(); 108231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn lastSuccessSource = parcel.readInt(); 109231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn lastFailureTime = parcel.readLong(); 110231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn lastFailureSource = parcel.readInt(); 111231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn lastFailureMesg = parcel.readString(); 112231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn initialFailureTime = parcel.readLong(); 113231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn pending = parcel.readInt() != 0; 1145ed64cd06ce308e91a5ab74e51bcea5fba9a3860Costin Manolache initialize = parcel.readInt() != 0; 115c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana if (version == 1) { 116c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana periodicSyncTimes = null; 117c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } else { 118c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana int N = parcel.readInt(); 119c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana if (N < 0) { 120c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana periodicSyncTimes = null; 121c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } else { 122c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana periodicSyncTimes = new ArrayList<Long>(); 123c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana for (int i=0; i<N; i++) { 124c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana periodicSyncTimes.add(parcel.readLong()); 125c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 126c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 127c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 128231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn } 129c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 130c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana public void setPeriodicSyncTime(int index, long when) { 131c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana ensurePeriodicSyncTimeSize(index); 132c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana periodicSyncTimes.set(index, when); 133c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 134c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 135c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana private void ensurePeriodicSyncTimeSize(int index) { 136c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana if (periodicSyncTimes == null) { 137c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana periodicSyncTimes = new ArrayList<Long>(0); 138c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 139c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 140c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana final int requiredSize = index + 1; 141c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana if (periodicSyncTimes.size() < requiredSize) { 142c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana for (int i = periodicSyncTimes.size(); i < requiredSize; i++) { 143c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana periodicSyncTimes.add((long) 0); 144c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 145c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 146c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 147c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 148c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana public long getPeriodicSyncTime(int index) { 149c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana if (periodicSyncTimes == null || periodicSyncTimes.size() < (index + 1)) { 150c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana return 0; 151c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 152c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana return periodicSyncTimes.get(index); 153c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 154c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 155c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana public void removePeriodicSyncTime(int index) { 156c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana ensurePeriodicSyncTimeSize(index); 157c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana periodicSyncTimes.remove(index); 158c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 159c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 160231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public static final Creator<SyncStatusInfo> CREATOR = new Creator<SyncStatusInfo>() { 161231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public SyncStatusInfo createFromParcel(Parcel in) { 162231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn return new SyncStatusInfo(in); 163231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn } 164231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn 165231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn public SyncStatusInfo[] newArray(int size) { 166231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn return new SyncStatusInfo[size]; 167231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn } 168231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn }; 169231cc608d06ffc31c24bf8aa8c8275bdd2636581Dianne Hackborn}