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

Commit 15c8bf67 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add LocationManager#registerProviderRequestListener" into sc-dev

parents b610667b 72a25122
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -4666,6 +4666,7 @@ package android.location {
    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public boolean isProviderPackage(@Nullable String, @NonNull String, @Nullable String);
    method @RequiresPermission(android.Manifest.permission.READ_DEVICE_CONFIG) public boolean isProviderPackage(@Nullable String, @NonNull String, @Nullable String);
    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.UPDATE_APP_OPS_STATS}) public boolean registerGnssBatchedLocationCallback(long, boolean, @NonNull android.location.BatchedLocationCallback, @Nullable android.os.Handler);
    method @Deprecated @RequiresPermission(allOf={android.Manifest.permission.LOCATION_HARDWARE, android.Manifest.permission.UPDATE_APP_OPS_STATS}) public boolean registerGnssBatchedLocationCallback(long, boolean, @NonNull android.location.BatchedLocationCallback, @Nullable android.os.Handler);
    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull android.location.GnssRequest, @NonNull java.util.concurrent.Executor, @NonNull android.location.GnssMeasurementsEvent.Callback);
    method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull android.location.GnssRequest, @NonNull java.util.concurrent.Executor, @NonNull android.location.GnssMeasurementsEvent.Callback);
    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public boolean registerProviderRequestListener(@NonNull java.util.concurrent.Executor, @NonNull android.location.provider.ProviderRequest.Listener);
    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull java.util.concurrent.Executor, @NonNull android.location.LocationListener);
    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull java.util.concurrent.Executor, @NonNull android.location.LocationListener);
    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull android.app.PendingIntent);
    method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@Nullable android.location.LocationRequest, @NonNull android.app.PendingIntent);
