Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 42eaf3b0 authored by Anil Admal's avatar Anil Admal Committed by android-build-merger
Browse files

Merge "Change use of default sub to default data sub in GnssLocationProvider" into qt-dev

am: cf65007b

Change-Id: I49ddfbaff93eb9e9205193ae96c45e98824e89e7
parents ee9a92b4 cf65007b
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -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();
+28 −45
Original line number Diff line number Diff line
@@ -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;
@@ -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;

@@ -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
@@ -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}.
     */
@@ -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);
@@ -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");
        }
@@ -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);
        }
    }

@@ -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
@@ -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;
@@ -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);
@@ -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();
@@ -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:
+16 −10
Original line number Diff line number Diff line
@@ -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;
@@ -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) {
@@ -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() {