question: boolean synchronizeStackViewsWithModel ( ) { if ( mStackViewsDirty ) { ArrayList < T > data = mCallback . getData ( ) ; float stackScroll = mStackScroller . getStackScroll ( ) ; int [ ] visibleRange = mTmpVisibleRange ; boolean isValidVisibleRange = updateStackTransforms ( mCurrentTaskTransforms , data , stackScroll , visibleRange , false ) ; mTmpTaskViewMap . clear ( ) ; int childCount = getChildCount ( ) ; for ( int i = childCount - 1 ; i >= 0 ; i -- ) { DeckChildView < T > tv = ( DeckChildView ) getChildAt ( i ) ; T key = tv . getAttachedKey ( ) ; int taskIndex = data . indexOf ( key ) ; if ( visibleRange [ 1 ] <= taskIndex && taskIndex <= visibleRange [ 0 ] ) { mTmpTaskViewMap . put ( key , tv ) ; } else { mViewPool . returnViewToPool ( tv ) ; } } for ( int i = visibleRange [ 0 ] ; isValidVisibleRange && i >= visibleRange [ 1 ] ; i -- ) { T key = data . get ( i ) ; DeckChildViewTransform transform = mCurrentTaskTransforms . get ( i ) ; DeckChildView tv = mTmpTaskViewMap . get ( key ) ; if ( tv == null ) { tv = mViewPool . pickUpViewFromPool ( key , key ) ; if ( mStackViewsAnimationDuration > 0 ) { if ( Float . compare ( transform . p , 0f ) <= 0 ) { mLayoutAlgorithm . getStackTransform ( 0f , 0f , mTmpTransform , null ) ; } else { mLayoutAlgorithm . getStackTransform ( 1f , 0f , mTmpTransform , null ) ; } tv . updateViewPropertiesToTaskTransform ( mTmpTransform , 0 ) ; } } tv . updateViewPropertiesToTaskTransform ( mCurrentTaskTransforms . get ( i ) , mStackViewsAnimationDuration , mRequestUpdateClippingListener ) ; } mStackViewsAnimationDuration = 0 ; mStackViewsDirty = false ; mStackViewsClipDirty = true ; return true ; } return false ; }
target:  Synchronizes the views with the model