Remove deprecated GNSS APIs + add nullability

Cleans up location APIs by removing old deprecated APIs (deprecated
since API 24) and adding nullability annotations everywhere.

Bug:126698813,126701422,126702274
Test: built
Change-Id: I6caf7f9778100bb3eee53178c25ce1694fb2d395
This commit is contained in:
Soonil Nagarkar
2019-02-28 13:52:27 -08:00
parent 0718be8cfa
commit 00fe7e2d78
8 changed files with 274 additions and 371 deletions

View File

@@ -22825,24 +22825,6 @@ package android.location {
method @Deprecated public boolean usedInFix();
}
@Deprecated public final class GpsStatus {
method @Deprecated public int getMaxSatellites();
method @Deprecated public Iterable<android.location.GpsSatellite> getSatellites();
method @Deprecated public int getTimeToFirstFix();
field @Deprecated public static final int GPS_EVENT_FIRST_FIX = 3; // 0x3
field @Deprecated public static final int GPS_EVENT_SATELLITE_STATUS = 4; // 0x4
field @Deprecated public static final int GPS_EVENT_STARTED = 1; // 0x1
field @Deprecated public static final int GPS_EVENT_STOPPED = 2; // 0x2
}
@Deprecated public static interface GpsStatus.Listener {
method @Deprecated public void onGpsStatusChanged(int);
}
@Deprecated public static interface GpsStatus.NmeaListener {
method @Deprecated public void onNmeaReceived(long, String);
}
public class Location implements android.os.Parcelable {
ctor public Location(String);
ctor public Location(android.location.Location);
@@ -22911,55 +22893,50 @@ package android.location {
}
public class LocationManager {
method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addGpsStatusListener(android.location.GpsStatus.Listener);
method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addNmeaListener(android.location.GpsStatus.NmeaListener);
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addNmeaListener(android.location.OnNmeaMessageListener);
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addNmeaListener(android.location.OnNmeaMessageListener, android.os.Handler);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void addProximityAlert(double, double, float, long, android.app.PendingIntent);
method public void addTestProvider(String, boolean, boolean, boolean, boolean, boolean, boolean, boolean, int, int);
method @Deprecated public void clearTestProviderEnabled(String);
method @Deprecated public void clearTestProviderLocation(String);
method @Deprecated public void clearTestProviderStatus(String);
method public java.util.List<java.lang.String> getAllProviders();
method public String getBestProvider(android.location.Criteria, boolean);
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addNmeaListener(@NonNull android.location.OnNmeaMessageListener);
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addNmeaListener(@NonNull android.location.OnNmeaMessageListener, @Nullable android.os.Handler);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void addProximityAlert(double, double, float, long, @NonNull android.app.PendingIntent);
method public void addTestProvider(@NonNull String, boolean, boolean, boolean, boolean, boolean, boolean, boolean, int, int);
method @Deprecated public void clearTestProviderEnabled(@NonNull String);
method @Deprecated public void clearTestProviderLocation(@NonNull String);
method @Deprecated public void clearTestProviderStatus(@NonNull String);
method @NonNull public java.util.List<java.lang.String> getAllProviders();
method @Nullable public String getBestProvider(@NonNull android.location.Criteria, boolean);
method @Nullable public String getGnssHardwareModelName();
method public int getGnssYearOfHardware();
method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public android.location.GpsStatus getGpsStatus(android.location.GpsStatus);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public android.location.Location getLastKnownLocation(String);
method public android.location.LocationProvider getProvider(String);
method public java.util.List<java.lang.String> getProviders(boolean);
method public java.util.List<java.lang.String> getProviders(android.location.Criteria, boolean);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) @Nullable public android.location.Location getLastKnownLocation(@NonNull String);
method @Nullable public android.location.LocationProvider getProvider(@NonNull String);
method @NonNull public java.util.List<java.lang.String> getProviders(boolean);
method @NonNull public java.util.List<java.lang.String> getProviders(@NonNull android.location.Criteria, boolean);
method public boolean isLocationEnabled();
method public boolean isProviderEnabled(String);
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(android.location.GnssMeasurementsEvent.Callback);
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(android.location.GnssMeasurementsEvent.Callback, android.os.Handler);
method public boolean registerGnssNavigationMessageCallback(android.location.GnssNavigationMessage.Callback);
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssNavigationMessageCallback(android.location.GnssNavigationMessage.Callback, android.os.Handler);
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssStatusCallback(android.location.GnssStatus.Callback);
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssStatusCallback(android.location.GnssStatus.Callback, android.os.Handler);
method @Deprecated public void removeGpsStatusListener(android.location.GpsStatus.Listener);
method @Deprecated public void removeNmeaListener(android.location.GpsStatus.NmeaListener);
method public void removeNmeaListener(android.location.OnNmeaMessageListener);
method @RequiresPermission(anyOf={"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}, apis="..22") public void removeProximityAlert(android.app.PendingIntent);
method public void removeTestProvider(String);
method @RequiresPermission(anyOf={"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}, apis="..22") public void removeUpdates(android.location.LocationListener);
method public void removeUpdates(android.app.PendingIntent);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(String, long, float, android.location.LocationListener);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(String, long, float, android.location.LocationListener, android.os.Looper);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(long, float, android.location.Criteria, android.location.LocationListener, android.os.Looper);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(String, long, float, android.app.PendingIntent);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(long, float, android.location.Criteria, android.app.PendingIntent);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestSingleUpdate(String, android.location.LocationListener, android.os.Looper);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestSingleUpdate(android.location.Criteria, android.location.LocationListener, android.os.Looper);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestSingleUpdate(String, android.app.PendingIntent);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestSingleUpdate(android.location.Criteria, android.app.PendingIntent);
method public boolean sendExtraCommand(String, String, android.os.Bundle);
method public void setTestProviderEnabled(String, boolean);
method public void setTestProviderLocation(String, android.location.Location);
method @Deprecated public void setTestProviderStatus(String, int, android.os.Bundle, long);
method public void unregisterGnssMeasurementsCallback(android.location.GnssMeasurementsEvent.Callback);
method public void unregisterGnssNavigationMessageCallback(android.location.GnssNavigationMessage.Callback);
method public void unregisterGnssStatusCallback(android.location.GnssStatus.Callback);
method public boolean isProviderEnabled(@NonNull String);
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull android.location.GnssMeasurementsEvent.Callback);
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssMeasurementsCallback(@NonNull android.location.GnssMeasurementsEvent.Callback, @Nullable android.os.Handler);
method public boolean registerGnssNavigationMessageCallback(@NonNull android.location.GnssNavigationMessage.Callback);
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssNavigationMessageCallback(@NonNull android.location.GnssNavigationMessage.Callback, @Nullable android.os.Handler);
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssStatusCallback(@NonNull android.location.GnssStatus.Callback);
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean registerGnssStatusCallback(@NonNull android.location.GnssStatus.Callback, @Nullable android.os.Handler);
method public void removeNmeaListener(@NonNull android.location.OnNmeaMessageListener);
method @RequiresPermission(anyOf={"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}, apis="..22") public void removeProximityAlert(@NonNull android.app.PendingIntent);
method public void removeTestProvider(@NonNull String);
method @RequiresPermission(anyOf={"android.permission.ACCESS_COARSE_LOCATION", "android.permission.ACCESS_FINE_LOCATION"}, apis="..22") public void removeUpdates(@NonNull android.location.LocationListener);
method public void removeUpdates(@NonNull android.app.PendingIntent);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull String, long, float, @NonNull android.location.LocationListener);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull String, long, float, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(long, float, @NonNull android.location.Criteria, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull String, long, float, @NonNull android.app.PendingIntent);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(long, float, @NonNull android.location.Criteria, @NonNull android.app.PendingIntent);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestSingleUpdate(@NonNull String, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestSingleUpdate(@NonNull android.location.Criteria, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestSingleUpdate(@NonNull String, @NonNull android.app.PendingIntent);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestSingleUpdate(@NonNull android.location.Criteria, @NonNull android.app.PendingIntent);
method public boolean sendExtraCommand(@NonNull String, @NonNull String, @Nullable android.os.Bundle);
method public void setTestProviderEnabled(@NonNull String, boolean);
method public void setTestProviderLocation(@NonNull String, @NonNull android.location.Location);
method @Deprecated public void setTestProviderStatus(@NonNull String, int, @Nullable android.os.Bundle, long);
method public void unregisterGnssMeasurementsCallback(@NonNull android.location.GnssMeasurementsEvent.Callback);
method public void unregisterGnssNavigationMessageCallback(@NonNull android.location.GnssNavigationMessage.Callback);
method public void unregisterGnssStatusCallback(@NonNull android.location.GnssStatus.Callback);
field public static final String GPS_PROVIDER = "gps";
field public static final String KEY_LOCATION_CHANGED = "location";
field public static final String KEY_PROVIDER_ENABLED = "providerEnabled";

View File

@@ -282,12 +282,38 @@ package android.hardware {
package android.location {
@Deprecated public final class GpsStatus {
method public int getMaxSatellites();
method public Iterable<android.location.GpsSatellite> getSatellites();
method public int getTimeToFirstFix();
field public static final int GPS_EVENT_FIRST_FIX = 3; // 0x3
field public static final int GPS_EVENT_SATELLITE_STATUS = 4; // 0x4
field public static final int GPS_EVENT_STARTED = 1; // 0x1
field public static final int GPS_EVENT_STOPPED = 2; // 0x2
}
@Deprecated public static interface GpsStatus.Listener {
method public void onGpsStatusChanged(int);
}
@Deprecated public static interface GpsStatus.NmeaListener {
method public void onNmeaReceived(long, String);
}
public class Location implements android.os.Parcelable {
method @Deprecated public void removeBearingAccuracy();
method @Deprecated public void removeSpeedAccuracy();
method @Deprecated public void removeVerticalAccuracy();
}
public class LocationManager {
method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addGpsStatusListener(android.location.GpsStatus.Listener);
method @Deprecated @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public boolean addNmeaListener(android.location.GpsStatus.NmeaListener);
method @Deprecated @Nullable @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public android.location.GpsStatus getGpsStatus(@Nullable android.location.GpsStatus);
method @Deprecated public void removeGpsStatusListener(android.location.GpsStatus.Listener);
method @Deprecated public void removeNmeaListener(android.location.GpsStatus.NmeaListener);
}
}
package android.media {

View File

@@ -3364,57 +3364,53 @@ package android.location {
}
public class LocationManager {
method @Deprecated public boolean addGpsMeasurementListener(android.location.GpsMeasurementsEvent.Listener);
method @Deprecated public boolean addGpsNavigationMessageListener(android.location.GpsNavigationMessageEvent.Listener);
method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void flushGnssBatch();
method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public int getGnssBatchSize();
method public int getGnssCapabilities();
method @Nullable public String getLocationControllerExtraPackage();
method @RequiresPermission(android.Manifest.permission.ACCESS_FINE_LOCATION) public void injectGnssMeasurementCorrections(@NonNull android.location.GnssMeasurementCorrections);
method public boolean isLocationControllerExtraPackageEnabled();
method public boolean isLocationEnabledForUser(android.os.UserHandle);
method public boolean isProviderEnabledForUser(String, android.os.UserHandle);
method public boolean isProviderPackage(String);
method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public boolean registerGnssBatchedLocationCallback(long, boolean, android.location.BatchedLocationCallback, android.os.Handler);
method @Deprecated public void removeGpsMeasurementListener(android.location.GpsMeasurementsEvent.Listener);
method @Deprecated public void removeGpsNavigationMessageListener(android.location.GpsNavigationMessageEvent.Listener);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(android.location.LocationRequest, android.location.LocationListener, android.os.Looper);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(android.location.LocationRequest, android.app.PendingIntent);
method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void setLocationControllerExtraPackage(String);
method public boolean isLocationEnabledForUser(@NonNull android.os.UserHandle);
method public boolean isProviderEnabledForUser(@NonNull String, @NonNull android.os.UserHandle);
method public boolean isProviderPackage(@NonNull String);
method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public boolean registerGnssBatchedLocationCallback(long, boolean, @NonNull android.location.BatchedLocationCallback, @Nullable android.os.Handler);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull android.location.LocationRequest, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull android.location.LocationRequest, @NonNull android.app.PendingIntent);
method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void setLocationControllerExtraPackage(@NonNull String);
method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public void setLocationControllerExtraPackageEnabled(boolean);
method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setLocationEnabledForUser(boolean, android.os.UserHandle);
method @Deprecated @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public boolean setProviderEnabledForUser(String, boolean, android.os.UserHandle);
method @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public boolean unregisterGnssBatchedLocationCallback(android.location.BatchedLocationCallback);
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 @RequiresPermission(android.Manifest.permission.LOCATION_HARDWARE) public boolean unregisterGnssBatchedLocationCallback(@NonNull android.location.BatchedLocationCallback);
}
public final class LocationRequest implements android.os.Parcelable {
method public static android.location.LocationRequest create();
method public static android.location.LocationRequest createFromDeprecatedCriteria(android.location.Criteria, long, float, boolean);
method public static android.location.LocationRequest createFromDeprecatedProvider(String, long, float, boolean);
method @NonNull public static android.location.LocationRequest create();
method @NonNull public static android.location.LocationRequest createFromDeprecatedCriteria(@NonNull android.location.Criteria, long, float, boolean);
method @NonNull public static android.location.LocationRequest createFromDeprecatedProvider(@NonNull String, long, float, boolean);
method public int describeContents();
method public long getExpireAt();
method public long getFastestInterval();
method public boolean getHideFromAppOps();
method public long getInterval();
method public int getNumUpdates();
method public String getProvider();
method @NonNull public String getProvider();
method public int getQuality();
method public float getSmallestDisplacement();
method public android.os.WorkSource getWorkSource();
method @Nullable public android.os.WorkSource getWorkSource();
method public boolean isLocationSettingsIgnored();
method public boolean isLowPowerMode();
method public android.location.LocationRequest setExpireAt(long);
method public android.location.LocationRequest setExpireIn(long);
method public android.location.LocationRequest setFastestInterval(long);
method @NonNull public android.location.LocationRequest setExpireAt(long);
method @NonNull public android.location.LocationRequest setExpireIn(long);
method @NonNull public android.location.LocationRequest setFastestInterval(long);
method public void setHideFromAppOps(boolean);
method public android.location.LocationRequest setInterval(long);
method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public android.location.LocationRequest setLocationSettingsIgnored(boolean);
method public android.location.LocationRequest setLowPowerMode(boolean);
method public android.location.LocationRequest setNumUpdates(int);
method public android.location.LocationRequest setProvider(String);
method public android.location.LocationRequest setQuality(int);
method public android.location.LocationRequest setSmallestDisplacement(float);
method public void setWorkSource(android.os.WorkSource);
method @NonNull public android.location.LocationRequest setInterval(long);
method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) @NonNull public android.location.LocationRequest setLocationSettingsIgnored(boolean);
method @NonNull public android.location.LocationRequest setLowPowerMode(boolean);
method @NonNull public android.location.LocationRequest setNumUpdates(int);
method @NonNull public android.location.LocationRequest setProvider(@NonNull String);
method @NonNull public android.location.LocationRequest setQuality(int);
method @NonNull public android.location.LocationRequest setSmallestDisplacement(float);
method public void setWorkSource(@Nullable android.os.WorkSource);
method public void writeToParcel(android.os.Parcel, int);
field public static final int ACCURACY_BLOCK = 102; // 0x66
field public static final int ACCURACY_CITY = 104; // 0x68

View File

@@ -60,6 +60,17 @@ package android.content {
}
package android.location {
public class LocationManager {
method @Deprecated public boolean addGpsMeasurementListener(android.location.GpsMeasurementsEvent.Listener);
method @Deprecated public boolean addGpsNavigationMessageListener(android.location.GpsNavigationMessageEvent.Listener);
method @Deprecated public void removeGpsMeasurementListener(android.location.GpsMeasurementsEvent.Listener);
method @Deprecated public void removeGpsNavigationMessageListener(android.location.GpsNavigationMessageEvent.Listener);
}
}
package android.media.tv {
public final class TvInputManager {

View File

@@ -936,16 +936,16 @@ package android.location {
}
public class LocationManager {
method public String[] getBackgroundThrottlingWhitelist();
method public String[] getIgnoreSettingsWhitelist();
method @NonNull public String[] getBackgroundThrottlingWhitelist();
method @NonNull public String[] getIgnoreSettingsWhitelist();
method @NonNull public java.util.List<android.location.LocationRequest> getTestProviderCurrentRequests(String);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(android.location.LocationRequest, android.location.LocationListener, android.os.Looper);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(android.location.LocationRequest, android.app.PendingIntent);
method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setLocationEnabledForUser(boolean, android.os.UserHandle);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull android.location.LocationRequest, @NonNull android.location.LocationListener, @Nullable android.os.Looper);
method @RequiresPermission(anyOf={android.Manifest.permission.ACCESS_COARSE_LOCATION, android.Manifest.permission.ACCESS_FINE_LOCATION}) public void requestLocationUpdates(@NonNull android.location.LocationRequest, @NonNull android.app.PendingIntent);
method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public void setLocationEnabledForUser(boolean, @NonNull android.os.UserHandle);
}
public final class LocationRequest implements android.os.Parcelable {
method public static android.location.LocationRequest create();
method @NonNull public static android.location.LocationRequest create();
method public int describeContents();
method public long getExpireAt();
method public long getFastestInterval();
@@ -953,14 +953,14 @@ package android.location {
method public int getNumUpdates();
method public int getQuality();
method public boolean isLocationSettingsIgnored();
method public android.location.LocationRequest setExpireAt(long);
method public android.location.LocationRequest setExpireIn(long);
method public android.location.LocationRequest setFastestInterval(long);
method public android.location.LocationRequest setInterval(long);
method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public android.location.LocationRequest setLocationSettingsIgnored(boolean);
method public android.location.LocationRequest setNumUpdates(int);
method public android.location.LocationRequest setProvider(String);
method public android.location.LocationRequest setQuality(int);
method @NonNull public android.location.LocationRequest setExpireAt(long);
method @NonNull public android.location.LocationRequest setExpireIn(long);
method @NonNull public android.location.LocationRequest setFastestInterval(long);
method @NonNull public android.location.LocationRequest setInterval(long);
method @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) @NonNull public android.location.LocationRequest setLocationSettingsIgnored(boolean);
method @NonNull public android.location.LocationRequest setNumUpdates(int);
method @NonNull public android.location.LocationRequest setProvider(@NonNull String);
method @NonNull public android.location.LocationRequest setQuality(int);
method public void writeToParcel(android.os.Parcel, int);
field public static final int ACCURACY_BLOCK = 102; // 0x66
field public static final int ACCURACY_CITY = 104; // 0x68

View File

@@ -30,6 +30,7 @@ import java.util.NoSuchElementException;
* <p>This class is used in conjunction with the {@link Listener} interface.
*
* @deprecated use {@link GnssStatus} and {@link GnssStatus.Callback}.
* @removed
*/
@Deprecated
public final class GpsStatus {
@@ -112,6 +113,7 @@ public final class GpsStatus {
/**
* Used for receiving notifications when GPS status has changed.
* @deprecated use {@link GnssStatus.Callback} instead.
* @removed
*/
@Deprecated
public interface Listener {
@@ -142,6 +144,7 @@ public final class GpsStatus {
* You can implement this interface and call {@link LocationManager#addNmeaListener}
* to receive NMEA data from the GPS engine.
* @deprecated use {@link OnNmeaMessageListener} instead.
* @removed
*/
@Deprecated
public interface NmeaListener {

View File

@@ -44,12 +44,12 @@ import android.os.Process;
import android.os.RemoteException;
import android.os.UserHandle;
import android.provider.Settings;
import android.util.ArrayMap;
import android.util.Log;
import com.android.internal.location.ProviderProperties;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
@@ -78,14 +78,10 @@ public class LocationManager {
private final GnssMeasurementCallbackTransport mGnssMeasurementCallbackTransport;
private final GnssNavigationMessageCallbackTransport mGnssNavigationMessageCallbackTransport;
private final BatchedLocationCallbackTransport mBatchedLocationCallbackTransport;
private final HashMap<GpsStatus.Listener, GnssStatusListenerTransport> mGpsStatusListeners =
new HashMap<>();
private final HashMap<GpsStatus.NmeaListener, GnssStatusListenerTransport> mGpsNmeaListeners =
new HashMap<>();
private final HashMap<GnssStatus.Callback, GnssStatusListenerTransport> mGnssStatusListeners =
new HashMap<>();
private final HashMap<OnNmeaMessageListener, GnssStatusListenerTransport> mGnssNmeaListeners =
new HashMap<>();
private final ArrayMap<GnssStatus.Callback, GnssStatusListenerTransport> mGnssStatusListeners =
new ArrayMap<>();
private final ArrayMap<OnNmeaMessageListener, GnssStatusListenerTransport> mGnssNmeaListeners =
new ArrayMap<>();
// volatile + GnssStatus final-fields pattern to avoid a partially published object
private volatile GnssStatus mGnssStatus;
private int mTimeToFirstFix;
@@ -293,8 +289,7 @@ public class LocationManager {
"com.android.settings.location.FOOTER_STRING";
// Map from LocationListeners to their associated ListenerTransport objects
private final HashMap<LocationListener, ListenerTransport> mListeners =
new HashMap<LocationListener,ListenerTransport>();
private final ArrayMap<LocationListener, ListenerTransport> mListeners = new ArrayMap<>();
private class ListenerTransport extends ILocationListener.Stub {
private static final int TYPE_LOCATION_CHANGED = 1;
@@ -405,7 +400,7 @@ public class LocationManager {
* @hide
*/
@TestApi
public String[] getBackgroundThrottlingWhitelist() {
public @NonNull String[] getBackgroundThrottlingWhitelist() {
try {
return mService.getBackgroundThrottlingWhitelist();
} catch (RemoteException e) {
@@ -417,7 +412,7 @@ public class LocationManager {
* @hide
*/
@TestApi
public String[] getIgnoreSettingsWhitelist() {
public @NonNull String[] getIgnoreSettingsWhitelist() {
try {
return mService.getIgnoreSettingsWhitelist();
} catch (RemoteException e) {
@@ -431,7 +426,7 @@ public class LocationManager {
* right way to create an instance of this class is using the
* factory Context.getSystemService.
*/
public LocationManager(Context context, ILocationManager service) {
public LocationManager(@NonNull Context context, @NonNull ILocationManager service) {
mService = service;
mContext = context;
mGnssMeasurementCallbackTransport =
@@ -454,7 +449,7 @@ public class LocationManager {
*
* @return list of Strings containing names of the provider
*/
public List<String> getAllProviders() {
public @NonNull List<String> getAllProviders() {
try {
return mService.getAllProviders();
} catch (RemoteException e) {
@@ -469,7 +464,7 @@ public class LocationManager {
* enabled are returned.
* @return list of Strings containing names of the providers
*/
public List<String> getProviders(boolean enabledOnly) {
public @NonNull List<String> getProviders(boolean enabledOnly) {
try {
return mService.getProviders(null, enabledOnly);
} catch (RemoteException e) {
@@ -488,7 +483,7 @@ public class LocationManager {
* @throws SecurityException if the caller is not permitted to access the
* given provider.
*/
public LocationProvider getProvider(String name) {
public @Nullable LocationProvider getProvider(@NonNull String name) {
checkProvider(name);
try {
ProviderProperties properties = mService.getProviderProperties(name);
@@ -511,7 +506,7 @@ public class LocationManager {
* enabled are returned.
* @return list of Strings containing names of the providers
*/
public List<String> getProviders(Criteria criteria, boolean enabledOnly) {
public @NonNull List<String> getProviders(@NonNull Criteria criteria, boolean enabledOnly) {
checkCriteria(criteria);
try {
return mService.getProviders(criteria, enabledOnly);
@@ -542,7 +537,7 @@ public class LocationManager {
* @param enabledOnly if true then only a provider that is currently enabled is returned
* @return name of the provider that best matches the requirements
*/
public String getBestProvider(Criteria criteria, boolean enabledOnly) {
public @Nullable String getBestProvider(@NonNull Criteria criteria, boolean enabledOnly) {
checkCriteria(criteria);
try {
return mService.getBestProvider(criteria, enabledOnly);
@@ -572,8 +567,8 @@ public class LocationManager {
* @throws SecurityException if no suitable permission is present
*/
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public void requestLocationUpdates(String provider, long minTime, float minDistance,
LocationListener listener) {
public void requestLocationUpdates(@NonNull String provider, long minTime, float minDistance,
@NonNull LocationListener listener) {
checkProvider(provider);
checkListener(listener);
@@ -604,8 +599,8 @@ public class LocationManager {
* @throws SecurityException if no suitable permission is present
*/
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public void requestLocationUpdates(String provider, long minTime, float minDistance,
LocationListener listener, Looper looper) {
public void requestLocationUpdates(@NonNull String provider, long minTime, float minDistance,
@NonNull LocationListener listener, @Nullable Looper looper) {
checkProvider(provider);
checkListener(listener);
@@ -637,8 +632,8 @@ public class LocationManager {
* @throws SecurityException if no suitable permission is present
*/
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public void requestLocationUpdates(long minTime, float minDistance, Criteria criteria,
LocationListener listener, Looper looper) {
public void requestLocationUpdates(long minTime, float minDistance, @NonNull Criteria criteria,
@NonNull LocationListener listener, @Nullable Looper looper) {
checkCriteria(criteria);
checkListener(listener);
@@ -665,8 +660,8 @@ public class LocationManager {
* @throws SecurityException if no suitable permission is present
*/
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public void requestLocationUpdates(String provider, long minTime, float minDistance,
PendingIntent intent) {
public void requestLocationUpdates(@NonNull String provider, long minTime, float minDistance,
@NonNull PendingIntent intent) {
checkProvider(provider);
checkPendingIntent(intent);
@@ -772,8 +767,8 @@ public class LocationManager {
* @throws SecurityException if no suitable permission is present
*/
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public void requestLocationUpdates(long minTime, float minDistance, Criteria criteria,
PendingIntent intent) {
public void requestLocationUpdates(long minTime, float minDistance, @NonNull Criteria criteria,
@NonNull PendingIntent intent) {
checkCriteria(criteria);
checkPendingIntent(intent);
@@ -802,7 +797,8 @@ public class LocationManager {
* @throws SecurityException if no suitable permission is present
*/
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public void requestSingleUpdate(String provider, LocationListener listener, Looper looper) {
public void requestSingleUpdate(
@NonNull String provider, @NonNull LocationListener listener, @Nullable Looper looper) {
checkProvider(provider);
checkListener(listener);
@@ -832,7 +828,10 @@ public class LocationManager {
* @throws SecurityException if no suitable permission is present
*/
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public void requestSingleUpdate(Criteria criteria, LocationListener listener, Looper looper) {
public void requestSingleUpdate(
@NonNull Criteria criteria,
@NonNull LocationListener listener,
@Nullable Looper looper) {
checkCriteria(criteria);
checkListener(listener);
@@ -855,7 +854,7 @@ public class LocationManager {
* @throws SecurityException if no suitable permission is present
*/
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public void requestSingleUpdate(String provider, PendingIntent intent) {
public void requestSingleUpdate(@NonNull String provider, @NonNull PendingIntent intent) {
checkProvider(provider);
checkPendingIntent(intent);
@@ -879,7 +878,7 @@ public class LocationManager {
* @throws SecurityException if no suitable permission is present
*/
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public void requestSingleUpdate(Criteria criteria, PendingIntent intent) {
public void requestSingleUpdate(@NonNull Criteria criteria, @NonNull PendingIntent intent) {
checkCriteria(criteria);
checkPendingIntent(intent);
@@ -948,8 +947,10 @@ public class LocationManager {
@SystemApi
@TestApi
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public void requestLocationUpdates(LocationRequest request, LocationListener listener,
Looper looper) {
public void requestLocationUpdates(
@NonNull LocationRequest request,
@NonNull LocationListener listener,
@Nullable Looper looper) {
checkListener(listener);
requestLocationUpdates(request, listener, looper, null);
}
@@ -978,7 +979,8 @@ public class LocationManager {
@SystemApi
@TestApi
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public void requestLocationUpdates(LocationRequest request, PendingIntent intent) {
public void requestLocationUpdates(
@NonNull LocationRequest request, @NonNull PendingIntent intent) {
checkPendingIntent(intent);
requestLocationUpdates(request, null, null, intent);
}
@@ -1003,7 +1005,7 @@ public class LocationManager {
* @hide
*/
@RequiresPermission(allOf = {LOCATION_HARDWARE, ACCESS_FINE_LOCATION})
public boolean injectLocation(Location newLocation) {
public boolean injectLocation(@NonNull Location newLocation) {
try {
return mService.injectLocation(newLocation);
} catch (RemoteException e) {
@@ -1048,7 +1050,7 @@ public class LocationManager {
* @param listener listener object that no longer needs location updates
* @throws IllegalArgumentException if listener is null
*/
public void removeUpdates(LocationListener listener) {
public void removeUpdates(@NonNull LocationListener listener) {
checkListener(listener);
String packageName = mContext.getPackageName();
@@ -1073,7 +1075,7 @@ public class LocationManager {
* @param intent pending intent object that no longer needs location updates
* @throws IllegalArgumentException if intent is null
*/
public void removeUpdates(PendingIntent intent) {
public void removeUpdates(@NonNull PendingIntent intent) {
checkPendingIntent(intent);
String packageName = mContext.getPackageName();
@@ -1133,7 +1135,7 @@ public class LocationManager {
*/
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public void addProximityAlert(double latitude, double longitude, float radius, long expiration,
PendingIntent intent) {
@NonNull PendingIntent intent) {
checkPendingIntent(intent);
if (expiration < 0) expiration = Long.MAX_VALUE;
@@ -1183,7 +1185,10 @@ public class LocationManager {
* @hide
*/
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public void addGeofence(LocationRequest request, Geofence fence, PendingIntent intent) {
public void addGeofence(
@NonNull LocationRequest request,
@NonNull Geofence fence,
@NonNull PendingIntent intent) {
checkPendingIntent(intent);
checkGeofence(fence);
@@ -1210,7 +1215,7 @@ public class LocationManager {
* @throws SecurityException if {@link android.Manifest.permission#ACCESS_FINE_LOCATION}
* permission is not present
*/
public void removeProximityAlert(PendingIntent intent) {
public void removeProximityAlert(@NonNull PendingIntent intent) {
checkPendingIntent(intent);
String packageName = mContext.getPackageName();
@@ -1237,7 +1242,7 @@ public class LocationManager {
*
* @hide
*/
public void removeGeofence(Geofence fence, PendingIntent intent) {
public void removeGeofence(@NonNull Geofence fence, @NonNull PendingIntent intent) {
checkPendingIntent(intent);
checkGeofence(fence);
String packageName = mContext.getPackageName();
@@ -1260,7 +1265,7 @@ public class LocationManager {
*
* @hide
*/
public void removeAllGeofences(PendingIntent intent) {
public void removeAllGeofences(@NonNull PendingIntent intent) {
checkPendingIntent(intent);
String packageName = mContext.getPackageName();
@@ -1290,7 +1295,7 @@ public class LocationManager {
* @hide
*/
@SystemApi
public boolean isLocationEnabledForUser(UserHandle userHandle) {
public boolean isLocationEnabledForUser(@NonNull UserHandle userHandle) {
try {
return mService.isLocationEnabledForUser(userHandle.getIdentifier());
} catch (RemoteException e) {
@@ -1309,7 +1314,7 @@ public class LocationManager {
@SystemApi
@TestApi
@RequiresPermission(WRITE_SECURE_SETTINGS)
public void setLocationEnabledForUser(boolean enabled, UserHandle userHandle) {
public void setLocationEnabledForUser(boolean enabled, @NonNull UserHandle userHandle) {
Settings.Secure.putIntForUser(
mContext.getContentResolver(),
Settings.Secure.LOCATION_MODE,
@@ -1332,7 +1337,7 @@ public class LocationManager {
*
* @throws IllegalArgumentException if provider is null
*/
public boolean isProviderEnabled(String provider) {
public boolean isProviderEnabled(@NonNull String provider) {
return isProviderEnabledForUser(provider, Process.myUserHandle());
}
@@ -1353,7 +1358,8 @@ public class LocationManager {
* @hide
*/
@SystemApi
public boolean isProviderEnabledForUser(String provider, UserHandle userHandle) {
public boolean isProviderEnabledForUser(
@NonNull String provider, @NonNull UserHandle userHandle) {
checkProvider(provider);
try {
@@ -1382,7 +1388,7 @@ public class LocationManager {
@SystemApi
@RequiresPermission(WRITE_SECURE_SETTINGS)
public boolean setProviderEnabledForUser(
String provider, boolean enabled, UserHandle userHandle) {
@NonNull String provider, boolean enabled, @NonNull UserHandle userHandle) {
checkProvider(provider);
return Settings.Secure.setLocationProviderEnabledForUser(
@@ -1406,6 +1412,7 @@ public class LocationManager {
*
* @hide
*/
@Nullable
public Location getLastLocation() {
String packageName = mContext.getPackageName();
@@ -1434,7 +1441,8 @@ public class LocationManager {
* @throws IllegalArgumentException if provider is null or doesn't exist
*/
@RequiresPermission(anyOf = {ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION})
public Location getLastKnownLocation(String provider) {
@Nullable
public Location getLastKnownLocation(@NonNull String provider) {
checkProvider(provider);
String packageName = mContext.getPackageName();
LocationRequest request = LocationRequest.createFromDeprecatedProvider(
@@ -1447,10 +1455,6 @@ public class LocationManager {
}
}
// --- Mock provider support ---
// TODO: It would be fantastic to deprecate mock providers entirely, and replace
// with something closer to LocationProviderBase.java
/**
* Creates a mock location provider and adds it to the set of active providers.
*
@@ -1461,7 +1465,8 @@ public class LocationManager {
* allowed} for your app.
* @throws IllegalArgumentException if a provider with the given name already exists
*/
public void addTestProvider(String name, boolean requiresNetwork, boolean requiresSatellite,
public void addTestProvider(
@NonNull String name, boolean requiresNetwork, boolean requiresSatellite,
boolean requiresCell, boolean hasMonetaryCost, boolean supportsAltitude,
boolean supportsSpeed, boolean supportsBearing, int powerRequirement, int accuracy) {
ProviderProperties properties = new ProviderProperties(requiresNetwork,
@@ -1488,7 +1493,7 @@ public class LocationManager {
* allowed} for your app.
* @throws IllegalArgumentException if no provider with the given name exists
*/
public void removeTestProvider(String provider) {
public void removeTestProvider(@NonNull String provider) {
try {
mService.removeTestProvider(provider, mContext.getOpPackageName());
} catch (RemoteException e) {
@@ -1512,7 +1517,7 @@ public class LocationManager {
* @throws IllegalArgumentException if no provider with the given name exists
* @throws IllegalArgumentException if the location is incomplete
*/
public void setTestProviderLocation(String provider, Location loc) {
public void setTestProviderLocation(@NonNull String provider, @NonNull Location loc) {
if (!loc.isComplete()) {
IllegalArgumentException e = new IllegalArgumentException(
"Incomplete location object, missing timestamp or accuracy? " + loc);
@@ -1546,7 +1551,7 @@ public class LocationManager {
* @deprecated This function has always been a no-op, and may be removed in the future.
*/
@Deprecated
public void clearTestProviderLocation(String provider) {}
public void clearTestProviderLocation(@NonNull String provider) {}
/**
* Sets a mock enabled value for the given provider. This value will be used in place
@@ -1560,7 +1565,7 @@ public class LocationManager {
* allowed} for your app.
* @throws IllegalArgumentException if no provider with the given name exists
*/
public void setTestProviderEnabled(String provider, boolean enabled) {
public void setTestProviderEnabled(@NonNull String provider, boolean enabled) {
try {
mService.setTestProviderEnabled(provider, enabled, mContext.getOpPackageName());
} catch (RemoteException e) {
@@ -1581,7 +1586,7 @@ public class LocationManager {
* @deprecated Use {@link #setTestProviderEnabled(String, boolean)} instead.
*/
@Deprecated
public void clearTestProviderEnabled(String provider) {
public void clearTestProviderEnabled(@NonNull String provider) {
setTestProviderEnabled(provider, false);
}
@@ -1601,7 +1606,8 @@ public class LocationManager {
* @deprecated This method has no effect.
*/
@Deprecated
public void setTestProviderStatus(String provider, int status, Bundle extras, long updateTime) {
public void setTestProviderStatus(
@NonNull String provider, int status, @Nullable Bundle extras, long updateTime) {
try {
mService.setTestProviderStatus(provider, status, extras, updateTime,
mContext.getOpPackageName());
@@ -1622,7 +1628,7 @@ public class LocationManager {
* @deprecated This method has no effect.
*/
@Deprecated
public void clearTestProviderStatus(String provider) {
public void clearTestProviderStatus(@NonNull String provider) {
setTestProviderStatus(provider, LocationProvider.AVAILABLE, null, 0L);
}
@@ -1648,13 +1654,11 @@ public class LocationManager {
// This class is used to send Gnss status events to the client's specific thread.
private class GnssStatusListenerTransport extends IGnssStatusListener.Stub {
private final GpsStatus.Listener mGpsListener;
private final GpsStatus.NmeaListener mGpsNmeaListener;
private final GnssStatus.Callback mGnssCallback;
private final OnNmeaMessageListener mGnssNmeaListener;
private class GnssHandler extends Handler {
public GnssHandler(Handler handler) {
GnssHandler(Handler handler) {
super(handler != null ? handler.getLooper() : Looper.myLooper());
}
@@ -1663,24 +1667,22 @@ public class LocationManager {
switch (msg.what) {
case NMEA_RECEIVED:
synchronized (mNmeaBuffer) {
int length = mNmeaBuffer.size();
for (int i = 0; i < length; i++) {
Nmea nmea = mNmeaBuffer.get(i);
for (Nmea nmea : mNmeaBuffer) {
mGnssNmeaListener.onNmeaMessage(nmea.mNmea, nmea.mTimestamp);
}
mNmeaBuffer.clear();
}
break;
case GpsStatus.GPS_EVENT_STARTED:
case GNSS_EVENT_STARTED:
mGnssCallback.onStarted();
break;
case GpsStatus.GPS_EVENT_STOPPED:
case GNSS_EVENT_STOPPED:
mGnssCallback.onStopped();
break;
case GpsStatus.GPS_EVENT_FIRST_FIX:
case GNSS_EVENT_FIRST_FIX:
mGnssCallback.onFirstFix(mTimeToFirstFix);
break;
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
case GNSS_EVENT_SATELLITE_STATUS:
mGnssCallback.onSatelliteStatusChanged(mGnssStatus);
break;
default:
@@ -1691,8 +1693,11 @@ public class LocationManager {
private final Handler mGnssHandler;
// This must not equal any of the GpsStatus event IDs
private static final int NMEA_RECEIVED = 1000;
private static final int NMEA_RECEIVED = 1;
private static final int GNSS_EVENT_STARTED = 2;
private static final int GNSS_EVENT_STOPPED = 3;
private static final int GNSS_EVENT_FIRST_FIX = 4;
private static final int GNSS_EVENT_SATELLITE_STATUS = 5;
private class Nmea {
long mTimestamp;
@@ -1705,98 +1710,31 @@ public class LocationManager {
}
private final ArrayList<Nmea> mNmeaBuffer;
GnssStatusListenerTransport(GpsStatus.Listener listener) {
this(listener, null);
}
GnssStatusListenerTransport(GpsStatus.Listener listener, Handler handler) {
mGpsListener = listener;
mGnssHandler = new GnssHandler(handler);
mGpsNmeaListener = null;
mNmeaBuffer = null;
mGnssCallback = mGpsListener != null ? new GnssStatus.Callback() {
@Override
public void onStarted() {
mGpsListener.onGpsStatusChanged(GpsStatus.GPS_EVENT_STARTED);
}
@Override
public void onStopped() {
mGpsListener.onGpsStatusChanged(GpsStatus.GPS_EVENT_STOPPED);
}
@Override
public void onFirstFix(int ttff) {
mGpsListener.onGpsStatusChanged(GpsStatus.GPS_EVENT_FIRST_FIX);
}
@Override
public void onSatelliteStatusChanged(GnssStatus status) {
mGpsListener.onGpsStatusChanged(GpsStatus.GPS_EVENT_SATELLITE_STATUS);
}
} : null;
mGnssNmeaListener = null;
}
GnssStatusListenerTransport(GpsStatus.NmeaListener listener) {
this(listener, null);
}
GnssStatusListenerTransport(GpsStatus.NmeaListener listener, Handler handler) {
mGpsListener = null;
mGnssHandler = new GnssHandler(handler);
mGpsNmeaListener = listener;
mNmeaBuffer = new ArrayList<Nmea>();
mGnssCallback = null;
mGnssNmeaListener = mGpsNmeaListener != null ? new OnNmeaMessageListener() {
@Override
public void onNmeaMessage(String nmea, long timestamp) {
mGpsNmeaListener.onNmeaReceived(timestamp, nmea);
}
} : null;
}
GnssStatusListenerTransport(GnssStatus.Callback callback) {
this(callback, null);
}
GnssStatusListenerTransport(GnssStatus.Callback callback, Handler handler) {
mGnssCallback = callback;
mGnssHandler = new GnssHandler(handler);
mGnssNmeaListener = null;
mNmeaBuffer = null;
mGpsListener = null;
mGpsNmeaListener = null;
}
GnssStatusListenerTransport(OnNmeaMessageListener listener) {
this(listener, null);
}
GnssStatusListenerTransport(OnNmeaMessageListener listener, Handler handler) {
mGnssCallback = null;
mGnssHandler = new GnssHandler(handler);
mGnssNmeaListener = listener;
mGpsListener = null;
mGpsNmeaListener = null;
mNmeaBuffer = new ArrayList<Nmea>();
mNmeaBuffer = new ArrayList<>();
}
@Override
public void onGnssStarted() {
if (mGnssCallback != null) {
Message msg = Message.obtain();
msg.what = GpsStatus.GPS_EVENT_STARTED;
mGnssHandler.sendMessage(msg);
mGnssHandler.obtainMessage(GNSS_EVENT_STARTED).sendToTarget();
}
}
@Override
public void onGnssStopped() {
if (mGnssCallback != null) {
Message msg = Message.obtain();
msg.what = GpsStatus.GPS_EVENT_STOPPED;
mGnssHandler.sendMessage(msg);
mGnssHandler.obtainMessage(GNSS_EVENT_STOPPED).sendToTarget();
}
}
@@ -1804,9 +1742,7 @@ public class LocationManager {
public void onFirstFix(int ttff) {
if (mGnssCallback != null) {
mTimeToFirstFix = ttff;
Message msg = Message.obtain();
msg.what = GpsStatus.GPS_EVENT_FIRST_FIX;
mGnssHandler.sendMessage(msg);
mGnssHandler.obtainMessage(GNSS_EVENT_FIRST_FIX).sendToTarget();
}
}
@@ -1817,11 +1753,8 @@ public class LocationManager {
mGnssStatus = new GnssStatus(svCount, prnWithFlags, cn0s, elevations, azimuths,
carrierFreqs);
Message msg = Message.obtain();
msg.what = GpsStatus.GPS_EVENT_SATELLITE_STATUS;
// remove any SV status messages already in the queue
mGnssHandler.removeMessages(GpsStatus.GPS_EVENT_SATELLITE_STATUS);
mGnssHandler.sendMessage(msg);
mGnssHandler.removeMessages(GNSS_EVENT_SATELLITE_STATUS);
mGnssHandler.obtainMessage(GNSS_EVENT_SATELLITE_STATUS).sendToTarget();
}
}
@@ -1831,11 +1764,9 @@ public class LocationManager {
synchronized (mNmeaBuffer) {
mNmeaBuffer.add(new Nmea(timestamp, nmea));
}
Message msg = Message.obtain();
msg.what = NMEA_RECEIVED;
// remove any NMEA_RECEIVED messages already in the queue
mGnssHandler.removeMessages(NMEA_RECEIVED);
mGnssHandler.sendMessage(msg);
mGnssHandler.obtainMessage(NMEA_RECEIVED).sendToTarget();
}
}
}
@@ -1849,27 +1780,12 @@ public class LocationManager {
*
* @throws SecurityException if the ACCESS_FINE_LOCATION permission is not present
* @deprecated use {@link #registerGnssStatusCallback(GnssStatus.Callback)} instead.
* @removed
*/
@Deprecated
@RequiresPermission(ACCESS_FINE_LOCATION)
public boolean addGpsStatusListener(GpsStatus.Listener listener) {
boolean result;
if (mGpsStatusListeners.get(listener) != null) {
// listener is already registered
return true;
}
try {
GnssStatusListenerTransport transport = new GnssStatusListenerTransport(listener);
result = mService.registerGnssStatusCallback(transport, mContext.getPackageName());
if (result) {
mGpsStatusListeners.put(listener, transport);
}
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
return result;
return false;
}
/**
@@ -1877,18 +1793,10 @@ public class LocationManager {
*
* @param listener GPS status listener object to remove
* @deprecated use {@link #unregisterGnssStatusCallback(GnssStatus.Callback)} instead.
* @removed
*/
@Deprecated
public void removeGpsStatusListener(GpsStatus.Listener listener) {
try {
GnssStatusListenerTransport transport = mGpsStatusListeners.remove(listener);
if (transport != null) {
mService.unregisterGnssStatusCallback(transport);
}
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
public void removeGpsStatusListener(GpsStatus.Listener listener) {}
/**
* Registers a GNSS status callback.
@@ -1900,7 +1808,7 @@ public class LocationManager {
* @throws SecurityException if the ACCESS_FINE_LOCATION permission is not present
*/
@RequiresPermission(ACCESS_FINE_LOCATION)
public boolean registerGnssStatusCallback(GnssStatus.Callback callback) {
public boolean registerGnssStatusCallback(@NonNull GnssStatus.Callback callback) {
return registerGnssStatusCallback(callback, null);
}
@@ -1915,7 +1823,8 @@ public class LocationManager {
* @throws SecurityException if the ACCESS_FINE_LOCATION permission is not present
*/
@RequiresPermission(ACCESS_FINE_LOCATION)
public boolean registerGnssStatusCallback(GnssStatus.Callback callback, Handler handler) {
public boolean registerGnssStatusCallback(
@NonNull GnssStatus.Callback callback, @Nullable Handler handler) {
boolean result;
if (mGnssStatusListeners.get(callback) != null) {
// listener is already registered
@@ -1940,7 +1849,7 @@ public class LocationManager {
*
* @param callback GNSS status callback object to remove
*/
public void unregisterGnssStatusCallback(GnssStatus.Callback callback) {
public void unregisterGnssStatusCallback(@NonNull GnssStatus.Callback callback) {
try {
GnssStatusListenerTransport transport = mGnssStatusListeners.remove(callback);
if (transport != null) {
@@ -1960,27 +1869,12 @@ public class LocationManager {
*
* @throws SecurityException if the ACCESS_FINE_LOCATION permission is not present
* @deprecated use {@link #addNmeaListener(OnNmeaMessageListener)} instead.
* @removed
*/
@Deprecated
@RequiresPermission(ACCESS_FINE_LOCATION)
public boolean addNmeaListener(GpsStatus.NmeaListener listener) {
boolean result;
if (mGpsNmeaListeners.get(listener) != null) {
// listener is already registered
return true;
}
try {
GnssStatusListenerTransport transport = new GnssStatusListenerTransport(listener);
result = mService.registerGnssStatusCallback(transport, mContext.getPackageName());
if (result) {
mGpsNmeaListeners.put(listener, transport);
}
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
return result;
return false;
}
/**
@@ -1988,18 +1882,10 @@ public class LocationManager {
*
* @param listener a {@link GpsStatus.NmeaListener} object to remove
* @deprecated use {@link #removeNmeaListener(OnNmeaMessageListener)} instead.
* @removed
*/
@Deprecated
public void removeNmeaListener(GpsStatus.NmeaListener listener) {
try {
GnssStatusListenerTransport transport = mGpsNmeaListeners.remove(listener);
if (transport != null) {
mService.unregisterGnssStatusCallback(transport);
}
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
}
public void removeNmeaListener(GpsStatus.NmeaListener listener) {}
/**
* Adds an NMEA listener.
@@ -2011,7 +1897,7 @@ public class LocationManager {
* @throws SecurityException if the ACCESS_FINE_LOCATION permission is not present
*/
@RequiresPermission(ACCESS_FINE_LOCATION)
public boolean addNmeaListener(OnNmeaMessageListener listener) {
public boolean addNmeaListener(@NonNull OnNmeaMessageListener listener) {
return addNmeaListener(listener, null);
}
@@ -2026,10 +1912,11 @@ public class LocationManager {
* @throws SecurityException if the ACCESS_FINE_LOCATION permission is not present
*/
@RequiresPermission(ACCESS_FINE_LOCATION)
public boolean addNmeaListener(OnNmeaMessageListener listener, Handler handler) {
public boolean addNmeaListener(
@NonNull OnNmeaMessageListener listener, @Nullable Handler handler) {
boolean result;
if (mGpsNmeaListeners.get(listener) != null) {
if (mGnssNmeaListeners.get(listener) != null) {
// listener is already registered
return true;
}
@@ -2052,7 +1939,7 @@ public class LocationManager {
*
* @param listener a {@link OnNmeaMessageListener} object to remove
*/
public void removeNmeaListener(OnNmeaMessageListener listener) {
public void removeNmeaListener(@NonNull OnNmeaMessageListener listener) {
try {
GnssStatusListenerTransport transport = mGnssNmeaListeners.remove(listener);
if (transport != null) {
@@ -2068,6 +1955,7 @@ public class LocationManager {
* Don't use it. Use {@link #registerGnssMeasurementsCallback} instead.
* @hide
* @deprecated Not supported anymore.
* @removed
*/
@Deprecated
@SystemApi
@@ -2083,7 +1971,8 @@ public class LocationManager {
* @return {@code true} if the callback was added successfully, {@code false} otherwise.
*/
@RequiresPermission(ACCESS_FINE_LOCATION)
public boolean registerGnssMeasurementsCallback(GnssMeasurementsEvent.Callback callback) {
public boolean registerGnssMeasurementsCallback(
@NonNull GnssMeasurementsEvent.Callback callback) {
return registerGnssMeasurementsCallback(callback, null);
}
@@ -2095,8 +1984,8 @@ public class LocationManager {
* @return {@code true} if the callback was added successfully, {@code false} otherwise.
*/
@RequiresPermission(ACCESS_FINE_LOCATION)
public boolean registerGnssMeasurementsCallback(GnssMeasurementsEvent.Callback callback,
Handler handler) {
public boolean registerGnssMeasurementsCallback(
@NonNull GnssMeasurementsEvent.Callback callback, @Nullable Handler handler) {
return mGnssMeasurementCallbackTransport.add(callback, handler);
}
@@ -2120,15 +2009,12 @@ public class LocationManager {
}
/**
* Returns an integer with flags representing the capabilities of the GNSS chipset.
* Returns the integer capability flags of the GNSS chipset as defined in {@code
* IGnssCallback.hal}
*
* @hide
*/
@SystemApi
/**
* Returns the integer capability flags of the GNSS chipset as defined in {@code
* IGnssCallback.hal}
*/
public int getGnssCapabilities() {
try {
return mGnssMeasurementCallbackTransport.getGnssCapabilities();
@@ -2144,6 +2030,7 @@ public class LocationManager {
* @hide
* @deprecated use {@link #unregisterGnssMeasurementsCallback(GnssMeasurementsEvent.Callback)}
* instead.
* @removed
*/
@Deprecated
@SystemApi
@@ -2155,7 +2042,8 @@ public class LocationManager {
*
* @param callback a {@link GnssMeasurementsEvent.Callback} object to remove.
*/
public void unregisterGnssMeasurementsCallback(GnssMeasurementsEvent.Callback callback) {
public void unregisterGnssMeasurementsCallback(
@NonNull GnssMeasurementsEvent.Callback callback) {
mGnssMeasurementCallbackTransport.remove(callback);
}
@@ -2164,6 +2052,7 @@ public class LocationManager {
* Don't use it. Use {@link #registerGnssNavigationMessageCallback} instead.
* @hide
* @deprecated Not supported anymore.
* @removed
*/
@Deprecated
@SystemApi
@@ -2179,12 +2068,12 @@ public class LocationManager {
* @deprecated use
* {@link #unregisterGnssNavigationMessageCallback(GnssNavigationMessage.Callback)}
* instead
* @removed
*/
@Deprecated
@SystemApi
@SuppressLint("Doclava125")
public void removeGpsNavigationMessageListener(GpsNavigationMessageEvent.Listener listener) {
}
public void removeGpsNavigationMessageListener(GpsNavigationMessageEvent.Listener listener) {}
/**
* Registers a GNSS Navigation Message callback.
@@ -2193,7 +2082,7 @@ public class LocationManager {
* @return {@code true} if the callback was added successfully, {@code false} otherwise.
*/
public boolean registerGnssNavigationMessageCallback(
GnssNavigationMessage.Callback callback) {
@NonNull GnssNavigationMessage.Callback callback) {
return registerGnssNavigationMessageCallback(callback, null);
}
@@ -2206,7 +2095,7 @@ public class LocationManager {
*/
@RequiresPermission(ACCESS_FINE_LOCATION)
public boolean registerGnssNavigationMessageCallback(
GnssNavigationMessage.Callback callback, Handler handler) {
@NonNull GnssNavigationMessage.Callback callback, @Nullable Handler handler) {
return mGnssNavigationMessageCallbackTransport.add(callback, handler);
}
@@ -2216,7 +2105,7 @@ public class LocationManager {
* @param callback a {@link GnssNavigationMessage.Callback} object to remove.
*/
public void unregisterGnssNavigationMessageCallback(
GnssNavigationMessage.Callback callback) {
@NonNull GnssNavigationMessage.Callback callback) {
mGnssNavigationMessageCallbackTransport.remove(callback);
}
@@ -2230,19 +2119,12 @@ public class LocationManager {
*
* @param status object containing GPS status details, or null.
* @return status object containing updated GPS status.
* @removed
*/
@Deprecated
@RequiresPermission(ACCESS_FINE_LOCATION)
public GpsStatus getGpsStatus(GpsStatus status) {
if (status == null) {
status = new GpsStatus();
}
// When mGnssStatus is null, that means that this method is called outside
// onGpsStatusChanged(). Return an empty status to maintain backwards compatibility.
if (mGnssStatus != null) {
status.setStatus(mGnssStatus, mTimeToFirstFix);
}
return status;
public @Nullable GpsStatus getGpsStatus(@Nullable GpsStatus status) {
return null;
}
/**
@@ -2319,7 +2201,7 @@ public class LocationManager {
@SystemApi
@RequiresPermission(Manifest.permission.LOCATION_HARDWARE)
public boolean registerGnssBatchedLocationCallback(long periodNanos, boolean wakeOnFifoFull,
BatchedLocationCallback callback, Handler handler) {
@NonNull BatchedLocationCallback callback, @Nullable Handler handler) {
mBatchedLocationCallbackTransport.add(callback, handler);
try {
@@ -2357,7 +2239,8 @@ public class LocationManager {
*/
@SystemApi
@RequiresPermission(Manifest.permission.LOCATION_HARDWARE)
public boolean unregisterGnssBatchedLocationCallback(BatchedLocationCallback callback) {
public boolean unregisterGnssBatchedLocationCallback(
@NonNull BatchedLocationCallback callback) {
mBatchedLocationCallbackTransport.remove(callback);
@@ -2379,7 +2262,8 @@ public class LocationManager {
*
* @return true if the command succeeds.
*/
public boolean sendExtraCommand(String provider, String command, Bundle extras) {
public boolean sendExtraCommand(
@NonNull String provider, @NonNull String command, @Nullable Bundle extras) {
try {
return mService.sendExtraCommand(provider, command, extras);
} catch (RemoteException e) {
@@ -2448,7 +2332,7 @@ public class LocationManager {
* @hide
*/
@SystemApi
public boolean isProviderPackage(String packageName) {
public boolean isProviderPackage(@NonNull String packageName) {
try {
return mService.isProviderPackage(packageName);
} catch (RemoteException e) {
@@ -2464,7 +2348,7 @@ public class LocationManager {
*/
@SystemApi
@RequiresPermission(Manifest.permission.LOCATION_HARDWARE)
public void setLocationControllerExtraPackage(String packageName) {
public void setLocationControllerExtraPackage(@NonNull String packageName) {
try {
mService.setLocationControllerExtraPackage(packageName);
} catch (RemoteException e) {

View File

@@ -17,6 +17,8 @@
package android.location;
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.TestApi;
@@ -183,14 +185,16 @@ public final class LocationRequest implements Parcelable {
*
* @return a new location request
*/
@NonNull
public static LocationRequest create() {
return new LocationRequest();
}
/** @hide */
@SystemApi
public static LocationRequest createFromDeprecatedProvider(String provider, long minTime,
float minDistance, boolean singleShot) {
@NonNull
public static LocationRequest createFromDeprecatedProvider(
@NonNull String provider, long minTime, float minDistance, boolean singleShot) {
if (minTime < 0) minTime = 0;
if (minDistance < 0) minDistance = 0;
@@ -215,8 +219,9 @@ public final class LocationRequest implements Parcelable {
/** @hide */
@SystemApi
public static LocationRequest createFromDeprecatedCriteria(Criteria criteria, long minTime,
float minDistance, boolean singleShot) {
@NonNull
public static LocationRequest createFromDeprecatedCriteria(
@NonNull Criteria criteria, long minTime, float minDistance, boolean singleShot) {
if (minTime < 0) minTime = 0;
if (minDistance < 0) minDistance = 0;
@@ -287,7 +292,7 @@ public final class LocationRequest implements Parcelable {
* @return the same object, so that setters can be chained
* @throws IllegalArgumentException if the quality constant is not valid
*/
public LocationRequest setQuality(int quality) {
public @NonNull LocationRequest setQuality(int quality) {
checkQuality(quality);
mQuality = quality;
return this;
@@ -330,7 +335,7 @@ public final class LocationRequest implements Parcelable {
* @return the same object, so that setters can be chained
* @throws IllegalArgumentException if the interval is less than zero
*/
public LocationRequest setInterval(long millis) {
public @NonNull LocationRequest setInterval(long millis) {
checkInterval(millis);
mInterval = millis;
if (!mExplicitFastestInterval) {
@@ -362,7 +367,7 @@ public final class LocationRequest implements Parcelable {
* @hide
*/
@SystemApi
public LocationRequest setLowPowerMode(boolean enabled) {
public @NonNull LocationRequest setLowPowerMode(boolean enabled) {
mLowPowerMode = enabled;
return this;
}
@@ -386,7 +391,7 @@ public final class LocationRequest implements Parcelable {
* @return the same object, so that setters can be chained
*/
@RequiresPermission(Manifest.permission.WRITE_SECURE_SETTINGS)
public LocationRequest setLocationSettingsIgnored(boolean locationSettingsIgnored) {
public @NonNull LocationRequest setLocationSettingsIgnored(boolean locationSettingsIgnored) {
mLocationSettingsIgnored = locationSettingsIgnored;
return this;
}
@@ -427,7 +432,7 @@ public final class LocationRequest implements Parcelable {
* @return the same object, so that setters can be chained
* @throws IllegalArgumentException if the interval is less than zero
*/
public LocationRequest setFastestInterval(long millis) {
public @NonNull LocationRequest setFastestInterval(long millis) {
checkInterval(millis);
mExplicitFastestInterval = true;
mFastestInterval = millis;
@@ -463,7 +468,7 @@ public final class LocationRequest implements Parcelable {
* @param millis duration of request in milliseconds
* @return the same object, so that setters can be chained
*/
public LocationRequest setExpireIn(long millis) {
public @NonNull LocationRequest setExpireIn(long millis) {
long elapsedRealtime = SystemClock.elapsedRealtime();
// Check for > Long.MAX_VALUE overflow (elapsedRealtime > 0):
@@ -491,7 +496,7 @@ public final class LocationRequest implements Parcelable {
* @param millis expiration time of request, in milliseconds since boot including suspend
* @return the same object, so that setters can be chained
*/
public LocationRequest setExpireAt(long millis) {
public @NonNull LocationRequest setExpireAt(long millis) {
mExpireAt = millis;
if (mExpireAt < 0) mExpireAt = 0;
return this;
@@ -522,7 +527,7 @@ public final class LocationRequest implements Parcelable {
* @return the same object, so that setters can be chained
* @throws IllegalArgumentException if numUpdates is 0 or less
*/
public LocationRequest setNumUpdates(int numUpdates) {
public @NonNull LocationRequest setNumUpdates(int numUpdates) {
if (numUpdates <= 0) {
throw new IllegalArgumentException(
"invalid numUpdates: " + numUpdates);
@@ -553,7 +558,8 @@ public final class LocationRequest implements Parcelable {
}
}
public LocationRequest setProvider(String provider) {
/** Sets the provider to use for this location request. */
public @NonNull LocationRequest setProvider(@NonNull String provider) {
checkProvider(provider);
mProvider = provider;
return this;
@@ -561,13 +567,13 @@ public final class LocationRequest implements Parcelable {
/** @hide */
@SystemApi
public String getProvider() {
public @NonNull String getProvider() {
return mProvider;
}
/** @hide */
@SystemApi
public LocationRequest setSmallestDisplacement(float meters) {
public @NonNull LocationRequest setSmallestDisplacement(float meters) {
checkDisplacement(meters);
mSmallestDisplacement = meters;
return this;
@@ -590,13 +596,13 @@ public final class LocationRequest implements Parcelable {
* @hide
*/
@SystemApi
public void setWorkSource(WorkSource workSource) {
public void setWorkSource(@Nullable WorkSource workSource) {
mWorkSource = workSource;
}
/** @hide */
@SystemApi
public WorkSource getWorkSource() {
public @Nullable WorkSource getWorkSource() {
return mWorkSource;
}