Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 84b19b48 authored by Anil Admal's avatar Anil Admal
Browse files

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
parent 1ccf640d
Loading
Loading
Loading
Loading
+34 −17
Original line number Diff line number Diff line
@@ -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 + ")";
        }
    }