1 package com.actionbarsherlock.app;
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;
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";
28 private ActionBarSherlock mSherlock;
29 private boolean mIgnoreNativeCreate = false;
30 private boolean mIgnoreNativePrepare = false;
31 private boolean mIgnoreNativeSelected = false;
33 protected final ActionBarSherlock getSherlock() {
34 if (mSherlock == null) {
35 mSherlock = ActionBarSherlock.wrap(this, ActionBarSherlock.FLAG_DELEGATE);
41 ///////////////////////////////////////////////////////////////////////////
42 // Action bar and mode
43 ///////////////////////////////////////////////////////////////////////////
45 public ActionBar getSupportActionBar() {
46 return getSherlock().getActionBar();
49 public ActionMode startActionMode(ActionMode.Callback callback) {
50 return getSherlock().startActionMode(callback);
54 public void onActionModeStarted(ActionMode mode) {}
57 public void onActionModeFinished(ActionMode mode) {}
60 ///////////////////////////////////////////////////////////////////////////
61 // General lifecycle/callback dispatching
62 ///////////////////////////////////////////////////////////////////////////
65 public void onConfigurationChanged(Configuration newConfig) {
66 super.onConfigurationChanged(newConfig);
67 getSherlock().dispatchConfigurationChanged(newConfig);
71 protected void onPostResume() {
73 getSherlock().dispatchPostResume();
77 protected void onPause() {
78 getSherlock().dispatchPause();
83 protected void onStop() {
84 getSherlock().dispatchStop();
89 protected void onPostCreate(Bundle savedInstanceState) {
90 getSherlock().dispatchPostCreate(savedInstanceState);
91 super.onPostCreate(savedInstanceState);
95 protected void onTitleChanged(CharSequence title, int color) {
96 getSherlock().dispatchTitleChanged(title, color);
97 super.onTitleChanged(title, color);
101 public final boolean onMenuOpened(int featureId, android.view.Menu menu) {
102 if (getSherlock().dispatchMenuOpened(featureId, menu)) {
105 return super.onMenuOpened(featureId, menu);
109 public void onPanelClosed(int featureId, android.view.Menu menu) {
110 getSherlock().dispatchPanelClosed(featureId, menu);
111 super.onPanelClosed(featureId, menu);
115 public boolean dispatchKeyEvent(KeyEvent event) {
116 if (getSherlock().dispatchKeyEvent(event)) {
119 return super.dispatchKeyEvent(event);
123 ///////////////////////////////////////////////////////////////////////////
124 // Native menu handling
125 ///////////////////////////////////////////////////////////////////////////
127 public MenuInflater getSupportMenuInflater() {
128 if (DEBUG) Log.d(TAG, "[getSupportMenuInflater]");
130 return getSherlock().getMenuInflater();
133 public void invalidateOptionsMenu() {
134 if (DEBUG) Log.d(TAG, "[invalidateOptionsMenu]");
136 getSherlock().dispatchInvalidateOptionsMenu();
139 public void supportInvalidateOptionsMenu() {
140 if (DEBUG) Log.d(TAG, "[supportInvalidateOptionsMenu]");
142 invalidateOptionsMenu();
146 public final boolean onCreatePanelMenu(int featureId, android.view.Menu menu) {
147 if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] featureId: " + featureId + ", menu: " + menu);
149 if (featureId == Window.FEATURE_OPTIONS_PANEL && !mIgnoreNativeCreate) {
150 mIgnoreNativeCreate = true;
151 boolean result = getSherlock().dispatchCreateOptionsMenu(menu);
152 mIgnoreNativeCreate = false;
154 if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] returning " + result);
157 return super.onCreatePanelMenu(featureId, menu);
161 public final boolean onCreateOptionsMenu(android.view.Menu menu) {
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);
169 if (featureId == Window.FEATURE_OPTIONS_PANEL && !mIgnoreNativePrepare) {
170 mIgnoreNativePrepare = true;
171 boolean result = getSherlock().dispatchPrepareOptionsMenu(menu);
172 mIgnoreNativePrepare = false;
174 if (DEBUG) Log.d(TAG, "[onPreparePanel] returning " + result);
177 return super.onPreparePanel(featureId, view, menu);
181 public final boolean onPrepareOptionsMenu(android.view.Menu menu) {
186 public final boolean onMenuItemSelected(int featureId, android.view.MenuItem item) {
187 if (DEBUG) Log.d(TAG, "[onMenuItemSelected] featureId: " + featureId + ", item: " + item);
189 if (featureId == Window.FEATURE_OPTIONS_PANEL && !mIgnoreNativeSelected) {
190 mIgnoreNativeSelected = true;
191 boolean result = getSherlock().dispatchOptionsItemSelected(item);
192 mIgnoreNativeSelected = false;
194 if (DEBUG) Log.d(TAG, "[onMenuItemSelected] returning " + result);
197 return super.onMenuItemSelected(featureId, item);
201 public final boolean onOptionsItemSelected(android.view.MenuItem item) {
206 public void openOptionsMenu() {
207 if (!getSherlock().dispatchOpenOptionsMenu()) {
208 super.openOptionsMenu();
213 public void closeOptionsMenu() {
214 if (!getSherlock().dispatchCloseOptionsMenu()) {
215 super.closeOptionsMenu();
220 ///////////////////////////////////////////////////////////////////////////
221 // Sherlock menu handling
222 ///////////////////////////////////////////////////////////////////////////
225 public boolean onCreatePanelMenu(int featureId, Menu menu) {
226 if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] featureId: " + featureId + ", menu: " + menu);
228 if (featureId == Window.FEATURE_OPTIONS_PANEL) {
229 boolean result = onCreateOptionsMenu(menu);
230 if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] activity create result: " + result);
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);
237 if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] fragments create result: " + mule.mDispatchShow);
238 result |= mule.mDispatchShow;
240 if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] returning " + result);
246 public boolean onCreateOptionsMenu(Menu menu) {
251 public boolean onPreparePanel(int featureId, View view, Menu menu) {
252 if (DEBUG) Log.d(TAG, "[onPreparePanel] featureId: " + featureId + ", view: " + view + " menu: " + menu);
254 if (featureId == Window.FEATURE_OPTIONS_PANEL) {
255 boolean result = onPrepareOptionsMenu(menu);
256 if (DEBUG) Log.d(TAG, "[onPreparePanel] activity prepare result: " + result);
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);
263 if (DEBUG) Log.d(TAG, "[onPreparePanel] fragments prepare result: " + mule.mDispatchShow);
264 result |= mule.mDispatchShow;
266 result &= menu.hasVisibleItems();
267 if (DEBUG) Log.d(TAG, "[onPreparePanel] returning " + result);
273 public boolean onPrepareOptionsMenu(Menu menu) {
278 public boolean onMenuItemSelected(int featureId, MenuItem item) {
279 if (DEBUG) Log.d(TAG, "[onMenuItemSelected] featureId: " + featureId + ", item: " + item);
281 if (featureId == Window.FEATURE_OPTIONS_PANEL) {
282 if (onOptionsItemSelected(item)) {
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));
293 public boolean onOptionsItemSelected(MenuItem item) {
298 ///////////////////////////////////////////////////////////////////////////
300 ///////////////////////////////////////////////////////////////////////////
303 public void addContentView(View view, LayoutParams params) {
304 getSherlock().addContentView(view, params);
308 public void setContentView(int layoutResId) {
309 getSherlock().setContentView(layoutResId);
313 public void setContentView(View view, LayoutParams params) {
314 getSherlock().setContentView(view, params);
318 public void setContentView(View view) {
319 getSherlock().setContentView(view);
322 public void requestWindowFeature(long featureId) {
323 getSherlock().requestFeature((int)featureId);
327 ///////////////////////////////////////////////////////////////////////////
328 // Progress Indication
329 ///////////////////////////////////////////////////////////////////////////
331 public void setSupportProgress(int progress) {
332 getSherlock().setProgress(progress);
335 public void setSupportProgressBarIndeterminate(boolean indeterminate) {
336 getSherlock().setProgressBarIndeterminate(indeterminate);
339 public void setSupportProgressBarIndeterminateVisibility(boolean visible) {
340 getSherlock().setProgressBarIndeterminateVisibility(visible);
343 public void setSupportProgressBarVisibility(boolean visible) {
344 getSherlock().setProgressBarVisibility(visible);
347 public void setSupportSecondaryProgress(int secondaryProgress) {
348 getSherlock().setSecondaryProgress(secondaryProgress);