material-components/material-components-android · error · IllegalArgumentException
Invalid fade mode: > fadeMode <
Error message
Invalid fade mode: > fadeMode <
What it means
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.
Source
Thrown at lib/java/com/google/android/material/transition/platform/FadeModeEvaluators.java:92
fadeStartFraction + fadeFractionDiff * threshold;
int startAlpha = lerp(255, 0, fadeStartFraction, fadeFractionThreshold, progress);
int endAlpha = lerp(0, 255, fadeFractionThreshold, fadeEndFraction, progress);
return FadeModeResult.startOnTop(startAlpha, endAlpha);
}
};
static FadeModeEvaluator get(@FadeMode int fadeMode, boolean entering) {
switch (fadeMode) {
case FADE_MODE_IN:
return entering ? IN : OUT;
case FADE_MODE_OUT:
return entering ? OUT : IN;
case FADE_MODE_CROSS:
return CROSS;
case FADE_MODE_THROUGH:
return THROUGH;
default:
throw new IllegalArgumentException("Invalid fade mode: " + fadeMode);
}
}
private FadeModeEvaluators() {}
}
View on GitHub (pinned to ac7e18efee)
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.
Example fix
// before import com.google.android.material.transition.platform.MaterialContainerTransform; transform.setFadeMode(11); // after import com.google.android.material.transition.platform.MaterialContainerTransform; transform.setFadeMode(MaterialContainerTransform.FADE_MODE_CROSS);
Defensive patterns
Strategy: validation
Validate before calling
static boolean isValidPlatformFadeMode(int m) {
return m >= com.google.android.material.transition.platform.MaterialContainerTransform.FADE_MODE_IN
&& m <= com.google.android.material.transition.platform.MaterialContainerTransform.FADE_MODE_THROUGH;
}
if (isValidPlatformFadeMode(raw)) transform.setFadeMode(raw); else transform.setFadeMode(com.google.android.material.transition.platform.MaterialContainerTransform.FADE_MODE_IN); Type guard
static int coercePlatformFadeMode(int candidate) {
switch (candidate) {
case com.google.android.material.transition.platform.MaterialContainerTransform.FADE_MODE_IN:
case com.google.android.material.transition.platform.MaterialContainerTransform.FADE_MODE_OUT:
case com.google.android.material.transition.platform.MaterialContainerTransform.FADE_MODE_CROSS:
case com.google.android.material.transition.platform.MaterialContainerTransform.FADE_MODE_THROUGH:
return candidate;
default: return com.google.android.material.transition.platform.MaterialContainerTransform.FADE_MODE_IN;
}
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: Apps mixing platform and androidx transition classes; hardcoded ints copied from snippets that used the other variant; remote-config supplied fade mode without validation.
Related errors
- Invalid fade mode: > fadeMode <
- Invalid fit mode: > fitMode <
- Invalid transition direction: > transitionDirection <
- Invalid fit mode: > fitMode <
- Invalid transition direction: > transitionDirection <
AI-assisted analysis of material-components/material-components-android@ac7e18efee (2026-08-14).
Data as JSON: /api/errors/d9a120dbc54eb038.
Report an issue: GitHub.