Loading src/java/com/android/internal/telephony/data/AccessNetworksManager.java +34 −0 Original line number Diff line number Diff line Loading @@ -26,9 +26,11 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.pm.PackageManager; import android.os.AsyncResult; import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.PersistableBundle; import android.os.Registrant; import android.os.RegistrantList; Loading Loading @@ -77,6 +79,9 @@ import java.util.stream.Collectors; public class AccessNetworksManager extends Handler { private static final boolean DBG = false; /** Event to guide a transport type for initial data connection of emergency data network. */ private static final int EVENT_GUIDE_TRANSPORT_TYPE_FOR_EMERGENCY = 1; /** * The counters to detect frequent QNS attempt to change preferred network transport by ApnType. */ Loading Loading @@ -176,6 +181,19 @@ public class AccessNetworksManager extends Handler { } } @Override public void handleMessage(@NonNull Message msg) { switch (msg.what) { case EVENT_GUIDE_TRANSPORT_TYPE_FOR_EMERGENCY: AsyncResult ar = (AsyncResult) msg.obj; int transport = (int) ar.result; onEmergencyDataNetworkPreferredTransportChanged(transport); break; default: loge("Unexpected event " + msg.what); } } private class AccessNetworksManagerDeathRecipient implements IBinder.DeathRecipient { @Override public void binderDied() { Loading Loading @@ -298,6 +316,20 @@ public class AccessNetworksManager extends Handler { } } private void onEmergencyDataNetworkPreferredTransportChanged( @AccessNetworkConstants.TransportType int transportType) { try { logl("onEmergencyDataNetworkPreferredTransportChanged: " + AccessNetworkConstants.transportTypeToString(transportType)); if (mIQualifiedNetworksService != null) { mIQualifiedNetworksService.reportEmergencyDataNetworkPreferredTransportChanged( mPhone.getPhoneId(), transportType); } } catch (Exception ex) { loge("onEmergencyDataNetworkPreferredTransportChanged: ", ex); } } /** * Access networks manager callback. This should be only used by {@link DataNetworkController}. */ Loading Loading @@ -372,6 +404,8 @@ public class AccessNetworksManager extends Handler { mApnTypeToQnsChangeNetworkCounter.clear(); } }); mPhone.registerForEmergencyDomainSelected( this, EVENT_GUIDE_TRANSPORT_TYPE_FOR_EMERGENCY, null); }); } Loading tests/telephonytests/src/com/android/internal/telephony/data/AccessNetworksManagerTest.java +28 −0 Original line number Diff line number Diff line Loading @@ -31,8 +31,10 @@ import android.content.ComponentName; import android.content.IntentFilter; import android.content.pm.ServiceInfo; import android.net.NetworkCapabilities; import android.os.AsyncResult; import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.telephony.AccessNetworkConstants; import android.telephony.AccessNetworkConstants.AccessNetworkType; import android.telephony.NetworkService; Loading Loading @@ -148,6 +150,32 @@ public class AccessNetworksManagerTest extends TelephonyTest { assertThat(mAccessNetworksManager.isAnyApnOnIwlan()).isTrue(); } @Test public void testGuideTransportTypeForEmergencyDataNetwork() throws Exception { doAnswer(invocation -> { int accessNetwork = AccessNetworkType.UNKNOWN; if (invocation.getArguments()[1].equals(AccessNetworkConstants.TRANSPORT_TYPE_WLAN)) { accessNetwork = AccessNetworkType.IWLAN; } else if (invocation.getArguments()[1] .equals(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)) { accessNetwork = AccessNetworkType.EUTRAN; } mQnsCallback.onQualifiedNetworkTypesChanged(ApnSetting.TYPE_EMERGENCY, new int[]{accessNetwork}); return null; }).when(mMockedQns).reportEmergencyDataNetworkPreferredTransportChanged(anyInt(), anyInt()); AsyncResult asyncResult = new AsyncResult(null, AccessNetworkConstants.TRANSPORT_TYPE_WLAN, null); Message msg = this.mAccessNetworksManager .obtainMessage(1 /* EVENT_GUIDE_TRANSPORT_TYPE_FOR_EMERGENCY */, asyncResult); mAccessNetworksManager.sendMessage(msg); processAllMessages(); assertThat(mAccessNetworksManager.getPreferredTransport(ApnSetting.TYPE_EMERGENCY)) .isEqualTo(AccessNetworkConstants.TRANSPORT_TYPE_WLAN); } @Test public void testEmptyNetworkTypes() throws Exception { testQualifiedNetworkTypesChanged(); Loading Loading
src/java/com/android/internal/telephony/data/AccessNetworksManager.java +34 −0 Original line number Diff line number Diff line Loading @@ -26,9 +26,11 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.pm.PackageManager; import android.os.AsyncResult; import android.os.Handler; import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.PersistableBundle; import android.os.Registrant; import android.os.RegistrantList; Loading Loading @@ -77,6 +79,9 @@ import java.util.stream.Collectors; public class AccessNetworksManager extends Handler { private static final boolean DBG = false; /** Event to guide a transport type for initial data connection of emergency data network. */ private static final int EVENT_GUIDE_TRANSPORT_TYPE_FOR_EMERGENCY = 1; /** * The counters to detect frequent QNS attempt to change preferred network transport by ApnType. */ Loading Loading @@ -176,6 +181,19 @@ public class AccessNetworksManager extends Handler { } } @Override public void handleMessage(@NonNull Message msg) { switch (msg.what) { case EVENT_GUIDE_TRANSPORT_TYPE_FOR_EMERGENCY: AsyncResult ar = (AsyncResult) msg.obj; int transport = (int) ar.result; onEmergencyDataNetworkPreferredTransportChanged(transport); break; default: loge("Unexpected event " + msg.what); } } private class AccessNetworksManagerDeathRecipient implements IBinder.DeathRecipient { @Override public void binderDied() { Loading Loading @@ -298,6 +316,20 @@ public class AccessNetworksManager extends Handler { } } private void onEmergencyDataNetworkPreferredTransportChanged( @AccessNetworkConstants.TransportType int transportType) { try { logl("onEmergencyDataNetworkPreferredTransportChanged: " + AccessNetworkConstants.transportTypeToString(transportType)); if (mIQualifiedNetworksService != null) { mIQualifiedNetworksService.reportEmergencyDataNetworkPreferredTransportChanged( mPhone.getPhoneId(), transportType); } } catch (Exception ex) { loge("onEmergencyDataNetworkPreferredTransportChanged: ", ex); } } /** * Access networks manager callback. This should be only used by {@link DataNetworkController}. */ Loading Loading @@ -372,6 +404,8 @@ public class AccessNetworksManager extends Handler { mApnTypeToQnsChangeNetworkCounter.clear(); } }); mPhone.registerForEmergencyDomainSelected( this, EVENT_GUIDE_TRANSPORT_TYPE_FOR_EMERGENCY, null); }); } Loading
tests/telephonytests/src/com/android/internal/telephony/data/AccessNetworksManagerTest.java +28 −0 Original line number Diff line number Diff line Loading @@ -31,8 +31,10 @@ import android.content.ComponentName; import android.content.IntentFilter; import android.content.pm.ServiceInfo; import android.net.NetworkCapabilities; import android.os.AsyncResult; import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.telephony.AccessNetworkConstants; import android.telephony.AccessNetworkConstants.AccessNetworkType; import android.telephony.NetworkService; Loading Loading @@ -148,6 +150,32 @@ public class AccessNetworksManagerTest extends TelephonyTest { assertThat(mAccessNetworksManager.isAnyApnOnIwlan()).isTrue(); } @Test public void testGuideTransportTypeForEmergencyDataNetwork() throws Exception { doAnswer(invocation -> { int accessNetwork = AccessNetworkType.UNKNOWN; if (invocation.getArguments()[1].equals(AccessNetworkConstants.TRANSPORT_TYPE_WLAN)) { accessNetwork = AccessNetworkType.IWLAN; } else if (invocation.getArguments()[1] .equals(AccessNetworkConstants.TRANSPORT_TYPE_WWAN)) { accessNetwork = AccessNetworkType.EUTRAN; } mQnsCallback.onQualifiedNetworkTypesChanged(ApnSetting.TYPE_EMERGENCY, new int[]{accessNetwork}); return null; }).when(mMockedQns).reportEmergencyDataNetworkPreferredTransportChanged(anyInt(), anyInt()); AsyncResult asyncResult = new AsyncResult(null, AccessNetworkConstants.TRANSPORT_TYPE_WLAN, null); Message msg = this.mAccessNetworksManager .obtainMessage(1 /* EVENT_GUIDE_TRANSPORT_TYPE_FOR_EMERGENCY */, asyncResult); mAccessNetworksManager.sendMessage(msg); processAllMessages(); assertThat(mAccessNetworksManager.getPreferredTransport(ApnSetting.TYPE_EMERGENCY)) .isEqualTo(AccessNetworkConstants.TRANSPORT_TYPE_WLAN); } @Test public void testEmptyNetworkTypes() throws Exception { testQualifiedNetworkTypesChanged(); Loading