private static void safeUpdateFlags(RecyclerView.ViewHolder holder, int flags) {
    if (!(holder instanceof DraggableItemViewHolder)) {
      return;
    }

    final DraggableItemViewHolder holder2 = (DraggableItemViewHolder) holder;

    final int curFlags = holder2.getDragStateFlags();
    final int mask = ~RecyclerViewDragDropManager.STATE_FLAG_IS_UPDATED;

    // append UPDATED flag
    if ((curFlags == STATE_FLAG_INITIAL_VALUE) || (((curFlags ^ flags) & mask) != 0)) {
      flags |= RecyclerViewDragDropManager.STATE_FLAG_IS_UPDATED;
    }

    ((DraggableItemViewHolder) holder).setDragStateFlags(flags);
  }
  @Override
  public VH onCreateViewHolder(ViewGroup parent, int viewType) {
    final VH holder = super.onCreateViewHolder(parent, viewType);

    if (holder instanceof DraggableItemViewHolder) {
      ((DraggableItemViewHolder) holder).setDragStateFlags(STATE_FLAG_INITIAL_VALUE);
    }

    return holder;
  }