Most of the time we have at least one step between evaluate() call but sometimes there's a possibility when deltaPos > 1 but mTransitionLastTime == 0. In that situation mCurrentState == mEndState so we never set newState = true when at the end we have mNeedsFireTransitionCompleted |= newState :/
On low ends devices there's sometimes a issue when "onTransitionCompleted" are not called.
I found that the issue is in
MotionLayout.evaluate(force: boolean)
function. When we start this function with state:Most of the time we have at least one step between
evaluate()
call but sometimes there's a possibility whendeltaPos > 1
butmTransitionLastTime == 0
. In that situationmCurrentState == mEndState
so we never setnewState = true
when at the end we havemNeedsFireTransitionCompleted |= newState
:/Some logs: