Loading services/core/java/com/android/server/location/gnss/hal/GnssNative.java +48 −6 Original line number Diff line number Diff line Loading @@ -623,8 +623,38 @@ public class GnssNative { public void injectLocation(Location location) { Preconditions.checkState(mRegistered); if (location.hasAccuracy()) { mGnssHal.injectLocation(location.getLatitude(), location.getLongitude(), location.getAccuracy()); int gnssLocationFlags = GNSS_LOCATION_HAS_LAT_LONG | (location.hasAltitude() ? GNSS_LOCATION_HAS_ALTITUDE : 0) | (location.hasSpeed() ? GNSS_LOCATION_HAS_SPEED : 0) | (location.hasBearing() ? GNSS_LOCATION_HAS_BEARING : 0) | (location.hasAccuracy() ? GNSS_LOCATION_HAS_HORIZONTAL_ACCURACY : 0) | (location.hasVerticalAccuracy() ? GNSS_LOCATION_HAS_VERTICAL_ACCURACY : 0) | (location.hasSpeedAccuracy() ? GNSS_LOCATION_HAS_SPEED_ACCURACY : 0) | (location.hasBearingAccuracy() ? GNSS_LOCATION_HAS_BEARING_ACCURACY : 0); double latitudeDegrees = location.getLatitude(); double longitudeDegrees = location.getLongitude(); double altitudeMeters = location.getAltitude(); float speedMetersPerSec = location.getSpeed(); float bearingDegrees = location.getBearing(); float horizontalAccuracyMeters = location.getAccuracy(); float verticalAccuracyMeters = location.getVerticalAccuracyMeters(); float speedAccuracyMetersPerSecond = location.getSpeedAccuracyMetersPerSecond(); float bearingAccuracyDegrees = location.getBearingAccuracyDegrees(); long timestamp = location.getTime(); int elapsedRealtimeFlags = GNSS_REALTIME_HAS_TIMESTAMP_NS | (location.hasElapsedRealtimeUncertaintyNanos() ? GNSS_REALTIME_HAS_TIME_UNCERTAINTY_NS : 0); long elapsedRealtimeNanos = location.getElapsedRealtimeNanos(); double elapsedRealtimeUncertaintyNanos = location.getElapsedRealtimeUncertaintyNanos(); mGnssHal.injectLocation(gnssLocationFlags, latitudeDegrees, longitudeDegrees, altitudeMeters, speedMetersPerSec, bearingDegrees, horizontalAccuracyMeters, verticalAccuracyMeters, speedAccuracyMetersPerSecond, bearingAccuracyDegrees, timestamp, elapsedRealtimeFlags, elapsedRealtimeNanos, elapsedRealtimeUncertaintyNanos); } } Loading Loading @@ -1263,8 +1293,15 @@ public class GnssNative { return native_read_nmea(buffer, bufferSize); } protected void injectLocation(double latitude, double longitude, float accuracy) { native_inject_location(latitude, longitude, accuracy); protected void injectLocation(@GnssLocationFlags int gnssLocationFlags, double latitude, double longitude, double altitude, float speed, float bearing, float horizontalAccuracy, float verticalAccuracy, float speedAccuracy, float bearingAccuracy, long timestamp, @GnssRealtimeFlags int elapsedRealtimeFlags, long elapsedRealtimeNanos, double elapsedRealtimeUncertaintyNanos) { native_inject_location(gnssLocationFlags, latitude, longitude, altitude, speed, bearing, horizontalAccuracy, verticalAccuracy, speedAccuracy, bearingAccuracy, timestamp, elapsedRealtimeFlags, elapsedRealtimeNanos, elapsedRealtimeUncertaintyNanos); } protected void injectBestLocation(@GnssLocationFlags int gnssLocationFlags, double latitude, Loading Loading @@ -1438,8 +1475,13 @@ public class GnssNative { // location injection APIs private static native void native_inject_location(double latitude, double longitude, float accuracy); private static native void native_inject_location( int gnssLocationFlags, double latitudeDegrees, double longitudeDegrees, double altitudeMeters, float speedMetersPerSec, float bearingDegrees, float horizontalAccuracyMeters, float verticalAccuracyMeters, float speedAccuracyMetersPerSecond, float bearingAccuracyDegrees, long timestamp, int elapsedRealtimeFlags, long elapsedRealtimeNanos, double elapsedRealtimeUncertaintyNanos); private static native void native_inject_best_location( Loading services/core/jni/com_android_server_location_GnssLocationProvider.cpp +280 −77 File changed.Preview size limit exceeded, changes collapsed. Show changes services/core/jni/gnss/AGnss.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ jboolean AGnss::setCallback(const std::unique_ptr<AGnssCallback>& callback) { jboolean AGnss::dataConnOpen(JNIEnv* env, jlong networkHandle, jstring apn, jint apnIpType) { ScopedJniString jniApn{env, apn}; auto status = mIAGnss->dataConnOpen(networkHandle, String16(jniApn.c_str()), auto status = mIAGnss->dataConnOpen(networkHandle, std::string(jniApn.c_str()), static_cast<IAGnss::ApnIpType>(apnIpType)); return checkAidlStatus(status, "IAGnssAidl dataConnOpen() failed. APN and its IP type not set."); Loading @@ -61,8 +61,8 @@ jboolean AGnss::dataConnFailed() { jboolean AGnss::setServer(JNIEnv* env, jint type, jstring hostname, jint port) { ScopedJniString jniHostName{env, hostname}; auto status = mIAGnss->setServer(static_cast<AGnssType>(type), String16(jniHostName.c_str()), port); auto status = mIAGnss->setServer(static_cast<AGnssType>(type), std::string(jniHostName.c_str()), port); return checkAidlStatus(status, "IAGnssAidl setServer() failed. Host name and port not set."); } Loading services/tests/mockingservicestests/src/com/android/server/location/gnss/hal/FakeGnssHal.java +6 −2 Original line number Diff line number Diff line Loading @@ -429,11 +429,15 @@ public final class FakeGnssHal extends GnssNative.GnssHal { } @Override protected void injectLocation(double latitude, double longitude, float accuracy) { protected void injectLocation(@GnssLocationFlags int gnssLocationFlags, double latitude, double longitude, double altitude, float speed, float bearing, float horizontalAccuracy, float verticalAccuracy, float speedAccuracy, float bearingAccuracy, long timestamp, @GnssRealtimeFlags int elapsedRealtimeFlags, long elapsedRealtimeNanos, double elapsedRealtimeUncertaintyNanos) { mState.mInjectedLocation = new Location("injected"); mState.mInjectedLocation.setLatitude(latitude); mState.mInjectedLocation.setLongitude(longitude); mState.mInjectedLocation.setAccuracy(accuracy); mState.mInjectedLocation.setAccuracy(horizontalAccuracy); } @Override Loading Loading
services/core/java/com/android/server/location/gnss/hal/GnssNative.java +48 −6 Original line number Diff line number Diff line Loading @@ -623,8 +623,38 @@ public class GnssNative { public void injectLocation(Location location) { Preconditions.checkState(mRegistered); if (location.hasAccuracy()) { mGnssHal.injectLocation(location.getLatitude(), location.getLongitude(), location.getAccuracy()); int gnssLocationFlags = GNSS_LOCATION_HAS_LAT_LONG | (location.hasAltitude() ? GNSS_LOCATION_HAS_ALTITUDE : 0) | (location.hasSpeed() ? GNSS_LOCATION_HAS_SPEED : 0) | (location.hasBearing() ? GNSS_LOCATION_HAS_BEARING : 0) | (location.hasAccuracy() ? GNSS_LOCATION_HAS_HORIZONTAL_ACCURACY : 0) | (location.hasVerticalAccuracy() ? GNSS_LOCATION_HAS_VERTICAL_ACCURACY : 0) | (location.hasSpeedAccuracy() ? GNSS_LOCATION_HAS_SPEED_ACCURACY : 0) | (location.hasBearingAccuracy() ? GNSS_LOCATION_HAS_BEARING_ACCURACY : 0); double latitudeDegrees = location.getLatitude(); double longitudeDegrees = location.getLongitude(); double altitudeMeters = location.getAltitude(); float speedMetersPerSec = location.getSpeed(); float bearingDegrees = location.getBearing(); float horizontalAccuracyMeters = location.getAccuracy(); float verticalAccuracyMeters = location.getVerticalAccuracyMeters(); float speedAccuracyMetersPerSecond = location.getSpeedAccuracyMetersPerSecond(); float bearingAccuracyDegrees = location.getBearingAccuracyDegrees(); long timestamp = location.getTime(); int elapsedRealtimeFlags = GNSS_REALTIME_HAS_TIMESTAMP_NS | (location.hasElapsedRealtimeUncertaintyNanos() ? GNSS_REALTIME_HAS_TIME_UNCERTAINTY_NS : 0); long elapsedRealtimeNanos = location.getElapsedRealtimeNanos(); double elapsedRealtimeUncertaintyNanos = location.getElapsedRealtimeUncertaintyNanos(); mGnssHal.injectLocation(gnssLocationFlags, latitudeDegrees, longitudeDegrees, altitudeMeters, speedMetersPerSec, bearingDegrees, horizontalAccuracyMeters, verticalAccuracyMeters, speedAccuracyMetersPerSecond, bearingAccuracyDegrees, timestamp, elapsedRealtimeFlags, elapsedRealtimeNanos, elapsedRealtimeUncertaintyNanos); } } Loading Loading @@ -1263,8 +1293,15 @@ public class GnssNative { return native_read_nmea(buffer, bufferSize); } protected void injectLocation(double latitude, double longitude, float accuracy) { native_inject_location(latitude, longitude, accuracy); protected void injectLocation(@GnssLocationFlags int gnssLocationFlags, double latitude, double longitude, double altitude, float speed, float bearing, float horizontalAccuracy, float verticalAccuracy, float speedAccuracy, float bearingAccuracy, long timestamp, @GnssRealtimeFlags int elapsedRealtimeFlags, long elapsedRealtimeNanos, double elapsedRealtimeUncertaintyNanos) { native_inject_location(gnssLocationFlags, latitude, longitude, altitude, speed, bearing, horizontalAccuracy, verticalAccuracy, speedAccuracy, bearingAccuracy, timestamp, elapsedRealtimeFlags, elapsedRealtimeNanos, elapsedRealtimeUncertaintyNanos); } protected void injectBestLocation(@GnssLocationFlags int gnssLocationFlags, double latitude, Loading Loading @@ -1438,8 +1475,13 @@ public class GnssNative { // location injection APIs private static native void native_inject_location(double latitude, double longitude, float accuracy); private static native void native_inject_location( int gnssLocationFlags, double latitudeDegrees, double longitudeDegrees, double altitudeMeters, float speedMetersPerSec, float bearingDegrees, float horizontalAccuracyMeters, float verticalAccuracyMeters, float speedAccuracyMetersPerSecond, float bearingAccuracyDegrees, long timestamp, int elapsedRealtimeFlags, long elapsedRealtimeNanos, double elapsedRealtimeUncertaintyNanos); private static native void native_inject_best_location( Loading
services/core/jni/com_android_server_location_GnssLocationProvider.cpp +280 −77 File changed.Preview size limit exceeded, changes collapsed. Show changes
services/core/jni/gnss/AGnss.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -43,7 +43,7 @@ jboolean AGnss::setCallback(const std::unique_ptr<AGnssCallback>& callback) { jboolean AGnss::dataConnOpen(JNIEnv* env, jlong networkHandle, jstring apn, jint apnIpType) { ScopedJniString jniApn{env, apn}; auto status = mIAGnss->dataConnOpen(networkHandle, String16(jniApn.c_str()), auto status = mIAGnss->dataConnOpen(networkHandle, std::string(jniApn.c_str()), static_cast<IAGnss::ApnIpType>(apnIpType)); return checkAidlStatus(status, "IAGnssAidl dataConnOpen() failed. APN and its IP type not set."); Loading @@ -61,8 +61,8 @@ jboolean AGnss::dataConnFailed() { jboolean AGnss::setServer(JNIEnv* env, jint type, jstring hostname, jint port) { ScopedJniString jniHostName{env, hostname}; auto status = mIAGnss->setServer(static_cast<AGnssType>(type), String16(jniHostName.c_str()), port); auto status = mIAGnss->setServer(static_cast<AGnssType>(type), std::string(jniHostName.c_str()), port); return checkAidlStatus(status, "IAGnssAidl setServer() failed. Host name and port not set."); } Loading
services/tests/mockingservicestests/src/com/android/server/location/gnss/hal/FakeGnssHal.java +6 −2 Original line number Diff line number Diff line Loading @@ -429,11 +429,15 @@ public final class FakeGnssHal extends GnssNative.GnssHal { } @Override protected void injectLocation(double latitude, double longitude, float accuracy) { protected void injectLocation(@GnssLocationFlags int gnssLocationFlags, double latitude, double longitude, double altitude, float speed, float bearing, float horizontalAccuracy, float verticalAccuracy, float speedAccuracy, float bearingAccuracy, long timestamp, @GnssRealtimeFlags int elapsedRealtimeFlags, long elapsedRealtimeNanos, double elapsedRealtimeUncertaintyNanos) { mState.mInjectedLocation = new Location("injected"); mState.mInjectedLocation.setLatitude(latitude); mState.mInjectedLocation.setLongitude(longitude); mState.mInjectedLocation.setAccuracy(accuracy); mState.mInjectedLocation.setAccuracy(horizontalAccuracy); } @Override Loading