Loading src/java/com/android/internal/telephony/data/DataCallback.java 0 → 100644 +58 −0 Original line number Diff line number Diff line /* * Copyright 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.internal.telephony.data; import android.annotation.CallbackExecutor; import android.annotation.NonNull; import com.android.internal.annotations.VisibleForTesting; import java.util.concurrent.Executor; /** * This is the generic callback used for passing information between telephony data modules. */ public class DataCallback { /** The executor of the callback. */ private final @NonNull Executor mExecutor; /** * Constructor * * @param executor The executor of the callback. */ public DataCallback(@NonNull @CallbackExecutor Executor executor) { mExecutor = executor; } /** * @return The executor of the callback. */ @VisibleForTesting public @NonNull Executor getExecutor() { return mExecutor; } /** * Invoke the callback from executor. * * @param runnable The callback method to invoke. */ public void invokeFromExecutor(@NonNull Runnable runnable) { mExecutor.execute(runnable); } } src/java/com/android/internal/telephony/data/DataEvaluation.java +4 −4 Original line number Diff line number Diff line Loading @@ -169,10 +169,10 @@ public class DataEvaluation { DATA_PROFILES_CHANGED, /** When service state changes.(For now only considering data RAT and data registration). */ DATA_SERVICE_STATE_CHANGED, /** When data is enabled (by user, carrier, thermal, etc...) */ DATA_ENABLED, /** When data roaming is enabled. */ ROAMING_ENABLED, /** When data is enabled or disabled (by user, carrier, thermal, etc...) */ DATA_ENABLED_CHANGED, /** When data roaming is enabled or disabled. */ ROAMING_ENABLED_CHANGED, /** When voice call ended (for concurrent voice/data not supported RAT). */ VOICE_CALL_ENDED, /** When network restricts or no longer restricts mobile data. */ Loading src/java/com/android/internal/telephony/data/DataNetwork.java +52 −109 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.internal.telephony.data; import android.annotation.CallbackExecutor; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; Loading Loading @@ -65,6 +66,7 @@ import com.android.internal.telephony.Phone; import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.PhoneFactory; import com.android.internal.telephony.data.DataNetworkController.NetworkRequestList; import com.android.internal.telephony.data.TelephonyNetworkAgent.TelephonyNetworkAgentCallback; import com.android.internal.telephony.dataconnection.AccessNetworksManager; import com.android.internal.telephony.metrics.TelephonyMetrics; import com.android.internal.util.IState; Loading @@ -79,7 +81,7 @@ import java.net.InetAddress; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.concurrent.Executor; import java.util.function.Consumer; /** Loading Loading @@ -126,9 +128,6 @@ public class DataNetwork extends StateMachine { /** Event for detaching a network request. */ private static final int EVENT_DETACH_NETWORK_REQUEST = 3; /** Event for network validation status result arrives. */ private static final int EVENT_VALIDATION_STATUS_RESULT = 4; /** Event for allocating PDU session id response. */ private static final int EVENT_ALLOCATE_PDU_SESSION_ID_RESPONSE = 5; Loading Loading @@ -314,11 +313,6 @@ public class DataNetwork extends StateMachine { */ private boolean mSuspended = false; /** * The network validation result from connectivity service. */ private @Nullable DataValidationResult mDataValidationResult; /** * The current transport of the data network. For handover, the current transport will be set * after handover completes. Loading @@ -332,9 +326,18 @@ public class DataNetwork extends StateMachine { private @TransportType int mPreferredTransport = AccessNetworkConstants.TRANSPORT_TYPE_INVALID; /** * The interface for data network callback. * Data network callback. Should only be used by {@link DataNetworkController}. */ public interface DataNetworkCallback { public abstract static class DataNetworkCallback extends DataCallback { /** * Constructor * * @param executor The executor of the callback. */ public DataNetworkCallback(@NonNull @CallbackExecutor Executor executor) { super(executor); } /** * Called when data setup failed. * Loading @@ -348,7 +351,7 @@ public class DataNetwork extends StateMachine { * data retry should not occur. {@link DataCallResponse#RETRY_DURATION_UNDEFINED} indicates * network did not suggest any retry duration. */ void onSetupDataFailed(@NonNull DataNetwork dataNetwork, public abstract void onSetupDataFailed(@NonNull DataNetwork dataNetwork, @NonNull NetworkRequestList requestList, @DataFailureCause int cause, long retryDurationMillis); Loading @@ -357,16 +360,20 @@ public class DataNetwork extends StateMachine { * * @param dataNetwork The data network. */ void onConnected(@NonNull DataNetwork dataNetwork); public abstract void onConnected(@NonNull DataNetwork dataNetwork); /** * Called when data network validation status changed. * * @param dataNetwork The data network. * @param dataValidationResult Data validation result from connectivity service. * @param status one of {@link NetworkAgent#VALIDATION_STATUS_VALID} or * {@link NetworkAgent#VALIDATION_STATUS_NOT_VALID}. * @param redirectUri If internet connectivity is being redirected (e.g., on a captive * portal), this is the destination the probes are being redirected to, otherwise * {@code null}. */ void onValidationStatusChanged(@NonNull DataNetwork dataNetwork, @NonNull DataValidationResult dataValidationResult); public abstract void onValidationStatusChanged(@NonNull DataNetwork dataNetwork, @ValidationStatus int status, @Nullable Uri redirectUri); /** * Called when data network suspended state changed. Loading @@ -374,7 +381,8 @@ public class DataNetwork extends StateMachine { * @param dataNetwork The data network. * @param suspended {@code true} if data is suspended. */ void onSuspendedStateChanged(@NonNull DataNetwork dataNetwork, boolean suspended); public abstract void onSuspendedStateChanged(@NonNull DataNetwork dataNetwork, boolean suspended); /** * Called when network requests were failed to attach to the data network. Loading @@ -382,7 +390,7 @@ public class DataNetwork extends StateMachine { * @param dataNetwork The data network. * @param requestList The requests failed to attach. */ void onAttachFailed(@NonNull DataNetwork dataNetwork, public abstract void onAttachFailed(@NonNull DataNetwork dataNetwork, @NonNull NetworkRequestList requestList); /** Loading @@ -393,57 +401,8 @@ public class DataNetwork extends StateMachine { * @param dataNetwork The data network. * @param cause The disconnect cause. */ void onDisconnected(@NonNull DataNetwork dataNetwork, @DataFailureCause int cause); } /** * The wrapper of the validation result from connectivity service. */ public static class DataValidationResult { /** Validation status */ private final @ValidationStatus int mValidationStatus; /** Redirected URI */ private final @Nullable Uri mRedirectUri; /** * Constructor * * @param validationStatus The validation status. * @param redirectUri The redirected URI. */ public DataValidationResult(@ValidationStatus int validationStatus, @Nullable Uri redirectUri) { mValidationStatus = validationStatus; mRedirectUri = redirectUri; } /** * @return The validation status */ public @ValidationStatus int getValidationStatus() { return mValidationStatus; } /** * @return The redirected URI. */ public @Nullable Uri getRedirectUri() { return mRedirectUri; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; DataValidationResult that = (DataValidationResult) o; return mValidationStatus == that.mValidationStatus && Objects.equals(mRedirectUri, that.mRedirectUri); } @Override public int hashCode() { return Objects.hash(mValidationStatus, mRedirectUri); } public abstract void onDisconnected(@NonNull DataNetwork dataNetwork, @DataFailureCause int cause); } /** Loading Loading @@ -521,7 +480,16 @@ public class DataNetwork extends StateMachine { final NetworkProvider provider = (null == factory) ? null : factory.getProvider(); return new TelephonyNetworkAgent(mPhone, getHandler().getLooper(), this, getNetworkScore(), configBuilder.build(), provider); getNetworkScore(), configBuilder.build(), provider, new TelephonyNetworkAgentCallback(getHandler()::post) { @Override public void onValidationStatus(@ValidationStatus int status, @Nullable Uri redirectUri) { mDataNetworkCallback.invokeFromExecutor( () -> mDataNetworkCallback.onValidationStatusChanged( DataNetwork.this, status, redirectUri)); } }); } /** Loading Loading @@ -601,7 +569,8 @@ public class DataNetwork extends StateMachine { + networkRequest); } if (failedList.size() > 0) { mDataNetworkCallback.onAttachFailed(DataNetwork.this, failedList); mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onAttachFailed(DataNetwork.this, failedList)); } } break; Loading @@ -619,11 +588,8 @@ public class DataNetwork extends StateMachine { networkRequest.setAttachedNetwork(null); } mAttachedNetworkRequestList.clear(); } case EVENT_VALIDATION_STATUS_RESULT: loge("Ignore the validation status: " + DataUtils.validationStatusToString(msg.arg1)); break; } case EVENT_DATA_STATE_CHANGED: { AsyncResult ar = (AsyncResult) msg.obj; int transport = (int) ar.userObj; Loading Loading @@ -715,7 +681,8 @@ public class DataNetwork extends StateMachine { log("network connected."); notifyPreciseDataConnectionState(); mNetworkAgent.markConnected(); mDataNetworkCallback.onConnected(DataNetwork.this); mDataNetworkCallback.invokeFromExecutor( () -> mDataNetworkCallback.onConnected(DataNetwork.this)); updateSuspendState(); } Loading @@ -737,19 +704,6 @@ public class DataNetwork extends StateMachine { transitionTo(mDisconnectingState); onTearDown(msg.arg1); break; case EVENT_VALIDATION_STATUS_RESULT: DataValidationResult result = new DataValidationResult(msg.arg1, (Uri) msg.obj); if (!result.equals(mDataValidationResult)) { mDataValidationResult = result; mDataNetworkCallback.onValidationStatusChanged(DataNetwork.this, mDataValidationResult); log("Validation status changed: " + DataUtils.validationStatusToString(msg.arg1)); } else { log("Validation status not changed: " + DataUtils.validationStatusToString(msg.arg1)); } break; default: return NOT_HANDLED; } Loading Loading @@ -958,18 +912,6 @@ public class DataNetwork extends StateMachine { return mDataProfile; } /** * Set the validation result. This should be only called by {@link TelephonyNetworkAgent}. * * @param status one of {@link NetworkAgent#VALIDATION_STATUS_VALID} or * {@link NetworkAgent#VALIDATION_STATUS_NOT_VALID}. * @param redirectUri If internet connectivity is being redirected (e.g., on a captive portal), * this is the destination the probes are being redirected to, otherwise {@code null}. */ public void setValidationResult(@ValidationStatus int status, @Nullable Uri redirectUri) { sendMessage(obtainMessage(EVENT_VALIDATION_STATUS_RESULT, status, 0, redirectUri)); } /** * Update the preferred transport based on the attached network request. */ Loading Loading @@ -1030,7 +972,8 @@ public class DataNetwork extends StateMachine { // To update NOT_SUSPENDED capability. updateNetworkCapabilities(); notifyPreciseDataConnectionState(); mDataNetworkCallback.onSuspendedStateChanged(DataNetwork.this, mSuspended); mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onSuspendedStateChanged(DataNetwork.this, mSuspended)); } } Loading Loading @@ -1272,7 +1215,7 @@ public class DataNetwork extends StateMachine { */ private void onSetupResponse(@DataServiceCallback.ResultCode int resultCode, @Nullable DataCallResponse response) { log("onSetupResponse: resultCode=" + DataServiceCallback.resultCodeToString(resultCode) logl("onSetupResponse: resultCode=" + DataServiceCallback.resultCodeToString(resultCode) + ", response=" + response); int failCause = getFailCauseFromDataCallResponse(resultCode, response); if (failCause == DataFailCause.NONE) { Loading Loading @@ -1304,8 +1247,8 @@ public class DataNetwork extends StateMachine { long retry = response != null ? response.getRetryDurationMillis() : DataCallResponse.RETRY_DURATION_UNDEFINED; NetworkRequestList requestList = new NetworkRequestList(mAttachedNetworkRequestList); mDataNetworkCallback.onSetupDataFailed(DataNetwork.this, requestList, failCause, retry); mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback.onSetupDataFailed( DataNetwork.this, requestList, failCause, retry)); transitionTo(mDisconnectedState); } } Loading Loading @@ -1412,7 +1355,8 @@ public class DataNetwork extends StateMachine { log("onDataStateChanged: PDN inactive reported by " + AccessNetworkConstants.transportTypeToString(mTransport) + " data service."); mDataNetworkCallback.onDisconnected(DataNetwork.this, response.getCause()); mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onDisconnected(DataNetwork.this, response.getCause())); transitionTo(mDisconnectedState); } } Loading @@ -1422,7 +1366,8 @@ public class DataNetwork extends StateMachine { // for that log("onDataStateChanged: PDN disconnected reported by " + AccessNetworkConstants.transportTypeToString(mTransport) + " data service."); mDataNetworkCallback.onDisconnected(DataNetwork.this, DataFailCause.LOST_CONNECTION); mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onDisconnected(DataNetwork.this, DataFailCause.LOST_CONNECTION)); transitionTo(mDisconnectedState); } } Loading Loading @@ -1645,8 +1590,6 @@ public class DataNetwork extends StateMachine { return "EVENT_ATTACH_NETWORK_REQUEST"; case EVENT_DETACH_NETWORK_REQUEST: return "EVENT_DETACH_NETWORK_REQUEST"; case EVENT_VALIDATION_STATUS_RESULT: return "EVENT_VALIDATION_STATUS_RESULT"; case EVENT_ALLOCATE_PDU_SESSION_ID_RESPONSE: return "EVENT_ALLOCATE_PDU_SESSION_ID_RESPONSE"; case EVENT_SETUP_DATA_CALL_RESPONSE: Loading src/java/com/android/internal/telephony/data/DataNetworkController.java +90 −56 File changed.Preview size limit exceeded, changes collapsed. Show changes src/java/com/android/internal/telephony/data/DataProfileManager.java +29 −15 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.internal.telephony.data; import android.annotation.CallbackExecutor; import android.annotation.NonNull; import android.annotation.Nullable; import android.database.ContentObserver; Loading @@ -25,7 +26,6 @@ import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.RegistrantList; import android.provider.Telephony; import android.telephony.Annotation; import android.telephony.Annotation.NetCapability; Loading @@ -47,6 +47,7 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.concurrent.Executor; import java.util.stream.Collectors; /** Loading Loading @@ -91,8 +92,27 @@ public class DataProfileManager extends Handler { /** Preferred data profile set id. */ private int mPreferredDataProfileSetId = Telephony.Carriers.NO_APN_SET_ID; /** Registrant list for internet validation status changed. */ private final @NonNull RegistrantList mDataProfilesChangedRegistrants = new RegistrantList(); /** Data profile manager callback. */ private final @NonNull DataProfileManagerCallback mDataProfileManagerCallback; /** * Data profile manager callback. This should be only used by {@link DataNetworkController}. */ public abstract static class DataProfileManagerCallback extends DataCallback { /** * Constructor * * @param executor The executor of the callback. */ public DataProfileManagerCallback(@NonNull @CallbackExecutor Executor executor) { super(executor); } /** * Called when data profiles changed. */ public abstract void onDataProfilesChanged(); } /** * Constructor Loading @@ -102,10 +122,12 @@ public class DataProfileManager extends Handler { * @param dataServiceManager WWAN data service manager. * @param looper The looper to be used by the handler. Currently the handler thread is the * phone process's main thread. * @param callback Data profile manager callback. */ public DataProfileManager(@NonNull Phone phone, @NonNull DataNetworkController dataNetworkController, @NonNull DataServiceManager dataServiceManager, @NonNull Looper looper) { @NonNull DataServiceManager dataServiceManager, @NonNull Looper looper, @NonNull DataProfileManagerCallback callback) { super(looper); mPhone = phone; mLogTag = "DPM-" + mPhone.getPhoneId(); Loading @@ -113,6 +135,7 @@ public class DataProfileManager extends Handler { mWwanDataServiceManager = dataServiceManager; mDataConfigManager = dataNetworkController.getDataConfigManager(); mAccessNetworksManager = phone.getAccessNetworksManager(); mDataProfileManagerCallback = callback; registerAllEvents(); } Loading Loading @@ -225,7 +248,8 @@ public class DataProfileManager extends Handler { log("Data profiles changed."); mAllDataProfiles.clear(); mAllDataProfiles.addAll(profiles); mDataProfilesChangedRegistrants.notifyRegistrants(); mDataProfileManagerCallback.invokeFromExecutor( mDataProfileManagerCallback::onDataProfilesChanged); } mPreferredDataProfileSetId = getPreferredDataProfileSetId(); Loading Loading @@ -429,16 +453,6 @@ public class DataProfileManager extends Handler { .collect(Collectors.toList()); } /** * Register for data profiles changed changed event. * * @param handler The handler to handle the event. * @param what The event. */ public void registerForDataProfilesChanged(@NonNull Handler handler, int what) { mDataProfilesChangedRegistrants.addUnique(handler, what, null); } /** * Log debug messages. * @param s debug messages Loading Loading
src/java/com/android/internal/telephony/data/DataCallback.java 0 → 100644 +58 −0 Original line number Diff line number Diff line /* * Copyright 2021 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.internal.telephony.data; import android.annotation.CallbackExecutor; import android.annotation.NonNull; import com.android.internal.annotations.VisibleForTesting; import java.util.concurrent.Executor; /** * This is the generic callback used for passing information between telephony data modules. */ public class DataCallback { /** The executor of the callback. */ private final @NonNull Executor mExecutor; /** * Constructor * * @param executor The executor of the callback. */ public DataCallback(@NonNull @CallbackExecutor Executor executor) { mExecutor = executor; } /** * @return The executor of the callback. */ @VisibleForTesting public @NonNull Executor getExecutor() { return mExecutor; } /** * Invoke the callback from executor. * * @param runnable The callback method to invoke. */ public void invokeFromExecutor(@NonNull Runnable runnable) { mExecutor.execute(runnable); } }
src/java/com/android/internal/telephony/data/DataEvaluation.java +4 −4 Original line number Diff line number Diff line Loading @@ -169,10 +169,10 @@ public class DataEvaluation { DATA_PROFILES_CHANGED, /** When service state changes.(For now only considering data RAT and data registration). */ DATA_SERVICE_STATE_CHANGED, /** When data is enabled (by user, carrier, thermal, etc...) */ DATA_ENABLED, /** When data roaming is enabled. */ ROAMING_ENABLED, /** When data is enabled or disabled (by user, carrier, thermal, etc...) */ DATA_ENABLED_CHANGED, /** When data roaming is enabled or disabled. */ ROAMING_ENABLED_CHANGED, /** When voice call ended (for concurrent voice/data not supported RAT). */ VOICE_CALL_ENDED, /** When network restricts or no longer restricts mobile data. */ Loading
src/java/com/android/internal/telephony/data/DataNetwork.java +52 −109 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.internal.telephony.data; import android.annotation.CallbackExecutor; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; Loading Loading @@ -65,6 +66,7 @@ import com.android.internal.telephony.Phone; import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.PhoneFactory; import com.android.internal.telephony.data.DataNetworkController.NetworkRequestList; import com.android.internal.telephony.data.TelephonyNetworkAgent.TelephonyNetworkAgentCallback; import com.android.internal.telephony.dataconnection.AccessNetworksManager; import com.android.internal.telephony.metrics.TelephonyMetrics; import com.android.internal.util.IState; Loading @@ -79,7 +81,7 @@ import java.net.InetAddress; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.concurrent.Executor; import java.util.function.Consumer; /** Loading Loading @@ -126,9 +128,6 @@ public class DataNetwork extends StateMachine { /** Event for detaching a network request. */ private static final int EVENT_DETACH_NETWORK_REQUEST = 3; /** Event for network validation status result arrives. */ private static final int EVENT_VALIDATION_STATUS_RESULT = 4; /** Event for allocating PDU session id response. */ private static final int EVENT_ALLOCATE_PDU_SESSION_ID_RESPONSE = 5; Loading Loading @@ -314,11 +313,6 @@ public class DataNetwork extends StateMachine { */ private boolean mSuspended = false; /** * The network validation result from connectivity service. */ private @Nullable DataValidationResult mDataValidationResult; /** * The current transport of the data network. For handover, the current transport will be set * after handover completes. Loading @@ -332,9 +326,18 @@ public class DataNetwork extends StateMachine { private @TransportType int mPreferredTransport = AccessNetworkConstants.TRANSPORT_TYPE_INVALID; /** * The interface for data network callback. * Data network callback. Should only be used by {@link DataNetworkController}. */ public interface DataNetworkCallback { public abstract static class DataNetworkCallback extends DataCallback { /** * Constructor * * @param executor The executor of the callback. */ public DataNetworkCallback(@NonNull @CallbackExecutor Executor executor) { super(executor); } /** * Called when data setup failed. * Loading @@ -348,7 +351,7 @@ public class DataNetwork extends StateMachine { * data retry should not occur. {@link DataCallResponse#RETRY_DURATION_UNDEFINED} indicates * network did not suggest any retry duration. */ void onSetupDataFailed(@NonNull DataNetwork dataNetwork, public abstract void onSetupDataFailed(@NonNull DataNetwork dataNetwork, @NonNull NetworkRequestList requestList, @DataFailureCause int cause, long retryDurationMillis); Loading @@ -357,16 +360,20 @@ public class DataNetwork extends StateMachine { * * @param dataNetwork The data network. */ void onConnected(@NonNull DataNetwork dataNetwork); public abstract void onConnected(@NonNull DataNetwork dataNetwork); /** * Called when data network validation status changed. * * @param dataNetwork The data network. * @param dataValidationResult Data validation result from connectivity service. * @param status one of {@link NetworkAgent#VALIDATION_STATUS_VALID} or * {@link NetworkAgent#VALIDATION_STATUS_NOT_VALID}. * @param redirectUri If internet connectivity is being redirected (e.g., on a captive * portal), this is the destination the probes are being redirected to, otherwise * {@code null}. */ void onValidationStatusChanged(@NonNull DataNetwork dataNetwork, @NonNull DataValidationResult dataValidationResult); public abstract void onValidationStatusChanged(@NonNull DataNetwork dataNetwork, @ValidationStatus int status, @Nullable Uri redirectUri); /** * Called when data network suspended state changed. Loading @@ -374,7 +381,8 @@ public class DataNetwork extends StateMachine { * @param dataNetwork The data network. * @param suspended {@code true} if data is suspended. */ void onSuspendedStateChanged(@NonNull DataNetwork dataNetwork, boolean suspended); public abstract void onSuspendedStateChanged(@NonNull DataNetwork dataNetwork, boolean suspended); /** * Called when network requests were failed to attach to the data network. Loading @@ -382,7 +390,7 @@ public class DataNetwork extends StateMachine { * @param dataNetwork The data network. * @param requestList The requests failed to attach. */ void onAttachFailed(@NonNull DataNetwork dataNetwork, public abstract void onAttachFailed(@NonNull DataNetwork dataNetwork, @NonNull NetworkRequestList requestList); /** Loading @@ -393,57 +401,8 @@ public class DataNetwork extends StateMachine { * @param dataNetwork The data network. * @param cause The disconnect cause. */ void onDisconnected(@NonNull DataNetwork dataNetwork, @DataFailureCause int cause); } /** * The wrapper of the validation result from connectivity service. */ public static class DataValidationResult { /** Validation status */ private final @ValidationStatus int mValidationStatus; /** Redirected URI */ private final @Nullable Uri mRedirectUri; /** * Constructor * * @param validationStatus The validation status. * @param redirectUri The redirected URI. */ public DataValidationResult(@ValidationStatus int validationStatus, @Nullable Uri redirectUri) { mValidationStatus = validationStatus; mRedirectUri = redirectUri; } /** * @return The validation status */ public @ValidationStatus int getValidationStatus() { return mValidationStatus; } /** * @return The redirected URI. */ public @Nullable Uri getRedirectUri() { return mRedirectUri; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; DataValidationResult that = (DataValidationResult) o; return mValidationStatus == that.mValidationStatus && Objects.equals(mRedirectUri, that.mRedirectUri); } @Override public int hashCode() { return Objects.hash(mValidationStatus, mRedirectUri); } public abstract void onDisconnected(@NonNull DataNetwork dataNetwork, @DataFailureCause int cause); } /** Loading Loading @@ -521,7 +480,16 @@ public class DataNetwork extends StateMachine { final NetworkProvider provider = (null == factory) ? null : factory.getProvider(); return new TelephonyNetworkAgent(mPhone, getHandler().getLooper(), this, getNetworkScore(), configBuilder.build(), provider); getNetworkScore(), configBuilder.build(), provider, new TelephonyNetworkAgentCallback(getHandler()::post) { @Override public void onValidationStatus(@ValidationStatus int status, @Nullable Uri redirectUri) { mDataNetworkCallback.invokeFromExecutor( () -> mDataNetworkCallback.onValidationStatusChanged( DataNetwork.this, status, redirectUri)); } }); } /** Loading Loading @@ -601,7 +569,8 @@ public class DataNetwork extends StateMachine { + networkRequest); } if (failedList.size() > 0) { mDataNetworkCallback.onAttachFailed(DataNetwork.this, failedList); mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onAttachFailed(DataNetwork.this, failedList)); } } break; Loading @@ -619,11 +588,8 @@ public class DataNetwork extends StateMachine { networkRequest.setAttachedNetwork(null); } mAttachedNetworkRequestList.clear(); } case EVENT_VALIDATION_STATUS_RESULT: loge("Ignore the validation status: " + DataUtils.validationStatusToString(msg.arg1)); break; } case EVENT_DATA_STATE_CHANGED: { AsyncResult ar = (AsyncResult) msg.obj; int transport = (int) ar.userObj; Loading Loading @@ -715,7 +681,8 @@ public class DataNetwork extends StateMachine { log("network connected."); notifyPreciseDataConnectionState(); mNetworkAgent.markConnected(); mDataNetworkCallback.onConnected(DataNetwork.this); mDataNetworkCallback.invokeFromExecutor( () -> mDataNetworkCallback.onConnected(DataNetwork.this)); updateSuspendState(); } Loading @@ -737,19 +704,6 @@ public class DataNetwork extends StateMachine { transitionTo(mDisconnectingState); onTearDown(msg.arg1); break; case EVENT_VALIDATION_STATUS_RESULT: DataValidationResult result = new DataValidationResult(msg.arg1, (Uri) msg.obj); if (!result.equals(mDataValidationResult)) { mDataValidationResult = result; mDataNetworkCallback.onValidationStatusChanged(DataNetwork.this, mDataValidationResult); log("Validation status changed: " + DataUtils.validationStatusToString(msg.arg1)); } else { log("Validation status not changed: " + DataUtils.validationStatusToString(msg.arg1)); } break; default: return NOT_HANDLED; } Loading Loading @@ -958,18 +912,6 @@ public class DataNetwork extends StateMachine { return mDataProfile; } /** * Set the validation result. This should be only called by {@link TelephonyNetworkAgent}. * * @param status one of {@link NetworkAgent#VALIDATION_STATUS_VALID} or * {@link NetworkAgent#VALIDATION_STATUS_NOT_VALID}. * @param redirectUri If internet connectivity is being redirected (e.g., on a captive portal), * this is the destination the probes are being redirected to, otherwise {@code null}. */ public void setValidationResult(@ValidationStatus int status, @Nullable Uri redirectUri) { sendMessage(obtainMessage(EVENT_VALIDATION_STATUS_RESULT, status, 0, redirectUri)); } /** * Update the preferred transport based on the attached network request. */ Loading Loading @@ -1030,7 +972,8 @@ public class DataNetwork extends StateMachine { // To update NOT_SUSPENDED capability. updateNetworkCapabilities(); notifyPreciseDataConnectionState(); mDataNetworkCallback.onSuspendedStateChanged(DataNetwork.this, mSuspended); mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onSuspendedStateChanged(DataNetwork.this, mSuspended)); } } Loading Loading @@ -1272,7 +1215,7 @@ public class DataNetwork extends StateMachine { */ private void onSetupResponse(@DataServiceCallback.ResultCode int resultCode, @Nullable DataCallResponse response) { log("onSetupResponse: resultCode=" + DataServiceCallback.resultCodeToString(resultCode) logl("onSetupResponse: resultCode=" + DataServiceCallback.resultCodeToString(resultCode) + ", response=" + response); int failCause = getFailCauseFromDataCallResponse(resultCode, response); if (failCause == DataFailCause.NONE) { Loading Loading @@ -1304,8 +1247,8 @@ public class DataNetwork extends StateMachine { long retry = response != null ? response.getRetryDurationMillis() : DataCallResponse.RETRY_DURATION_UNDEFINED; NetworkRequestList requestList = new NetworkRequestList(mAttachedNetworkRequestList); mDataNetworkCallback.onSetupDataFailed(DataNetwork.this, requestList, failCause, retry); mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback.onSetupDataFailed( DataNetwork.this, requestList, failCause, retry)); transitionTo(mDisconnectedState); } } Loading Loading @@ -1412,7 +1355,8 @@ public class DataNetwork extends StateMachine { log("onDataStateChanged: PDN inactive reported by " + AccessNetworkConstants.transportTypeToString(mTransport) + " data service."); mDataNetworkCallback.onDisconnected(DataNetwork.this, response.getCause()); mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onDisconnected(DataNetwork.this, response.getCause())); transitionTo(mDisconnectedState); } } Loading @@ -1422,7 +1366,8 @@ public class DataNetwork extends StateMachine { // for that log("onDataStateChanged: PDN disconnected reported by " + AccessNetworkConstants.transportTypeToString(mTransport) + " data service."); mDataNetworkCallback.onDisconnected(DataNetwork.this, DataFailCause.LOST_CONNECTION); mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback .onDisconnected(DataNetwork.this, DataFailCause.LOST_CONNECTION)); transitionTo(mDisconnectedState); } } Loading Loading @@ -1645,8 +1590,6 @@ public class DataNetwork extends StateMachine { return "EVENT_ATTACH_NETWORK_REQUEST"; case EVENT_DETACH_NETWORK_REQUEST: return "EVENT_DETACH_NETWORK_REQUEST"; case EVENT_VALIDATION_STATUS_RESULT: return "EVENT_VALIDATION_STATUS_RESULT"; case EVENT_ALLOCATE_PDU_SESSION_ID_RESPONSE: return "EVENT_ALLOCATE_PDU_SESSION_ID_RESPONSE"; case EVENT_SETUP_DATA_CALL_RESPONSE: Loading
src/java/com/android/internal/telephony/data/DataNetworkController.java +90 −56 File changed.Preview size limit exceeded, changes collapsed. Show changes
src/java/com/android/internal/telephony/data/DataProfileManager.java +29 −15 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.internal.telephony.data; import android.annotation.CallbackExecutor; import android.annotation.NonNull; import android.annotation.Nullable; import android.database.ContentObserver; Loading @@ -25,7 +26,6 @@ import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.RegistrantList; import android.provider.Telephony; import android.telephony.Annotation; import android.telephony.Annotation.NetCapability; Loading @@ -47,6 +47,7 @@ import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.concurrent.Executor; import java.util.stream.Collectors; /** Loading Loading @@ -91,8 +92,27 @@ public class DataProfileManager extends Handler { /** Preferred data profile set id. */ private int mPreferredDataProfileSetId = Telephony.Carriers.NO_APN_SET_ID; /** Registrant list for internet validation status changed. */ private final @NonNull RegistrantList mDataProfilesChangedRegistrants = new RegistrantList(); /** Data profile manager callback. */ private final @NonNull DataProfileManagerCallback mDataProfileManagerCallback; /** * Data profile manager callback. This should be only used by {@link DataNetworkController}. */ public abstract static class DataProfileManagerCallback extends DataCallback { /** * Constructor * * @param executor The executor of the callback. */ public DataProfileManagerCallback(@NonNull @CallbackExecutor Executor executor) { super(executor); } /** * Called when data profiles changed. */ public abstract void onDataProfilesChanged(); } /** * Constructor Loading @@ -102,10 +122,12 @@ public class DataProfileManager extends Handler { * @param dataServiceManager WWAN data service manager. * @param looper The looper to be used by the handler. Currently the handler thread is the * phone process's main thread. * @param callback Data profile manager callback. */ public DataProfileManager(@NonNull Phone phone, @NonNull DataNetworkController dataNetworkController, @NonNull DataServiceManager dataServiceManager, @NonNull Looper looper) { @NonNull DataServiceManager dataServiceManager, @NonNull Looper looper, @NonNull DataProfileManagerCallback callback) { super(looper); mPhone = phone; mLogTag = "DPM-" + mPhone.getPhoneId(); Loading @@ -113,6 +135,7 @@ public class DataProfileManager extends Handler { mWwanDataServiceManager = dataServiceManager; mDataConfigManager = dataNetworkController.getDataConfigManager(); mAccessNetworksManager = phone.getAccessNetworksManager(); mDataProfileManagerCallback = callback; registerAllEvents(); } Loading Loading @@ -225,7 +248,8 @@ public class DataProfileManager extends Handler { log("Data profiles changed."); mAllDataProfiles.clear(); mAllDataProfiles.addAll(profiles); mDataProfilesChangedRegistrants.notifyRegistrants(); mDataProfileManagerCallback.invokeFromExecutor( mDataProfileManagerCallback::onDataProfilesChanged); } mPreferredDataProfileSetId = getPreferredDataProfileSetId(); Loading Loading @@ -429,16 +453,6 @@ public class DataProfileManager extends Handler { .collect(Collectors.toList()); } /** * Register for data profiles changed changed event. * * @param handler The handler to handle the event. * @param what The event. */ public void registerForDataProfilesChanged(@NonNull Handler handler, int what) { mDataProfilesChangedRegistrants.addUnique(handler, what, null); } /** * Log debug messages. * @param s debug messages Loading