From 84b19b48f8dc52c43e07b5dbf2da182dde303301 Mon Sep 17 00:00:00 2001 From: Anil Admal Date: Sat, 6 Apr 2019 17:37:22 -0700 Subject: [PATCH] Change SUPL network request parameters for requestRouteToHostAddress CL aosp/940825 extends support for requestRouteToHostAddress in the ConnectivityService for SUPL network setup requests originating from pre-gnss@2.0 HALs. For this to work, a corresponding change is also needed in the way the SUPL network requests are constructed in the GnssNetworkConnectivityHandler class. Bug: 121222025 Test: Verified on a Pixel device with gnss@1.1 HAL. Change-Id: I420393c74926d9fd83e939f5380fe69abaa486f6 --- .../location/GnssNetworkConnectivityHandler.java | 51 ++++++++++++++-------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/services/core/java/com/android/server/location/GnssNetworkConnectivityHandler.java b/services/core/java/com/android/server/location/GnssNetworkConnectivityHandler.java index ab75b21e41ca..2948aafbb931 100644 --- a/services/core/java/com/android/server/location/GnssNetworkConnectivityHandler.java +++ b/services/core/java/com/android/server/location/GnssNetworkConnectivityHandler.java @@ -199,29 +199,27 @@ class GnssNetworkConnectivityHandler { } /** - * called from native code to update AGPS status + * Called from native code to update AGPS connection status, or to request or release a SUPL + * connection. + * + *

Note: {@code suplIpAddr} parameter is not present from IAGnssCallback.hal@2.0 onwards + * and is set to {@code null}. */ void onReportAGpsStatus(int agpsType, int agpsStatus, byte[] suplIpAddr) { + if (DEBUG) Log.d(TAG, "AGPS_DATA_CONNECTION: " + agpsDataConnStatusAsString(agpsStatus)); switch (agpsStatus) { case GPS_REQUEST_AGPS_DATA_CONN: - if (DEBUG) Log.d(TAG, "GPS_REQUEST_AGPS_DATA_CONN"); runOnHandler(() -> handleRequestSuplConnection(agpsType, suplIpAddr)); break; case GPS_RELEASE_AGPS_DATA_CONN: - if (DEBUG) Log.d(TAG, "GPS_RELEASE_AGPS_DATA_CONN"); runOnHandler(() -> handleReleaseSuplConnection(GPS_RELEASE_AGPS_DATA_CONN)); break; case GPS_AGPS_DATA_CONNECTED: - if (DEBUG) Log.d(TAG, "GPS_AGPS_DATA_CONNECTED"); - break; case GPS_AGPS_DATA_CONN_DONE: - if (DEBUG) Log.d(TAG, "GPS_AGPS_DATA_CONN_DONE"); - break; case GPS_AGPS_DATA_CONN_FAILED: - if (DEBUG) Log.d(TAG, "GPS_AGPS_DATA_CONN_FAILED"); break; default: - if (DEBUG) Log.d(TAG, "Received Unknown AGPS status: " + agpsStatus); + Log.w(TAG, "Received unknown AGPS status: " + agpsStatus); } } @@ -459,11 +457,17 @@ class GnssNetworkConnectivityHandler { } mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPENING; - NetworkRequest.Builder requestBuilder = new NetworkRequest.Builder(); - requestBuilder.addCapability(getNetworkCapability(mAGpsType)); - NetworkRequest request = requestBuilder.build(); + // The NetworkRequest.Builder class is not used to construct the network request because + // the ConnectivityService requires the network request to be constructed in this way + // to extend support for requestRouteToHostAddress() method for pre-gnss@2.0 devices. + NetworkCapabilities networkCapabilities = new NetworkCapabilities(); + networkCapabilities.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); + networkCapabilities.addCapability(getNetworkCapability(mAGpsType)); + NetworkRequest networkRequest = new NetworkRequest(networkCapabilities, + getLegacyDataConnectionType(agpsType), ConnectivityManager.REQUEST_ID_UNSET, + NetworkRequest.Type.REQUEST); mConnMgr.requestNetwork( - request, + networkRequest, mSuplConnectivityCallback, mHandler, SUPL_NETWORK_REQUEST_TIMEOUT_MILLIS); @@ -483,6 +487,19 @@ class GnssNetworkConnectivityHandler { } } + private int getLegacyDataConnectionType(int agpsType) { + switch (agpsType) { + case AGPS_TYPE_C2K: + case AGPS_TYPE_SUPL: + return ConnectivityManager.TYPE_MOBILE_SUPL; + case AGPS_TYPE_EIMS: + return ConnectivityManager.TYPE_MOBILE_EMERGENCY; + case AGPS_TYPE_IMS: + return ConnectivityManager.TYPE_MOBILE_IMS; + default: + throw new IllegalArgumentException("agpsType: " + agpsType); + } + } private void handleReleaseSuplConnection(int agpsDataConnStatus) { if (DEBUG) { String message = String.format( @@ -546,7 +563,7 @@ class GnssNetworkConnectivityHandler { case AGPS_DATA_CONNECTION_OPENING: return "OPENING"; default: - return ""; + return "(" + mAGpsDataConnectionState + ")"; } } @@ -566,7 +583,7 @@ class GnssNetworkConnectivityHandler { case GPS_REQUEST_AGPS_DATA_CONN: return "REQUEST"; default: - return ""; + return "(" + agpsDataConnStatus + ")"; } } @@ -581,7 +598,7 @@ class GnssNetworkConnectivityHandler { case AGPS_TYPE_IMS: return "IMS"; default: - return ""; + return "(" + agpsType + ")"; } } @@ -658,4 +675,4 @@ class GnssNetworkConnectivityHandler { private native void native_update_network_state(boolean connected, int type, boolean roaming, boolean available, String apn, long networkHandle, short capabilities); -} \ No newline at end of file +} -- 2.11.0