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
This commit is contained in:
Anil Admal
2019-04-06 17:37:22 -07:00
parent 1ccf640d56
commit 84b19b48f8

View File

@@ -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.
*
* <p>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 "<Unknown>";
return "<Unknown>(" + mAGpsDataConnectionState + ")";
}
}
@@ -566,7 +583,7 @@ class GnssNetworkConnectivityHandler {
case GPS_REQUEST_AGPS_DATA_CONN:
return "REQUEST";
default:
return "<Unknown>";
return "<Unknown>(" + agpsDataConnStatus + ")";
}
}
@@ -581,7 +598,7 @@ class GnssNetworkConnectivityHandler {
case AGPS_TYPE_IMS:
return "IMS";
default:
return "<Unknown>";
return "<Unknown>(" + 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);
}
}