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

Commit d02f7969 authored by Amit Mahajan's avatar Amit Mahajan Committed by Android Partner Code Review
Browse files

Merge "Unit test for emergency callback mode start/end." into mm-wireless-dev

parents 5ba11026 de9c22e9
Loading
Loading
Loading
Loading
+13 −5
Original line number Original line Diff line number Diff line
@@ -64,6 +64,7 @@ import static com.android.internal.telephony.CommandsInterface.CF_REASON_BUSY;
import static com.android.internal.telephony.CommandsInterface.CF_REASON_UNCONDITIONAL;
import static com.android.internal.telephony.CommandsInterface.CF_REASON_UNCONDITIONAL;
import static com.android.internal.telephony.CommandsInterface.SERVICE_CLASS_VOICE;
import static com.android.internal.telephony.CommandsInterface.SERVICE_CLASS_VOICE;


import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.cdma.CdmaMmiCode;
import com.android.internal.telephony.cdma.CdmaMmiCode;
import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager;
import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager;
import com.android.internal.telephony.cdma.EriManager;
import com.android.internal.telephony.cdma.EriManager;
@@ -2673,6 +2674,11 @@ public class GsmCdmaPhone extends Phone {
        }
        }
        // if exiting ecm success
        // if exiting ecm success
        if (ar.exception == null) {
        if (ar.exception == null) {
            // release wakeLock
            if (mWakeLock.isHeld()) {
                mWakeLock.release();
            }

            if (mIsPhoneInEcmState) {
            if (mIsPhoneInEcmState) {
                mIsPhoneInEcmState = false;
                mIsPhoneInEcmState = false;
                setSystemProperty(TelephonyProperties.PROPERTY_INECM_MODE, "false");
                setSystemProperty(TelephonyProperties.PROPERTY_INECM_MODE, "false");
@@ -3041,12 +3047,8 @@ public class GsmCdmaPhone extends Phone {
        intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
        intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
        intent.putExtra(PhoneConstants.PHONE_NAME_KEY, getPhoneName());
        intent.putExtra(PhoneConstants.PHONE_NAME_KEY, getPhoneName());
        SubscriptionManager.putPhoneIdAndSubIdExtra(intent, mPhoneId);
        SubscriptionManager.putPhoneIdAndSubIdExtra(intent, mPhoneId);
        // Unit test cannot send protected broadcasts
        // todo: get rid of unitTestMode check
        if (!getUnitTestMode()) {
        ActivityManagerNative.broadcastStickyIntent(intent, null, UserHandle.USER_ALL);
        ActivityManagerNative.broadcastStickyIntent(intent, null, UserHandle.USER_ALL);
    }
    }
    }


    private void switchVoiceRadioTech(int newVoiceRadioTech) {
    private void switchVoiceRadioTech(int newVoiceRadioTech) {


@@ -3268,4 +3270,10 @@ public class GsmCdmaPhone extends Phone {
                CarrierConfigManager.KEY_GSM_DTMF_TONE_DELAY_INT :
                CarrierConfigManager.KEY_GSM_DTMF_TONE_DELAY_INT :
                CarrierConfigManager.KEY_CDMA_DTMF_TONE_DELAY_INT;
                CarrierConfigManager.KEY_CDMA_DTMF_TONE_DELAY_INT;
    }
    }

    @VisibleForTesting
    public PowerManager.WakeLock getWakeLock() {
        return mWakeLock;
    }

}
}
+27 −0
Original line number Original line Diff line number Diff line
@@ -17,10 +17,12 @@
package com.android.internal.telephony.test;
package com.android.internal.telephony.test;


import android.os.AsyncResult;
import android.os.AsyncResult;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Looper;
import android.os.Message;
import android.os.Message;
import android.os.Parcel;
import android.os.Parcel;
import android.os.Registrant;
import android.telephony.CellInfo;
import android.telephony.CellInfo;
import android.telephony.CellInfoGsm;
import android.telephony.CellInfoGsm;
import android.telephony.Rlog;
import android.telephony.Rlog;
@@ -1982,6 +1984,31 @@ public class SimulatedCommands extends BaseCommands
        }
        }
    }
    }


    public void notifyEmergencyCallbackMode() {
        if (mEmergencyCallbackModeRegistrant != null) {
            mEmergencyCallbackModeRegistrant.notifyRegistrant();
        }
    }

    @Override
    public void setEmergencyCallbackMode(Handler h, int what, Object obj) {
        SimulatedCommandsVerifier.getInstance().setEmergencyCallbackMode(h, what, obj);
        super.setEmergencyCallbackMode(h, what, obj);
    }

    public void notifyExitEmergencyCallbackMode() {
        if (mExitEmergencyCallbackModeRegistrants != null) {
            mExitEmergencyCallbackModeRegistrants.notifyRegistrants(
                    new AsyncResult (null, null, null));
        }
    }

    @Override
    public void registerForExitEmergencyCallbackMode(Handler h, int what, Object obj) {
        SimulatedCommandsVerifier.getInstance().registerForExitEmergencyCallbackMode(h, what, obj);
        super.registerForExitEmergencyCallbackMode(h, what, obj);
    }

    public void notifyRadioOn() {
    public void notifyRadioOn() {
        mOnRegistrants.notifyRegistrants();
        mOnRegistrants.notifyRegistrants();
    }
    }
