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

Commit 6ccdeeb7 authored by Brad Ebinger's avatar Brad Ebinger Committed by android-build-merger
Browse files

Merge "Update docs for Message IPC and use Messenger." into pi-dev

am: 58292e7e

Change-Id: I457f7ff4836923f2d7319840468decca47183f80
parents f44e15e7 58292e7e
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -1586,6 +1586,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) {