LogUtils.java revision 72f0522569319d362f2fe05f46f4e32ab121b8b3
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
17package com.android.server.telecom;
18
19import android.content.Context;
20import android.telecom.Logging.EventManager;
21import android.telecom.Logging.EventManager.TimedEventPair;
22
23/**
24 * Temporary location of new Logging class
25 */
26
27public class LogUtils {
28
29    private static final String TAG = "Telecom";
30    private static final String LOGUTILS_TAG = "LogUtils";
31
32    public static final boolean SYSTRACE_DEBUG = false; /* STOP SHIP if true */
33
34    public static final class Sessions {
35        public static final String ICA_ANSWER_CALL = "ICA.aC";
36        public static final String ICA_REJECT_CALL = "ICA.rC";
37        public static final String ICA_DISCONNECT_CALL = "ICA.dC";
38        public static final String ICA_HOLD_CALL = "ICA.hC";
39        public static final String ICA_UNHOLD_CALL = "ICA.uC";
40        public static final String ICA_MUTE = "ICA.m";
41        public static final String ICA_SET_AUDIO_ROUTE = "ICA.sAR";
42        public static final String ICA_CONFERENCE = "ICA.c";
43        public static final String CSW_HANDLE_CREATE_CONNECTION_COMPLETE = "CSW.hCCC";
44        public static final String CSW_SET_ACTIVE = "CSW.sA";
45        public static final String CSW_SET_RINGING = "CSW.sR";
46        public static final String CSW_SET_DIALING = "CSW.sD";
47        public static final String CSW_SET_PULLING = "CSW.sP";
48        public static final String CSW_SET_DISCONNECTED = "CSW.sDc";
49        public static final String CSW_SET_ON_HOLD = "CSW.sOH";
50        public static final String CSW_REMOVE_CALL = "CSW.rC";
51        public static final String CSW_SET_IS_CONFERENCED = "CSW.sIC";
52        public static final String CSW_ADD_CONFERENCE_CALL = "CSW.aCC";
53    }
54
55    public final static class Events {
56        public static final String CREATED = "CREATED";
57        public static final String DESTROYED = "DESTROYED";
58        public static final String SET_CONNECTING = "SET_CONNECTING";
59        public static final String SET_DIALING = "SET_DIALING";
60        public static final String SET_PULLING = "SET_PULLING";
61        public static final String SET_ACTIVE = "SET_ACTIVE";
62        public static final String SET_HOLD = "SET_HOLD";
63        public static final String SET_RINGING = "SET_RINGING";
64        public static final String SET_DISCONNECTED = "SET_DISCONNECTED";
65        public static final String SET_DISCONNECTING = "SET_DISCONNECTING";
66        public static final String SET_SELECT_PHONE_ACCOUNT = "SET_SELECT_PHONE_ACCOUNT";
67        public static final String REQUEST_HOLD = "REQUEST_HOLD";
68        public static final String REQUEST_UNHOLD = "REQUEST_UNHOLD";
69        public static final String REQUEST_DISCONNECT = "REQUEST_DISCONNECT";
70        public static final String REQUEST_ACCEPT = "REQUEST_ACCEPT";
71        public static final String REQUEST_REJECT = "REQUEST_REJECT";
72        public static final String START_DTMF = "START_DTMF";
73        public static final String STOP_DTMF = "STOP_DTMF";
74        public static final String START_RINGER = "START_RINGER";
75        public static final String STOP_RINGER = "STOP_RINGER";
76        public static final String START_VIBRATOR = "START_VIBRATOR";
77        public static final String STOP_VIBRATOR = "STOP_VIBRATOR";
78        public static final String SKIP_VIBRATION = "SKIP_VIBRATION";
79        public static final String SKIP_RINGING = "SKIP_RINGING";
80        public static final String START_CALL_WAITING_TONE = "START_CALL_WAITING_TONE";
81        public static final String STOP_CALL_WAITING_TONE = "STOP_CALL_WAITING_TONE";
82        public static final String START_CONNECTION = "START_CONNECTION";
83        public static final String BIND_CS = "BIND_CS";
84        public static final String CS_BOUND = "CS_BOUND";
85        public static final String CONFERENCE_WITH = "CONF_WITH";
86        public static final String SPLIT_FROM_CONFERENCE = "CONF_SPLIT";
87        public static final String SWAP = "SWAP";
88        public static final String ADD_CHILD = "ADD_CHILD";
89        public static final String REMOVE_CHILD = "REMOVE_CHILD";
90        public static final String SET_PARENT = "SET_PARENT";
91        public static final String MUTE = "MUTE";
92        public static final String UNMUTE = "UNMUTE";
93        public static final String AUDIO_ROUTE = "AUDIO_ROUTE";
94        public static final String AUDIO_ROUTE_EARPIECE = "AUDIO_ROUTE_EARPIECE";
95        public static final String AUDIO_ROUTE_HEADSET = "AUDIO_ROUTE_HEADSET";
96        public static final String AUDIO_ROUTE_BT = "AUDIO_ROUTE_BT";
97        public static final String AUDIO_ROUTE_SPEAKER = "AUDIO_ROUTE_SPEAKER";
98        public static final String ERROR_LOG = "ERROR";
99        public static final String USER_LOG_MARK = "USER_LOG_MARK";
100        public static final String SILENCE = "SILENCE";
101        public static final String BIND_SCREENING = "BIND_SCREENING";
102        public static final String SCREENING_BOUND = "SCREENING_BOUND";
103        public static final String SCREENING_SENT = "SCREENING_SENT";
104        public static final String SCREENING_COMPLETED = "SCREENING_COMPLETED";
105        public static final String BLOCK_CHECK_INITIATED = "BLOCK_CHECK_INITIATED";
106        public static final String BLOCK_CHECK_FINISHED = "BLOCK_CHECK_FINISHED";
107        public static final String DIRECT_TO_VM_INITIATED = "DIRECT_TO_VM_INITIATED";
108        public static final String DIRECT_TO_VM_FINISHED = "DIRECT_TO_VM_FINISHED";
109        public static final String FILTERING_INITIATED = "FILTERING_INITIATED";
110        public static final String FILTERING_COMPLETED = "FILTERING_COMPLETED";
111        public static final String FILTERING_TIMED_OUT = "FILTERING_TIMED_OUT";
112        public static final String REMOTELY_HELD = "REMOTELY_HELD";
113        public static final String REMOTELY_UNHELD = "REMOTELY_UNHELD";
114        public static final String REQUEST_PULL = "PULL";
115        public static final String INFO = "INFO";
116        public static final String VIDEO_STATE_CHANGED = "VIDEO_STATE_CHANGED";
117        public static final String RECEIVE_VIDEO_REQUEST = "RECEIVE_VIDEO_REQUEST";
118        public static final String RECEIVE_VIDEO_RESPONSE = "RECEIVE_VIDEO_RESPONSE";
119        public static final String SEND_VIDEO_REQUEST = "SEND_VIDEO_REQUEST";
120        public static final String SEND_VIDEO_RESPONSE = "SEND_VIDEO_RESPONSE";
121        public static final String IS_EXTERNAL = "IS_EXTERNAL";
122        public static final String PROPERTY_CHANGE = "PROPERTY_CHANGE";
123        public static final String CAPABILITY_CHANGE = "CAPABILITY_CHANGE";
124        public static final String CONNECTION_EVENT = "CONNECTION_EVENT";
125
126        public static class Timings {
127            public static final String ACCEPT_TIMING = "accept";
128            public static final String REJECT_TIMING = "reject";
129            public static final String DISCONNECT_TIMING = "disconnect";
130            public static final String HOLD_TIMING = "hold";
131            public static final String UNHOLD_TIMING = "unhold";
132            public static final String OUTGOING_TIME_TO_DIALING_TIMING = "outgoing_time_to_dialing";
133            public static final String BIND_CS_TIMING = "bind_cs";
134            public static final String SCREENING_COMPLETED_TIMING = "screening_completed";
135            public static final String DIRECT_TO_VM_FINISHED_TIMING = "direct_to_vm_finished";
136            public static final String BLOCK_CHECK_FINISHED_TIMING = "block_check_finished";
137            public static final String FILTERING_COMPLETED_TIMING = "filtering_completed";
138            public static final String FILTERING_TIMED_OUT_TIMING = "filtering_timed_out";
139
140            private static final TimedEventPair[] sTimedEvents = {
141                    new TimedEventPair(REQUEST_ACCEPT, SET_ACTIVE, ACCEPT_TIMING),
142                    new TimedEventPair(REQUEST_REJECT, SET_DISCONNECTED, REJECT_TIMING),
143                    new TimedEventPair(REQUEST_DISCONNECT, SET_DISCONNECTED, DISCONNECT_TIMING),
144                    new TimedEventPair(REQUEST_HOLD, SET_HOLD, HOLD_TIMING),
145                    new TimedEventPair(REQUEST_UNHOLD, SET_ACTIVE, UNHOLD_TIMING),
146                    new TimedEventPair(START_CONNECTION, SET_DIALING,
147                            OUTGOING_TIME_TO_DIALING_TIMING),
148                    new TimedEventPair(BIND_CS, CS_BOUND, BIND_CS_TIMING),
149                    new TimedEventPair(SCREENING_SENT, SCREENING_COMPLETED,
150                            SCREENING_COMPLETED_TIMING),
151                    new TimedEventPair(DIRECT_TO_VM_INITIATED, DIRECT_TO_VM_FINISHED,
152                            DIRECT_TO_VM_FINISHED_TIMING),
153                    new TimedEventPair(BLOCK_CHECK_INITIATED, BLOCK_CHECK_FINISHED,
154                            BLOCK_CHECK_FINISHED_TIMING),
155                    new TimedEventPair(FILTERING_INITIATED, FILTERING_COMPLETED,
156                            FILTERING_COMPLETED_TIMING),
157                    new TimedEventPair(FILTERING_INITIATED, FILTERING_TIMED_OUT,
158                            FILTERING_TIMED_OUT_TIMING, 6000L),
159            };
160        }
161    }
162
163    private static void eventRecordAdded(EventManager.EventRecord eventRecord) {
164        // Only Calls will be added as event records in this case
165        EventManager.Loggable recordEntry = eventRecord.getRecordEntry();
166        if (recordEntry instanceof Call) {
167            Call callRecordEntry = (Call) recordEntry;
168            android.telecom.Log.i(LOGUTILS_TAG, "EventRecord added as Call: " + callRecordEntry);
169            Analytics.CallInfo callInfo = callRecordEntry.getAnalytics();
170            if(callInfo != null) {
171                callInfo.setCallEvents(eventRecord);
172            } else {
173                android.telecom.Log.w(LOGUTILS_TAG, "Could not get Analytics CallInfo.");
174            }
175        } else {
176            android.telecom.Log.w(LOGUTILS_TAG, "Non-Call EventRecord Added.");
177        }
178    }
179
180    public static void initLogging(Context context) {
181        android.telecom.Log.setTag(TAG);
182        android.telecom.Log.setSessionContext(context);
183        android.telecom.Log.initMd5Sum();
184        for (EventManager.TimedEventPair p : Events.Timings.sTimedEvents) {
185            android.telecom.Log.addRequestResponsePair(p);
186        }
187        android.telecom.Log.registerEventListener(LogUtils::eventRecordAdded);
188        // Store analytics about recently completed Sessions.
189        android.telecom.Log.registerSessionListener(Analytics::addSessionTiming);
190    }
191}
192