{"record":{"id":"bd218956d2ae30e3","repo":"material-components/material-components-android","slug":"invalid-state-to-get-outer-edge-offset-d","errorCode":null,"errorMessage":"Invalid state to get outer edge offset: %d","messagePattern":"Invalid state to get outer edge offset: (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"lib/java/com/google/android/material/sidesheet/SideSheetBehavior.java","lineNumber":781,"sourceCode":"   * {@link StateSettlingTracker}.\n   */\n  private boolean isSettling(View child, int state, boolean isReleasingView) {\n    int left = getOuterEdgeOffsetForState(state);\n    ViewDragHelper viewDragHelper = getViewDragHelper();\n    return viewDragHelper != null\n        && (isReleasingView\n            ? viewDragHelper.settleCapturedViewAt(left, child.getTop())\n            : viewDragHelper.smoothSlideViewTo(child, left, child.getTop()));\n  }\n\n  int getOuterEdgeOffsetForState(@StableSheetState int state) {\n    switch (state) {\n      case STATE_EXPANDED:\n        return getExpandedOffset();\n      case STATE_HIDDEN:\n        return sheetDelegate.getHiddenOffset();\n      default:\n        throw new IllegalArgumentException(\"Invalid state to get outer edge offset: \" + state);\n    }\n  }\n\n  @Nullable\n  ViewDragHelper getViewDragHelper() {\n    return viewDragHelper;\n  }\n\n  private final ViewDragHelper.Callback dragCallback =\n      new ViewDragHelper.Callback() {\n\n        @Override\n        public boolean tryCaptureView(@NonNull View child, int pointerId) {\n          if (state == STATE_DRAGGING) {\n            return false;\n          }\n          return viewRef != null && viewRef.get() == child;\n        }","sourceCodeStart":763,"sourceCodeEnd":799,"githubUrl":"https://github.com/material-components/material-components-android/blob/ac7e18efeefb331850c561faf9ab8bf81d27ba68/lib/java/com/google/android/material/sidesheet/SideSheetBehavior.java#L763-L799","documentation":"SideSheetBehavior.getOuterEdgeOffsetForState() throws IllegalArgumentException for any state other than STATE_EXPANDED and STATE_HIDDEN. It maps a stable target state to the pixel offset the sheet should settle to; transient states (DRAGGING/SETTLING) and any other int have no target offset, hence the rejection.","triggerScenarios":"Calling this package-visible method (or a code path that uses it, like setState on an unlaid-out view with an invalid state) with e.g. STATE_DRAGGING, STATE_SETTLING, STATE_HALF_EXPANDED, or a custom int.","commonSituations":"Reusing a state int from BottomSheetBehavior code that includes half-expanded semantics; passing a state restored from a bundle without validation; test code poking internal offsets with arbitrary states.","solutions":["Restrict state arguments to BottomSheetBehavior.STATE_EXPANDED and STATE_HIDDEN when driving side sheets.","Validate any restored/persisted state before calling state APIs: map unknown values to a safe default.","Do not port BottomSheetDialog state constants (e.g. half-expanded) to SideSheetBehavior."],"exampleFix":"// before\nbehavior.setState(savedState); // savedState could be STATE_DRAGGING/SETTLING/other\n\n// after\nint safe = (savedState == BottomSheetBehavior.STATE_HIDDEN)\n        ? BottomSheetBehavior.STATE_HIDDEN\n        : BottomSheetBehavior.STATE_EXPANDED;\nbehavior.setState(safe);","handlingStrategy":"type-guard","validationCode":"static int safeSheetState(int state) {\n  return state == BottomSheetBehavior.STATE_HIDDEN\n      ? BottomSheetBehavior.STATE_HIDDEN\n      : BottomSheetBehavior.STATE_EXPANDED;\n}","typeGuard":"/** SideSheet state APIs accept only EXPANDED and HIDDEN. */\nstatic boolean isSideSheetTargetState(int state) {\n  return state == BottomSheetBehavior.STATE_EXPANDED\n      || state == BottomSheetBehavior.STATE_HIDDEN;\n}","tryCatchPattern":null,"preventionTips":["Don't port BottomSheet state constants (half-expanded, dragging) into side-sheet code.","Validate restored state ints before calling any state-mapping API."],"tags":["android","material-components","sidesheet","validation","state-machine"],"backgroundTag":null,"analyzedSha":"ac7e18efeefb331850c561faf9ab8bf81d27ba68","analyzedAt":"2026-08-14T15:35:35.735Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}