// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.chrome.browser.download.home.list;

import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.RecyclerView.ItemAnimator;

import org.chromium.chrome.browser.download.internal.R;
import org.chromium.ui.modelutil.PropertyKey;
import org.chromium.ui.modelutil.PropertyModel;
import org.chromium.ui.modelutil.PropertyModelChangeProcessor.ViewBinder;

class ListPropertyViewBinder implements ViewBinder<PropertyModel, RecyclerView, PropertyKey> {
    @Override
    public void bind(PropertyModel model, RecyclerView view, PropertyKey propertyKey) {
        if (propertyKey == ListProperties.ENABLE_ITEM_ANIMATIONS) {
            if (model.get(ListProperties.ENABLE_ITEM_ANIMATIONS)) {
                if (view.getItemAnimator() == null) {
                    view.setItemAnimator((ItemAnimator) view.getTag(R.id.item_animator));
                    view.setTag(R.id.item_animator, null);
                }
            } else {
                if (view.getItemAnimator() != null) {
                    view.setTag(R.id.item_animator, view.getItemAnimator());
                    view.setItemAnimator(null);
                }
            }
        } else if (propertyKey == ListProperties.CALLBACK_OPEN
                || propertyKey == ListProperties.CALLBACK_PAUSE
                || propertyKey == ListProperties.CALLBACK_RESUME
                || propertyKey == ListProperties.CALLBACK_CANCEL
                || propertyKey == ListProperties.CALLBACK_SHARE
                || propertyKey == ListProperties.CALLBACK_REMOVE
                || propertyKey == ListProperties.PROVIDER_VISUALS
                || propertyKey == ListProperties.CALLBACK_SELECTION
                || propertyKey == ListProperties.CALLBACK_RENAME
                || propertyKey == ListProperties.SELECTION_MODE_ACTIVE) {
            view.getAdapter().notifyItemRangeChanged(0, view.getAdapter().getItemCount());
        }
    }
}