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:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user