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

Commit 5602538f authored by Michael Bestas's avatar Michael Bestas Committed by Michael Bestas
Browse files

GnssLocationProvider: Implement PSDS periodic download toggle

It can be toggled using the existing Assisted GPS setting
to avoid user confusion.

Change-Id: Ic4c551d1726eac540e47faf214a963ec2adbf7f3
parent e5a16863
Loading
Loading
Loading
Loading
+18 −9
Original line number Diff line number Diff line
@@ -574,7 +574,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
    private void onNetworkAvailable() {
        mNtpTimeHelper.onNetworkAvailable();
        // Download only if supported, (prevents an unnecessary on-boot download)
        if (mSupportsPsds) {
        if (mSupportsPsds && isAssistedGpsEnabled()) {
            synchronized (mLock) {
                for (int psdsType : mPendingDownloadPsdsTypes) {
                    postWithWakeLockHeld(() -> handleDownloadPsdsData(psdsType));
@@ -669,6 +669,11 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
            Log.d(TAG, "handleDownloadPsdsData() called when PSDS not supported");
            return;
        }
        if (!isAssistedGpsEnabled()) {
            // PSDS download disabled by system setting, don't try
            Log.d(TAG, "handleDownloadPsdsData() called when PSDS disabled by system setting");
            return;
        }
        if (!mNetworkConnectivityHandler.isDataNetworkConnected()) {
            // try again when network is up
            synchronized (mLock) {
@@ -1055,7 +1060,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
        } else if ("force_time_injection".equals(command)) {
            requestUtcTime();
        } else if ("force_psds_injection".equals(command)) {
            if (mSupportsPsds) {
            if (mSupportsPsds && isAssistedGpsEnabled()) {
                postWithWakeLockHeld(() -> handleDownloadPsdsData(
                        GnssPsdsDownloader.LONG_TERM_PSDS_SERVER_INDEX));
            }
@@ -1096,16 +1101,10 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
    private void startNavigating() {
        if (!mStarted) {
            if (DEBUG) Log.d(TAG, "startNavigating");
            final Boolean isEmergency = mNIHandler.getInEmergency();
            mTimeToFirstFix = 0;
            mLastFixTime = 0;
            setStarted(true);
            mPositionMode = GNSS_POSITION_MODE_STANDALONE;

            boolean agpsEnabled =
                    (Settings.Global.getInt(mContext.getContentResolver(),
                            Settings.Global.ASSISTED_GPS_ENABLED, 0) != 0) || isEmergency;
            mPositionMode = getSuplMode(agpsEnabled);
            mPositionMode = getSuplMode(isAssistedGpsEnabled());

            if (DEBUG) {
                String mode;
@@ -1606,6 +1605,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
                    "PsdsServerConfigured=" + mGnssConfiguration.isLongTermPsdsServerConfigured());
            pw.println("native internal state: ");
            pw.println("  " + mGnssNative.getInternalState());
            pw.println("isAssistedGpsEnabled=" + isAssistedGpsEnabled());
        }
    }

@@ -1787,4 +1787,13 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
                otherProtocolStackName, requestor, requestorId, responseType, inEmergencyMode,
                isCachedLocation);
    }

    private boolean isAssistedGpsEnabled() {
        final Boolean isEmergency = mNIHandler.getInEmergency();
        if (isEmergency) {
            Log.i(TAG, "Forcing Assisted GPS due to emergency");
        }
        return (Settings.Global.getInt(mContext.getContentResolver(),
                        Settings.Global.ASSISTED_GPS_ENABLED, 0) != 0) || isEmergency;
    }
}