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

Commit 71bcd2aa authored by David Christie's avatar David Christie Committed by Android (Google) Code Review
Browse files

Merge "Add versioning to FLP HAL."

parents 7caa6916 cfc9b6d6
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ import java.util.Iterator;
public final class GeofenceHardwareImpl {
    private static final String TAG = "GeofenceHardwareImpl";
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
    private static final int FIRST_VERSION_WITH_CAPABILITIES = 2;

    private final Context mContext;
    private static GeofenceHardwareImpl sInstance;
@@ -54,6 +55,7 @@ public final class GeofenceHardwareImpl {
    private IFusedGeofenceHardware mFusedService;
    private IGpsGeofenceHardware mGpsService;
    private int mCapabilities;
    private int mVersion = 1;

    private int[] mSupportedMonitorTypes = new int[GeofenceHardware.NUM_MONITORS];

@@ -145,8 +147,10 @@ public final class GeofenceHardwareImpl {
    private void updateFusedHardwareAvailability() {
        boolean fusedSupported;
        try {
            final boolean hasGnnsCapabilities = (mVersion < FIRST_VERSION_WITH_CAPABILITIES)
                    || (mCapabilities & CAPABILITY_GNSS) != 0;
            fusedSupported = (mFusedService != null
                    ? mFusedService.isSupported() && (mCapabilities & CAPABILITY_GNSS) != 0
                    ? mFusedService.isSupported() && hasGnnsCapabilities
                    : false);
        } catch (RemoteException e) {
            Log.e(TAG, "RemoteException calling LocationManagerService");
@@ -177,6 +181,11 @@ public final class GeofenceHardwareImpl {
        updateFusedHardwareAvailability();
    }

    public void setVersion(int version) {
        mVersion = version;
        updateFusedHardwareAvailability();
    }

    public void setFusedGeofenceHardware(IFusedGeofenceHardware service) {
        if(mFusedService == null) {
            mFusedService = service;
+5 −0
Original line number Diff line number Diff line
@@ -121,4 +121,9 @@ interface IFusedLocationHardware {
     * of the locations returned in this call.
     */
    void flushBatchedLocations() = 11;

    /**
     * Returns the version of this FLP HAL implementation.
     */
    int getVersion() = 12;
}
+20 −0
Original line number Diff line number Diff line
@@ -216,6 +216,26 @@ public final class FusedLocationHardware {
        }
    }


    /**
     * Returns the version of the FLP HAL.
     *
     * <p>Version 1 is the initial release.
     * <p>Version 2 adds the ability to use {@link #flushBatchedLocations},
     * {@link FusedLocationHardwareSink#onCapabilities}, and
     * {@link FusedLocationHardwareSink#onStatusChanged}.
     *
     * <p>This method is only available on API 23 or later.  Older APIs have version 1.
     */
    public int getVersion() {
        try {
            return mLocationHardware.getVersion();
        } catch(RemoteException e) {
            Log.e(TAG, "RemoteException at getVersion");
        }
        return 1;
    }

    /*
     * Helper methods and classes
     */
+2 −1
Original line number Diff line number Diff line
@@ -54,7 +54,8 @@ public class FusedLocationHardwareSink {
    /**
     * Called when the status changes in the underlying FLP HAL
     * implementation (the ability to compute location).  This
     * callback will only be made on API 23 or later.
     * callback will only be made on version 2 or later
     * (see {@link FusedLocationHardware#getVersion()}).
     *
     * @param status One of FLP_STATUS_LOCATION_AVAILABLE or
     *               FLP_STATUS_LOCATION_UNAVAILABLE as defined in
+18 −1
Original line number Diff line number Diff line
@@ -42,11 +42,13 @@ import android.util.Log;
 * {@hide}
 */
public class FlpHardwareProvider {
    private static final int FIRST_VERSION_WITH_FLUSH_LOCATIONS = 2;
    private GeofenceHardwareImpl mGeofenceHardwareSink = null;
    private IFusedLocationHardwareSink mLocationSink = null;
    // Capabilities provided by FlpCallbacks
    private boolean mHaveBatchingCapabilities;
    private int mBatchingCapabilities;
    private int mVersion;

    private static FlpHardwareProvider sSingletonInstance = null;

@@ -150,6 +152,11 @@ public class FlpHardwareProvider {
        }
    }

    private void setVersion(int version) {
        mVersion = version;
        getGeofenceHardwareSink().setVersion(version);
    }

    private void maybeSendCapabilities() {
        IFusedLocationHardwareSink sink;
        boolean haveBatchingCapabilities;
@@ -366,7 +373,12 @@ public class FlpHardwareProvider {

        @Override
        public void flushBatchedLocations() {
            if (mVersion >= FIRST_VERSION_WITH_FLUSH_LOCATIONS) {
                nativeFlushBatchedLocations();
            } else {
                Log.wtf(TAG,
                        "Tried to call flushBatchedLocations on an unsupported implementation");
            }
        }

        @Override
@@ -388,6 +400,11 @@ public class FlpHardwareProvider {
        public void injectDeviceContext(int deviceEnabledContext) {
            nativeInjectDeviceContext(deviceEnabledContext);
        }

        @Override
        public int getVersion() {
            return mVersion;
        }
    };

    private final IFusedGeofenceHardware mGeofenceHardwareService =
Loading