Loading services/core/java/com/android/server/location/GnssConfiguration.java +4 −2 Original line number Diff line number Diff line Loading @@ -317,8 +317,10 @@ class GnssConfiguration { if (configManager == null) { return; } PersistableBundle configs = configManager.getConfigForSubId( SubscriptionManager.getDefaultDataSubscriptionId()); int ddSubId = SubscriptionManager.getDefaultDataSubscriptionId(); PersistableBundle configs = SubscriptionManager.isValidSubscriptionId(ddSubId) ? configManager.getConfigForSubId(ddSubId) : null; if (configs == null) { if (DEBUG) Log.d(TAG, "SIM not ready, use default carrier config."); configs = CarrierConfigManager.getDefaultConfig(); Loading services/core/java/com/android/server/location/GnssLocationProvider.java +28 −45 Original line number Diff line number Diff line Loading @@ -60,7 +60,6 @@ import android.os.WorkSource.WorkChain; import android.provider.Settings; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener; import android.telephony.TelephonyManager; import android.telephony.gsm.GsmCellLocation; import android.text.TextUtils; Loading @@ -75,6 +74,7 @@ import com.android.internal.location.GpsNetInitiatedHandler.GpsNiNotification; import com.android.internal.location.ProviderProperties; import com.android.internal.location.ProviderRequest; import com.android.internal.location.gnssmetrics.GnssMetrics; import com.android.internal.telephony.TelephonyIntents; import com.android.server.location.GnssSatelliteBlacklistHelper.GnssSatelliteBlacklistCallback; import com.android.server.location.NtpTimeHelper.InjectNtpTimeCallback; Loading Loading @@ -184,7 +184,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private static final int DOWNLOAD_PSDS_DATA = 6; private static final int UPDATE_LOCATION = 7; // Handle external location from network listener private static final int DOWNLOAD_PSDS_DATA_FINISHED = 11; private static final int SUBSCRIPTION_OR_CARRIER_CONFIG_CHANGED = 12; private static final int INITIALIZE_HANDLER = 13; private static final int REQUEST_LOCATION = 16; private static final int REPORT_LOCATION = 17; // HAL reports location Loading Loading @@ -484,22 +483,13 @@ public class GnssLocationProvider extends AbstractLocationProvider implements updateLowPowerMode(); break; case CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED: case TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED: subscriptionOrCarrierConfigChanged(context); break; } } }; // TODO: replace OnSubscriptionsChangedListener with ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED // broadcast receiver. private final OnSubscriptionsChangedListener mOnSubscriptionsChangedListener = new OnSubscriptionsChangedListener() { @Override public void onSubscriptionsChanged() { sendMessage(SUBSCRIPTION_OR_CARRIER_CONFIG_CHANGED, 0, null); } }; /** * Implements {@link GnssSatelliteBlacklistCallback#onUpdateSatelliteBlacklist}. */ Loading @@ -515,12 +505,15 @@ public class GnssLocationProvider extends AbstractLocationProvider implements mContext.getSystemService(Context.TELEPHONY_SERVICE); CarrierConfigManager configManager = (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE); String mccMnc = phone.getSimOperator(); int ddSubId = SubscriptionManager.getDefaultDataSubscriptionId(); String mccMnc = SubscriptionManager.isValidSubscriptionId(ddSubId) ? phone.getSimOperator(ddSubId) : phone.getSimOperator(); boolean isKeepLppProfile = false; if (!TextUtils.isEmpty(mccMnc)) { if (DEBUG) Log.d(TAG, "SIM MCC/MNC is available: " + mccMnc); if (configManager != null) { PersistableBundle b = configManager.getConfig(); PersistableBundle b = SubscriptionManager.isValidSubscriptionId(ddSubId) ? configManager.getConfigForSubId(ddSubId) : null; if (b != null) { isKeepLppProfile = b.getBoolean(CarrierConfigManager.Gps.KEY_PERSIST_LPP_MODE_BOOL); Loading @@ -539,7 +532,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements SystemProperties.set(GnssConfiguration.LPP_PROFILE, ""); } reloadGpsProperties(); mNIHandler.setSuplEsEnabled(mSuplEsEnabled); } else { if (DEBUG) Log.d(TAG, "SIM MCC/MNC is still not available"); } Loading Loading @@ -577,9 +569,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements mC2KServerPort = mGnssConfiguration.getC2KPort(TCP_MIN_PORT); mNIHandler.setEmergencyExtensionSeconds(mGnssConfiguration.getEsExtensionSec()); mSuplEsEnabled = mGnssConfiguration.getSuplEs(0) == 1; mNIHandler.setSuplEsEnabled(mSuplEsEnabled); if (mGnssVisibilityControl != null) { mGnssVisibilityControl.updateProxyApps(mGnssConfiguration.getProxyApps()); mGnssVisibilityControl.setEsNotify(mGnssConfiguration.getEsNotify(0)); mGnssVisibilityControl.onConfigurationUpdated(mGnssConfiguration); } } Loading Loading @@ -1892,28 +1884,34 @@ public class GnssLocationProvider extends AbstractLocationProvider implements TelephonyManager phone = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); int type = AGPS_SETID_TYPE_NONE; String data = ""; String setId = null; int ddSubId = SubscriptionManager.getDefaultDataSubscriptionId(); if ((flags & AGPS_RIL_REQUEST_SETID_IMSI) == AGPS_RIL_REQUEST_SETID_IMSI) { String data_temp = phone.getSubscriberId(); if (data_temp == null) { // This means the framework does not have the SIM card ready. } else { if (SubscriptionManager.isValidSubscriptionId(ddSubId)) { setId = phone.getSubscriberId(ddSubId); } if (setId == null) { setId = phone.getSubscriberId(); } if (setId != null) { // This means the framework has the SIM card. data = data_temp; type = AGPS_SETID_TYPE_IMSI; } } else if ((flags & AGPS_RIL_REQUEST_SETID_MSISDN) == AGPS_RIL_REQUEST_SETID_MSISDN) { String data_temp = phone.getLine1Number(); if (data_temp == null) { // This means the framework does not have the SIM card ready. } else { if (SubscriptionManager.isValidSubscriptionId(ddSubId)) { setId = phone.getLine1Number(ddSubId); } if (setId == null) { setId = phone.getLine1Number(); } if (setId != null) { // This means the framework has the SIM card. data = data_temp; type = AGPS_SETID_TYPE_MSISDN; } } native_agps_set_id(type, data); native_agps_set_id(type, (setId == null) ? "" : setId); } @NativeEntryPoint Loading Loading @@ -2025,9 +2023,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements case UPDATE_LOCATION: handleUpdateLocation((Location) msg.obj); break; case SUBSCRIPTION_OR_CARRIER_CONFIG_CHANGED: subscriptionOrCarrierConfigChanged(mContext); break; case INITIALIZE_HANDLER: handleInitialize(); break; Loading Loading @@ -2066,17 +2061,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements // (this configuration might change in the future based on SIM changes) reloadGpsProperties(); // TODO: When this object "finishes" we should unregister by invoking // SubscriptionManager.getInstance(mContext).unregister // (mOnSubscriptionsChangedListener); // This is not strictly necessary because it will be unregistered if the // notification fails but it is good form. // Register for SubscriptionInfo list changes which is guaranteed // to invoke onSubscriptionsChanged the first time. SubscriptionManager.from(mContext) .addOnSubscriptionsChangedListener(mOnSubscriptionsChangedListener); // listen for events IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(ALARM_WAKEUP); Loading @@ -2086,6 +2070,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements intentFilter.addAction(Intent.ACTION_SCREEN_OFF); intentFilter.addAction(Intent.ACTION_SCREEN_ON); intentFilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); intentFilter.addAction(TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED); mContext.registerReceiver(mBroadcastReceiver, intentFilter, null, this); mNetworkConnectivityHandler.registerNetworkCallbacks(); Loading Loading @@ -2164,8 +2149,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements return "DOWNLOAD_PSDS_DATA_FINISHED"; case UPDATE_LOCATION: return "UPDATE_LOCATION"; case SUBSCRIPTION_OR_CARRIER_CONFIG_CHANGED: return "SUBSCRIPTION_OR_CARRIER_CONFIG_CHANGED"; case INITIALIZE_HANDLER: return "INITIALIZE_HANDLER"; case REPORT_LOCATION: Loading services/core/java/com/android/server/location/GnssVisibilityControl.java +16 −10 Original line number Diff line number Diff line Loading @@ -76,7 +76,7 @@ class GnssVisibilityControl { private final GpsNetInitiatedHandler mNiHandler; private boolean mIsGpsEnabled; private volatile boolean mEsNotify; private boolean mEsNotify; // Number of non-framework location access proxy apps is expected to be small (< 5). private static final int ARRAY_MAP_INITIAL_CAPACITY_PROXY_APP_TO_LOCATION_PERMISSIONS = 7; Loading Loading @@ -124,10 +124,6 @@ class GnssVisibilityControl { } } void updateProxyApps(List<String> nfwLocationAccessProxyApps) { runOnHandler(() -> handleUpdateProxyApps(nfwLocationAccessProxyApps)); } void reportNfwNotification(String proxyAppPackageName, byte protocolStack, String otherProtocolStackName, byte requestor, String requestorId, byte responseType, boolean inEmergencyMode, boolean isCachedLocation) { Loading @@ -136,15 +132,25 @@ class GnssVisibilityControl { requestor, requestorId, responseType, inEmergencyMode, isCachedLocation))); } void setEsNotify(int esNotifyConfig) { if (esNotifyConfig != ES_NOTIFY_NONE && esNotifyConfig != ES_NOTIFY_ALL) { void onConfigurationUpdated(GnssConfiguration configuration) { // The configuration object must be accessed only in the caller thread and not in mHandler. List<String> nfwLocationAccessProxyApps = configuration.getProxyApps(); int esNotify = configuration.getEsNotify(ES_NOTIFY_NONE); runOnHandler(() -> { setEsNotify(esNotify); handleUpdateProxyApps(nfwLocationAccessProxyApps); }); } private void setEsNotify(int esNotify) { if (esNotify != ES_NOTIFY_NONE && esNotify != ES_NOTIFY_ALL) { Log.e(TAG, "Config parameter " + GnssConfiguration.CONFIG_ES_NOTIFY_INT + " is set to invalid value: " + esNotifyConfig + " is set to invalid value: " + esNotify + ". Using default value: " + ES_NOTIFY_NONE); esNotifyConfig = ES_NOTIFY_NONE; esNotify = ES_NOTIFY_NONE; } mEsNotify = (esNotifyConfig == ES_NOTIFY_ALL); mEsNotify = (esNotify == ES_NOTIFY_ALL); } private void handleInitialize() { Loading Loading
services/core/java/com/android/server/location/GnssConfiguration.java +4 −2 Original line number Diff line number Diff line Loading @@ -317,8 +317,10 @@ class GnssConfiguration { if (configManager == null) { return; } PersistableBundle configs = configManager.getConfigForSubId( SubscriptionManager.getDefaultDataSubscriptionId()); int ddSubId = SubscriptionManager.getDefaultDataSubscriptionId(); PersistableBundle configs = SubscriptionManager.isValidSubscriptionId(ddSubId) ? configManager.getConfigForSubId(ddSubId) : null; if (configs == null) { if (DEBUG) Log.d(TAG, "SIM not ready, use default carrier config."); configs = CarrierConfigManager.getDefaultConfig(); Loading
services/core/java/com/android/server/location/GnssLocationProvider.java +28 −45 Original line number Diff line number Diff line Loading @@ -60,7 +60,6 @@ import android.os.WorkSource.WorkChain; import android.provider.Settings; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener; import android.telephony.TelephonyManager; import android.telephony.gsm.GsmCellLocation; import android.text.TextUtils; Loading @@ -75,6 +74,7 @@ import com.android.internal.location.GpsNetInitiatedHandler.GpsNiNotification; import com.android.internal.location.ProviderProperties; import com.android.internal.location.ProviderRequest; import com.android.internal.location.gnssmetrics.GnssMetrics; import com.android.internal.telephony.TelephonyIntents; import com.android.server.location.GnssSatelliteBlacklistHelper.GnssSatelliteBlacklistCallback; import com.android.server.location.NtpTimeHelper.InjectNtpTimeCallback; Loading Loading @@ -184,7 +184,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements private static final int DOWNLOAD_PSDS_DATA = 6; private static final int UPDATE_LOCATION = 7; // Handle external location from network listener private static final int DOWNLOAD_PSDS_DATA_FINISHED = 11; private static final int SUBSCRIPTION_OR_CARRIER_CONFIG_CHANGED = 12; private static final int INITIALIZE_HANDLER = 13; private static final int REQUEST_LOCATION = 16; private static final int REPORT_LOCATION = 17; // HAL reports location Loading Loading @@ -484,22 +483,13 @@ public class GnssLocationProvider extends AbstractLocationProvider implements updateLowPowerMode(); break; case CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED: case TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED: subscriptionOrCarrierConfigChanged(context); break; } } }; // TODO: replace OnSubscriptionsChangedListener with ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED // broadcast receiver. private final OnSubscriptionsChangedListener mOnSubscriptionsChangedListener = new OnSubscriptionsChangedListener() { @Override public void onSubscriptionsChanged() { sendMessage(SUBSCRIPTION_OR_CARRIER_CONFIG_CHANGED, 0, null); } }; /** * Implements {@link GnssSatelliteBlacklistCallback#onUpdateSatelliteBlacklist}. */ Loading @@ -515,12 +505,15 @@ public class GnssLocationProvider extends AbstractLocationProvider implements mContext.getSystemService(Context.TELEPHONY_SERVICE); CarrierConfigManager configManager = (CarrierConfigManager) mContext.getSystemService(Context.CARRIER_CONFIG_SERVICE); String mccMnc = phone.getSimOperator(); int ddSubId = SubscriptionManager.getDefaultDataSubscriptionId(); String mccMnc = SubscriptionManager.isValidSubscriptionId(ddSubId) ? phone.getSimOperator(ddSubId) : phone.getSimOperator(); boolean isKeepLppProfile = false; if (!TextUtils.isEmpty(mccMnc)) { if (DEBUG) Log.d(TAG, "SIM MCC/MNC is available: " + mccMnc); if (configManager != null) { PersistableBundle b = configManager.getConfig(); PersistableBundle b = SubscriptionManager.isValidSubscriptionId(ddSubId) ? configManager.getConfigForSubId(ddSubId) : null; if (b != null) { isKeepLppProfile = b.getBoolean(CarrierConfigManager.Gps.KEY_PERSIST_LPP_MODE_BOOL); Loading @@ -539,7 +532,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements SystemProperties.set(GnssConfiguration.LPP_PROFILE, ""); } reloadGpsProperties(); mNIHandler.setSuplEsEnabled(mSuplEsEnabled); } else { if (DEBUG) Log.d(TAG, "SIM MCC/MNC is still not available"); } Loading Loading @@ -577,9 +569,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements mC2KServerPort = mGnssConfiguration.getC2KPort(TCP_MIN_PORT); mNIHandler.setEmergencyExtensionSeconds(mGnssConfiguration.getEsExtensionSec()); mSuplEsEnabled = mGnssConfiguration.getSuplEs(0) == 1; mNIHandler.setSuplEsEnabled(mSuplEsEnabled); if (mGnssVisibilityControl != null) { mGnssVisibilityControl.updateProxyApps(mGnssConfiguration.getProxyApps()); mGnssVisibilityControl.setEsNotify(mGnssConfiguration.getEsNotify(0)); mGnssVisibilityControl.onConfigurationUpdated(mGnssConfiguration); } } Loading Loading @@ -1892,28 +1884,34 @@ public class GnssLocationProvider extends AbstractLocationProvider implements TelephonyManager phone = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); int type = AGPS_SETID_TYPE_NONE; String data = ""; String setId = null; int ddSubId = SubscriptionManager.getDefaultDataSubscriptionId(); if ((flags & AGPS_RIL_REQUEST_SETID_IMSI) == AGPS_RIL_REQUEST_SETID_IMSI) { String data_temp = phone.getSubscriberId(); if (data_temp == null) { // This means the framework does not have the SIM card ready. } else { if (SubscriptionManager.isValidSubscriptionId(ddSubId)) { setId = phone.getSubscriberId(ddSubId); } if (setId == null) { setId = phone.getSubscriberId(); } if (setId != null) { // This means the framework has the SIM card. data = data_temp; type = AGPS_SETID_TYPE_IMSI; } } else if ((flags & AGPS_RIL_REQUEST_SETID_MSISDN) == AGPS_RIL_REQUEST_SETID_MSISDN) { String data_temp = phone.getLine1Number(); if (data_temp == null) { // This means the framework does not have the SIM card ready. } else { if (SubscriptionManager.isValidSubscriptionId(ddSubId)) { setId = phone.getLine1Number(ddSubId); } if (setId == null) { setId = phone.getLine1Number(); } if (setId != null) { // This means the framework has the SIM card. data = data_temp; type = AGPS_SETID_TYPE_MSISDN; } } native_agps_set_id(type, data); native_agps_set_id(type, (setId == null) ? "" : setId); } @NativeEntryPoint Loading Loading @@ -2025,9 +2023,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements case UPDATE_LOCATION: handleUpdateLocation((Location) msg.obj); break; case SUBSCRIPTION_OR_CARRIER_CONFIG_CHANGED: subscriptionOrCarrierConfigChanged(mContext); break; case INITIALIZE_HANDLER: handleInitialize(); break; Loading Loading @@ -2066,17 +2061,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements // (this configuration might change in the future based on SIM changes) reloadGpsProperties(); // TODO: When this object "finishes" we should unregister by invoking // SubscriptionManager.getInstance(mContext).unregister // (mOnSubscriptionsChangedListener); // This is not strictly necessary because it will be unregistered if the // notification fails but it is good form. // Register for SubscriptionInfo list changes which is guaranteed // to invoke onSubscriptionsChanged the first time. SubscriptionManager.from(mContext) .addOnSubscriptionsChangedListener(mOnSubscriptionsChangedListener); // listen for events IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(ALARM_WAKEUP); Loading @@ -2086,6 +2070,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements intentFilter.addAction(Intent.ACTION_SCREEN_OFF); intentFilter.addAction(Intent.ACTION_SCREEN_ON); intentFilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED); intentFilter.addAction(TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED); mContext.registerReceiver(mBroadcastReceiver, intentFilter, null, this); mNetworkConnectivityHandler.registerNetworkCallbacks(); Loading Loading @@ -2164,8 +2149,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements return "DOWNLOAD_PSDS_DATA_FINISHED"; case UPDATE_LOCATION: return "UPDATE_LOCATION"; case SUBSCRIPTION_OR_CARRIER_CONFIG_CHANGED: return "SUBSCRIPTION_OR_CARRIER_CONFIG_CHANGED"; case INITIALIZE_HANDLER: return "INITIALIZE_HANDLER"; case REPORT_LOCATION: Loading
services/core/java/com/android/server/location/GnssVisibilityControl.java +16 −10 Original line number Diff line number Diff line Loading @@ -76,7 +76,7 @@ class GnssVisibilityControl { private final GpsNetInitiatedHandler mNiHandler; private boolean mIsGpsEnabled; private volatile boolean mEsNotify; private boolean mEsNotify; // Number of non-framework location access proxy apps is expected to be small (< 5). private static final int ARRAY_MAP_INITIAL_CAPACITY_PROXY_APP_TO_LOCATION_PERMISSIONS = 7; Loading Loading @@ -124,10 +124,6 @@ class GnssVisibilityControl { } } void updateProxyApps(List<String> nfwLocationAccessProxyApps) { runOnHandler(() -> handleUpdateProxyApps(nfwLocationAccessProxyApps)); } void reportNfwNotification(String proxyAppPackageName, byte protocolStack, String otherProtocolStackName, byte requestor, String requestorId, byte responseType, boolean inEmergencyMode, boolean isCachedLocation) { Loading @@ -136,15 +132,25 @@ class GnssVisibilityControl { requestor, requestorId, responseType, inEmergencyMode, isCachedLocation))); } void setEsNotify(int esNotifyConfig) { if (esNotifyConfig != ES_NOTIFY_NONE && esNotifyConfig != ES_NOTIFY_ALL) { void onConfigurationUpdated(GnssConfiguration configuration) { // The configuration object must be accessed only in the caller thread and not in mHandler. List<String> nfwLocationAccessProxyApps = configuration.getProxyApps(); int esNotify = configuration.getEsNotify(ES_NOTIFY_NONE); runOnHandler(() -> { setEsNotify(esNotify); handleUpdateProxyApps(nfwLocationAccessProxyApps); }); } private void setEsNotify(int esNotify) { if (esNotify != ES_NOTIFY_NONE && esNotify != ES_NOTIFY_ALL) { Log.e(TAG, "Config parameter " + GnssConfiguration.CONFIG_ES_NOTIFY_INT + " is set to invalid value: " + esNotifyConfig + " is set to invalid value: " + esNotify + ". Using default value: " + ES_NOTIFY_NONE); esNotifyConfig = ES_NOTIFY_NONE; esNotify = ES_NOTIFY_NONE; } mEsNotify = (esNotifyConfig == ES_NOTIFY_ALL); mEsNotify = (esNotify == ES_NOTIFY_ALL); } private void handleInitialize() { Loading