Loading src/java/com/android/internal/telephony/DataResponse.java +7 −1 Original line number Diff line number Diff line Loading @@ -71,7 +71,13 @@ public class DataResponse extends IRadioDataResponse.Stub { * @param responseInfo Response info struct containing response type, serial no. and error */ public void deactivateDataCallResponse(RadioResponseInfo responseInfo) { RadioResponse.responseVoid(RIL.DATA_SERVICE, mRil, responseInfo); RILRequest rr = mRil.processResponse(RIL.DATA_SERVICE, responseInfo); if (rr != null) { int response = responseInfo.error; RadioResponse.sendMessageResponse(rr.mResult, response); mRil.processResponseDone(rr, responseInfo, response); } } /** Loading src/java/com/android/internal/telephony/RadioResponse.java +7 −1 Original line number Diff line number Diff line Loading @@ -740,7 +740,13 @@ public class RadioResponse extends IRadioResponse.Stub { * @param responseInfo Response info struct containing response type, serial no. and error */ public void deactivateDataCallResponse(RadioResponseInfo responseInfo) { responseVoid(responseInfo); RILRequest rr = mRil.processResponse(responseInfo); if (rr != null) { int response = responseInfo.error; sendMessageResponse(rr.mResult, response); mRil.processResponseDone(rr, responseInfo, response); } } /** Loading src/java/com/android/internal/telephony/data/CellularDataService.java +8 −4 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.internal.telephony.data; import static android.telephony.data.DataServiceCallback.RESULT_SUCCESS; import android.annotation.Nullable; import android.hardware.radio.RadioError; import android.net.LinkProperties; import android.os.AsyncResult; import android.os.Handler; Loading Loading @@ -51,7 +52,7 @@ public class CellularDataService extends DataService { private static final boolean DBG = false; private static final int SETUP_DATA_CALL_COMPLETE = 1; private static final int DEACTIVATE_DATA_ALL_COMPLETE = 2; private static final int DEACTIVATE_DATA_CALL_COMPLETE = 2; private static final int SET_INITIAL_ATTACH_APN_COMPLETE = 3; private static final int SET_DATA_PROFILE_COMPLETE = 4; private static final int REQUEST_DATA_CALL_LIST_COMPLETE = 5; Loading Loading @@ -87,9 +88,12 @@ public class CellularDataService extends DataService { : RESULT_SUCCESS, response); break; case DEACTIVATE_DATA_ALL_COMPLETE: case DEACTIVATE_DATA_CALL_COMPLETE: int error = (int) ar.result; callback.onDeactivateDataCallComplete(ar.exception != null ? DataServiceCallback.RESULT_ERROR_ILLEGAL_STATE : error == RadioError.RADIO_NOT_AVAILABLE ? DataServiceCallback.RESULT_ERROR_RADIO_NOT_AVAILABLE : RESULT_SUCCESS); break; case SET_INITIAL_ATTACH_APN_COMPLETE: Loading Loading @@ -189,7 +193,7 @@ public class CellularDataService extends DataService { // Only obtain the message when the caller wants a callback. If the caller doesn't care // the request completed or results, then no need to pass the message down. if (callback != null) { message = Message.obtain(mHandler, DEACTIVATE_DATA_ALL_COMPLETE); message = Message.obtain(mHandler, DEACTIVATE_DATA_CALL_COMPLETE); mCallbackMap.put(message, callback); } Loading src/java/com/android/internal/telephony/data/DataNetwork.java +47 −12 Original line number Diff line number Diff line Loading @@ -123,9 +123,9 @@ import java.util.stream.Collectors; * {@link ConnectedState}. When the data network is about to be disconnected, it first enters * {@link DisconnectingState} when performing graceful tear down or when sending the data * deactivation request. At the end, it enters {@link DisconnectedState} when {@link DataService} * notifies data disconnected. Note that a unsolicited disconnected event from {@link DataService} * can immediately move data network transited from {@link ConnectedState} to * {@link DisconnectedState}. {@link DisconnectedState} is the final state of a data network. * notifies data disconnected. Note that an unsolicited disconnected event from {@link DataService} * or a RADIO_NOT_AVAILABLE response can immediately move data network from {@link ConnectedState} * to {@link DisconnectedState}. {@link DisconnectedState} is the final state of a data network. * * State machine diagram: * Loading Loading @@ -158,7 +158,7 @@ public class DataNetwork extends StateMachine { private static final int EVENT_ALLOCATE_PDU_SESSION_ID_RESPONSE = 5; /** Event for setup data network response. */ private static final int EVENT_SETUP_DATA_CALL_RESPONSE = 6; private static final int EVENT_SETUP_DATA_NETWORK_RESPONSE = 6; /** Event for tearing down data network. */ private static final int EVENT_TEAR_DOWN_NETWORK = 7; Loading Loading @@ -196,6 +196,9 @@ public class DataNetwork extends StateMachine { /** Event for carrier privileged UIDs changed. */ private static final int EVENT_CARRIER_PRIVILEGED_UIDS_CHANGED = 18; /** Event for deactivate data network response. */ private static final int EVENT_DEACTIVATE_DATA_NETWORK_RESPONSE = 19; /** The default MTU for IPv4 network. */ private static final int DEFAULT_MTU_V4 = 1280; Loading Loading @@ -739,8 +742,7 @@ public class DataNetwork extends StateMachine { for (TelephonyNetworkRequest networkRequest : networkRequestList) { networkRequest.setAttachedNetwork(DataNetwork.this); networkRequest.setState( TelephonyNetworkRequest.REQUEST_STATE_SATISFIED); networkRequest.setState(TelephonyNetworkRequest.REQUEST_STATE_SATISFIED); } addState(mDefaultState); Loading Loading @@ -960,7 +962,7 @@ public class DataNetwork extends StateMachine { } setupData(); break; case EVENT_SETUP_DATA_CALL_RESPONSE: case EVENT_SETUP_DATA_NETWORK_RESPONSE: int resultCode = msg.arg1; DataCallResponse dataCallResponse = msg.getData().getParcelable(DataServiceManager.DATA_CALL_RESPONSE); Loading Loading @@ -1071,6 +1073,10 @@ public class DataNetwork extends StateMachine { ar = (AsyncResult) msg.obj; onPcoDataReceived((PcoData) ar.result); break; case EVENT_DEACTIVATE_DATA_NETWORK_RESPONSE: int resultCode = msg.arg1; onDeactivateResponse(resultCode); break; default: return NOT_HANDLED; } Loading Loading @@ -1179,8 +1185,16 @@ public class DataNetwork extends StateMachine { @Override public boolean processMessage(Message msg) { logv("event=" + eventToString(msg.what)); switch (msg.what) { case EVENT_DEACTIVATE_DATA_NETWORK_RESPONSE: int resultCode = msg.arg1; onDeactivateResponse(resultCode); break; default: return NOT_HANDLED; } return HANDLED; } } /** Loading Loading @@ -1680,7 +1694,7 @@ public class DataNetwork extends StateMachine { .setupDataCall(accessNetwork, mDataProfile, isModemRoaming, allowRoaming, DataService.REQUEST_REASON_NORMAL, null, mPduSessionId, null, trafficDescriptor, matchAllRuleAllowed, obtainMessage(EVENT_SETUP_DATA_CALL_RESPONSE)); obtainMessage(EVENT_SETUP_DATA_NETWORK_RESPONSE)); int apnTypeBitmask = mDataProfile.getApnSetting() != null ? mDataProfile.getApnSetting().getApnTypeBitmask() : ApnSetting.TYPE_NONE; Loading Loading @@ -1933,6 +1947,23 @@ public class DataNetwork extends StateMachine { mFailCause); } /** * Called when receiving deactivate data network response from the data service. * * @param resultCode The result code. */ private void onDeactivateResponse(@DataServiceCallback.ResultCode int resultCode) { logl("onDeactivateResponse: resultCode=" + DataServiceCallback.resultCodeToString(resultCode)); if (resultCode == DataServiceCallback.RESULT_ERROR_RADIO_NOT_AVAILABLE) { log("Remove network since deactivate request returned RADIO_NOT_AVAILABLE."); mDataNetworkCallback.invokeFromExecutor( () -> mDataNetworkCallback.onDisconnected( DataNetwork.this, DataFailCause.RADIO_NOT_AVAILABLE)); transitionTo(mDisconnectedState); } } /** * Tear down the data network immediately. * Loading @@ -1958,7 +1989,8 @@ public class DataNetwork extends StateMachine { // TODO: Need to support DataService.REQUEST_REASON_SHUTDOWN mDataServiceManagers.get(mTransport).deactivateDataCall(mCid.get(mTransport), DataService.REQUEST_REASON_NORMAL, null); DataService.REQUEST_REASON_NORMAL, obtainMessage(EVENT_DEACTIVATE_DATA_NETWORK_RESPONSE)); mDataCallSessionStats.setDeactivateDataCallReason(DataService.REQUEST_REASON_NORMAL); mInvokedDataDeactivation = true; } Loading Loading @@ -2499,7 +2531,8 @@ public class DataNetwork extends StateMachine { // Clean up on the source transport. mDataServiceManagers.get(mTransport).deactivateDataCall(mCid.get(mTransport), DataService.REQUEST_REASON_HANDOVER, null); DataService.REQUEST_REASON_HANDOVER, obtainMessage(EVENT_DEACTIVATE_DATA_NETWORK_RESPONSE)); // Switch the transport to the target. mTransport = DataUtils.getTargetTransport(mTransport); // Update the logging tag Loading Loading @@ -2645,7 +2678,7 @@ public class DataNetwork extends StateMachine { return "EVENT_DETACH_NETWORK_REQUEST"; case EVENT_ALLOCATE_PDU_SESSION_ID_RESPONSE: return "EVENT_ALLOCATE_PDU_SESSION_ID_RESPONSE"; case EVENT_SETUP_DATA_CALL_RESPONSE: case EVENT_SETUP_DATA_NETWORK_RESPONSE: return "EVENT_SETUP_DATA_NETWORK_RESPONSE"; case EVENT_TEAR_DOWN_NETWORK: return "EVENT_TEAR_DOWN_NETWORK"; Loading @@ -2671,6 +2704,8 @@ public class DataNetwork extends StateMachine { return "EVENT_PCO_DATA_RECEIVED"; case EVENT_CARRIER_PRIVILEGED_UIDS_CHANGED: return "EVENT_CARRIER_PRIVILEGED_UIDS_CHANGED"; case EVENT_DEACTIVATE_DATA_NETWORK_RESPONSE: return "EVENT_DEACTIVATE_DATA_NETWORK_RESPONSE"; default: return "Unknown(" + event + ")"; } Loading tests/telephonytests/src/com/android/internal/telephony/SimulatedCommands.java +2 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.internal.telephony.test; import android.compat.annotation.UnsupportedAppUsage; import android.hardware.radio.RadioError; import android.hardware.radio.V1_0.DataRegStateResult; import android.hardware.radio.V1_0.SetupDataCallResult; import android.hardware.radio.V1_0.VoiceRegStateResult; Loading Loading @@ -1239,7 +1240,7 @@ public class SimulatedCommands extends BaseCommands @Override public void deactivateDataCall(int cid, int reason, Message result) { SimulatedCommandsVerifier.getInstance().deactivateDataCall(cid, reason, result); resultSuccess(result, null); resultSuccess(result, RadioError.NONE); } @Override Loading Loading
src/java/com/android/internal/telephony/DataResponse.java +7 −1 Original line number Diff line number Diff line Loading @@ -71,7 +71,13 @@ public class DataResponse extends IRadioDataResponse.Stub { * @param responseInfo Response info struct containing response type, serial no. and error */ public void deactivateDataCallResponse(RadioResponseInfo responseInfo) { RadioResponse.responseVoid(RIL.DATA_SERVICE, mRil, responseInfo); RILRequest rr = mRil.processResponse(RIL.DATA_SERVICE, responseInfo); if (rr != null) { int response = responseInfo.error; RadioResponse.sendMessageResponse(rr.mResult, response); mRil.processResponseDone(rr, responseInfo, response); } } /** Loading
src/java/com/android/internal/telephony/RadioResponse.java +7 −1 Original line number Diff line number Diff line Loading @@ -740,7 +740,13 @@ public class RadioResponse extends IRadioResponse.Stub { * @param responseInfo Response info struct containing response type, serial no. and error */ public void deactivateDataCallResponse(RadioResponseInfo responseInfo) { responseVoid(responseInfo); RILRequest rr = mRil.processResponse(responseInfo); if (rr != null) { int response = responseInfo.error; sendMessageResponse(rr.mResult, response); mRil.processResponseDone(rr, responseInfo, response); } } /** Loading
src/java/com/android/internal/telephony/data/CellularDataService.java +8 −4 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.internal.telephony.data; import static android.telephony.data.DataServiceCallback.RESULT_SUCCESS; import android.annotation.Nullable; import android.hardware.radio.RadioError; import android.net.LinkProperties; import android.os.AsyncResult; import android.os.Handler; Loading Loading @@ -51,7 +52,7 @@ public class CellularDataService extends DataService { private static final boolean DBG = false; private static final int SETUP_DATA_CALL_COMPLETE = 1; private static final int DEACTIVATE_DATA_ALL_COMPLETE = 2; private static final int DEACTIVATE_DATA_CALL_COMPLETE = 2; private static final int SET_INITIAL_ATTACH_APN_COMPLETE = 3; private static final int SET_DATA_PROFILE_COMPLETE = 4; private static final int REQUEST_DATA_CALL_LIST_COMPLETE = 5; Loading Loading @@ -87,9 +88,12 @@ public class CellularDataService extends DataService { : RESULT_SUCCESS, response); break; case DEACTIVATE_DATA_ALL_COMPLETE: case DEACTIVATE_DATA_CALL_COMPLETE: int error = (int) ar.result; callback.onDeactivateDataCallComplete(ar.exception != null ? DataServiceCallback.RESULT_ERROR_ILLEGAL_STATE : error == RadioError.RADIO_NOT_AVAILABLE ? DataServiceCallback.RESULT_ERROR_RADIO_NOT_AVAILABLE : RESULT_SUCCESS); break; case SET_INITIAL_ATTACH_APN_COMPLETE: Loading Loading @@ -189,7 +193,7 @@ public class CellularDataService extends DataService { // Only obtain the message when the caller wants a callback. If the caller doesn't care // the request completed or results, then no need to pass the message down. if (callback != null) { message = Message.obtain(mHandler, DEACTIVATE_DATA_ALL_COMPLETE); message = Message.obtain(mHandler, DEACTIVATE_DATA_CALL_COMPLETE); mCallbackMap.put(message, callback); } Loading
src/java/com/android/internal/telephony/data/DataNetwork.java +47 −12 Original line number Diff line number Diff line Loading @@ -123,9 +123,9 @@ import java.util.stream.Collectors; * {@link ConnectedState}. When the data network is about to be disconnected, it first enters * {@link DisconnectingState} when performing graceful tear down or when sending the data * deactivation request. At the end, it enters {@link DisconnectedState} when {@link DataService} * notifies data disconnected. Note that a unsolicited disconnected event from {@link DataService} * can immediately move data network transited from {@link ConnectedState} to * {@link DisconnectedState}. {@link DisconnectedState} is the final state of a data network. * notifies data disconnected. Note that an unsolicited disconnected event from {@link DataService} * or a RADIO_NOT_AVAILABLE response can immediately move data network from {@link ConnectedState} * to {@link DisconnectedState}. {@link DisconnectedState} is the final state of a data network. * * State machine diagram: * Loading Loading @@ -158,7 +158,7 @@ public class DataNetwork extends StateMachine { private static final int EVENT_ALLOCATE_PDU_SESSION_ID_RESPONSE = 5; /** Event for setup data network response. */ private static final int EVENT_SETUP_DATA_CALL_RESPONSE = 6; private static final int EVENT_SETUP_DATA_NETWORK_RESPONSE = 6; /** Event for tearing down data network. */ private static final int EVENT_TEAR_DOWN_NETWORK = 7; Loading Loading @@ -196,6 +196,9 @@ public class DataNetwork extends StateMachine { /** Event for carrier privileged UIDs changed. */ private static final int EVENT_CARRIER_PRIVILEGED_UIDS_CHANGED = 18; /** Event for deactivate data network response. */ private static final int EVENT_DEACTIVATE_DATA_NETWORK_RESPONSE = 19; /** The default MTU for IPv4 network. */ private static final int DEFAULT_MTU_V4 = 1280; Loading Loading @@ -739,8 +742,7 @@ public class DataNetwork extends StateMachine { for (TelephonyNetworkRequest networkRequest : networkRequestList) { networkRequest.setAttachedNetwork(DataNetwork.this); networkRequest.setState( TelephonyNetworkRequest.REQUEST_STATE_SATISFIED); networkRequest.setState(TelephonyNetworkRequest.REQUEST_STATE_SATISFIED); } addState(mDefaultState); Loading Loading @@ -960,7 +962,7 @@ public class DataNetwork extends StateMachine { } setupData(); break; case EVENT_SETUP_DATA_CALL_RESPONSE: case EVENT_SETUP_DATA_NETWORK_RESPONSE: int resultCode = msg.arg1; DataCallResponse dataCallResponse = msg.getData().getParcelable(DataServiceManager.DATA_CALL_RESPONSE); Loading Loading @@ -1071,6 +1073,10 @@ public class DataNetwork extends StateMachine { ar = (AsyncResult) msg.obj; onPcoDataReceived((PcoData) ar.result); break; case EVENT_DEACTIVATE_DATA_NETWORK_RESPONSE: int resultCode = msg.arg1; onDeactivateResponse(resultCode); break; default: return NOT_HANDLED; } Loading Loading @@ -1179,8 +1185,16 @@ public class DataNetwork extends StateMachine { @Override public boolean processMessage(Message msg) { logv("event=" + eventToString(msg.what)); switch (msg.what) { case EVENT_DEACTIVATE_DATA_NETWORK_RESPONSE: int resultCode = msg.arg1; onDeactivateResponse(resultCode); break; default: return NOT_HANDLED; } return HANDLED; } } /** Loading Loading @@ -1680,7 +1694,7 @@ public class DataNetwork extends StateMachine { .setupDataCall(accessNetwork, mDataProfile, isModemRoaming, allowRoaming, DataService.REQUEST_REASON_NORMAL, null, mPduSessionId, null, trafficDescriptor, matchAllRuleAllowed, obtainMessage(EVENT_SETUP_DATA_CALL_RESPONSE)); obtainMessage(EVENT_SETUP_DATA_NETWORK_RESPONSE)); int apnTypeBitmask = mDataProfile.getApnSetting() != null ? mDataProfile.getApnSetting().getApnTypeBitmask() : ApnSetting.TYPE_NONE; Loading Loading @@ -1933,6 +1947,23 @@ public class DataNetwork extends StateMachine { mFailCause); } /** * Called when receiving deactivate data network response from the data service. * * @param resultCode The result code. */ private void onDeactivateResponse(@DataServiceCallback.ResultCode int resultCode) { logl("onDeactivateResponse: resultCode=" + DataServiceCallback.resultCodeToString(resultCode)); if (resultCode == DataServiceCallback.RESULT_ERROR_RADIO_NOT_AVAILABLE) { log("Remove network since deactivate request returned RADIO_NOT_AVAILABLE."); mDataNetworkCallback.invokeFromExecutor( () -> mDataNetworkCallback.onDisconnected( DataNetwork.this, DataFailCause.RADIO_NOT_AVAILABLE)); transitionTo(mDisconnectedState); } } /** * Tear down the data network immediately. * Loading @@ -1958,7 +1989,8 @@ public class DataNetwork extends StateMachine { // TODO: Need to support DataService.REQUEST_REASON_SHUTDOWN mDataServiceManagers.get(mTransport).deactivateDataCall(mCid.get(mTransport), DataService.REQUEST_REASON_NORMAL, null); DataService.REQUEST_REASON_NORMAL, obtainMessage(EVENT_DEACTIVATE_DATA_NETWORK_RESPONSE)); mDataCallSessionStats.setDeactivateDataCallReason(DataService.REQUEST_REASON_NORMAL); mInvokedDataDeactivation = true; } Loading Loading @@ -2499,7 +2531,8 @@ public class DataNetwork extends StateMachine { // Clean up on the source transport. mDataServiceManagers.get(mTransport).deactivateDataCall(mCid.get(mTransport), DataService.REQUEST_REASON_HANDOVER, null); DataService.REQUEST_REASON_HANDOVER, obtainMessage(EVENT_DEACTIVATE_DATA_NETWORK_RESPONSE)); // Switch the transport to the target. mTransport = DataUtils.getTargetTransport(mTransport); // Update the logging tag Loading Loading @@ -2645,7 +2678,7 @@ public class DataNetwork extends StateMachine { return "EVENT_DETACH_NETWORK_REQUEST"; case EVENT_ALLOCATE_PDU_SESSION_ID_RESPONSE: return "EVENT_ALLOCATE_PDU_SESSION_ID_RESPONSE"; case EVENT_SETUP_DATA_CALL_RESPONSE: case EVENT_SETUP_DATA_NETWORK_RESPONSE: return "EVENT_SETUP_DATA_NETWORK_RESPONSE"; case EVENT_TEAR_DOWN_NETWORK: return "EVENT_TEAR_DOWN_NETWORK"; Loading @@ -2671,6 +2704,8 @@ public class DataNetwork extends StateMachine { return "EVENT_PCO_DATA_RECEIVED"; case EVENT_CARRIER_PRIVILEGED_UIDS_CHANGED: return "EVENT_CARRIER_PRIVILEGED_UIDS_CHANGED"; case EVENT_DEACTIVATE_DATA_NETWORK_RESPONSE: return "EVENT_DEACTIVATE_DATA_NETWORK_RESPONSE"; default: return "Unknown(" + event + ")"; } Loading
tests/telephonytests/src/com/android/internal/telephony/SimulatedCommands.java +2 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.internal.telephony.test; import android.compat.annotation.UnsupportedAppUsage; import android.hardware.radio.RadioError; import android.hardware.radio.V1_0.DataRegStateResult; import android.hardware.radio.V1_0.SetupDataCallResult; import android.hardware.radio.V1_0.VoiceRegStateResult; Loading Loading @@ -1239,7 +1240,7 @@ public class SimulatedCommands extends BaseCommands @Override public void deactivateDataCall(int cid, int reason, Message result) { SimulatedCommandsVerifier.getInstance().deactivateDataCall(cid, reason, result); resultSuccess(result, null); resultSuccess(result, RadioError.NONE); } @Override Loading