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

Commit beff33a3 authored by Soonil Nagarkar's avatar Soonil Nagarkar Committed by Android (Google) Code Review
Browse files

Merge "Restore GpsStatus listeners" into qt-dev

parents fedd2455 fc7d3bc8
Loading
Loading
Loading
Loading
+85 −21
Original line number Diff line number Diff line
@@ -82,6 +82,8 @@ public class LocationManager {
            new ArrayMap<>();
    private final ArrayMap<OnNmeaMessageListener, GnssStatusListenerTransport> mGnssNmeaListeners =
            new ArrayMap<>();
    private final ArrayMap<GpsStatus.Listener, GnssStatusListenerTransport> mGpsStatusListeners =
            new ArrayMap<>();
    // volatile + GnssStatus final-fields pattern to avoid a partially published object
    private volatile GnssStatus mGnssStatus;
    private int mTimeToFirstFix;
@@ -1703,6 +1705,33 @@ public class LocationManager {
            mNmeaBuffer = new ArrayList<>();
        }

        GnssStatusListenerTransport(GpsStatus.Listener listener, Handler handler) {
            mGnssHandler = new GnssHandler(handler);
            mNmeaBuffer = null;
            mGnssCallback = listener != null ? new GnssStatus.Callback() {
                @Override
                public void onStarted() {
                    listener.onGpsStatusChanged(GpsStatus.GPS_EVENT_STARTED);
                }

                @Override
                public void onStopped() {
                    listener.onGpsStatusChanged(GpsStatus.GPS_EVENT_STOPPED);
                }

                @Override
                public void onFirstFix(int ttff) {
                    listener.onGpsStatusChanged(GpsStatus.GPS_EVENT_FIRST_FIX);
                }

                @Override
                public void onSatelliteStatusChanged(GnssStatus status) {
                    listener.onGpsStatusChanged(GpsStatus.GPS_EVENT_SATELLITE_STATUS);
                }
            } : null;
            mGnssNmeaListener = null;
        }

        @Override
        public void onGnssStarted() {
            if (mGnssCallback != null) {
@@ -1763,7 +1792,22 @@ public class LocationManager {
    @Deprecated
    @RequiresPermission(ACCESS_FINE_LOCATION)
    public boolean addGpsStatusListener(GpsStatus.Listener listener) {
        return false;
        boolean result;

        if (mGpsStatusListeners.get(listener) != null) {
            return true;
        }
        try {
            GnssStatusListenerTransport transport = new GnssStatusListenerTransport(listener, null);
            result = mService.registerGnssStatusCallback(transport, mContext.getPackageName());
            if (result) {
                mGpsStatusListeners.put(listener, transport);
            }
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }

        return result;
    }

    /**
@@ -1773,7 +1817,16 @@ public class LocationManager {
     * @deprecated use {@link #unregisterGnssStatusCallback(GnssStatus.Callback)} instead.
     */
    @Deprecated
    public void removeGpsStatusListener(GpsStatus.Listener listener) {}
    public void removeGpsStatusListener(GpsStatus.Listener listener) {
        try {
            GnssStatusListenerTransport transport = mGpsStatusListeners.remove(listener);
            if (transport != null) {
                mService.unregisterGnssStatusCallback(transport);
            }
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /**
     * Registers a GNSS status callback.
@@ -1803,8 +1856,8 @@ public class LocationManager {
    public boolean registerGnssStatusCallback(
            @NonNull GnssStatus.Callback callback, @Nullable Handler handler) {
        boolean result;
        synchronized (mGnssStatusListeners) {
            if (mGnssStatusListeners.get(callback) != null) {
            // listener is already registered
                return true;
            }
            try {
@@ -1817,6 +1870,7 @@ public class LocationManager {
            } catch (RemoteException e) {
                throw e.rethrowFromSystemServer();
            }
        }

        return result;
    }
@@ -1827,6 +1881,7 @@ public class LocationManager {
     * @param callback GNSS status callback object to remove
     */
    public void unregisterGnssStatusCallback(@NonNull GnssStatus.Callback callback) {
        synchronized (mGnssStatusListeners) {
            try {
                GnssStatusListenerTransport transport = mGnssStatusListeners.remove(callback);
                if (transport != null) {
@@ -1836,6 +1891,7 @@ public class LocationManager {
                throw e.rethrowFromSystemServer();
            }
        }
    }

    /**
     * Adds an NMEA listener.
@@ -2106,7 +2162,15 @@ public class LocationManager {
    @Deprecated
    @RequiresPermission(ACCESS_FINE_LOCATION)
    public @Nullable GpsStatus getGpsStatus(@Nullable GpsStatus status) {
        return null;
        if (status == null) {
            status = new GpsStatus();
        }
        // When mGnssStatus is null, that means that this method is called outside
        // onGpsStatusChanged().  Return an empty status to maintain backwards compatibility.
        if (mGnssStatus != null) {
            status.setStatus(mGnssStatus, mTimeToFirstFix);
        }
        return status;
    }

    /**
+2 −2

File changed.

Contains only whitespace changes.