Modify AIDLs to include Session.Info
Modifies the IConnectionService.aidl file to include Session.Info
information to pass from Telecom to Telephony, which is used to start
external Sessions in Telephony from Telecom.
Test: Manual testing and Unit Tests pass
Bug: 26571395
Change-Id: Ia09a0abfa13d5167542d4c67465ea9aa1930b58b
diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java
index 7b68a4c..c9b5454f 100644
--- a/telecomm/java/android/telecom/ConnectionService.java
+++ b/telecomm/java/android/telecom/ConnectionService.java
@@ -26,6 +26,7 @@
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
+import android.telecom.Logging.Session;
import com.android.internal.os.SomeArgs;
import com.android.internal.telecom.IConnectionService;
@@ -83,6 +84,32 @@
// Flag controlling whether PII is emitted into the logs
private static final boolean PII_DEBUG = Log.isLoggable(android.util.Log.DEBUG);
+ // Session Definitions
+ private static final String SESSION_HANDLER = "H.";
+ private static final String SESSION_ADD_CS_ADAPTER = "CS.aCSA";
+ private static final String SESSION_REMOVE_CS_ADAPTER = "CS.rCSA";
+ private static final String SESSION_CREATE_CONN = "CS.crCo";
+ private static final String SESSION_ABORT = "CS.ab";
+ private static final String SESSION_ANSWER = "CS.an";
+ private static final String SESSION_ANSWER_VIDEO = "CS.anV";
+ private static final String SESSION_REJECT = "CS.r";
+ private static final String SESSION_REJECT_MESSAGE = "CS.rWM";
+ private static final String SESSION_SILENCE = "CS.s";
+ private static final String SESSION_DISCONNECT = "CS.d";
+ private static final String SESSION_HOLD = "CS.h";
+ private static final String SESSION_UNHOLD = "CS.u";
+ private static final String SESSION_CALL_AUDIO_SC = "CS.cASC";
+ private static final String SESSION_PLAY_DTMF = "CS.pDT";
+ private static final String SESSION_STOP_DTMF = "CS.sDT";
+ private static final String SESSION_CONFERENCE = "CS.c";
+ private static final String SESSION_SPLIT_CONFERENCE = "CS.sFC";
+ private static final String SESSION_MERGE_CONFERENCE = "CS.mC";
+ private static final String SESSION_SWAP_CONFERENCE = "CS.sC";
+ private static final String SESSION_POST_DIAL_CONT = "CS.oPDC";
+ private static final String SESSION_PULL_EXTERNAL_CALL = "CS.pEC";
+ private static final String SESSION_SEND_CALL_EVENT = "CS.sCE";
+ private static final String SESSION_EXTRAS_CHANGED = "CS.oEC";
+
private static final int MSG_ADD_CONNECTION_SERVICE_ADAPTER = 1;
private static final int MSG_CREATE_CONNECTION = 2;
private static final int MSG_ABORT = 3;
@@ -125,12 +152,30 @@
private final IBinder mBinder = new IConnectionService.Stub() {
@Override
- public void addConnectionServiceAdapter(IConnectionServiceAdapter adapter) {
- mHandler.obtainMessage(MSG_ADD_CONNECTION_SERVICE_ADAPTER, adapter).sendToTarget();
+ public void addConnectionServiceAdapter(IConnectionServiceAdapter adapter,
+ Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_ADD_CS_ADAPTER);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = adapter;
+ args.arg2 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_ADD_CONNECTION_SERVICE_ADAPTER, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
- public void removeConnectionServiceAdapter(IConnectionServiceAdapter adapter) {
- mHandler.obtainMessage(MSG_REMOVE_CONNECTION_SERVICE_ADAPTER, adapter).sendToTarget();
+ public void removeConnectionServiceAdapter(IConnectionServiceAdapter adapter,
+ Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_REMOVE_CS_ADAPTER);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = adapter;
+ args.arg2 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_REMOVE_CONNECTION_SERVICE_ADAPTER, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
@@ -139,136 +184,292 @@
String id,
ConnectionRequest request,
boolean isIncoming,
- boolean isUnknown) {
- SomeArgs args = SomeArgs.obtain();
- args.arg1 = connectionManagerPhoneAccount;
- args.arg2 = id;
- args.arg3 = request;
- args.argi1 = isIncoming ? 1 : 0;
- args.argi2 = isUnknown ? 1 : 0;
- mHandler.obtainMessage(MSG_CREATE_CONNECTION, args).sendToTarget();
+ boolean isUnknown,
+ Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_CREATE_CONN);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = connectionManagerPhoneAccount;
+ args.arg2 = id;
+ args.arg3 = request;
+ args.arg4 = Log.createSubsession();
+ args.argi1 = isIncoming ? 1 : 0;
+ args.argi2 = isUnknown ? 1 : 0;
+ mHandler.obtainMessage(MSG_CREATE_CONNECTION, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void abort(String callId) {
- mHandler.obtainMessage(MSG_ABORT, callId).sendToTarget();
+ public void abort(String callId, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_ABORT);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_ABORT, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void answerVideo(String callId, int videoState) {
- SomeArgs args = SomeArgs.obtain();
- args.arg1 = callId;
- args.argi1 = videoState;
- mHandler.obtainMessage(MSG_ANSWER_VIDEO, args).sendToTarget();
+ public void answerVideo(String callId, int videoState, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_ANSWER_VIDEO);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = Log.createSubsession();
+ args.argi1 = videoState;
+ mHandler.obtainMessage(MSG_ANSWER_VIDEO, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void answer(String callId) {
- mHandler.obtainMessage(MSG_ANSWER, callId).sendToTarget();
+ public void answer(String callId, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_ANSWER);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_ANSWER, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void reject(String callId) {
- mHandler.obtainMessage(MSG_REJECT, callId).sendToTarget();
+ public void reject(String callId, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_REJECT);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_REJECT, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void rejectWithMessage(String callId, String message) {
- SomeArgs args = SomeArgs.obtain();
- args.arg1 = callId;
- args.arg2 = message;
- mHandler.obtainMessage(MSG_REJECT_WITH_MESSAGE, args).sendToTarget();
+ public void rejectWithMessage(String callId, String message, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_REJECT_MESSAGE);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = message;
+ args.arg3 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_REJECT_WITH_MESSAGE, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void silence(String callId) {
- mHandler.obtainMessage(MSG_SILENCE, callId).sendToTarget();
+ public void silence(String callId, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_SILENCE);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_SILENCE, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void disconnect(String callId) {
- mHandler.obtainMessage(MSG_DISCONNECT, callId).sendToTarget();
+ public void disconnect(String callId, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_DISCONNECT);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_DISCONNECT, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void hold(String callId) {
- mHandler.obtainMessage(MSG_HOLD, callId).sendToTarget();
+ public void hold(String callId, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_HOLD);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_HOLD, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void unhold(String callId) {
- mHandler.obtainMessage(MSG_UNHOLD, callId).sendToTarget();
+ public void unhold(String callId, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_UNHOLD);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_UNHOLD, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void onCallAudioStateChanged(String callId, CallAudioState callAudioState) {
- SomeArgs args = SomeArgs.obtain();
- args.arg1 = callId;
- args.arg2 = callAudioState;
- mHandler.obtainMessage(MSG_ON_CALL_AUDIO_STATE_CHANGED, args).sendToTarget();
+ public void onCallAudioStateChanged(String callId, CallAudioState callAudioState,
+ Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_CALL_AUDIO_SC);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = callAudioState;
+ args.arg3 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_ON_CALL_AUDIO_STATE_CHANGED, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void playDtmfTone(String callId, char digit) {
- mHandler.obtainMessage(MSG_PLAY_DTMF_TONE, digit, 0, callId).sendToTarget();
+ public void playDtmfTone(String callId, char digit, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_PLAY_DTMF);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = digit;
+ args.arg2 = callId;
+ args.arg3 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_PLAY_DTMF_TONE, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void stopDtmfTone(String callId) {
- mHandler.obtainMessage(MSG_STOP_DTMF_TONE, callId).sendToTarget();
+ public void stopDtmfTone(String callId, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_STOP_DTMF);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_STOP_DTMF_TONE, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void conference(String callId1, String callId2) {
- SomeArgs args = SomeArgs.obtain();
- args.arg1 = callId1;
- args.arg2 = callId2;
- mHandler.obtainMessage(MSG_CONFERENCE, args).sendToTarget();
+ public void conference(String callId1, String callId2, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_CONFERENCE);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId1;
+ args.arg2 = callId2;
+ args.arg3 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_CONFERENCE, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void splitFromConference(String callId) {
- mHandler.obtainMessage(MSG_SPLIT_FROM_CONFERENCE, callId).sendToTarget();
+ public void splitFromConference(String callId, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_SPLIT_CONFERENCE);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_SPLIT_FROM_CONFERENCE, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void mergeConference(String callId) {
- mHandler.obtainMessage(MSG_MERGE_CONFERENCE, callId).sendToTarget();
+ public void mergeConference(String callId, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_MERGE_CONFERENCE);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_MERGE_CONFERENCE, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void swapConference(String callId) {
- mHandler.obtainMessage(MSG_SWAP_CONFERENCE, callId).sendToTarget();
+ public void swapConference(String callId, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_SWAP_CONFERENCE);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_SWAP_CONFERENCE, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void onPostDialContinue(String callId, boolean proceed) {
- SomeArgs args = SomeArgs.obtain();
- args.arg1 = callId;
- args.argi1 = proceed ? 1 : 0;
- mHandler.obtainMessage(MSG_ON_POST_DIAL_CONTINUE, args).sendToTarget();
+ public void onPostDialContinue(String callId, boolean proceed, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_POST_DIAL_CONT);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = Log.createSubsession();
+ args.argi1 = proceed ? 1 : 0;
+ mHandler.obtainMessage(MSG_ON_POST_DIAL_CONTINUE, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void pullExternalCall(String callId) {
- mHandler.obtainMessage(MSG_PULL_EXTERNAL_CALL, callId).sendToTarget();
+ public void pullExternalCall(String callId, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_PULL_EXTERNAL_CALL);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_PULL_EXTERNAL_CALL, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void sendCallEvent(String callId, String event, Bundle extras) {
- SomeArgs args = SomeArgs.obtain();
- args.arg1 = callId;
- args.arg2 = event;
- args.arg3 = extras;
- mHandler.obtainMessage(MSG_SEND_CALL_EVENT, args).sendToTarget();
+ public void sendCallEvent(String callId, String event, Bundle extras,
+ Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_SEND_CALL_EVENT);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = event;
+ args.arg3 = extras;
+ args.arg4 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_SEND_CALL_EVENT, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
@Override
- public void onExtrasChanged(String callId, Bundle extras) {
- SomeArgs args = SomeArgs.obtain();
- args.arg1 = callId;
- args.arg2 = extras;
- mHandler.obtainMessage(MSG_ON_EXTRAS_CHANGED, args).sendToTarget();
+ public void onExtrasChanged(String callId, Bundle extras, Session.Info sessionInfo) {
+ Log.startSession(sessionInfo, SESSION_EXTRAS_CHANGED);
+ try {
+ SomeArgs args = SomeArgs.obtain();
+ args.arg1 = callId;
+ args.arg2 = extras;
+ args.arg3 = Log.createSubsession();
+ mHandler.obtainMessage(MSG_ON_EXTRAS_CHANGED, args).sendToTarget();
+ } finally {
+ Log.endSession();
+ }
}
};
@@ -276,15 +477,35 @@
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
- case MSG_ADD_CONNECTION_SERVICE_ADAPTER:
- mAdapter.addAdapter((IConnectionServiceAdapter) msg.obj);
- onAdapterAttached();
+ case MSG_ADD_CONNECTION_SERVICE_ADAPTER: {
+ SomeArgs args = (SomeArgs) msg.obj;
+ try {
+ IConnectionServiceAdapter adapter = (IConnectionServiceAdapter) args.arg1;
+ Log.continueSession((Session) args.arg2,
+ SESSION_HANDLER + SESSION_ADD_CS_ADAPTER);
+ mAdapter.addAdapter(adapter);
+ onAdapterAttached();
+ } finally {
+ args.recycle();
+ Log.endSession();
+ }
break;
- case MSG_REMOVE_CONNECTION_SERVICE_ADAPTER:
- mAdapter.removeAdapter((IConnectionServiceAdapter) msg.obj);
+ }
+ case MSG_REMOVE_CONNECTION_SERVICE_ADAPTER: {
+ SomeArgs args = (SomeArgs) msg.obj;
+ try {
+ Log.continueSession((Session) args.arg2,
+ SESSION_HANDLER + SESSION_REMOVE_CS_ADAPTER);
+ mAdapter.removeAdapter((IConnectionServiceAdapter) args.arg1);
+ } finally {
+ args.recycle();
+ Log.endSession();
+ }
break;
+ }
case MSG_CREATE_CONNECTION: {
SomeArgs args = (SomeArgs) msg.obj;
+ Log.continueSession((Session) args.arg4, SESSION_HANDLER + SESSION_CREATE_CONN);
try {
final PhoneAccountHandle connectionManagerPhoneAccount =
(PhoneAccountHandle) args.arg1;
@@ -315,122 +536,253 @@
}
} finally {
args.recycle();
+ Log.endSession();
}
break;
}
- case MSG_ABORT:
- abort((String) msg.obj);
+ case MSG_ABORT: {
+ SomeArgs args = (SomeArgs) msg.obj;
+ Log.continueSession((Session) args.arg2, SESSION_HANDLER + SESSION_ABORT);
+ try {
+ abort((String) args.arg1);
+ } finally {
+ args.recycle();
+ Log.endSession();
+ }
break;
- case MSG_ANSWER:
- answer((String) msg.obj);
+ }
+ case MSG_ANSWER: {
+ SomeArgs args = (SomeArgs) msg.obj;
+ Log.continueSession((Session) args.arg2, SESSION_HANDLER + SESSION_ANSWER);
+ try {
+ answer((String) args.arg1);
+ } finally {
+ args.recycle();
+ Log.endSession();
+ }
break;
+ }
case MSG_ANSWER_VIDEO: {
SomeArgs args = (SomeArgs) msg.obj;
+ Log.continueSession((Session) args.arg2,
+ SESSION_HANDLER + SESSION_ANSWER_VIDEO);
try {
String callId = (String) args.arg1;
int videoState = args.argi1;
answerVideo(callId, videoState);
} finally {
args.recycle();
+ Log.endSession();
}
break;
}
- case MSG_REJECT:
- reject((String) msg.obj);
+ case MSG_REJECT: {
+ SomeArgs args = (SomeArgs) msg.obj;
+ Log.continueSession((Session) args.arg2, SESSION_HANDLER + SESSION_REJECT);
+ try {
+ reject((String) args.arg1);
+ } finally {
+ args.recycle();
+ Log.endSession();
+ }
break;
+ }
case MSG_REJECT_WITH_MESSAGE: {
SomeArgs args = (SomeArgs) msg.obj;
+ Log.continueSession((Session) args.arg3,
+ SESSION_HANDLER + SESSION_REJECT_MESSAGE);
try {
reject((String) args.arg1, (String) args.arg2);
} finally {
args.recycle();
+ Log.endSession();
}
break;
}
- case MSG_DISCONNECT:
- disconnect((String) msg.obj);
+ case MSG_DISCONNECT: {
+ SomeArgs args = (SomeArgs) msg.obj;
+ Log.continueSession((Session) args.arg2, SESSION_HANDLER + SESSION_DISCONNECT);
+ try {
+ disconnect((String) args.arg1);
+ } finally {
+ args.recycle();
+ Log.endSession();
+ }
break;
- case MSG_SILENCE:
- silence((String) msg.obj);
+ }
+ case MSG_SILENCE: {
+ SomeArgs args = (SomeArgs) msg.obj;
+ Log.continueSession((Session) args.arg2, SESSION_HANDLER + SESSION_SILENCE);
+ try {
+ silence((String) args.arg1);
+ } finally {
+ args.recycle();
+ Log.endSession();
+ }
break;
- case MSG_HOLD:
- hold((String) msg.obj);
+ }
+ case MSG_HOLD: {
+ SomeArgs args = (SomeArgs) msg.obj;
+ Log.continueSession((Session) args.arg2, SESSION_HANDLER + SESSION_REJECT);
+ try {
+ hold((String) args.arg1);
+ } finally {
+ args.recycle();
+ Log.endSession();
+ }
break;
- case MSG_UNHOLD:
- unhold((String) msg.obj);
+ }
+ case MSG_UNHOLD: {
+ SomeArgs args = (SomeArgs) msg.obj;
+ Log.continueSession((Session) args.arg2, SESSION_HANDLER + SESSION_UNHOLD);
+ try {
+ unhold((String) args.arg1);
+ } finally {
+ args.recycle();
+ Log.endSession();
+ }
break;
+ }
case MSG_ON_CALL_AUDIO_STATE_CHANGED: {
SomeArgs args = (SomeArgs) msg.obj;
+ Log.continueSession((Session) args.arg3,
+ SESSION_HANDLER + SESSION_CALL_AUDIO_SC);
try {
String callId = (String) args.arg1;
CallAudioState audioState = (CallAudioState) args.arg2;
onCallAudioStateChanged(callId, new CallAudioState(audioState));
} finally {
args.recycle();
+ Log.endSession();
}
break;
}
- case MSG_PLAY_DTMF_TONE:
- playDtmfTone((String) msg.obj, (char) msg.arg1);
+ case MSG_PLAY_DTMF_TONE: {
+ SomeArgs args = (SomeArgs) msg.obj;
+ try {
+ Log.continueSession((Session) args.arg3,
+ SESSION_HANDLER + SESSION_PLAY_DTMF);
+ playDtmfTone((String) args.arg2, (char) args.arg1);
+ } finally {
+ args.recycle();
+ Log.endSession();
+ }
break;
- case MSG_STOP_DTMF_TONE:
- stopDtmfTone((String) msg.obj);
+ }
+ case MSG_STOP_DTMF_TONE: {
+ SomeArgs args = (SomeArgs) msg.obj;
+ try {
+ Log.continueSession((Session) args.arg2,
+ SESSION_HANDLER + SESSION_STOP_DTMF);
+ stopDtmfTone((String) args.arg1);
+ } finally {
+ args.recycle();
+ Log.endSession();
+ }
break;
+ }
case MSG_CONFERENCE: {
SomeArgs args = (SomeArgs) msg.obj;
try {
+ Log.continueSession((Session) args.arg3,
+ SESSION_HANDLER + SESSION_CONFERENCE);
String callId1 = (String) args.arg1;
String callId2 = (String) args.arg2;
conference(callId1, callId2);
} finally {
args.recycle();
+ Log.endSession();
}
break;
}
- case MSG_SPLIT_FROM_CONFERENCE:
- splitFromConference((String) msg.obj);
+ case MSG_SPLIT_FROM_CONFERENCE: {
+ SomeArgs args = (SomeArgs) msg.obj;
+ try {
+ Log.continueSession((Session) args.arg2,
+ SESSION_HANDLER + SESSION_SPLIT_CONFERENCE);
+ splitFromConference((String) args.arg1);
+ } finally {
+ args.recycle();
+ Log.endSession();
+ }
break;
- case MSG_MERGE_CONFERENCE:
- mergeConference((String) msg.obj);
+ }
+ case MSG_MERGE_CONFERENCE: {
+ SomeArgs args = (SomeArgs) msg.obj;
+ try {
+ Log.continueSession((Session) args.arg2,
+ SESSION_HANDLER + SESSION_MERGE_CONFERENCE);
+ mergeConference((String) args.arg1);
+ } finally {
+ args.recycle();
+ Log.endSession();
+ }
break;
- case MSG_SWAP_CONFERENCE:
- swapConference((String) msg.obj);
+ }
+ case MSG_SWAP_CONFERENCE: {
+ SomeArgs args = (SomeArgs) msg.obj;
+ try {
+ Log.continueSession((Session) args.arg2,
+ SESSION_HANDLER + SESSION_SWAP_CONFERENCE);
+ swapConference((String) args.arg1);
+ } finally {
+ args.recycle();
+ Log.endSession();
+ }
break;
+ }
case MSG_ON_POST_DIAL_CONTINUE: {
SomeArgs args = (SomeArgs) msg.obj;
try {
+ Log.continueSession((Session) args.arg2,
+ SESSION_HANDLER + SESSION_POST_DIAL_CONT);
String callId = (String) args.arg1;
boolean proceed = (args.argi1 == 1);
onPostDialContinue(callId, proceed);
} finally {
args.recycle();
+ Log.endSession();
}
break;
}
case MSG_PULL_EXTERNAL_CALL: {
- pullExternalCall((String) msg.obj);
+ SomeArgs args = (SomeArgs) msg.obj;
+ try {
+ Log.continueSession((Session) args.arg2,
+ SESSION_HANDLER + SESSION_PULL_EXTERNAL_CALL);
+ pullExternalCall((String) args.arg1);
+ } finally {
+ args.recycle();
+ Log.endSession();
+ }
break;
}
case MSG_SEND_CALL_EVENT: {
SomeArgs args = (SomeArgs) msg.obj;
try {
+ Log.continueSession((Session) args.arg4,
+ SESSION_HANDLER + SESSION_SEND_CALL_EVENT);
String callId = (String) args.arg1;
String event = (String) args.arg2;
Bundle extras = (Bundle) args.arg3;
sendCallEvent(callId, event, extras);
} finally {
args.recycle();
+ Log.endSession();
}
break;
}
case MSG_ON_EXTRAS_CHANGED: {
SomeArgs args = (SomeArgs) msg.obj;
try {
+ Log.continueSession((Session) args.arg3,
+ SESSION_HANDLER + SESSION_EXTRAS_CHANGED);
String callId = (String) args.arg1;
Bundle extras = (Bundle) args.arg2;
handleExtrasChanged(callId, extras);
} finally {
args.recycle();
+ Log.endSession();
}
break;
}
@@ -698,7 +1050,7 @@
mAdapter.putExtras(id, extras);
}
}
-
+
public void onExtrasRemoved(Connection c, List<String> keys) {
String id = mIdByConnection.get(c);
if (id != null) {
@@ -1274,15 +1626,11 @@
* call created using
* {@code TelecomManager#addNewIncomingCall(PhoneAccountHandle, android.os.Bundle)}.
*
- * @param connectionManagerPhoneAccount
- * @param request
- * @return
- *
* @hide
*/
public Connection onCreateUnknownConnection(PhoneAccountHandle connectionManagerPhoneAccount,
ConnectionRequest request) {
- return null;
+ return null;
}
/**
@@ -1495,7 +1843,7 @@
* @return The call ID.
*/
private int getNextCallId() {
- synchronized(mIdSyncRoot) {
+ synchronized (mIdSyncRoot) {
return ++mId;
}
}
diff --git a/telecomm/java/android/telecom/Log.java b/telecomm/java/android/telecom/Log.java
index 1e5769f..446bbbb 100644
--- a/telecomm/java/android/telecom/Log.java
+++ b/telecomm/java/android/telecom/Log.java
@@ -184,6 +184,10 @@
getSessionManager().startSession(shortMethodName, null);
}
+ public static void startSession(Session.Info info, String shortMethodName) {
+ getSessionManager().startSession(info, shortMethodName, null);
+ }
+
public static void startSession(String shortMethodName, String callerIdentification) {
getSessionManager().startSession(shortMethodName, callerIdentification);
}
@@ -193,14 +197,14 @@
getSessionManager().startSession(info, shortMethodName, callerIdentification);
}
- public static void startExternalSession(Session.Info sessionInfo, String shortMethodName) {
- getSessionManager().startExternalSession(sessionInfo, shortMethodName);
- }
-
public static Session createSubsession() {
return getSessionManager().createSubsession();
}
+ public static Session.Info getExternalSession() {
+ return getSessionManager().getExternalSession();
+ }
+
public static void cancelSubsession(Session subsession) {
getSessionManager().cancelSubsession(subsession);
}
diff --git a/telecomm/java/android/telecom/Logging/Session.aidl b/telecomm/java/android/telecom/Logging/Session.aidl
new file mode 100644
index 0000000..68961b6
--- /dev/null
+++ b/telecomm/java/android/telecom/Logging/Session.aidl
@@ -0,0 +1,22 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package android.telecom.Logging;
+
+/**
+ * {@hide}
+ */
+parcelable Session.Info;
\ No newline at end of file
diff --git a/telecomm/java/android/telecom/Logging/Session.java b/telecomm/java/android/telecom/Logging/Session.java
index 093c0f9..3a7b8c0 100644
--- a/telecomm/java/android/telecom/Logging/Session.java
+++ b/telecomm/java/android/telecom/Logging/Session.java
@@ -281,7 +281,15 @@
parentSession.getFullMethodPath(sb);
sb.append(SUBSESSION_SEPARATION_CHAR);
}
- sb.append(mShortMethodName);
+ // Encapsulate the external session's method name so it is obvious what part of the session
+ // is external.
+ if (isExternal()) {
+ sb.append("(");
+ sb.append(mShortMethodName);
+ sb.append(")");
+ } else {
+ sb.append(mShortMethodName);
+ }
if(isSessionStarted) {
// Cache this value so that we do not have to do this work next time!
diff --git a/telecomm/java/android/telecom/Logging/SessionManager.java b/telecomm/java/android/telecom/Logging/SessionManager.java
index 173e7ee..8ced7f81 100644
--- a/telecomm/java/android/telecom/Logging/SessionManager.java
+++ b/telecomm/java/android/telecom/Logging/SessionManager.java
@@ -229,6 +229,23 @@
}
/**
+ * Retrieve the information of the currently active Session. This information is parcelable and
+ * is used to create an external Session ({@link #startExternalSession(Session.Info, String)}).
+ * If there is no Session active, this method will return null.
+ */
+ public synchronized Session.Info getExternalSession() {
+ int threadId = getCallingThreadId();
+ Session threadSession = mSessionMapper.get(threadId);
+ if (threadSession == null) {
+ Log.d(LOGGING_TAG, "Log.getExternalSession was called with no session " +
+ "active.");
+ return null;
+ }
+
+ return threadSession.getInfo();
+ }
+
+ /**
* Cancels a subsession that had Log.createSubsession() called on it, but will never have
* Log.continueSession(...) called on it due to an error. Allows the subsession to be cleaned
* gracefully instead of being removed by the mSessionCleanupHandler forcefully later.
diff --git a/telecomm/java/android/telecom/RemoteConference.java b/telecomm/java/android/telecom/RemoteConference.java
index 943da6d..4bff688 100644
--- a/telecomm/java/android/telecom/RemoteConference.java
+++ b/telecomm/java/android/telecom/RemoteConference.java
@@ -396,7 +396,7 @@
*/
public void disconnect() {
try {
- mConnectionService.disconnect(mId);
+ mConnectionService.disconnect(mId, null /*Session.Info*/);
} catch (RemoteException e) {
}
}
@@ -411,7 +411,7 @@
public void separate(RemoteConnection connection) {
if (mChildConnections.contains(connection)) {
try {
- mConnectionService.splitFromConference(connection.getId());
+ mConnectionService.splitFromConference(connection.getId(), null /*Session.Info*/);
} catch (RemoteException e) {
}
}
@@ -429,7 +429,7 @@
*/
public void merge() {
try {
- mConnectionService.mergeConference(mId);
+ mConnectionService.mergeConference(mId, null /*Session.Info*/);
} catch (RemoteException e) {
}
}
@@ -445,7 +445,7 @@
*/
public void swap() {
try {
- mConnectionService.swapConference(mId);
+ mConnectionService.swapConference(mId, null /*Session.Info*/);
} catch (RemoteException e) {
}
}
@@ -455,7 +455,7 @@
*/
public void hold() {
try {
- mConnectionService.hold(mId);
+ mConnectionService.hold(mId, null /*Session.Info*/);
} catch (RemoteException e) {
}
}
@@ -465,7 +465,7 @@
*/
public void unhold() {
try {
- mConnectionService.unhold(mId);
+ mConnectionService.unhold(mId, null /*Session.Info*/);
} catch (RemoteException e) {
}
}
@@ -488,7 +488,7 @@
*/
public void playDtmfTone(char digit) {
try {
- mConnectionService.playDtmfTone(mId, digit);
+ mConnectionService.playDtmfTone(mId, digit, null /*Session.Info*/);
} catch (RemoteException e) {
}
}
@@ -500,7 +500,7 @@
*/
public void stopDtmfTone() {
try {
- mConnectionService.stopDtmfTone(mId);
+ mConnectionService.stopDtmfTone(mId, null /*Session.Info*/);
} catch (RemoteException e) {
}
}
@@ -525,7 +525,7 @@
*/
public void setCallAudioState(CallAudioState state) {
try {
- mConnectionService.onCallAudioStateChanged(mId, state);
+ mConnectionService.onCallAudioStateChanged(mId, state, null /*Session.Info*/);
} catch (RemoteException e) {
}
}
diff --git a/telecomm/java/android/telecom/RemoteConnection.java b/telecomm/java/android/telecom/RemoteConnection.java
index f030115..11842a0 100644
--- a/telecomm/java/android/telecom/RemoteConnection.java
+++ b/telecomm/java/android/telecom/RemoteConnection.java
@@ -847,7 +847,7 @@
public void abort() {
try {
if (mConnected) {
- mConnectionService.abort(mConnectionId);
+ mConnectionService.abort(mConnectionId, null /*Session.Info*/);
}
} catch (RemoteException ignored) {
}
@@ -859,7 +859,7 @@
public void answer() {
try {
if (mConnected) {
- mConnectionService.answer(mConnectionId);
+ mConnectionService.answer(mConnectionId, null /*Session.Info*/);
}
} catch (RemoteException ignored) {
}
@@ -873,7 +873,7 @@
public void answer(int videoState) {
try {
if (mConnected) {
- mConnectionService.answerVideo(mConnectionId, videoState);
+ mConnectionService.answerVideo(mConnectionId, videoState, null /*Session.Info*/);
}
} catch (RemoteException ignored) {
}
@@ -885,7 +885,7 @@
public void reject() {
try {
if (mConnected) {
- mConnectionService.reject(mConnectionId);
+ mConnectionService.reject(mConnectionId, null /*Session.Info*/);
}
} catch (RemoteException ignored) {
}
@@ -897,7 +897,7 @@
public void hold() {
try {
if (mConnected) {
- mConnectionService.hold(mConnectionId);
+ mConnectionService.hold(mConnectionId, null /*Session.Info*/);
}
} catch (RemoteException ignored) {
}
@@ -909,7 +909,7 @@
public void unhold() {
try {
if (mConnected) {
- mConnectionService.unhold(mConnectionId);
+ mConnectionService.unhold(mConnectionId, null /*Session.Info*/);
}
} catch (RemoteException ignored) {
}
@@ -921,7 +921,7 @@
public void disconnect() {
try {
if (mConnected) {
- mConnectionService.disconnect(mConnectionId);
+ mConnectionService.disconnect(mConnectionId, null /*Session.Info*/);
}
} catch (RemoteException ignored) {
}
@@ -939,7 +939,7 @@
public void playDtmfTone(char digit) {
try {
if (mConnected) {
- mConnectionService.playDtmfTone(mConnectionId, digit);
+ mConnectionService.playDtmfTone(mConnectionId, digit, null /*Session.Info*/);
}
} catch (RemoteException ignored) {
}
@@ -955,7 +955,7 @@
public void stopDtmfTone() {
try {
if (mConnected) {
- mConnectionService.stopDtmfTone(mConnectionId);
+ mConnectionService.stopDtmfTone(mConnectionId, null /*Session.Info*/);
}
} catch (RemoteException ignored) {
}
@@ -985,7 +985,8 @@
public void postDialContinue(boolean proceed) {
try {
if (mConnected) {
- mConnectionService.onPostDialContinue(mConnectionId, proceed);
+ mConnectionService.onPostDialContinue(mConnectionId, proceed,
+ null /*Session.Info*/);
}
} catch (RemoteException ignored) {
}
@@ -999,7 +1000,7 @@
public void pullExternalCall() {
try {
if (mConnected) {
- mConnectionService.pullExternalCall(mConnectionId);
+ mConnectionService.pullExternalCall(mConnectionId, null /*Session.Info*/);
}
} catch (RemoteException ignored) {
}
@@ -1026,7 +1027,8 @@
public void setCallAudioState(CallAudioState state) {
try {
if (mConnected) {
- mConnectionService.onCallAudioStateChanged(mConnectionId, state);
+ mConnectionService.onCallAudioStateChanged(mConnectionId, state,
+ null /*Session.Info*/);
}
} catch (RemoteException ignored) {
}
diff --git a/telecomm/java/android/telecom/RemoteConnectionManager.java b/telecomm/java/android/telecom/RemoteConnectionManager.java
index 0366509..0322218 100644
--- a/telecomm/java/android/telecom/RemoteConnectionManager.java
+++ b/telecomm/java/android/telecom/RemoteConnectionManager.java
@@ -76,7 +76,7 @@
public void conferenceRemoteConnections(RemoteConnection a, RemoteConnection b) {
if (a.getConnectionService() == b.getConnectionService()) {
try {
- a.getConnectionService().conference(a.getId(), b.getId());
+ a.getConnectionService().conference(a.getId(), b.getId(), null /*Session.Info*/);
} catch (RemoteException e) {
}
} else {
diff --git a/telecomm/java/android/telecom/RemoteConnectionService.java b/telecomm/java/android/telecom/RemoteConnectionService.java
index c4739ff..26c2e22 100644
--- a/telecomm/java/android/telecom/RemoteConnectionService.java
+++ b/telecomm/java/android/telecom/RemoteConnectionService.java
@@ -416,7 +416,8 @@
request.getVideoState());
try {
if (mConnectionById.isEmpty()) {
- mOutgoingConnectionServiceRpc.addConnectionServiceAdapter(mServant.getStub());
+ mOutgoingConnectionServiceRpc.addConnectionServiceAdapter(mServant.getStub(),
+ null /*Session.Info*/);
}
RemoteConnection connection =
new RemoteConnection(id, mOutgoingConnectionServiceRpc, newRequest);
@@ -427,7 +428,8 @@
id,
newRequest,
isIncoming,
- false /* isUnknownCall */);
+ false /* isUnknownCall */,
+ null /*Session.info*/);
connection.registerCallback(new RemoteConnection.Callback() {
@Override
public void onDestroyed(RemoteConnection connection) {
@@ -467,7 +469,8 @@
private void maybeDisconnectAdapter() {
if (mConnectionById.isEmpty() && mConferenceById.isEmpty()) {
try {
- mOutgoingConnectionServiceRpc.removeConnectionServiceAdapter(mServant.getStub());
+ mOutgoingConnectionServiceRpc.removeConnectionServiceAdapter(mServant.getStub(),
+ null /*Session.info*/);
} catch (RemoteException e) {
}
}
diff --git a/telecomm/java/com/android/internal/telecom/IConnectionService.aidl b/telecomm/java/com/android/internal/telecom/IConnectionService.aidl
index a4c1798..8a27675 100644
--- a/telecomm/java/com/android/internal/telecom/IConnectionService.aidl
+++ b/telecomm/java/com/android/internal/telecom/IConnectionService.aidl
@@ -19,6 +19,7 @@
import android.os.Bundle;
import android.telecom.CallAudioState;
import android.telecom.ConnectionRequest;
+import android.telecom.Logging.Session;
import android.telecom.PhoneAccountHandle;
import com.android.internal.telecom.IConnectionServiceAdapter;
@@ -31,54 +32,58 @@
* @hide
*/
oneway interface IConnectionService {
- void addConnectionServiceAdapter(in IConnectionServiceAdapter adapter);
+ void addConnectionServiceAdapter(in IConnectionServiceAdapter adapter,
+ in Session.Info sessionInfo);
- void removeConnectionServiceAdapter(in IConnectionServiceAdapter adapter);
+ void removeConnectionServiceAdapter(in IConnectionServiceAdapter adapter,
+ in Session.Info sessionInfo);
void createConnection(
in PhoneAccountHandle connectionManagerPhoneAccount,
String callId,
in ConnectionRequest request,
boolean isIncoming,
- boolean isUnknown);
+ boolean isUnknown,
+ in Session.Info sessionInfo);
- void abort(String callId);
+ void abort(String callId, in Session.Info sessionInfo);
- void answerVideo(String callId, int videoState);
+ void answerVideo(String callId, int videoState, in Session.Info sessionInfo);
- void answer(String callId);
+ void answer(String callId, in Session.Info sessionInfo);
- void reject(String callId);
+ void reject(String callId, in Session.Info sessionInfo);
- void rejectWithMessage(String callId, String message);
+ void rejectWithMessage(String callId, String message, in Session.Info sessionInfo);
- void disconnect(String callId);
+ void disconnect(String callId, in Session.Info sessionInfo);
- void silence(String callId);
+ void silence(String callId, in Session.Info sessionInfo);
- void hold(String callId);
+ void hold(String callId, in Session.Info sessionInfo);
- void unhold(String callId);
+ void unhold(String callId, in Session.Info sessionInfo);
- void onCallAudioStateChanged(String activeCallId, in CallAudioState callAudioState);
+ void onCallAudioStateChanged(String activeCallId, in CallAudioState callAudioState,
+ in Session.Info sessionInfo);
- void playDtmfTone(String callId, char digit);
+ void playDtmfTone(String callId, char digit, in Session.Info sessionInfo);
- void stopDtmfTone(String callId);
+ void stopDtmfTone(String callId, in Session.Info sessionInfo);
- void conference(String conferenceCallId, String callId);
+ void conference(String conferenceCallId, String callId, in Session.Info sessionInfo);
- void splitFromConference(String callId);
+ void splitFromConference(String callId, in Session.Info sessionInfo);
- void mergeConference(String conferenceCallId);
+ void mergeConference(String conferenceCallId, in Session.Info sessionInfo);
- void swapConference(String conferenceCallId);
+ void swapConference(String conferenceCallId, in Session.Info sessionInfo);
- void onPostDialContinue(String callId, boolean proceed);
+ void onPostDialContinue(String callId, boolean proceed, in Session.Info sessionInfo);
- void pullExternalCall(String callId);
+ void pullExternalCall(String callId, in Session.Info sessionInfo);
- void sendCallEvent(String callId, String event, in Bundle extras);
+ void sendCallEvent(String callId, String event, in Bundle extras, in Session.Info sessionInfo);
- void onExtrasChanged(String callId, in Bundle extras);
+ void onExtrasChanged(String callId, in Bundle extras, in Session.Info sessionInfo);
}