GPS: Keep LPP_PROFILE for verizon
1) add isVerizon function to check verizon sim
2) Save the LPP_PROFILE into property when inserting verizon sim.
3) Use this Profile if device is rebooted after removing this sim.
4) This behavior is maintained unless non-verizon sim is inserted
Bug: 24860255
Change-Id: I3633e1adbbf35852f508877255d3f1664e5497f0
Signed-off-by: Ecco Park <eccopark@google.com>
diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java
index 173f76f..7580cf4 100644
--- a/services/core/java/com/android/server/location/GnssLocationProvider.java
+++ b/services/core/java/com/android/server/location/GnssLocationProvider.java
@@ -393,6 +393,15 @@
// SIM/Carrier info.
private final static String SIM_STATE_CHANGED = "android.intent.action.SIM_STATE_CHANGED";
+ // Persist property for LPP_PROFILE
+ private final static String LPP_PROFILE = "persist.sys.gps.lpp";
+
+ // VZW PLMN info
+ private static final String[] VzwMccMncList = {"311480", "310004", "20404"};
+ // corresponding GID1 value, empty string means ignore gid1 match.
+ private static final String[] VzwGid1List = {"", "", "BAE0000000000000"};
+
+
private final PowerManager mPowerManager;
private final AlarmManager mAlarmManager;
private final PendingIntent mWakeupIntent;
@@ -507,14 +516,43 @@
}
};
+ private final boolean isVerizon(String mccMnc, String imsi, String groupId) {
+ if (DEBUG) Log.d(TAG, "simOperator: " + mccMnc);
+ if (!TextUtils.isEmpty(mccMnc) || !TextUtils.isEmpty(imsi)) {
+ for (int i = 0; i < VzwMccMncList.length; i++) {
+ if ((!TextUtils.isEmpty(mccMnc) && mccMnc.equals(VzwMccMncList[i])) ||
+ (!TextUtils.isEmpty(imsi) && imsi.startsWith(VzwMccMncList[i]))) {
+ // check gid too if needed
+ if (TextUtils.isEmpty(VzwGid1List[i]) || VzwGid1List[i].equals(groupId)) {
+ if (DEBUG) Log.d(TAG, "Verizon UICC");
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
private void subscriptionOrSimChanged(Context context) {
if (DEBUG) Log.d(TAG, "received SIM related action: ");
TelephonyManager phone = (TelephonyManager)
mContext.getSystemService(Context.TELEPHONY_SERVICE);
String mccMnc = phone.getSimOperator();
+ String imsi = phone.getSubscriberId();
+ String groupId = phone.getGroupIdLevel1();
if (!TextUtils.isEmpty(mccMnc)) {
if (DEBUG) Log.d(TAG, "SIM MCC/MNC is available: " + mccMnc);
synchronized (mLock) {
+ if (isVerizon(mccMnc, imsi, groupId)) {
+ // load current properties for carrier VZW
+ loadPropertiesFromResource(context, mProperties);
+ String lpp_profile = mProperties.getProperty("LPP_PROFILE");
+ // set the persist property LPP_PROFILE for VZW
+ SystemProperties.set(LPP_PROFILE, lpp_profile);
+ } else {
+ // reset the persist property for Non VZW
+ SystemProperties.set(LPP_PROFILE, "");
+ }
reloadGpsProperties(context, mProperties);
mNIHandler.setSuplEsEnabled(mSuplEsEnabled);
}
@@ -571,8 +609,10 @@
private void reloadGpsProperties(Context context, Properties properties) {
if (DEBUG) Log.d(TAG, "Reset GPS properties, previous size = " + properties.size());
loadPropertiesFromResource(context, properties);
+
boolean isPropertiesLoadedFromFile = false;
final String gpsHardware = SystemProperties.get("ro.hardware.gps");
+
if (!TextUtils.isEmpty(gpsHardware)) {
final String propFilename =
PROPERTIES_FILE_PREFIX + "." + gpsHardware + PROPERTIES_FILE_SUFFIX;
@@ -583,7 +623,11 @@
loadPropertiesFromFile(DEFAULT_PROPERTIES_FILE, properties);
}
if (DEBUG) Log.d(TAG, "GPS properties reloaded, size = " + properties.size());
-
+ String lpp_prof = SystemProperties.get(LPP_PROFILE);
+ if (!TextUtils.isEmpty(lpp_prof)) {
+ // override default value of this if lpp_prof is not empty
+ properties.setProperty("LPP_PROFILE", lpp_prof);
+ }
// TODO: we should get rid of C2K specific setting.
setSuplHostPort(properties.getProperty("SUPL_HOST"),
properties.getProperty("SUPL_PORT"));