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

Commit 0909daf6 authored by Jack Yu's avatar Jack Yu Committed by Automerger Merge Worker
Browse files

Replaced link state with link status am: 50b369df

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/2022616

Change-Id: I7753f08769f357972144fd329fdaf46846719c5c
parents c666d8d9 50b369df
Loading
Loading
Loading
Loading
+27 −28
Original line number Diff line number Diff line
@@ -34,11 +34,10 @@ import android.telephony.SubscriptionManager;
import android.telephony.TelephonyDisplayInfo;
import android.telephony.TelephonyManager;
import android.telephony.data.ApnSetting;
import android.telephony.data.DataCallResponse;
import android.text.TextUtils;

import com.android.internal.telephony.dataconnection.DataConnection;
import com.android.internal.telephony.dataconnection.DcController;
import com.android.internal.telephony.dataconnection.DcController.PhysicalLinkState;
import com.android.internal.telephony.dataconnection.DcTracker;
import com.android.internal.telephony.util.ArrayUtils;
import com.android.internal.util.IState;
@@ -88,7 +87,7 @@ public class NetworkTypeController extends StateMachine {
    private static final int EVENT_DATA_RAT_CHANGED = 2;
    private static final int EVENT_NR_STATE_CHANGED = 3;
    private static final int EVENT_NR_FREQUENCY_CHANGED = 4;
    private static final int EVENT_PHYSICAL_LINK_STATE_CHANGED = 5;
    private static final int EVENT_PHYSICAL_LINK_STATUS_CHANGED = 5;
    private static final int EVENT_PHYSICAL_CHANNEL_CONFIG_NOTIF_CHANGED = 6;
    private static final int EVENT_CARRIER_CONFIG_CHANGED = 7;
    private static final int EVENT_PRIMARY_TIMER_EXPIRED = 8;
@@ -107,7 +106,7 @@ public class NetworkTypeController extends StateMachine {
        sEvents[EVENT_DATA_RAT_CHANGED] = "EVENT_DATA_RAT_CHANGED";
        sEvents[EVENT_NR_STATE_CHANGED] = "EVENT_NR_STATE_CHANGED";
        sEvents[EVENT_NR_FREQUENCY_CHANGED] = "EVENT_NR_FREQUENCY_CHANGED";
        sEvents[EVENT_PHYSICAL_LINK_STATE_CHANGED] = "EVENT_PHYSICAL_LINK_STATE_CHANGED";
        sEvents[EVENT_PHYSICAL_LINK_STATUS_CHANGED] = "EVENT_PHYSICAL_LINK_STATUS_CHANGED";
        sEvents[EVENT_PHYSICAL_CHANNEL_CONFIG_NOTIF_CHANGED] =
                "EVENT_PHYSICAL_CHANNEL_CONFIG_NOTIF_CHANGED";
        sEvents[EVENT_CARRIER_CONFIG_CHANGED] = "EVENT_CARRIER_CONFIG_CHANGED";
@@ -148,7 +147,7 @@ public class NetworkTypeController extends StateMachine {
    private String mPrimaryTimerState;
    private String mSecondaryTimerState;
    private String mPreviousState;
    private @PhysicalLinkState int mPhysicalLinkState;
    private @DataCallResponse.LinkStatus int mPhysicalLinkStatus;
    private boolean mIsPhysicalChannelConfig16Supported;
    private Boolean mIsNrAdvancedAllowedByPco = false;
    private int mNrAdvancedCapablePcoId = 0;
@@ -210,8 +209,8 @@ public class NetworkTypeController extends StateMachine {
                TelephonyManager.CAPABILITY_PHYSICAL_CHANNEL_CONFIG_1_6_SUPPORTED);
        if (!mIsPhysicalChannelConfig16Supported) {
            mPhone.getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
                    .registerForPhysicalLinkStateChanged(getHandler(),
                            EVENT_PHYSICAL_LINK_STATE_CHANGED);
                    .registerForPhysicalLinkStatusChanged(getHandler(),
                            EVENT_PHYSICAL_LINK_STATUS_CHANGED);
        }
        mPhone.getServiceStateTracker().registerForNrStateChanged(getHandler(),
                EVENT_NR_STATE_CHANGED, null);
@@ -298,8 +297,8 @@ public class NetworkTypeController extends StateMachine {
                        CarrierConfigManager.KEY_LTE_ENDC_USING_USER_DATA_FOR_RRC_DETECTION_BOOL);
                if (mIsPhysicalChannelConfig16Supported && mIsUsingUserDataForRrcDetection) {
                    mPhone.getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)
                            .registerForPhysicalLinkStateChanged(getHandler(),
                                    EVENT_PHYSICAL_LINK_STATE_CHANGED);
                            .registerForPhysicalLinkStatusChanged(getHandler(),
                                    EVENT_PHYSICAL_LINK_STATUS_CHANGED);
                }
            }
        }
