Loading src/java/com/android/internal/telephony/data/DataConfigManager.java +60 −32 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.StringDef; import android.content.BroadcastReceiver; Loading @@ -29,7 +30,6 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.PersistableBundle; import android.os.RegistrantList; import android.provider.DeviceConfig; import android.telephony.Annotation.ApnType; import android.telephony.Annotation.NetCapability; Loading @@ -41,6 +41,7 @@ import android.telephony.TelephonyDisplayInfo; import android.telephony.TelephonyManager; import android.telephony.data.ApnSetting; import android.text.TextUtils; import android.util.ArraySet; import android.util.IndentingPrintWriter; import com.android.internal.annotations.VisibleForTesting; Loading @@ -62,6 +63,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executor; import java.util.stream.Collectors; /** Loading @@ -70,6 +72,9 @@ import java.util.stream.Collectors; * {@link CarrierConfigManager}. All the data config will be loaded once and stored here. */ public class DataConfigManager extends Handler { /** The max timeout in ms for data network stuck in a transit state. */ public static final int MAX_NETWORK_TRANSIT_STATE_TIMEOUT_MS = 3600000; /** Event for carrier config changed. */ private static final int EVENT_CARRIER_CONFIG_CHANGED = 1; Loading Loading @@ -189,6 +194,10 @@ public class DataConfigManager extends Handler { @Retention(RetentionPolicy.SOURCE) private @interface DataConfigNetworkType {} /** Data config update callbacks. */ private final @NonNull Set<DataConfigManagerCallback> mDataConfigManagerCallbacks = new ArraySet<>(); /** DeviceConfig key of anomaly report threshold for back to back ims release-request. */ private static final String KEY_ANOMALY_IMS_RELEASE_REQUEST = "anomaly_ims_release_request"; /** DeviceConfig key of anomaly report threshold for frequent setup data failure. */ Loading Loading @@ -239,9 +248,6 @@ public class DataConfigManager extends Handler { private @NonNull final Phone mPhone; private @NonNull final String mLogTag; /** The registrants list for config update event. */ private @NonNull final RegistrantList mConfigUpdateRegistrants = new RegistrantList(); private @NonNull final CarrierConfigManager mCarrierConfigManager; private @NonNull PersistableBundle mCarrierConfig = null; private @NonNull Resources mResources = null; Loading Loading @@ -318,8 +324,46 @@ public class DataConfigManager extends Handler { // Must be called to set mCarrierConfig and mResources to non-null values updateCarrierConfig(); // Must be called to set anomaly report threshold to non-null values updateDeviceConfig(); mConfigUpdateRegistrants.notifyRegistrants(); } /** * The data config callback. */ public static class DataConfigManagerCallback extends DataCallback { /** * Constructor * * @param executor The executor of the callback. */ public DataConfigManagerCallback(@NonNull @CallbackExecutor Executor executor) { super(executor); } /** Callback on carrier config update.*/ public void onCarrierConfigChanged() {} /** Callback on device config update.*/ public void onDeviceConfigChanged() {} } /** * Register the callback for receiving information from {@link DataConfigManager}. * * @param callback The callback. */ public void registerCallback(@NonNull DataConfigManagerCallback callback) { mDataConfigManagerCallbacks.add(callback); } /** * Unregister the callback. * * @param callback The previously registered callback. */ public void unregisterCallback(@NonNull DataConfigManagerCallback callback) { mDataConfigManagerCallbacks.remove(callback); } @Override Loading @@ -328,12 +372,14 @@ public class DataConfigManager extends Handler { case EVENT_CARRIER_CONFIG_CHANGED: log("EVENT_CARRIER_CONFIG_CHANGED"); updateCarrierConfig(); mConfigUpdateRegistrants.notifyRegistrants(); mDataConfigManagerCallbacks.forEach(callback -> callback.invokeFromExecutor( callback::onCarrierConfigChanged)); break; case EVENT_DEVICE_CONFIG_CHANGED: log("EVENT_DEVICE_CONFIG_CHANGED"); updateDeviceConfig(); mConfigUpdateRegistrants.notifyRegistrants(); mDataConfigManagerCallbacks.forEach(callback -> callback.invokeFromExecutor( callback::onDeviceConfigChanged)); break; default: loge("Unexpected message " + msg.what); Loading @@ -347,22 +393,22 @@ public class DataConfigManager extends Handler { mImsReleaseRequestAnomalyReportThreshold = parseSlidingWindowCounterThreshold( properties.getString(KEY_ANOMALY_IMS_RELEASE_REQUEST, null), 300000, 12); 0, 2); mNetworkUnwantedAnomalyReportThreshold = parseSlidingWindowCounterThreshold( properties.getString(KEY_ANOMALY_NETWORK_UNWANTED, null), 300000, 0, 12); mSetupDataCallAnomalyReportThreshold = parseSlidingWindowCounterThreshold( properties.getString(KEY_ANOMALY_SETUP_DATA_CALL_FAILURE, null), 0, 2); 12); mNetworkConnectingTimeout = properties.getInt( KEY_ANOMALY_NETWORK_CONNECTING_TIMEOUT, 86400000); KEY_ANOMALY_NETWORK_CONNECTING_TIMEOUT, MAX_NETWORK_TRANSIT_STATE_TIMEOUT_MS); mNetworkDisconnectingTimeout = properties.getInt( KEY_ANOMALY_NETWORK_DISCONNECTING_TIMEOUT, 86400000); KEY_ANOMALY_NETWORK_DISCONNECTING_TIMEOUT, MAX_NETWORK_TRANSIT_STATE_TIMEOUT_MS); mNetworkHandoverTimeout = properties.getInt( KEY_ANOMALY_NETWORK_HANDOVER_TIMEOUT, 86400000); KEY_ANOMALY_NETWORK_HANDOVER_TIMEOUT, MAX_NETWORK_TRANSIT_STATE_TIMEOUT_MS); } /** Loading Loading @@ -1127,24 +1173,6 @@ public class DataConfigManager extends Handler { com.android.internal.R.bool.config_enhanced_iwlan_handover_check); } /** * Registration point for subscription info ready. * * @param h handler to notify. * @param what what code of message when delivered. */ public void registerForConfigUpdate(Handler h, int what) { mConfigUpdateRegistrants.addUnique(h, what, null); } /** * * @param h The original handler passed in {@link #registerForConfigUpdate(Handler, int)}. */ public void unregisterForConfigUpdate(Handler h) { mConfigUpdateRegistrants.remove(h); } /** * Log debug messages. * @param s debug messages Loading src/java/com/android/internal/telephony/data/DataNetwork.java +44 −19 Original line number Diff line number Diff line Loading @@ -86,6 +86,7 @@ import com.android.internal.telephony.Phone; import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.PhoneFactory; import com.android.internal.telephony.RIL; import com.android.internal.telephony.data.DataConfigManager.DataConfigManagerCallback; import com.android.internal.telephony.data.DataEvaluation.DataAllowedReason; import com.android.internal.telephony.data.DataNetworkController.NetworkRequestList; import com.android.internal.telephony.data.DataRetryManager.DataHandoverRetryEntry; Loading Loading @@ -651,6 +652,11 @@ public class DataNetwork extends StateMachine { */ private @Nullable LinkBandwidthEstimatorCallback mLinkBandwidthEstimatorCallback; /** * Data config callback for carrier config update. */ private @Nullable DataConfigManagerCallback mDataConfigManagerCallback; /** * The network bandwidth. */ Loading Loading @@ -980,7 +986,13 @@ public class DataNetwork extends StateMachine { @Override public void enter() { logv("Registering all events."); mDataConfigManager.registerForConfigUpdate(getHandler(), EVENT_DATA_CONFIG_UPDATED); mDataConfigManagerCallback = new DataConfigManagerCallback(getHandler()::post) { @Override public void onCarrierConfigChanged() { sendMessage(EVENT_DATA_CONFIG_UPDATED); } }; mDataConfigManager.registerCallback(mDataConfigManagerCallback); mPhone.getDisplayInfoController().registerForTelephonyDisplayInfoChanged( getHandler(), EVENT_DISPLAY_INFO_CHANGED, null); mPhone.getServiceStateTracker().registerForServiceStateChanged(getHandler(), Loading Loading @@ -1032,14 +1044,14 @@ public class DataNetwork extends StateMachine { mPhone.getServiceStateTracker().unregisterForServiceStateChanged(getHandler()); mPhone.getDisplayInfoController().unregisterForTelephonyDisplayInfoChanged( getHandler()); mDataConfigManager.unregisterForConfigUpdate(getHandler()); mDataConfigManager.unregisterCallback(mDataConfigManagerCallback); } @Override public boolean processMessage(Message msg) { switch (msg.what) { case EVENT_DATA_CONFIG_UPDATED: onDataConfigUpdated(); onCarrierConfigUpdated(); break; case EVENT_SERVICE_STATE_CHANGED: { mDataCallSessionStats.onDrsOrRatChanged(getDataNetworkType()); Loading Loading @@ -1168,10 +1180,14 @@ public class DataNetwork extends StateMachine { deferMessage(msg); break; case EVENT_STUCK_IN_TRANSIENT_STATE: // enable detection only for valid timeout range if (mDataConfigManager.getAnomalyNetworkConnectingTimeoutMs() < DataConfigManager.MAX_NETWORK_TRANSIT_STATE_TIMEOUT_MS) { reportAnomaly("Data network stuck in connecting state for " + TimeUnit.MILLISECONDS.toSeconds( mDataConfigManager.getAnomalyNetworkConnectingTimeoutMs()) + " seconds.", "58c56403-7ea7-4e56-a0c7-e467114d09b8"); } // Setup data failed. Use the retry logic defined in // CarrierConfigManager.KEY_TELEPHONY_DATA_SETUP_RETRY_RULES_STRING_ARRAY. mRetryDelayMillis = DataCallResponse.RETRY_DURATION_UNDEFINED; Loading Loading @@ -1359,10 +1375,14 @@ public class DataNetwork extends StateMachine { onPcoDataReceived((PcoData) ar.result); break; case EVENT_STUCK_IN_TRANSIENT_STATE: // enable detection only for valid timeout range if (mDataConfigManager.getNetworkHandoverTimeoutMs() < DataConfigManager.MAX_NETWORK_TRANSIT_STATE_TIMEOUT_MS) { reportAnomaly("Data service did not respond the handover request within " + TimeUnit.MILLISECONDS.toSeconds( mDataConfigManager.getNetworkHandoverTimeoutMs()) + " seconds.", "1afe68cb-8b41-4964-a737-4f34372429ea"); } // Handover failed. Use the retry logic defined in // CarrierConfigManager.KEY_TELEPHONY_DATA_HANDOVER_RETRY_RULES_STRING_ARRAY. Loading Loading @@ -1457,11 +1477,16 @@ public class DataNetwork extends StateMachine { case EVENT_STUCK_IN_TRANSIENT_STATE: // After frameworks issues deactivate data call request, RIL should report // data disconnected through data call list changed event subsequently. // enable detection only for valid timeout range if (mDataConfigManager.getAnomalyNetworkDisconnectingTimeoutMs() < DataConfigManager.MAX_NETWORK_TRANSIT_STATE_TIMEOUT_MS) { reportAnomaly("RIL did not send data call list changed event after " + "deactivate data call request within " + TimeUnit.MILLISECONDS.toSeconds( mDataConfigManager.getAnomalyNetworkDisconnectingTimeoutMs()) + " seconds.", "d0e4fa1c-c57b-4ba5-b4b6-8955487012cc"); } mFailCause = DataFailCause.LOST_CONNECTION; transitionTo(mDisconnectedState); break; Loading Loading @@ -2533,10 +2558,10 @@ public class DataNetwork extends StateMachine { } /** * Called when data config updated. * Called when carrier config updated. */ private void onDataConfigUpdated() { log("onDataConfigUpdated"); private void onCarrierConfigUpdated() { log("onCarrierConfigUpdated"); updateBandwidthFromDataConfig(); updateTcpBufferSizes(); Loading src/java/com/android/internal/telephony/data/DataNetworkController.java +23 −14 Original line number Diff line number Diff line Loading @@ -86,6 +86,7 @@ import com.android.internal.telephony.SlidingWindowEventCounter; import com.android.internal.telephony.SubscriptionInfoUpdater; import com.android.internal.telephony.TelephonyComponentFactory; import com.android.internal.telephony.data.AccessNetworksManager.AccessNetworksManagerCallback; import com.android.internal.telephony.data.DataConfigManager.DataConfigManagerCallback; import com.android.internal.telephony.data.DataEvaluation.DataAllowedReason; import com.android.internal.telephony.data.DataEvaluation.DataDisallowedReason; import com.android.internal.telephony.data.DataEvaluation.DataEvaluationReason; Loading Loading @@ -134,9 +135,6 @@ import java.util.stream.Collectors; public class DataNetworkController extends Handler { private static final boolean VDBG = false; /** Event for data config updated. */ private static final int EVENT_DATA_CONFIG_UPDATED = 1; /** Event for adding a network request. */ private static final int EVENT_ADD_NETWORK_REQUEST = 2; Loading Loading @@ -957,7 +955,16 @@ public class DataNetworkController extends Handler { mPhone.getServiceStateTracker().registerForServiceStateChanged(this, EVENT_SERVICE_STATE_CHANGED); mDataConfigManager.registerForConfigUpdate(this, EVENT_DATA_CONFIG_UPDATED); mDataConfigManager.registerCallback(new DataConfigManagerCallback(this::post) { @Override public void onCarrierConfigChanged() { DataNetworkController.this.onCarrierConfigUpdated(); } @Override public void onDeviceConfigChanged() { DataNetworkController.this.onDeviceConfigUpdated(); } }); mPhone.getServiceStateTracker().registerForPsRestrictedEnabled(this, EVENT_PS_RESTRICT_ENABLED, null); mPhone.getServiceStateTracker().registerForPsRestrictedDisabled(this, Loading Loading @@ -1008,9 +1015,6 @@ public class DataNetworkController extends Handler { @Override public void handleMessage(@NonNull Message msg) { switch (msg.what) { case EVENT_DATA_CONFIG_UPDATED: onDataConfigUpdated(); break; case EVENT_REGISTER_ALL_EVENTS: onRegisterAllEvents(); break; Loading Loading @@ -2199,21 +2203,26 @@ public class DataNetworkController extends Handler { } /** * Called when data config was updated. * Called when carrier config was updated. */ private void onDataConfigUpdated() { log("onDataConfigUpdated: config is " private void onCarrierConfigUpdated() { log("onCarrierConfigUpdated: config is " + (mDataConfigManager.isConfigCarrierSpecific() ? "" : "not ") + "carrier specific. mSimState=" + SubscriptionInfoUpdater.simStateString(mSimState) + ". DeviceConfig updated."); updateAnomalySlidingWindowCounters(); + SubscriptionInfoUpdater.simStateString(mSimState)); updateNetworkRequestsPriority(); sendMessage(obtainMessage(EVENT_REEVALUATE_UNSATISFIED_NETWORK_REQUESTS, DataEvaluationReason.DATA_CONFIG_CHANGED)); } /** * Called when device config was updated. */ private void onDeviceConfigUpdated() { log("onDeviceConfigUpdated: DeviceConfig updated."); updateAnomalySlidingWindowCounters(); } /** * Update each network request's priority. */ Loading src/java/com/android/internal/telephony/data/DataProfileManager.java +11 −11 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import android.util.IndentingPrintWriter; import android.util.LocalLog; import com.android.internal.telephony.Phone; import com.android.internal.telephony.data.DataConfigManager.DataConfigManagerCallback; import com.android.internal.telephony.data.DataNetworkController.DataNetworkControllerCallback; import com.android.telephony.Rlog; Loading @@ -64,9 +65,6 @@ import java.util.stream.Collectors; public class DataProfileManager extends Handler { private static final boolean VDBG = true; /** Event for data config updated. */ private static final int EVENT_DATA_CONFIG_UPDATED = 1; /** Event for APN database changed. */ private static final int EVENT_APN_DATABASE_CHANGED = 2; Loading Loading @@ -156,7 +154,12 @@ public class DataProfileManager extends Handler { @NonNull List<DataProfile> dataProfiles) { DataProfileManager.this.onInternetDataNetworkConnected(dataProfiles); }}); mDataConfigManager.registerForConfigUpdate(this, EVENT_DATA_CONFIG_UPDATED); mDataConfigManager.registerCallback(new DataConfigManagerCallback(this::post) { @Override public void onCarrierConfigChanged() { DataProfileManager.this.onCarrierConfigUpdated(); } }); mPhone.getContext().getContentResolver().registerContentObserver( Telephony.Carriers.CONTENT_URI, true, new ContentObserver(this) { @Override Loading @@ -171,9 +174,6 @@ public class DataProfileManager extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case EVENT_DATA_CONFIG_UPDATED: onDataConfigUpdated(); break; case EVENT_SIM_REFRESH: log("Update data profiles due to SIM refresh."); updateDataProfiles(); Loading @@ -189,10 +189,10 @@ public class DataProfileManager extends Handler { } /** * Called when data config was updated. * Called when carrier config was updated. */ private void onDataConfigUpdated() { log("Update data profiles due to config updated."); private void onCarrierConfigUpdated() { log("Update data profiles due to carrier config updated."); updateDataProfiles(); //TODO: more works needed to be done here. Loading Loading @@ -273,7 +273,7 @@ public class DataProfileManager extends Handler { } // Check if any of the profile already supports IMS, if not, add the default one. DataProfile dataProfile = profiles.stream() dataProfile = profiles.stream() .filter(dp -> dp.canSatisfy(NetworkCapabilities.NET_CAPABILITY_IMS)) .findFirst() .orElse(null); Loading src/java/com/android/internal/telephony/data/DataRetryManager.java +9 −10 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.util.SparseArray; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.CommandsInterface; import com.android.internal.telephony.Phone; import com.android.internal.telephony.data.DataConfigManager.DataConfigManagerCallback; import com.android.internal.telephony.data.DataNetworkController.DataNetworkControllerCallback; import com.android.internal.telephony.data.DataNetworkController.NetworkRequestList; import com.android.internal.telephony.data.DataProfileManager.DataProfileManagerCallback; Loading @@ -71,9 +72,6 @@ import java.util.stream.Collectors; public class DataRetryManager extends Handler { private static final boolean VDBG = false; /** Event for data config updated. */ private static final int EVENT_DATA_CONFIG_UPDATED = 1; /** Event for data setup retry. */ private static final int EVENT_DATA_SETUP_RETRY = 3; Loading Loading @@ -930,8 +928,12 @@ public class DataRetryManager extends Handler { mDataServiceManagers = dataServiceManagers; mDataConfigManager = dataNetworkController.getDataConfigManager(); mDataProfileManager = dataNetworkController.getDataProfileManager(); mDataConfigManager.registerForConfigUpdate(this, EVENT_DATA_CONFIG_UPDATED); mDataConfigManager.registerCallback(new DataConfigManagerCallback(this::post) { @Override public void onCarrierConfigChanged() { DataRetryManager.this.onCarrierConfigUpdated(); } }); mDataServiceManagers.get(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) .registerForApnUnthrottled(this, EVENT_DATA_PROFILE_UNTHROTTLED); if (!mPhone.getAccessNetworksManager().isInLegacyMode()) { Loading Loading @@ -964,9 +966,6 @@ public class DataRetryManager extends Handler { public void handleMessage(Message msg) { AsyncResult ar; switch (msg.what) { case EVENT_DATA_CONFIG_UPDATED: onDataConfigUpdated(); break; case EVENT_DATA_SETUP_RETRY: DataSetupRetryEntry dataSetupRetryEntry = (DataSetupRetryEntry) msg.obj; Objects.requireNonNull(dataSetupRetryEntry); Loading Loading @@ -1014,9 +1013,9 @@ public class DataRetryManager extends Handler { } /** * Called when data config is updated. * Called when carrier config is updated. */ private void onDataConfigUpdated() { private void onCarrierConfigUpdated() { onReset(RESET_REASON_DATA_CONFIG_CHANGED); mDataSetupRetryRuleList = mDataConfigManager.getDataSetupRetryRules(); mDataHandoverRetryRuleList = mDataConfigManager.getDataHandoverRetryRules(); Loading Loading
src/java/com/android/internal/telephony/data/DataConfigManager.java +60 −32 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.StringDef; import android.content.BroadcastReceiver; Loading @@ -29,7 +30,6 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.PersistableBundle; import android.os.RegistrantList; import android.provider.DeviceConfig; import android.telephony.Annotation.ApnType; import android.telephony.Annotation.NetCapability; Loading @@ -41,6 +41,7 @@ import android.telephony.TelephonyDisplayInfo; import android.telephony.TelephonyManager; import android.telephony.data.ApnSetting; import android.text.TextUtils; import android.util.ArraySet; import android.util.IndentingPrintWriter; import com.android.internal.annotations.VisibleForTesting; Loading @@ -62,6 +63,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executor; import java.util.stream.Collectors; /** Loading @@ -70,6 +72,9 @@ import java.util.stream.Collectors; * {@link CarrierConfigManager}. All the data config will be loaded once and stored here. */ public class DataConfigManager extends Handler { /** The max timeout in ms for data network stuck in a transit state. */ public static final int MAX_NETWORK_TRANSIT_STATE_TIMEOUT_MS = 3600000; /** Event for carrier config changed. */ private static final int EVENT_CARRIER_CONFIG_CHANGED = 1; Loading Loading @@ -189,6 +194,10 @@ public class DataConfigManager extends Handler { @Retention(RetentionPolicy.SOURCE) private @interface DataConfigNetworkType {} /** Data config update callbacks. */ private final @NonNull Set<DataConfigManagerCallback> mDataConfigManagerCallbacks = new ArraySet<>(); /** DeviceConfig key of anomaly report threshold for back to back ims release-request. */ private static final String KEY_ANOMALY_IMS_RELEASE_REQUEST = "anomaly_ims_release_request"; /** DeviceConfig key of anomaly report threshold for frequent setup data failure. */ Loading Loading @@ -239,9 +248,6 @@ public class DataConfigManager extends Handler { private @NonNull final Phone mPhone; private @NonNull final String mLogTag; /** The registrants list for config update event. */ private @NonNull final RegistrantList mConfigUpdateRegistrants = new RegistrantList(); private @NonNull final CarrierConfigManager mCarrierConfigManager; private @NonNull PersistableBundle mCarrierConfig = null; private @NonNull Resources mResources = null; Loading Loading @@ -318,8 +324,46 @@ public class DataConfigManager extends Handler { // Must be called to set mCarrierConfig and mResources to non-null values updateCarrierConfig(); // Must be called to set anomaly report threshold to non-null values updateDeviceConfig(); mConfigUpdateRegistrants.notifyRegistrants(); } /** * The data config callback. */ public static class DataConfigManagerCallback extends DataCallback { /** * Constructor * * @param executor The executor of the callback. */ public DataConfigManagerCallback(@NonNull @CallbackExecutor Executor executor) { super(executor); } /** Callback on carrier config update.*/ public void onCarrierConfigChanged() {} /** Callback on device config update.*/ public void onDeviceConfigChanged() {} } /** * Register the callback for receiving information from {@link DataConfigManager}. * * @param callback The callback. */ public void registerCallback(@NonNull DataConfigManagerCallback callback) { mDataConfigManagerCallbacks.add(callback); } /** * Unregister the callback. * * @param callback The previously registered callback. */ public void unregisterCallback(@NonNull DataConfigManagerCallback callback) { mDataConfigManagerCallbacks.remove(callback); } @Override Loading @@ -328,12 +372,14 @@ public class DataConfigManager extends Handler { case EVENT_CARRIER_CONFIG_CHANGED: log("EVENT_CARRIER_CONFIG_CHANGED"); updateCarrierConfig(); mConfigUpdateRegistrants.notifyRegistrants(); mDataConfigManagerCallbacks.forEach(callback -> callback.invokeFromExecutor( callback::onCarrierConfigChanged)); break; case EVENT_DEVICE_CONFIG_CHANGED: log("EVENT_DEVICE_CONFIG_CHANGED"); updateDeviceConfig(); mConfigUpdateRegistrants.notifyRegistrants(); mDataConfigManagerCallbacks.forEach(callback -> callback.invokeFromExecutor( callback::onDeviceConfigChanged)); break; default: loge("Unexpected message " + msg.what); Loading @@ -347,22 +393,22 @@ public class DataConfigManager extends Handler { mImsReleaseRequestAnomalyReportThreshold = parseSlidingWindowCounterThreshold( properties.getString(KEY_ANOMALY_IMS_RELEASE_REQUEST, null), 300000, 12); 0, 2); mNetworkUnwantedAnomalyReportThreshold = parseSlidingWindowCounterThreshold( properties.getString(KEY_ANOMALY_NETWORK_UNWANTED, null), 300000, 0, 12); mSetupDataCallAnomalyReportThreshold = parseSlidingWindowCounterThreshold( properties.getString(KEY_ANOMALY_SETUP_DATA_CALL_FAILURE, null), 0, 2); 12); mNetworkConnectingTimeout = properties.getInt( KEY_ANOMALY_NETWORK_CONNECTING_TIMEOUT, 86400000); KEY_ANOMALY_NETWORK_CONNECTING_TIMEOUT, MAX_NETWORK_TRANSIT_STATE_TIMEOUT_MS); mNetworkDisconnectingTimeout = properties.getInt( KEY_ANOMALY_NETWORK_DISCONNECTING_TIMEOUT, 86400000); KEY_ANOMALY_NETWORK_DISCONNECTING_TIMEOUT, MAX_NETWORK_TRANSIT_STATE_TIMEOUT_MS); mNetworkHandoverTimeout = properties.getInt( KEY_ANOMALY_NETWORK_HANDOVER_TIMEOUT, 86400000); KEY_ANOMALY_NETWORK_HANDOVER_TIMEOUT, MAX_NETWORK_TRANSIT_STATE_TIMEOUT_MS); } /** Loading Loading @@ -1127,24 +1173,6 @@ public class DataConfigManager extends Handler { com.android.internal.R.bool.config_enhanced_iwlan_handover_check); } /** * Registration point for subscription info ready. * * @param h handler to notify. * @param what what code of message when delivered. */ public void registerForConfigUpdate(Handler h, int what) { mConfigUpdateRegistrants.addUnique(h, what, null); } /** * * @param h The original handler passed in {@link #registerForConfigUpdate(Handler, int)}. */ public void unregisterForConfigUpdate(Handler h) { mConfigUpdateRegistrants.remove(h); } /** * Log debug messages. * @param s debug messages Loading
src/java/com/android/internal/telephony/data/DataNetwork.java +44 −19 Original line number Diff line number Diff line Loading @@ -86,6 +86,7 @@ import com.android.internal.telephony.Phone; import com.android.internal.telephony.PhoneConstants; import com.android.internal.telephony.PhoneFactory; import com.android.internal.telephony.RIL; import com.android.internal.telephony.data.DataConfigManager.DataConfigManagerCallback; import com.android.internal.telephony.data.DataEvaluation.DataAllowedReason; import com.android.internal.telephony.data.DataNetworkController.NetworkRequestList; import com.android.internal.telephony.data.DataRetryManager.DataHandoverRetryEntry; Loading Loading @@ -651,6 +652,11 @@ public class DataNetwork extends StateMachine { */ private @Nullable LinkBandwidthEstimatorCallback mLinkBandwidthEstimatorCallback; /** * Data config callback for carrier config update. */ private @Nullable DataConfigManagerCallback mDataConfigManagerCallback; /** * The network bandwidth. */ Loading Loading @@ -980,7 +986,13 @@ public class DataNetwork extends StateMachine { @Override public void enter() { logv("Registering all events."); mDataConfigManager.registerForConfigUpdate(getHandler(), EVENT_DATA_CONFIG_UPDATED); mDataConfigManagerCallback = new DataConfigManagerCallback(getHandler()::post) { @Override public void onCarrierConfigChanged() { sendMessage(EVENT_DATA_CONFIG_UPDATED); } }; mDataConfigManager.registerCallback(mDataConfigManagerCallback); mPhone.getDisplayInfoController().registerForTelephonyDisplayInfoChanged( getHandler(), EVENT_DISPLAY_INFO_CHANGED, null); mPhone.getServiceStateTracker().registerForServiceStateChanged(getHandler(), Loading Loading @@ -1032,14 +1044,14 @@ public class DataNetwork extends StateMachine { mPhone.getServiceStateTracker().unregisterForServiceStateChanged(getHandler()); mPhone.getDisplayInfoController().unregisterForTelephonyDisplayInfoChanged( getHandler()); mDataConfigManager.unregisterForConfigUpdate(getHandler()); mDataConfigManager.unregisterCallback(mDataConfigManagerCallback); } @Override public boolean processMessage(Message msg) { switch (msg.what) { case EVENT_DATA_CONFIG_UPDATED: onDataConfigUpdated(); onCarrierConfigUpdated(); break; case EVENT_SERVICE_STATE_CHANGED: { mDataCallSessionStats.onDrsOrRatChanged(getDataNetworkType()); Loading Loading @@ -1168,10 +1180,14 @@ public class DataNetwork extends StateMachine { deferMessage(msg); break; case EVENT_STUCK_IN_TRANSIENT_STATE: // enable detection only for valid timeout range if (mDataConfigManager.getAnomalyNetworkConnectingTimeoutMs() < DataConfigManager.MAX_NETWORK_TRANSIT_STATE_TIMEOUT_MS) { reportAnomaly("Data network stuck in connecting state for " + TimeUnit.MILLISECONDS.toSeconds( mDataConfigManager.getAnomalyNetworkConnectingTimeoutMs()) + " seconds.", "58c56403-7ea7-4e56-a0c7-e467114d09b8"); } // Setup data failed. Use the retry logic defined in // CarrierConfigManager.KEY_TELEPHONY_DATA_SETUP_RETRY_RULES_STRING_ARRAY. mRetryDelayMillis = DataCallResponse.RETRY_DURATION_UNDEFINED; Loading Loading @@ -1359,10 +1375,14 @@ public class DataNetwork extends StateMachine { onPcoDataReceived((PcoData) ar.result); break; case EVENT_STUCK_IN_TRANSIENT_STATE: // enable detection only for valid timeout range if (mDataConfigManager.getNetworkHandoverTimeoutMs() < DataConfigManager.MAX_NETWORK_TRANSIT_STATE_TIMEOUT_MS) { reportAnomaly("Data service did not respond the handover request within " + TimeUnit.MILLISECONDS.toSeconds( mDataConfigManager.getNetworkHandoverTimeoutMs()) + " seconds.", "1afe68cb-8b41-4964-a737-4f34372429ea"); } // Handover failed. Use the retry logic defined in // CarrierConfigManager.KEY_TELEPHONY_DATA_HANDOVER_RETRY_RULES_STRING_ARRAY. Loading Loading @@ -1457,11 +1477,16 @@ public class DataNetwork extends StateMachine { case EVENT_STUCK_IN_TRANSIENT_STATE: // After frameworks issues deactivate data call request, RIL should report // data disconnected through data call list changed event subsequently. // enable detection only for valid timeout range if (mDataConfigManager.getAnomalyNetworkDisconnectingTimeoutMs() < DataConfigManager.MAX_NETWORK_TRANSIT_STATE_TIMEOUT_MS) { reportAnomaly("RIL did not send data call list changed event after " + "deactivate data call request within " + TimeUnit.MILLISECONDS.toSeconds( mDataConfigManager.getAnomalyNetworkDisconnectingTimeoutMs()) + " seconds.", "d0e4fa1c-c57b-4ba5-b4b6-8955487012cc"); } mFailCause = DataFailCause.LOST_CONNECTION; transitionTo(mDisconnectedState); break; Loading Loading @@ -2533,10 +2558,10 @@ public class DataNetwork extends StateMachine { } /** * Called when data config updated. * Called when carrier config updated. */ private void onDataConfigUpdated() { log("onDataConfigUpdated"); private void onCarrierConfigUpdated() { log("onCarrierConfigUpdated"); updateBandwidthFromDataConfig(); updateTcpBufferSizes(); Loading
src/java/com/android/internal/telephony/data/DataNetworkController.java +23 −14 Original line number Diff line number Diff line Loading @@ -86,6 +86,7 @@ import com.android.internal.telephony.SlidingWindowEventCounter; import com.android.internal.telephony.SubscriptionInfoUpdater; import com.android.internal.telephony.TelephonyComponentFactory; import com.android.internal.telephony.data.AccessNetworksManager.AccessNetworksManagerCallback; import com.android.internal.telephony.data.DataConfigManager.DataConfigManagerCallback; import com.android.internal.telephony.data.DataEvaluation.DataAllowedReason; import com.android.internal.telephony.data.DataEvaluation.DataDisallowedReason; import com.android.internal.telephony.data.DataEvaluation.DataEvaluationReason; Loading Loading @@ -134,9 +135,6 @@ import java.util.stream.Collectors; public class DataNetworkController extends Handler { private static final boolean VDBG = false; /** Event for data config updated. */ private static final int EVENT_DATA_CONFIG_UPDATED = 1; /** Event for adding a network request. */ private static final int EVENT_ADD_NETWORK_REQUEST = 2; Loading Loading @@ -957,7 +955,16 @@ public class DataNetworkController extends Handler { mPhone.getServiceStateTracker().registerForServiceStateChanged(this, EVENT_SERVICE_STATE_CHANGED); mDataConfigManager.registerForConfigUpdate(this, EVENT_DATA_CONFIG_UPDATED); mDataConfigManager.registerCallback(new DataConfigManagerCallback(this::post) { @Override public void onCarrierConfigChanged() { DataNetworkController.this.onCarrierConfigUpdated(); } @Override public void onDeviceConfigChanged() { DataNetworkController.this.onDeviceConfigUpdated(); } }); mPhone.getServiceStateTracker().registerForPsRestrictedEnabled(this, EVENT_PS_RESTRICT_ENABLED, null); mPhone.getServiceStateTracker().registerForPsRestrictedDisabled(this, Loading Loading @@ -1008,9 +1015,6 @@ public class DataNetworkController extends Handler { @Override public void handleMessage(@NonNull Message msg) { switch (msg.what) { case EVENT_DATA_CONFIG_UPDATED: onDataConfigUpdated(); break; case EVENT_REGISTER_ALL_EVENTS: onRegisterAllEvents(); break; Loading Loading @@ -2199,21 +2203,26 @@ public class DataNetworkController extends Handler { } /** * Called when data config was updated. * Called when carrier config was updated. */ private void onDataConfigUpdated() { log("onDataConfigUpdated: config is " private void onCarrierConfigUpdated() { log("onCarrierConfigUpdated: config is " + (mDataConfigManager.isConfigCarrierSpecific() ? "" : "not ") + "carrier specific. mSimState=" + SubscriptionInfoUpdater.simStateString(mSimState) + ". DeviceConfig updated."); updateAnomalySlidingWindowCounters(); + SubscriptionInfoUpdater.simStateString(mSimState)); updateNetworkRequestsPriority(); sendMessage(obtainMessage(EVENT_REEVALUATE_UNSATISFIED_NETWORK_REQUESTS, DataEvaluationReason.DATA_CONFIG_CHANGED)); } /** * Called when device config was updated. */ private void onDeviceConfigUpdated() { log("onDeviceConfigUpdated: DeviceConfig updated."); updateAnomalySlidingWindowCounters(); } /** * Update each network request's priority. */ Loading
src/java/com/android/internal/telephony/data/DataProfileManager.java +11 −11 Original line number Diff line number Diff line Loading @@ -44,6 +44,7 @@ import android.util.IndentingPrintWriter; import android.util.LocalLog; import com.android.internal.telephony.Phone; import com.android.internal.telephony.data.DataConfigManager.DataConfigManagerCallback; import com.android.internal.telephony.data.DataNetworkController.DataNetworkControllerCallback; import com.android.telephony.Rlog; Loading @@ -64,9 +65,6 @@ import java.util.stream.Collectors; public class DataProfileManager extends Handler { private static final boolean VDBG = true; /** Event for data config updated. */ private static final int EVENT_DATA_CONFIG_UPDATED = 1; /** Event for APN database changed. */ private static final int EVENT_APN_DATABASE_CHANGED = 2; Loading Loading @@ -156,7 +154,12 @@ public class DataProfileManager extends Handler { @NonNull List<DataProfile> dataProfiles) { DataProfileManager.this.onInternetDataNetworkConnected(dataProfiles); }}); mDataConfigManager.registerForConfigUpdate(this, EVENT_DATA_CONFIG_UPDATED); mDataConfigManager.registerCallback(new DataConfigManagerCallback(this::post) { @Override public void onCarrierConfigChanged() { DataProfileManager.this.onCarrierConfigUpdated(); } }); mPhone.getContext().getContentResolver().registerContentObserver( Telephony.Carriers.CONTENT_URI, true, new ContentObserver(this) { @Override Loading @@ -171,9 +174,6 @@ public class DataProfileManager extends Handler { @Override public void handleMessage(Message msg) { switch (msg.what) { case EVENT_DATA_CONFIG_UPDATED: onDataConfigUpdated(); break; case EVENT_SIM_REFRESH: log("Update data profiles due to SIM refresh."); updateDataProfiles(); Loading @@ -189,10 +189,10 @@ public class DataProfileManager extends Handler { } /** * Called when data config was updated. * Called when carrier config was updated. */ private void onDataConfigUpdated() { log("Update data profiles due to config updated."); private void onCarrierConfigUpdated() { log("Update data profiles due to carrier config updated."); updateDataProfiles(); //TODO: more works needed to be done here. Loading Loading @@ -273,7 +273,7 @@ public class DataProfileManager extends Handler { } // Check if any of the profile already supports IMS, if not, add the default one. DataProfile dataProfile = profiles.stream() dataProfile = profiles.stream() .filter(dp -> dp.canSatisfy(NetworkCapabilities.NET_CAPABILITY_IMS)) .findFirst() .orElse(null); Loading
src/java/com/android/internal/telephony/data/DataRetryManager.java +9 −10 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.util.SparseArray; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.CommandsInterface; import com.android.internal.telephony.Phone; import com.android.internal.telephony.data.DataConfigManager.DataConfigManagerCallback; import com.android.internal.telephony.data.DataNetworkController.DataNetworkControllerCallback; import com.android.internal.telephony.data.DataNetworkController.NetworkRequestList; import com.android.internal.telephony.data.DataProfileManager.DataProfileManagerCallback; Loading @@ -71,9 +72,6 @@ import java.util.stream.Collectors; public class DataRetryManager extends Handler { private static final boolean VDBG = false; /** Event for data config updated. */ private static final int EVENT_DATA_CONFIG_UPDATED = 1; /** Event for data setup retry. */ private static final int EVENT_DATA_SETUP_RETRY = 3; Loading Loading @@ -930,8 +928,12 @@ public class DataRetryManager extends Handler { mDataServiceManagers = dataServiceManagers; mDataConfigManager = dataNetworkController.getDataConfigManager(); mDataProfileManager = dataNetworkController.getDataProfileManager(); mDataConfigManager.registerForConfigUpdate(this, EVENT_DATA_CONFIG_UPDATED); mDataConfigManager.registerCallback(new DataConfigManagerCallback(this::post) { @Override public void onCarrierConfigChanged() { DataRetryManager.this.onCarrierConfigUpdated(); } }); mDataServiceManagers.get(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) .registerForApnUnthrottled(this, EVENT_DATA_PROFILE_UNTHROTTLED); if (!mPhone.getAccessNetworksManager().isInLegacyMode()) { Loading Loading @@ -964,9 +966,6 @@ public class DataRetryManager extends Handler { public void handleMessage(Message msg) { AsyncResult ar; switch (msg.what) { case EVENT_DATA_CONFIG_UPDATED: onDataConfigUpdated(); break; case EVENT_DATA_SETUP_RETRY: DataSetupRetryEntry dataSetupRetryEntry = (DataSetupRetryEntry) msg.obj; Objects.requireNonNull(dataSetupRetryEntry); Loading Loading @@ -1014,9 +1013,9 @@ public class DataRetryManager extends Handler { } /** * Called when data config is updated. * Called when carrier config is updated. */ private void onDataConfigUpdated() { private void onCarrierConfigUpdated() { onReset(RESET_REASON_DATA_CONFIG_CHANGED); mDataSetupRetryRuleList = mDataConfigManager.getDataSetupRetryRules(); mDataHandoverRetryRuleList = mDataConfigManager.getDataHandoverRetryRules(); Loading