Loading src/java/com/android/internal/telephony/GsmCdmaPhone.java +0 −1 Original line number Diff line number Diff line Loading @@ -232,7 +232,6 @@ public class GsmCdmaPhone extends Phone { mSST.registerForNetworkAttached(this, EVENT_REGISTERED_TO_NETWORK, null); mDeviceStateMonitor = mTelephonyComponentFactory.makeDeviceStateMonitor(this); mAccessNetworksManager = mTelephonyComponentFactory.makeAccessNetworksManager(this); mSST.registerForVoiceRegStateOrRatChanged(this, EVENT_VRS_OR_RAT_CHANGED, null); logd("GsmCdmaPhone: constructor: sub = " + mPhoneId); Loading src/java/com/android/internal/telephony/Phone.java +4 −2 Original line number Diff line number Diff line Loading @@ -61,7 +61,6 @@ import com.android.ims.ImsCall; import com.android.ims.ImsConfig; import com.android.ims.ImsManager; import com.android.internal.R; import com.android.internal.telephony.dataconnection.AccessNetworksManager; import com.android.internal.telephony.dataconnection.DataConnectionReasons; import com.android.internal.telephony.dataconnection.DcTracker; import com.android.internal.telephony.dataconnection.TransportManager; Loading Loading @@ -283,7 +282,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { private final String mActionAttached; protected DeviceStateMonitor mDeviceStateMonitor; protected TransportManager mTransportManager; protected AccessNetworksManager mAccessNetworksManager; protected int mPhoneId; Loading Loading @@ -3852,6 +3850,10 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { pw.println("++++++++++++++++++++++++++++++++"); } if (mTransportManager != null) { mTransportManager.dump(fd, pw, args); } if (mCi != null && mCi instanceof RIL) { try { ((RIL)mCi).dump(fd, pw, args); Loading src/java/com/android/internal/telephony/TelephonyComponentFactory.java +0 −5 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ import android.telephony.AccessNetworkConstants.TransportType; import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager; import com.android.internal.telephony.cdma.EriManager; import com.android.internal.telephony.dataconnection.AccessNetworksManager; import com.android.internal.telephony.dataconnection.DcTracker; import com.android.internal.telephony.dataconnection.TransportManager; import com.android.internal.telephony.imsphone.ImsExternalCallTracker; Loading Loading @@ -177,10 +176,6 @@ public class TelephonyComponentFactory { return new TransportManager(phone); } public AccessNetworksManager makeAccessNetworksManager(Phone phone) { return new AccessNetworksManager(phone); } public CdmaSubscriptionSourceManager getCdmaSubscriptionSourceManagerInstance(Context context, CommandsInterface ci, Handler h, int what, Object obj) { Loading src/java/com/android/internal/telephony/TransportManager.java +72 −6 Original line number Diff line number Diff line Loading @@ -16,26 +16,38 @@ package com.android.internal.telephony.dataconnection; import android.annotation.IntDef; import android.os.AsyncResult; import android.os.Handler; import android.os.Message; import android.telephony.AccessNetworkConstants.TransportType; import android.telephony.CarrierConfigManager; import android.telephony.Rlog; import android.text.TextUtils; import com.android.internal.telephony.Phone; import com.android.internal.telephony.dataconnection.AccessNetworksManager.QualifiedNetworks; 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.List; /** * This class represents the transport manager which manages available transports and * route requests to correct transport. * This class represents the transport manager which manages available transports (i.e. WWAN or * WLAN)and determine the correct transport for {@link TelephonyNetworkFactory} to handle the data * requests. */ public class TransportManager { public class TransportManager extends Handler { private static final String TAG = TransportManager.class.getSimpleName(); private static final boolean DBG = true; private static final int EVENT_QUALIFIED_NETWORKS_CHANGED = 1; public static final String SYSTEM_PROPERTIES_IWLAN_OPERATION_MODE = "ro.telephony.iwlan_operation_mode"; Loading Loading @@ -70,13 +82,45 @@ public class TransportManager { private final List<Integer> mAvailableTransports = new ArrayList<>(); private final AccessNetworksManager mAccessNetworksManager; public TransportManager(Phone phone) { mPhone = phone; // TODO: get transpot list from AccessNetworkManager. mAccessNetworksManager = new AccessNetworksManager(phone); mAccessNetworksManager.registerForQualifiedNetworksChanged(this, EVENT_QUALIFIED_NETWORKS_CHANGED); // WWAN should be always available. mAvailableTransports.add(TransportType.WWAN); // TODO: Add more logic to check whether we should add WLAN as a transport. For now, if // the device operate in non-legacy mode, then we always add WLAN as a transport. if (!isInLegacyMode()) { mAvailableTransports.add(TransportType.WLAN); } } public List<Integer> getAvailableTransports() { @Override public void handleMessage(Message msg) { switch (msg.what) { case EVENT_QUALIFIED_NETWORKS_CHANGED: AsyncResult ar = (AsyncResult) msg.obj; List<QualifiedNetworks> networks = (List<QualifiedNetworks>) ar.result; updateAvailableNetworks(networks); break; default: loge("Unexpected event " + msg.what); break; } } private synchronized void updateAvailableNetworks(List<QualifiedNetworks> networks) { log("updateAvailableNetworks: " + networks); //TODO: Update available networks and transports. } public synchronized List<Integer> getAvailableTransports() { return new ArrayList<>(mAvailableTransports); } Loading @@ -97,6 +141,28 @@ public class TransportManager { return (mPhone.mCi.getIwlanOperationMode() == IWLAN_OPERATION_MODE_LEGACY); } /** * Dump the state of transport manager * * @param fd File descriptor * @param printwriter Print writer * @param args Arguments */ public void dump(FileDescriptor fd, PrintWriter printwriter, String[] args) { IndentingPrintWriter pw = new IndentingPrintWriter(printwriter, " "); pw.println("TransportManager:"); pw.increaseIndent(); pw.print("mAvailableTransports="); List<String> transportsStrings = new ArrayList<>(); for (int i = 0; i < mAvailableTransports.size(); i++) { transportsStrings.add(TransportType.toString(mAvailableTransports.get(i))); } pw.println("[" + TextUtils.join(",", transportsStrings) + "]"); mAccessNetworksManager.dump(fd, pw, args); pw.decreaseIndent(); pw.flush(); } private void log(String s) { Rlog.d(TAG, s); } Loading src/java/com/android/internal/telephony/dataconnection/AccessNetworksManager.java +38 −5 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.os.PersistableBundle; import android.os.RegistrantList; import android.os.RemoteException; import android.os.UserHandle; import android.telephony.AccessNetworkConstants.AccessNetworkType; import android.telephony.CarrierConfigManager; import android.telephony.Rlog; import android.telephony.data.ApnSetting; Loading @@ -40,7 +41,9 @@ import android.text.TextUtils; import android.util.SparseArray; import com.android.internal.telephony.Phone; import com.android.internal.util.IndentingPrintWriter; import java.io.FileDescriptor; import java.util.ArrayList; import java.util.Arrays; import java.util.List; Loading Loading @@ -106,6 +109,19 @@ public class AccessNetworksManager { this.apnType = apnType; this.qualifiedNetworks = qualifiedNetworks; } @Override public String toString() { List<String> accessNetworkStrings = new ArrayList<>(); for (int network : qualifiedNetworks) { accessNetworkStrings.add(AccessNetworkType.toString(network)); } return "[QualifiedNetworks: apnType=" + ApnSetting.getApnTypeString(apnType) + ", networks=" + TextUtils.join(", ", accessNetworkStrings) + "]"; } } private class AccessNetworksManagerDeathRecipient implements IBinder.DeathRecipient { Loading Loading @@ -287,12 +303,29 @@ public class AccessNetworksManager { } /** * @return True if IWLAN legacy mode is used. No qualified network service there to provide * information for platform to setup data connection. All data connection requests will be * routed to the default (i.e. cellular) data/network service. * Dump the state of transport manager * * @param fd File descriptor * @param pw Print writer * @param args Arguments */ public boolean isInLegacyMode() { return TextUtils.isEmpty(getQualifiedNetworksServicePackageName()); public void dump(FileDescriptor fd, IndentingPrintWriter pw, String[] args) { pw.println("AccessNetworksManager:"); pw.increaseIndent(); pw.println("Available networks:"); 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.decreaseIndent(); pw.decreaseIndent(); } private void log(String s) { Loading Loading
src/java/com/android/internal/telephony/GsmCdmaPhone.java +0 −1 Original line number Diff line number Diff line Loading @@ -232,7 +232,6 @@ public class GsmCdmaPhone extends Phone { mSST.registerForNetworkAttached(this, EVENT_REGISTERED_TO_NETWORK, null); mDeviceStateMonitor = mTelephonyComponentFactory.makeDeviceStateMonitor(this); mAccessNetworksManager = mTelephonyComponentFactory.makeAccessNetworksManager(this); mSST.registerForVoiceRegStateOrRatChanged(this, EVENT_VRS_OR_RAT_CHANGED, null); logd("GsmCdmaPhone: constructor: sub = " + mPhoneId); Loading
src/java/com/android/internal/telephony/Phone.java +4 −2 Original line number Diff line number Diff line Loading @@ -61,7 +61,6 @@ import com.android.ims.ImsCall; import com.android.ims.ImsConfig; import com.android.ims.ImsManager; import com.android.internal.R; import com.android.internal.telephony.dataconnection.AccessNetworksManager; import com.android.internal.telephony.dataconnection.DataConnectionReasons; import com.android.internal.telephony.dataconnection.DcTracker; import com.android.internal.telephony.dataconnection.TransportManager; Loading Loading @@ -283,7 +282,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { private final String mActionAttached; protected DeviceStateMonitor mDeviceStateMonitor; protected TransportManager mTransportManager; protected AccessNetworksManager mAccessNetworksManager; protected int mPhoneId; Loading Loading @@ -3852,6 +3850,10 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { pw.println("++++++++++++++++++++++++++++++++"); } if (mTransportManager != null) { mTransportManager.dump(fd, pw, args); } if (mCi != null && mCi instanceof RIL) { try { ((RIL)mCi).dump(fd, pw, args); Loading
src/java/com/android/internal/telephony/TelephonyComponentFactory.java +0 −5 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ import android.telephony.AccessNetworkConstants.TransportType; import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager; import com.android.internal.telephony.cdma.EriManager; import com.android.internal.telephony.dataconnection.AccessNetworksManager; import com.android.internal.telephony.dataconnection.DcTracker; import com.android.internal.telephony.dataconnection.TransportManager; import com.android.internal.telephony.imsphone.ImsExternalCallTracker; Loading Loading @@ -177,10 +176,6 @@ public class TelephonyComponentFactory { return new TransportManager(phone); } public AccessNetworksManager makeAccessNetworksManager(Phone phone) { return new AccessNetworksManager(phone); } public CdmaSubscriptionSourceManager getCdmaSubscriptionSourceManagerInstance(Context context, CommandsInterface ci, Handler h, int what, Object obj) { Loading
src/java/com/android/internal/telephony/TransportManager.java +72 −6 Original line number Diff line number Diff line Loading @@ -16,26 +16,38 @@ package com.android.internal.telephony.dataconnection; import android.annotation.IntDef; import android.os.AsyncResult; import android.os.Handler; import android.os.Message; import android.telephony.AccessNetworkConstants.TransportType; import android.telephony.CarrierConfigManager; import android.telephony.Rlog; import android.text.TextUtils; import com.android.internal.telephony.Phone; import com.android.internal.telephony.dataconnection.AccessNetworksManager.QualifiedNetworks; 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.List; /** * This class represents the transport manager which manages available transports and * route requests to correct transport. * This class represents the transport manager which manages available transports (i.e. WWAN or * WLAN)and determine the correct transport for {@link TelephonyNetworkFactory} to handle the data * requests. */ public class TransportManager { public class TransportManager extends Handler { private static final String TAG = TransportManager.class.getSimpleName(); private static final boolean DBG = true; private static final int EVENT_QUALIFIED_NETWORKS_CHANGED = 1; public static final String SYSTEM_PROPERTIES_IWLAN_OPERATION_MODE = "ro.telephony.iwlan_operation_mode"; Loading Loading @@ -70,13 +82,45 @@ public class TransportManager { private final List<Integer> mAvailableTransports = new ArrayList<>(); private final AccessNetworksManager mAccessNetworksManager; public TransportManager(Phone phone) { mPhone = phone; // TODO: get transpot list from AccessNetworkManager. mAccessNetworksManager = new AccessNetworksManager(phone); mAccessNetworksManager.registerForQualifiedNetworksChanged(this, EVENT_QUALIFIED_NETWORKS_CHANGED); // WWAN should be always available. mAvailableTransports.add(TransportType.WWAN); // TODO: Add more logic to check whether we should add WLAN as a transport. For now, if // the device operate in non-legacy mode, then we always add WLAN as a transport. if (!isInLegacyMode()) { mAvailableTransports.add(TransportType.WLAN); } } public List<Integer> getAvailableTransports() { @Override public void handleMessage(Message msg) { switch (msg.what) { case EVENT_QUALIFIED_NETWORKS_CHANGED: AsyncResult ar = (AsyncResult) msg.obj; List<QualifiedNetworks> networks = (List<QualifiedNetworks>) ar.result; updateAvailableNetworks(networks); break; default: loge("Unexpected event " + msg.what); break; } } private synchronized void updateAvailableNetworks(List<QualifiedNetworks> networks) { log("updateAvailableNetworks: " + networks); //TODO: Update available networks and transports. } public synchronized List<Integer> getAvailableTransports() { return new ArrayList<>(mAvailableTransports); } Loading @@ -97,6 +141,28 @@ public class TransportManager { return (mPhone.mCi.getIwlanOperationMode() == IWLAN_OPERATION_MODE_LEGACY); } /** * Dump the state of transport manager * * @param fd File descriptor * @param printwriter Print writer * @param args Arguments */ public void dump(FileDescriptor fd, PrintWriter printwriter, String[] args) { IndentingPrintWriter pw = new IndentingPrintWriter(printwriter, " "); pw.println("TransportManager:"); pw.increaseIndent(); pw.print("mAvailableTransports="); List<String> transportsStrings = new ArrayList<>(); for (int i = 0; i < mAvailableTransports.size(); i++) { transportsStrings.add(TransportType.toString(mAvailableTransports.get(i))); } pw.println("[" + TextUtils.join(",", transportsStrings) + "]"); mAccessNetworksManager.dump(fd, pw, args); pw.decreaseIndent(); pw.flush(); } private void log(String s) { Rlog.d(TAG, s); } Loading
src/java/com/android/internal/telephony/dataconnection/AccessNetworksManager.java +38 −5 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import android.os.PersistableBundle; import android.os.RegistrantList; import android.os.RemoteException; import android.os.UserHandle; import android.telephony.AccessNetworkConstants.AccessNetworkType; import android.telephony.CarrierConfigManager; import android.telephony.Rlog; import android.telephony.data.ApnSetting; Loading @@ -40,7 +41,9 @@ import android.text.TextUtils; import android.util.SparseArray; import com.android.internal.telephony.Phone; import com.android.internal.util.IndentingPrintWriter; import java.io.FileDescriptor; import java.util.ArrayList; import java.util.Arrays; import java.util.List; Loading Loading @@ -106,6 +109,19 @@ public class AccessNetworksManager { this.apnType = apnType; this.qualifiedNetworks = qualifiedNetworks; } @Override public String toString() { List<String> accessNetworkStrings = new ArrayList<>(); for (int network : qualifiedNetworks) { accessNetworkStrings.add(AccessNetworkType.toString(network)); } return "[QualifiedNetworks: apnType=" + ApnSetting.getApnTypeString(apnType) + ", networks=" + TextUtils.join(", ", accessNetworkStrings) + "]"; } } private class AccessNetworksManagerDeathRecipient implements IBinder.DeathRecipient { Loading Loading @@ -287,12 +303,29 @@ public class AccessNetworksManager { } /** * @return True if IWLAN legacy mode is used. No qualified network service there to provide * information for platform to setup data connection. All data connection requests will be * routed to the default (i.e. cellular) data/network service. * Dump the state of transport manager * * @param fd File descriptor * @param pw Print writer * @param args Arguments */ public boolean isInLegacyMode() { return TextUtils.isEmpty(getQualifiedNetworksServicePackageName()); public void dump(FileDescriptor fd, IndentingPrintWriter pw, String[] args) { pw.println("AccessNetworksManager:"); pw.increaseIndent(); pw.println("Available networks:"); 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.decreaseIndent(); pw.decreaseIndent(); } private void log(String s) { Loading