create changelog entry
[debian/openrocket] / android / src / net / sf / openrocket / android / util / PersistentExpandableListView.java
1 package net.sf.openrocket.android.util;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.List;\r
5 \r
6 import android.content.Context;\r
7 import android.os.Bundle;\r
8 import android.os.Parcelable;\r
9 import android.util.AttributeSet;\r
10 import android.widget.ExpandableListAdapter;\r
11 import android.widget.ExpandableListView;\r
12 \r
13 public class PersistentExpandableListView extends ExpandableListView {\r
14 \r
15         public PersistentExpandableListView(Context context, AttributeSet attrs,\r
16                         int defStyle) {\r
17                 super(context, attrs, defStyle);\r
18         }\r
19 \r
20         public PersistentExpandableListView(Context context, AttributeSet attrs) {\r
21                 super(context, attrs);\r
22         }\r
23 \r
24         public PersistentExpandableListView(Context context) {\r
25                 super(context);\r
26         }\r
27 \r
28         @Override\r
29         public Parcelable onSaveInstanceState() {\r
30                 Bundle b = new Bundle();\r
31                 long[] expandedIds = getExpandedIds();\r
32                 b.putLongArray("ExpandedIds", expandedIds);\r
33                 return b;\r
34         }\r
35 \r
36         @Override\r
37         public void onRestoreInstanceState(Parcelable state) {\r
38                 Bundle b = (Bundle) state;\r
39                 long[] expandedIds = b.getLongArray("ExpandedIds");\r
40                 restoreExpandedState(expandedIds);\r
41         }\r
42 \r
43         private long[] getExpandedIds() {\r
44                 ExpandableListAdapter adapter = getExpandableListAdapter();\r
45                 if (adapter != null) {\r
46                         int length = adapter.getGroupCount();\r
47                         ArrayList<Long> expandedIds = new ArrayList<Long>();\r
48                         for(int i=0; i < length; i++) {\r
49                                 if(this.isGroupExpanded(i)) {\r
50                                         expandedIds.add(adapter.getGroupId(i));\r
51                                 }\r
52                         }\r
53                         return toLongArray(expandedIds);\r
54                 } else {\r
55                         return null;\r
56                 }\r
57         }\r
58 \r
59         private static long[] toLongArray(List<Long> list)  {\r
60                 long[] ret = new long[list.size()];\r
61                 int i = 0;\r
62                 for (Long e : list)  \r
63                         ret[i++] = e.longValue();\r
64                 return ret;\r
65         }\r
66 \r
67         private void restoreExpandedState(long[] expandedIds) {\r
68                 if (expandedIds != null) {\r
69                         ExpandableListAdapter adapter = getExpandableListAdapter();\r
70                         if (adapter != null) {\r
71                                 for (int i=0; i<adapter.getGroupCount(); i++) {\r
72                                         long id = adapter.getGroupId(i);\r
73                                         if (inArray(expandedIds, id)) this.expandGroup(i);\r
74                                 }\r
75                         }\r
76                 }\r
77         }\r
78 \r
79         private static boolean inArray(long[] array, long element) {\r
80                 for (long l : array) {\r
81                         if (l == element) {\r
82                                 return true;\r
83                         }\r
84                 }\r
85                 return false;\r
86         }\r
87 \r
88 \r
89 }\r