+2 −2
Original line number Original line Diff line number Diff line
@@ -341,8 +341,8 @@ public class ContextFixture implements TestFixture<Context> {
            return true;
            return true;
        }
        }


        public int testMethod1() {
        public boolean testMethod1() {
            return 0;
            return true;
        }
        }
    }
    }


+101 −1
Original line number Original line Diff line number Diff line
@@ -16,9 +16,14 @@


package com.android.internal.telephony;
package com.android.internal.telephony;


import android.app.Activity;
import android.app.IApplicationThread;
import android.content.IIntentReceiver;
import android.content.Intent;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences;
import android.os.AsyncResult;
import android.os.AsyncResult;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.HandlerThread;
import android.os.Message;
import android.os.Message;
import android.preference.PreferenceManager;
import android.preference.PreferenceManager;
@@ -39,6 +44,9 @@ import org.junit.After;
import org.junit.Before;
import org.junit.Before;
import org.junit.Test;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;

import java.util.List;


import static com.android.internal.telephony.CommandsInterface.CF_ACTION_ENABLE;
import static com.android.internal.telephony.CommandsInterface.CF_ACTION_ENABLE;
import static com.android.internal.telephony.CommandsInterface.CF_REASON_UNCONDITIONAL;
import static com.android.internal.telephony.CommandsInterface.CF_REASON_UNCONDITIONAL;
@@ -47,22 +55,29 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.junit.Assert.fail;
import static org.mockito.Matchers.anyLong;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyBoolean;
import static org.mockito.Mockito.anyBoolean;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyObject;
import static org.mockito.Mockito.anyObject;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verify;


public class GsmCdmaPhoneTest extends TelephonyTest {
public class GsmCdmaPhoneTest extends TelephonyTest {
    @Mock
    private Handler mTestHandler;

    //mPhoneUnderTest
    //mPhoneUnderTest
    private GsmCdmaPhone mPhoneUT;
    private GsmCdmaPhone mPhoneUT;

    private TelephonyManager mTelephonyManager;
    private TelephonyManager mTelephonyManager;


    private static final int EVENT_EMERGENCY_CALLBACK_MODE_EXIT = 1;
    private static final int EVENT_EMERGENCY_CALL_TOGGLE = 2;

    private class GsmCdmaPhoneTestHandler extends HandlerThread {
    private class GsmCdmaPhoneTestHandler extends HandlerThread {


