1 /*
2  * Copyright (C) 2016 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.telecom;
18 
19 import android.annotation.SystemApi;
20 import android.os.Parcel;
21 import android.os.Parcelable;
22 
23 import java.util.ArrayList;
24 import java.util.List;
25 
26 /**
27  * @hide
28  */
29 @SystemApi
30 public final class TelecomAnalytics implements Parcelable {
31     public static final @android.annotation.NonNull Parcelable.Creator<TelecomAnalytics> CREATOR =
32             new Parcelable.Creator<TelecomAnalytics> () {
33 
34                 @Override
35                 public TelecomAnalytics createFromParcel(Parcel in) {
36                     return new TelecomAnalytics(in);
37                 }
38 
39                 @Override
40                 public TelecomAnalytics[] newArray(int size) {
41                     return new TelecomAnalytics[size];
42                 }
43             };
44 
45     public static final class SessionTiming extends TimedEvent<Integer> implements Parcelable {
46         public static final @android.annotation.NonNull Parcelable.Creator<SessionTiming> CREATOR =
47                 new Parcelable.Creator<SessionTiming> () {
48 
49                     @Override
50                     public SessionTiming createFromParcel(Parcel in) {
51                         return new SessionTiming(in);
52                     }
53 
54                     @Override
55                     public SessionTiming[] newArray(int size) {
56                         return new SessionTiming[size];
57                     }
58                 };
59 
60         public static final int ICA_ANSWER_CALL = 1;
61         public static final int ICA_REJECT_CALL = 2;
62         public static final int ICA_DISCONNECT_CALL = 3;
63         public static final int ICA_HOLD_CALL = 4;
64         public static final int ICA_UNHOLD_CALL = 5;
65         public static final int ICA_MUTE = 6;
66         public static final int ICA_SET_AUDIO_ROUTE = 7;
67         public static final int ICA_CONFERENCE = 8;
68 
69         public static final int CSW_HANDLE_CREATE_CONNECTION_COMPLETE = 100;
70         public static final int CSW_SET_ACTIVE = 101;
71         public static final int CSW_SET_RINGING = 102;
72         public static final int CSW_SET_DIALING = 103;
73         public static final int CSW_SET_DISCONNECTED = 104;
74         public static final int CSW_SET_ON_HOLD = 105;
75         public static final int CSW_REMOVE_CALL = 106;
76         public static final int CSW_SET_IS_CONFERENCED = 107;
77         public static final int CSW_ADD_CONFERENCE_CALL = 108;
78 
79         private int mId;
80         private long mTime;
81 
SessionTiming(int id, long time)82         public SessionTiming(int id, long time) {
83             this.mId = id;
84             this.mTime = time;
85         }
86 
SessionTiming(Parcel in)87         private SessionTiming(Parcel in) {
88             mId = in.readInt();
89             mTime = in.readLong();
90         }
91 
92         @Override
getKey()93         public Integer getKey() {
94             return mId;
95         }
96 
97         @Override
getTime()98         public long getTime() {
99             return mTime;
100         }
101 
102         @Override
describeContents()103         public int describeContents() {
104             return 0;
105         }
106 
107         @Override
writeToParcel(Parcel out, int flags)108         public void writeToParcel(Parcel out, int flags) {
109             out.writeInt(mId);
110             out.writeLong(mTime);
111         }
112     }
113 
114     private List<SessionTiming> mSessionTimings;
115     private List<ParcelableCallAnalytics> mCallAnalytics;
116 
TelecomAnalytics(List<SessionTiming> sessionTimings, List<ParcelableCallAnalytics> callAnalytics)117     public TelecomAnalytics(List<SessionTiming> sessionTimings,
118             List<ParcelableCallAnalytics> callAnalytics) {
119         this.mSessionTimings = sessionTimings;
120         this.mCallAnalytics = callAnalytics;
121     }
122 
TelecomAnalytics(Parcel in)123     private TelecomAnalytics(Parcel in) {
124         mSessionTimings = new ArrayList<>();
125         in.readTypedList(mSessionTimings, SessionTiming.CREATOR);
126         mCallAnalytics = new ArrayList<>();
127         in.readTypedList(mCallAnalytics, ParcelableCallAnalytics.CREATOR);
128     }
129 
getSessionTimings()130     public List<SessionTiming> getSessionTimings() {
131         return mSessionTimings;
132     }
133 
getCallAnalytics()134     public List<ParcelableCallAnalytics> getCallAnalytics() {
135         return mCallAnalytics;
136     }
137 
138     @Override
describeContents()139     public int describeContents() {
140         return 0;
141     }
142 
143     @Override
writeToParcel(Parcel out, int flags)144     public void writeToParcel(Parcel out, int flags) {
145         out.writeTypedList(mSessionTimings);
146         out.writeTypedList(mCallAnalytics);
147     }
148 }
149