Merge commit '42b2e5ca519766e37ce6941ba4faecc9691cc403' into upstream
[debian/openrocket] / android-libraries / ActionBarSherlock / src / com / actionbarsherlock / internal / ActionBarSherlockNative.java
diff --git a/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockNative.java b/android-libraries/ActionBarSherlock/src/com/actionbarsherlock/internal/ActionBarSherlockNative.java
new file mode 100644 (file)
index 0000000..9afca18
--- /dev/null
@@ -0,0 +1,328 @@
+package com.actionbarsherlock.internal;
+
+import com.actionbarsherlock.ActionBarSherlock;
+import com.actionbarsherlock.app.ActionBar;
+import com.actionbarsherlock.internal.app.ActionBarWrapper;
+import com.actionbarsherlock.internal.view.menu.MenuWrapper;
+import com.actionbarsherlock.view.ActionMode;
+import com.actionbarsherlock.view.MenuInflater;
+import android.app.Activity;
+import android.content.Context;
+import android.util.Log;
+import android.util.TypedValue;
+import android.view.ContextThemeWrapper;
+import android.view.View;
+import android.view.Window;
+import android.view.ViewGroup.LayoutParams;
+
+@ActionBarSherlock.Implementation(api = 14)
+public class ActionBarSherlockNative extends ActionBarSherlock {
+    private ActionBarWrapper mActionBar;
+    private ActionModeWrapper mActionMode;
+    private MenuWrapper mMenu;
+
+    public ActionBarSherlockNative(Activity activity, int flags) {
+        super(activity, flags);
+    }
+
+
+    @Override
+    public ActionBar getActionBar() {
+        if (DEBUG) Log.d(TAG, "[getActionBar]");
+
+        initActionBar();
+        return mActionBar;
+    }
+
+    private void initActionBar() {
+        if (mActionBar != null || mActivity.getActionBar() == null) {
+            return;
+        }
+
+        mActionBar = new ActionBarWrapper(mActivity);
+    }
+
+    @Override
+    public void dispatchInvalidateOptionsMenu() {
+        if (DEBUG) Log.d(TAG, "[dispatchInvalidateOptionsMenu]");
+
+        mActivity.getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL);
+    }
+
+    @Override
+    public boolean dispatchCreateOptionsMenu(android.view.Menu menu) {
+        if (DEBUG) Log.d(TAG, "[dispatchCreateOptionsMenu] menu: " + menu);
+
+        if (mMenu == null || menu != mMenu.unwrap()) {
+            mMenu = new MenuWrapper(menu);
+        }
+
+        final boolean result = callbackCreateOptionsMenu(mMenu);
+        if (DEBUG) Log.d(TAG, "[dispatchCreateOptionsMenu] returning " + result);
+        return result;
+    }
+
+    @Override
+    public boolean dispatchPrepareOptionsMenu(android.view.Menu menu) {
+        if (DEBUG) Log.d(TAG, "[dispatchPrepareOptionsMenu] menu: " + menu);
+
+        final boolean result = callbackPrepareOptionsMenu(mMenu);
+        if (DEBUG) Log.d(TAG, "[dispatchPrepareOptionsMenu] returning " + result);
+        return result;
+    }
+
+    @Override
+    public boolean dispatchOptionsItemSelected(android.view.MenuItem item) {
+        if (DEBUG) Log.d(TAG, "[dispatchOptionsItemSelected] item: " + item.getTitleCondensed());
+
+        final boolean result = callbackOptionsItemSelected(mMenu.findItem(item));
+        if (DEBUG) Log.d(TAG, "[dispatchOptionsItemSelected] returning " + result);
+        return result;
+    }
+
+    @Override
+    public boolean hasFeature(int feature) {
+        if (DEBUG) Log.d(TAG, "[hasFeature] feature: " + feature);
+
+        final boolean result = mActivity.getWindow().hasFeature(feature);
+        if (DEBUG) Log.d(TAG, "[hasFeature] returning " + result);
+        return result;
+    }
+
+    @Override
+    public boolean requestFeature(int featureId) {
+        if (DEBUG) Log.d(TAG, "[requestFeature] featureId: " + featureId);
+
+        final boolean result = mActivity.getWindow().requestFeature(featureId);
+        if (DEBUG) Log.d(TAG, "[requestFeature] returning " + result);
+        return result;
+    }
+
+    @Override
+    public void setUiOptions(int uiOptions) {
+        if (DEBUG) Log.d(TAG, "[setUiOptions] uiOptions: " + uiOptions);
+
+        mActivity.getWindow().setUiOptions(uiOptions);
+    }
+
+    @Override
+    public void setUiOptions(int uiOptions, int mask) {
+        if (DEBUG) Log.d(TAG, "[setUiOptions] uiOptions: " + uiOptions + ", mask: " + mask);
+
+        mActivity.getWindow().setUiOptions(uiOptions, mask);
+    }
+
+    @Override
+    public void setContentView(int layoutResId) {
+        if (DEBUG) Log.d(TAG, "[setContentView] layoutResId: " + layoutResId);
+
+        mActivity.getWindow().setContentView(layoutResId);
+        initActionBar();
+    }
+
+    @Override
+    public void setContentView(View view, LayoutParams params) {
+        if (DEBUG) Log.d(TAG, "[setContentView] view: " + view + ", params: " + params);
+
+        mActivity.getWindow().setContentView(view, params);
+        initActionBar();
+    }
+
+    @Override
+    public void addContentView(View view, LayoutParams params) {
+        if (DEBUG) Log.d(TAG, "[addContentView] view: " + view + ", params: " + params);
+
+        mActivity.getWindow().addContentView(view, params);
+        initActionBar();
+    }
+
+    @Override
+    public void setTitle(CharSequence title) {
+        if (DEBUG) Log.d(TAG, "[setTitle] title: " + title);
+
+        mActivity.getWindow().setTitle(title);
+    }
+
+    @Override
+    public void setProgressBarVisibility(boolean visible) {
+        if (DEBUG) Log.d(TAG, "[setProgressBarVisibility] visible: " + visible);
+
+        mActivity.setProgressBarVisibility(visible);
+    }
+
+    @Override
+    public void setProgressBarIndeterminateVisibility(boolean visible) {
+        if (DEBUG) Log.d(TAG, "[setProgressBarIndeterminateVisibility] visible: " + visible);
+
+        mActivity.setProgressBarIndeterminateVisibility(visible);
+    }
+
+    @Override
+    public void setProgressBarIndeterminate(boolean indeterminate) {
+        if (DEBUG) Log.d(TAG, "[setProgressBarIndeterminate] indeterminate: " + indeterminate);
+
+        mActivity.setProgressBarIndeterminate(indeterminate);
+    }
+
+    @Override
+    public void setProgress(int progress) {
+        if (DEBUG) Log.d(TAG, "[setProgress] progress: " + progress);
+
+        mActivity.setProgress(progress);
+    }
+
+    @Override
+    public void setSecondaryProgress(int secondaryProgress) {
+        if (DEBUG) Log.d(TAG, "[setSecondaryProgress] secondaryProgress: " + secondaryProgress);
+
+        mActivity.setSecondaryProgress(secondaryProgress);
+    }
+
+    @Override
+    protected Context getThemedContext() {
+        Context context = mActivity;
+        TypedValue outValue = new TypedValue();
+        mActivity.getTheme().resolveAttribute(android.R.attr.actionBarWidgetTheme, outValue, true);
+        if (outValue.resourceId != 0) {
+            //We are unable to test if this is the same as our current theme
+            //so we just wrap it and hope that if the attribute was specified
+            //then the user is intentionally specifying an alternate theme.
+            context = new ContextThemeWrapper(context, outValue.resourceId);
+        }
+        return context;
+    }
+
+    @Override
+    public ActionMode startActionMode(com.actionbarsherlock.view.ActionMode.Callback callback) {
+        if (DEBUG) Log.d(TAG, "[startActionMode] callback: " + callback);
+
+        if (mActionMode != null) {
+            mActionMode.finish();
+        }
+        ActionModeCallbackWrapper wrapped = null;
+        if (callback != null) {
+            wrapped = new ActionModeCallbackWrapper(callback);
+        }
+
+        //Calling this will trigger the callback wrapper's onCreate which
+        //is where we will set the new instance to mActionMode since we need
+        //to pass it through to the sherlock callbacks and the call below
+        //will not have returned yet to store its value.
+        mActivity.startActionMode(wrapped);
+
+        return mActionMode;
+    }
+
+    private class ActionModeCallbackWrapper implements android.view.ActionMode.Callback {
+        private final ActionMode.Callback mCallback;
+
+        public ActionModeCallbackWrapper(ActionMode.Callback callback) {
+            mCallback = callback;
+        }
+
+        @Override
+        public boolean onCreateActionMode(android.view.ActionMode mode, android.view.Menu menu) {
+            //See ActionBarSherlockNative#startActionMode
+            mActionMode = new ActionModeWrapper(mode);
+
+            return mCallback.onCreateActionMode(mActionMode, mActionMode.getMenu());
+        }
+
+        @Override
+        public boolean onPrepareActionMode(android.view.ActionMode mode, android.view.Menu menu) {
+            return mCallback.onPrepareActionMode(mActionMode, mActionMode.getMenu());
+        }
+
+        @Override
+        public boolean onActionItemClicked(android.view.ActionMode mode, android.view.MenuItem item) {
+            return mCallback.onActionItemClicked(mActionMode, mActionMode.getMenu().findItem(item));
+        }
+
+        @Override
+        public void onDestroyActionMode(android.view.ActionMode mode) {
+            mCallback.onDestroyActionMode(mActionMode);
+        }
+    }
+
+    private class ActionModeWrapper extends ActionMode {
+        private final android.view.ActionMode mActionMode;
+        private MenuWrapper mMenu = null;
+
+        ActionModeWrapper(android.view.ActionMode actionMode) {
+            mActionMode = actionMode;
+        }
+
+        @Override
+        public void setTitle(CharSequence title) {
+            mActionMode.setTitle(title);
+        }
+
+        @Override
+        public void setTitle(int resId) {
+            mActionMode.setTitle(resId);
+        }
+
+        @Override
+        public void setSubtitle(CharSequence subtitle) {
+            mActionMode.setSubtitle(subtitle);
+        }
+
+        @Override
+        public void setSubtitle(int resId) {
+            mActionMode.setSubtitle(resId);
+        }
+
+        @Override
+        public void setCustomView(View view) {
+            mActionMode.setCustomView(view);
+        }
+
+        @Override
+        public void invalidate() {
+            mActionMode.invalidate();
+        }
+
+        @Override
+        public void finish() {
+            mActionMode.finish();
+        }
+
+        @Override
+        public MenuWrapper getMenu() {
+            if (mMenu == null) {
+                mMenu = new MenuWrapper(mActionMode.getMenu());
+            }
+            return mMenu;
+        }
+
+        @Override
+        public CharSequence getTitle() {
+            return mActionMode.getTitle();
+        }
+
+        @Override
+        public CharSequence getSubtitle() {
+            return mActionMode.getSubtitle();
+        }
+
+        @Override
+        public View getCustomView() {
+            return mActionMode.getCustomView();
+        }
+
+        @Override
+        public MenuInflater getMenuInflater() {
+            return ActionBarSherlockNative.this.getMenuInflater();
+        }
+
+        @Override
+        public void setTag(Object tag) {
+            mActionMode.setTag(tag);
+        }
+
+        @Override
+        public Object getTag() {
+            return mActionMode.getTag();
+        }
+    }
+}