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

Commit 19ffee6d authored by Brad Ebinger's avatar Brad Ebinger Committed by Gerrit Code Review
Browse files

Merge "Update docs for Message IPC and use Messenger."

parents ef371b7b cba4fcff
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -1537,6 +1537,16 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
        return mDesiredMute;
    }

    /**
     * Sends a DTMF code. According to <a href="http://tools.ietf.org/html/rfc2833">RFC 2833</a>,
     * event 0 ~ 9 maps to decimal value 0 ~ 9, '*' to 10, '#' to 11, event 'A' ~ 'D' to 12 ~ 15,
     * and event flash to 16. Currently, event flash is not supported.
     *
     * @param c that represents the DTMF to send. '0' ~ '9', 'A' ~ 'D', '*', '#' are valid inputs.
     * @param result the result message to send when done. If non-null, the {@link Message} must
     *         contain a valid {@link android.os.Messenger} in the {@link Message#replyTo} field,
     *         since this can be used across IPC boundaries.
     */
    public void sendDtmf(char c, Message result) {
        if (DBG) log("sendDtmf");

+6 −1
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.Messenger;
import android.os.PersistableBundle;
import android.os.PowerManager;
import android.os.Registrant;
@@ -79,6 +80,7 @@ public class ImsPhoneConnection extends Connection implements

    private UUSInfo mUusInfo;
    private Handler mHandler;
    private Messenger mHandlerMessenger;

    private PowerManager.WakeLock mPartialWakeLock;

@@ -171,6 +173,7 @@ public class ImsPhoneConnection extends Connection implements

        mOwner = ct;
        mHandler = new MyHandler(mOwner.getLooper());
        mHandlerMessenger = new Messenger(mHandler);
        mImsCall = imsCall;

        if ((imsCall != null) && (imsCall.getCallProfile() != null)) {
@@ -495,7 +498,9 @@ public class ImsPhoneConnection extends Connection implements
    private boolean
    processPostDialChar(char c) {
        if (PhoneNumberUtils.is12Key(c)) {
            mOwner.sendDtmf(c, mHandler.obtainMessage(EVENT_DTMF_DONE));
            Message dtmfComplete = mHandler.obtainMessage(EVENT_DTMF_DONE);
            dtmfComplete.replyTo = mHandlerMessenger;
            mOwner.sendDtmf(c, dtmfComplete);
        } else if (c == PhoneNumberUtils.PAUSE) {
            // From TS 22.101:
            // It continues...
+62 −3
Original line number Diff line number Diff line
@@ -17,14 +17,19 @@
package android.telephony.ims;

import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;

import android.os.RemoteException;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.Messenger;
import android.support.test.runner.AndroidJUnit4;
import android.telecom.TelecomManager;
import android.telephony.ims.aidl.IImsMmTelFeature;
import android.telephony.ims.feature.ImsFeature;
import android.telephony.ims.feature.MmTelFeature;
@@ -32,6 +37,7 @@ import android.telephony.ims.stub.ImsCallSessionImplBase;
import android.test.suitebuilder.annotation.SmallTest;

import com.android.ims.internal.IImsCallSession;
import com.android.internal.telephony.ims.ImsTestBase;

import org.junit.After;
import org.junit.Before;
@@ -41,23 +47,55 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mockito;

@RunWith(AndroidJUnit4.class)
public class MmTelFeatureTests {
public class MmTelFeatureTests extends ImsTestBase {

    private static final int TEST_CAPABILITY = 1;
    private static final int TEST_RADIO_TECH = 0;

    private static final int TEST_TTY_RESULT = 0;
    private static final int TEST_SEND_DTMF_RESULT = 1;
    private static final int TEST_RESULT_MAX = 2;

    private static final int TEST_RESULT_DELAY_MS = 5000;

    private android.telephony.ims.TestMmTelFeature mFeature;
    private IImsMmTelFeature mFeatureBinder;
    private ImsFeature.CapabilityCallback mCapabilityCallback;
    private MmTelFeature.Listener mListener;

    // set to true when the handler receives a message back from the Feature.
    private boolean[] mHandlerResults;

    private class TestHandler extends Handler {

        TestHandler(Looper looper) {
            super(looper);
        }

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case TEST_TTY_RESULT:
                    mHandlerResults[TEST_TTY_RESULT] = true;
                    break;
                case TEST_SEND_DTMF_RESULT:
                    mHandlerResults[TEST_SEND_DTMF_RESULT] = true;
                    break;
            }
        }
    }
    private final Handler mHandler = new TestHandler(Looper.getMainLooper());
    private final Messenger mHandlerMessenger = new Messenger(mHandler);

    @Before
    public void setup() throws RemoteException {
    public void setup() throws Exception {
        super.setUp();
        mFeature = new TestMmTelFeature();
        mFeatureBinder = mFeature.getBinder();
        mCapabilityCallback = spy(new ImsFeature.CapabilityCallback());
        mListener = spy(new MmTelFeature.Listener());
        mFeatureBinder.setListener(mListener);
        mHandlerResults = new boolean[TEST_RESULT_MAX];
    }

    @After
@@ -91,4 +129,25 @@ public class MmTelFeatureTests {

        assertEquals(sessionBinder, captor.getValue());
    }

    @SmallTest
    @Test
    public void testSetTtyMessageMessenger() throws Exception {
        Message resultMessage = Message.obtain(mHandler, TEST_TTY_RESULT);
        resultMessage.replyTo = mHandlerMessenger;
        mFeatureBinder.setUiTtyMode(TelecomManager.TTY_MODE_FULL, resultMessage);
        waitForHandlerAction(mHandler, TEST_RESULT_DELAY_MS);
        assertTrue(mHandlerResults[TEST_TTY_RESULT]);
    }

    @SmallTest
    @Test
    public void testSendDtmfMessageMessenger() throws Exception {
        Message resultMessage = Message.obtain(mHandler, TEST_SEND_DTMF_RESULT);
        resultMessage.replyTo = mHandlerMessenger;
        IImsCallSession callSession = mFeatureBinder.createCallSession(null);
        callSession.sendDtmf('0', resultMessage);
        waitForHandlerAction(mHandler, TEST_RESULT_DELAY_MS);
        assertTrue(mHandlerResults[TEST_SEND_DTMF_RESULT]);
    }
}
+28 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.telephony.ims;

import android.os.Message;
import android.os.RemoteException;
import android.telephony.ims.feature.CapabilityChangeRequest;
import android.telephony.ims.feature.ImsFeature;
@@ -33,6 +34,22 @@ public class TestMmTelFeature extends MmTelFeature {
    public CapabilityChangeRequest lastRequest;
    public boolean isUtInterfaceCalled = false;

    private final TestImsCallSession mCallSession = new TestImsCallSession();
    private class TestImsCallSession extends ImsCallSessionImplBase {

        @Override
        public void sendDtmf(char c, Message result) {
            // Just call result to signify complete for test.
            if (result.replyTo != null) {
                try {
                    result.replyTo.send(result);
                } catch (RemoteException e) {
                    // eat error, test will fail.
                }
            }
        }
    }

    public void incomingCall(ImsCallSessionImplBase c) throws RemoteException {
        notifyIncomingCall(c, null);
    }
@@ -44,7 +61,7 @@ public class TestMmTelFeature extends MmTelFeature {

    @Override
    public ImsCallSessionImplBase createCallSession(ImsCallProfile profile) {
        return super.createCallSession(profile);
        return mCallSession;
    }

    @Override
@@ -63,6 +80,16 @@ public class TestMmTelFeature extends MmTelFeature {
        return super.getMultiEndpoint();
    }

    @Override
    public void setUiTtyMode(int mode, Message onCompleteMessage) {
        try {
            // just send complete message.
            onCompleteMessage.replyTo.send(onCompleteMessage);
        } catch (RemoteException e) {
            // do nothing, test will fail.
        }
    }

    @Override
    public boolean queryCapabilityConfiguration(@MmTelCapabilities.MmTelCapability int capability,
            @ImsRegistrationImplBase.ImsRegistrationTech int radioTech) {