Loading src/java/com/android/internal/telephony/GsmCdmaPhone.java +4 −10 Original line number Diff line number Diff line Loading @@ -525,12 +525,6 @@ public class GsmCdmaPhone extends Phone { ret = PhoneConstants.DataState.DISCONNECTED; } else { /* mSST.gprsState == ServiceState.STATE_IN_SERVICE */ switch (mDcTracker.getState(apnType)) { case RETRYING: case FAILED: case IDLE: ret = PhoneConstants.DataState.DISCONNECTED; break; case CONNECTED: case DISCONNECTING: if ( mCT.mState != PhoneConstants.State.IDLE Loading @@ -540,11 +534,11 @@ public class GsmCdmaPhone extends Phone { ret = PhoneConstants.DataState.CONNECTED; } break; case CONNECTING: case SCANNING: ret = PhoneConstants.DataState.CONNECTING; break; default: ret = PhoneConstants.DataState.DISCONNECTED; } } Loading src/java/com/android/internal/telephony/dataconnection/DataConnection.java +14 −2 Original line number Diff line number Diff line Loading @@ -297,10 +297,22 @@ public class DataConnection extends StateMachine { return new LinkProperties(mLinkProperties); } boolean getIsInactive() { boolean isInactive() { return getCurrentState() == mInactiveState; } boolean isDisconnecting() { return getCurrentState() == mDisconnectingState; } boolean isActive() { return getCurrentState() == mActiveState; } boolean isActivating() { return getCurrentState() == mActivatingState; } int getCid() { return mCid; } Loading Loading @@ -1271,7 +1283,7 @@ public class DataConnection extends StateMachine { break; } case DcAsyncChannel.REQ_IS_INACTIVE: { boolean val = getIsInactive(); boolean val = isInactive(); if (VDBG) log("REQ_IS_INACTIVE isInactive=" + val); mAc.replyToMessage(msg, DcAsyncChannel.RSP_IS_INACTIVE, val ? 1 : 0); break; Loading src/java/com/android/internal/telephony/dataconnection/DcAsyncChannel.java +1 −1 Original line number Diff line number Diff line Loading @@ -153,7 +153,7 @@ public class DcAsyncChannel extends AsyncChannel { value = false; } } else { value = mDc.getIsInactive(); value = mDc.isInactive(); } return value; } Loading src/java/com/android/internal/telephony/dataconnection/DcTracker.java +22 −5 Original line number Diff line number Diff line Loading @@ -1082,13 +1082,30 @@ public class DcTracker extends Handler { return null; } // Return state of specific apn type /** * Returns {@link DctConstants.State} based on the state of the {@link DataConnection} that * contains a {@link ApnSetting} that supported the given apn type {@code anpType}. * * <p> * Assumes there is less than one {@link ApnSetting} can support the given apn type. */ public DctConstants.State getState(String apnType) { ApnContext apnContext = mApnContexts.get(apnType); if (apnContext != null) { return apnContext.getState(); for (DataConnection dc : mDataConnections.values()) { ApnSetting apnSetting = dc.getApnSetting(); if (apnSetting != null && apnSetting.canHandleType(apnType)) { if (dc.isActive()) { return DctConstants.State.CONNECTED; } else if (dc.isActivating()) { return DctConstants.State.CONNECTING; } else if (dc.isInactive()) { return DctConstants.State.IDLE; } else if (dc.isDisconnecting()) { return DctConstants.State.DISCONNECTING; } return DctConstants.State.FAILED; } } return DctConstants.State.IDLE; } // Return if apn type is a provisioning apn. Loading tests/telephonytests/src/com/android/internal/telephony/dataconnection/DcTrackerTest.java +40 −12 Original line number Diff line number Diff line Loading @@ -577,7 +577,7 @@ public class DcTrackerTest extends TelephonyTest { logd("Sending EVENT_ENABLE_NEW_APN"); // APN id 0 is APN_TYPE_DEFAULT mDct.setEnabled(0, true); mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true); waitForMs(200); dataConnectionReasons = new DataConnectionReasons(); Loading Loading @@ -651,7 +651,7 @@ public class DcTrackerTest extends TelephonyTest { logd("Sending EVENT_ENABLE_NEW_APN"); // APN id 0 is APN_TYPE_DEFAULT mDct.setEnabled(0, true); mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true); waitForMs(200); Loading Loading @@ -710,8 +710,8 @@ public class DcTrackerTest extends TelephonyTest { boolean dataEnabled = mDct.isUserDataEnabled(); mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); mDct.setEnabled(5, true); mDct.setEnabled(0, true); mDct.setEnabled(DctConstants.APN_IMS_ID, true); mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true); logd("Sending EVENT_RECORDS_LOADED"); mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); Loading Loading @@ -764,8 +764,9 @@ public class DcTrackerTest extends TelephonyTest { mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); mDct.setEnabled(5, true); mDct.setEnabled(0, true); mDct.setEnabled(DctConstants.APN_IMS_ID, true); mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true); logd("Sending EVENT_RECORDS_LOADED"); mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); Loading Loading @@ -822,8 +823,8 @@ public class DcTrackerTest extends TelephonyTest { //set Default and MMS to be metered in the CarrierConfigManager mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); mDct.setEnabled(5, true); mDct.setEnabled(0, true); mDct.setEnabled(DctConstants.APN_IMS_ID, true); mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true); logd("Sending DATA_ENABLED_CMD"); mDct.setUserDataEnabled(true); Loading Loading @@ -937,8 +938,8 @@ public class DcTrackerTest extends TelephonyTest { boolean dataEnabled = mDct.isUserDataEnabled(); mDct.setUserDataEnabled(true); mDct.setEnabled(5, true); mDct.setEnabled(0, true); mDct.setEnabled(DctConstants.APN_IMS_ID, true); mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true); logd("Sending EVENT_RECORDS_LOADED"); mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); Loading Loading @@ -1003,6 +1004,33 @@ public class DcTrackerTest extends TelephonyTest { any(Message.class)); } @Test @SmallTest public void testGetDataConnectionState() throws Exception { initApns(PhoneConstants.APN_TYPE_SUPL, new String[]{PhoneConstants.APN_TYPE_SUPL, PhoneConstants.APN_TYPE_DEFAULT}); mDct.setUserDataEnabled(false); mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, new String[]{PhoneConstants.APN_TYPE_DEFAULT}); logd("Sending EVENT_RECORDS_LOADED"); mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); waitForMs(200); logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); waitForMs(200); mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_TRY_SETUP_DATA, mApnContext)); waitForMs(200); // Assert that both APN_TYPE_SUPL & APN_TYPE_DEFAULT are connected even we only setup data // for APN_TYPE_SUPL assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_SUPL)); assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT)); } // Test the unmetered APN setup when data is disabled. @Test @SmallTest Loading Loading @@ -1206,7 +1234,7 @@ public class DcTrackerTest extends TelephonyTest { .getRilDataRadioTechnology(); mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, new String[]{PhoneConstants.APN_TYPE_DEFAULT}); mDct.setEnabled(0, true); mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true); mDct.setUserDataEnabled(true); initApns(PhoneConstants.APN_TYPE_DEFAULT, new String[]{PhoneConstants.APN_TYPE_ALL}); Loading Loading @@ -1293,7 +1321,7 @@ public class DcTrackerTest extends TelephonyTest { .getRilDataRadioTechnology(); mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, new String[]{PhoneConstants.APN_TYPE_DEFAULT}); mDct.setEnabled(0, true); mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true); mDct.setUserDataEnabled(true); initApns(PhoneConstants.APN_TYPE_DEFAULT, new String[]{PhoneConstants.APN_TYPE_ALL}); Loading Loading
src/java/com/android/internal/telephony/GsmCdmaPhone.java +4 −10 Original line number Diff line number Diff line Loading @@ -525,12 +525,6 @@ public class GsmCdmaPhone extends Phone { ret = PhoneConstants.DataState.DISCONNECTED; } else { /* mSST.gprsState == ServiceState.STATE_IN_SERVICE */ switch (mDcTracker.getState(apnType)) { case RETRYING: case FAILED: case IDLE: ret = PhoneConstants.DataState.DISCONNECTED; break; case CONNECTED: case DISCONNECTING: if ( mCT.mState != PhoneConstants.State.IDLE Loading @@ -540,11 +534,11 @@ public class GsmCdmaPhone extends Phone { ret = PhoneConstants.DataState.CONNECTED; } break; case CONNECTING: case SCANNING: ret = PhoneConstants.DataState.CONNECTING; break; default: ret = PhoneConstants.DataState.DISCONNECTED; } } Loading
src/java/com/android/internal/telephony/dataconnection/DataConnection.java +14 −2 Original line number Diff line number Diff line Loading @@ -297,10 +297,22 @@ public class DataConnection extends StateMachine { return new LinkProperties(mLinkProperties); } boolean getIsInactive() { boolean isInactive() { return getCurrentState() == mInactiveState; } boolean isDisconnecting() { return getCurrentState() == mDisconnectingState; } boolean isActive() { return getCurrentState() == mActiveState; } boolean isActivating() { return getCurrentState() == mActivatingState; } int getCid() { return mCid; } Loading Loading @@ -1271,7 +1283,7 @@ public class DataConnection extends StateMachine { break; } case DcAsyncChannel.REQ_IS_INACTIVE: { boolean val = getIsInactive(); boolean val = isInactive(); if (VDBG) log("REQ_IS_INACTIVE isInactive=" + val); mAc.replyToMessage(msg, DcAsyncChannel.RSP_IS_INACTIVE, val ? 1 : 0); break; Loading
src/java/com/android/internal/telephony/dataconnection/DcAsyncChannel.java +1 −1 Original line number Diff line number Diff line Loading @@ -153,7 +153,7 @@ public class DcAsyncChannel extends AsyncChannel { value = false; } } else { value = mDc.getIsInactive(); value = mDc.isInactive(); } return value; } Loading
src/java/com/android/internal/telephony/dataconnection/DcTracker.java +22 −5 Original line number Diff line number Diff line Loading @@ -1082,13 +1082,30 @@ public class DcTracker extends Handler { return null; } // Return state of specific apn type /** * Returns {@link DctConstants.State} based on the state of the {@link DataConnection} that * contains a {@link ApnSetting} that supported the given apn type {@code anpType}. * * <p> * Assumes there is less than one {@link ApnSetting} can support the given apn type. */ public DctConstants.State getState(String apnType) { ApnContext apnContext = mApnContexts.get(apnType); if (apnContext != null) { return apnContext.getState(); for (DataConnection dc : mDataConnections.values()) { ApnSetting apnSetting = dc.getApnSetting(); if (apnSetting != null && apnSetting.canHandleType(apnType)) { if (dc.isActive()) { return DctConstants.State.CONNECTED; } else if (dc.isActivating()) { return DctConstants.State.CONNECTING; } else if (dc.isInactive()) { return DctConstants.State.IDLE; } else if (dc.isDisconnecting()) { return DctConstants.State.DISCONNECTING; } return DctConstants.State.FAILED; } } return DctConstants.State.IDLE; } // Return if apn type is a provisioning apn. Loading
tests/telephonytests/src/com/android/internal/telephony/dataconnection/DcTrackerTest.java +40 −12 Original line number Diff line number Diff line Loading @@ -577,7 +577,7 @@ public class DcTrackerTest extends TelephonyTest { logd("Sending EVENT_ENABLE_NEW_APN"); // APN id 0 is APN_TYPE_DEFAULT mDct.setEnabled(0, true); mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true); waitForMs(200); dataConnectionReasons = new DataConnectionReasons(); Loading Loading @@ -651,7 +651,7 @@ public class DcTrackerTest extends TelephonyTest { logd("Sending EVENT_ENABLE_NEW_APN"); // APN id 0 is APN_TYPE_DEFAULT mDct.setEnabled(0, true); mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true); waitForMs(200); Loading Loading @@ -710,8 +710,8 @@ public class DcTrackerTest extends TelephonyTest { boolean dataEnabled = mDct.isUserDataEnabled(); mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); mDct.setEnabled(5, true); mDct.setEnabled(0, true); mDct.setEnabled(DctConstants.APN_IMS_ID, true); mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true); logd("Sending EVENT_RECORDS_LOADED"); mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); Loading Loading @@ -764,8 +764,9 @@ public class DcTrackerTest extends TelephonyTest { mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); mDct.setEnabled(5, true); mDct.setEnabled(0, true); mDct.setEnabled(DctConstants.APN_IMS_ID, true); mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true); logd("Sending EVENT_RECORDS_LOADED"); mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); Loading Loading @@ -822,8 +823,8 @@ public class DcTrackerTest extends TelephonyTest { //set Default and MMS to be metered in the CarrierConfigManager mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_ROAMING_APN_TYPES_STRINGS, new String[]{PhoneConstants.APN_TYPE_DEFAULT, PhoneConstants.APN_TYPE_MMS}); mDct.setEnabled(5, true); mDct.setEnabled(0, true); mDct.setEnabled(DctConstants.APN_IMS_ID, true); mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true); logd("Sending DATA_ENABLED_CMD"); mDct.setUserDataEnabled(true); Loading Loading @@ -937,8 +938,8 @@ public class DcTrackerTest extends TelephonyTest { boolean dataEnabled = mDct.isUserDataEnabled(); mDct.setUserDataEnabled(true); mDct.setEnabled(5, true); mDct.setEnabled(0, true); mDct.setEnabled(DctConstants.APN_IMS_ID, true); mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true); logd("Sending EVENT_RECORDS_LOADED"); mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); Loading Loading @@ -1003,6 +1004,33 @@ public class DcTrackerTest extends TelephonyTest { any(Message.class)); } @Test @SmallTest public void testGetDataConnectionState() throws Exception { initApns(PhoneConstants.APN_TYPE_SUPL, new String[]{PhoneConstants.APN_TYPE_SUPL, PhoneConstants.APN_TYPE_DEFAULT}); mDct.setUserDataEnabled(false); mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, new String[]{PhoneConstants.APN_TYPE_DEFAULT}); logd("Sending EVENT_RECORDS_LOADED"); mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_RECORDS_LOADED, null)); waitForMs(200); logd("Sending EVENT_DATA_CONNECTION_ATTACHED"); mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null)); waitForMs(200); mDct.sendMessage(mDct.obtainMessage(DctConstants.EVENT_TRY_SETUP_DATA, mApnContext)); waitForMs(200); // Assert that both APN_TYPE_SUPL & APN_TYPE_DEFAULT are connected even we only setup data // for APN_TYPE_SUPL assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_SUPL)); assertEquals(DctConstants.State.CONNECTED, mDct.getState(PhoneConstants.APN_TYPE_DEFAULT)); } // Test the unmetered APN setup when data is disabled. @Test @SmallTest Loading Loading @@ -1206,7 +1234,7 @@ public class DcTrackerTest extends TelephonyTest { .getRilDataRadioTechnology(); mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, new String[]{PhoneConstants.APN_TYPE_DEFAULT}); mDct.setEnabled(0, true); mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true); mDct.setUserDataEnabled(true); initApns(PhoneConstants.APN_TYPE_DEFAULT, new String[]{PhoneConstants.APN_TYPE_ALL}); Loading Loading @@ -1293,7 +1321,7 @@ public class DcTrackerTest extends TelephonyTest { .getRilDataRadioTechnology(); mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS, new String[]{PhoneConstants.APN_TYPE_DEFAULT}); mDct.setEnabled(0, true); mDct.setEnabled(DctConstants.APN_DEFAULT_ID, true); mDct.setUserDataEnabled(true); initApns(PhoneConstants.APN_TYPE_DEFAULT, new String[]{PhoneConstants.APN_TYPE_ALL}); Loading