package org.holoeverywhere.widget; import android.database.DataSetObserver; import android.view.View; import android.view.ViewGroup; import android.widget.ListAdapter; import android.widget.WrapperListAdapter; public class ListAdapterWrapper implements WrapperListAdapter { public static interface ListAdapterCallback { public void onChanged(); public void onInvalidated(); public View onPrepareView(View view, int position); } private final class WrapperDataSetObserver extends DataSetObserver { private DataSetObserver mDataSetObserver; public WrapperDataSetObserver(DataSetObserver dataSetObserver) { mDataSetObserver = dataSetObserver; } @Override public void onChanged() { mDataSetObserver.onChanged(); if (mCallback != null) { mCallback.onChanged(); } } @Override public void onInvalidated() { mDataSetObserver.onInvalidated(); if (mCallback != null) { mCallback.onInvalidated(); } } } private final ListAdapterCallback mCallback; private DataSetObserver mLastDataSetObserver; private final ListAdapter mWrapped; public ListAdapterWrapper(ListAdapter wrapped) { this(wrapped, null); } public ListAdapterWrapper(ListAdapter wrapped, ListAdapterCallback callback) { mWrapped = wrapped; mCallback = callback; } @Override public boolean areAllItemsEnabled() { return mWrapped.areAllItemsEnabled(); } @Override public int getCount() { return mWrapped.getCount(); } @Override public Object getItem(int position) { return mWrapped.getItem(position); } @Override public long getItemId(int position) { return mWrapped.getItemId(position); } @Override public int getItemViewType(int position) { return mWrapped.getItemViewType(position); } @Override public View getView(int position, View convertView, ViewGroup parent) { return onPrepareView(mWrapped.getView(position, convertView, parent), position); } @Override public int getViewTypeCount() { return mWrapped.getViewTypeCount(); } @Override public ListAdapter getWrappedAdapter() { return mWrapped; } @Override public boolean hasStableIds() { return mWrapped.hasStableIds(); } @Override public boolean isEmpty() { return mWrapped.isEmpty(); } @Override public boolean isEnabled(int position) { return mWrapped.isEnabled(position); } public void notifyDataSetChanged() { if (mLastDataSetObserver != null) { mLastDataSetObserver.onChanged(); } } public View onPrepareView(View view, int position) { if (mCallback != null) { return mCallback.onPrepareView(view, position); } return view; } @Override public void registerDataSetObserver(DataSetObserver dataSetObserver) { mWrapped.registerDataSetObserver(mLastDataSetObserver = new WrapperDataSetObserver( dataSetObserver)); } @Override public void unregisterDataSetObserver(DataSetObserver dataSetObserver) { mWrapped.unregisterDataSetObserver(mLastDataSetObserver); mLastDataSetObserver = null; } }