From 9031eb079baea4c222995f018d04dcd40bf08100 Mon Sep 17 00:00:00 2001 From: Tim Su Date: Wed, 14 Jul 2010 18:27:49 -0700 Subject: [PATCH] auto-expanding filters --- .../astrid/activity/FilterListActivity.java | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java b/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java index 47a8b4105..5d336c04c 100644 --- a/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/FilterListActivity.java @@ -18,15 +18,16 @@ import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.os.Parcelable; import android.view.ContextMenu; -import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.ViewGroup.OnHierarchyChangeListener; import android.widget.EditText; import android.widget.ExpandableListView; -import android.widget.ExpandableListView.ExpandableListContextMenuInfo; import android.widget.FrameLayout; import android.widget.Toast; +import android.widget.ExpandableListView.ExpandableListContextMenuInfo; import com.flurry.android.FlurryAgent; import com.timsu.astrid.R; @@ -207,6 +208,32 @@ public class FilterListActivity extends ExpandableListActivity { registerForContextMenu(getExpandableListView()); getExpandableListView().setGroupIndicator( getResources().getDrawable(R.drawable.expander_group)); + getExpandableListView().setOnHierarchyChangeListener(new OnHierarchyChangeListener() { + @Override + public void onChildViewAdded(View parent, View child) { + // auto-expand adapter + ExpandableListView list = getExpandableListView(); + long packedLastItem = ExpandableListView.getPackedPositionForGroup(adapter.getGroupCount() - 1); + outer: for(int group = 0; group < adapter.getGroupCount(); group++) { + // if last group is already outside of bounds, stop + int lastGroup = list.getFlatListPosition(packedLastItem); + if(lastGroup > list.getLastVisiblePosition()) + break; + + while (adapter.getChildrenCount(group) == 0) { + group++; + if(group >= adapter.getGroupCount()) + break outer; + } + + list.expandGroup(group); + } + } + @Override + public void onChildViewRemoved(View parent, View child) { + // do nothing + } + }); } /**