diff options
| author | 2017-08-29 18:35:04 +0000 | |
|---|---|---|
| committer | 2017-08-29 18:35:04 +0000 | |
| commit | 1c0dba5014ef5a5176ec5b86ac73b230223cf8bb (patch) | |
| tree | aac283916539adb18fc63b80da5b64df4ee676c3 | |
| parent | a5ba83e2ee2cc0dba6ae355a70b001f9d20a888c (diff) | |
| parent | 03c0f16f370564c7d6cc8398a2d163af9d418b2d (diff) | |
Merge changes I30e39943,I4b5fb782,I8fe0ddbd into cw-f-dev
* changes:
DO NOT MERGE ANYWHERE: Listen TRANSPORT_BLUETOOTH network change in GnssLocationProvider
DO NOT MERGE ANYWHERE: GnssLocationProvider: listening to conn lost event
DO NOT MERGE ANYWHERE: Restoring Network Available Notification to AGnssRil
| -rw-r--r-- | services/core/java/com/android/server/location/GnssLocationProvider.java | 43 |
1 files changed, 29 insertions, 14 deletions
diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java index f54f91557fed..17c100067ab1 100644 --- a/services/core/java/com/android/server/location/GnssLocationProvider.java +++ b/services/core/java/com/android/server/location/GnssLocationProvider.java @@ -30,6 +30,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.PackageManager; import android.database.Cursor; import android.hardware.location.GeofenceHardware; import android.hardware.location.GeofenceHardwareImpl; @@ -463,6 +464,12 @@ public class GnssLocationProvider implements LocationProviderInterface { if (mDownloadXtraDataPending == STATE_PENDING_NETWORK) { xtraDownloadRequest(); } + sendMessage(UPDATE_NETWORK_STATE, 0 /*arg*/, network); + } + + @Override + public void onLost(Network network) { + sendMessage(UPDATE_NETWORK_STATE, 0 /*arg*/, network); } }; @@ -474,11 +481,6 @@ public class GnssLocationProvider implements LocationProviderInterface { private final ConnectivityManager.NetworkCallback mSuplConnectivityCallback = new ConnectivityManager.NetworkCallback() { @Override - public void onAvailable(Network network) { - sendMessage(UPDATE_NETWORK_STATE, 0 /*arg*/, network); - } - - @Override public void onLost(Network network) { releaseSuplConnection(GPS_RELEASE_AGPS_DATA_CONN); } @@ -832,11 +834,21 @@ public class GnssLocationProvider implements LocationProviderInterface { private void handleUpdateNetworkState(Network network) { // retrieve NetworkInfo for this UID NetworkInfo info = mConnMgr.getNetworkInfo(network); - if (info == null) { - return; + + boolean networkAvailable = false; + boolean isConnected = false; + int type = ConnectivityManager.TYPE_NONE; + boolean isRoaming = false; + String apnName = null; + + if (info != null) { + networkAvailable = info.isAvailable() && TelephonyManager.getDefault().getDataEnabled(); + isConnected = info.isConnected(); + type = info.getType(); + isRoaming = info.isRoaming(); + apnName = info.getExtraInfo(); } - boolean isConnected = info.isConnected(); if (DEBUG) { String message = String.format( "UpdateNetworkState, state=%s, connected=%s, info=%s, capabilities=%S", @@ -848,8 +860,6 @@ public class GnssLocationProvider implements LocationProviderInterface { } if (native_is_agps_ril_supported()) { - boolean dataEnabled = TelephonyManager.getDefault().getDataEnabled(); - boolean networkAvailable = info.isAvailable() && dataEnabled; String defaultApn = getSelectedApn(); if (defaultApn == null) { defaultApn = "dummy-apn"; @@ -857,10 +867,10 @@ public class GnssLocationProvider implements LocationProviderInterface { native_update_network_state( isConnected, - info.getType(), - info.isRoaming(), + type, + isRoaming, networkAvailable, - info.getExtraInfo(), + apnName, defaultApn); } else if (DEBUG) { Log.d(TAG, "Skipped network state update because GPS HAL AGPS-RIL is not supported"); @@ -868,7 +878,6 @@ public class GnssLocationProvider implements LocationProviderInterface { if (mAGpsDataConnectionState == AGPS_DATA_CONNECTION_OPENING) { if (isConnected) { - String apnName = info.getExtraInfo(); if (apnName == null) { // assign a dummy value in the case of C2K as otherwise we will have a runtime // exception in the following call to native_agps_data_conn_open @@ -2242,6 +2251,12 @@ public class GnssLocationProvider implements LocationProviderInterface { NetworkRequest.Builder networkRequestBuilder = new NetworkRequest.Builder(); networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); + // On watches, Bluetooth is the most important network type. + boolean isWatch = + mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_WATCH); + if (isWatch) { + networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_BLUETOOTH); + } NetworkRequest networkRequest = networkRequestBuilder.build(); mConnMgr.registerNetworkCallback(networkRequest, mNetworkConnectivityCallback); |