package com.airbnb.epoxy;
import android.support.v7.widget.RecyclerView.AdapterDataObserver;
/**
* We don't allow any data change notifications except the ones done though diffing. Forcing
* changes to happen through diffing reduces the chance for developer error when implementing an
* adapter.
* <p>
* This observer throws upon any changes done outside of diffing.
*/
class NotifyBlocker extends AdapterDataObserver {
private boolean changesAllowed;
void allowChanges() {
changesAllowed = true;
}
void blockChanges() {
changesAllowed = false;
}
@Override
public void onChanged() {
if (!changesAllowed) {
throw new IllegalStateException(
"You cannot notify item changes directly. Call `requestModelBuild` instead.");
}
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount) {
onChanged();
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount, Object payload) {
onChanged();
}
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
onChanged();
}
@Override
public void onItemRangeRemoved(int positionStart, int itemCount) {
onChanged();
}
@Override
public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
onChanged();
}
}