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

Commit 59c47d24 authored by Grace Jia's avatar Grace Jia Committed by Gerrit Code Review
Browse files

Merge "Add relative APIs for InCallService that can support self-managed...

Merge "Add relative APIs for InCallService that can support self-managed connections that want to expose itself."
parents 5a700b27 4e8dc108
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -38498,7 +38498,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>);
@@ -38836,6 +38838,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);
}