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

Commit 5d0410fa authored by Ihab Awad's avatar Ihab Awad
Browse files

Finalize implementation of Remote Connection Service (1/4)

Change-Id: I3788c9ab03a979f22ab628637adf6d520038cb6e
parent 55a684a8
Loading
Loading
Loading
Loading
+16 −7
Original line number Diff line number Diff line
@@ -28596,9 +28596,9 @@ package android.telecomm {
  public static class Call.Details {
    method public android.telecomm.PhoneAccountHandle getAccountHandle();
    method public int getCallCapabilities();
    method public java.lang.String getCallerDisplayName();
    method public int getCallerDisplayNamePresentation();
    method public int getCapabilities();
    method public long getConnectTimeMillis();
    method public int getDisconnectCauseCode();
    method public java.lang.String getDisconnectCauseMsg();
@@ -28616,7 +28616,6 @@ package android.telecomm {
    method public void onChildrenChanged(android.telecomm.Call, java.util.List<android.telecomm.Call>);
    method public void onDetailsChanged(android.telecomm.Call, android.telecomm.Call.Details);
    method public void onParentChanged(android.telecomm.Call, android.telecomm.Call);
    method public void onPostDial(android.telecomm.Call, java.lang.String);
    method public void onPostDialWait(android.telecomm.Call, java.lang.String);
    method public void onStartActivity(android.telecomm.Call, android.app.PendingIntent);
    method public void onStateChanged(android.telecomm.Call, int);
@@ -28935,22 +28934,25 @@ package android.telecomm {
    method public int getCallCapabilities();
    method public java.lang.String getCallerDisplayName();
    method public int getCallerDisplayNamePresentation();
    method public int getDisconnectCause();
    method public java.lang.String getDisconnectMessage();
    method public java.util.List<android.telecomm.RemoteConnection> getChildren();
    method public int getDisconnectCauseCode();
    method public java.lang.String getDisconnectCauseMessage();
    method public int getFailureCode();
    method public java.lang.String getFailureMessage();
    method public android.net.Uri getHandle();
    method public int getHandlePresentation();
    method public android.telecomm.RemoteConnection getParent();
    method public int getState();
    method public android.telecomm.StatusHints getStatusHints();
    method public int getVideoState();
    method public void hold();
    method public void playDtmf(char);
    method public boolean isRequestingRingback();
    method public void playDtmfTone(char);
    method public void postDialContinue(boolean);
    method public void reject();
    method public void removeListener(android.telecomm.RemoteConnection.Listener);
    method public void setAudioState(android.telecomm.CallAudioState);
    method public void stopDtmf();
    method public void stopDtmfTone();
    method public void swapWithBackgroundCall();
    method public void unhold();
  }
@@ -28960,9 +28962,11 @@ package android.telecomm {
    method public void onAudioModeIsVoipChanged(android.telecomm.RemoteConnection, boolean);
    method public void onCallCapabilitiesChanged(android.telecomm.RemoteConnection, int);
    method public void onCallerDisplayNameChanged(android.telecomm.RemoteConnection, java.lang.String, int);
    method public void onChildrenChanged(android.telecomm.RemoteConnection, java.util.List<android.telecomm.RemoteConnection>);
    method public void onDestroyed(android.telecomm.RemoteConnection);
    method public void onDisconnected(android.telecomm.RemoteConnection, int, java.lang.String);
    method public void onHandleChanged(android.telecomm.RemoteConnection, android.net.Uri, int);
    method public void onParentChanged(android.telecomm.RemoteConnection, android.telecomm.RemoteConnection);
    method public void onPostDialWait(android.telecomm.RemoteConnection, java.lang.String);
    method public void onRequestingRingback(android.telecomm.RemoteConnection, boolean);
    method public void onStartActivityFromInCall(android.telecomm.RemoteConnection, android.app.PendingIntent);
@@ -43207,8 +43211,8 @@ package java.lang.reflect {
    method public java.lang.annotation.Annotation[] getDeclaredAnnotations();
    method public boolean isAccessible();
    method public boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation>);
    method public static void setAccessible(java.lang.reflect.AccessibleObject[], boolean);
    method public void setAccessible(boolean);
    method public static void setAccessible(java.lang.reflect.AccessibleObject[], boolean);
  }
  public abstract interface AnnotatedElement {
@@ -43242,6 +43246,11 @@ package java.lang.reflect {
    method public static void setShort(java.lang.Object, int, short) throws java.lang.ArrayIndexOutOfBoundsException, java.lang.IllegalArgumentException;
  }
  public final class ArtMethod {
    method public int getAccessFlags();
    method public static java.lang.String getMethodName(java.lang.reflect.ArtMethod);
  }
  public final class Constructor extends java.lang.reflect.AccessibleObject implements java.lang.reflect.GenericDeclaration java.lang.reflect.Member {
    method public A getAnnotation(java.lang.Class<A>);
    method public java.lang.Class<T> getDeclaringClass();
+10 −34
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ public final class Call {
        private final String mCallerDisplayName;
        private final int mCallerDisplayNamePresentation;
        private final PhoneAccountHandle mAccountHandle;
        private final int mCapabilities;
        private final int mCallCapabilities;
        private final int mDisconnectCauseCode;
        private final String mDisconnectCauseMsg;
        private final long mConnectTimeMillis;
@@ -125,8 +125,8 @@ public final class Call {
         * @return A bitmask of the capabilities of the {@code Call}, as defined in
         *         {@link CallCapabilities}.
         */
        public int getCapabilities() {
            return mCapabilities;
        public int getCallCapabilities() {
            return mCallCapabilities;
        }

        /**
@@ -162,14 +162,15 @@ public final class Call {
        }

        /**
         * @return Returns the video state of the {@code Call}.
         * @return The video state of the {@code Call}.
         */
        public int getVideoState() {
            return mVideoState;
        }

        /*
         * @return The current {@link android.telecomm.StatusHints}, or null if none has been set.
        /**
         * @return The current {@link android.telecomm.StatusHints}, or {@code null} if none
         * have been set.
         */
        public StatusHints getStatusHints() {
            return mStatusHints;
@@ -186,7 +187,7 @@ public final class Call {
                        Objects.equals(mCallerDisplayNamePresentation,
                                d.mCallerDisplayNamePresentation) &&
                        Objects.equals(mAccountHandle, d.mAccountHandle) &&
                        Objects.equals(mCapabilities, d.mCapabilities) &&
                        Objects.equals(mCallCapabilities, d.mCallCapabilities) &&
                        Objects.equals(mDisconnectCauseCode, d.mDisconnectCauseCode) &&
                        Objects.equals(mDisconnectCauseMsg, d.mDisconnectCauseMsg) &&
                        Objects.equals(mConnectTimeMillis, d.mConnectTimeMillis) &&
@@ -205,7 +206,7 @@ public final class Call {
                    Objects.hashCode(mCallerDisplayName) +
                    Objects.hashCode(mCallerDisplayNamePresentation) +
                    Objects.hashCode(mAccountHandle) +
                    Objects.hashCode(mCapabilities) +
                    Objects.hashCode(mCallCapabilities) +
                    Objects.hashCode(mDisconnectCauseCode) +
                    Objects.hashCode(mDisconnectCauseMsg) +
                    Objects.hashCode(mConnectTimeMillis) +
@@ -233,7 +234,7 @@ public final class Call {
            mCallerDisplayName = callerDisplayName;
            mCallerDisplayNamePresentation = callerDisplayNamePresentation;
            mAccountHandle = accountHandle;
            mCapabilities = capabilities;
            mCallCapabilities = capabilities;
            mDisconnectCauseCode = disconnectCauseCode;
            mDisconnectCauseMsg = disconnectCauseMsg;
            mConnectTimeMillis = connectTimeMillis;
@@ -288,15 +289,6 @@ public final class Call {
         */
        public void onCannedTextResponsesLoaded(Call call, List<String> cannedTextResponses) {}

        /**
         * Invoked when the outgoing {@code Call} has finished dialing but is sending DTMF signals
         * that were embedded into the outgoing number.
         *
         * @param call The {@code Call} invoking this method.
         * @param remainingPostDialSequence The post-dial characters that remain to be sent.
         */
        public void onPostDial(Call call, String remainingPostDialSequence) {}

        /**
         * Invoked when the post-dial sequence in the outgoing {@code Call} has reached a pause
         * character. This causes the post-dial signals to stop pending user confirmation. An
@@ -314,7 +306,6 @@ public final class Call {
         * @param call The {@code Call} invoking this method.
         * @param videoCall The {@code Call.VideoCall} associated with the {@code Call}.
         */

        public void onVideoCallChanged(Call call, InCallService.VideoCall videoCall) {}

        /**
@@ -427,8 +418,6 @@ public final class Call {
     *
     * A post-dial DTMF string is a string of digits entered after a phone number, when dialed,
     * that are immediately sent as DTMF tones to the recipient as soon as the connection is made.
     * While these tones are playing, this {@code Call} will notify listeners via
     * {@link Listener#onPostDial(Call, String)}.
     *
     * If the DTMF string contains a {@link TelecommManager#DTMF_CHARACTER_PAUSE} symbol, this
     * {@code Call} will temporarily pause playing the tones for a pre-defined period of time.
@@ -656,12 +645,6 @@ public final class Call {
        }
    }

    /** {@hide} */
    final void internalSetPostDial(String remaining) {
        mRemainingPostDialSequence = remaining;
        firePostDial(mRemainingPostDialSequence);
    }

    /** {@hide} */
    final void internalSetPostDialWait(String remaining) {
        mRemainingPostDialSequence = remaining;
@@ -715,13 +698,6 @@ public final class Call {
        }
    }

    private void firePostDial(String remainingPostDialSequence) {
        Listener[] listeners = mListeners.toArray(new Listener[mListeners.size()]);
        for (int i = 0; i < listeners.length; i++) {
            listeners[i].onPostDial(this, remainingPostDialSequence);
        }
    }

    private void firePostDialWait(String remainingPostDialSequence) {
        Listener[] listeners = mListeners.toArray(new Listener[mListeners.size()]);
        for (int i = 0; i < listeners.length; i++) {
+27 −5
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import com.android.internal.telecomm.IVideoCallCallback;
import com.android.internal.telecomm.IVideoCallProvider;
import com.android.internal.telecomm.RemoteServiceCallback;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
@@ -81,6 +82,7 @@ public abstract class ConnectionService extends Service {
    private final RemoteConnectionManager mRemoteConnectionManager = new RemoteConnectionManager();

    private boolean mAreAccountsInitialized = false;
    private final List<Runnable> mPreInitializationConnectionRequests = new ArrayList<>();
    private final ConnectionServiceAdapter mAdapter = new ConnectionServiceAdapter();

    /**
@@ -226,11 +228,23 @@ public abstract class ConnectionService extends Service {
                case MSG_CREATE_CONNECTION: {
                    SomeArgs args = (SomeArgs) msg.obj;
                    try {
                        PhoneAccountHandle connectionManagerPhoneAccount =
                        final PhoneAccountHandle connectionManagerPhoneAccount =
                                (PhoneAccountHandle) args.arg1;
                        ConnectionRequest request = (ConnectionRequest) args.arg2;
                        boolean isIncoming = args.argi1 == 1;
                        final ConnectionRequest request = (ConnectionRequest) args.arg2;
                        final boolean isIncoming = args.argi1 == 1;
                        if (!mAreAccountsInitialized) {
                            mPreInitializationConnectionRequests.add(new Runnable() {
                                @Override
                                public void run() {
                                    createConnection(
                                            connectionManagerPhoneAccount,
                                            request,
                                            isIncoming);
                                }
                            });
                        } else {
                            createConnection(connectionManagerPhoneAccount, request, isIncoming);
                        }
                    } finally {
                        args.recycle();
                    }
@@ -643,7 +657,7 @@ public abstract class ConnectionService extends Service {
                                    componentNames.get(i),
                                    IConnectionService.Stub.asInterface(services.get(i)));
                        }
                        mAreAccountsInitialized = true;
                        onAccountsInitialized();
                        Log.d(this, "remote connection services found: " + services);
                    }
                });
@@ -803,6 +817,14 @@ public abstract class ConnectionService extends Service {
        return builder.toString();
    }

    private void onAccountsInitialized() {
        mAreAccountsInitialized = true;
        for (Runnable r : mPreInitializationConnectionRequests) {
            r.run();
        }
        mPreInitializationConnectionRequests.clear();
    }

    private void addConnection(String callId, Connection connection) {
        mConnectionById.put(callId, connection);
        mIdByConnection.put(connection, callId);
+377 −0

File added.

Preview size limit exceeded, changes collapsed.

+5 −20
Original line number Diff line number Diff line
@@ -41,11 +41,10 @@ public abstract class InCallService extends Service {
    private static final int MSG_SET_IN_CALL_ADAPTER = 1;
    private static final int MSG_ADD_CALL = 2;
    private static final int MSG_UPDATE_CALL = 3;
    private static final int MSG_SET_POST_DIAL = 4;
    private static final int MSG_SET_POST_DIAL_WAIT = 5;
    private static final int MSG_ON_AUDIO_STATE_CHANGED = 6;
    private static final int MSG_BRING_TO_FOREGROUND = 7;
    private static final int MSG_START_ACTIVITY = 8;
    private static final int MSG_SET_POST_DIAL_WAIT = 4;
    private static final int MSG_ON_AUDIO_STATE_CHANGED = 5;
    private static final int MSG_BRING_TO_FOREGROUND = 6;
    private static final int MSG_START_ACTIVITY = 7;

    /** Default Handler used to consolidate binder method calls onto a single thread. */
    private final Handler mHandler = new Handler(Looper.getMainLooper()) {
@@ -62,17 +61,6 @@ public abstract class InCallService extends Service {
                case MSG_UPDATE_CALL:
                    mPhone.internalUpdateCall((ParcelableCall) msg.obj);
                    break;
                case MSG_SET_POST_DIAL: {
                    SomeArgs args = (SomeArgs) msg.obj;
                    try {
                        String callId = (String) args.arg1;
                        String remaining = (String) args.arg2;
                        mPhone.internalSetPostDial(callId, remaining);
                    } finally {
                        args.recycle();
                    }
                    break;
                }
                case MSG_SET_POST_DIAL_WAIT: {
                    SomeArgs args = (SomeArgs) msg.obj;
                    try {
@@ -124,10 +112,7 @@ public abstract class InCallService extends Service {

        @Override
        public void setPostDial(String callId, String remaining) {
            SomeArgs args = SomeArgs.obtain();
            args.arg1 = callId;
            args.arg2 = remaining;
            mHandler.obtainMessage(MSG_SET_POST_DIAL, args).sendToTarget();
            // TODO: Unused
        }

        @Override
Loading