Loading services/core/java/com/android/server/location/GnssLocationProvider.java +45 −1 Original line number Diff line number Diff line Loading @@ -393,6 +393,15 @@ public class GnssLocationProvider implements LocationProviderInterface { // 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; Loading Loading @@ -507,14 +516,43 @@ public class GnssLocationProvider implements LocationProviderInterface { } }; 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); } Loading Loading @@ -571,8 +609,10 @@ public class GnssLocationProvider implements LocationProviderInterface { 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; Loading @@ -583,7 +623,11 @@ public class GnssLocationProvider implements LocationProviderInterface { 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")); Loading Loading
services/core/java/com/android/server/location/GnssLocationProvider.java +45 −1 Original line number Diff line number Diff line Loading @@ -393,6 +393,15 @@ public class GnssLocationProvider implements LocationProviderInterface { // 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; Loading Loading @@ -507,14 +516,43 @@ public class GnssLocationProvider implements LocationProviderInterface { } }; 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); } Loading Loading @@ -571,8 +609,10 @@ public class GnssLocationProvider implements LocationProviderInterface { 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; Loading @@ -583,7 +623,11 @@ public class GnssLocationProvider implements LocationProviderInterface { 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")); Loading