10464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu/*
20464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu * Copyright (C) 2016 The Android Open Source Project
30464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu *
40464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu * Licensed under the Apache License, Version 2.0 (the "License");
50464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu * you may not use this file except in compliance with the License.
60464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu * You may obtain a copy of the License at
70464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu *
80464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu *      http://www.apache.org/licenses/LICENSE-2.0
90464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu *
100464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu * Unless required by applicable law or agreed to in writing, software
110464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu * distributed under the License is distributed on an "AS IS" BASIS,
120464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu * See the License for the specific language governing permissions and
140464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu * limitations under the License
150464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu */
160464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
170464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liupackage android.telecom;
180464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
190464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liuimport android.annotation.SystemApi;
200464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liuimport android.os.Parcel;
210464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liuimport android.os.Parcelable;
220464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
23057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liuimport java.util.ArrayList;
24bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liuimport java.util.LinkedList;
25057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liuimport java.util.List;
26057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
270464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu/**
280464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu * @hide
290464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu */
300464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu@SystemApi
310464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liupublic class ParcelableCallAnalytics implements Parcelable {
324f73fc7c5b2eecab78457e7dadce039fc4bd9829Jeff Sharkey    /** {@hide} */
33bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu    public static final class VideoEvent implements Parcelable {
34bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        public static final int SEND_LOCAL_SESSION_MODIFY_REQUEST = 0;
35bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        public static final int SEND_LOCAL_SESSION_MODIFY_RESPONSE = 1;
36bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        public static final int RECEIVE_REMOTE_SESSION_MODIFY_REQUEST = 2;
37bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        public static final int RECEIVE_REMOTE_SESSION_MODIFY_RESPONSE = 3;
38bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu
39bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        public static final Parcelable.Creator<VideoEvent> CREATOR =
40bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu                new Parcelable.Creator<VideoEvent> () {
41bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu
42bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu                    @Override
43bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu                    public VideoEvent createFromParcel(Parcel in) {
44bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu                        return new VideoEvent(in);
45bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu                    }
46bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu
47bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu                    @Override
48bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu                    public VideoEvent[] newArray(int size) {
49bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu                        return new VideoEvent[size];
50bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu                    }
51bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu                };
52bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu
53bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        private int mEventName;
54bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        private long mTimeSinceLastEvent;
55bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        private int mVideoState;
56bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu
57bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        public VideoEvent(int eventName, long timeSinceLastEvent, int videoState) {
58bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu            mEventName = eventName;
59bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu            mTimeSinceLastEvent = timeSinceLastEvent;
60bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu            mVideoState = videoState;
61bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        }
62bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu
63bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        VideoEvent(Parcel in) {
64bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu            mEventName = in.readInt();
65bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu            mTimeSinceLastEvent = in.readLong();
66bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu            mVideoState = in.readInt();
67bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        }
68bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu
69bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        public int getEventName() {
70bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu            return mEventName;
71bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        }
72bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu
73bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        public long getTimeSinceLastEvent() {
74bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu            return mTimeSinceLastEvent;
75bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        }
76bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu
77bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        public int getVideoState() {
78bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu            return mVideoState;
79bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        }
80bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu
81bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        @Override
82bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        public int describeContents() {
83bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu            return 0;
84bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        }
85bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu
86bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        @Override
87bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        public void writeToParcel(Parcel out, int flags) {
88bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu            out.writeInt(mEventName);
89bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu            out.writeLong(mTimeSinceLastEvent);
90bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu            out.writeInt(mVideoState);
91bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        }
92bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu    }
93bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu
94057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu    public static final class AnalyticsEvent implements Parcelable {
95057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int SET_SELECT_PHONE_ACCOUNT = 0;
96057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int SET_ACTIVE = 1;
97057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int SET_DISCONNECTED = 2;
98057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int START_CONNECTION = 3;
99057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int SET_DIALING = 4;
100057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int BIND_CS = 5;
101057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int CS_BOUND = 6;
102057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int REQUEST_ACCEPT = 7;
103057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int REQUEST_REJECT = 8;
104057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
105057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int SCREENING_SENT = 100;
106057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int SCREENING_COMPLETED = 101;
107057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int DIRECT_TO_VM_INITIATED = 102;
108057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int DIRECT_TO_VM_FINISHED = 103;
109057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int BLOCK_CHECK_INITIATED = 104;
110057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int BLOCK_CHECK_FINISHED = 105;
111057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int FILTERING_INITIATED = 106;
112057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int FILTERING_COMPLETED = 107;
113057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int FILTERING_TIMED_OUT = 108;
114057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
115057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int SKIP_RINGING = 200;
116057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int SILENCE = 201;
117057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int MUTE = 202;
118057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int UNMUTE = 203;
119057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int AUDIO_ROUTE_BT = 204;
120057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int AUDIO_ROUTE_EARPIECE = 205;
121057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int AUDIO_ROUTE_HEADSET = 206;
122057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int AUDIO_ROUTE_SPEAKER = 207;
123057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
124057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int CONFERENCE_WITH = 300;
125057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int SPLIT_CONFERENCE = 301;
126057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int SET_PARENT = 302;
127057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
128057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int REQUEST_HOLD = 400;
129057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int REQUEST_UNHOLD = 401;
130057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int REMOTELY_HELD = 402;
131057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int REMOTELY_UNHELD = 403;
132057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int SET_HOLD = 404;
133057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int SWAP = 405;
134057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
135057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int REQUEST_PULL = 500;
136057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
137057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
138057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final Parcelable.Creator<AnalyticsEvent> CREATOR =
139057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                new Parcelable.Creator<AnalyticsEvent> () {
140057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
141057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                    @Override
142057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                    public AnalyticsEvent createFromParcel(Parcel in) {
143057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                        return new AnalyticsEvent(in);
144057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                    }
145057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
146057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                    @Override
147057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                    public AnalyticsEvent[] newArray(int size) {
148057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                        return new AnalyticsEvent[size];
149057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                    }
150057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                };
151057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
152057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        private int mEventName;
153057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        private long mTimeSinceLastEvent;
154057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
155057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public AnalyticsEvent(int eventName, long timestamp) {
156057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            mEventName = eventName;
157057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            mTimeSinceLastEvent = timestamp;
158057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        }
159057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
160057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        AnalyticsEvent(Parcel in) {
161057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            mEventName = in.readInt();
162057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            mTimeSinceLastEvent = in.readLong();
163057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        }
164057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
165057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public int getEventName() {
166057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            return mEventName;
167057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        }
168057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
169057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public long getTimeSinceLastEvent() {
170057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            return mTimeSinceLastEvent;
171057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        }
172057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
173057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        @Override
174057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public int describeContents() {
175057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            return 0;
176057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        }
177057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
178057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        @Override
179057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public void writeToParcel(Parcel out, int flags) {
180057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            out.writeInt(mEventName);
181057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            out.writeLong(mTimeSinceLastEvent);
182057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        }
183057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu    }
184057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
185057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu    public static final class EventTiming implements Parcelable {
186057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int ACCEPT_TIMING = 0;
187057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int REJECT_TIMING = 1;
188057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int DISCONNECT_TIMING = 2;
189057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int HOLD_TIMING = 3;
190057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int UNHOLD_TIMING = 4;
191057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int OUTGOING_TIME_TO_DIALING_TIMING = 5;
192057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int BIND_CS_TIMING = 6;
193057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int SCREENING_COMPLETED_TIMING = 7;
194057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int DIRECT_TO_VM_FINISHED_TIMING = 8;
195057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int BLOCK_CHECK_FINISHED_TIMING = 9;
196057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int FILTERING_COMPLETED_TIMING = 10;
197057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int FILTERING_TIMED_OUT_TIMING = 11;
198057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
199057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final int INVALID = 999999;
200057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
201057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public static final Parcelable.Creator<EventTiming> CREATOR =
202057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                new Parcelable.Creator<EventTiming> () {
203057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
204057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                    @Override
205057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                    public EventTiming createFromParcel(Parcel in) {
206057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                        return new EventTiming(in);
207057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                    }
208057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
209057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                    @Override
210057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                    public EventTiming[] newArray(int size) {
211057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                        return new EventTiming[size];
212057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                    }
213057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu                };
214057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
215057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        private int mName;
216057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        private long mTime;
217057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
218057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public EventTiming(int name, long time) {
219057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            this.mName = name;
220057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            this.mTime = time;
221057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        }
222057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
223057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        private EventTiming(Parcel in) {
224057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            mName = in.readInt();
225057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            mTime = in.readLong();
226057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        }
227057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
228057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public int getName() {
229057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            return mName;
230057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        }
231057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
232057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public long getTime() {
233057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            return mTime;
234057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        }
235057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
236057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        @Override
237057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public int describeContents() {
238057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            return 0;
239057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        }
240057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
241057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        @Override
242057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        public void writeToParcel(Parcel out, int flags) {
243057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            out.writeInt(mName);
244057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            out.writeLong(mTime);
245057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        }
246057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu    }
247057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
2480464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public static final int CALLTYPE_UNKNOWN = 0;
2490464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public static final int CALLTYPE_INCOMING = 1;
2500464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public static final int CALLTYPE_OUTGOING = 2;
2510464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
2520464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    // Constants for call technology
2530464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public static final int CDMA_PHONE = 0x1;
2540464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public static final int GSM_PHONE = 0x2;
2550464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public static final int IMS_PHONE = 0x4;
2560464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public static final int SIP_PHONE = 0x8;
2570464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public static final int THIRD_PARTY_PHONE = 0x10;
2580464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
2590464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public static final long MILLIS_IN_5_MINUTES = 1000 * 60 * 5;
2600464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public static final long MILLIS_IN_1_SECOND = 1000;
2610464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
2620464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public static final int STILL_CONNECTED = -1;
2630464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
2640464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public static final Parcelable.Creator<ParcelableCallAnalytics> CREATOR =
2650464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu            new Parcelable.Creator<ParcelableCallAnalytics> () {
2660464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
2670464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu                @Override
2680464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu                public ParcelableCallAnalytics createFromParcel(Parcel in) {
2690464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu                    return new ParcelableCallAnalytics(in);
2700464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu                }
2710464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
2720464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu                @Override
2730464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu                public ParcelableCallAnalytics[] newArray(int size) {
2740464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu                    return new ParcelableCallAnalytics[size];
2750464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu                }
2760464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu            };
2770464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
2780464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    // The start time of the call in milliseconds since Jan. 1, 1970, rounded to the nearest
2790464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    // 5 minute increment.
2800464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    private final long startTimeMillis;
2810464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
2820464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    // The duration of the call, in milliseconds.
2830464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    private final long callDurationMillis;
2840464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
2850464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    // ONE OF calltype_unknown, calltype_incoming, or calltype_outgoing
2860464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    private final int callType;
2870464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
2880464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    // true if the call came in while another call was in progress or if the user dialed this call
2890464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    // while in the middle of another call.
2900464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    private final boolean isAdditionalCall;
2910464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
2920464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    // true if the call was interrupted by an incoming or outgoing call.
2930464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    private final boolean isInterrupted;
2940464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
2950464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    // bitmask denoting which technologies a call used.
2960464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    private final int callTechnologies;
2970464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
2980464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    // Any of the DisconnectCause codes, or STILL_CONNECTED.
2990464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    private final int callTerminationCode;
3000464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
3010464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    // Whether the call is an emergency call
3020464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    private final boolean isEmergencyCall;
3030464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
3040464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    // The package name of the connection service that this call used.
3050464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    private final String connectionService;
3060464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
3070464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    // Whether the call object was created from an existing connection.
3080464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    private final boolean isCreatedFromExistingConnection;
3090464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
310057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu    // A list of events that are associated with this call
311057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu    private final List<AnalyticsEvent> analyticsEvents;
312057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
313057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu    // A map from event-pair names to their durations.
314057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu    private final List<EventTiming> eventTimings;
315057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
316bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu    // Whether the call has ever been a video call.
317bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu    private boolean isVideoCall = false;
318bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu
319bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu    // A list of video events that have occurred.
320bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu    private List<VideoEvent> videoEvents;
321bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu
3220464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public ParcelableCallAnalytics(long startTimeMillis, long callDurationMillis, int callType,
3230464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu            boolean isAdditionalCall, boolean isInterrupted, int callTechnologies,
3240464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu            int callTerminationCode, boolean isEmergencyCall, String connectionService,
325057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            boolean isCreatedFromExistingConnection, List<AnalyticsEvent> analyticsEvents,
326057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu            List<EventTiming> eventTimings) {
3270464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        this.startTimeMillis = startTimeMillis;
3280464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        this.callDurationMillis = callDurationMillis;
3290464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        this.callType = callType;
3300464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        this.isAdditionalCall = isAdditionalCall;
3310464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        this.isInterrupted = isInterrupted;
3320464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        this.callTechnologies = callTechnologies;
3330464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        this.callTerminationCode = callTerminationCode;
3340464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        this.isEmergencyCall = isEmergencyCall;
3350464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        this.connectionService = connectionService;
3360464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        this.isCreatedFromExistingConnection = isCreatedFromExistingConnection;
337057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        this.analyticsEvents = analyticsEvents;
338057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        this.eventTimings = eventTimings;
3390464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    }
3400464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
3410464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public ParcelableCallAnalytics(Parcel in) {
3420464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        startTimeMillis = in.readLong();
3430464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        callDurationMillis = in.readLong();
3440464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        callType = in.readInt();
3450464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        isAdditionalCall = readByteAsBoolean(in);
3460464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        isInterrupted = readByteAsBoolean(in);
3470464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        callTechnologies = in.readInt();
3480464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        callTerminationCode = in.readInt();
3490464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        isEmergencyCall = readByteAsBoolean(in);
3500464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        connectionService = in.readString();
3510464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        isCreatedFromExistingConnection = readByteAsBoolean(in);
352057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        analyticsEvents = new ArrayList<>();
353057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        in.readTypedList(analyticsEvents, AnalyticsEvent.CREATOR);
354057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        eventTimings = new ArrayList<>();
355057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        in.readTypedList(eventTimings, EventTiming.CREATOR);
356bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        isVideoCall = readByteAsBoolean(in);
357bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        videoEvents = new LinkedList<>();
358bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        in.readTypedList(videoEvents, VideoEvent.CREATOR);
3590464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    }
3600464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
3610464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public void writeToParcel(Parcel out, int flags) {
3620464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        out.writeLong(startTimeMillis);
3630464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        out.writeLong(callDurationMillis);
3640464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        out.writeInt(callType);
3650464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        writeBooleanAsByte(out, isAdditionalCall);
3660464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        writeBooleanAsByte(out, isInterrupted);
3670464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        out.writeInt(callTechnologies);
3680464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        out.writeInt(callTerminationCode);
3690464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        writeBooleanAsByte(out, isEmergencyCall);
3700464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        out.writeString(connectionService);
3710464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        writeBooleanAsByte(out, isCreatedFromExistingConnection);
372057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        out.writeTypedList(analyticsEvents);
373057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        out.writeTypedList(eventTimings);
374bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        writeBooleanAsByte(out, isVideoCall);
375bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        out.writeTypedList(videoEvents);
376bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu    }
3774f73fc7c5b2eecab78457e7dadce039fc4bd9829Jeff Sharkey
3784f73fc7c5b2eecab78457e7dadce039fc4bd9829Jeff Sharkey    /** {@hide} */
379bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu    public void setIsVideoCall(boolean isVideoCall) {
380bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        this.isVideoCall = isVideoCall;
381bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu    }
382bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu
3834f73fc7c5b2eecab78457e7dadce039fc4bd9829Jeff Sharkey    /** {@hide} */
384bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu    public void setVideoEvents(List<VideoEvent> videoEvents) {
385bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        this.videoEvents = videoEvents;
3860464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    }
3870464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
3880464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public long getStartTimeMillis() {
3890464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        return startTimeMillis;
3900464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    }
3910464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
3920464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public long getCallDurationMillis() {
3930464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        return callDurationMillis;
3940464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    }
3950464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
3960464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public int getCallType() {
3970464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        return callType;
3980464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    }
3990464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
4000464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public boolean isAdditionalCall() {
4010464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        return isAdditionalCall;
4020464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    }
4030464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
4040464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public boolean isInterrupted() {
4050464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        return isInterrupted;
4060464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    }
4070464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
4080464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public int getCallTechnologies() {
4090464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        return callTechnologies;
4100464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    }
4110464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
4120464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public int getCallTerminationCode() {
4130464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        return callTerminationCode;
4140464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    }
4150464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
4160464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public boolean isEmergencyCall() {
4170464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        return isEmergencyCall;
4180464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    }
4190464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
4200464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public String getConnectionService() {
4210464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        return connectionService;
4220464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    }
4230464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
4240464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public boolean isCreatedFromExistingConnection() {
4250464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        return isCreatedFromExistingConnection;
4260464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    }
4270464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
428057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu    public List<AnalyticsEvent> analyticsEvents() {
429057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        return analyticsEvents;
430057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu    }
431057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
432057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu    public List<EventTiming> getEventTimings() {
433057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu        return eventTimings;
434057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu    }
435057def534c2a18e2e1b70e1e5e04ce09e9ac3b79Hall Liu
4364f73fc7c5b2eecab78457e7dadce039fc4bd9829Jeff Sharkey    /** {@hide} */
437bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu    public boolean isVideoCall() {
438bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        return isVideoCall;
439bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu    }
440bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu
4414f73fc7c5b2eecab78457e7dadce039fc4bd9829Jeff Sharkey    /** {@hide} */
442bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu    public List<VideoEvent> getVideoEvents() {
443bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu        return videoEvents;
444bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu    }
445bd72c9f62aa175ae9912140fd2c6c22cf1d04bc5Hall Liu
4460464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    @Override
4470464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    public int describeContents() {
4480464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        return 0;
4490464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    }
4500464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
4510464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    private static void writeBooleanAsByte(Parcel out, boolean b) {
4520464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        out.writeByte((byte) (b ? 1 : 0));
4530464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    }
4540464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu
4550464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    private static boolean readByteAsBoolean(Parcel in) {
4560464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu        return (in.readByte() == 1);
4570464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu    }
4580464b9ba16ea49f7bff55d7d85231c6dd832b58eHall Liu}
459