49a5c6ca9e6f09f83a9985c962448fbc7e46cf7c
[debian/openrocket] / android-libraries / ActionBarSherlock / src / com / actionbarsherlock / app / SherlockFragmentActivity.java
1 package com.actionbarsherlock.app;
2
3 import android.content.res.Configuration;
4 import android.os.Bundle;
5 import android.support.v4.app.FragmentActivity;
6 import android.util.Log;
7 import android.view.KeyEvent;
8 import android.view.View;
9 import android.view.ViewGroup.LayoutParams;
10 import android.view.Window;
11 import com.actionbarsherlock.ActionBarSherlock;
12 import com.actionbarsherlock.ActionBarSherlock.OnActionModeFinishedListener;
13 import com.actionbarsherlock.ActionBarSherlock.OnActionModeStartedListener;
14 import com.actionbarsherlock.ActionBarSherlock.OnCreatePanelMenuListener;
15 import com.actionbarsherlock.ActionBarSherlock.OnMenuItemSelectedListener;
16 import com.actionbarsherlock.ActionBarSherlock.OnPreparePanelListener;
17 import com.actionbarsherlock.internal.view.menu.MenuItemMule;
18 import com.actionbarsherlock.internal.view.menu.MenuMule;
19 import com.actionbarsherlock.view.ActionMode;
20 import com.actionbarsherlock.view.Menu;
21 import com.actionbarsherlock.view.MenuInflater;
22 import com.actionbarsherlock.view.MenuItem;
23
24 public abstract class SherlockFragmentActivity extends FragmentActivity implements OnCreatePanelMenuListener, OnPreparePanelListener, OnMenuItemSelectedListener, OnActionModeStartedListener, OnActionModeFinishedListener {
25     static final boolean DEBUG = false;
26     private static final String TAG = "SherlockFragmentActivity";
27
28     private ActionBarSherlock mSherlock;
29     private boolean mIgnoreNativeCreate = false;
30     private boolean mIgnoreNativePrepare = false;
31     private boolean mIgnoreNativeSelected = false;
32
33     protected final ActionBarSherlock getSherlock() {
34         if (mSherlock == null) {
35             mSherlock = ActionBarSherlock.wrap(this, ActionBarSherlock.FLAG_DELEGATE);
36         }
37         return mSherlock;
38     }
39
40
41     ///////////////////////////////////////////////////////////////////////////
42     // Action bar and mode
43     ///////////////////////////////////////////////////////////////////////////
44
45     public ActionBar getSupportActionBar() {
46         return getSherlock().getActionBar();
47     }
48
49     public ActionMode startActionMode(ActionMode.Callback callback) {
50         return getSherlock().startActionMode(callback);
51     }
52
53     @Override
54     public void onActionModeStarted(ActionMode mode) {}
55
56     @Override
57     public void onActionModeFinished(ActionMode mode) {}
58
59
60     ///////////////////////////////////////////////////////////////////////////
61     // General lifecycle/callback dispatching
62     ///////////////////////////////////////////////////////////////////////////
63
64     @Override
65     public void onConfigurationChanged(Configuration newConfig) {
66         super.onConfigurationChanged(newConfig);
67         getSherlock().dispatchConfigurationChanged(newConfig);
68     }
69
70     @Override
71     protected void onPostResume() {
72         super.onPostResume();
73         getSherlock().dispatchPostResume();
74     }
75
76     @Override
77     protected void onPause() {
78         getSherlock().dispatchPause();
79         super.onPause();
80     }
81
82     @Override
83     protected void onStop() {
84         getSherlock().dispatchStop();
85         super.onStop();
86     }
87
88     @Override
89     protected void onPostCreate(Bundle savedInstanceState) {
90         getSherlock().dispatchPostCreate(savedInstanceState);
91         super.onPostCreate(savedInstanceState);
92     }
93
94     @Override
95     protected void onTitleChanged(CharSequence title, int color) {
96         getSherlock().dispatchTitleChanged(title, color);
97         super.onTitleChanged(title, color);
98     }
99
100     @Override
101     public final boolean onMenuOpened(int featureId, android.view.Menu menu) {
102         if (getSherlock().dispatchMenuOpened(featureId, menu)) {
103             return true;
104         }
105         return super.onMenuOpened(featureId, menu);
106     }
107
108     @Override
109     public void onPanelClosed(int featureId, android.view.Menu menu) {
110         getSherlock().dispatchPanelClosed(featureId, menu);
111         super.onPanelClosed(featureId, menu);
112     }
113
114     @Override
115     public boolean dispatchKeyEvent(KeyEvent event) {
116         if (getSherlock().dispatchKeyEvent(event)) {
117             return true;
118         }
119         return super.dispatchKeyEvent(event);
120     }
121
122
123     ///////////////////////////////////////////////////////////////////////////
124     // Native menu handling
125     ///////////////////////////////////////////////////////////////////////////
126
127     public MenuInflater getSupportMenuInflater() {
128         if (DEBUG) Log.d(TAG, "[getSupportMenuInflater]");
129
130         return getSherlock().getMenuInflater();
131     }
132
133     public void invalidateOptionsMenu() {
134         if (DEBUG) Log.d(TAG, "[invalidateOptionsMenu]");
135
136         getSherlock().dispatchInvalidateOptionsMenu();
137     }
138
139     public void supportInvalidateOptionsMenu() {
140         if (DEBUG) Log.d(TAG, "[supportInvalidateOptionsMenu]");
141
142         invalidateOptionsMenu();
143     }
144
145     @Override
146     public final boolean onCreatePanelMenu(int featureId, android.view.Menu menu) {
147         if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] featureId: " + featureId + ", menu: " + menu);
148
149         if (featureId == Window.FEATURE_OPTIONS_PANEL && !mIgnoreNativeCreate) {
150             mIgnoreNativeCreate = true;
151             boolean result = getSherlock().dispatchCreateOptionsMenu(menu);
152             mIgnoreNativeCreate = false;
153
154             if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] returning " + result);
155             return result;
156         }
157         return super.onCreatePanelMenu(featureId, menu);
158     }
159
160     @Override
161     public final boolean onCreateOptionsMenu(android.view.Menu menu) {
162         return true;
163     }
164
165     @Override
166     public final boolean onPreparePanel(int featureId, View view, android.view.Menu menu) {
167         if (DEBUG) Log.d(TAG, "[onPreparePanel] featureId: " + featureId + ", view: " + view + ", menu: " + menu);
168
169         if (featureId == Window.FEATURE_OPTIONS_PANEL && !mIgnoreNativePrepare) {
170             mIgnoreNativePrepare = true;
171             boolean result = getSherlock().dispatchPrepareOptionsMenu(menu);
172             mIgnoreNativePrepare = false;
173
174             if (DEBUG) Log.d(TAG, "[onPreparePanel] returning " + result);
175             return result;
176         }
177         return super.onPreparePanel(featureId, view, menu);
178     }
179
180     @Override
181     public final boolean onPrepareOptionsMenu(android.view.Menu menu) {
182         return true;
183     }
184
185     @Override
186     public final boolean onMenuItemSelected(int featureId, android.view.MenuItem item) {
187         if (DEBUG) Log.d(TAG, "[onMenuItemSelected] featureId: " + featureId + ", item: " + item);
188
189         if (featureId == Window.FEATURE_OPTIONS_PANEL && !mIgnoreNativeSelected) {
190             mIgnoreNativeSelected = true;
191             boolean result = getSherlock().dispatchOptionsItemSelected(item);
192             mIgnoreNativeSelected = false;
193
194             if (DEBUG) Log.d(TAG, "[onMenuItemSelected] returning " + result);
195             return result;
196         }
197         return super.onMenuItemSelected(featureId, item);
198     }
199
200     @Override
201     public final boolean onOptionsItemSelected(android.view.MenuItem item) {
202         return false;
203     }
204
205     @Override
206     public void openOptionsMenu() {
207         if (!getSherlock().dispatchOpenOptionsMenu()) {
208             super.openOptionsMenu();
209         }
210     }
211
212     @Override
213     public void closeOptionsMenu() {
214         if (!getSherlock().dispatchCloseOptionsMenu()) {
215             super.closeOptionsMenu();
216         }
217     }
218
219
220     ///////////////////////////////////////////////////////////////////////////
221     // Sherlock menu handling
222     ///////////////////////////////////////////////////////////////////////////
223
224     @Override
225     public boolean onCreatePanelMenu(int featureId, Menu menu) {
226         if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] featureId: " + featureId + ", menu: " + menu);
227
228         if (featureId == Window.FEATURE_OPTIONS_PANEL) {
229             boolean result = onCreateOptionsMenu(menu);
230             if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] activity create result: " + result);
231
232             //Dispatch to parent panel creation for fragment dispatching
233             if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] dispatching to native with mule");
234             MenuMule mule = new MenuMule(menu);
235             super.onCreatePanelMenu(featureId, mule);
236
237             if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] fragments create result: " + mule.mDispatchShow);
238             result |= mule.mDispatchShow;
239
240             if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] returning " + result);
241             return result;
242         }
243         return false;
244     }
245
246     public boolean onCreateOptionsMenu(Menu menu) {
247         return true;
248     }
249
250     @Override
251     public boolean onPreparePanel(int featureId, View view, Menu menu) {
252         if (DEBUG) Log.d(TAG, "[onPreparePanel] featureId: " + featureId + ", view: " + view + " menu: " + menu);
253
254         if (featureId == Window.FEATURE_OPTIONS_PANEL) {
255             boolean result = onPrepareOptionsMenu(menu);
256             if (DEBUG) Log.d(TAG, "[onPreparePanel] activity prepare result: " + result);
257
258             //Dispatch to parent panel preparation for fragment dispatching
259             if (DEBUG) Log.d(TAG, "[onPreparePanel] dispatching to native with mule");
260             MenuMule mule = new MenuMule(menu);
261             super.onPreparePanel(featureId, view, mule);
262
263             if (DEBUG) Log.d(TAG, "[onPreparePanel] fragments prepare result: " + mule.mDispatchShow);
264             result |= mule.mDispatchShow;
265
266             result &= menu.hasVisibleItems();
267             if (DEBUG) Log.d(TAG, "[onPreparePanel] returning " + result);
268             return result;
269         }
270         return false;
271     }
272
273     public boolean onPrepareOptionsMenu(Menu menu) {
274         return true;
275     }
276
277     @Override
278     public boolean onMenuItemSelected(int featureId, MenuItem item) {
279         if (DEBUG) Log.d(TAG, "[onMenuItemSelected] featureId: " + featureId + ", item: " + item);
280
281         if (featureId == Window.FEATURE_OPTIONS_PANEL) {
282             if (onOptionsItemSelected(item)) {
283                 return true;
284             }
285
286             //Dispatch to parent panel selection for fragment dispatching
287             if (DEBUG) Log.d(TAG, "[onMenuItemSelected] dispatching to native with mule");
288             return super.onMenuItemSelected(featureId, new MenuItemMule(item));
289         }
290         return false;
291     }
292
293     public boolean onOptionsItemSelected(MenuItem item) {
294         return false;
295     }
296
297
298     ///////////////////////////////////////////////////////////////////////////
299     // Content
300     ///////////////////////////////////////////////////////////////////////////
301
302     @Override
303     public void addContentView(View view, LayoutParams params) {
304         getSherlock().addContentView(view, params);
305     }
306
307     @Override
308     public void setContentView(int layoutResId) {
309         getSherlock().setContentView(layoutResId);
310     }
311
312     @Override
313     public void setContentView(View view, LayoutParams params) {
314         getSherlock().setContentView(view, params);
315     }
316
317     @Override
318     public void setContentView(View view) {
319         getSherlock().setContentView(view);
320     }
321
322     public void requestWindowFeature(long featureId) {
323         getSherlock().requestFeature((int)featureId);
324     }
325
326
327     ///////////////////////////////////////////////////////////////////////////
328     // Progress Indication
329     ///////////////////////////////////////////////////////////////////////////
330
331     public void setSupportProgress(int progress) {
332         getSherlock().setProgress(progress);
333     }
334
335     public void setSupportProgressBarIndeterminate(boolean indeterminate) {
336         getSherlock().setProgressBarIndeterminate(indeterminate);
337     }
338
339     public void setSupportProgressBarIndeterminateVisibility(boolean visible) {
340         getSherlock().setProgressBarIndeterminateVisibility(visible);
341     }
342
343     public void setSupportProgressBarVisibility(boolean visible) {
344         getSherlock().setProgressBarVisibility(visible);
345     }
346
347     public void setSupportSecondaryProgress(int secondaryProgress) {
348         getSherlock().setSecondaryProgress(secondaryProgress);
349     }
350 }