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}