Disables GNSS HAL when location is off for all visible users.
Bug: 236139244
Test: none
Change-Id: I4cb4e4272f31d38dec63911e3258a7ef99ca494d
diff --git a/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java b/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java
index 6f6b1c9..282ad57 100644
--- a/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java
+++ b/services/core/java/com/android/server/location/gnss/GnssLocationProvider.java
@@ -81,6 +81,7 @@
import android.os.SystemClock;
import android.os.SystemProperties;
import android.os.UserHandle;
+import android.os.UserManager;
import android.os.WorkSource;
import android.os.WorkSource.WorkChain;
import android.provider.Settings;
@@ -930,9 +931,15 @@
}
private void updateEnabled() {
- // Generally follow location setting for current user
- boolean enabled = mContext.getSystemService(LocationManager.class)
- .isLocationEnabledForUser(UserHandle.CURRENT);
+ boolean enabled = false;
+
+ // Generally follow location setting for visible users
+ LocationManager locationManager = mContext.getSystemService(LocationManager.class);
+ Set<UserHandle> visibleUserHandles =
+ mContext.getSystemService(UserManager.class).getVisibleUsers();
+ for (UserHandle visibleUserHandle : visibleUserHandles) {
+ enabled |= locationManager.isLocationEnabledForUser(visibleUserHandle);
+ }
// .. but enable anyway, if there's an active bypass request (e.g. ELS or ADAS)
enabled |= (mProviderRequest != null