/** * galaxy inc. * meetup client for android */ package com.galaxy.meetup.client.android.ui.view; import java.util.HashMap; import java.util.Iterator; import java.util.List; import android.content.Context; import android.database.DataSetObserver; import android.os.Parcel; import android.os.Parcelable; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; import com.galaxy.meetup.client.android.R; import com.galaxy.meetup.client.android.ui.fragments.SuggestionGridAdapter; import com.galaxy.meetup.client.android.ui.view.ColumnGridView.OnScrollListener; /** * * @author sihai * */ public class SuggestionGridView extends LinearLayout implements OnScrollListener { private SuggestionGridAdapter mAdapter; private DataSetObserver mObserver = new DataSetObserver() { public final void onChanged() { onDataChanged(); } }; private HashMap mRows; public SuggestionGridView(Context context) { super(context); mRows = new HashMap(); setOrientation(1); } public SuggestionGridView(Context context, AttributeSet attributeset) { super(context, attributeset); mRows = new HashMap(); setOrientation(1); } public SuggestionGridView(Context context, AttributeSet attributeset, int i) { super(context, attributeset, i); mRows = new HashMap(); setOrientation(1); } public final ScrollPositions getScrollPositions() { ScrollPositions scrollpositions = new ScrollPositions(); Iterator iterator = mRows.entrySet().iterator(); while(iterator.hasNext()) { java.util.Map.Entry entry = (java.util.Map.Entry)iterator.next(); String s = (String)entry.getKey(); ColumnGridView columngridview = (ColumnGridView)entry.getValue(); View view = columngridview.getChildAt(0); int i; if(view != null) i = view.getLeft(); else i = 0; scrollpositions.setScrollPosition(s, columngridview.getFirstVisiblePosition(), i); } return scrollpositions; } protected final void onDataChanged() { List arraylist = mAdapter.getCategories(); int i = arraylist.size(); if(i > getChildCount()) { LayoutInflater layoutinflater = LayoutInflater.from(getContext()); View view1; for(; i > getChildCount(); addView(view1)) { view1 = layoutinflater.inflate(R.layout.suggestion_category, this, false); ColumnGridView columngridview1 = (ColumnGridView)view1.findViewById(R.id.suggestion_row); columngridview1.setOrientation(1); columngridview1.setMinColumnWidth(getResources().getDimensionPixelSize(R.dimen.person_card_min_height)); columngridview1.setColumnCount(1); columngridview1.setOnScrollListener(this); } } else { for(; getChildCount() > i; removeViewAt(-1 + getChildCount())); } mRows.clear(); int j = 0; while(j < i) { SuggestionGridAdapter.SuggestionCategoryAdapter suggestioncategoryadapter = (SuggestionGridAdapter.SuggestionCategoryAdapter)arraylist.get(j); View view = getChildAt(j); TextView textview = (TextView)view.findViewById(R.id.category_label); ColumnGridView columngridview; if("#".equals(suggestioncategoryadapter.getCategory())) textview.setText(getContext().getString(R.string.suggestion_category_friends).toUpperCase()); else textview.setText(suggestioncategoryadapter.getCategoryLabel().toUpperCase()); columngridview = (ColumnGridView)view.findViewById(R.id.suggestion_row); if(columngridview.getAdapter() != suggestioncategoryadapter) columngridview.setAdapter(suggestioncategoryadapter); else suggestioncategoryadapter.notifyDataSetChanged(); mRows.put(suggestioncategoryadapter.getCategory(), columngridview); j++; } } public final void onScroll(ColumnGridView columngridview, int i, int j, int k, int l, int i1) { } public final void onScrollStateChanged(ColumnGridView columngridview, int i) { if(i == 1) requestDisallowInterceptTouchEvent(true); } public void setAdapter(SuggestionGridAdapter suggestiongridadapter) { if(mAdapter != null) mAdapter.unregisterDataSetObserver(mObserver); mAdapter = suggestiongridadapter; mAdapter.registerDataSetObserver(mObserver); } public void setScrollPositions(ScrollPositions scrollpositions) { Iterator iterator = mRows.entrySet().iterator(); do { if(!iterator.hasNext()) break; java.util.Map.Entry entry = (java.util.Map.Entry)iterator.next(); String s = (String)entry.getKey(); Integer integer = (Integer)scrollpositions.positions.get(s); Integer integer1 = (Integer)scrollpositions.offsets.get(s); if(integer != null && integer1 != null) { ((ColumnGridView)entry.getValue()).setSelectionFromTop(integer.intValue(), integer1.intValue()); } } while(true); } public static class ScrollPositions implements Parcelable { public static final android.os.Parcelable.Creator CREATOR = new android.os.Parcelable.Creator() { public final Object createFromParcel(Parcel parcel) { return new ScrollPositions(parcel); } public final Object[] newArray(int i) { return new ScrollPositions[i]; } }; private HashMap offsets; private HashMap positions; public ScrollPositions() { positions = new HashMap(); offsets = new HashMap(); } public ScrollPositions(Parcel parcel) { positions = new HashMap(); offsets = new HashMap(); int i = parcel.readInt(); for(int j = 0; j < i; j++) setScrollPosition(parcel.readString(), parcel.readInt(), parcel.readInt()); } public int describeContents() { return 0; } public final void setScrollPosition(String s, int i, int j) { positions.put(s, Integer.valueOf(i)); offsets.put(s, Integer.valueOf(j)); } public void writeToParcel(Parcel parcel, int i) { parcel.writeInt(positions.size()); String s; for(Iterator iterator = positions.entrySet().iterator(); iterator.hasNext(); parcel.writeInt(((Integer)offsets.get(s)).intValue())) { java.util.Map.Entry entry = (java.util.Map.Entry)iterator.next(); s = (String)entry.getKey(); parcel.writeString(s); parcel.writeInt(((Integer)entry.getValue()).intValue()); } } } }