package com.airbnb.epoxy; import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView.AdapterDataObserver; import android.util.Log; /** * This data observer can be registered with an Epoxy adapter or controller to log all item change * events. This may be useful to use in debug builds in order to observe model updates and monitor * for issues. * <p> * You may want to look for unexpected item updates to catch improper hashCode/equals * implementations in your models. * <p> * Additionally, you may want to look for frequent or unnecessary updates as an opportunity for * optimization. */ public class EpoxyDiffLogger extends AdapterDataObserver { private final String tag; public EpoxyDiffLogger(String tag) { this.tag = tag; } @Override public void onItemRangeChanged(int positionStart, int itemCount) { Log.d(tag, "Item range changed. Start: " + positionStart + " Count: " + itemCount); } @Override public void onItemRangeChanged(int positionStart, int itemCount, @Nullable Object payload) { if (payload == null) { onItemRangeChanged(positionStart, itemCount); } else { Log.d(tag, "Item range changed with payloads. Start: " + positionStart + " Count: " + itemCount); } } @Override public void onItemRangeInserted(int positionStart, int itemCount) { Log.d(tag, "Item range inserted. Start: " + positionStart + " Count: " + itemCount); } @Override public void onItemRangeRemoved(int positionStart, int itemCount) { Log.d(tag, "Item range removed. Start: " + positionStart + " Count: " + itemCount); } @Override public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) { Log.d(tag, "Item moved. From: " + fromPosition + " To: " + toPosition); } }