package org.holoeverywhere.addon;
import org.holoeverywhere.app.Activity;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import com.actionbarsherlock.ActionBarSherlock;
import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.internal.ActionBarSherlockCompat;
import com.actionbarsherlock.internal.ActionBarSherlockNative;
import com.actionbarsherlock.view.ActionMode;
import com.actionbarsherlock.view.ActionMode.Callback;
import com.actionbarsherlock.view.MenuInflater;
public class AddonSherlock extends IAddon {
public static class AddonSherlockA extends IAddonActivity {
private boolean mIgnoreNativeCreate = false;
private boolean mIgnoreNativePrepare = false;
private boolean mIgnoreNativeSelected = false;
private ActionBarSherlock mSherlock;
@Override
public boolean addContentView(View view, LayoutParams params) {
getSherlock().addContentView(view, params);
return true;
}
@Override
public boolean closeOptionsMenu() {
return getSherlock().dispatchCloseOptionsMenu();
}
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
return getSherlock().dispatchKeyEvent(event);
}
public ActionBar getActionBar() {
return getSherlock().getActionBar();
}
public MenuInflater getMenuInflater() {
return getSherlock().getMenuInflater();
}
protected ActionBarSherlock getSherlock() {
if (mSherlock == null) {
mSherlock = ActionBarSherlock.wrap(get(), ActionBarSherlock.FLAG_DELEGATE);
}
return mSherlock;
}
@Override
public boolean invalidateOptionsMenu() {
getSherlock().dispatchInvalidateOptionsMenu();
return true;
}
@Override
public void onConfigurationChanged(Configuration oldConfig, Configuration newConfig) {
getSherlock().dispatchConfigurationChanged(newConfig);
}
@Override
public boolean onCreatePanelMenu(int featureId, Menu menu) {
if (featureId == Window.FEATURE_OPTIONS_PANEL
&& !mIgnoreNativeCreate) {
mIgnoreNativeCreate = true;
boolean result = getSherlock().dispatchCreateOptionsMenu(menu);
mIgnoreNativeCreate = false;
return result;
}
return false;
}
@Override
public void onDestroy() {
getSherlock().dispatchDestroy();
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
openOptionsMenu();
}
return super.onKeyUp(keyCode, event);
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
if (featureId == Window.FEATURE_OPTIONS_PANEL
&& !mIgnoreNativeSelected) {
mIgnoreNativeSelected = true;
boolean result = getSherlock().dispatchOptionsItemSelected(item);
mIgnoreNativeSelected = false;
return result;
}
return false;
}
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
return getSherlock().dispatchMenuOpened(featureId, menu);
}
@Override
public void onPanelClosed(int featureId, Menu menu) {
getSherlock().dispatchPanelClosed(featureId, menu);
}
@Override
public void onPause() {
getSherlock().dispatchPause();
}
@Override
public void onPostCreate(Bundle savedInstanceState) {
getSherlock().dispatchPostCreate(savedInstanceState);
}
@Override
public void onPostResume() {
getSherlock().dispatchPostResume();
}
@Override
public boolean onPreparePanel(int featureId, View view, Menu menu) {
if (featureId == Window.FEATURE_OPTIONS_PANEL
&& !mIgnoreNativePrepare) {
mIgnoreNativePrepare = true;
boolean result = getSherlock().dispatchPrepareOptionsMenu(menu);
mIgnoreNativePrepare = false;
return result;
}
return false;
}
@Override
public void onStop() {
getSherlock().dispatchStop();
}
@Override
public void onTitleChanged(CharSequence title, int color) {
getSherlock().dispatchTitleChanged(title, color);
}
@Override
public boolean openOptionsMenu() {
return getSherlock().dispatchOpenOptionsMenu();
}
@Override
public boolean requestWindowFeature(int featureId) {
return getSherlock().requestFeature(featureId);
}
@Override
public boolean setContentView(View view, LayoutParams params) {
getSherlock().setContentView(view, params);
return true;
}
public void setProgress(int progress) {
getSherlock().setProgress(progress);
}
public void setProgressBarIndeterminate(boolean indeterminate) {
getSherlock().setProgressBarIndeterminate(indeterminate);
}
public void setProgressBarIndeterminateVisibility(boolean visible) {
getSherlock().setProgressBarIndeterminateVisibility(visible);
}
public void setProgressBarVisibility(boolean visible) {
getSherlock().setProgressBarVisibility(visible);
}
public void setSecondaryProgress(int secondaryProgress) {
getSherlock().setSecondaryProgress(secondaryProgress);
}
public void setUiOptions(int uiOptions) {
getSherlock().setUiOptions(uiOptions);
}
public void setUiOptions(int uiOptions, int mask) {
getSherlock().setUiOptions(uiOptions, mask);
}
public ActionMode startActionMode(Callback callback) {
return getSherlock().startActionMode(callback);
}
}
@ActionBarSherlock.Implementation(api = 7)
private static class HoloActionBarSherlockCompat extends ActionBarSherlockCompat {
public HoloActionBarSherlockCompat(android.app.Activity activity, int flags) {
super(activity, flags);
}
@Override
protected Context getThemedContext() {
if (mActivity instanceof Activity) {
return ((Activity) mActivity).getSupportActionBarContext();
}
return super.getThemedContext();
}
}
@ActionBarSherlock.Implementation(api = 14)
private static class HoloActionBarSherlockNative extends ActionBarSherlockNative {
public HoloActionBarSherlockNative(android.app.Activity activity, int flags) {
super(activity, flags);
}
@Override
protected Context getThemedContext() {
if (mActivity instanceof Activity) {
return ((Activity) mActivity).getSupportActionBarContext();
}
return super.getThemedContext();
}
}
static {
ActionBarSherlock.unregisterImplementation(ActionBarSherlockNative.class);
ActionBarSherlock.unregisterImplementation(ActionBarSherlockCompat.class);
ActionBarSherlock.registerImplementation(HoloActionBarSherlockNative.class);
ActionBarSherlock.registerImplementation(HoloActionBarSherlockCompat.class);
}
public AddonSherlock() {
register(Activity.class, AddonSherlockA.class);
}
}