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

Commit 9d9a4d20 authored by Ludovic Barman's avatar Ludovic Barman
Browse files

Location Fudger: Gate behind correct flags

Fixes the current warning: `[FlaggedApi] Method getCoarseningLevel() is a flagged API and should be inside an if (Flags.populationDensityProvider()) check`

In practice, calling the method while the flag is disabled should never happen, as "Flags.populationDensityProvider()" should imply that the cache is null (see the code in the Manager). Yet, it seems bad practice to call an API gated behind a flag without checking this flag, so in essence the warning is correct. Thus this commit should remove a potential footgun if the code in the manager changes.

Tests:
- atest FrameworksMockingServicesTests:LocationFudgerTest
- atest FrameworksMockingServicesTests:LocationFudgerCacheTest

Test: manual atest on Pixel 7 pro (see above)
Flag: android.location.flags.density_based_coarse_locations
Bug: 376198890
Change-Id: I8bfd9c6e4f4921d7e6389f2924b6b3566a8ae07f
parent 93df45a0
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -188,8 +188,8 @@ public class LocationFudger {
        // TODO(b/381204398): To ensure a safe rollout, two algorithms co-exist. The first is the
        // new density-based algorithm, while the second is the traditional coarsening algorithm.
        // Once rollout is done, clean up the unused algorithm.
        if (Flags.densityBasedCoarseLocations() && cacheCopy != null
                && cacheCopy.hasDefaultValue()) {
        if (Flags.populationDensityProvider() && Flags.densityBasedCoarseLocations()
                && cacheCopy != null && cacheCopy.hasDefaultValue()) {
            int level = cacheCopy.getCoarseningLevel(latitude, longitude);
            double[] center = snapToCenterOfS2Cell(latitude, longitude, level);
            latitude = center[S2CellIdUtils.LAT_INDEX];
+24 −1
Original line number Diff line number Diff line
@@ -176,8 +176,28 @@ public class LocationFudgerTest {
    }

    @Test
    public void testDensityBasedCoarsening_ifFeatureIsDisabled_cacheIsNotUsed() {
    public void testDensityBasedCoarsening_ifAnyFlagIsOff1_cacheIsNotUsed() {
        // This feature requires two flags: one for the population density provider (which could
        // be used by various client), and a second one for actually enabling the new coarsening
        // algorithm.
        mSetFlagsRule.disableFlags(Flags.FLAG_DENSITY_BASED_COARSE_LOCATIONS);
        mSetFlagsRule.enableFlags(Flags.FLAG_POPULATION_DENSITY_PROVIDER);
        LocationFudgerCache cache = mock(LocationFudgerCache.class);

        mFudger.setLocationFudgerCache(cache);

        mFudger.createCoarse(createLocation("test", mRandom));

        verify(cache, never()).getCoarseningLevel(anyDouble(), anyDouble());
    }

    @Test
    public void testDensityBasedCoarsening_ifAnyFlagIsOff2_cacheIsNotUsed() {
        // This feature requires two flags: one for the population density provider (which could
        // be used by various client), and a second one for actually enabling the new coarsening
        // algorithm.
        mSetFlagsRule.enableFlags(Flags.FLAG_DENSITY_BASED_COARSE_LOCATIONS);
        mSetFlagsRule.disableFlags(Flags.FLAG_POPULATION_DENSITY_PROVIDER);
        LocationFudgerCache cache = mock(LocationFudgerCache.class);

        mFudger.setLocationFudgerCache(cache);
@@ -190,6 +210,7 @@ public class LocationFudgerTest {
    @Test
    public void testDensityBasedCoarsening_ifFeatureIsEnabledButNoDefaultValue_cacheIsNotUsed() {
        mSetFlagsRule.enableFlags(Flags.FLAG_DENSITY_BASED_COARSE_LOCATIONS);
        mSetFlagsRule.enableFlags(Flags.FLAG_POPULATION_DENSITY_PROVIDER);
        LocationFudgerCache cache = mock(LocationFudgerCache.class);
        doReturn(false).when(cache).hasDefaultValue();

@@ -203,6 +224,7 @@ public class LocationFudgerTest {
    @Test
    public void testDensityBasedCoarsening_ifFeatureIsEnabledAndDefaultIsSet_cacheIsUsed() {
        mSetFlagsRule.enableFlags(Flags.FLAG_DENSITY_BASED_COARSE_LOCATIONS);
        mSetFlagsRule.enableFlags(Flags.FLAG_POPULATION_DENSITY_PROVIDER);
        LocationFudgerCache cache = mock(LocationFudgerCache.class);
        doReturn(true).when(cache).hasDefaultValue();

@@ -223,6 +245,7 @@ public class LocationFudgerTest {
        // location/geometry/S2CellIdUtilsTest.java

        mSetFlagsRule.enableFlags(Flags.FLAG_DENSITY_BASED_COARSE_LOCATIONS);
        mSetFlagsRule.enableFlags(Flags.FLAG_POPULATION_DENSITY_PROVIDER);
        // Arbitrary location in Times Square, NYC
        double[] latLng = new double[] {40.758896, -73.985130};
        int s2Level = 1;