@@ -527,12 +526,12 @@ public class NetworkTypeController extends StateMachine {
                    break;
                case EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED:
                    if (isUsingPhysicalChannelConfigForRrcDetection()) {
                        mPhysicalLinkState = getPhysicalLinkStateFromPhysicalChannelConfig();
                        mPhysicalLinkStatus = getPhysicalLinkStatusFromPhysicalChannelConfig();
                    }
                    break;
                case EVENT_PHYSICAL_LINK_STATE_CHANGED:
                case EVENT_PHYSICAL_LINK_STATUS_CHANGED:
                    AsyncResult ar = (AsyncResult) msg.obj;
                    mPhysicalLinkState = (int) ar.result;
                    mPhysicalLinkStatus = (int) ar.result;
                    break;
                case EVENT_PHYSICAL_CHANNEL_CONFIG_NOTIF_CHANGED:
                    AsyncResult result = (AsyncResult) msg.obj;
@@ -632,7 +631,7 @@ public class NetworkTypeController extends StateMachine {
                    break;
                case EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED:
                    if (isUsingPhysicalChannelConfigForRrcDetection()) {
                        mPhysicalLinkState = getPhysicalLinkStateFromPhysicalChannelConfig();
                        mPhysicalLinkStatus = getPhysicalLinkStatusFromPhysicalChannelConfig();
                        if (mIsTimerResetEnabledForLegacyStateRRCIdle && !isPhysicalLinkActive()) {
                            resetAllTimers();
                        }
@@ -640,9 +639,9 @@ public class NetworkTypeController extends StateMachine {
                    // Update in case of LTE/LTE+ switch
                    updateOverrideNetworkType();
                    break;
                case EVENT_PHYSICAL_LINK_STATE_CHANGED:
                case EVENT_PHYSICAL_LINK_STATUS_CHANGED:
                    AsyncResult ar = (AsyncResult) msg.obj;
                    mPhysicalLinkState = (int) ar.result;
                    mPhysicalLinkStatus = (int) ar.result;
                    if (mIsTimerResetEnabledForLegacyStateRRCIdle && !isPhysicalLinkActive()) {
                        resetAllTimers();
                        updateOverrideNetworkType();
@@ -704,7 +703,7 @@ public class NetworkTypeController extends StateMachine {
                    break;
                case EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED:
                    if (isUsingPhysicalChannelConfigForRrcDetection()) {
                        mPhysicalLinkState = getPhysicalLinkStateFromPhysicalChannelConfig();
                        mPhysicalLinkStatus = getPhysicalLinkStatusFromPhysicalChannelConfig();
                        if (isNrNotRestricted()) {
                            // NOT_RESTRICTED_RRC_IDLE -> NOT_RESTRICTED_RRC_CON
                            if (isPhysicalLinkActive()) {
@@ -719,9 +718,9 @@ public class NetworkTypeController extends StateMachine {
                    // Update in case of LTE/LTE+ switch
                    updateOverrideNetworkType();
                    break;
                case EVENT_PHYSICAL_LINK_STATE_CHANGED:
                case EVENT_PHYSICAL_LINK_STATUS_CHANGED:
                    AsyncResult ar = (AsyncResult) msg.obj;
                    mPhysicalLinkState = (int) ar.result;
                    mPhysicalLinkStatus = (int) ar.result;
                    if (isNrNotRestricted()) {
                        // NOT_RESTRICTED_RRC_IDLE -> NOT_RESTRICTED_RRC_CON
                        if (isPhysicalLinkActive()) {
@@ -788,7 +787,7 @@ public class NetworkTypeController extends StateMachine {
                    break;
                case EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED:
                    if (isUsingPhysicalChannelConfigForRrcDetection()) {
                        mPhysicalLinkState = getPhysicalLinkStateFromPhysicalChannelConfig();
                        mPhysicalLinkStatus = getPhysicalLinkStatusFromPhysicalChannelConfig();
                        if (isNrNotRestricted()) {
                            // NOT_RESTRICTED_RRC_CON -> NOT_RESTRICTED_RRC_IDLE
                            if (!isPhysicalLinkActive()) {
@@ -803,9 +802,9 @@ public class NetworkTypeController extends StateMachine {
                    // Update in case of LTE/LTE+ switch
                    updateOverrideNetworkType();
                    break;
                case EVENT_PHYSICAL_LINK_STATE_CHANGED:
                case EVENT_PHYSICAL_LINK_STATUS_CHANGED:
                    AsyncResult ar = (AsyncResult) msg.obj;
                    mPhysicalLinkState = (int) ar.result;
                    mPhysicalLinkStatus = (int) ar.result;
                    if (isNrNotRestricted()) {
                        // NOT_RESTRICTED_RRC_CON -> NOT_RESTRICTED_RRC_IDLE
                        if (!isPhysicalLinkActive()) {
@@ -880,13 +879,13 @@ public class NetworkTypeController extends StateMachine {
                case EVENT_NR_FREQUENCY_CHANGED:
                case EVENT_PHYSICAL_CHANNEL_CONFIG_CHANGED:
                    if (isUsingPhysicalChannelConfigForRrcDetection()) {
                        mPhysicalLinkState = getPhysicalLinkStateFromPhysicalChannelConfig();
                        mPhysicalLinkStatus = getPhysicalLinkStatusFromPhysicalChannelConfig();
                    }
                    updateNrAdvancedState();
                    break;
                case EVENT_PHYSICAL_LINK_STATE_CHANGED:
                case EVENT_PHYSICAL_LINK_STATUS_CHANGED:
                    AsyncResult ar = (AsyncResult) msg.obj;
                    mPhysicalLinkState = (int) ar.result;
                    mPhysicalLinkStatus = (int) ar.result;
                    if (!isNrConnected()) {
                        log("NR state changed. Sending EVENT_NR_STATE_CHANGED");
                        sendMessage(EVENT_NR_STATE_CHANGED);
@@ -1214,14 +1213,14 @@ public class NetworkTypeController extends StateMachine {
    }

    private boolean isPhysicalLinkActive() {
        return mPhysicalLinkState == DcController.PHYSICAL_LINK_ACTIVE;
        return mPhysicalLinkStatus == DataCallResponse.LINK_STATUS_ACTIVE;
    }

    private int getPhysicalLinkStateFromPhysicalChannelConfig() {
    private int getPhysicalLinkStatusFromPhysicalChannelConfig() {
        List<PhysicalChannelConfig> physicalChannelConfigList =
                mPhone.getServiceStateTracker().getPhysicalChannelConfigList();
        return (physicalChannelConfigList == null || physicalChannelConfigList.isEmpty())
                ? DcController.PHYSICAL_LINK_NOT_ACTIVE : DcController.PHYSICAL_LINK_ACTIVE;
                ? DataCallResponse.LINK_STATUS_DORMANT : DataCallResponse.LINK_STATUS_ACTIVE;
    }

    private int getDataNetworkType() {
@@ -1283,7 +1282,7 @@ public class NetworkTypeController extends StateMachine {
        pw.println("mPrimaryTimerState=" + mPrimaryTimerState);
        pw.println("mSecondaryTimerState=" + mSecondaryTimerState);
        pw.println("mPreviousState=" + mPreviousState);
        pw.println("mPhysicalLinkState=" + mPhysicalLinkState);
        pw.println("mPhysicalLinkStatus=" + mPhysicalLinkStatus);
        pw.println("mAdditionalNrAdvancedBandsList="
                + Arrays.toString(mAdditionalNrAdvancedBandsList));
        pw.println("mNrAdvancedCapablePcoId=" + mNrAdvancedCapablePcoId);
+23 −41
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.internal.telephony.dataconnection;

import android.annotation.IntDef;
import android.hardware.radio.V1_4.DataConnActiveStatus;
import android.net.LinkAddress;
import android.os.AsyncResult;
@@ -25,6 +24,7 @@ import android.os.Looper;
import android.os.Message;
import android.os.RegistrantList;
import android.telephony.AccessNetworkConstants;
import android.telephony.CarrierConfigManager;
import android.telephony.DataFailCause;
import android.telephony.data.ApnSetting;
import android.telephony.data.DataCallResponse;
@@ -42,8 +42,6 @@ import com.android.telephony.Rlog;

import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -58,24 +56,6 @@ public class DcController extends Handler {
    private static final boolean DBG = true;
    private static final boolean VDBG = false;

    /** Physical link state unknown */
    public static final int PHYSICAL_LINK_UNKNOWN = 0;

    /** Physical link state inactive (i.e. RRC idle) */
    public static final int PHYSICAL_LINK_NOT_ACTIVE = 1;

    /** Physical link state active (i.e. RRC connected) */
    public static final int PHYSICAL_LINK_ACTIVE = 2;

    /** @hide */
    @IntDef(prefix = { "PHYSICAL_LINK_" }, value = {
            PHYSICAL_LINK_UNKNOWN,
            PHYSICAL_LINK_NOT_ACTIVE,
            PHYSICAL_LINK_ACTIVE
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface PhysicalLinkState{}

    private final Phone mPhone;
    private final DcTracker mDct;
    private final String mTag;
@@ -92,14 +72,15 @@ public class DcController extends Handler {
            new HashMap<>();

    /**
     * Aggregated physical link state from all data connections. This reflects the device's RRC
     * Aggregated physical link status from all data connections. This reflects the device's RRC
     * connection state.
     * If {@link CarrierConfigManager.KEY_LTE_ENDC_USING_USER_DATA_FOR_RRC_DETECTION_BOOL} is true,
     * If {@link CarrierConfigManager#KEY_LTE_ENDC_USING_USER_DATA_FOR_RRC_DETECTION_BOOL} is true,
     * then This reflects "internet data connection" instead of RRC state.
     */
    private @PhysicalLinkState int mPhysicalLinkState = PHYSICAL_LINK_UNKNOWN;
    private @DataCallResponse.LinkStatus int mPhysicalLinkStatus =
            DataCallResponse.LINK_STATUS_UNKNOWN;

    private RegistrantList mPhysicalLinkStateChangedRegistrants = new RegistrantList();
    private RegistrantList mPhysicalLinkStatusChangedRegistrants = new RegistrantList();

    /**
     * Constructor.
@@ -401,22 +382,23 @@ public class DcController extends Handler {

        if (mDataServiceManager.getTransportType()
                == AccessNetworkConstants.TRANSPORT_TYPE_WWAN) {
            boolean isPhysicalLinkStateFocusingOnInternetData =
            boolean isPhysicalLinkStatusFocusingOnInternetData =
                    mDct.getLteEndcUsingUserDataForIdleDetection();
            int physicalLinkState =
                    (isPhysicalLinkStateFocusingOnInternetData
            int physicalLinkStatus =
                    (isPhysicalLinkStatusFocusingOnInternetData
                            ? isInternetDataCallActive : isAnyDataCallActive)
                            ? PHYSICAL_LINK_ACTIVE : PHYSICAL_LINK_NOT_ACTIVE;
            if (mPhysicalLinkState != physicalLinkState) {
                mPhysicalLinkState = physicalLinkState;
                mPhysicalLinkStateChangedRegistrants.notifyResult(mPhysicalLinkState);
                            ? DataCallResponse.LINK_STATUS_ACTIVE
                            : DataCallResponse.LINK_STATUS_DORMANT;
            if (mPhysicalLinkStatus != physicalLinkStatus) {
                mPhysicalLinkStatus = physicalLinkStatus;
                mPhysicalLinkStatusChangedRegistrants.notifyResult(mPhysicalLinkStatus);
            }
            if (isAnyDataCallDormant && !isAnyDataCallActive) {
                // There is no way to indicate link activity per APN right now. So
                // Link Activity will be considered dormant only when all data calls
                // are dormant.
                // If a single data call is in dormant state and none of the data
                // calls are active broadcast overall link state as dormant.
                // calls are active broadcast overall link status as dormant.
                if (DBG) {
                    log("onDataStateChanged: Data activity DORMANT. stopNetStatePoll");
                }
@@ -453,24 +435,24 @@ public class DcController extends Handler {
    }

    /**
     * Register for physical link state (i.e. RRC state) changed event.
     * if {@link CarrierConfigManager.KEY_LTE_ENDC_USING_USER_DATA_FOR_RRC_DETECTION_BOOL} is true,
     * then physical link state is focusing on "internet data connection" instead of RRC state.
     * Register for physical link status (i.e. RRC state) changed event.
     * if {@link CarrierConfigManager#KEY_LTE_ENDC_USING_USER_DATA_FOR_RRC_DETECTION_BOOL} is true,
     * then physical link status is focusing on "internet data connection" instead of RRC state.
     * @param h The handler
     * @param what The event
     */
    @VisibleForTesting
    public void registerForPhysicalLinkStateChanged(Handler h, int what) {
        mPhysicalLinkStateChangedRegistrants.addUnique(h, what, null);
    public void registerForPhysicalLinkStatusChanged(Handler h, int what) {
        mPhysicalLinkStatusChangedRegistrants.addUnique(h, what, null);
    }

    /**
     * Unregister from physical link state (i.e. RRC state) changed event.
     * Unregister from physical link status (i.e. RRC state) changed event.
     *
     * @param h The previously registered handler
     */
    void unregisterForPhysicalLinkStateChanged(Handler h) {
        mPhysicalLinkStateChangedRegistrants.remove(h);
    void unregisterForPhysicalLinkStatusChanged(Handler h) {
        mPhysicalLinkStatusChangedRegistrants.remove(h);
    }

    private void log(String s) {
+7 −7
Original line number Diff line number Diff line
@@ -354,7 +354,7 @@ public class DcTracker extends Handler {
    private boolean mNrSaSub6Unmetered = false;
    private boolean mNrNsaRoamingUnmetered = false;

    // it effect the PhysicalLinkStateChanged
    // it effect the PhysicalLinkStatusChanged
    private boolean mLteEndcUsingUserDataForRrcDetection = false;

    // stats per data call recovery event
@@ -5628,24 +5628,24 @@ public class DcTracker extends Handler {
    }

    /**
     * Register for physical link state (i.e. RRC state) changed event.
     * Register for physical link status (i.e. RRC state) changed event.
     * if {@link CarrierConfigManager.KEY_LTE_ENDC_USING_USER_DATA_FOR_RRC_DETECTION_BOOL} is true,
     * then physical link state is focusing on "internet data connection" instead of RRC state.
     *
     * @param h The handler
     * @param what The event
     */
    public void registerForPhysicalLinkStateChanged(Handler h, int what) {
        mDcc.registerForPhysicalLinkStateChanged(h, what);
    public void registerForPhysicalLinkStatusChanged(Handler h, int what) {
        mDcc.registerForPhysicalLinkStatusChanged(h, what);
    }

    /**
     * Unregister from physical link state (i.e. RRC state) changed event.
     * Unregister from physical link status (i.e. RRC state) changed event.
     *
     * @param h The previously registered handler
     */
    public void unregisterForPhysicalLinkStateChanged(Handler h) {
        mDcc.unregisterForPhysicalLinkStateChanged(h);
    public void unregisterForPhysicalLinkStatusChanged(Handler h) {
        mDcc.unregisterForPhysicalLinkStatusChanged(h);
    }

    // We use a specialized equals function in Apn setting when checking if an active
+32 −32

File changed.

Preview size limit exceeded, changes collapsed.

+11 −11
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ public class DcControllerTest extends TelephonyTest {
    private static final int DATA_CONNECTION_ACTIVE_PH_LINK_ACTIVE = 2;

    private static final int EVENT_DATA_STATE_CHANGED = 0x00040007;
    private static final int EVENT_PHYSICAL_LINK_STATE_CHANGED = 1;
    private static final int EVENT_PHYSICAL_LINK_STATUS_CHANGED = 1;

    @Mock
    private DataConnection mDc;
@@ -155,7 +155,7 @@ public class DcControllerTest extends TelephonyTest {

    @Test
    @SmallTest
    public void testPhysicalLinkStateChanged_defaultApnTypeAndDormant_registrantNotifyResult()
    public void testPhysicalLinkStatusChanged_defaultApnTypeAndDormant_registrantNotifyResult()
            throws Exception {
        ArrayList<DataCallResponse> l = new ArrayList<>();
        DataCallResponse dcResponse = new DataCallResponse.Builder()
@@ -182,7 +182,7 @@ public class DcControllerTest extends TelephonyTest {
        apnContextList.add(apnContext);
        doReturn(apnContextList).when(mDc).getApnContexts();
        doReturn(true).when(mDcTracker).getLteEndcUsingUserDataForIdleDetection();
        mDcc.registerForPhysicalLinkStateChanged(mTestHandler, EVENT_PHYSICAL_LINK_STATE_CHANGED);
        mDcc.registerForPhysicalLinkStatusChanged(mTestHandler, EVENT_PHYSICAL_LINK_STATUS_CHANGED);

        mDcc.sendMessage(mDcc.obtainMessage(EVENT_DATA_STATE_CHANGED,
                new AsyncResult(null, l, null)));
@@ -191,16 +191,16 @@ public class DcControllerTest extends TelephonyTest {
        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
        verify(mTestHandler, times(1)).sendMessageDelayed(messageCaptor.capture(), anyLong());
        Message message = messageCaptor.getValue();
        assertEquals(EVENT_PHYSICAL_LINK_STATE_CHANGED, message.what);
        assertEquals(EVENT_PHYSICAL_LINK_STATUS_CHANGED, message.what);
        AsyncResult ar = (AsyncResult) message.obj;
        assertEquals(DcController.PHYSICAL_LINK_NOT_ACTIVE, (int) ar.result);
        assertEquals(DataCallResponse.LINK_STATUS_DORMANT, (int) ar.result);
    }

    @Test
    @SmallTest
    public void testPhysicalLinkStateChanged_imsApnTypeAndDormant_NoNotifyResult()
    public void testPhysicalLinkStatusChanged_imsApnTypeAndDormant_NoNotifyResult()
            throws Exception {
        testPhysicalLinkStateChanged_defaultApnTypeAndDormant_registrantNotifyResult();
        testPhysicalLinkStatusChanged_defaultApnTypeAndDormant_registrantNotifyResult();

        ArrayList<DataCallResponse> l = new ArrayList<>();
        DataCallResponse dcResponse = new DataCallResponse.Builder()
@@ -238,9 +238,9 @@ public class DcControllerTest extends TelephonyTest {

    @Test
    @SmallTest
    public void testPhysicalLinkStateChanged_defaultApnTypeAndStateChanged_registrantNotifyResult()
    public void testPhysicalLinkStatusChanged_defaultApnTypeAndStateChanged_registrantNotifyResult()
            throws Exception {
        testPhysicalLinkStateChanged_imsApnTypeAndDormant_NoNotifyResult();
        testPhysicalLinkStatusChanged_imsApnTypeAndDormant_NoNotifyResult();

        ArrayList<DataCallResponse> l = new ArrayList<>();
        DataCallResponse dcResponse = new DataCallResponse.Builder()
@@ -275,8 +275,8 @@ public class DcControllerTest extends TelephonyTest {
        ArgumentCaptor<Message> messageCaptor = ArgumentCaptor.forClass(Message.class);
        verify(mTestHandler, times(2)).sendMessageDelayed(messageCaptor.capture(), anyLong());
        Message message = messageCaptor.getValue();
        assertEquals(EVENT_PHYSICAL_LINK_STATE_CHANGED, message.what);
        assertEquals(EVENT_PHYSICAL_LINK_STATUS_CHANGED, message.what);
        AsyncResult ar = (AsyncResult) message.obj;
        assertEquals(DcController.PHYSICAL_LINK_ACTIVE, (int) ar.result);
        assertEquals(DataCallResponse.LINK_STATUS_ACTIVE, (int) ar.result);
    }
}
 No newline at end of file