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

Commit cc163bab authored by Yu-Han Yang's avatar Yu-Han Yang
Browse files

Remove indoorProbability from NLP extras before delivering to clients

Bug: 176905795
Test: on device
Change-Id: I56f0a2f117acfa9971222980acc7ed9f273da820
parent 77ff851a
Loading
Loading
Loading
Loading
+32 −15
Original line number Diff line number Diff line
@@ -91,6 +91,10 @@ public abstract class LocationProviderBase {
     */
    public static final String FUSED_PROVIDER = LocationManager.FUSED_PROVIDER;

    private static final String EXTRA_KEY_COARSE_LOCATION = "coarseLocation";
    private static final String EXTRA_KEY_NO_GPS_LOCATION = "noGPSLocation";
    private static final String EXTRA_KEY_INDOOR_PROB = "indoorProbability";

    final String mTag;
    @Nullable final String mPackageName;
    @Nullable final String mAttributionTag;
@@ -257,21 +261,7 @@ public abstract class LocationProviderBase {
    public void reportLocation(LocationResult locationResult) {
        ILocationProviderManager manager = mManager;
        if (manager != null) {
            locationResult = locationResult.map(location -> {
                // remove deprecated extras to save on serialization costs
                Bundle extras = location.getExtras();
                if (extras != null && (extras.containsKey("noGPSLocation")
                        || extras.containsKey("coarseLocation"))) {
                    location = new Location(location);
                    extras = location.getExtras();
                    extras.remove("noGPSLocation");
                    extras.remove("coarseLocation");
                    if (extras.isEmpty()) {
                        location.setExtras(null);
                    }
                }
                return location;
            });
            locationResult = locationResult.map(this::cleanUpExtras);

            try {
                manager.onReportLocation(locationResult);
@@ -283,6 +273,33 @@ public abstract class LocationProviderBase {
        }
    }

    /**
     * Remove deprecated/unnecessary extras to save on serialization costs.
     *
     * {@link #EXTRA_KEY_NO_GPS_LOCATION} and {@link #EXTRA_KEY_COARSE_LOCATION} are deprecated.
     *
     * {@link #EXTRA_KEY_INDOOR_PROB} should only be used in the framework.
     */
    private Location cleanUpExtras(Location location) {
        Bundle extras = location.getExtras();
        if (extras == null) {
            return location;
        }
        if (extras.containsKey(EXTRA_KEY_NO_GPS_LOCATION)
                || extras.containsKey(EXTRA_KEY_COARSE_LOCATION)
                || extras.containsKey(EXTRA_KEY_INDOOR_PROB)) {
            location = new Location(location);
            extras = location.getExtras();
            extras.remove(EXTRA_KEY_NO_GPS_LOCATION);
            extras.remove(EXTRA_KEY_COARSE_LOCATION);
            extras.remove(EXTRA_KEY_INDOOR_PROB);
            if (extras.isEmpty()) {
                location.setExtras(null);
            }
        }
        return location;
    }

    protected void onInit() {
        // call once so that providers designed for APIs pre-Q are not broken
        onEnable();