Loading src/java/com/android/internal/telephony/NetworkRegistrationManager.java +4 −3 Original line number Diff line number Diff line Loading @@ -84,12 +84,13 @@ public class NetworkRegistrationManager { private final Map<NetworkRegStateCallback, Message> mCallbackTable = new Hashtable(); public void getNetworkRegistrationState(int domain, Message onCompleteMessage) { public void getNetworkRegistrationState(@NetworkRegistrationState.Domain int domain, Message onCompleteMessage) { if (onCompleteMessage == null) return; logd("getNetworkRegistrationState domain " + domain); if (!isServiceConnected()) { logd("service not connected."); loge("service not connected. Domain = " + ((domain == NetworkRegistrationState.DOMAIN_CS) ? "CS" : "PS")); onCompleteMessage.obj = new AsyncResult(onCompleteMessage.obj, null, new IllegalStateException("Service not connected.")); onCompleteMessage.sendToTarget(); Loading src/java/com/android/internal/telephony/TransportManager.java +58 −15 Original line number Diff line number Diff line Loading @@ -21,22 +21,27 @@ import android.annotation.NonNull; import android.os.AsyncResult; import android.os.Handler; import android.os.Message; import android.telephony.AccessNetworkConstants.AccessNetworkType; import android.telephony.AccessNetworkConstants.TransportType; import android.telephony.CarrierConfigManager; import android.telephony.Rlog; import android.telephony.data.ApnSetting.ApnType; import android.text.TextUtils; import com.android.internal.telephony.Phone; import com.android.internal.telephony.dataconnection.AccessNetworksManager.QualifiedNetworks; import com.android.internal.util.ArrayUtils; import com.android.internal.util.IndentingPrintWriter; import java.io.FileDescriptor; import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; /** * This class represents the transport manager which manages available transports (i.e. WWAN or Loading @@ -46,7 +51,17 @@ import java.util.List; public class TransportManager extends Handler { private static final String TAG = TransportManager.class.getSimpleName(); private static final boolean DBG = true; private static final Map<Integer, Integer> ACCESS_NETWORK_TRANSPORT_TYPE_MAP; static { ACCESS_NETWORK_TRANSPORT_TYPE_MAP = new HashMap<>(); ACCESS_NETWORK_TRANSPORT_TYPE_MAP.put(AccessNetworkType.UNKNOWN, TransportType.WWAN); ACCESS_NETWORK_TRANSPORT_TYPE_MAP.put(AccessNetworkType.GERAN, TransportType.WWAN); ACCESS_NETWORK_TRANSPORT_TYPE_MAP.put(AccessNetworkType.UTRAN, TransportType.WWAN); ACCESS_NETWORK_TRANSPORT_TYPE_MAP.put(AccessNetworkType.EUTRAN, TransportType.WWAN); ACCESS_NETWORK_TRANSPORT_TYPE_MAP.put(AccessNetworkType.CDMA2000, TransportType.WWAN); ACCESS_NETWORK_TRANSPORT_TYPE_MAP.put(AccessNetworkType.IWLAN, TransportType.WLAN); } private static final int EVENT_QUALIFIED_NETWORKS_CHANGED = 1; Loading Loading @@ -87,6 +102,12 @@ public class TransportManager extends Handler { private final AccessNetworksManager mAccessNetworksManager; /** * Available networks. The key is the APN type, and the value is the available network list in * the preferred order. */ private final Map<Integer, int[]> mCurrentAvailableNetworks; public TransportManager(Phone phone) { mPhone = phone; mAccessNetworksManager = new AccessNetworksManager(phone); Loading @@ -94,6 +115,8 @@ public class TransportManager extends Handler { mAccessNetworksManager.registerForQualifiedNetworksChanged(this, EVENT_QUALIFIED_NETWORKS_CHANGED); mCurrentAvailableNetworks = new ConcurrentHashMap<>(); if (isInLegacyMode()) { // For legacy mode, WWAN is the only transport to handle all data connections, even // the IWLAN ones. Loading @@ -117,9 +140,11 @@ public class TransportManager extends Handler { } } private synchronized void updateAvailableNetworks(List<QualifiedNetworks> networks) { log("updateAvailableNetworks: " + networks); //TODO: Update available networks and transports. private synchronized void updateAvailableNetworks(List<QualifiedNetworks> networksList) { log("updateAvailableNetworks: " + networksList); for (QualifiedNetworks networks : networksList) { mCurrentAvailableNetworks.put(networks.apnType, networks.qualifiedNetworks); } } /** Loading Loading @@ -150,16 +175,35 @@ public class TransportManager extends Handler { } /** * Get the corresponding transport based on the APN type * Get the transport based on the APN type * * @param apnType APN type * @return The transport type */ public int getCurrentTransport(@ApnType int apnType) { // TODO: Look up the transport from the transport type map // In legacy mode, always route to cellular. if (isInLegacyMode()) { return TransportType.WWAN; } // If we can't find the available networks, always route to cellular. if (!mCurrentAvailableNetworks.containsKey(apnType)) { return TransportType.WWAN; } int[] availableNetworks = mCurrentAvailableNetworks.get(apnType); // If the available networks list is empty, route to cellular. if (ArrayUtils.isEmpty(availableNetworks)) { return TransportType.WWAN; } // TODO: For now we choose the first network because it's the most preferred one. In the // the future we should validate it to make sure this network does not violate carrier // preference and user preference. return ACCESS_NETWORK_TRANSPORT_TYPE_MAP.get(availableNetworks[0]); } /** * Dump the state of transport manager * Loading @@ -171,12 +215,11 @@ public class TransportManager extends Handler { IndentingPrintWriter pw = new IndentingPrintWriter(printwriter, " "); pw.println("TransportManager:"); pw.increaseIndent(); pw.print("mAvailableTransports="); List<String> transportsStrings = new ArrayList<>(); for (int i = 0; i < mAvailableTransports.length; i++) { transportsStrings.add(TransportType.toString(mAvailableTransports[i])); } pw.println("[" + TextUtils.join(",", transportsStrings) + "]"); pw.println("mAvailableTransports=[" + Arrays.stream(mAvailableTransports) .mapToObj(type -> TransportType.toString(type)) .collect(Collectors.joining(",")) + "]"); pw.println("isInLegacy=" + isInLegacyMode()); pw.println("IWLAN operation mode=" + mPhone.mCi.getIwlanOperationMode()); mAccessNetworksManager.dump(fd, pw, args); pw.decreaseIndent(); pw.flush(); Loading src/java/com/android/internal/telephony/dataconnection/AccessNetworksManager.java +13 −10 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ import java.io.FileDescriptor; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * Access network manager manages the qualified/available networks for mobile data connection. Loading Loading @@ -80,6 +81,7 @@ public class AccessNetworksManager { private QualifiedNetworksServiceConnection mServiceConnection; // Available networks. Key is the APN type. private final SparseArray<int[]> mAvailableNetworks = new SparseArray<>(); private final RegistrantList mQualifiedNetworksChangedRegistrants = new RegistrantList(); Loading Loading @@ -119,7 +121,9 @@ public class AccessNetworksManager { return "[QualifiedNetworks: apnType=" + ApnSetting.getApnTypeString(apnType) + ", networks=" + TextUtils.join(", ", accessNetworkStrings) + Arrays.stream(qualifiedNetworks) .mapToObj(type -> AccessNetworkType.toString(type)) .collect(Collectors.joining(",")) + "]"; } } Loading Loading @@ -160,9 +164,11 @@ public class AccessNetworksManager { IQualifiedNetworksServiceCallback.Stub { @Override public void onQualifiedNetworkTypesChanged(int apnTypes, int[] qualifiedNetworkTypes) { log("onQualifiedNetworkTypesChanged. apnTypes = " log("onQualifiedNetworkTypesChanged. apnTypes = [" + ApnSetting.getApnTypesStringFromBitmask(apnTypes) + ", networks = " + Arrays.toString(qualifiedNetworkTypes)); + "], networks = [" + Arrays.stream(qualifiedNetworkTypes) .mapToObj(i -> AccessNetworkType.toString(i)).collect(Collectors.joining(",")) + "]"); List<QualifiedNetworks> qualifiedNetworksList = new ArrayList<>(); for (int supportedApnType : SUPPORTED_APN_TYPES) { if ((apnTypes & supportedApnType) == supportedApnType) { Loading Loading @@ -316,13 +322,10 @@ public class AccessNetworksManager { pw.increaseIndent(); for (int i = 0; i < mAvailableNetworks.size(); i++) { pw.print("APN type " + ApnSetting.getApnTypeString(mAvailableNetworks.keyAt(i)) + ": "); List<String> networksStrings = new ArrayList<>(); for (int network : mAvailableNetworks.valueAt(i)) { networksStrings.add(AccessNetworkType.toString(network)); } pw.println("[" + TextUtils.join(",", networksStrings) + "]"); pw.println("APN type " + ApnSetting.getApnTypeString(mAvailableNetworks.keyAt(i)) + ": [" + Arrays.stream(mAvailableNetworks.valueAt(i)) .mapToObj(type -> AccessNetworkType.toString(type)) .collect(Collectors.joining(",")) + "]"); } pw.decreaseIndent(); pw.decreaseIndent(); Loading src/java/com/android/internal/telephony/dataconnection/DcTracker.java +10 −1 Original line number Diff line number Diff line Loading @@ -207,6 +207,9 @@ public class DcTracker extends Handler { /* The Url passed as object parameter in CMD_ENABLE_MOBILE_PROVISIONING */ private String mProvisioningUrl = null; /* Indicating data service is bound or not */ private boolean mDataServiceBound = false; /* Intent for the provisioning apn alarm */ private static final String INTENT_PROVISIONING_APN_ALARM = "com.android.internal.telephony.provisioning_apn_alarm"; Loading Loading @@ -3848,6 +3851,7 @@ public class DcTracker extends Handler { pw.println(" mAutoAttachOnCreation=" + mAutoAttachOnCreation.get()); pw.println(" mIsScreenOn=" + mIsScreenOn); pw.println(" mUniqueIdGenerator=" + mUniqueIdGenerator); pw.println(" mDataServiceBound=" + mDataServiceBound); pw.println(" mDataRoamingLeakageLog= "); mDataRoamingLeakageLog.dump(fd, pw, args); pw.println(" mApnSettingsInitializationLog= "); Loading @@ -3856,7 +3860,11 @@ public class DcTracker extends Handler { pw.println(" ***************************************"); DcController dcc = mDcc; if (dcc != null) { if (mDataServiceBound) { dcc.dump(fd, pw, args); } else { pw.println(" Can't dump mDcc because data service is not bound."); } } else { pw.println(" mDcc=null"); } Loading Loading @@ -4538,5 +4546,6 @@ public class DcTracker extends Handler { } else { mDcc.dispose(); } mDataServiceBound = bound; } } src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java +30 −11 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import android.net.StringNetworkSpecifier; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.telephony.AccessNetworkConstants.TransportType; import android.telephony.Rlog; import android.util.LocalLog; Loading @@ -38,6 +37,7 @@ import com.android.internal.util.IndentingPrintWriter; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; public class TelephonyNetworkFactory extends NetworkFactory { public final String LOG_TAG; Loading @@ -52,13 +52,15 @@ public class TelephonyNetworkFactory extends NetworkFactory { private final PhoneSwitcher mPhoneSwitcher; private final SubscriptionController mSubscriptionController; private final SubscriptionMonitor mSubscriptionMonitor; private final DcTracker mDcTracker; private final LocalLog mLocalLog = new LocalLog(REQUEST_LOG_SIZE); // Key: network request. Value: whether it's applied to DcTracker. private final HashMap<NetworkRequest, Boolean> mNetworkRequests = new HashMap(); private final Map<NetworkRequest, Boolean> mNetworkRequests = new HashMap<>(); private final Phone mPhone; private final TransportManager mTransportManager; private int mSubscriptionId; private final static int TELEPHONY_NETWORK_SCORE = 50; Loading @@ -74,6 +76,7 @@ public class TelephonyNetworkFactory extends NetworkFactory { super(looper, phone.getContext(), "TelephonyNetworkFactory[" + phone.getPhoneId() + "]", null); mPhone = phone; mTransportManager = mPhone.getTransportManager(); mInternalHandler = new InternalHandler(looper); mSubscriptionController = SubscriptionController.getInstance(); Loading @@ -84,9 +87,6 @@ public class TelephonyNetworkFactory extends NetworkFactory { mPhoneSwitcher = PhoneSwitcher.getInstance(); mSubscriptionMonitor = subscriptionMonitor; LOG_TAG = "TelephonyNetworkFactory[" + mPhone.getPhoneId() + "]"; // TODO: Will need to dynamically route network requests to the corresponding DcTracker in // the future. For now we route everything to WWAN. mDcTracker = mPhone.getDcTracker(TransportType.WWAN); mPhoneSwitcher.registerForActivePhoneSwitch(mInternalHandler, EVENT_ACTIVE_PHONE_SWITCH, null); Loading Loading @@ -151,6 +151,26 @@ public class TelephonyNetworkFactory extends NetworkFactory { } } private int getTransportTypeFromNetworkRequest(NetworkRequest networkRequest) { int apnType = ApnContext.getApnTypeFromNetworkRequest(networkRequest); return mTransportManager.getCurrentTransport(apnType); } private void requestNetworkInternal(NetworkRequest networkRequest) { int transportType = getTransportTypeFromNetworkRequest(networkRequest); if (mPhone.getDcTracker(transportType) != null) { mPhone.getDcTracker(transportType).requestNetwork(networkRequest, mLocalLog); } } private void releaseNetworkInternal(NetworkRequest networkRequest, boolean cleanUpOnRelease) { int transportType = getTransportTypeFromNetworkRequest(networkRequest); if (mPhone.getDcTracker(transportType) != null) { mPhone.getDcTracker(transportType).releaseNetwork(networkRequest, mLocalLog, cleanUpOnRelease); } } private void applyRequestsOnActivePhoneSwitch(NetworkRequest networkRequest, boolean cleanUpOnRelease, int action) { if (action == ACTION_NO_OP) return; Loading @@ -159,9 +179,9 @@ public class TelephonyNetworkFactory extends NetworkFactory { ? "Requesting" : "Releasing") + " network request " + networkRequest; mLocalLog.log(logStr); if (action == ACTION_REQUEST) { mDcTracker.requestNetwork(networkRequest, mLocalLog); requestNetworkInternal(networkRequest); } else if (action == ACTION_RELEASE) { mDcTracker.releaseNetwork(networkRequest, mLocalLog, cleanUpOnRelease); releaseNetworkInternal(networkRequest, cleanUpOnRelease); } } Loading Loading @@ -221,7 +241,7 @@ public class TelephonyNetworkFactory extends NetworkFactory { mLocalLog.log(s); if (shouldApply) { mDcTracker.requestNetwork(networkRequest, mLocalLog); requestNetworkInternal(networkRequest); } } Loading @@ -242,9 +262,8 @@ public class TelephonyNetworkFactory extends NetworkFactory { log(s); mLocalLog.log(s); if (applied) { mDcTracker.releaseNetwork(networkRequest, mLocalLog, false); releaseNetworkInternal(networkRequest, false); } } Loading Loading
src/java/com/android/internal/telephony/NetworkRegistrationManager.java +4 −3 Original line number Diff line number Diff line Loading @@ -84,12 +84,13 @@ public class NetworkRegistrationManager { private final Map<NetworkRegStateCallback, Message> mCallbackTable = new Hashtable(); public void getNetworkRegistrationState(int domain, Message onCompleteMessage) { public void getNetworkRegistrationState(@NetworkRegistrationState.Domain int domain, Message onCompleteMessage) { if (onCompleteMessage == null) return; logd("getNetworkRegistrationState domain " + domain); if (!isServiceConnected()) { logd("service not connected."); loge("service not connected. Domain = " + ((domain == NetworkRegistrationState.DOMAIN_CS) ? "CS" : "PS")); onCompleteMessage.obj = new AsyncResult(onCompleteMessage.obj, null, new IllegalStateException("Service not connected.")); onCompleteMessage.sendToTarget(); Loading
src/java/com/android/internal/telephony/TransportManager.java +58 −15 Original line number Diff line number Diff line Loading @@ -21,22 +21,27 @@ import android.annotation.NonNull; import android.os.AsyncResult; import android.os.Handler; import android.os.Message; import android.telephony.AccessNetworkConstants.AccessNetworkType; import android.telephony.AccessNetworkConstants.TransportType; import android.telephony.CarrierConfigManager; import android.telephony.Rlog; import android.telephony.data.ApnSetting.ApnType; import android.text.TextUtils; import com.android.internal.telephony.Phone; import com.android.internal.telephony.dataconnection.AccessNetworksManager.QualifiedNetworks; import com.android.internal.util.ArrayUtils; import com.android.internal.util.IndentingPrintWriter; import java.io.FileDescriptor; import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; /** * This class represents the transport manager which manages available transports (i.e. WWAN or Loading @@ -46,7 +51,17 @@ import java.util.List; public class TransportManager extends Handler { private static final String TAG = TransportManager.class.getSimpleName(); private static final boolean DBG = true; private static final Map<Integer, Integer> ACCESS_NETWORK_TRANSPORT_TYPE_MAP; static { ACCESS_NETWORK_TRANSPORT_TYPE_MAP = new HashMap<>(); ACCESS_NETWORK_TRANSPORT_TYPE_MAP.put(AccessNetworkType.UNKNOWN, TransportType.WWAN); ACCESS_NETWORK_TRANSPORT_TYPE_MAP.put(AccessNetworkType.GERAN, TransportType.WWAN); ACCESS_NETWORK_TRANSPORT_TYPE_MAP.put(AccessNetworkType.UTRAN, TransportType.WWAN); ACCESS_NETWORK_TRANSPORT_TYPE_MAP.put(AccessNetworkType.EUTRAN, TransportType.WWAN); ACCESS_NETWORK_TRANSPORT_TYPE_MAP.put(AccessNetworkType.CDMA2000, TransportType.WWAN); ACCESS_NETWORK_TRANSPORT_TYPE_MAP.put(AccessNetworkType.IWLAN, TransportType.WLAN); } private static final int EVENT_QUALIFIED_NETWORKS_CHANGED = 1; Loading Loading @@ -87,6 +102,12 @@ public class TransportManager extends Handler { private final AccessNetworksManager mAccessNetworksManager; /** * Available networks. The key is the APN type, and the value is the available network list in * the preferred order. */ private final Map<Integer, int[]> mCurrentAvailableNetworks; public TransportManager(Phone phone) { mPhone = phone; mAccessNetworksManager = new AccessNetworksManager(phone); Loading @@ -94,6 +115,8 @@ public class TransportManager extends Handler { mAccessNetworksManager.registerForQualifiedNetworksChanged(this, EVENT_QUALIFIED_NETWORKS_CHANGED); mCurrentAvailableNetworks = new ConcurrentHashMap<>(); if (isInLegacyMode()) { // For legacy mode, WWAN is the only transport to handle all data connections, even // the IWLAN ones. Loading @@ -117,9 +140,11 @@ public class TransportManager extends Handler { } } private synchronized void updateAvailableNetworks(List<QualifiedNetworks> networks) { log("updateAvailableNetworks: " + networks); //TODO: Update available networks and transports. private synchronized void updateAvailableNetworks(List<QualifiedNetworks> networksList) { log("updateAvailableNetworks: " + networksList); for (QualifiedNetworks networks : networksList) { mCurrentAvailableNetworks.put(networks.apnType, networks.qualifiedNetworks); } } /** Loading Loading @@ -150,16 +175,35 @@ public class TransportManager extends Handler { } /** * Get the corresponding transport based on the APN type * Get the transport based on the APN type * * @param apnType APN type * @return The transport type */ public int getCurrentTransport(@ApnType int apnType) { // TODO: Look up the transport from the transport type map // In legacy mode, always route to cellular. if (isInLegacyMode()) { return TransportType.WWAN; } // If we can't find the available networks, always route to cellular. if (!mCurrentAvailableNetworks.containsKey(apnType)) { return TransportType.WWAN; } int[] availableNetworks = mCurrentAvailableNetworks.get(apnType); // If the available networks list is empty, route to cellular. if (ArrayUtils.isEmpty(availableNetworks)) { return TransportType.WWAN; } // TODO: For now we choose the first network because it's the most preferred one. In the // the future we should validate it to make sure this network does not violate carrier // preference and user preference. return ACCESS_NETWORK_TRANSPORT_TYPE_MAP.get(availableNetworks[0]); } /** * Dump the state of transport manager * Loading @@ -171,12 +215,11 @@ public class TransportManager extends Handler { IndentingPrintWriter pw = new IndentingPrintWriter(printwriter, " "); pw.println("TransportManager:"); pw.increaseIndent(); pw.print("mAvailableTransports="); List<String> transportsStrings = new ArrayList<>(); for (int i = 0; i < mAvailableTransports.length; i++) { transportsStrings.add(TransportType.toString(mAvailableTransports[i])); } pw.println("[" + TextUtils.join(",", transportsStrings) + "]"); pw.println("mAvailableTransports=[" + Arrays.stream(mAvailableTransports) .mapToObj(type -> TransportType.toString(type)) .collect(Collectors.joining(",")) + "]"); pw.println("isInLegacy=" + isInLegacyMode()); pw.println("IWLAN operation mode=" + mPhone.mCi.getIwlanOperationMode()); mAccessNetworksManager.dump(fd, pw, args); pw.decreaseIndent(); pw.flush(); Loading
src/java/com/android/internal/telephony/dataconnection/AccessNetworksManager.java +13 −10 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ import java.io.FileDescriptor; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * Access network manager manages the qualified/available networks for mobile data connection. Loading Loading @@ -80,6 +81,7 @@ public class AccessNetworksManager { private QualifiedNetworksServiceConnection mServiceConnection; // Available networks. Key is the APN type. private final SparseArray<int[]> mAvailableNetworks = new SparseArray<>(); private final RegistrantList mQualifiedNetworksChangedRegistrants = new RegistrantList(); Loading Loading @@ -119,7 +121,9 @@ public class AccessNetworksManager { return "[QualifiedNetworks: apnType=" + ApnSetting.getApnTypeString(apnType) + ", networks=" + TextUtils.join(", ", accessNetworkStrings) + Arrays.stream(qualifiedNetworks) .mapToObj(type -> AccessNetworkType.toString(type)) .collect(Collectors.joining(",")) + "]"; } } Loading Loading @@ -160,9 +164,11 @@ public class AccessNetworksManager { IQualifiedNetworksServiceCallback.Stub { @Override public void onQualifiedNetworkTypesChanged(int apnTypes, int[] qualifiedNetworkTypes) { log("onQualifiedNetworkTypesChanged. apnTypes = " log("onQualifiedNetworkTypesChanged. apnTypes = [" + ApnSetting.getApnTypesStringFromBitmask(apnTypes) + ", networks = " + Arrays.toString(qualifiedNetworkTypes)); + "], networks = [" + Arrays.stream(qualifiedNetworkTypes) .mapToObj(i -> AccessNetworkType.toString(i)).collect(Collectors.joining(",")) + "]"); List<QualifiedNetworks> qualifiedNetworksList = new ArrayList<>(); for (int supportedApnType : SUPPORTED_APN_TYPES) { if ((apnTypes & supportedApnType) == supportedApnType) { Loading Loading @@ -316,13 +322,10 @@ public class AccessNetworksManager { pw.increaseIndent(); for (int i = 0; i < mAvailableNetworks.size(); i++) { pw.print("APN type " + ApnSetting.getApnTypeString(mAvailableNetworks.keyAt(i)) + ": "); List<String> networksStrings = new ArrayList<>(); for (int network : mAvailableNetworks.valueAt(i)) { networksStrings.add(AccessNetworkType.toString(network)); } pw.println("[" + TextUtils.join(",", networksStrings) + "]"); pw.println("APN type " + ApnSetting.getApnTypeString(mAvailableNetworks.keyAt(i)) + ": [" + Arrays.stream(mAvailableNetworks.valueAt(i)) .mapToObj(type -> AccessNetworkType.toString(type)) .collect(Collectors.joining(",")) + "]"); } pw.decreaseIndent(); pw.decreaseIndent(); Loading
src/java/com/android/internal/telephony/dataconnection/DcTracker.java +10 −1 Original line number Diff line number Diff line Loading @@ -207,6 +207,9 @@ public class DcTracker extends Handler { /* The Url passed as object parameter in CMD_ENABLE_MOBILE_PROVISIONING */ private String mProvisioningUrl = null; /* Indicating data service is bound or not */ private boolean mDataServiceBound = false; /* Intent for the provisioning apn alarm */ private static final String INTENT_PROVISIONING_APN_ALARM = "com.android.internal.telephony.provisioning_apn_alarm"; Loading Loading @@ -3848,6 +3851,7 @@ public class DcTracker extends Handler { pw.println(" mAutoAttachOnCreation=" + mAutoAttachOnCreation.get()); pw.println(" mIsScreenOn=" + mIsScreenOn); pw.println(" mUniqueIdGenerator=" + mUniqueIdGenerator); pw.println(" mDataServiceBound=" + mDataServiceBound); pw.println(" mDataRoamingLeakageLog= "); mDataRoamingLeakageLog.dump(fd, pw, args); pw.println(" mApnSettingsInitializationLog= "); Loading @@ -3856,7 +3860,11 @@ public class DcTracker extends Handler { pw.println(" ***************************************"); DcController dcc = mDcc; if (dcc != null) { if (mDataServiceBound) { dcc.dump(fd, pw, args); } else { pw.println(" Can't dump mDcc because data service is not bound."); } } else { pw.println(" mDcc=null"); } Loading Loading @@ -4538,5 +4546,6 @@ public class DcTracker extends Handler { } else { mDcc.dispose(); } mDataServiceBound = bound; } }
src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java +30 −11 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import android.net.StringNetworkSpecifier; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.telephony.AccessNetworkConstants.TransportType; import android.telephony.Rlog; import android.util.LocalLog; Loading @@ -38,6 +37,7 @@ import com.android.internal.util.IndentingPrintWriter; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.HashMap; import java.util.Map; public class TelephonyNetworkFactory extends NetworkFactory { public final String LOG_TAG; Loading @@ -52,13 +52,15 @@ public class TelephonyNetworkFactory extends NetworkFactory { private final PhoneSwitcher mPhoneSwitcher; private final SubscriptionController mSubscriptionController; private final SubscriptionMonitor mSubscriptionMonitor; private final DcTracker mDcTracker; private final LocalLog mLocalLog = new LocalLog(REQUEST_LOG_SIZE); // Key: network request. Value: whether it's applied to DcTracker. private final HashMap<NetworkRequest, Boolean> mNetworkRequests = new HashMap(); private final Map<NetworkRequest, Boolean> mNetworkRequests = new HashMap<>(); private final Phone mPhone; private final TransportManager mTransportManager; private int mSubscriptionId; private final static int TELEPHONY_NETWORK_SCORE = 50; Loading @@ -74,6 +76,7 @@ public class TelephonyNetworkFactory extends NetworkFactory { super(looper, phone.getContext(), "TelephonyNetworkFactory[" + phone.getPhoneId() + "]", null); mPhone = phone; mTransportManager = mPhone.getTransportManager(); mInternalHandler = new InternalHandler(looper); mSubscriptionController = SubscriptionController.getInstance(); Loading @@ -84,9 +87,6 @@ public class TelephonyNetworkFactory extends NetworkFactory { mPhoneSwitcher = PhoneSwitcher.getInstance(); mSubscriptionMonitor = subscriptionMonitor; LOG_TAG = "TelephonyNetworkFactory[" + mPhone.getPhoneId() + "]"; // TODO: Will need to dynamically route network requests to the corresponding DcTracker in // the future. For now we route everything to WWAN. mDcTracker = mPhone.getDcTracker(TransportType.WWAN); mPhoneSwitcher.registerForActivePhoneSwitch(mInternalHandler, EVENT_ACTIVE_PHONE_SWITCH, null); Loading Loading @@ -151,6 +151,26 @@ public class TelephonyNetworkFactory extends NetworkFactory { } } private int getTransportTypeFromNetworkRequest(NetworkRequest networkRequest) { int apnType = ApnContext.getApnTypeFromNetworkRequest(networkRequest); return mTransportManager.getCurrentTransport(apnType); } private void requestNetworkInternal(NetworkRequest networkRequest) { int transportType = getTransportTypeFromNetworkRequest(networkRequest); if (mPhone.getDcTracker(transportType) != null) { mPhone.getDcTracker(transportType).requestNetwork(networkRequest, mLocalLog); } } private void releaseNetworkInternal(NetworkRequest networkRequest, boolean cleanUpOnRelease) { int transportType = getTransportTypeFromNetworkRequest(networkRequest); if (mPhone.getDcTracker(transportType) != null) { mPhone.getDcTracker(transportType).releaseNetwork(networkRequest, mLocalLog, cleanUpOnRelease); } } private void applyRequestsOnActivePhoneSwitch(NetworkRequest networkRequest, boolean cleanUpOnRelease, int action) { if (action == ACTION_NO_OP) return; Loading @@ -159,9 +179,9 @@ public class TelephonyNetworkFactory extends NetworkFactory { ? "Requesting" : "Releasing") + " network request " + networkRequest; mLocalLog.log(logStr); if (action == ACTION_REQUEST) { mDcTracker.requestNetwork(networkRequest, mLocalLog); requestNetworkInternal(networkRequest); } else if (action == ACTION_RELEASE) { mDcTracker.releaseNetwork(networkRequest, mLocalLog, cleanUpOnRelease); releaseNetworkInternal(networkRequest, cleanUpOnRelease); } } Loading Loading @@ -221,7 +241,7 @@ public class TelephonyNetworkFactory extends NetworkFactory { mLocalLog.log(s); if (shouldApply) { mDcTracker.requestNetwork(networkRequest, mLocalLog); requestNetworkInternal(networkRequest); } } Loading @@ -242,9 +262,8 @@ public class TelephonyNetworkFactory extends NetworkFactory { log(s); mLocalLog.log(s); if (applied) { mDcTracker.releaseNetwork(networkRequest, mLocalLog, false); releaseNetworkInternal(networkRequest, false); } } Loading