Loading src/java/com/android/internal/telephony/dataconnection/DcTracker.java +25 −5 Original line number Diff line number Diff line Loading @@ -268,6 +268,14 @@ public class DcTracker extends Handler { private static final String INTENT_DATA_STALL_ALARM_EXTRA_TRANSPORT_TYPE = "data_stall_alarm_extra_transport_type"; /** The higher index has higher priority. */ private static final DctConstants.State[] DATA_CONNECTION_STATE_PRIORITIES = { DctConstants.State.IDLE, DctConstants.State.DISCONNECTING, DctConstants.State.CONNECTING, DctConstants.State.CONNECTED, }; private DcTesterFailBringUpAll mDcTesterFailBringUpAll; private DcController mDcc; Loading Loading @@ -1118,23 +1126,35 @@ public class DcTracker extends Handler { * Assumes there is less than one {@link ApnSetting} can support the given apn type. */ public DctConstants.State getState(String apnType) { DctConstants.State state = DctConstants.State.IDLE; final int apnTypeBitmask = ApnSetting.getApnTypesBitmaskFromString(apnType); for (DataConnection dc : mDataConnections.values()) { ApnSetting apnSetting = dc.getApnSetting(); if (apnSetting != null && apnSetting.canHandleType(apnTypeBitmask)) { if (dc.isActive()) { return DctConstants.State.CONNECTED; state = getBetterConnectionState(state, DctConstants.State.CONNECTED); } else if (dc.isActivating()) { return DctConstants.State.CONNECTING; state = getBetterConnectionState(state, DctConstants.State.CONNECTING); } else if (dc.isInactive()) { return DctConstants.State.IDLE; state = getBetterConnectionState(state, DctConstants.State.IDLE); } else if (dc.isDisconnecting()) { return DctConstants.State.DISCONNECTING; state = getBetterConnectionState(state, DctConstants.State.DISCONNECTING); } } } return state; } return DctConstants.State.IDLE; /** * Return a better connection state between {@code stateA} and {@code stateB}. Check * {@link #DATA_CONNECTION_STATE_PRIORITIES} for the details. * @return the better connection state between {@code stateA} and {@code stateB}. */ private static DctConstants.State getBetterConnectionState( DctConstants.State stateA, DctConstants.State stateB) { int idxA = ArrayUtils.indexOf(DATA_CONNECTION_STATE_PRIORITIES, stateA); int idxB = ArrayUtils.indexOf(DATA_CONNECTION_STATE_PRIORITIES, stateB); return idxA >= idxB ? stateA : stateB; } // Return if apn type is a provisioning apn. Loading Loading
src/java/com/android/internal/telephony/dataconnection/DcTracker.java +25 −5 Original line number Diff line number Diff line Loading @@ -268,6 +268,14 @@ public class DcTracker extends Handler { private static final String INTENT_DATA_STALL_ALARM_EXTRA_TRANSPORT_TYPE = "data_stall_alarm_extra_transport_type"; /** The higher index has higher priority. */ private static final DctConstants.State[] DATA_CONNECTION_STATE_PRIORITIES = { DctConstants.State.IDLE, DctConstants.State.DISCONNECTING, DctConstants.State.CONNECTING, DctConstants.State.CONNECTED, }; private DcTesterFailBringUpAll mDcTesterFailBringUpAll; private DcController mDcc; Loading Loading @@ -1118,23 +1126,35 @@ public class DcTracker extends Handler { * Assumes there is less than one {@link ApnSetting} can support the given apn type. */ public DctConstants.State getState(String apnType) { DctConstants.State state = DctConstants.State.IDLE; final int apnTypeBitmask = ApnSetting.getApnTypesBitmaskFromString(apnType); for (DataConnection dc : mDataConnections.values()) { ApnSetting apnSetting = dc.getApnSetting(); if (apnSetting != null && apnSetting.canHandleType(apnTypeBitmask)) { if (dc.isActive()) { return DctConstants.State.CONNECTED; state = getBetterConnectionState(state, DctConstants.State.CONNECTED); } else if (dc.isActivating()) { return DctConstants.State.CONNECTING; state = getBetterConnectionState(state, DctConstants.State.CONNECTING); } else if (dc.isInactive()) { return DctConstants.State.IDLE; state = getBetterConnectionState(state, DctConstants.State.IDLE); } else if (dc.isDisconnecting()) { return DctConstants.State.DISCONNECTING; state = getBetterConnectionState(state, DctConstants.State.DISCONNECTING); } } } return state; } return DctConstants.State.IDLE; /** * Return a better connection state between {@code stateA} and {@code stateB}. Check * {@link #DATA_CONNECTION_STATE_PRIORITIES} for the details. * @return the better connection state between {@code stateA} and {@code stateB}. */ private static DctConstants.State getBetterConnectionState( DctConstants.State stateA, DctConstants.State stateB) { int idxA = ArrayUtils.indexOf(DATA_CONNECTION_STATE_PRIORITIES, stateA); int idxB = ArrayUtils.indexOf(DATA_CONNECTION_STATE_PRIORITIES, stateB); return idxA >= idxB ? stateA : stateB; } // Return if apn type is a provisioning apn. Loading