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

Commit b0419da3 authored by Yu-Han Yang's avatar Yu-Han Yang Committed by Android (Google) Code Review
Browse files

Merge "Remove unnecessary locking in GnssLocationProvider" into qt-dev

parents e097b074 76f99953
Loading
Loading
Loading
Loading
+68 −65
Original line number Diff line number Diff line
@@ -311,8 +311,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
    private final ExponentialBackOff mPsdsBackOff = new ExponentialBackOff(RETRY_INTERVAL,
            MAX_RETRY_INTERVAL);

    // true if we are enabled, protected by this
    private boolean mEnabled;
    // True if we are enabled
    @GuardedBy("mLock")
    private boolean mGpsEnabled;

    private boolean mShutdown;

@@ -406,6 +407,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
    private final static String WAKELOCK_KEY = "GnssLocationProvider";
    private final PowerManager.WakeLock mWakeLock;
    private static final String DOWNLOAD_EXTRA_WAKELOCK_KEY = "GnssLocationProviderPsdsDownload";
    @GuardedBy("mLock")
    private final PowerManager.WakeLock mDownloadPsdsWakeLock;

    // Alarms
@@ -517,7 +519,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
        boolean isKeepLppProfile = false;
        if (!TextUtils.isEmpty(mccMnc)) {
            if (DEBUG) Log.d(TAG, "SIM MCC/MNC is available: " + mccMnc);
            synchronized (mLock) {
            if (configManager != null) {
                PersistableBundle b = configManager.getConfig();
                if (b != null) {
@@ -539,7 +540,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
            }
            reloadGpsProperties();
            mNIHandler.setSuplEsEnabled(mSuplEsEnabled);
            }
        } else {
            if (DEBUG) Log.d(TAG, "SIM MCC/MNC is still not available");
        }
@@ -636,14 +636,14 @@ public class GnssLocationProvider extends AbstractLocationProvider implements

            @Override
            protected boolean isGpsEnabled() {
                return isEnabled();
                return GnssLocationProvider.this.isGpsEnabled();
            }
        };

        mGnssMeasurementsProvider = new GnssMeasurementsProvider(mContext, mHandler) {
            @Override
            protected boolean isGpsEnabled() {
                return isEnabled();
                return GnssLocationProvider.this.isGpsEnabled();
            }
        };

@@ -652,7 +652,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
        mGnssNavigationMessageProvider = new GnssNavigationMessageProvider(mContext, mHandler) {
            @Override
            protected boolean isGpsEnabled() {
                return isEnabled();
                return GnssLocationProvider.this.isGpsEnabled();
            }
        };

@@ -829,8 +829,10 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
        }
        mDownloadPsdsDataPending = STATE_DOWNLOADING;

        synchronized (mLock) {
            // hold wake lock while task runs
            mDownloadPsdsWakeLock.acquire(DOWNLOAD_PSDS_DATA_TIMEOUT_MS);
        }
        Log.i(TAG, "WakeLock acquired by handleDownloadPsdsData()");
        AsyncTask.THREAD_POOL_EXECUTOR.execute(() -> {
            GpsPsdsDownloader psdsDownloader = new GpsPsdsDownloader(
@@ -913,14 +915,19 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
        return GPS_POSITION_MODE_STANDALONE;
    }

    @GuardedBy("mLock")
    private void handleEnableLocked() {
        if (DEBUG) Log.d(TAG, "handleEnableLocked");
    private void setGpsEnabled(boolean enabled) {
        synchronized (mLock) {
            mGpsEnabled = enabled;
        }
    }

    private void handleEnable() {
        if (DEBUG) Log.d(TAG, "handleEnable");

        boolean inited = native_init();

        if (inited) {
            mEnabled = true;
            setGpsEnabled(true);
            mSupportsPsds = native_supports_psds();

            // TODO: remove the following native calls if we can make sure they are redundant.
@@ -937,26 +944,25 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
            mGnssNavigationMessageProvider.onGpsEnabledChanged();
            mGnssBatchingProvider.enable();
            if (mGnssVisibilityControl != null) {
                mGnssVisibilityControl.onGpsEnabledChanged(mEnabled);
                mGnssVisibilityControl.onGpsEnabledChanged(/* isEnabled= */true);
            }
        } else {
            mEnabled = false;
            setGpsEnabled(false);
            Log.w(TAG, "Failed to enable location provider");
        }
    }

    @GuardedBy("mLock")
    private void handleDisableLocked() {
        if (DEBUG) Log.d(TAG, "handleDisableLocked");
    private void handleDisable() {
        if (DEBUG) Log.d(TAG, "handleDisable");

        mEnabled = false;
        setGpsEnabled(false);
        updateClientUids(new WorkSource());
        stopNavigating();
        mAlarmManager.cancel(mWakeupIntent);
        mAlarmManager.cancel(mTimeoutIntent);

        if (mGnssVisibilityControl != null) {
            mGnssVisibilityControl.onGpsEnabledChanged(mEnabled);
            mGnssVisibilityControl.onGpsEnabledChanged(/* isEnabled= */ false);
        }
        mGnssBatchingProvider.disable();
        // do this before releasing wakelock
@@ -967,7 +973,6 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
    }

    private void updateEnabled() {
        synchronized (mLock) {
        // Generally follow location setting
        boolean enabled = mContext.getSystemService(LocationManager.class).isLocationEnabled();

@@ -981,21 +986,20 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
        // ... and, finally, disable anyway, if device is being shut down
        enabled &= !mShutdown;

            if (enabled == mEnabled) {
        if (enabled == isGpsEnabled()) {
            return;
        }

        if (enabled) {
                handleEnableLocked();
            handleEnable();
        } else {
                handleDisableLocked();
            }
            handleDisable();
        }
    }

    public boolean isEnabled() {
    private boolean isGpsEnabled() {
        synchronized (mLock) {
            return mEnabled;
            return mGpsEnabled;
        }
    }

@@ -1036,7 +1040,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
        }

        if (DEBUG) Log.d(TAG, "setRequest " + mProviderRequest);
        if (mProviderRequest.reportLocation && isEnabled()) {
        if (mProviderRequest.reportLocation && isGpsEnabled()) {
            // update client uids
            updateClientUids(mWorkSource);

@@ -1598,10 +1602,9 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
        if (DEBUG) Log.d(TAG, "reportGnssServiceDied");
        mHandler.post(() -> {
            setupNativeGnssService(/* reinitializeGnssServiceHandle = */ true);
            if (isEnabled()) {
                synchronized (mLock) {
                    mEnabled = false;
                }
            if (isGpsEnabled()) {
                setGpsEnabled(false);

                updateEnabled();

                // resend configuration into the restarted HAL service.
@@ -1809,7 +1812,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
                    /* requestorIdEncoding= */ 0,
                    /* textEncoding= */ 0,
                    mSuplEsEnabled,
                    isEnabled(),
                    isGpsEnabled(),
                    userResponse);

            return true;
@@ -1875,7 +1878,7 @@ public class GnssLocationProvider extends AbstractLocationProvider implements
                notification.requestorIdEncoding,
                notification.textEncoding,
                mSuplEsEnabled,
                isEnabled(),
                isGpsEnabled(),
                /* userResponse= */ 0);
    }