Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/widget/HeaderViewListAdapter.java')
-rw-r--r--android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/widget/HeaderViewListAdapter.java180
1 files changed, 180 insertions, 0 deletions
diff --git a/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/widget/HeaderViewListAdapter.java b/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/widget/HeaderViewListAdapter.java
new file mode 100644
index 0000000000..b633c23715
--- /dev/null
+++ b/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/widget/HeaderViewListAdapter.java
@@ -0,0 +1,180 @@
+
+package org.holoeverywhere.widget;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Filter;
+import android.widget.Filterable;
+import android.widget.ListAdapter;
+
+public class HeaderViewListAdapter extends ListAdapterWrapper implements Filterable {
+ public static final class ViewInfo {
+ public Object data;
+ public boolean isSelectable;
+ public View view;
+ }
+
+ private static final List<ViewInfo> EMPTY_INFO_LIST = new ArrayList<ViewInfo>();
+ boolean mAreAllFixedViewsSelectable;
+ private final List<ViewInfo> mFooterViewInfos;
+ private final List<ViewInfo> mHeaderViewInfos;
+ private final boolean mIsFilterable;
+
+ public HeaderViewListAdapter(List<ViewInfo> headerViewInfos,
+ List<ViewInfo> footerViewInfos, ListAdapter adapter, ListAdapterCallback listener) {
+ super(adapter, listener);
+ mIsFilterable = adapter instanceof Filterable;
+ if (headerViewInfos == null) {
+ mHeaderViewInfos = EMPTY_INFO_LIST;
+ } else {
+ mHeaderViewInfos = headerViewInfos;
+ }
+ if (footerViewInfos == null) {
+ mFooterViewInfos = EMPTY_INFO_LIST;
+ } else {
+ mFooterViewInfos = footerViewInfos;
+ }
+ mAreAllFixedViewsSelectable =
+ areAllListInfosSelectable(mHeaderViewInfos)
+ && areAllListInfosSelectable(mFooterViewInfos);
+ }
+
+ @Override
+ public boolean areAllItemsEnabled() {
+ return mAreAllFixedViewsSelectable && getWrappedAdapter().areAllItemsEnabled();
+ }
+
+ private boolean areAllListInfosSelectable(List<ViewInfo> infos) {
+ if (infos != null) {
+ for (ViewInfo info : infos) {
+ if (!info.isSelectable) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public int getCount() {
+ return getFootersCount() + getHeadersCount() + getWrappedAdapter().getCount();
+ }
+
+ @Override
+ public Filter getFilter() {
+ if (mIsFilterable) {
+ return ((Filterable) getWrappedAdapter()).getFilter();
+ }
+ return null;
+ }
+
+ public int getFootersCount() {
+ return mFooterViewInfos.size();
+ }
+
+ public int getHeadersCount() {
+ return mHeaderViewInfos.size();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ int numHeaders = getHeadersCount();
+ if (position < numHeaders) {
+ return mHeaderViewInfos.get(position).data;
+ }
+ final int adjPosition = position - numHeaders;
+ int adapterCount = getWrappedAdapter().getCount();
+ if (adjPosition < adapterCount) {
+ return super.getItem(adjPosition);
+ }
+ return mFooterViewInfos.get(adjPosition - adapterCount).data;
+ }
+
+ @Override
+ public long getItemId(int position) {
+ int numHeaders = getHeadersCount();
+ if (position >= numHeaders) {
+ int adjPosition = position - numHeaders;
+ int adapterCount = getWrappedAdapter().getCount();
+ if (adjPosition < adapterCount) {
+ return super.getItemId(adjPosition);
+ }
+ }
+ return AdapterView.INVALID_ROW_ID;
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ int numHeaders = getHeadersCount();
+ if (getWrappedAdapter() != null && position >= numHeaders) {
+ int adjPosition = position - numHeaders;
+ int adapterCount = getWrappedAdapter().getCount();
+ if (adjPosition < adapterCount) {
+ return super.getItemViewType(adjPosition);
+ }
+ }
+ return AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ int numHeaders = getHeadersCount();
+ if (position < numHeaders) {
+ convertView = mHeaderViewInfos.get(position).view;
+ } else {
+ final int adjPosition = position - numHeaders;
+ int adapterCount = getWrappedAdapter().getCount();
+ if (adjPosition < adapterCount) {
+ convertView = getWrappedAdapter().getView(adjPosition, convertView, parent);
+ } else {
+ convertView = mFooterViewInfos.get(adjPosition - adapterCount).view;
+ }
+ }
+ return onPrepareView(convertView, position);
+ }
+
+ @Override
+ public boolean isEnabled(int position) {
+ int numHeaders = getHeadersCount();
+ if (position < numHeaders) {
+ return mHeaderViewInfos.get(position).isSelectable;
+ }
+ final int adjPosition = position - numHeaders;
+ int adapterCount = getWrappedAdapter().getCount();
+ if (adjPosition < adapterCount) {
+ return super.isEnabled(adjPosition);
+ }
+ return mFooterViewInfos.get(adjPosition - adapterCount).isSelectable;
+ }
+
+ public boolean removeFooter(View v) {
+ for (int i = 0; i < mFooterViewInfos.size(); i++) {
+ ViewInfo info = mFooterViewInfos.get(i);
+ if (info.view == v) {
+ mFooterViewInfos.remove(i);
+ mAreAllFixedViewsSelectable =
+ areAllListInfosSelectable(mHeaderViewInfos)
+ && areAllListInfosSelectable(mFooterViewInfos);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public boolean removeHeader(View v) {
+ for (int i = 0; i < mHeaderViewInfos.size(); i++) {
+ ViewInfo info = mHeaderViewInfos.get(i);
+ if (info.view == v) {
+ mHeaderViewInfos.remove(i);
+ mAreAllFixedViewsSelectable =
+ areAllListInfosSelectable(mHeaderViewInfos)
+ && areAllListInfosSelectable(mFooterViewInfos);
+ return true;
+ }
+ }
+ return false;
+ }
+}