From 081877bc6a27c0e20b4dc4a273c340ac88d8b25a Mon Sep 17 00:00:00 2001 From: Wyatt Riley Date: Wed, 7 Dec 2016 07:16:25 -0800 Subject: [PATCH 1/3] DO NOT MERGE ANYWHERE: Restoring Network Available Notification to AGnssRil Bug: 33350903 Change-Id: I8fe0ddbd011689258890ce37e37271cc6f170c6a Fixes: 33350903 Test: On device GPS-still-works check (Ril check to be done by partners) --- .../com/android/server/location/GnssLocationProvider.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java index f54f91557fed5..ea76d7249de2b 100644 --- a/services/core/java/com/android/server/location/GnssLocationProvider.java +++ b/services/core/java/com/android/server/location/GnssLocationProvider.java @@ -463,6 +463,7 @@ public class GnssLocationProvider implements LocationProviderInterface { if (mDownloadXtraDataPending == STATE_PENDING_NETWORK) { xtraDownloadRequest(); } + sendMessage(UPDATE_NETWORK_STATE, 0 /*arg*/, network); } }; @@ -473,11 +474,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); From 63a04f0d8c427b4d7584d70a7cc5dc976a9bfd9e Mon Sep 17 00:00:00 2001 From: Kevin Tang Date: Wed, 10 May 2017 19:36:20 -0700 Subject: [PATCH 2/3] DO NOT MERGE ANYWHERE: GnssLocationProvider: listening to conn lost event The HAL layer now gets onLost notificaiton as well as connectivity available. This keeps HAL layer better informed on what the on what the real connection status is, for things like assistance download. Fixes: 34076506 Test: GPS works, even after delete all, and assistance downloads wait politely when in airplane mode. Change-Id: I4b5fb782f9370b0a45282c8a9dd5920120d449fb --- .../server/location/GnssLocationProvider.java | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java index ea76d7249de2b..bd947fba74f3c 100644 --- a/services/core/java/com/android/server/location/GnssLocationProvider.java +++ b/services/core/java/com/android/server/location/GnssLocationProvider.java @@ -465,6 +465,11 @@ public class GnssLocationProvider implements LocationProviderInterface { } sendMessage(UPDATE_NETWORK_STATE, 0 /*arg*/, network); } + + @Override + public void onLost(Network network) { + sendMessage(UPDATE_NETWORK_STATE, 0 /*arg*/, network); + } }; /** @@ -828,11 +833,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", @@ -844,8 +859,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"; @@ -853,10 +866,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"); @@ -864,7 +877,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 From 03c0f16f370564c7d6cc8398a2d163af9d418b2d Mon Sep 17 00:00:00 2001 From: Zheng Zhang Date: Tue, 22 Aug 2017 10:27:14 -0700 Subject: [PATCH 3/3] DO NOT MERGE ANYWHERE: Listen TRANSPORT_BLUETOOTH network change in GnssLocationProvider TRANSPORT_BLUETOOTH is a essential network type for wearable device. For non-master branch, only listen to Bluetooth on wearable device. Bug: 64881794 Test: Trigger Bluetooth on/off on watch, check if UpdateNetworkState() got called. Change-Id: I30e39943220597987320ea7843d7d36827fdd0c7 (cherry picked from commit d6886710b5c9ed9d1567c4ee59773071bae7070c) --- .../com/android/server/location/GnssLocationProvider.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java index bd947fba74f3c..17c100067ab1d 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; @@ -2250,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);