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

Commit cf1d8cb3 authored by Mike Lockwood's avatar Mike Lockwood
Browse files

Be tolerant of GPS session and engine on status messages arriving out of order.



BUG: 2366194

Change-Id: I642dacd397202f671adba5a863394438ca62988d
Signed-off-by: default avatarMike Lockwood <lockwood@android.com>
parent 5615ca19
Loading
Loading
Loading
Loading
+28 −5
Original line number Diff line number Diff line
@@ -183,6 +183,9 @@ public class GpsLocationProvider extends ILocationProvider.Stub {
    // true if GPS is navigating
    private boolean mNavigating;

    // true if GPS engine is on
    private boolean mEngineOn;
    
    // requested frequency of fixes, in seconds
    private int mFixInterval = 1;

@@ -556,13 +559,17 @@ public class GpsLocationProvider extends ILocationProvider.Stub {
            mNetworkThread = null;
        }

        // do this before releasing wakelock
        native_cleanup();

        // The GpsEventThread does not wait for the GPS to shutdown
        // so we need to report the GPS_STATUS_ENGINE_OFF event here
        if (mNavigating) {
            reportStatus(GPS_STATUS_SESSION_END);
        }
        if (mEngineOn) {
            reportStatus(GPS_STATUS_ENGINE_OFF);
        }

        native_cleanup();
    }

    public boolean isEnabled() {
@@ -874,9 +881,24 @@ public class GpsLocationProvider extends ILocationProvider.Stub {

        synchronized(mListeners) {
            boolean wasNavigating = mNavigating;
            mNavigating = (status == GPS_STATUS_SESSION_BEGIN);

            if (mNavigating && !mWakeLock.isHeld()) {
            switch (status) {
                case GPS_STATUS_SESSION_BEGIN:
                    mNavigating = true;
                    break;
                case GPS_STATUS_SESSION_END:
                    mNavigating = false;
                    break;
                case GPS_STATUS_ENGINE_ON:
                    mEngineOn = true;
                    break;
                case GPS_STATUS_ENGINE_OFF:
                    mEngineOn = false;
                    break;
            }

            // beware, the events can come out of order
            if ((mNavigating || mEngineOn) && !mWakeLock.isHeld()) {
                if (DEBUG) Log.d(TAG, "Acquiring wakelock");
                 mWakeLock.acquire();
            }
@@ -919,7 +941,8 @@ public class GpsLocationProvider extends ILocationProvider.Stub {
                mContext.sendBroadcast(intent);
            }

            if (status == GPS_STATUS_ENGINE_OFF && mWakeLock.isHeld()) {
            // beware, the events can come out of order
            if (!mNavigating && !mEngineOn && mWakeLock.isHeld()) {
                if (DEBUG) Log.d(TAG, "Releasing wakelock");
                mWakeLock.release();
            }