Loading src/java/com/android/internal/telephony/dataconnection/AccessNetworksManager.java +33 −18 Original line number Original line Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.ServiceConnection; import android.os.Handler; import android.os.Handler; import android.os.IBinder; import android.os.IBinder; import android.os.Message; import android.os.PersistableBundle; import android.os.PersistableBundle; import android.os.Registrant; import android.os.Registrant; import android.os.RegistrantList; import android.os.RegistrantList; Loading Loading @@ -55,7 +56,7 @@ import java.util.stream.Collectors; * It binds to the vendor's qualified networks service and actively monitors the qualified * It binds to the vendor's qualified networks service and actively monitors the qualified * networks changes. * networks changes. */ */ public class AccessNetworksManager { public class AccessNetworksManager extends Handler { private static final String TAG = AccessNetworksManager.class.getSimpleName(); private static final String TAG = AccessNetworksManager.class.getSimpleName(); private static final boolean DBG = false; private static final boolean DBG = false; Loading @@ -69,6 +70,8 @@ public class AccessNetworksManager { ApnSetting.TYPE_EMERGENCY ApnSetting.TYPE_EMERGENCY }; }; private static final int EVENT_BIND_QUALIFIED_NETWORKS_SERVICE = 1; private final Phone mPhone; private final Phone mPhone; private final CarrierConfigManager mCarrierConfigManager; private final CarrierConfigManager mCarrierConfigManager; Loading @@ -77,8 +80,7 @@ public class AccessNetworksManager { private AccessNetworksManagerDeathRecipient mDeathRecipient; private AccessNetworksManagerDeathRecipient mDeathRecipient; // The bound qualified networks service component name private String mTargetBindingPackageName; private ComponentName mBoundQualifiedNetworksServiceComponent; private QualifiedNetworksServiceConnection mServiceConnection; private QualifiedNetworksServiceConnection mServiceConnection; Loading @@ -94,10 +96,11 @@ public class AccessNetworksManager { if (CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED.equals(action) if (CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED.equals(action) && mPhone.getPhoneId() == intent.getIntExtra( && mPhone.getPhoneId() == intent.getIntExtra( CarrierConfigManager.EXTRA_SLOT_INDEX, 0)) { CarrierConfigManager.EXTRA_SLOT_INDEX, 0)) { // When carrier config changes, we need to evaluate and see if we should unbind // We should wait for carrier config changed event because the target binding // the existing service and bind to a new one. // package name can come from the carrier config. Note that we still get this event if (DBG) log("Carrier config changed."); // even when SIM is absent. bindQualifiedNetworksService(); if (DBG) log("Carrier config changed. Try to bind qualified network service."); sendEmptyMessage(EVENT_BIND_QUALIFIED_NETWORKS_SERVICE); } } } } }; }; Loading @@ -107,7 +110,7 @@ public class AccessNetworksManager { */ */ public static class QualifiedNetworks { public static class QualifiedNetworks { public final @ApnType int apnType; public final @ApnType int apnType; // The qualified netowrks in preferred order. Each network is a AccessNetworkType. // The qualified networks in preferred order. Each network is a AccessNetworkType. public final int[] qualifiedNetworks; public final int[] qualifiedNetworks; public QualifiedNetworks(@ApnType int apnType, int[] qualifiedNetworks) { public QualifiedNetworks(@ApnType int apnType, int[] qualifiedNetworks) { this.apnType = apnType; this.apnType = apnType; Loading @@ -134,15 +137,14 @@ public class AccessNetworksManager { @Override @Override public void binderDied() { public void binderDied() { // TODO: try to rebind the service. // TODO: try to rebind the service. loge("QualifiedNetworksService(" + mBoundQualifiedNetworksServiceComponent + ") died."); loge("QualifiedNetworksService(" + mTargetBindingPackageName + ") died."); } } } } private final class QualifiedNetworksServiceConnection implements ServiceConnection { private final class QualifiedNetworksServiceConnection implements ServiceConnection { @Override @Override public void onServiceConnected(ComponentName name, IBinder service) { public void onServiceConnected(ComponentName name, IBinder service) { if (DBG) log("onServiceConnected"); if (DBG) log("onServiceConnected " + name); mBoundQualifiedNetworksServiceComponent = name; mIQualifiedNetworksService = IQualifiedNetworksService.Stub.asInterface(service); mIQualifiedNetworksService = IQualifiedNetworksService.Stub.asInterface(service); mDeathRecipient = new AccessNetworksManagerDeathRecipient(); mDeathRecipient = new AccessNetworksManagerDeathRecipient(); Loading @@ -157,8 +159,9 @@ public class AccessNetworksManager { } } @Override @Override public void onServiceDisconnected(ComponentName name) { public void onServiceDisconnected(ComponentName name) { if (DBG) log("onServiceDisconnected"); if (DBG) log("onServiceDisconnected " + name); mIQualifiedNetworksService.asBinder().unlinkToDeath(mDeathRecipient, 0); mIQualifiedNetworksService.asBinder().unlinkToDeath(mDeathRecipient, 0); mTargetBindingPackageName = null; } } } } Loading Loading @@ -211,11 +214,21 @@ public class AccessNetworksManager { intentFilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); intentFilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); phone.getContext().registerReceiverAsUser(mConfigChangedReceiver, UserHandle.ALL, phone.getContext().registerReceiverAsUser(mConfigChangedReceiver, UserHandle.ALL, intentFilter, null, null); intentFilter, null, null); } // Only binds to qualified network service in AP-assisted mode. For legacy mode, /** // qualified networks service is not needed. * Handle message events if (phone.getTransportManager() != null && !phone.getTransportManager().isInLegacyMode()) { * * @param msg The message to handle */ @Override public void handleMessage(Message msg) { switch (msg.what) { case EVENT_BIND_QUALIFIED_NETWORKS_SERVICE: bindQualifiedNetworksService(); bindQualifiedNetworksService(); break; default: loge("Unhandled event " + msg.what); } } } } Loading @@ -234,8 +247,8 @@ public class AccessNetworksManager { if (mIQualifiedNetworksService != null if (mIQualifiedNetworksService != null && mIQualifiedNetworksService.asBinder().isBinderAlive()) { && mIQualifiedNetworksService.asBinder().isBinderAlive()) { if (mBoundQualifiedNetworksServiceComponent.getPackageName().equals(packageName)) { if (packageName.equals(mTargetBindingPackageName)) { if (DBG) log("Service " + packageName + " already bound."); if (DBG) log("Service " + packageName + " already bound or being bound."); return; return; } } Loading @@ -258,7 +271,9 @@ public class AccessNetworksManager { mServiceConnection, mServiceConnection, Context.BIND_AUTO_CREATE)) { Context.BIND_AUTO_CREATE)) { loge("Cannot bind to the qualified networks service."); loge("Cannot bind to the qualified networks service."); return; } } mTargetBindingPackageName = packageName; } catch (Exception e) { } catch (Exception e) { loge("Cannot bind to the qualified networks service. Exception: " + e); loge("Cannot bind to the qualified networks service. Exception: " + e); } } Loading src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java +12 −1 Original line number Original line Diff line number Diff line Loading @@ -316,11 +316,12 @@ public class TelephonyNetworkFactory extends NetworkFactory { log("onDataHandoverNeeded: apnType=" + ApnSetting.getApnTypeString(apnType) log("onDataHandoverNeeded: apnType=" + ApnSetting.getApnTypeString(apnType) + ", target transport=" + TransportType.toString(targetTransport)); + ", target transport=" + TransportType.toString(targetTransport)); if (mTransportManager.getCurrentTransport(apnType) == targetTransport) { if (mTransportManager.getCurrentTransport(apnType) == targetTransport) { log("apnType " + ApnSetting.getApnTypeString(apnType) + " is already on " log("APN type " + ApnSetting.getApnTypeString(apnType) + " is already on " + TransportType.toString(targetTransport)); + TransportType.toString(targetTransport)); return; return; } } boolean handoverPending = false; for (HashMap.Entry<NetworkRequest, Integer> entry : mNetworkRequests.entrySet()) { for (HashMap.Entry<NetworkRequest, Integer> entry : mNetworkRequests.entrySet()) { NetworkRequest networkRequest = entry.getKey(); NetworkRequest networkRequest = entry.getKey(); int currentTransport = entry.getValue(); int currentTransport = entry.getValue(); Loading @@ -332,10 +333,20 @@ public class TelephonyNetworkFactory extends NetworkFactory { EVENT_DATA_HANDOVER_COMPLETED); EVENT_DATA_HANDOVER_COMPLETED); onCompleteMsg.getData().putParcelable( onCompleteMsg.getData().putParcelable( DcTracker.DATA_COMPLETE_MSG_EXTRA_NETWORK_REQUEST, networkRequest); DcTracker.DATA_COMPLETE_MSG_EXTRA_NETWORK_REQUEST, networkRequest); // TODO: Need to handle the case that the request is there, but there is no actual // data connections established. requestNetworkInternal(networkRequest, DcTracker.REQUEST_TYPE_HANDOVER, requestNetworkInternal(networkRequest, DcTracker.REQUEST_TYPE_HANDOVER, targetTransport, onCompleteMsg); targetTransport, onCompleteMsg); handoverPending = true; } } } } if (!handoverPending) { log("No handover request pending. Update the transport type to " + TransportType.toString(targetTransport) + " for APN type " + ApnSetting.getApnTypeString(apnType)); mTransportManager.setCurrentTransport(apnType, targetTransport); } } } private void onDataHandoverSetupCompleted(NetworkRequest networkRequest, boolean success, private void onDataHandoverSetupCompleted(NetworkRequest networkRequest, boolean success, Loading src/java/com/android/internal/telephony/dataconnection/TransportManager.java +7 −3 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.telephony.dataconnection; import android.annotation.IntDef; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.os.AsyncResult; import android.os.AsyncResult; import android.os.Handler; import android.os.Handler; import android.os.Message; import android.os.Message; Loading Loading @@ -104,7 +105,8 @@ public class TransportManager extends Handler { /** The available transports. Must be one or more of AccessNetworkConstants.TransportType.XXX */ /** The available transports. Must be one or more of AccessNetworkConstants.TransportType.XXX */ private final int[] mAvailableTransports; private final int[] mAvailableTransports; private final AccessNetworksManager mAccessNetworksManager; @Nullable private AccessNetworksManager mAccessNetworksManager; /** /** * Available networks. The key is the APN type, and the value is the available network list in * Available networks. The key is the APN type, and the value is the available network list in Loading Loading @@ -138,7 +140,6 @@ public class TransportManager extends Handler { public TransportManager(Phone phone) { public TransportManager(Phone phone) { mPhone = phone; mPhone = phone; mAccessNetworksManager = new AccessNetworksManager(phone); mCurrentAvailableNetworks = new ConcurrentHashMap<>(); mCurrentAvailableNetworks = new ConcurrentHashMap<>(); mCurrentTransports = new ConcurrentHashMap<>(); mCurrentTransports = new ConcurrentHashMap<>(); mHandoverNeededEventRegistrants = new RegistrantList(); mHandoverNeededEventRegistrants = new RegistrantList(); Loading @@ -148,6 +149,7 @@ public class TransportManager extends Handler { // the IWLAN ones. // the IWLAN ones. mAvailableTransports = new int[]{TransportType.WWAN}; mAvailableTransports = new int[]{TransportType.WWAN}; } else { } else { mAccessNetworksManager = new AccessNetworksManager(phone); mAccessNetworksManager.registerForQualifiedNetworksChanged(this, mAccessNetworksManager.registerForQualifiedNetworksChanged(this, EVENT_QUALIFIED_NETWORKS_CHANGED); EVENT_QUALIFIED_NETWORKS_CHANGED); mAvailableTransports = new int[]{TransportType.WWAN, TransportType.WLAN}; mAvailableTransports = new int[]{TransportType.WWAN, TransportType.WLAN}; Loading Loading @@ -333,7 +335,9 @@ public class TransportManager extends Handler { pw.println("mCurrentTransports=" + mCurrentTransports); pw.println("mCurrentTransports=" + mCurrentTransports); pw.println("isInLegacy=" + isInLegacyMode()); pw.println("isInLegacy=" + isInLegacyMode()); pw.println("IWLAN operation mode=" + mPhone.mCi.getIwlanOperationMode()); pw.println("IWLAN operation mode=" + mPhone.mCi.getIwlanOperationMode()); if (mAccessNetworksManager != null) { mAccessNetworksManager.dump(fd, pw, args); mAccessNetworksManager.dump(fd, pw, args); } pw.decreaseIndent(); pw.decreaseIndent(); pw.flush(); pw.flush(); } } Loading Loading
src/java/com/android/internal/telephony/dataconnection/AccessNetworksManager.java +33 −18 Original line number Original line Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.ServiceConnection; import android.os.Handler; import android.os.Handler; import android.os.IBinder; import android.os.IBinder; import android.os.Message; import android.os.PersistableBundle; import android.os.PersistableBundle; import android.os.Registrant; import android.os.Registrant; import android.os.RegistrantList; import android.os.RegistrantList; Loading Loading @@ -55,7 +56,7 @@ import java.util.stream.Collectors; * It binds to the vendor's qualified networks service and actively monitors the qualified * It binds to the vendor's qualified networks service and actively monitors the qualified * networks changes. * networks changes. */ */ public class AccessNetworksManager { public class AccessNetworksManager extends Handler { private static final String TAG = AccessNetworksManager.class.getSimpleName(); private static final String TAG = AccessNetworksManager.class.getSimpleName(); private static final boolean DBG = false; private static final boolean DBG = false; Loading @@ -69,6 +70,8 @@ public class AccessNetworksManager { ApnSetting.TYPE_EMERGENCY ApnSetting.TYPE_EMERGENCY }; }; private static final int EVENT_BIND_QUALIFIED_NETWORKS_SERVICE = 1; private final Phone mPhone; private final Phone mPhone; private final CarrierConfigManager mCarrierConfigManager; private final CarrierConfigManager mCarrierConfigManager; Loading @@ -77,8 +80,7 @@ public class AccessNetworksManager { private AccessNetworksManagerDeathRecipient mDeathRecipient; private AccessNetworksManagerDeathRecipient mDeathRecipient; // The bound qualified networks service component name private String mTargetBindingPackageName; private ComponentName mBoundQualifiedNetworksServiceComponent; private QualifiedNetworksServiceConnection mServiceConnection; private QualifiedNetworksServiceConnection mServiceConnection; Loading @@ -94,10 +96,11 @@ public class AccessNetworksManager { if (CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED.equals(action) if (CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED.equals(action) && mPhone.getPhoneId() == intent.getIntExtra( && mPhone.getPhoneId() == intent.getIntExtra( CarrierConfigManager.EXTRA_SLOT_INDEX, 0)) { CarrierConfigManager.EXTRA_SLOT_INDEX, 0)) { // When carrier config changes, we need to evaluate and see if we should unbind // We should wait for carrier config changed event because the target binding // the existing service and bind to a new one. // package name can come from the carrier config. Note that we still get this event if (DBG) log("Carrier config changed."); // even when SIM is absent. bindQualifiedNetworksService(); if (DBG) log("Carrier config changed. Try to bind qualified network service."); sendEmptyMessage(EVENT_BIND_QUALIFIED_NETWORKS_SERVICE); } } } } }; }; Loading @@ -107,7 +110,7 @@ public class AccessNetworksManager { */ */ public static class QualifiedNetworks { public static class QualifiedNetworks { public final @ApnType int apnType; public final @ApnType int apnType; // The qualified netowrks in preferred order. Each network is a AccessNetworkType. // The qualified networks in preferred order. Each network is a AccessNetworkType. public final int[] qualifiedNetworks; public final int[] qualifiedNetworks; public QualifiedNetworks(@ApnType int apnType, int[] qualifiedNetworks) { public QualifiedNetworks(@ApnType int apnType, int[] qualifiedNetworks) { this.apnType = apnType; this.apnType = apnType; Loading @@ -134,15 +137,14 @@ public class AccessNetworksManager { @Override @Override public void binderDied() { public void binderDied() { // TODO: try to rebind the service. // TODO: try to rebind the service. loge("QualifiedNetworksService(" + mBoundQualifiedNetworksServiceComponent + ") died."); loge("QualifiedNetworksService(" + mTargetBindingPackageName + ") died."); } } } } private final class QualifiedNetworksServiceConnection implements ServiceConnection { private final class QualifiedNetworksServiceConnection implements ServiceConnection { @Override @Override public void onServiceConnected(ComponentName name, IBinder service) { public void onServiceConnected(ComponentName name, IBinder service) { if (DBG) log("onServiceConnected"); if (DBG) log("onServiceConnected " + name); mBoundQualifiedNetworksServiceComponent = name; mIQualifiedNetworksService = IQualifiedNetworksService.Stub.asInterface(service); mIQualifiedNetworksService = IQualifiedNetworksService.Stub.asInterface(service); mDeathRecipient = new AccessNetworksManagerDeathRecipient(); mDeathRecipient = new AccessNetworksManagerDeathRecipient(); Loading @@ -157,8 +159,9 @@ public class AccessNetworksManager { } } @Override @Override public void onServiceDisconnected(ComponentName name) { public void onServiceDisconnected(ComponentName name) { if (DBG) log("onServiceDisconnected"); if (DBG) log("onServiceDisconnected " + name); mIQualifiedNetworksService.asBinder().unlinkToDeath(mDeathRecipient, 0); mIQualifiedNetworksService.asBinder().unlinkToDeath(mDeathRecipient, 0); mTargetBindingPackageName = null; } } } } Loading Loading @@ -211,11 +214,21 @@ public class AccessNetworksManager { intentFilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); intentFilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); phone.getContext().registerReceiverAsUser(mConfigChangedReceiver, UserHandle.ALL, phone.getContext().registerReceiverAsUser(mConfigChangedReceiver, UserHandle.ALL, intentFilter, null, null); intentFilter, null, null); } // Only binds to qualified network service in AP-assisted mode. For legacy mode, /** // qualified networks service is not needed. * Handle message events if (phone.getTransportManager() != null && !phone.getTransportManager().isInLegacyMode()) { * * @param msg The message to handle */ @Override public void handleMessage(Message msg) { switch (msg.what) { case EVENT_BIND_QUALIFIED_NETWORKS_SERVICE: bindQualifiedNetworksService(); bindQualifiedNetworksService(); break; default: loge("Unhandled event " + msg.what); } } } } Loading @@ -234,8 +247,8 @@ public class AccessNetworksManager { if (mIQualifiedNetworksService != null if (mIQualifiedNetworksService != null && mIQualifiedNetworksService.asBinder().isBinderAlive()) { && mIQualifiedNetworksService.asBinder().isBinderAlive()) { if (mBoundQualifiedNetworksServiceComponent.getPackageName().equals(packageName)) { if (packageName.equals(mTargetBindingPackageName)) { if (DBG) log("Service " + packageName + " already bound."); if (DBG) log("Service " + packageName + " already bound or being bound."); return; return; } } Loading @@ -258,7 +271,9 @@ public class AccessNetworksManager { mServiceConnection, mServiceConnection, Context.BIND_AUTO_CREATE)) { Context.BIND_AUTO_CREATE)) { loge("Cannot bind to the qualified networks service."); loge("Cannot bind to the qualified networks service."); return; } } mTargetBindingPackageName = packageName; } catch (Exception e) { } catch (Exception e) { loge("Cannot bind to the qualified networks service. Exception: " + e); loge("Cannot bind to the qualified networks service. Exception: " + e); } } Loading
src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java +12 −1 Original line number Original line Diff line number Diff line Loading @@ -316,11 +316,12 @@ public class TelephonyNetworkFactory extends NetworkFactory { log("onDataHandoverNeeded: apnType=" + ApnSetting.getApnTypeString(apnType) log("onDataHandoverNeeded: apnType=" + ApnSetting.getApnTypeString(apnType) + ", target transport=" + TransportType.toString(targetTransport)); + ", target transport=" + TransportType.toString(targetTransport)); if (mTransportManager.getCurrentTransport(apnType) == targetTransport) { if (mTransportManager.getCurrentTransport(apnType) == targetTransport) { log("apnType " + ApnSetting.getApnTypeString(apnType) + " is already on " log("APN type " + ApnSetting.getApnTypeString(apnType) + " is already on " + TransportType.toString(targetTransport)); + TransportType.toString(targetTransport)); return; return; } } boolean handoverPending = false; for (HashMap.Entry<NetworkRequest, Integer> entry : mNetworkRequests.entrySet()) { for (HashMap.Entry<NetworkRequest, Integer> entry : mNetworkRequests.entrySet()) { NetworkRequest networkRequest = entry.getKey(); NetworkRequest networkRequest = entry.getKey(); int currentTransport = entry.getValue(); int currentTransport = entry.getValue(); Loading @@ -332,10 +333,20 @@ public class TelephonyNetworkFactory extends NetworkFactory { EVENT_DATA_HANDOVER_COMPLETED); EVENT_DATA_HANDOVER_COMPLETED); onCompleteMsg.getData().putParcelable( onCompleteMsg.getData().putParcelable( DcTracker.DATA_COMPLETE_MSG_EXTRA_NETWORK_REQUEST, networkRequest); DcTracker.DATA_COMPLETE_MSG_EXTRA_NETWORK_REQUEST, networkRequest); // TODO: Need to handle the case that the request is there, but there is no actual // data connections established. requestNetworkInternal(networkRequest, DcTracker.REQUEST_TYPE_HANDOVER, requestNetworkInternal(networkRequest, DcTracker.REQUEST_TYPE_HANDOVER, targetTransport, onCompleteMsg); targetTransport, onCompleteMsg); handoverPending = true; } } } } if (!handoverPending) { log("No handover request pending. Update the transport type to " + TransportType.toString(targetTransport) + " for APN type " + ApnSetting.getApnTypeString(apnType)); mTransportManager.setCurrentTransport(apnType, targetTransport); } } } private void onDataHandoverSetupCompleted(NetworkRequest networkRequest, boolean success, private void onDataHandoverSetupCompleted(NetworkRequest networkRequest, boolean success, Loading
src/java/com/android/internal/telephony/dataconnection/TransportManager.java +7 −3 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.telephony.dataconnection; import android.annotation.IntDef; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.NonNull; import android.annotation.Nullable; import android.os.AsyncResult; import android.os.AsyncResult; import android.os.Handler; import android.os.Handler; import android.os.Message; import android.os.Message; Loading Loading @@ -104,7 +105,8 @@ public class TransportManager extends Handler { /** The available transports. Must be one or more of AccessNetworkConstants.TransportType.XXX */ /** The available transports. Must be one or more of AccessNetworkConstants.TransportType.XXX */ private final int[] mAvailableTransports; private final int[] mAvailableTransports; private final AccessNetworksManager mAccessNetworksManager; @Nullable private AccessNetworksManager mAccessNetworksManager; /** /** * Available networks. The key is the APN type, and the value is the available network list in * Available networks. The key is the APN type, and the value is the available network list in Loading Loading @@ -138,7 +140,6 @@ public class TransportManager extends Handler { public TransportManager(Phone phone) { public TransportManager(Phone phone) { mPhone = phone; mPhone = phone; mAccessNetworksManager = new AccessNetworksManager(phone); mCurrentAvailableNetworks = new ConcurrentHashMap<>(); mCurrentAvailableNetworks = new ConcurrentHashMap<>(); mCurrentTransports = new ConcurrentHashMap<>(); mCurrentTransports = new ConcurrentHashMap<>(); mHandoverNeededEventRegistrants = new RegistrantList(); mHandoverNeededEventRegistrants = new RegistrantList(); Loading @@ -148,6 +149,7 @@ public class TransportManager extends Handler { // the IWLAN ones. // the IWLAN ones. mAvailableTransports = new int[]{TransportType.WWAN}; mAvailableTransports = new int[]{TransportType.WWAN}; } else { } else { mAccessNetworksManager = new AccessNetworksManager(phone); mAccessNetworksManager.registerForQualifiedNetworksChanged(this, mAccessNetworksManager.registerForQualifiedNetworksChanged(this, EVENT_QUALIFIED_NETWORKS_CHANGED); EVENT_QUALIFIED_NETWORKS_CHANGED); mAvailableTransports = new int[]{TransportType.WWAN, TransportType.WLAN}; mAvailableTransports = new int[]{TransportType.WWAN, TransportType.WLAN}; Loading Loading @@ -333,7 +335,9 @@ public class TransportManager extends Handler { pw.println("mCurrentTransports=" + mCurrentTransports); pw.println("mCurrentTransports=" + mCurrentTransports); pw.println("isInLegacy=" + isInLegacyMode()); pw.println("isInLegacy=" + isInLegacyMode()); pw.println("IWLAN operation mode=" + mPhone.mCi.getIwlanOperationMode()); pw.println("IWLAN operation mode=" + mPhone.mCi.getIwlanOperationMode()); if (mAccessNetworksManager != null) { mAccessNetworksManager.dump(fd, pw, args); mAccessNetworksManager.dump(fd, pw, args); } pw.decreaseIndent(); pw.decreaseIndent(); pw.flush(); pw.flush(); } } Loading