diff options
Diffstat (limited to 'telecomm/java/android/telecom/ParcelableCallAnalytics.java')
-rw-r--r-- | telecomm/java/android/telecom/ParcelableCallAnalytics.java | 276 |
1 files changed, 275 insertions, 1 deletions
diff --git a/telecomm/java/android/telecom/ParcelableCallAnalytics.java b/telecomm/java/android/telecom/ParcelableCallAnalytics.java index e7c967260532..383d10baeb12 100644 --- a/telecomm/java/android/telecom/ParcelableCallAnalytics.java +++ b/telecomm/java/android/telecom/ParcelableCallAnalytics.java @@ -20,11 +20,231 @@ import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + /** * @hide */ @SystemApi public class ParcelableCallAnalytics implements Parcelable { + /** {@hide} */ + public static final class VideoEvent implements Parcelable { + public static final int SEND_LOCAL_SESSION_MODIFY_REQUEST = 0; + public static final int SEND_LOCAL_SESSION_MODIFY_RESPONSE = 1; + public static final int RECEIVE_REMOTE_SESSION_MODIFY_REQUEST = 2; + public static final int RECEIVE_REMOTE_SESSION_MODIFY_RESPONSE = 3; + + public static final Parcelable.Creator<VideoEvent> CREATOR = + new Parcelable.Creator<VideoEvent> () { + + @Override + public VideoEvent createFromParcel(Parcel in) { + return new VideoEvent(in); + } + + @Override + public VideoEvent[] newArray(int size) { + return new VideoEvent[size]; + } + }; + + private int mEventName; + private long mTimeSinceLastEvent; + private int mVideoState; + + public VideoEvent(int eventName, long timeSinceLastEvent, int videoState) { + mEventName = eventName; + mTimeSinceLastEvent = timeSinceLastEvent; + mVideoState = videoState; + } + + VideoEvent(Parcel in) { + mEventName = in.readInt(); + mTimeSinceLastEvent = in.readLong(); + mVideoState = in.readInt(); + } + + public int getEventName() { + return mEventName; + } + + public long getTimeSinceLastEvent() { + return mTimeSinceLastEvent; + } + + public int getVideoState() { + return mVideoState; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeInt(mEventName); + out.writeLong(mTimeSinceLastEvent); + out.writeInt(mVideoState); + } + } + + public static final class AnalyticsEvent implements Parcelable { + public static final int SET_SELECT_PHONE_ACCOUNT = 0; + public static final int SET_ACTIVE = 1; + public static final int SET_DISCONNECTED = 2; + public static final int START_CONNECTION = 3; + public static final int SET_DIALING = 4; + public static final int BIND_CS = 5; + public static final int CS_BOUND = 6; + public static final int REQUEST_ACCEPT = 7; + public static final int REQUEST_REJECT = 8; + + public static final int SCREENING_SENT = 100; + public static final int SCREENING_COMPLETED = 101; + public static final int DIRECT_TO_VM_INITIATED = 102; + public static final int DIRECT_TO_VM_FINISHED = 103; + public static final int BLOCK_CHECK_INITIATED = 104; + public static final int BLOCK_CHECK_FINISHED = 105; + public static final int FILTERING_INITIATED = 106; + public static final int FILTERING_COMPLETED = 107; + public static final int FILTERING_TIMED_OUT = 108; + + public static final int SKIP_RINGING = 200; + public static final int SILENCE = 201; + public static final int MUTE = 202; + public static final int UNMUTE = 203; + public static final int AUDIO_ROUTE_BT = 204; + public static final int AUDIO_ROUTE_EARPIECE = 205; + public static final int AUDIO_ROUTE_HEADSET = 206; + public static final int AUDIO_ROUTE_SPEAKER = 207; + + public static final int CONFERENCE_WITH = 300; + public static final int SPLIT_CONFERENCE = 301; + public static final int SET_PARENT = 302; + + public static final int REQUEST_HOLD = 400; + public static final int REQUEST_UNHOLD = 401; + public static final int REMOTELY_HELD = 402; + public static final int REMOTELY_UNHELD = 403; + public static final int SET_HOLD = 404; + public static final int SWAP = 405; + + public static final int REQUEST_PULL = 500; + + + public static final Parcelable.Creator<AnalyticsEvent> CREATOR = + new Parcelable.Creator<AnalyticsEvent> () { + + @Override + public AnalyticsEvent createFromParcel(Parcel in) { + return new AnalyticsEvent(in); + } + + @Override + public AnalyticsEvent[] newArray(int size) { + return new AnalyticsEvent[size]; + } + }; + + private int mEventName; + private long mTimeSinceLastEvent; + + public AnalyticsEvent(int eventName, long timestamp) { + mEventName = eventName; + mTimeSinceLastEvent = timestamp; + } + + AnalyticsEvent(Parcel in) { + mEventName = in.readInt(); + mTimeSinceLastEvent = in.readLong(); + } + + public int getEventName() { + return mEventName; + } + + public long getTimeSinceLastEvent() { + return mTimeSinceLastEvent; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeInt(mEventName); + out.writeLong(mTimeSinceLastEvent); + } + } + + public static final class EventTiming implements Parcelable { + public static final int ACCEPT_TIMING = 0; + public static final int REJECT_TIMING = 1; + public static final int DISCONNECT_TIMING = 2; + public static final int HOLD_TIMING = 3; + public static final int UNHOLD_TIMING = 4; + public static final int OUTGOING_TIME_TO_DIALING_TIMING = 5; + public static final int BIND_CS_TIMING = 6; + public static final int SCREENING_COMPLETED_TIMING = 7; + public static final int DIRECT_TO_VM_FINISHED_TIMING = 8; + public static final int BLOCK_CHECK_FINISHED_TIMING = 9; + public static final int FILTERING_COMPLETED_TIMING = 10; + public static final int FILTERING_TIMED_OUT_TIMING = 11; + + public static final int INVALID = 999999; + + public static final Parcelable.Creator<EventTiming> CREATOR = + new Parcelable.Creator<EventTiming> () { + + @Override + public EventTiming createFromParcel(Parcel in) { + return new EventTiming(in); + } + + @Override + public EventTiming[] newArray(int size) { + return new EventTiming[size]; + } + }; + + private int mName; + private long mTime; + + public EventTiming(int name, long time) { + this.mName = name; + this.mTime = time; + } + + private EventTiming(Parcel in) { + mName = in.readInt(); + mTime = in.readLong(); + } + + public int getName() { + return mName; + } + + public long getTime() { + return mTime; + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeInt(mName); + out.writeLong(mTime); + } + } + public static final int CALLTYPE_UNKNOWN = 0; public static final int CALLTYPE_INCOMING = 1; public static final int CALLTYPE_OUTGOING = 2; @@ -87,10 +307,23 @@ public class ParcelableCallAnalytics implements Parcelable { // Whether the call object was created from an existing connection. private final boolean isCreatedFromExistingConnection; + // A list of events that are associated with this call + private final List<AnalyticsEvent> analyticsEvents; + + // A map from event-pair names to their durations. + private final List<EventTiming> eventTimings; + + // Whether the call has ever been a video call. + private boolean isVideoCall = false; + + // A list of video events that have occurred. + private List<VideoEvent> videoEvents; + public ParcelableCallAnalytics(long startTimeMillis, long callDurationMillis, int callType, boolean isAdditionalCall, boolean isInterrupted, int callTechnologies, int callTerminationCode, boolean isEmergencyCall, String connectionService, - boolean isCreatedFromExistingConnection) { + boolean isCreatedFromExistingConnection, List<AnalyticsEvent> analyticsEvents, + List<EventTiming> eventTimings) { this.startTimeMillis = startTimeMillis; this.callDurationMillis = callDurationMillis; this.callType = callType; @@ -101,6 +334,8 @@ public class ParcelableCallAnalytics implements Parcelable { this.isEmergencyCall = isEmergencyCall; this.connectionService = connectionService; this.isCreatedFromExistingConnection = isCreatedFromExistingConnection; + this.analyticsEvents = analyticsEvents; + this.eventTimings = eventTimings; } public ParcelableCallAnalytics(Parcel in) { @@ -114,6 +349,13 @@ public class ParcelableCallAnalytics implements Parcelable { isEmergencyCall = readByteAsBoolean(in); connectionService = in.readString(); isCreatedFromExistingConnection = readByteAsBoolean(in); + analyticsEvents = new ArrayList<>(); + in.readTypedList(analyticsEvents, AnalyticsEvent.CREATOR); + eventTimings = new ArrayList<>(); + in.readTypedList(eventTimings, EventTiming.CREATOR); + isVideoCall = readByteAsBoolean(in); + videoEvents = new LinkedList<>(); + in.readTypedList(videoEvents, VideoEvent.CREATOR); } public void writeToParcel(Parcel out, int flags) { @@ -127,6 +369,20 @@ public class ParcelableCallAnalytics implements Parcelable { writeBooleanAsByte(out, isEmergencyCall); out.writeString(connectionService); writeBooleanAsByte(out, isCreatedFromExistingConnection); + out.writeTypedList(analyticsEvents); + out.writeTypedList(eventTimings); + writeBooleanAsByte(out, isVideoCall); + out.writeTypedList(videoEvents); + } + + /** {@hide} */ + public void setIsVideoCall(boolean isVideoCall) { + this.isVideoCall = isVideoCall; + } + + /** {@hide} */ + public void setVideoEvents(List<VideoEvent> videoEvents) { + this.videoEvents = videoEvents; } public long getStartTimeMillis() { @@ -169,6 +425,24 @@ public class ParcelableCallAnalytics implements Parcelable { return isCreatedFromExistingConnection; } + public List<AnalyticsEvent> analyticsEvents() { + return analyticsEvents; + } + + public List<EventTiming> getEventTimings() { + return eventTimings; + } + + /** {@hide} */ + public boolean isVideoCall() { + return isVideoCall; + } + + /** {@hide} */ + public List<VideoEvent> getVideoEvents() { + return videoEvents; + } + @Override public int describeContents() { return 0; |