Add GnssAntennaInfo framework APIs

Test: End to end test: run "atest GnssAntennaInfoRegistrationTest" on cuttlefish and watch "adb logcat | grep -i GnssAntennaInfo". Other tests:  atest GnssAntennaInfoTest, atest GnssAntennaInfoProviderTest, atest GnssManagerServiceTest, atest VtsHalGnssV2_1TargetTest, atest LocationManagerFineTest.
Bug:124556515
Change-Id: I70e4014dd3959b0570c35bd2aa8bb839ef167d70
This commit is contained in:
Sasha Kuznetsov
2020-01-16 14:02:53 -08:00
parent 0b58264796
commit dcbeb75fc1
16 changed files with 1689 additions and 5 deletions

View File

@@ -278,6 +278,8 @@ public class LocationManager {
new GnssMeasurementsListenerManager();
private final GnssNavigationMessageListenerManager mGnssNavigationMessageListenerTransport =
new GnssNavigationMessageListenerManager();
private final GnssAntennaInfoListenerManager mGnssAntennaInfoListenerManager =
new GnssAntennaInfoListenerManager();
/**
* @hide
@@ -2198,6 +2200,41 @@ public class LocationManager {
}
}
/**
* Registers a Gnss Antenna Info callback.
*
* @param executor the executor that the callback runs on.
* @param callback a {@link GnssAntennaInfo.Callback} object to register.
* @return {@code true} if the callback was added successfully, {@code false} otherwise.
*
* @throws IllegalArgumentException if executor is null
* @throws IllegalArgumentException if callback is null
* @throws SecurityException if the ACCESS_FINE_LOCATION permission is not present
*/
@RequiresPermission(ACCESS_FINE_LOCATION)
public boolean registerAntennaInfoCallback(
@NonNull @CallbackExecutor Executor executor,
@NonNull GnssAntennaInfo.Callback callback) {
try {
return mGnssAntennaInfoListenerManager.addListener(callback, executor);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/**
* Unregisters a GNSS Antenna Info callback.
*
* @param callback a {@link GnssAntennaInfo.Callback} object to remove.
*/
public void unregisterAntennaInfoCallback(@NonNull GnssAntennaInfo.Callback callback) {
try {
mGnssAntennaInfoListenerManager.removeListener(callback);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
/**
* No-op method to keep backward-compatibility.
*
@@ -2929,6 +2966,48 @@ public class LocationManager {
}
}
private class GnssAntennaInfoListenerManager extends
AbstractListenerManager<GnssAntennaInfo.Callback> {
@Nullable
private IGnssAntennaInfoListener mListenerTransport;
@Override
protected boolean registerService() throws RemoteException {
Preconditions.checkState(mListenerTransport == null);
GnssAntennaInfoListener transport = new GnssAntennaInfoListener();
if (mService.addGnssAntennaInfoListener(transport, mContext.getPackageName(),
mContext.getFeatureId(), "gnss antenna info callback")) {
mListenerTransport = transport;
return true;
} else {
return false;
}
}
@Override
protected void unregisterService() throws RemoteException {
Preconditions.checkState(mListenerTransport != null);
mService.removeGnssAntennaInfoListener(mListenerTransport);
mListenerTransport = null;
}
private class GnssAntennaInfoListener extends IGnssAntennaInfoListener.Stub {
@Override
public void onGnssAntennaInfoReceived(final List<GnssAntennaInfo> gnssAntennaInfos) {
execute((callback) -> callback.onGnssAntennaInfoReceived(gnssAntennaInfos));
}
@Override
public void onStatusChanged(int status) {
execute((listener) -> listener.onStatusChanged(status));
}
}
}
private class BatchedLocationCallbackManager extends
AbstractListenerManager<BatchedLocationCallback> {
@@ -2941,7 +3020,7 @@ public class LocationManager {
BatchedLocationCallback transport = new BatchedLocationCallback();
if (mService.addGnssBatchingCallback(transport, mContext.getPackageName(),
mContext.getFeatureId(), "batched location callback")) {
mContext.getFeatureId(), "batched location callback")) {
mListenerTransport = transport;
return true;
} else {