Merge commit '42b2e5ca519766e37ce6941ba4faecc9691cc403' into upstream
[debian/openrocket] / android-libraries / ActionBarSherlock / src / android / support / v4 / app / _ActionBarSherlockTrojanHorse.java
diff --git a/android-libraries/ActionBarSherlock/src/android/support/v4/app/_ActionBarSherlockTrojanHorse.java b/android-libraries/ActionBarSherlock/src/android/support/v4/app/_ActionBarSherlockTrojanHorse.java
new file mode 100644 (file)
index 0000000..3e3db62
--- /dev/null
@@ -0,0 +1,144 @@
+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.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 _ActionBarSherlockTrojanHorse extends FragmentActivity implements OnCreatePanelMenuListener, OnPreparePanelListener, OnMenuItemSelectedListener {
+    private static final boolean DEBUG = false;
+    private static final String TAG = "_ActionBarSherlockTrojanHorse";
+
+    /** 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 (DEBUG) Log.d(TAG, "[onCreatePanelMenu] featureId: " + featureId + ", menu: " + menu);
+
+        if (featureId == Window.FEATURE_OPTIONS_PANEL) {
+            boolean result = onCreateOptionsMenu(menu);
+            if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] activity create result: " + result);
+
+            MenuInflater inflater = getSupportMenuInflater();
+            boolean show = false;
+            ArrayList<Fragment> newMenus = null;
+            if (mFragments.mActive != 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 (DEBUG) Log.d(TAG, "[onCreatePanelMenu] fragments create result: " + show);
+            result |= show;
+
+            if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] returning " + result);
+            return result;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean onPreparePanel(int featureId, View view, Menu menu) {
+        if (DEBUG) Log.d(TAG, "[onPreparePanel] featureId: " + featureId + ", view: " + view + " menu: " + menu);
+
+        if (featureId == Window.FEATURE_OPTIONS_PANEL) {
+            boolean result = onPrepareOptionsMenu(menu);
+            if (DEBUG) Log.d(TAG, "[onPreparePanel] activity prepare result: " + result);
+
+            boolean show = false;
+            if (mFragments.mActive != 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 (DEBUG) Log.d(TAG, "[onPreparePanel] fragments prepare result: " + show);
+            result |= show;
+
+            result &= menu.hasVisibleItems();
+            if (DEBUG) Log.d(TAG, "[onPreparePanel] returning " + result);
+            return result;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean onMenuItemSelected(int featureId, MenuItem item) {
+        if (DEBUG) Log.d(TAG, "[onMenuItemSelected] featureId: " + featureId + ", item: " + item);
+
+        if (featureId == Window.FEATURE_OPTIONS_PANEL) {
+            if (onOptionsItemSelected(item)) {
+                return true;
+            }
+
+            if (mFragments.mActive != 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();
+}