{"record":{"id":"d9a120dbc54eb038","repo":"material-components/material-components-android","slug":"invalid-fade-mode-fademode-d9a120","errorCode":null,"errorMessage":"Invalid fade mode: > fadeMode <","messagePattern":"Invalid fade mode: > fadeMode <","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"lib/java/com/google/android/material/transition/platform/FadeModeEvaluators.java","lineNumber":92,"sourceCode":"              fadeStartFraction + fadeFractionDiff * threshold;\n          int startAlpha = lerp(255, 0, fadeStartFraction, fadeFractionThreshold, progress);\n          int endAlpha = lerp(0, 255, fadeFractionThreshold, fadeEndFraction, progress);\n          return FadeModeResult.startOnTop(startAlpha, endAlpha);\n        }\n      };\n\n  static FadeModeEvaluator get(@FadeMode int fadeMode, boolean entering) {\n    switch (fadeMode) {\n      case FADE_MODE_IN:\n        return entering ? IN : OUT;\n      case FADE_MODE_OUT:\n        return entering ? OUT : IN;\n      case FADE_MODE_CROSS:\n        return CROSS;\n      case FADE_MODE_THROUGH:\n        return THROUGH;\n      default:\n        throw new IllegalArgumentException(\"Invalid fade mode: \" + fadeMode);\n    }\n  }\n\n  private FadeModeEvaluators() {}\n}\n","sourceCodeStart":74,"sourceCodeEnd":98,"githubUrl":"https://github.com/material-components/material-components-android/blob/ac7e18efeefb331850c561faf9ab8bf81d27ba68/lib/java/com/google/android/material/transition/platform/FadeModeEvaluators.java#L74-L98","documentation":"This is the platform (android.transition, non-A androidx) copy of FadeModeEvaluators at transition/platform/FadeModeEvaluators.java:92. It resolves the fade strategy for a MaterialContainerTransform built with the platform transition API; only FADE_MODE_IN/OUT/CROSS/THROUGH are valid, and any other int throws IllegalArgumentException from the default branch. Same semantics as the androidx copy, different import path.","triggerScenarios":"Using com.google.android.material.transition.platform.MaterialContainerTransform and calling setFadeMode() with an int outside the FADE_MODE_* constant set; sharing a config int between androidx and platform transform classes whose constant spaces were assumed identical.","commonSituations":"Apps mixing platform and androidx transition classes; hardcoded ints copied from snippets that used the other variant; remote-config supplied fade mode without validation.","solutions":["Use the constants on the platform MaterialContainerTransform class you instantiated.","Validate dynamic values are within the four valid constants before setFadeMode().","Standardize on either the platform or androidx transition package across the codebase to avoid constant mix-ups."],"exampleFix":"// before\nimport com.google.android.material.transition.platform.MaterialContainerTransform;\ntransform.setFadeMode(11);\n\n// after\nimport com.google.android.material.transition.platform.MaterialContainerTransform;\ntransform.setFadeMode(MaterialContainerTransform.FADE_MODE_CROSS);","handlingStrategy":"validation","validationCode":"static boolean isValidPlatformFadeMode(int m) {\n  return m >= com.google.android.material.transition.platform.MaterialContainerTransform.FADE_MODE_IN\n      && m <= com.google.android.material.transition.platform.MaterialContainerTransform.FADE_MODE_THROUGH;\n}\nif (isValidPlatformFadeMode(raw)) transform.setFadeMode(raw); else transform.setFadeMode(com.google.android.material.transition.platform.MaterialContainerTransform.FADE_MODE_IN);","typeGuard":"static int coercePlatformFadeMode(int candidate) {\n  switch (candidate) {\n    case com.google.android.material.transition.platform.MaterialContainerTransform.FADE_MODE_IN:\n    case com.google.android.material.transition.platform.MaterialContainerTransform.FADE_MODE_OUT:\n    case com.google.android.material.transition.platform.MaterialContainerTransform.FADE_MODE_CROSS:\n    case com.google.android.material.transition.platform.MaterialContainerTransform.FADE_MODE_THROUGH:\n      return candidate;\n    default: return com.google.android.material.transition.platform.MaterialContainerTransform.FADE_MODE_IN;\n  }\n}","tryCatchPattern":null,"preventionTips":["Import constants from the same platform/androidx variant you construct.","Standardize the codebase on one transition package.","Validate config ints at a single choke point before building transitions."],"tags":["android","material-components","platform-transitions","container-transform","fade-mode","enum-validation"],"backgroundTag":null,"analyzedSha":"ac7e18efeefb331850c561faf9ab8bf81d27ba68","analyzedAt":"2026-08-14T15:35:35.735Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}