Loading src/java/com/android/internal/telephony/dataconnection/AccessNetworksManager.java +33 −18 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.content.IntentFilter; import android.content.ServiceConnection; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.PersistableBundle; import android.os.Registrant; 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 * networks changes. */ public class AccessNetworksManager { public class AccessNetworksManager extends Handler { private static final String TAG = AccessNetworksManager.class.getSimpleName(); private static final boolean DBG = false; Loading @@ -69,6 +70,8 @@ public class AccessNetworksManager { ApnSetting.TYPE_EMERGENCY }; private static final int EVENT_BIND_QUALIFIED_NETWORKS_SERVICE = 1; private final Phone mPhone; private final CarrierConfigManager mCarrierConfigManager; Loading @@ -77,8 +80,7 @@ public class AccessNetworksManager { private AccessNetworksManagerDeathRecipient mDeathRecipient; // The bound qualified networks service component name private ComponentName mBoundQualifiedNetworksServiceComponent; private String mTargetBindingPackageName; private QualifiedNetworksServiceConnection mServiceConnection; Loading @@ -94,10 +96,11 @@ public class AccessNetworksManager { if (CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED.equals(action) && mPhone.getPhoneId() == intent.getIntExtra( CarrierConfigManager.EXTRA_SLOT_INDEX, 0)) { // When carrier config changes, we need to evaluate and see if we should unbind // the existing service and bind to a new one. if (DBG) log("Carrier config changed."); bindQualifiedNetworksService(); // We should wait for carrier config changed event because the target binding // package name can come from the carrier config. Note that we still get this event // even when SIM is absent. 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 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 QualifiedNetworks(@ApnType int apnType, int[] qualifiedNetworks) { this.apnType = apnType; Loading @@ -134,15 +137,14 @@ public class AccessNetworksManager { @Override public void binderDied() { // TODO: try to rebind the service. loge("QualifiedNetworksService(" + mBoundQualifiedNetworksServiceComponent + ") died."); loge("QualifiedNetworksService(" + mTargetBindingPackageName + ") died."); } } private final class QualifiedNetworksServiceConnection implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { if (DBG) log("onServiceConnected"); mBoundQualifiedNetworksServiceComponent = name; if (DBG) log("onServiceConnected " + name); mIQualifiedNetworksService = IQualifiedNetworksService.Stub.asInterface(service); mDeathRecipient = new AccessNetworksManagerDeathRecipient(); Loading @@ -157,8 +159,9 @@ public class AccessNetworksManager { } @Override public void onServiceDisconnected(ComponentName name) { if (DBG) log("onServiceDisconnected"); if (DBG) log("onServiceDisconnected " + name); mIQualifiedNetworksService.asBinder().unlinkToDeath(mDeathRecipient, 0); mTargetBindingPackageName = null; } } Loading Loading @@ -211,11 +214,21 @@ public class AccessNetworksManager { intentFilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); phone.getContext().registerReceiverAsUser(mConfigChangedReceiver, UserHandle.ALL, intentFilter, null, null); } // Only binds to qualified network service in AP-assisted mode. For legacy mode, // qualified networks service is not needed. if (phone.getTransportManager() != null && !phone.getTransportManager().isInLegacyMode()) { /** * Handle message events * * @param msg The message to handle */ @Override public void handleMessage(Message msg) { switch (msg.what) { case EVENT_BIND_QUALIFIED_NETWORKS_SERVICE: bindQualifiedNetworksService(); break; default: loge("Unhandled event " + msg.what); } } Loading @@ -234,8 +247,8 @@ public class AccessNetworksManager { if (mIQualifiedNetworksService != null && mIQualifiedNetworksService.asBinder().isBinderAlive()) { if (mBoundQualifiedNetworksServiceComponent.getPackageName().equals(packageName)) { if (DBG) log("Service " + packageName + " already bound."); if (packageName.equals(mTargetBindingPackageName)) { if (DBG) log("Service " + packageName + " already bound or being bound."); return; } Loading @@ -258,7 +271,9 @@ public class AccessNetworksManager { mServiceConnection, Context.BIND_AUTO_CREATE)) { loge("Cannot bind to the qualified networks service."); return; } mTargetBindingPackageName = packageName; } catch (Exception e) { loge("Cannot bind to the qualified networks service. Exception: " + e); } Loading src/java/com/android/internal/telephony/dataconnection/TransportManager.java +7 −3 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.telephony.dataconnection; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.os.AsyncResult; import android.os.Handler; 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 */ 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 Loading Loading @@ -138,7 +140,6 @@ public class TransportManager extends Handler { public TransportManager(Phone phone) { mPhone = phone; mAccessNetworksManager = new AccessNetworksManager(phone); mCurrentAvailableNetworks = new ConcurrentHashMap<>(); mCurrentTransports = new ConcurrentHashMap<>(); mHandoverNeededEventRegistrants = new RegistrantList(); Loading @@ -148,6 +149,7 @@ public class TransportManager extends Handler { // the IWLAN ones. mAvailableTransports = new int[]{TransportType.WWAN}; } else { mAccessNetworksManager = new AccessNetworksManager(phone); mAccessNetworksManager.registerForQualifiedNetworksChanged(this, EVENT_QUALIFIED_NETWORKS_CHANGED); mAvailableTransports = new int[]{TransportType.WWAN, TransportType.WLAN}; Loading Loading @@ -333,7 +335,9 @@ public class TransportManager extends Handler { pw.println("mCurrentTransports=" + mCurrentTransports); pw.println("isInLegacy=" + isInLegacyMode()); pw.println("IWLAN operation mode=" + mPhone.mCi.getIwlanOperationMode()); if (mAccessNetworksManager != null) { mAccessNetworksManager.dump(fd, pw, args); } pw.decreaseIndent(); pw.flush(); } Loading Loading
src/java/com/android/internal/telephony/dataconnection/AccessNetworksManager.java +33 −18 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.content.IntentFilter; import android.content.ServiceConnection; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.PersistableBundle; import android.os.Registrant; 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 * networks changes. */ public class AccessNetworksManager { public class AccessNetworksManager extends Handler { private static final String TAG = AccessNetworksManager.class.getSimpleName(); private static final boolean DBG = false; Loading @@ -69,6 +70,8 @@ public class AccessNetworksManager { ApnSetting.TYPE_EMERGENCY }; private static final int EVENT_BIND_QUALIFIED_NETWORKS_SERVICE = 1; private final Phone mPhone; private final CarrierConfigManager mCarrierConfigManager; Loading @@ -77,8 +80,7 @@ public class AccessNetworksManager { private AccessNetworksManagerDeathRecipient mDeathRecipient; // The bound qualified networks service component name private ComponentName mBoundQualifiedNetworksServiceComponent; private String mTargetBindingPackageName; private QualifiedNetworksServiceConnection mServiceConnection; Loading @@ -94,10 +96,11 @@ public class AccessNetworksManager { if (CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED.equals(action) && mPhone.getPhoneId() == intent.getIntExtra( CarrierConfigManager.EXTRA_SLOT_INDEX, 0)) { // When carrier config changes, we need to evaluate and see if we should unbind // the existing service and bind to a new one. if (DBG) log("Carrier config changed."); bindQualifiedNetworksService(); // We should wait for carrier config changed event because the target binding // package name can come from the carrier config. Note that we still get this event // even when SIM is absent. 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 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 QualifiedNetworks(@ApnType int apnType, int[] qualifiedNetworks) { this.apnType = apnType; Loading @@ -134,15 +137,14 @@ public class AccessNetworksManager { @Override public void binderDied() { // TODO: try to rebind the service. loge("QualifiedNetworksService(" + mBoundQualifiedNetworksServiceComponent + ") died."); loge("QualifiedNetworksService(" + mTargetBindingPackageName + ") died."); } } private final class QualifiedNetworksServiceConnection implements ServiceConnection { @Override public void onServiceConnected(ComponentName name, IBinder service) { if (DBG) log("onServiceConnected"); mBoundQualifiedNetworksServiceComponent = name; if (DBG) log("onServiceConnected " + name); mIQualifiedNetworksService = IQualifiedNetworksService.Stub.asInterface(service); mDeathRecipient = new AccessNetworksManagerDeathRecipient(); Loading @@ -157,8 +159,9 @@ public class AccessNetworksManager { } @Override public void onServiceDisconnected(ComponentName name) { if (DBG) log("onServiceDisconnected"); if (DBG) log("onServiceDisconnected " + name); mIQualifiedNetworksService.asBinder().unlinkToDeath(mDeathRecipient, 0); mTargetBindingPackageName = null; } } Loading Loading @@ -211,11 +214,21 @@ public class AccessNetworksManager { intentFilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); phone.getContext().registerReceiverAsUser(mConfigChangedReceiver, UserHandle.ALL, intentFilter, null, null); } // Only binds to qualified network service in AP-assisted mode. For legacy mode, // qualified networks service is not needed. if (phone.getTransportManager() != null && !phone.getTransportManager().isInLegacyMode()) { /** * Handle message events * * @param msg The message to handle */ @Override public void handleMessage(Message msg) { switch (msg.what) { case EVENT_BIND_QUALIFIED_NETWORKS_SERVICE: bindQualifiedNetworksService(); break; default: loge("Unhandled event " + msg.what); } } Loading @@ -234,8 +247,8 @@ public class AccessNetworksManager { if (mIQualifiedNetworksService != null && mIQualifiedNetworksService.asBinder().isBinderAlive()) { if (mBoundQualifiedNetworksServiceComponent.getPackageName().equals(packageName)) { if (DBG) log("Service " + packageName + " already bound."); if (packageName.equals(mTargetBindingPackageName)) { if (DBG) log("Service " + packageName + " already bound or being bound."); return; } Loading @@ -258,7 +271,9 @@ public class AccessNetworksManager { mServiceConnection, Context.BIND_AUTO_CREATE)) { loge("Cannot bind to the qualified networks service."); return; } mTargetBindingPackageName = packageName; } catch (Exception e) { loge("Cannot bind to the qualified networks service. Exception: " + e); } Loading
src/java/com/android/internal/telephony/dataconnection/TransportManager.java +7 −3 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.telephony.dataconnection; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.os.AsyncResult; import android.os.Handler; 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 */ 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 Loading Loading @@ -138,7 +140,6 @@ public class TransportManager extends Handler { public TransportManager(Phone phone) { mPhone = phone; mAccessNetworksManager = new AccessNetworksManager(phone); mCurrentAvailableNetworks = new ConcurrentHashMap<>(); mCurrentTransports = new ConcurrentHashMap<>(); mHandoverNeededEventRegistrants = new RegistrantList(); Loading @@ -148,6 +149,7 @@ public class TransportManager extends Handler { // the IWLAN ones. mAvailableTransports = new int[]{TransportType.WWAN}; } else { mAccessNetworksManager = new AccessNetworksManager(phone); mAccessNetworksManager.registerForQualifiedNetworksChanged(this, EVENT_QUALIFIED_NETWORKS_CHANGED); mAvailableTransports = new int[]{TransportType.WWAN, TransportType.WLAN}; Loading Loading @@ -333,7 +335,9 @@ public class TransportManager extends Handler { pw.println("mCurrentTransports=" + mCurrentTransports); pw.println("isInLegacy=" + isInLegacyMode()); pw.println("IWLAN operation mode=" + mPhone.mCi.getIwlanOperationMode()); if (mAccessNetworksManager != null) { mAccessNetworksManager.dump(fd, pw, args); } pw.decreaseIndent(); pw.flush(); } Loading