create changelog entry
[debian/openrocket] / android / src / net / sf / openrocket / android / util / PersistentExpandableListFragment.java
1 package net.sf.openrocket.android.util;\r
2 \r
3 /*\r
4  * TODO - this isn't working.\r
5  */\r
6 import java.util.ArrayList;\r
7 import java.util.List;\r
8 \r
9 import android.os.Bundle;\r
10 import android.widget.ExpandableListAdapter;\r
11 import android.widget.ExpandableListView;\r
12 \r
13 public class PersistentExpandableListFragment extends ExpandableListFragment {\r
14         private long[] expandedIds;\r
15 \r
16         @Override\r
17         public void onCreate(Bundle savedInstanceState) {\r
18                 AndroidLogWrapper.d(PersistentExpandableListFragment.class, "onCreate");\r
19                 super.onCreate(savedInstanceState);\r
20                 if ( savedInstanceState != null ) {\r
21                         expandedIds = savedInstanceState.getLongArray("ExpandedIds");\r
22                 }\r
23         }\r
24 \r
25         @Override\r
26         public void onStop() {\r
27                 AndroidLogWrapper.d(PersistentExpandableListFragment.class, "onStop");\r
28                 super.onStop();\r
29                 expandedIds = getExpandedIds();\r
30         }\r
31 \r
32         @Override\r
33     public void onStart() {\r
34                 AndroidLogWrapper.d(PersistentExpandableListFragment.class, "onStart");\r
35         super.onStart();\r
36         if (this.expandedIds != null) {\r
37             restoreExpandedState(expandedIds);\r
38         }\r
39     }\r
40 \r
41         @Override\r
42         public void onPause() {\r
43                 AndroidLogWrapper.d(PersistentExpandableListFragment.class, "onPause");\r
44                 super.onPause();\r
45                 expandedIds = getExpandedIds();\r
46         }\r
47 \r
48         \r
49         @Override\r
50         public void onResume() {\r
51                 AndroidLogWrapper.d(PersistentExpandableListFragment.class, "onResume");\r
52                 super.onResume();\r
53                 if (this.expandedIds != null) {\r
54                         restoreExpandedState(expandedIds);\r
55                 }\r
56         }\r
57 \r
58         @Override\r
59         public void onSaveInstanceState(Bundle outState) {\r
60                 super.onSaveInstanceState(outState);\r
61                 this.expandedIds = getExpandedIds();\r
62                 outState.putLongArray("ExpandedIds", this.expandedIds);\r
63         }\r
64 \r
65         private long[] getExpandedIds() {\r
66                 ExpandableListView list = getExpandableListView();\r
67                 ExpandableListAdapter adapter = getExpandableListAdapter();\r
68                 if (adapter != null) {\r
69                         int length = adapter.getGroupCount();\r
70                         ArrayList<Long> expandedIds = new ArrayList<Long>();\r
71                         for(int i=0; i < length; i++) {\r
72                                 if(list.isGroupExpanded(i)) {\r
73                                         expandedIds.add(adapter.getGroupId(i));\r
74                                 }\r
75                         }\r
76                         return toLongArray(expandedIds);\r
77                 } else {\r
78                         return null;\r
79                 }\r
80         }\r
81 \r
82         private void restoreExpandedState(long[] expandedIds) {\r
83                 this.expandedIds = expandedIds;\r
84                 if (expandedIds != null) {\r
85                         ExpandableListView list = getExpandableListView();\r
86                         ExpandableListAdapter adapter = getExpandableListAdapter();\r
87                         if (adapter != null) {\r
88                                 for (int i=0; i<adapter.getGroupCount(); i++) {\r
89                                         long id = adapter.getGroupId(i);\r
90                                         if (inArray(expandedIds, id)) list.expandGroup(i);\r
91                                 }\r
92                         }\r
93                 }\r
94         }\r
95 \r
96         private static boolean inArray(long[] array, long element) {\r
97                 for (long l : array) {\r
98                         if (l == element) {\r
99                                 return true;\r
100                         }\r
101                 }\r
102                 return false;\r
103         }\r
104 \r
105         private static long[] toLongArray(List<Long> list)  {\r
106                 long[] ret = new long[list.size()];\r
107                 int i = 0;\r
108                 for (Long e : list)  \r
109                         ret[i++] = e.longValue();\r
110                 return ret;\r
111         }\r
112 }\r