Rewrite MotorBrowser to use a fragment for the list. This is the first step in makin...
[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         /*\r
66     @Override\r
67     protected void onStart() {\r
68         super.onStart();\r
69         if (this.expandedIds != null) {\r
70             restoreExpandedState(expandedIds);\r
71         }\r
72     }\r
73 \r
74     @Override\r
75     protected void onStop() {\r
76         super.onStop();\r
77         expandedIds = getExpandedIds();\r
78     }\r
79 \r
80     @Override\r
81     protected void onSaveInstanceState(Bundle outState) {\r
82         super.onSaveInstanceState(outState);\r
83         this.expandedIds = getExpandedIds();\r
84         outState.putLongArray("ExpandedIds", this.expandedIds);\r
85     }\r
86 \r
87     @Override\r
88     protected void onRestoreInstanceState(Bundle state) {\r
89         super.onRestoreInstanceState(state);\r
90         long[] expandedIds = state.getLongArray("ExpandedIds");\r
91         if (expandedIds != null) {\r
92             restoreExpandedState(expandedIds);\r
93         }\r
94     }\r
95          */\r
96 \r
97 \r
98         private long[] getExpandedIds() {\r
99                 ExpandableListView list = getExpandableListView();\r
100                 ExpandableListAdapter adapter = getExpandableListAdapter();\r
101                 if (adapter != null) {\r
102                         int length = adapter.getGroupCount();\r
103                         ArrayList<Long> expandedIds = new ArrayList<Long>();\r
104                         for(int i=0; i < length; i++) {\r
105                                 if(list.isGroupExpanded(i)) {\r
106                                         expandedIds.add(adapter.getGroupId(i));\r
107                                 }\r
108                         }\r
109                         return toLongArray(expandedIds);\r
110                 } else {\r
111                         return null;\r
112                 }\r
113         }\r
114 \r
115         private void restoreExpandedState(long[] expandedIds) {\r
116                 this.expandedIds = expandedIds;\r
117                 if (expandedIds != null) {\r
118                         ExpandableListView list = getExpandableListView();\r
119                         ExpandableListAdapter adapter = getExpandableListAdapter();\r
120                         if (adapter != null) {\r
121                                 for (int i=0; i<adapter.getGroupCount(); i++) {\r
122                                         long id = adapter.getGroupId(i);\r
123                                         if (inArray(expandedIds, id)) list.expandGroup(i);\r
124                                 }\r
125                         }\r
126                 }\r
127         }\r
128 \r
129         private static boolean inArray(long[] array, long element) {\r
130                 for (long l : array) {\r
131                         if (l == element) {\r
132                                 return true;\r
133                         }\r
134                 }\r
135                 return false;\r
136         }\r
137 \r
138         private static long[] toLongArray(List<Long> list)  {\r
139                 long[] ret = new long[list.size()];\r
140                 int i = 0;\r
141                 for (Long e : list)  \r
142                         ret[i++] = e.longValue();\r
143                 return ret;\r
144         }\r
145 }\r