summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Shinru Han <shinruhan@google.com> 2021-06-10 12:19:58 +0800
committer Shinru Han <shinruhan@google.com> 2024-01-18 09:35:29 +0000
commit4ba8795c4830e8e04ac83ef878458885e13ef7e2 (patch)
treecf3d1d60890c1680cad62a6eb2e7dcb3eebf79df
parent0dcff8a31fe429af3cabcced2615fec7de15b909 (diff)
Support GNSS configuration overlay from resource
Add GNSS configuration overlay from resource to override carrier config. Bug: 317734846 Test: on device Change-Id: I2125ae8fd06953304e1d2280071ee79e865d22c1
-rw-r--r--location/java/android/location/flags/gnss.aconfig7
-rw-r--r--services/core/java/com/android/server/location/gnss/GnssConfiguration.java27
2 files changed, 33 insertions, 1 deletions
diff --git a/location/java/android/location/flags/gnss.aconfig b/location/java/android/location/flags/gnss.aconfig
index 8a6a0345f6a8..8c7c8716b2dc 100644
--- a/location/java/android/location/flags/gnss.aconfig
+++ b/location/java/android/location/flags/gnss.aconfig
@@ -41,3 +41,10 @@ flag {
description: "Flag for replacing future elapsedRealtime in JNI"
bug: "314328533"
}
+
+flag {
+ name: "gnss_configuration_from_resource"
+ namespace: "location"
+ description: "Flag for GNSS configuration from resource"
+ bug: "317734846"
+}
diff --git a/services/core/java/com/android/server/location/gnss/GnssConfiguration.java b/services/core/java/com/android/server/location/gnss/GnssConfiguration.java
index 5ef89ad4269a..a5939e924adb 100644
--- a/services/core/java/com/android/server/location/gnss/GnssConfiguration.java
+++ b/services/core/java/com/android/server/location/gnss/GnssConfiguration.java
@@ -17,6 +17,7 @@
package com.android.server.location.gnss;
import android.content.Context;
+import android.location.flags.Flags;
import android.os.PersistableBundle;
import android.os.SystemProperties;
import android.telephony.CarrierConfigManager;
@@ -36,6 +37,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
@@ -275,6 +277,11 @@ public class GnssConfiguration {
}
loadPropertiesFromCarrierConfig(inEmergency, activeSubId);
+ if (Flags.gnssConfigurationFromResource()) {
+ // Overlay carrier properties from resources.
+ loadPropertiesFromResource(mContext, mProperties);
+ }
+
if (isSimAbsent(mContext)) {
// Use the default SIM's LPP profile when SIM is absent.
String lpp_prof = SystemProperties.get(LPP_PROFILE);
@@ -382,7 +389,7 @@ public class GnssConfiguration {
if (configKey.startsWith(CarrierConfigManager.Gps.KEY_PREFIX)) {
String key = configKey
.substring(CarrierConfigManager.Gps.KEY_PREFIX.length())
- .toUpperCase();
+ .toUpperCase(Locale.ROOT);
Object value = configs.get(configKey);
if (DEBUG) Log.d(TAG, "Gps config: " + key + " = " + value);
if (value instanceof String) {
@@ -410,6 +417,24 @@ public class GnssConfiguration {
}
}
+ private void loadPropertiesFromResource(Context context,
+ Properties properties) {
+ String[] configValues = context.getResources().getStringArray(
+ com.android.internal.R.array.config_gnssParameters);
+ for (String item : configValues) {
+ if (DEBUG) Log.d(TAG, "GnssParamsResource: " + item);
+ // We need to support "KEY =", but not "=VALUE".
+ int index = item.indexOf("=");
+ if (index > 0 && index + 1 < item.length()) {
+ String key = item.substring(0, index);
+ String value = item.substring(index + 1);
+ properties.setProperty(key.trim().toUpperCase(Locale.ROOT), value);
+ } else {
+ Log.w(TAG, "malformed contents: " + item);
+ }
+ }
+ }
+
private int getRangeCheckedConfigEsExtensionSec() {
int emergencyExtensionSeconds = getIntConfig(CONFIG_ES_EXTENSION_SEC, 0);
if (emergencyExtensionSeconds > MAX_EMERGENCY_MODE_EXTENSION_SECONDS) {