diff options
| author | 2022-05-10 20:47:50 +0000 | |
|---|---|---|
| committer | 2022-05-12 04:09:23 +0000 | |
| commit | d68034d60f1fa8a3c714ae6491db5405891f8077 (patch) | |
| tree | 2d5ab52a18f3fa5cd75492bb56c81a960317fb5d | |
| parent | 4304b4b03151a6550027bcfb1a9fb8e92b922c05 (diff) | |
Handle TooManyRequestsException
Bug: 230854230
Test: manual
Change-Id: I0962d1e55654faae2b8c6611101eed8778f966a8
| -rw-r--r-- | services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java b/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java index 718f98a0f04b..70b86898c24b 100644 --- a/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java +++ b/services/core/java/com/android/server/location/gnss/GnssNetworkConnectivityHandler.java @@ -200,7 +200,7 @@ class GnssNetworkConnectivityHandler { mHandler = new Handler(looper); mNiHandler = niHandler; mConnMgr = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE); - mSuplConnectivityCallback = createSuplConnectivityCallback(); + mSuplConnectivityCallback = null; } /** @@ -584,11 +584,21 @@ class GnssNetworkConnectivityHandler { networkRequestBuilder.setNetworkSpecifier(Integer.toString(mActiveSubId)); } NetworkRequest networkRequest = networkRequestBuilder.build(); - mConnMgr.requestNetwork( - networkRequest, - mSuplConnectivityCallback, - mHandler, - SUPL_NETWORK_REQUEST_TIMEOUT_MILLIS); + // Make sure we only have a single request. + if (mSuplConnectivityCallback != null) { + mConnMgr.unregisterNetworkCallback(mSuplConnectivityCallback); + } + mSuplConnectivityCallback = createSuplConnectivityCallback(); + try { + mConnMgr.requestNetwork( + networkRequest, + mSuplConnectivityCallback, + mHandler, + SUPL_NETWORK_REQUEST_TIMEOUT_MILLIS); + } catch (RuntimeException e) { + Log.e(TAG, "Failed to request network.", e); + handleReleaseSuplConnection(GPS_AGPS_DATA_CONN_FAILED); + } } private int getNetworkCapability(int agpsType) { @@ -619,7 +629,10 @@ class GnssNetworkConnectivityHandler { } mAGpsDataConnectionState = AGPS_DATA_CONNECTION_CLOSED; - mConnMgr.unregisterNetworkCallback(mSuplConnectivityCallback); + if (mSuplConnectivityCallback != null) { + mConnMgr.unregisterNetworkCallback(mSuplConnectivityCallback); + mSuplConnectivityCallback = null; + } switch (agpsDataConnStatus) { case GPS_AGPS_DATA_CONN_FAILED: native_agps_data_conn_failed(); |