{"record":{"id":"be66a7f6ec7ba236","repo":"material-components/material-components-android","slug":"invalid-fit-mode-fitmode","errorCode":null,"errorMessage":"Invalid fit mode: > fitMode <","messagePattern":"Invalid fit mode: > fitMode <","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"lib/java/com/google/android/material/transition/FitModeEvaluators.java","lineNumber":132,"sourceCode":"        public void applyMask(RectF maskBounds, float maskMultiplier, FitModeResult fitModeResult) {\n          float currentWidthDiff =\n              Math.abs(fitModeResult.currentEndWidth - fitModeResult.currentStartWidth);\n          maskBounds.left += currentWidthDiff / 2 * maskMultiplier;\n          maskBounds.right -= currentWidthDiff / 2 * maskMultiplier;\n        }\n      };\n\n  static FitModeEvaluator get(\n      @FitMode int fitMode, boolean entering, RectF startBounds, RectF endBounds) {\n    switch (fitMode) {\n      case FIT_MODE_AUTO:\n        return shouldAutoFitToWidth(entering, startBounds, endBounds) ? WIDTH : HEIGHT;\n      case FIT_MODE_WIDTH:\n        return WIDTH;\n      case FIT_MODE_HEIGHT:\n        return HEIGHT;\n      default:\n        throw new IllegalArgumentException(\"Invalid fit mode: \" + fitMode);\n    }\n  }\n\n  private static boolean shouldAutoFitToWidth(\n      boolean entering, RectF startBounds, RectF endBounds) {\n    float startWidth = startBounds.width();\n    float startHeight = startBounds.height();\n    float endWidth = endBounds.width();\n    float endHeight = endBounds.height();\n\n    float endHeightFitToWidth = endHeight * startWidth / endWidth;\n    float startHeightFitToWidth = startHeight * endWidth / startWidth;\n    return entering ? endHeightFitToWidth >= startHeight : startHeightFitToWidth >= endHeight;\n  }\n\n  private FitModeEvaluators() {}\n}\n","sourceCodeStart":114,"sourceCodeEnd":150,"githubUrl":"https://github.com/material-components/material-components-android/blob/ac7e18efeefb331850c561faf9ab8bf81d27ba68/lib/java/com/google/android/material/transition/FitModeEvaluators.java#L114-L150","documentation":"FitModeEvaluators.get (FitModeEvaluators.java:132) chooses whether a MaterialContainerTransform fits the incoming/outgoing content to width or height. Only FIT_MODE_AUTO, FIT_MODE_WIDTH and FIT_MODE_HEIGHT are accepted; anything else reaches the default branch and throws IllegalArgumentException. The value comes from MaterialContainerTransform.setFitMode().","triggerScenarios":"Calling transform.setFitMode(x) with an int outside the FIT_MODE_* constant set; passing a value round-tripped through saved state or serialization without validation; mixing up constants from a different class (e.g. a fade mode constant).","commonSituations":"Numeric hardcoding instead of constants; copy-paste between setFadeMode and setFitMode calls; remote-config-driven transition tuning with unchecked ints.","solutions":["Use MaterialContainerTransform.FIT_MODE_AUTO / FIT_MODE_WIDTH / FIT_MODE_HEIGHT.","Whitelist-check any dynamic value before setFitMode().","Annotate your wrapper's parameter with @FitMode so the IDE/lint flags invalid constants."],"exampleFix":"// before\ntransform.setFitMode(9);\n\n// after\ntransform.setFitMode(MaterialContainerTransform.FIT_MODE_WIDTH);","handlingStrategy":"validation","validationCode":"static @FitMode int coerceFitMode(int candidate) {\n  if (candidate == MaterialContainerTransform.FIT_MODE_WIDTH\n      || candidate == MaterialContainerTransform.FIT_MODE_HEIGHT) return candidate;\n  return MaterialContainerTransform.FIT_MODE_AUTO;\n}\ntransform.setFitMode(coerceFitMode(rawFitMode));","typeGuard":"static boolean isValidFitMode(int m) {\n  return m == MaterialContainerTransform.FIT_MODE_AUTO\n      || m == MaterialContainerTransform.FIT_MODE_WIDTH\n      || m == MaterialContainerTransform.FIT_MODE_HEIGHT;\n}","tryCatchPattern":null,"preventionTips":["Use FIT_MODE_* constants only; don't interleave numeric literals.","Keep fade-mode and fit-mode config values in distinct typed fields to avoid cross-assignment.","Unit-test your transition-config parser with invalid ints."],"tags":["android","material-components","container-transform","fit-mode","enum-validation"],"backgroundTag":null,"analyzedSha":"ac7e18efeefb331850c561faf9ab8bf81d27ba68","analyzedAt":"2026-08-14T15:35:35.735Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}