@@ -4674,6 +4675,7 @@ package android.location {
    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setLocationEnabledForUser(boolean, @NonNull android.os.UserHandle);
    method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setLocationEnabledForUser(boolean, @NonNull android.os.UserHandle);
    method @Deprecated @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean setProviderEnabledForUser(@NonNull String, boolean, @NonNull android.os.UserHandle);
    method @Deprecated @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean setProviderEnabledForUser(@NonNull String, boolean, @NonNull android.os.UserHandle);
    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public boolean unregisterGnssBatchedLocationCallback(@NonNull android.location.BatchedLocationCallback);
    method @Deprecated @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public boolean unregisterGnssBatchedLocationCallback(@NonNull android.location.BatchedLocationCallback);
    method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void unregisterProviderRequestListener(@NonNull android.location.provider.ProviderRequest.Listener);
  }
  }
  public final class LocationRequest implements android.os.Parcelable {
  public final class LocationRequest implements android.os.Parcelable {
@@ -4823,6 +4825,10 @@ package android.location.provider {
    method @NonNull public android.location.provider.ProviderRequest.Builder setWorkSource(@NonNull android.os.WorkSource);
    method @NonNull public android.location.provider.ProviderRequest.Builder setWorkSource(@NonNull android.os.WorkSource);
  }
  }
  public static interface ProviderRequest.Listener {
    method public void onProviderRequestChanged(@NonNull String, @NonNull android.location.provider.ProviderRequest);
  }
}
}
package android.media {
package android.media {
+4 −0
Original line number Original line Diff line number Diff line
@@ -36,6 +36,7 @@ import android.location.LastLocationRequest;
import android.location.Location;
import android.location.Location;
import android.location.LocationRequest;
import android.location.LocationRequest;
import android.location.LocationTime;
import android.location.LocationTime;
import android.location.provider.IProviderRequestListener;
import android.location.provider.ProviderProperties;
import android.location.provider.ProviderProperties;
import android.os.Bundle;
import android.os.Bundle;
import android.os.ICancellationSignal;
import android.os.ICancellationSignal;
@@ -91,6 +92,9 @@ interface ILocationManager
    void addGnssNavigationMessageListener(in IGnssNavigationMessageListener listener, String packageName, @nullable String attributionTag);
    void addGnssNavigationMessageListener(in IGnssNavigationMessageListener listener, String packageName, @nullable String attributionTag);
    void removeGnssNavigationMessageListener(in IGnssNavigationMessageListener listener);
    void removeGnssNavigationMessageListener(in IGnssNavigationMessageListener listener);


    void addProviderRequestListener(in IProviderRequestListener listener);
    void removeProviderRequestListener(in IProviderRequestListener listener);

    int getGnssBatchSize();
    int getGnssBatchSize();
    void startGnssBatch(long periodNanos, in ILocationListener listener, String packageName, @nullable String attributionTag, @nullable String listenerId);
    void startGnssBatch(long periodNanos, in ILocationListener listener, String packageName, @nullable String attributionTag, @nullable String listenerId);
    void flushGnssBatch();
    void flushGnssBatch();
+83 −0
Original line number Original line Diff line number Diff line
@@ -49,7 +49,10 @@ import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.location.provider.IProviderRequestListener;
import android.location.provider.ProviderProperties;
import android.location.provider.ProviderProperties;
import android.location.provider.ProviderRequest;
import android.location.provider.ProviderRequest.Listener;
import android.os.Build;
import android.os.Build;
import android.os.Bundle;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.CancellationSignal;
@@ -436,6 +439,9 @@ public class LocationManager {
                new GnssNavigationTransportManager();
                new GnssNavigationTransportManager();
    }
    }


    private static final ProviderRequestTransportManager sProviderRequestListeners =
            new ProviderRequestTransportManager();

    private final Context mContext;
    private final Context mContext;
    private final ILocationManager mService;
    private final ILocationManager mService;


@@ -2771,6 +2777,37 @@ public class LocationManager {
        GnssLazyLoader.sGnssNavigationListeners.removeListener(callback);
        GnssLazyLoader.sGnssNavigationListeners.removeListener(callback);
    }
    }


    /**
     * Registers a {@link ProviderRequest.Listener} to all providers.
     *
     * @param executor the executor that the callback runs on
     * @param listener the listener to register
     * @return {@code true} always
     * @hide
     */
    @SystemApi
    @RequiresPermission(Manifest.permission.LOCATION_HARDWARE)
    public boolean registerProviderRequestListener(
            @NonNull @CallbackExecutor Executor executor,
            @NonNull Listener listener) {
        sProviderRequestListeners.addListener(listener,
                new ProviderRequestTransport(executor, listener));
        return true;
    }

    /**
     * Unregisters a {@link ProviderRequest.Listener}.
     *
     * @param listener the listener to remove.
     * @hide
     */
    @SystemApi
    @RequiresPermission(Manifest.permission.LOCATION_HARDWARE)
    public void unregisterProviderRequestListener(
            @NonNull Listener listener) {
        sProviderRequestListeners.removeListener(listener);
    }

    /**
    /**
     * Returns the batch size (in number of Location objects) that are supported by the batching
     * Returns the batch size (in number of Location objects) that are supported by the batching
     * interface.
     * interface.
@@ -2960,6 +2997,22 @@ public class LocationManager {
        }
        }
    }
    }


    private static class ProviderRequestTransportManager extends
            ListenerTransportManager<ProviderRequestTransport> {

        @Override
        protected void registerTransport(ProviderRequestTransport transport)
                throws RemoteException {
            getService().addProviderRequestListener(transport);
        }

        @Override
        protected void unregisterTransport(ProviderRequestTransport transport)
                throws RemoteException {
            getService().removeProviderRequestListener(transport);
        }
    }

    private static class GetCurrentLocationTransport extends ILocationCallback.Stub implements
    private static class GetCurrentLocationTransport extends ILocationCallback.Stub implements
            ListenerExecutor, CancellationSignal.OnCancelListener {
            ListenerExecutor, CancellationSignal.OnCancelListener {


@@ -3359,6 +3412,36 @@ public class LocationManager {
        }
        }
    }
    }


    private static class ProviderRequestTransport extends IProviderRequestListener.Stub
            implements ListenerTransport<ProviderRequest.Listener> {

        private final Executor mExecutor;

        private volatile @Nullable ProviderRequest.Listener mListener;

        ProviderRequestTransport(Executor executor, ProviderRequest.Listener listener) {
            Preconditions.checkArgument(executor != null, "invalid null executor");
            Preconditions.checkArgument(listener != null, "invalid null callback");
            mExecutor = executor;
            mListener = listener;
        }

        @Override
        public void unregister() {
            mListener = null;
        }

        @Override
        public @Nullable ProviderRequest.Listener getListener() {
            return mListener;
        }

        @Override
        public void onProviderRequestChanged(String provider, ProviderRequest request) {
            execute(mExecutor, listener -> listener.onProviderRequestChanged(provider, request));
        }
    }

    private static class BatchedLocationCallbackWrapper implements LocationListener {
    private static class BatchedLocationCallbackWrapper implements LocationListener {


        private final BatchedLocationCallback mCallback;
        private final BatchedLocationCallback mCallback;
+26 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2021, The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.location.provider;

import android.location.provider.ProviderRequest;

/**
 * {@hide}
 */
oneway interface IProviderRequestListener {
    void onProviderRequestChanged(String provider, in ProviderRequest request);
}
+11 −0
Original line number Original line Diff line number Diff line
@@ -53,6 +53,17 @@ public final class ProviderRequest implements Parcelable {
    private final boolean mLocationSettingsIgnored;
    private final boolean mLocationSettingsIgnored;
    private final WorkSource mWorkSource;
    private final WorkSource mWorkSource;


    /**
     * Listener to be invoked when a new request is set to the provider.
     */
    public interface Listener {

        /**
         * Invoked when a new request is set.
         */
        void onProviderRequestChanged(@NonNull String provider, @NonNull ProviderRequest request);
    }

    private ProviderRequest(
    private ProviderRequest(
            long intervalMillis,
            long intervalMillis,
            @Quality int quality,
            @Quality int quality,
Loading