Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4e8dc108 authored by Grace Jia's avatar Grace Jia
Browse files

Add relative APIs for InCallService that can support self-managed

connections that want to expose itself.

Add PhoneAccount#EXTRA_ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE and
Connection#onInCallServiceTrackingChanged.

Bug: 161144815
Test: CtsTelecomTestCases
Change-Id: I0a42ea79a1cd46aa9df3399c4fa2e9396321778a
Merged-In: I0a42ea79a1cd46aa9df3399c4fa2e9396321778a
parent 942b71b4
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -38482,7 +38482,9 @@ package android.telecom {
    method public void onStateChanged(int);
    method public void onStopDtmfTone();
    method public void onStopRtt();
    method public void onTrackedByNonUiService(boolean);
    method public void onUnhold();
    method public void onUsingAlternativeUi(boolean);
    method public static String propertiesToString(int);
    method public final void putExtras(@NonNull android.os.Bundle);
    method public final void removeExtras(java.util.List<java.lang.String>);
@@ -38820,6 +38822,7 @@ package android.telecom {
    field public static final int CAPABILITY_VIDEO_CALLING = 8; // 0x8
    field public static final int CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE = 256; // 0x100
    field @NonNull public static final android.os.Parcelable.Creator<android.telecom.PhoneAccount> CREATOR;
    field public static final String EXTRA_ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE = "android.telecom.extra.ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE";
    field public static final String EXTRA_ALWAYS_USE_VOIP_AUDIO_MODE = "android.telecom.extra.ALWAYS_USE_VOIP_AUDIO_MODE";
    field public static final String EXTRA_CALL_SUBJECT_CHARACTER_ENCODING = "android.telecom.extra.CALL_SUBJECT_CHARACTER_ENCODING";
    field public static final String EXTRA_CALL_SUBJECT_MAX_LENGTH = "android.telecom.extra.CALL_SUBJECT_MAX_LENGTH";
+20 −0
Original line number Diff line number Diff line
@@ -3004,6 +3004,26 @@ public abstract class Connection extends Conferenceable {
     */
    public void onCallAudioStateChanged(CallAudioState state) {}

    /**
     * Inform this Connection when it will or will not be tracked by an {@link InCallService} which
     * can provide an InCall UI.
     * This is primarily intended for use by Connections reported by self-managed
     * {@link ConnectionService} which typically maintain their own UI.
     *
     * @param isUsingAlternativeUi Indicates whether an InCallService that can provide InCall UI is
     *                             currently tracking the self-managed call.
     */
    public void onUsingAlternativeUi(boolean isUsingAlternativeUi) {}

    /**
     * Inform this Conenection when it will or will not be tracked by an non-UI
     * {@link InCallService}.
     *
     * @param isTracked Indicates whether an non-UI InCallService is currently tracking the
     *                 self-managed call.
     */
    public void onTrackedByNonUiService(boolean isTracked) {}

    /**
     * Notifies this Connection of an internal state change. This method is called after the
     * state is changed.
+85 −4
Original line number Diff line number Diff line
@@ -137,6 +137,8 @@ public abstract class ConnectionService extends Service {
    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_USING_ALTERNATIVE_UI = "CS.uAU";
    private static final String SESSION_TRACKED_BY_NON_UI_SERVICE = "CS.tBNUS";
    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";
@@ -200,6 +202,9 @@ public abstract class ConnectionService extends Service {
    private static final int MSG_ADD_PARTICIPANT = 39;
    private static final int MSG_EXPLICIT_CALL_TRANSFER = 40;
    private static final int MSG_EXPLICIT_CALL_TRANSFER_CONSULTATIVE = 41;
    private static final int MSG_ON_CALL_FILTERING_COMPLETED = 42;
    private static final int MSG_ON_USING_ALTERNATIVE_UI = 43;
    private static final int MSG_ON_TRACKED_BY_NON_UI_SERVICE = 44;

    private static Connection sNullConnection;

@@ -583,6 +588,36 @@ public abstract class ConnectionService extends Service {
            }
        }

        @Override
        public void onUsingAlternativeUi(String callId, boolean usingAlternativeUiShowing,
                Session.Info sessionInfo) {
            Log.startSession(sessionInfo, SESSION_USING_ALTERNATIVE_UI);
            try {
                SomeArgs args = SomeArgs.obtain();
                args.arg1 = callId;
                args.arg2 = usingAlternativeUiShowing;
                args.arg3 = Log.createSubsession();
                mHandler.obtainMessage(MSG_ON_USING_ALTERNATIVE_UI, args).sendToTarget();
            } finally {
                Log.endSession();
            }
        }

        @Override
        public void onTrackedByNonUiService(String callId, boolean isTracked,
                Session.Info sessionInfo) {
            Log.startSession(sessionInfo, SESSION_TRACKED_BY_NON_UI_SERVICE);
            try {
                SomeArgs args = SomeArgs.obtain();
                args.arg1 = callId;
                args.arg2 = isTracked;
                args.arg3 = Log.createSubsession();
                mHandler.obtainMessage(MSG_ON_TRACKED_BY_NON_UI_SERVICE, args).sendToTarget();
            } finally {
                Log.endSession();
            }
        }

        @Override
        public void playDtmfTone(String callId, char digit, Session.Info sessionInfo) {
            Log.startSession(sessionInfo, SESSION_PLAY_DTMF);
@@ -1226,6 +1261,34 @@ public abstract class ConnectionService extends Service {
                    }
                    break;
                }
                case MSG_ON_USING_ALTERNATIVE_UI: {
                    SomeArgs args = (SomeArgs) msg.obj;
                    Log.continueSession((Session) args.arg3,
                            SESSION_HANDLER + SESSION_USING_ALTERNATIVE_UI);
                    try {
                        String callId = (String) args.arg1;
                        boolean isUsingAlternativeUi = (boolean) args.arg2;
                        onUsingAlternativeUi(callId, isUsingAlternativeUi);
                    } finally {
                        args.recycle();
                        Log.endSession();
                    }
                    break;
                }
                case MSG_ON_TRACKED_BY_NON_UI_SERVICE: {
                    SomeArgs args = (SomeArgs) msg.obj;
                    Log.continueSession((Session) args.arg3,
                            SESSION_HANDLER + SESSION_TRACKED_BY_NON_UI_SERVICE);
                    try {
                        String callId = (String) args.arg1;
                        boolean isTracked = (boolean) args.arg2;
                        onTrackedByNonUiService(callId, isTracked);
                    } finally {
                        args.recycle();
                        Log.endSession();
                    }
                    break;
                }
                case MSG_PLAY_DTMF_TONE: {
                    SomeArgs args = (SomeArgs) msg.obj;
                    try {
@@ -1928,10 +1991,12 @@ public abstract class ConnectionService extends Service {
                request.getExtras().getBoolean(TelecomManager.EXTRA_IS_HANDOVER, false);
        boolean isHandover = request.getExtras() != null && request.getExtras().getBoolean(
                TelecomManager.EXTRA_IS_HANDOVER_CONNECTION, false);
        Log.d(this, "createConnection, callManagerAccount: %s, callId: %s, request: %s, " +
                        "isIncoming: %b, isUnknown: %b, isLegacyHandover: %b, isHandover: %b",
                callManagerAccount, callId, request, isIncoming, isUnknown, isLegacyHandover,
                isHandover);
        boolean addSelfManaged = request.getExtras() != null && request.getExtras().getBoolean(
                PhoneAccount.EXTRA_ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE, false);
        Log.i(this, "createConnection, callManagerAccount: %s, callId: %s, request: %s, "
                        + "isIncoming: %b, isUnknown: %b, isLegacyHandover: %b, isHandover: %b, "
                        + " addSelfManaged: %b", callManagerAccount, callId, request, isIncoming,
                isUnknown, isLegacyHandover, isHandover, addSelfManaged);

        Connection connection = null;
        if (isHandover) {
@@ -2206,6 +2271,22 @@ public abstract class ConnectionService extends Service {
        }
    }

    private void onUsingAlternativeUi(String callId, boolean isUsingAlternativeUi) {
        Log.i(this, "onUsingAlternativeUi %s %s", callId, isUsingAlternativeUi);
        if (mConnectionById.containsKey(callId)) {
            findConnectionForAction(callId, "onUsingAlternativeUi")
                    .onUsingAlternativeUi(isUsingAlternativeUi);
        }
    }

    private void onTrackedByNonUiService(String callId, boolean isTracked) {
        Log.i(this, "onTrackedByNonUiService %s %s", callId, isTracked);
        if (mConnectionById.containsKey(callId)) {
            findConnectionForAction(callId, "onTrackedByNonUiService")
                    .onTrackedByNonUiService(isTracked);
        }
    }

    private void playDtmfTone(String callId, char digit) {
        Log.i(this, "playDtmfTone %s %c", callId, digit);
        if (mConnectionById.containsKey(callId)) {
+9 −0
Original line number Diff line number Diff line
@@ -187,6 +187,15 @@ public final class PhoneAccount implements Parcelable {
    public static final String EXTRA_SKIP_CALL_FILTERING =
        "android.telecom.extra.SKIP_CALL_FILTERING";

    /**
     * Boolean {@link PhoneAccount} extras key (see {@link PhoneAccount#getExtras()}) which
     * indicates whether a Self-managed {@link PhoneAccount} want to expose its calls to all
     * {@link InCallService} which declares the metadata
     * {@link TelecomManager#METADATA_INCLUDE_SELF_MANAGED_CALLS}.
     */
    public static final String EXTRA_ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE =
            "android.telecom.extra.ADD_SELF_MANAGED_CALLS_TO_INCALLSERVICE";

    /**
     * Flag indicating that this {@code PhoneAccount} can act as a connection manager for
     * other connections. The {@link ConnectionService} associated with this {@code PhoneAccount}
+5 −0
Original line number Diff line number Diff line
@@ -136,4 +136,9 @@ oneway interface IConnectionService {
            int error, in Session.Info sessionInfo);

    void handoverComplete(String callId, in Session.Info sessionInfo);

    void onUsingAlternativeUi(String callId, boolean isUsingAlternativeUi,
            in Session.Info sessionInfo);

    void onTrackedByNonUiService(String callId, boolean isTracked, in Session.Info sessionInfo);
}