{"record":{"id":"a99fe39e9badcc66","repo":"microg/GmsCore","slug":"invalid-displacement-smallestdisplacementmeters","errorCode":null,"errorMessage":"invalid displacement: {smallestDisplacementMeters}","messagePattern":"invalid displacement: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"play-services-location/src/main/java/com/google/android/gms/location/LocationRequest.java","lineNumber":491,"sourceCode":"\n    /**\n     * @deprecated Use {@link LocationRequest.Builder#setPriority(int)} instead. May be removed in a future release.\n     */\n    @Deprecated\n    @NonNull\n    public LocationRequest setPriority(@Priority int priority) {\n        PriorityUtil.checkValidPriority(priority);\n        this.priority = priority;\n        return this;\n    }\n\n    /**\n     * @deprecated Use {@link LocationRequest.Builder#setMinUpdateDistanceMeters(float)} instead. May be removed in a future release.\n     */\n    @Deprecated\n    @NonNull\n    public LocationRequest setSmallestDisplacement(float smallestDisplacementMeters) {\n        if (smallestDisplacementMeters < 0) throw new IllegalArgumentException(\"invalid displacement: \" + smallestDisplacementMeters);\n        this.minUpdateDistanceMeters = smallestDisplacementMeters;\n        return this;\n    }\n\n    /**\n     * @deprecated Use {@link LocationRequest.Builder#setWaitForAccurateLocation(boolean)} instead. May be removed in a future release.\n     */\n    @Deprecated\n    @NonNull\n    public LocationRequest setWaitForAccurateLocation(boolean waitForAccurateLocation) {\n        this.waitForAccurateLocation = waitForAccurateLocation;\n        return this;\n    }\n\n    @Override\n    @NonNull\n    public String toString() {\n        StringBuilder sb = new StringBuilder();","sourceCodeStart":473,"sourceCodeEnd":509,"githubUrl":"https://github.com/microg/GmsCore/blob/157c9d86ac46c195a86c2f15ab55c84036223f95/play-services-location/src/main/java/com/google/android/gms/location/LocationRequest.java#L473-L509","documentation":"LocationRequest.setSmallestDisplacement(float) throws IllegalArgumentException when smallestDisplacementMeters is negative. This parameter sets the minimum distance the device must move before a new location is delivered, so negative distances are invalid. The check happens synchronously before the field is assigned.","triggerScenarios":"Calling the deprecated setSmallestDisplacement() with a negative float, e.g. setSmallestDisplacement(-10f), or a computed displacement that went negative (e.g. subtraction or a sign-flipped config value).","commonSituations":"Sign errors in conversion (km/h vs m/s style mistakes); -1 sentinel defaults; user-entered displacement with a leading minus parsed as float; unit confusion producing negative deltas.","solutions":["Clamp before calling: request.setSmallestDisplacement(Math.max(0f, displacementMeters)).","If a sentinel (-1) means 'no displacement filter', use 0f, which means no minimum-distance filtering.","Migrate to LocationRequest.Builder.setMinUpdateDistanceMeters(float) with a validated non-negative value."],"exampleFix":"// before\nrequest.setSmallestDisplacement(displacementMeters); // throws if negative\n// after\nrequest.setSmallestDisplacement(Math.max(0f, displacementMeters));","handlingStrategy":"validation","validationCode":"// Java\npublic static float sanitizeDisplacement(float displacementMeters) {\n    return Math.max(0f, displacementMeters);\n}\n// request.setSmallestDisplacement(sanitizeDisplacement(raw));","typeGuard":"static boolean isValidDisplacement(float meters) { return meters >= 0f && !Float.isNaN(meters); }","tryCatchPattern":"// Java\ntry {\n    request.setSmallestDisplacement(displacementMeters);\n} catch (IllegalArgumentException e) {\n    Log.w(\"LocationReq\", \"Invalid displacement \" + displacementMeters + \", using 0\", e);\n    request.setSmallestDisplacement(0f);\n}","preventionTips":["Use 0f (not -1) to mean 'no displacement filter'.","Sanitize user-entered distances (strip signs, reject NaN) before applying.","Prefer Builder.setMinUpdateDistanceMeters to avoid deprecated setter surprises."],"tags":["android","location","illegal-argument","deprecated-api"],"backgroundTag":"invalid-argument-value","analyzedSha":"157c9d86ac46c195a86c2f15ab55c84036223f95","analyzedAt":"2026-09-06T17:27:33.892Z","contentChangedAt":"2026-09-06T17:27:33.892Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}