        private GsmCdmaPhoneTestHandler(String name) {
        private GsmCdmaPhoneTestHandler(String name) {
@@ -536,4 +551,89 @@ public class GsmCdmaPhoneTest extends TelephonyTest {
        assertEquals(SimulatedCommands.FAKE_ESN, mPhoneUT.getEsn());
        assertEquals(SimulatedCommands.FAKE_ESN, mPhoneUT.getEsn());
        assertEquals(SimulatedCommands.FAKE_MEID, mPhoneUT.getMeid());
        assertEquals(SimulatedCommands.FAKE_MEID, mPhoneUT.getMeid());
    }
    }

    @Test
    @SmallTest
    public void testEmergencyCallbackMessages() {
        verify(mSimulatedCommandsVerifier).setEmergencyCallbackMode(eq(mPhoneUT), anyInt(),
                anyObject());
        verify(mSimulatedCommandsVerifier).registerForExitEmergencyCallbackMode(eq(mPhoneUT),
                anyInt(), anyObject());

        // verify handling of emergency callback mode
        mSimulatedCommands.notifyEmergencyCallbackMode();
        waitForMs(50);

        // verify ACTION_EMERGENCY_CALLBACK_MODE_CHANGED
        ArgumentCaptor<Intent> intentArgumentCaptor = ArgumentCaptor.forClass(Intent.class);
        try {
            verify(mIActivityManager, atLeast(1)).broadcastIntent(eq((IApplicationThread)null),
                    intentArgumentCaptor.capture(),
                    eq((String)null),
                    eq((IIntentReceiver)null),
                    eq(Activity.RESULT_OK),
                    eq((String)null),
                    eq((Bundle)null),
                    eq((String[])null),
                    anyInt(),
                    eq((Bundle)null),
                    eq(false),
                    eq(true),
                    anyInt());
        } catch(Exception e) {
            fail("Unexpected exception: " + e.getStackTrace());
        }

        Intent intent = intentArgumentCaptor.getValue();
        assertEquals(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED, intent.getAction());
        assertEquals(true, intent.getBooleanExtra(PhoneConstants.PHONE_IN_ECM_STATE, false));

        // verify that wakeLock is acquired in ECM
        assertEquals(true, mPhoneUT.getWakeLock().isHeld());

        mPhoneUT.setOnEcbModeExitResponse(mTestHandler, EVENT_EMERGENCY_CALLBACK_MODE_EXIT, null);
        mPhoneUT.registerForEmergencyCallToggle(mTestHandler, EVENT_EMERGENCY_CALL_TOGGLE, null);

        // verify handling of emergency callback mode exit
        mSimulatedCommands.notifyExitEmergencyCallbackMode();
        waitForMs(50);

        // verify ACTION_EMERGENCY_CALLBACK_MODE_CHANGED
        try {
            verify(mIActivityManager, atLeast(2)).broadcastIntent(eq((IApplicationThread)null),
                    intentArgumentCaptor.capture(),
                    eq((String)null),
                    eq((IIntentReceiver)null),
                    eq(Activity.RESULT_OK),
                    eq((String)null),
                    eq((Bundle)null),
                    eq((String[])null),
                    anyInt(),
                    eq((Bundle)null),
                    eq(false),
                    eq(true),
                    anyInt());
        } catch(Exception e) {
            fail("Unexpected exception: " + e.getStackTrace());
        }

        intent = intentArgumentCaptor.getValue();
        assertEquals(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED, intent.getAction());
        assertEquals(false, intent.getBooleanExtra(PhoneConstants.PHONE_IN_ECM_STATE, true));

        ArgumentCaptor<Message> messageArgumentCaptor = ArgumentCaptor.forClass(Message.class);

        // verify EcmExitRespRegistrant and mEmergencyCallToggledRegistrants are notified
        verify(mTestHandler, times(2)).sendMessageAtTime(messageArgumentCaptor.capture(),
                anyLong());
        List<Message> msgList = messageArgumentCaptor.getAllValues();
        assertEquals(EVENT_EMERGENCY_CALLBACK_MODE_EXIT, msgList.get(0).what);
        assertEquals(EVENT_EMERGENCY_CALL_TOGGLE, msgList.get(1).what);

        // verify setInternalDataEnabled
        verify(mDcTracker).setInternalDataEnabled(true);

        // verify wakeLock released
        assertEquals(false, mPhoneUT.getWakeLock().isHeld());
    }
}
}