content: package android.support.v4.app;
  
  import android.util.Log;
  import android.view.View;
  import android.view.Window;
  import com.actionbarsherlock.ActionBarSherlock.OnCreatePanelMenuListener;
  import com.actionbarsherlock.ActionBarSherlock.OnMenuItemSelectedListener;
  import com.actionbarsherlock.ActionBarSherlock.OnPreparePanelListener;
  import com.actionbarsherlock.BuildConfig;
  import com.actionbarsherlock.view.Menu;
  import com.actionbarsherlock.view.MenuInflater;
  import com.actionbarsherlock.view.MenuItem;
  import java.util.ArrayList;
  
  /** I'm in ur package. Stealing ur variables. */
  public abstract class Watson extends FragmentActivity implements OnCreatePanelMenuListener, OnPreparePanelListener, OnMenuItemSelectedListener {
      private static final String TAG = "Watson";
  
      /** Fragment interface for menu creation callback. */
      public interface OnCreateOptionsMenuListener {
          public void onCreateOptionsMenu(Menu menu, MenuInflater inflater);
      }
      /** Fragment interface for menu preparation callback. */
      public interface OnPrepareOptionsMenuListener {
          public void onPrepareOptionsMenu(Menu menu);
      }
      /** Fragment interface for menu item selection callback. */
      public interface OnOptionsItemSelectedListener {
          public boolean onOptionsItemSelected(MenuItem item);
      }
  
      private ArrayList<Fragment> mCreatedMenus;
  
  
      ///////////////////////////////////////////////////////////////////////////
      // Sherlock menu handling
      ///////////////////////////////////////////////////////////////////////////
  
      @Override
      public boolean onCreatePanelMenu(int featureId, Menu menu) {
          if (BuildConfig.DEBUG) Log.d(TAG, "[onCreatePanelMenu] featureId: " + featureId + ", menu: " + menu);
  
          if (featureId == Window.FEATURE_OPTIONS_PANEL) {
              boolean result = onCreateOptionsMenu(menu);
              if (BuildConfig.DEBUG) Log.d(TAG, "[onCreatePanelMenu] activity create result: " + result);
  
              MenuInflater inflater = getSupportMenuInflater();
              boolean show = false;
              ArrayList<Fragment> newMenus = null;
              if (mFragments.mAdded != null) {
                  for (int i = 0; i < mFragments.mAdded.size(); i++) {
                      Fragment f = mFragments.mAdded.get(i);
                      if (f != null && !f.mHidden && f.mHasMenu && f.mMenuVisible && f instanceof OnCreateOptionsMenuListener) {
                          show = true;
                          ((OnCreateOptionsMenuListener)f).onCreateOptionsMenu(menu, inflater);
                          if (newMenus == null) {
                              newMenus = new ArrayList<Fragment>();
                          }
                          newMenus.add(f);
                      }
                  }
              }
  
              if (mCreatedMenus != null) {
                  for (int i = 0; i < mCreatedMenus.size(); i++) {
                      Fragment f = mCreatedMenus.get(i);
                      if (newMenus == null || !newMenus.contains(f)) {
                          f.onDestroyOptionsMenu();
                      }
                  }
              }
  
              mCreatedMenus = newMenus;
  
              if (BuildConfig.DEBUG) Log.d(TAG, "[onCreatePanelMenu] fragments create result: " + show);
              result |= show;
  
              if (BuildConfig.DEBUG) Log.d(TAG, "[onCreatePanelMenu] returning " + result);
              return result;
          }
          return false;
      }
  
      @Override
      public boolean onPreparePanel(int featureId, View view, Menu menu) {
          if (BuildConfig.DEBUG) Log.d(TAG, "[onPreparePanel] featureId: " + featureId + ", view: " + view + " menu: " + menu);
  
          if (featureId == Window.FEATURE_OPTIONS_PANEL) {
              boolean result = onPrepareOptionsMenu(menu);
              if (BuildConfig.DEBUG) Log.d(TAG, "[onPreparePanel] activity prepare result: " + result);
  
              boolean show = false;
              if (mFragments.mAdded != null) {
                  for (int i = 0; i < mFragments.mAdded.size(); i++) {
                      Fragment f = mFragments.mAdded.get(i);
                      if (f != null && !f.mHidden && f.mHasMenu && f.mMenuVisible && f instanceof OnPrepareOptionsMenuListener) {
                          show = true;
                          ((OnPrepareOptionsMenuListener)f).onPrepareOptionsMenu(menu);
                      }
                  }
              }
  
              if (BuildConfig.DEBUG) Log.d(TAG, "[onPreparePanel] fragments prepare result: " + show);
              result |= show;
  
              result &= menu.hasVisibleItems();
              if (BuildConfig.DEBUG) Log.d(TAG, "[onPreparePanel] returning " + result);
              return result;
          }
          return false;
      }
  
      @Override
      public boolean onMenuItemSelected(int featureId, MenuItem item) {
          if (BuildConfig.DEBUG) Log.d(TAG, "[onMenuItemSelected] featureId: " + featureId + ", item: " + item);
  
          if (featureId == Window.FEATURE_OPTIONS_PANEL) {
              if (onOptionsItemSelected(item)) {
                  return true;
              }
  
              if (mFragments.mAdded != null) {
                  for (int i = 0; i < mFragments.mAdded.size(); i++) {
                      Fragment f = mFragments.mAdded.get(i);
                      if (f != null && !f.mHidden && f.mHasMenu && f.mMenuVisible && f instanceof OnOptionsItemSelectedListener) {
                          if (((OnOptionsItemSelectedListener)f).onOptionsItemSelected(item)) {
                              return true;
                          }
                      }
                  }
              }
          }
          return false;
      }
  
      public abstract boolean onCreateOptionsMenu(Menu menu);
  
      public abstract boolean onPrepareOptionsMenu(Menu menu);
  
      public abstract boolean onOptionsItemSelected(MenuItem item);
  
      public abstract MenuInflater getSupportMenuInflater();
  }
  