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