From eba77a86c59ad495865c95ff44d7459b47fb6028 Mon Sep 17 00:00:00 2001 From: Brian Julian Date: Wed, 1 Feb 2023 14:13:45 +0000 Subject: [PATCH] Backports implementation for AltitudeService to T. Test: VtsHalAltitudeServiceTargetTest Bug: 265013616 Change-Id: I793d22fcfdd43c6d8ff2e4be52e3fb4a247fdf84 --- services/Android.bp | 4 + services/core/Android.bp | 1 + .../location/altitude/AltitudeService.java | 94 +++++++++++++++++++ .../java/com/android/server/SystemServer.java | 9 ++ services/manifest_services.xml | 7 ++ 5 files changed, 115 insertions(+) create mode 100644 services/core/java/com/android/server/location/altitude/AltitudeService.java create mode 100644 services/manifest_services.xml diff --git a/services/Android.bp b/services/Android.bp index 0284019f8c132..1750b6731888f 100644 --- a/services/Android.bp +++ b/services/Android.bp @@ -178,6 +178,10 @@ java_library { "service-sdksandbox.stubs.system_server", ], + vintf_fragments: [ + "manifest_services.xml", + ], + // Uncomment to enable output of certain warnings (deprecated, unchecked) //javacflags: ["-Xlint"], } diff --git a/services/core/Android.bp b/services/core/Android.bp index 821927d72428d..6a14deabee4bb 100644 --- a/services/core/Android.bp +++ b/services/core/Android.bp @@ -142,6 +142,7 @@ java_library_static { ], static_libs: [ + "android.frameworks.location.altitude-V1-java", // AIDL "android.hardware.authsecret-V1.0-java", "android.hardware.boot-V1.0-java", // HIDL "android.hardware.boot-V1.1-java", // HIDL diff --git a/services/core/java/com/android/server/location/altitude/AltitudeService.java b/services/core/java/com/android/server/location/altitude/AltitudeService.java new file mode 100644 index 0000000000000..b321e4dfdf260 --- /dev/null +++ b/services/core/java/com/android/server/location/altitude/AltitudeService.java @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2023 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 com.android.server.location.altitude; + +import android.content.Context; +import android.frameworks.location.altitude.AddMslAltitudeToLocationRequest; +import android.frameworks.location.altitude.AddMslAltitudeToLocationResponse; +import android.frameworks.location.altitude.IAltitudeService; +import android.location.Location; +import android.location.altitude.AltitudeConverter; +import android.os.RemoteException; + +import com.android.server.SystemService; + +import java.io.IOException; + +/** + * Manages altitude information exchange through the HAL, e.g., geoid height requests such that + * vendors can perform altitude conversions. + * + * @hide + */ +public class AltitudeService extends IAltitudeService.Stub { + + private final AltitudeConverter mAltitudeConverter = new AltitudeConverter(); + private final Context mContext; + + /** @hide */ + public AltitudeService(Context context) { + mContext = context; + } + + @Override + public AddMslAltitudeToLocationResponse addMslAltitudeToLocation( + AddMslAltitudeToLocationRequest request) throws RemoteException { + Location location = new Location(""); + location.setLatitude(request.latitudeDegrees); + location.setLongitude(request.longitudeDegrees); + location.setAltitude(request.altitudeMeters); + location.setVerticalAccuracyMeters(request.verticalAccuracyMeters); + try { + mAltitudeConverter.addMslAltitudeToLocation(mContext, location); + } catch (IOException e) { + throw new RemoteException(e); + } + + AddMslAltitudeToLocationResponse response = new AddMslAltitudeToLocationResponse(); + response.mslAltitudeMeters = location.getMslAltitudeMeters(); + response.mslAltitudeAccuracyMeters = location.getMslAltitudeAccuracyMeters(); + return response; + } + + @Override + public String getInterfaceHash() { + return IAltitudeService.HASH; + } + + @Override + public int getInterfaceVersion() { + return IAltitudeService.VERSION; + } + + /** @hide */ + public static class Lifecycle extends SystemService { + + private static final String SERVICE_NAME = IAltitudeService.DESCRIPTOR + "/default"; + + private AltitudeService mService; + + public Lifecycle(Context context) { + super(context); + } + + @Override + public void onStart() { + mService = new AltitudeService(getContext()); + publishBinderService(SERVICE_NAME, mService); + } + } +} diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 2f5c533848ed9..87663a5ffbc4d 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -139,6 +139,7 @@ import com.android.server.integrity.AppIntegrityManagerService; import com.android.server.lights.LightsService; import com.android.server.locales.LocaleManagerService; import com.android.server.location.LocationManagerService; +import com.android.server.location.altitude.AltitudeService; import com.android.server.logcat.LogcatManagerService; import com.android.server.media.MediaRouterService; import com.android.server.media.metrics.MediaMetricsManagerService; @@ -2097,6 +2098,14 @@ public final class SystemServer implements Dumpable { } t.traceEnd(); + t.traceBegin("StartAltitudeService"); + try { + mSystemServiceManager.startService(AltitudeService.Lifecycle.class); + } catch (Throwable e) { + reportWtf("starting AltitudeService service", e); + } + t.traceEnd(); + t.traceBegin("StartLocationTimeZoneManagerService"); try { mSystemServiceManager.startService(LOCATION_TIME_ZONE_MANAGER_SERVICE_CLASS); diff --git a/services/manifest_services.xml b/services/manifest_services.xml new file mode 100644 index 0000000000000..76389154a885f --- /dev/null +++ b/services/manifest_services.xml @@ -0,0 +1,7 @@ + + + android.frameworks.location.altitude + 1 + IAltitudeService/default + +