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

Commit 36dc9863 authored by Ludovic Barman's avatar Ludovic Barman Committed by Android (Google) Code Review
Browse files

Merge "Population Density Provider: add cache hint" into main

parents 2e785fed 49fe79bc
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -645,7 +645,7 @@ package android.location.provider {
  @FlaggedApi("android.location.flags.population_density_provider") public abstract class PopulationDensityProviderBase {
    ctor public PopulationDensityProviderBase(@NonNull android.content.Context, @NonNull String);
    method @Nullable public final android.os.IBinder getBinder();
    method public abstract void onGetCoarsenedS2Cell(double, double, @NonNull android.os.OutcomeReceiver<long[],java.lang.Throwable>);
    method public abstract void onGetCoarsenedS2Cells(double, double, @IntRange(from=0) int, @NonNull android.os.OutcomeReceiver<long[],java.lang.Throwable>);
    method public abstract void onGetDefaultCoarseningLevel(@NonNull android.os.OutcomeReceiver<java.lang.Integer,java.lang.Throwable>);
    field public static final String ACTION_POPULATION_DENSITY_PROVIDER = "com.android.location.service.PopulationDensityProvider";
  }
+5 −5
Original line number Diff line number Diff line
@@ -35,11 +35,11 @@ oneway interface IPopulationDensityProvider {
    void getDefaultCoarseningLevel(in IS2LevelCallback callback);

    /**
     * Returns a list of IDs of the S2 cells to be used to coarsen a location. The answer should
     * Requests a list of IDs of the S2 cells to be used to coarsen a location. The answer should
     * contain at least one S2 cell, which should contain the requested location. Its level
     * represents the population density. Optionally, additional nearby cells can be also returned,
     * to assist in coarsening nearby locations.
     * represents the population density. Optionally, if numAdditionalCells is greater than 0,
     * additional nearby cells can be also returned, to assist in coarsening nearby locations.
     */
    void getCoarsenedS2Cell(double latitudeDegrees, double longitudeDegrees, in IS2CellIdsCallback
        callback);
    void getCoarsenedS2Cells(double latitudeDegrees, double longitudeDegrees,
        int numAdditionalCells, in IS2CellIdsCallback callback);
}
+13 −11
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.location.provider;

import android.annotation.FlaggedApi;
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SuppressLint;
@@ -89,17 +90,18 @@ public abstract class PopulationDensityProviderBase {
     * Called upon receiving a new request for population density at a specific latitude/longitude,
     * expressed in degrees.
     * The answer is at least one S2CellId corresponding to the coarsening level at the specified
     * location. This must be the first element of the result array. Optionally, additional nearby
     * S2CellIds can be returned. One use for the optional nearby cells is when the client has a
     * local cache that needs to be filled with the local area around a certain latitude/longitude.
     * The callback {@link OutcomeReceiver#onResult} should be called with the result; or, in case
     * an error occurs, {@link OutcomeReceiver#onError} should be called.
     * The callback is single-use, calling more than any one of these two methods throws an
     * AssertionException.
     * location. This must be the first element of the result array. Optionally, if
     * numAdditionalCells is greater than zero, additional nearby S2CellIds can be returned. One use
     * for the optional nearby cells is when the client has a local cache that needs to be filled
     * with the local area around a certain latitude/longitude. The callback
     * {@link OutcomeReceiver#onResult} should be called with the result; or, in case an error
     * occurs, {@link OutcomeReceiver#onError} should be called. The callback is single-use, calling
     * more than any one of these two methods throws an AssertionException.
     *
     * @param callback A single-use callback that either returns S2CellIds, or an error.
     */
    public abstract void onGetCoarsenedS2Cell(double latitudeDegrees, double longitudeDegrees,
    public abstract void onGetCoarsenedS2Cells(double latitudeDegrees, double longitudeDegrees,
            @IntRange(from = 0) int numAdditionalCells,
            @NonNull OutcomeReceiver<long[], Throwable> callback);

    private final class Service extends IPopulationDensityProvider.Stub {
@@ -119,10 +121,10 @@ public abstract class PopulationDensityProviderBase {
        }

        @Override
        public void getCoarsenedS2Cell(double latitudeDegrees, double longitudeDegrees,
                @NonNull IS2CellIdsCallback callback) {
        public void getCoarsenedS2Cells(double latitudeDegrees, double longitudeDegrees,
                int numAdditionalCells, @NonNull IS2CellIdsCallback callback) {
            try {
                onGetCoarsenedS2Cell(latitudeDegrees, longitudeDegrees,
                onGetCoarsenedS2Cells(latitudeDegrees, longitudeDegrees, numAdditionalCells,
                        new SingleUseS2CellIdsCallback(callback));
            } catch (RuntimeException e) {
                // exceptions on one-way binder threads are dropped - move to a different thread
+2 −1
Original line number Diff line number Diff line
@@ -180,7 +180,8 @@ public class LocationFudgerCache {
                Log.e(sTAG, "could not get population density");
            }
        };
        mPopulationDensityProvider.getCoarsenedS2Cell(latitude, longitude, callback);
        mPopulationDensityProvider.getCoarsenedS2Cells(latitude, longitude, MAX_CACHE_SIZE - 1,
                callback);
    }

    /**
+4 −3
Original line number Diff line number Diff line
@@ -96,14 +96,15 @@ public class ProxyPopulationDensityProvider {


    /** Gets the population density at the requested location. */
    public void getCoarsenedS2Cell(double latitudeDegrees, double longitudeDegrees,
              IS2CellIdsCallback callback) {
    public void getCoarsenedS2Cells(double latitudeDegrees, double longitudeDegrees,
              int numAdditionalCells, IS2CellIdsCallback callback) {
        mServiceWatcher.runOnBinder(
                new ServiceWatcher.BinderOperation() {
                    @Override
                    public void run(IBinder binder) throws RemoteException {
                        IPopulationDensityProvider.Stub.asInterface(binder)
                              .getCoarsenedS2Cell(latitudeDegrees, longitudeDegrees, callback);
                                .getCoarsenedS2Cells(latitudeDegrees, longitudeDegrees,
                                      numAdditionalCells, callback);
                    }

                    @Override
Loading