diff options
Diffstat (limited to 'android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/widget/ListAdapterWrapper.java')
-rw-r--r-- | android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/widget/ListAdapterWrapper.java | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/widget/ListAdapterWrapper.java b/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/widget/ListAdapterWrapper.java new file mode 100644 index 0000000000..aa6dd0a870 --- /dev/null +++ b/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/widget/ListAdapterWrapper.java @@ -0,0 +1,135 @@ + +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; + } +} |