Merge "Removed unused PII from TelephonyEventLog" into nyc-mr1-dev
diff --git a/src/java/com/android/internal/telephony/GsmCdmaCallTracker.java b/src/java/com/android/internal/telephony/GsmCdmaCallTracker.java
index fb4025d..37a4ae5 100755
--- a/src/java/com/android/internal/telephony/GsmCdmaCallTracker.java
+++ b/src/java/com/android/internal/telephony/GsmCdmaCallTracker.java
@@ -160,9 +160,10 @@
         updatePhoneType(false);
     }
 
-    private void updatePhoneType(boolean init) {
-        if (!init) {
+    private void updatePhoneType(boolean duringInit) {
+        if (!duringInit) {
             reset();
+            pollCallsWhenSafe();
         }
         if (mPhone.isPhoneTypeGsm()) {
             mConnections = new GsmCdmaConnection[MAX_CONNECTIONS_GSM];
diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
index a23cddb..173f25e 100644
--- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java
+++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
@@ -266,8 +266,6 @@
     private void initRatSpecific(int precisePhoneType) {
         mPendingMMIs.clear();
         mIccPhoneBookIntManager.updateIccRecords(null);
-        //todo: maybe not needed?? should the count also be updated on sim_state_absent?
-        mVmCount = 0;
         mEsn = null;
         mMeid = null;
 
diff --git a/src/java/com/android/internal/telephony/InboundSmsHandler.java b/src/java/com/android/internal/telephony/InboundSmsHandler.java
index 607f01d..ac3beb2 100644
--- a/src/java/com/android/internal/telephony/InboundSmsHandler.java
+++ b/src/java/com/android/internal/telephony/InboundSmsHandler.java
@@ -789,12 +789,12 @@
             return false;
         }
 
-        if (!mUserManager.isUserUnlocked()) {
-            return processMessagePartWithUserLocked(tracker, pdus, destPort);
-        }
-
         SmsBroadcastReceiver resultReceiver = new SmsBroadcastReceiver(tracker);
 
+        if (!mUserManager.isUserUnlocked()) {
+            return processMessagePartWithUserLocked(tracker, pdus, destPort, resultReceiver);
+        }
+
         if (destPort == SmsHeader.PORT_WAP_PUSH) {
             // Build up the data stream
             ByteArrayOutputStream output = new ByteArrayOutputStream();
@@ -849,7 +849,7 @@
      * @return true if an ordered broadcast was sent to the carrier app; false otherwise.
      */
     private boolean processMessagePartWithUserLocked(InboundSmsTracker tracker,
-            byte[][] pdus, int destPort) {
+            byte[][] pdus, int destPort, SmsBroadcastReceiver resultReceiver) {
         log("Credential-encrypted storage not available. Port: " + destPort);
         if (destPort == SmsHeader.PORT_WAP_PUSH && mWapPush.isWapPushForMms(pdus[0], this)) {
             showNewMessageNotification();
@@ -858,7 +858,7 @@
         if (destPort == -1) {
             // This is a regular SMS - hand it to the carrier or system app for filtering.
             boolean filterInvoked = filterSms(
-                pdus, destPort, tracker, null, false /* userUnlocked */);
+                pdus, destPort, tracker, resultReceiver, false /* userUnlocked */);
             if (filterInvoked) {
                 // filter invoked, wait for it to return the result.
                 return true;
@@ -929,19 +929,34 @@
         } else {
             loge("UiccCard not initialized.");
         }
-        List<String> systemPackages =
-            getSystemAppForIntent(new Intent(CarrierMessagingService.SERVICE_INTERFACE));
 
         if (carrierPackages != null && carrierPackages.size() == 1) {
             log("Found carrier package.");
             CarrierSmsFilter smsFilter = new CarrierSmsFilter(pdus, destPort,
                     tracker.getFormat(), resultReceiver);
             CarrierSmsFilterCallback smsFilterCallback = new CarrierSmsFilterCallback(smsFilter,
-                    userUnlocked, true /* filterWithVvm */);
+                    userUnlocked);
             smsFilter.filterSms(carrierPackages.get(0), smsFilterCallback);
             return true;
         }
 
+        // It is possible that carrier app is not present as a CarrierPackage, but instead as a
+        // system app
+        List<String> systemPackages =
+                getSystemAppForIntent(new Intent(CarrierMessagingService.SERVICE_INTERFACE));
+
+        if (systemPackages != null && systemPackages.size() == 1) {
+            log("Found system package.");
+            CarrierSmsFilter smsFilter = new CarrierSmsFilter(pdus, destPort,
+                    tracker.getFormat(), resultReceiver);
+            CarrierSmsFilterCallback smsFilterCallback = new CarrierSmsFilterCallback(smsFilter,
+                    userUnlocked);
+            smsFilter.filterSms(systemPackages.get(0), smsFilterCallback);
+            return true;
+        }
+        logv("Unable to find carrier package: " + carrierPackages
+                + ", nor systemPackages: " + systemPackages);
+
         if (VisualVoicemailSmsFilter.filter(
                 mContext, pdus, tracker.getFormat(), destPort, mPhone.getSubId())) {
             log("Visual voicemail SMS dropped");
@@ -949,17 +964,6 @@
             return true;
         }
 
-        if (systemPackages != null && systemPackages.size() == 1) {
-            log("Found system package.");
-            CarrierSmsFilter smsFilter = new CarrierSmsFilter(pdus, destPort,
-                    tracker.getFormat(), resultReceiver);
-            CarrierSmsFilterCallback smsFilterCallback = new CarrierSmsFilterCallback(smsFilter,
-                    userUnlocked, false);
-            smsFilter.filterSms(systemPackages.get(0), smsFilterCallback);
-            return true;
-        }
-        logv("Unable to find carrier package: " + carrierPackages
-                + ", nor systemPackages: " + systemPackages);
         return false;
     }
 
@@ -1387,13 +1391,10 @@
     private final class CarrierSmsFilterCallback extends ICarrierMessagingCallback.Stub {
         private final CarrierSmsFilter mSmsFilter;
         private final boolean mUserUnlocked;
-        private final boolean mFilterWithVvm;
 
-        CarrierSmsFilterCallback(CarrierSmsFilter smsFilter, boolean userUnlocked,
-                boolean filterWithVvm) {
+        CarrierSmsFilterCallback(CarrierSmsFilter smsFilter, boolean userUnlocked) {
             mSmsFilter = smsFilter;
             mUserUnlocked = userUnlocked;
-            mFilterWithVvm = filterWithVvm;
         }
 
         /**
@@ -1408,13 +1409,11 @@
             try {
                 logv("onFilterComplete: result is " + result);
                 if ((result & CarrierMessagingService.RECEIVE_OPTIONS_DROP) == 0) {
-                    if (mFilterWithVvm) {
-                        if (VisualVoicemailSmsFilter.filter(mContext, mSmsFilter.mPdus,
-                                mSmsFilter.mSmsFormat, mSmsFilter.mDestPort, mPhone.getSubId())) {
-                            log("Visual voicemail SMS dropped");
-                            dropSms(mSmsFilter.mSmsBroadcastReceiver);
-                            return;
-                        }
+                    if (VisualVoicemailSmsFilter.filter(mContext, mSmsFilter.mPdus,
+                            mSmsFilter.mSmsFormat, mSmsFilter.mDestPort, mPhone.getSubId())) {
+                        log("Visual voicemail SMS dropped");
+                        dropSms(mSmsFilter.mSmsBroadcastReceiver);
+                        return;
                     }
 
                     if (mUserUnlocked) {
diff --git a/src/java/com/android/internal/telephony/ServiceStateTracker.java b/src/java/com/android/internal/telephony/ServiceStateTracker.java
index 0196bdd..195eedd 100644
--- a/src/java/com/android/internal/telephony/ServiceStateTracker.java
+++ b/src/java/com/android/internal/telephony/ServiceStateTracker.java
@@ -636,6 +636,7 @@
     public boolean getDesiredPowerState() {
         return mDesiredPowerState;
     }
+    public boolean getPowerStateFromCarrier() { return !mRadioDisabledByCarrier; }
 
     private SignalStrength mLastSignalStrength = null;
     protected boolean notifySignalStrength() {
@@ -808,7 +809,7 @@
      */
     public void setRadioPowerFromCarrier(boolean enable) {
         mRadioDisabledByCarrier = !enable;
-        setRadioPower(enable);
+        setPowerStateToDesired();
     }
 
     /**
@@ -2291,11 +2292,10 @@
         }
 
         // If we want it on and it's off, turn it on
-        if (mDesiredPowerState
-                && mCi.getRadioState() == CommandsInterface.RadioState.RADIO_OFF &&
-                !mRadioDisabledByCarrier) {
+        if (mDesiredPowerState && !mRadioDisabledByCarrier
+                && mCi.getRadioState() == CommandsInterface.RadioState.RADIO_OFF) {
             mCi.setRadioPower(true, null);
-        } else if (!mDesiredPowerState && mCi.getRadioState().isOn()) {
+        } else if ((!mDesiredPowerState || mRadioDisabledByCarrier) && mCi.getRadioState().isOn()) {
             // If it's on and available and we want it off gracefully
             if (mPhone.isPhoneTypeGsm() && mPowerOffDelayNeed) {
                 if (mImsRegistrationOnOff && !mAlarmSwitch) {
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcTracker.java b/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
index 8ba3b34..9821733 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
@@ -208,7 +208,8 @@
         PS_RESTRICTED(" - mIsPsRestricted= true"),
         UNDESIRED_POWER_STATE(" - desiredPowerState= false"),
         INTERNAL_DATA_DISABLED(" - mInternalDataEnabled= false"),
-        DEFAULT_DATA_UNSELECTED(" - defaultDataSelected= false");
+        DEFAULT_DATA_UNSELECTED(" - defaultDataSelected= false"),
+        RADIO_DISABLED_BY_CARRIER(" - powerStateFromCarrier= false");
 
         public String mFailReasonStr;
 
@@ -1369,9 +1370,11 @@
 
         boolean attachedState = mAttached.get();
         boolean desiredPowerState = mPhone.getServiceStateTracker().getDesiredPowerState();
+        boolean radioStateFromCarrier = mPhone.getServiceStateTracker().getPowerStateFromCarrier();
         int radioTech = mPhone.getServiceState().getRilDataRadioTechnology();
         if (radioTech == ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN) {
             desiredPowerState = true;
+            radioStateFromCarrier = true;
         }
 
         IccRecords r = mIccRecords.get();
@@ -1433,6 +1436,10 @@
             if(failureReason == null) return false;
             failureReason.addDataAllowFailReason(DataAllowFailReasonType.UNDESIRED_POWER_STATE);
         }
+        if (!radioStateFromCarrier) {
+            if(failureReason == null) return false;
+            failureReason.addDataAllowFailReason(DataAllowFailReasonType.RADIO_DISABLED_BY_CARRIER);
+        }
 
         return failureReason == null || !failureReason.isFailed();
     }
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsExternalConnection.java b/src/java/com/android/internal/telephony/imsphone/ImsExternalConnection.java
index d0b9ece..071aebb 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsExternalConnection.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsExternalConnection.java
@@ -16,6 +16,7 @@
 
 package com.android.internal.telephony.imsphone;
 
+import com.android.internal.R;
 import com.android.internal.telephony.Call;
 import com.android.internal.telephony.CallStateException;
 import com.android.internal.telephony.Connection;
@@ -23,7 +24,9 @@
 import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.UUSInfo;
 
+import android.content.Context;
 import android.net.Uri;
+import android.telecom.PhoneAccount;
 import android.telephony.PhoneNumberUtils;
 import android.telephony.Rlog;
 import android.util.Log;
@@ -45,6 +48,9 @@
  */
 public class ImsExternalConnection extends Connection {
 
+    private static final String CONFERENCE_PREFIX = "conf";
+    private final Context mContext;
+
     public interface Listener {
         void onPullExternalCall(ImsExternalConnection connection);
     }
@@ -79,6 +85,7 @@
 
     protected ImsExternalConnection(Phone phone, int callId, Uri address, boolean isPullable) {
         super(phone.getPhoneType());
+        mContext = phone.getContext();
         mCall = new ImsExternalCall(phone, this);
         mCallId = callId;
         setExternalConnectionAddress(address);
@@ -215,6 +222,15 @@
     public void setExternalConnectionAddress(Uri address) {
         mOriginalAddress = address;
 
+        if (PhoneAccount.SCHEME_SIP.equals(address.getScheme())) {
+            if (address.getSchemeSpecificPart().startsWith(CONFERENCE_PREFIX)) {
+                mCnapName = mContext.getString(com.android.internal.R.string.conference_call);
+                mCnapNamePresentation = PhoneConstants.PRESENTATION_ALLOWED;
+                mAddress = "";
+                mNumberPresentation = PhoneConstants.PRESENTATION_RESTRICTED;
+                return;
+            }
+        }
         Uri telUri = PhoneNumberUtils.convertSipUriToTelUri(address);
         mAddress = telUri.getSchemeSpecificPart();
     }
diff --git a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
index 9a270c4..fd48279 100644
--- a/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
+++ b/src/java/com/android/internal/telephony/imsphone/ImsPhoneCallTracker.java
@@ -1254,6 +1254,8 @@
                 return DisconnectCause.FDN_BLOCKED;
 
             case ImsReasonInfo.CODE_ANSWERED_ELSEWHERE:
+                return DisconnectCause.ANSWERED_ELSEWHERE;
+
             case ImsReasonInfo.CODE_CALL_END_CAUSE_CALL_PULL:
                 return DisconnectCause.CALL_PULLED;
             default:
@@ -1366,7 +1368,8 @@
                 mOnHoldToneStarted = false;
                 mOnHoldToneId = -1;
             }
-            if (conn != null && conn.isIncoming() && conn.getConnectTime() == 0) {
+            if (conn != null && conn.isIncoming() && conn.getConnectTime() == 0
+                    && cause != DisconnectCause.ANSWERED_ELSEWHERE) {
                 // Missed
                 if (cause == DisconnectCause.NORMAL) {
                     cause = DisconnectCause.INCOMING_MISSED;
@@ -2342,7 +2345,10 @@
         // eventually counted when next getVtDataUsage is called.
         if (mState != PhoneConstants.State.IDLE) {
             for (ImsPhoneConnection conn : mConnections) {
-                conn.getVideoProvider().onRequestConnectionDataUsage();
+                android.telecom.Connection.VideoProvider videoProvider = conn.getVideoProvider();
+                if (videoProvider != null) {
+                    videoProvider.onRequestConnectionDataUsage();
+                }
             }
         }
 
diff --git a/src/java/com/android/internal/telephony/test/SimulatedCommands.java b/src/java/com/android/internal/telephony/test/SimulatedCommands.java
index 8fbc2a0..e44b1d8 100644
--- a/src/java/com/android/internal/telephony/test/SimulatedCommands.java
+++ b/src/java/com/android/internal/telephony/test/SimulatedCommands.java
@@ -458,6 +458,7 @@
      */
     @Override
     public void getCurrentCalls (Message result) {
+        SimulatedCommandsVerifier.getInstance().getCurrentCalls(result);
         if ((mState == RadioState.RADIO_ON) && !isSimLocked()) {
             //Rlog.i("GSM", "[SimCmds] getCurrentCalls");
             resultSuccess(result, simulatedCallState.getDriverCalls());
diff --git a/src/java/com/android/internal/telephony/uicc/SIMRecords.java b/src/java/com/android/internal/telephony/uicc/SIMRecords.java
index 57c9fe9..db29bc4 100644
--- a/src/java/com/android/internal/telephony/uicc/SIMRecords.java
+++ b/src/java/com/android/internal/telephony/uicc/SIMRecords.java
@@ -554,7 +554,9 @@
                 // Update dialNumber if not empty and CFU is enabled.
                 // Spec reference for EF_CFIS contents, TS 51.011 section 10.3.46.
                 if (enable && !TextUtils.isEmpty(dialNumber)) {
-                    log("EF_CFIS: updating cf number, " + dialNumber);
+                    if (VDBG) {
+                        logv("EF_CFIS: updating cf number, " + dialNumber);
+                    }
                     byte[] bcdNumber = PhoneNumberUtils.numberToCalledPartyBCD(dialNumber);
 
                     System.arraycopy(bcdNumber, 0, mEfCfis, CFIS_TON_NPI_OFFSET, bcdNumber.length);
@@ -1300,6 +1302,7 @@
             case EF_FDN:
                 if (DBG) log("SIM Refresh called for EF_FDN");
                 mParentApp.queryFdn();
+                mAdnCache.reset();
                 break;
             case EF_MSISDN:
                 mRecordsToLoad++;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaCallTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaCallTrackerTest.java
index 202e463..29a56d1 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaCallTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/GsmCdmaCallTrackerTest.java
@@ -16,13 +16,12 @@
 package com.android.internal.telephony;
 
 import android.os.HandlerThread;
-import android.os.SystemProperties;
 import android.telephony.DisconnectCause;
 import android.telephony.PhoneNumberUtils;
 import android.telephony.ServiceState;
+import android.test.suitebuilder.annotation.MediumTest;
 import android.test.suitebuilder.annotation.SmallTest;
 
-import com.android.internal.telephony.test.SimulatedCommandsVerifier;
 import android.os.Message;
 import org.junit.After;
 import org.junit.Assert;
@@ -32,9 +31,7 @@
 import org.mockito.ArgumentCaptor;
 import android.os.Handler;
 
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.doReturn;
 import static org.junit.Assert.assertEquals;
 import static org.mockito.Mockito.*;
@@ -127,7 +124,7 @@
     }
 
     @Test
-    @SmallTest
+    @MediumTest
     public void testMOCallHangup() {
         testMOCallDial();
         logd("Waiting for POLL CALL response from RIL ");
@@ -142,14 +139,14 @@
             ex.printStackTrace();
             Assert.fail("unexpected exception thrown" + ex.getMessage());
         }
-        waitForMs(200);
+        waitForMs(300);
         assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mForegroundCall.getState());
         assertEquals(0, mCTUT.mForegroundCall.getConnections().size());
         assertEquals(PhoneConstants.State.IDLE, mCTUT.getState());
     }
 
     @Test
-    @SmallTest
+    @MediumTest
     public void testMOCallDialPickUpHangup() {
         testMOCallPickUp();
         assertEquals(GsmCdmaCall.State.ACTIVE, mCTUT.mForegroundCall.getState());
@@ -166,7 +163,7 @@
             Assert.fail("unexpected exception thrown" + ex.getMessage());
         }
         /* request send to RIL still in disconnecting state */
-        waitForMs(200);
+        waitForMs(300);
         assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mForegroundCall.getState());
         assertEquals(0, mCTUT.mForegroundCall.getConnections().size());
         assertEquals(PhoneConstants.State.IDLE, mCTUT.getState());
@@ -175,7 +172,7 @@
     }
 
     @Test
-    @SmallTest
+    @MediumTest
     public void testMOCallPendingHangUp() {
         testMOCallDial();
         logd("MO call hangup before established[ getting result from RIL ]");
@@ -187,14 +184,14 @@
             ex.printStackTrace();
             Assert.fail("unexpected exception thrown" + ex.getMessage());
         }
-        waitForMs(200);
+        waitForMs(300);
         assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mForegroundCall.getState());
         assertEquals(0, mCTUT.mForegroundCall.getConnections().size());
         assertEquals(PhoneConstants.State.IDLE, mCTUT.getState());
     }
 
     @Test
-    @SmallTest
+    @MediumTest
     public void testMOCallSwitch() {
         testMOCallPickUp();
         logd("MO call picked up, initiating a new MO call");
@@ -280,7 +277,7 @@
     }
 
     @Test
-    @SmallTest
+    @MediumTest
     public void testMOCallSwitchHangupForeGround() {
         testMOCallSwitch();
         logd("Hang up the foreground MO call while dialing ");
@@ -290,7 +287,7 @@
             ex.printStackTrace();
             Assert.fail("unexpected exception thrown" + ex.getMessage());
         }
-        waitForMs(200);
+        waitForMs(300);
         logd(" Foreground Call is IDLE and BackGround Call is still HOLDING ");
         /* if we want to hang up foreground call which is alerting state, hangup all */
         assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mForegroundCall.getState());
@@ -298,7 +295,7 @@
     }
 
     @Test
-    @SmallTest
+    @MediumTest
     public void testMOCallPickUpHangUpResumeBackGround() {
         testMOCallSwitch();
         logd("Pick up the new MO Call");
@@ -321,7 +318,7 @@
             Assert.fail("unexpected exception thrown" + ex.getMessage());
         }
 
-        waitForMs(200);
+        waitForMs(300);
         logd(" BackGround Call switch to ForeGround Call ");
         assertEquals(GsmCdmaCall.State.ACTIVE, mCTUT.mForegroundCall.getState());
         assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mBackgroundCall.getState());
@@ -350,5 +347,17 @@
         verify(mHandler,times(1)).sendMessageAtTime(mCaptorMessage.capture(), mCaptorLong.capture());
         assertEquals(VOICE_CALL_ENDED_EVENT, mCaptorMessage.getValue().what);
     }
+
+    @Test @SmallTest
+    public void testUpdatePhoneType() {
+        // verify getCurrentCalls is called on init
+        verify(mSimulatedCommandsVerifier).getCurrentCalls(any(Message.class));
+
+        // update phone type
+        mCTUT.updatePhoneType();
+
+        // verify getCurrentCalls is called on updating phone type
+        verify(mSimulatedCommandsVerifier, times(2)).getCurrentCalls(any(Message.class));
+    }
 }
 
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
index 8b02a3d..eec6adb 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ServiceStateTrackerTest.java
@@ -153,6 +153,39 @@
 
     @Test
     @MediumTest
+    public void testSetRadioPowerFromCarrier() {
+        // Carrier disable radio power
+        sst.setRadioPowerFromCarrier(false);
+        waitForMs(100);
+        assertFalse(mSimulatedCommands.getRadioState().isOn());
+        assertTrue(sst.getDesiredPowerState());
+        assertFalse(sst.getPowerStateFromCarrier());
+
+        // User toggle radio power will not overrides carrier settings
+        sst.setRadioPower(true);
+        waitForMs(100);
+        assertFalse(mSimulatedCommands.getRadioState().isOn());
+        assertTrue(sst.getDesiredPowerState());
+        assertFalse(sst.getPowerStateFromCarrier());
+
+        // Carrier re-enable radio power
+        sst.setRadioPowerFromCarrier(true);
+        waitForMs(100);
+        assertTrue(mSimulatedCommands.getRadioState().isOn());
+        assertTrue(sst.getDesiredPowerState());
+        assertTrue(sst.getPowerStateFromCarrier());
+
+        // User toggle radio power off (airplane mode) and set carrier on
+        sst.setRadioPower(false);
+        sst.setRadioPowerFromCarrier(true);
+        waitForMs(100);
+        assertFalse(mSimulatedCommands.getRadioState().isOn());
+        assertFalse(sst.getDesiredPowerState());
+        assertTrue(sst.getPowerStateFromCarrier());
+    }
+
+    @Test
+    @MediumTest
     public void testNoRilTrafficAfterSetRadioPower() {
         sst.setRadioPower(true);
         final int getOperatorCallCount = mSimulatedCommands.getGetOperatorCallCount();
diff --git a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnContextTest.java b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnContextTest.java
index 7e07115..8c49c21 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnContextTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnContextTest.java
@@ -140,9 +140,9 @@
     @SmallTest
     public void testNetworkRequest() throws Exception {
         LocalLog log = new LocalLog(3);
-        NetworkCapabilities nc = new NetworkCapabilities();
-        NetworkRequest nr = new NetworkRequest(nc, 0, 0);
+        NetworkRequest nr = new NetworkRequest.Builder().build();
         mApnContext.requestNetwork(nr, log);
+
         verify(mDcTracker, times(1)).setEnabled(eq(DctConstants.APN_DEFAULT_ID), eq(true));
         mApnContext.requestNetwork(nr, log);
         verify(mDcTracker, times(1)).setEnabled(eq(DctConstants.APN_DEFAULT_ID), eq(true));
diff --git a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DcTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DcTrackerTest.java
index 772905b..99b8131 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DcTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DcTrackerTest.java
@@ -308,6 +308,7 @@
         doReturn(true).when(mSimRecords).getRecordsLoaded();
         doReturn(PhoneConstants.State.IDLE).when(mCT).getState();
         doReturn(true).when(mSST).getDesiredPowerState();
+        doReturn(true).when(mSST).getPowerStateFromCarrier();
         doAnswer(
                 new Answer<Void>() {
                     @Override
@@ -735,9 +736,8 @@
         mDct.sendMessage(mDct.obtainMessage(intArgumentCaptor.getValue(), null));
         waitForMs(200);
 
-        NetworkCapabilities nc = new NetworkCapabilities();
-        nc.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
-        NetworkRequest nr = new NetworkRequest(nc, 0, 0);
+        NetworkRequest nr = new NetworkRequest.Builder()
+                .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).build();
         LocalLog l = new LocalLog(100);
         mDct.requestNetwork(nr, l);
         waitForMs(200);
diff --git a/tests/telephonytests/src/com/android/internal/telephony/mocks/ConnectivityServiceMock.java b/tests/telephonytests/src/com/android/internal/telephony/mocks/ConnectivityServiceMock.java
index 7366526..bb54ead 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/mocks/ConnectivityServiceMock.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/mocks/ConnectivityServiceMock.java
@@ -315,7 +315,7 @@
         NetworkAgentInfo nai = mNetworkAgentInfos.get(msg.replyTo);
         if (nai != null) {
             if (DBG) {
-                log(nai.name() + " got DISCONNECTED, was satisfying " + nai.networkRequests.size());
+                log(nai.name() + " got DISCONNECTED, was satisfying " + nai.numNetworkRequests());
             }
             // A network agent has disconnected.
             // TODO - if we move the logic to the network agent (have them disconnect
@@ -755,9 +755,8 @@
         }
 
         NetworkRequest networkRequest = new NetworkRequest(networkCapabilities, legacyType,
-                nextNetworkRequestId());
-        NetworkRequestInfo nri = new NetworkRequestInfo(messenger, networkRequest, binder,
-                NetworkRequestInfo.REQUEST);
+                nextNetworkRequestId(), NetworkRequest.Type.REQUEST);
+        NetworkRequestInfo nri = new NetworkRequestInfo(messenger, networkRequest, binder, true);
         if (DBG) log("requestNetwork for " + nri);
 
         mHandler.sendMessage(mHandler.obtainMessage(EVENT_REGISTER_NETWORK_REQUEST, nri));
@@ -949,8 +948,8 @@
     }
 
     private void sendUpdatedScoreToFactories(NetworkAgentInfo nai) {
-        for (int i = 0; i < nai.networkRequests.size(); i++) {
-            NetworkRequest nr = nai.networkRequests.valueAt(i);
+        for (int i = 0; i < nai.numNetworkRequests(); i++) {
+            NetworkRequest nr = nai.requestAt(i);
             // Don't send listening requests to factories. b/17393458
             if (!isRequest(nr)) continue;
                 sendUpdatedScoreToFactories(nr, nai.getCurrentScore());