summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kevin Tang <zhikait@codeaurora.org> 2017-05-10 19:36:20 -0700
committer Wyatt Riley <wyattriley@google.com> 2017-06-21 21:50:33 -0700
commit71ad5fe04aab40fdff5a85cccda8e6a25d4761bc (patch)
tree6689e04855f1699c36a2a972a887d8472a5610c9
parent17652d85ecbbbababa7bec457130024346ff4b18 (diff)
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
-rw-r--r--services/core/java/com/android/server/location/GnssLocationProvider.java30
1 files 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 4a45c074f4d1..da7572274497 100644
--- a/services/core/java/com/android/server/location/GnssLocationProvider.java
+++ b/services/core/java/com/android/server/location/GnssLocationProvider.java
@@ -466,6 +466,11 @@ public class GnssLocationProvider implements LocationProviderInterface {
// Always on, notify HAL so it can get data it needs
sendMessage(UPDATE_NETWORK_STATE, 0 /*arg*/, network);
}
+
+ @Override
+ public void onLost(Network network) {
+ sendMessage(UPDATE_NETWORK_STATE, 0 /*arg*/, network);
+ }
};
/**
@@ -802,11 +807,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",
@@ -818,8 +833,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";
@@ -827,10 +840,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");
@@ -838,7 +851,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