Loading services/core/java/com/android/server/location/GnssLocationProvider.java +8 −9 Original line number Original line Diff line number Diff line Loading @@ -177,10 +177,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private static final int AGPS_SUPL_MODE_MSA = 0x02; private static final int AGPS_SUPL_MODE_MSA = 0x02; private static final int AGPS_SUPL_MODE_MSB = 0x01; private static final int AGPS_SUPL_MODE_MSB = 0x01; // these need to match AGnssType enum in IAGnssCallback.hal private static final int AGPS_TYPE_SUPL = 1; private static final int AGPS_TYPE_C2K = 2; // Handler messages // Handler messages private static final int CHECK_LOCATION = 1; private static final int CHECK_LOCATION = 1; private static final int ENABLE = 2; private static final int ENABLE = 2; Loading Loading @@ -973,7 +969,8 @@ public class GnssLocationProvider extends AbstractLocationProvider implements if (mSuplServerHost != null if (mSuplServerHost != null && mSuplServerPort > TCP_MIN_PORT && mSuplServerPort > TCP_MIN_PORT && mSuplServerPort <= TCP_MAX_PORT) { && mSuplServerPort <= TCP_MAX_PORT) { native_set_agps_server(AGPS_TYPE_SUPL, mSuplServerHost, mSuplServerPort); native_set_agps_server(GnssNetworkConnectivityHandler.AGPS_TYPE_SUPL, mSuplServerHost, mSuplServerPort); } } } } Loading Loading @@ -1025,10 +1022,12 @@ public class GnssLocationProvider extends AbstractLocationProvider implements // TODO: remove the following native calls if we can make sure they are redundant. // TODO: remove the following native calls if we can make sure they are redundant. if (mSuplServerHost != null) { if (mSuplServerHost != null) { native_set_agps_server(AGPS_TYPE_SUPL, mSuplServerHost, mSuplServerPort); native_set_agps_server(GnssNetworkConnectivityHandler.AGPS_TYPE_SUPL, mSuplServerHost, mSuplServerPort); } } if (mC2KServerHost != null) { if (mC2KServerHost != null) { native_set_agps_server(AGPS_TYPE_C2K, mC2KServerHost, mC2KServerPort); native_set_agps_server(GnssNetworkConnectivityHandler.AGPS_TYPE_C2K, mC2KServerHost, mC2KServerPort); } } mGnssMeasurementsProvider.onGpsEnabledChanged(); mGnssMeasurementsProvider.onGpsEnabledChanged(); Loading Loading @@ -1575,8 +1574,8 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } } @NativeEntryPoint @NativeEntryPoint private void reportAGpsStatus(int type, int status, byte[] ipaddr) { private void reportAGpsStatus(int agpsType, int agpsStatus, byte[] suplIpAddr) { mNetworkConnectivityHandler.onReportAGpsStatus(type, status, ipaddr); mNetworkConnectivityHandler.onReportAGpsStatus(agpsType, agpsStatus, suplIpAddr); } } @NativeEntryPoint @NativeEntryPoint Loading services/core/java/com/android/server/location/GnssNetworkConnectivityHandler.java +72 −31 Original line number Original line Diff line number Diff line Loading @@ -68,6 +68,12 @@ class GnssNetworkConnectivityHandler { private static final int AGNSS_NET_CAPABILITY_NOT_METERED = 1 << 0; private static final int AGNSS_NET_CAPABILITY_NOT_METERED = 1 << 0; private static final int AGNSS_NET_CAPABILITY_NOT_ROAMING = 1 << 1; private static final int AGNSS_NET_CAPABILITY_NOT_ROAMING = 1 << 1; // these need to match AGnssType enum in IAGnssCallback.hal public static final int AGPS_TYPE_SUPL = 1; public static final int AGPS_TYPE_C2K = 2; private static final int AGPS_TYPE_EIMS = 3; private static final int AGPS_TYPE_IMS = 4; // Default time limit in milliseconds for the ConnectivityManager to find a suitable // Default time limit in milliseconds for the ConnectivityManager to find a suitable // network with SUPL connectivity or report an error. // network with SUPL connectivity or report an error. private static final int SUPL_NETWORK_REQUEST_TIMEOUT_MILLIS = 10 * 1000; private static final int SUPL_NETWORK_REQUEST_TIMEOUT_MILLIS = 10 * 1000; Loading @@ -86,6 +92,7 @@ class GnssNetworkConnectivityHandler { private int mAGpsDataConnectionState; private int mAGpsDataConnectionState; private InetAddress mAGpsDataConnectionIpAddr; private InetAddress mAGpsDataConnectionIpAddr; private int mAGpsType; private final Context mContext; private final Context mContext; Loading Loading @@ -198,21 +205,11 @@ class GnssNetworkConnectivityHandler { /** /** * called from native code to update AGPS status * called from native code to update AGPS status */ */ public void onReportAGpsStatus(int type, int status, byte[] ipaddr) { public void onReportAGpsStatus(int agpsType, int agpsStatus, byte[] suplIpAddr) { switch (status) { switch (agpsStatus) { case GPS_REQUEST_AGPS_DATA_CONN: case GPS_REQUEST_AGPS_DATA_CONN: if (DEBUG) Log.d(TAG, "GPS_REQUEST_AGPS_DATA_CONN"); if (DEBUG) Log.d(TAG, "GPS_REQUEST_AGPS_DATA_CONN"); Log.v(TAG, "Received SUPL IP addr[]: " + Arrays.toString(ipaddr)); requestSuplConnection(agpsType, suplIpAddr); InetAddress connectionIpAddress = null; if (ipaddr != null) { try { connectionIpAddress = InetAddress.getByAddress(ipaddr); if (DEBUG) Log.d(TAG, "IP address converted to: " + connectionIpAddress); } catch (UnknownHostException e) { Log.e(TAG, "Bad IP Address: " + ipaddr, e); } } requestSuplConnection(connectionIpAddress); break; break; case GPS_RELEASE_AGPS_DATA_CONN: case GPS_RELEASE_AGPS_DATA_CONN: if (DEBUG) Log.d(TAG, "GPS_RELEASE_AGPS_DATA_CONN"); if (DEBUG) Log.d(TAG, "GPS_RELEASE_AGPS_DATA_CONN"); Loading @@ -228,7 +225,7 @@ class GnssNetworkConnectivityHandler { if (DEBUG) Log.d(TAG, "GPS_AGPS_DATA_CONN_FAILED"); if (DEBUG) Log.d(TAG, "GPS_AGPS_DATA_CONN_FAILED"); break; break; default: default: if (DEBUG) Log.d(TAG, "Received Unknown AGPS status: " + status); if (DEBUG) Log.d(TAG, "Received Unknown AGPS status: " + agpsStatus); } } } } Loading Loading @@ -308,8 +305,8 @@ class GnssNetworkConnectivityHandler { }; }; } } private void requestSuplConnection(InetAddress inetAddress) { private void requestSuplConnection(int agpsType, byte[] suplIpAddr) { postEvent(() -> handleRequestSuplConnection(inetAddress)); postEvent(() -> handleRequestSuplConnection(agpsType, suplIpAddr)); } } private void suplConnectionAvailable(Network network) { private void suplConnectionAvailable(Network network) { Loading Loading @@ -435,8 +432,15 @@ class GnssNetworkConnectivityHandler { // exception in the following call to native_agps_data_conn_open // exception in the following call to native_agps_data_conn_open apn = "dummy-apn"; apn = "dummy-apn"; } } int apnIpType = getApnIpType(apn); // Setting route to host is needed for GNSS HAL implementations earlier than // @2.0::IAgnssCallback. The HAL @2.0::IAgnssCallback.agnssStatusCb() method does // not require setting route to SUPL host and hence does not provide an IP address. if (mAGpsDataConnectionIpAddr != null) { setRouting(); setRouting(); } int apnIpType = getApnIpType(apn); if (DEBUG) { if (DEBUG) { String message = String.format( String message = String.format( "native_agps_data_conn_open: mAgpsApn=%s, mApnIpType=%s", "native_agps_data_conn_open: mAgpsApn=%s, mApnIpType=%s", Loading @@ -444,29 +448,40 @@ class GnssNetworkConnectivityHandler { apnIpType); apnIpType); Log.d(TAG, message); Log.d(TAG, message); } } native_agps_data_conn_open(apn, apnIpType); native_agps_data_conn_open(network.getNetworkHandle(), apn, apnIpType); mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPEN; mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPEN; } } } } private void handleRequestSuplConnection(InetAddress address) { private void handleRequestSuplConnection(int agpsType, byte[] suplIpAddr) { mAGpsDataConnectionIpAddr = null; mAGpsType = agpsType; if (suplIpAddr != null) { if (VERBOSE) Log.v(TAG, "Received SUPL IP addr[]: " + Arrays.toString(suplIpAddr)); try { mAGpsDataConnectionIpAddr = InetAddress.getByAddress(suplIpAddr); if (DEBUG) Log.d(TAG, "IP address converted to: " + mAGpsDataConnectionIpAddr); } catch (UnknownHostException e) { Log.e(TAG, "Bad IP Address: " + suplIpAddr, e); } } if (DEBUG) { if (DEBUG) { String message = String.format( String message = String.format( "requestSuplConnection, state=%s, address=%s", "requestSuplConnection, state=%s, agpsType=%s, address=%s", agpsDataConnStateAsString(), agpsDataConnStateAsString(), address); agpsTypeAsString(agpsType), mAGpsDataConnectionIpAddr); Log.d(TAG, message); Log.d(TAG, message); } } if (mAGpsDataConnectionState != AGPS_DATA_CONNECTION_CLOSED) { if (mAGpsDataConnectionState != AGPS_DATA_CONNECTION_CLOSED) { return; return; } } mAGpsDataConnectionIpAddr = address; mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPENING; mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPENING; NetworkRequest.Builder requestBuilder = new NetworkRequest.Builder(); NetworkRequest.Builder requestBuilder = new NetworkRequest.Builder(); requestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); requestBuilder.addCapability(getNetworkCapability(mAGpsType)); requestBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_SUPL); NetworkRequest request = requestBuilder.build(); NetworkRequest request = requestBuilder.build(); mConnMgr.requestNetwork( mConnMgr.requestNetwork( request, request, Loading @@ -474,6 +489,20 @@ class GnssNetworkConnectivityHandler { SUPL_NETWORK_REQUEST_TIMEOUT_MILLIS); SUPL_NETWORK_REQUEST_TIMEOUT_MILLIS); } } private int getNetworkCapability(int agpsType) { switch (agpsType) { case AGPS_TYPE_C2K: case AGPS_TYPE_SUPL: return NetworkCapabilities.NET_CAPABILITY_SUPL; case AGPS_TYPE_EIMS: return NetworkCapabilities.NET_CAPABILITY_EIMS; case AGPS_TYPE_IMS: return NetworkCapabilities.NET_CAPABILITY_IMS; default: throw new IllegalArgumentException("agpsType: " + agpsType); } } private void handleReleaseSuplConnection(int agpsDataConnStatus) { private void handleReleaseSuplConnection(int agpsDataConnStatus) { if (DEBUG) { if (DEBUG) { String message = String.format( String message = String.format( Loading @@ -486,8 +515,8 @@ class GnssNetworkConnectivityHandler { if (mAGpsDataConnectionState == AGPS_DATA_CONNECTION_CLOSED) { if (mAGpsDataConnectionState == AGPS_DATA_CONNECTION_CLOSED) { return; return; } } mAGpsDataConnectionState = AGPS_DATA_CONNECTION_CLOSED; mAGpsDataConnectionState = AGPS_DATA_CONNECTION_CLOSED; mConnMgr.unregisterNetworkCallback(mSuplConnectivityCallback); mConnMgr.unregisterNetworkCallback(mSuplConnectivityCallback); switch (agpsDataConnStatus) { switch (agpsDataConnStatus) { case GPS_AGPS_DATA_CONN_FAILED: case GPS_AGPS_DATA_CONN_FAILED: Loading @@ -501,12 +530,9 @@ class GnssNetworkConnectivityHandler { } } } } // TODO(25876485): Delete this method when all devices upgrade to HAL @2.0::IAGnssCallback // interface which does not require setting route to host. private void setRouting() { private void setRouting() { if (mAGpsDataConnectionIpAddr == null) { return; } // TODO(25876485): replace the use of this deprecated API boolean result = mConnMgr.requestRouteToHostAddress( boolean result = mConnMgr.requestRouteToHostAddress( ConnectivityManager.TYPE_MOBILE_SUPL, ConnectivityManager.TYPE_MOBILE_SUPL, mAGpsDataConnectionIpAddr); mAGpsDataConnectionIpAddr); Loading Loading @@ -564,6 +590,21 @@ class GnssNetworkConnectivityHandler { } } } } private String agpsTypeAsString(int agpsType) { switch (agpsType) { case AGPS_TYPE_SUPL: return "SUPL"; case AGPS_TYPE_C2K: return "C2K"; case AGPS_TYPE_EIMS: return "EIMS"; case AGPS_TYPE_IMS: return "IMS"; default: return "<Unknown>"; } } private int getApnIpType(String apn) { private int getApnIpType(String apn) { ensureInHandlerThread(); ensureInHandlerThread(); if (apn == null) { if (apn == null) { Loading Loading @@ -614,7 +655,7 @@ class GnssNetworkConnectivityHandler { } } // AGPS support // AGPS support private native void native_agps_data_conn_open(String apn, int apnIpType); private native void native_agps_data_conn_open(long networkHandle, String apn, int apnIpType); private native void native_agps_data_conn_closed(); private native void native_agps_data_conn_closed(); Loading services/core/jni/com_android_server_location_GnssLocationProvider.cpp +185 −72 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
services/core/java/com/android/server/location/GnssLocationProvider.java +8 −9 Original line number Original line Diff line number Diff line Loading @@ -177,10 +177,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private static final int AGPS_SUPL_MODE_MSA = 0x02; private static final int AGPS_SUPL_MODE_MSA = 0x02; private static final int AGPS_SUPL_MODE_MSB = 0x01; private static final int AGPS_SUPL_MODE_MSB = 0x01; // these need to match AGnssType enum in IAGnssCallback.hal private static final int AGPS_TYPE_SUPL = 1; private static final int AGPS_TYPE_C2K = 2; // Handler messages // Handler messages private static final int CHECK_LOCATION = 1; private static final int CHECK_LOCATION = 1; private static final int ENABLE = 2; private static final int ENABLE = 2; Loading Loading @@ -973,7 +969,8 @@ public class GnssLocationProvider extends AbstractLocationProvider implements if (mSuplServerHost != null if (mSuplServerHost != null && mSuplServerPort > TCP_MIN_PORT && mSuplServerPort > TCP_MIN_PORT && mSuplServerPort <= TCP_MAX_PORT) { && mSuplServerPort <= TCP_MAX_PORT) { native_set_agps_server(AGPS_TYPE_SUPL, mSuplServerHost, mSuplServerPort); native_set_agps_server(GnssNetworkConnectivityHandler.AGPS_TYPE_SUPL, mSuplServerHost, mSuplServerPort); } } } } Loading Loading @@ -1025,10 +1022,12 @@ public class GnssLocationProvider extends AbstractLocationProvider implements // TODO: remove the following native calls if we can make sure they are redundant. // TODO: remove the following native calls if we can make sure they are redundant. if (mSuplServerHost != null) { if (mSuplServerHost != null) { native_set_agps_server(AGPS_TYPE_SUPL, mSuplServerHost, mSuplServerPort); native_set_agps_server(GnssNetworkConnectivityHandler.AGPS_TYPE_SUPL, mSuplServerHost, mSuplServerPort); } } if (mC2KServerHost != null) { if (mC2KServerHost != null) { native_set_agps_server(AGPS_TYPE_C2K, mC2KServerHost, mC2KServerPort); native_set_agps_server(GnssNetworkConnectivityHandler.AGPS_TYPE_C2K, mC2KServerHost, mC2KServerPort); } } mGnssMeasurementsProvider.onGpsEnabledChanged(); mGnssMeasurementsProvider.onGpsEnabledChanged(); Loading Loading @@ -1575,8 +1574,8 @@ public class GnssLocationProvider extends AbstractLocationProvider implements } } @NativeEntryPoint @NativeEntryPoint private void reportAGpsStatus(int type, int status, byte[] ipaddr) { private void reportAGpsStatus(int agpsType, int agpsStatus, byte[] suplIpAddr) { mNetworkConnectivityHandler.onReportAGpsStatus(type, status, ipaddr); mNetworkConnectivityHandler.onReportAGpsStatus(agpsType, agpsStatus, suplIpAddr); } } @NativeEntryPoint @NativeEntryPoint Loading
services/core/java/com/android/server/location/GnssNetworkConnectivityHandler.java +72 −31 Original line number Original line Diff line number Diff line Loading @@ -68,6 +68,12 @@ class GnssNetworkConnectivityHandler { private static final int AGNSS_NET_CAPABILITY_NOT_METERED = 1 << 0; private static final int AGNSS_NET_CAPABILITY_NOT_METERED = 1 << 0; private static final int AGNSS_NET_CAPABILITY_NOT_ROAMING = 1 << 1; private static final int AGNSS_NET_CAPABILITY_NOT_ROAMING = 1 << 1; // these need to match AGnssType enum in IAGnssCallback.hal public static final int AGPS_TYPE_SUPL = 1; public static final int AGPS_TYPE_C2K = 2; private static final int AGPS_TYPE_EIMS = 3; private static final int AGPS_TYPE_IMS = 4; // Default time limit in milliseconds for the ConnectivityManager to find a suitable // Default time limit in milliseconds for the ConnectivityManager to find a suitable // network with SUPL connectivity or report an error. // network with SUPL connectivity or report an error. private static final int SUPL_NETWORK_REQUEST_TIMEOUT_MILLIS = 10 * 1000; private static final int SUPL_NETWORK_REQUEST_TIMEOUT_MILLIS = 10 * 1000; Loading @@ -86,6 +92,7 @@ class GnssNetworkConnectivityHandler { private int mAGpsDataConnectionState; private int mAGpsDataConnectionState; private InetAddress mAGpsDataConnectionIpAddr; private InetAddress mAGpsDataConnectionIpAddr; private int mAGpsType; private final Context mContext; private final Context mContext; Loading Loading @@ -198,21 +205,11 @@ class GnssNetworkConnectivityHandler { /** /** * called from native code to update AGPS status * called from native code to update AGPS status */ */ public void onReportAGpsStatus(int type, int status, byte[] ipaddr) { public void onReportAGpsStatus(int agpsType, int agpsStatus, byte[] suplIpAddr) { switch (status) { switch (agpsStatus) { case GPS_REQUEST_AGPS_DATA_CONN: case GPS_REQUEST_AGPS_DATA_CONN: if (DEBUG) Log.d(TAG, "GPS_REQUEST_AGPS_DATA_CONN"); if (DEBUG) Log.d(TAG, "GPS_REQUEST_AGPS_DATA_CONN"); Log.v(TAG, "Received SUPL IP addr[]: " + Arrays.toString(ipaddr)); requestSuplConnection(agpsType, suplIpAddr); InetAddress connectionIpAddress = null; if (ipaddr != null) { try { connectionIpAddress = InetAddress.getByAddress(ipaddr); if (DEBUG) Log.d(TAG, "IP address converted to: " + connectionIpAddress); } catch (UnknownHostException e) { Log.e(TAG, "Bad IP Address: " + ipaddr, e); } } requestSuplConnection(connectionIpAddress); break; break; case GPS_RELEASE_AGPS_DATA_CONN: case GPS_RELEASE_AGPS_DATA_CONN: if (DEBUG) Log.d(TAG, "GPS_RELEASE_AGPS_DATA_CONN"); if (DEBUG) Log.d(TAG, "GPS_RELEASE_AGPS_DATA_CONN"); Loading @@ -228,7 +225,7 @@ class GnssNetworkConnectivityHandler { if (DEBUG) Log.d(TAG, "GPS_AGPS_DATA_CONN_FAILED"); if (DEBUG) Log.d(TAG, "GPS_AGPS_DATA_CONN_FAILED"); break; break; default: default: if (DEBUG) Log.d(TAG, "Received Unknown AGPS status: " + status); if (DEBUG) Log.d(TAG, "Received Unknown AGPS status: " + agpsStatus); } } } } Loading Loading @@ -308,8 +305,8 @@ class GnssNetworkConnectivityHandler { }; }; } } private void requestSuplConnection(InetAddress inetAddress) { private void requestSuplConnection(int agpsType, byte[] suplIpAddr) { postEvent(() -> handleRequestSuplConnection(inetAddress)); postEvent(() -> handleRequestSuplConnection(agpsType, suplIpAddr)); } } private void suplConnectionAvailable(Network network) { private void suplConnectionAvailable(Network network) { Loading Loading @@ -435,8 +432,15 @@ class GnssNetworkConnectivityHandler { // exception in the following call to native_agps_data_conn_open // exception in the following call to native_agps_data_conn_open apn = "dummy-apn"; apn = "dummy-apn"; } } int apnIpType = getApnIpType(apn); // Setting route to host is needed for GNSS HAL implementations earlier than // @2.0::IAgnssCallback. The HAL @2.0::IAgnssCallback.agnssStatusCb() method does // not require setting route to SUPL host and hence does not provide an IP address. if (mAGpsDataConnectionIpAddr != null) { setRouting(); setRouting(); } int apnIpType = getApnIpType(apn); if (DEBUG) { if (DEBUG) { String message = String.format( String message = String.format( "native_agps_data_conn_open: mAgpsApn=%s, mApnIpType=%s", "native_agps_data_conn_open: mAgpsApn=%s, mApnIpType=%s", Loading @@ -444,29 +448,40 @@ class GnssNetworkConnectivityHandler { apnIpType); apnIpType); Log.d(TAG, message); Log.d(TAG, message); } } native_agps_data_conn_open(apn, apnIpType); native_agps_data_conn_open(network.getNetworkHandle(), apn, apnIpType); mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPEN; mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPEN; } } } } private void handleRequestSuplConnection(InetAddress address) { private void handleRequestSuplConnection(int agpsType, byte[] suplIpAddr) { mAGpsDataConnectionIpAddr = null; mAGpsType = agpsType; if (suplIpAddr != null) { if (VERBOSE) Log.v(TAG, "Received SUPL IP addr[]: " + Arrays.toString(suplIpAddr)); try { mAGpsDataConnectionIpAddr = InetAddress.getByAddress(suplIpAddr); if (DEBUG) Log.d(TAG, "IP address converted to: " + mAGpsDataConnectionIpAddr); } catch (UnknownHostException e) { Log.e(TAG, "Bad IP Address: " + suplIpAddr, e); } } if (DEBUG) { if (DEBUG) { String message = String.format( String message = String.format( "requestSuplConnection, state=%s, address=%s", "requestSuplConnection, state=%s, agpsType=%s, address=%s", agpsDataConnStateAsString(), agpsDataConnStateAsString(), address); agpsTypeAsString(agpsType), mAGpsDataConnectionIpAddr); Log.d(TAG, message); Log.d(TAG, message); } } if (mAGpsDataConnectionState != AGPS_DATA_CONNECTION_CLOSED) { if (mAGpsDataConnectionState != AGPS_DATA_CONNECTION_CLOSED) { return; return; } } mAGpsDataConnectionIpAddr = address; mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPENING; mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPENING; NetworkRequest.Builder requestBuilder = new NetworkRequest.Builder(); NetworkRequest.Builder requestBuilder = new NetworkRequest.Builder(); requestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); requestBuilder.addCapability(getNetworkCapability(mAGpsType)); requestBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_SUPL); NetworkRequest request = requestBuilder.build(); NetworkRequest request = requestBuilder.build(); mConnMgr.requestNetwork( mConnMgr.requestNetwork( request, request, Loading @@ -474,6 +489,20 @@ class GnssNetworkConnectivityHandler { SUPL_NETWORK_REQUEST_TIMEOUT_MILLIS); SUPL_NETWORK_REQUEST_TIMEOUT_MILLIS); } } private int getNetworkCapability(int agpsType) { switch (agpsType) { case AGPS_TYPE_C2K: case AGPS_TYPE_SUPL: return NetworkCapabilities.NET_CAPABILITY_SUPL; case AGPS_TYPE_EIMS: return NetworkCapabilities.NET_CAPABILITY_EIMS; case AGPS_TYPE_IMS: return NetworkCapabilities.NET_CAPABILITY_IMS; default: throw new IllegalArgumentException("agpsType: " + agpsType); } } private void handleReleaseSuplConnection(int agpsDataConnStatus) { private void handleReleaseSuplConnection(int agpsDataConnStatus) { if (DEBUG) { if (DEBUG) { String message = String.format( String message = String.format( Loading @@ -486,8 +515,8 @@ class GnssNetworkConnectivityHandler { if (mAGpsDataConnectionState == AGPS_DATA_CONNECTION_CLOSED) { if (mAGpsDataConnectionState == AGPS_DATA_CONNECTION_CLOSED) { return; return; } } mAGpsDataConnectionState = AGPS_DATA_CONNECTION_CLOSED; mAGpsDataConnectionState = AGPS_DATA_CONNECTION_CLOSED; mConnMgr.unregisterNetworkCallback(mSuplConnectivityCallback); mConnMgr.unregisterNetworkCallback(mSuplConnectivityCallback); switch (agpsDataConnStatus) { switch (agpsDataConnStatus) { case GPS_AGPS_DATA_CONN_FAILED: case GPS_AGPS_DATA_CONN_FAILED: Loading @@ -501,12 +530,9 @@ class GnssNetworkConnectivityHandler { } } } } // TODO(25876485): Delete this method when all devices upgrade to HAL @2.0::IAGnssCallback // interface which does not require setting route to host. private void setRouting() { private void setRouting() { if (mAGpsDataConnectionIpAddr == null) { return; } // TODO(25876485): replace the use of this deprecated API boolean result = mConnMgr.requestRouteToHostAddress( boolean result = mConnMgr.requestRouteToHostAddress( ConnectivityManager.TYPE_MOBILE_SUPL, ConnectivityManager.TYPE_MOBILE_SUPL, mAGpsDataConnectionIpAddr); mAGpsDataConnectionIpAddr); Loading Loading @@ -564,6 +590,21 @@ class GnssNetworkConnectivityHandler { } } } } private String agpsTypeAsString(int agpsType) { switch (agpsType) { case AGPS_TYPE_SUPL: return "SUPL"; case AGPS_TYPE_C2K: return "C2K"; case AGPS_TYPE_EIMS: return "EIMS"; case AGPS_TYPE_IMS: return "IMS"; default: return "<Unknown>"; } } private int getApnIpType(String apn) { private int getApnIpType(String apn) { ensureInHandlerThread(); ensureInHandlerThread(); if (apn == null) { if (apn == null) { Loading Loading @@ -614,7 +655,7 @@ class GnssNetworkConnectivityHandler { } } // AGPS support // AGPS support private native void native_agps_data_conn_open(String apn, int apnIpType); private native void native_agps_data_conn_open(long networkHandle, String apn, int apnIpType); private native void native_agps_data_conn_closed(); private native void native_agps_data_conn_closed(); Loading
services/core/jni/com_android_server_location_GnssLocationProvider.cpp +185 −72 File changed.Preview size limit exceeded, changes collapsed. Show changes