package com.metova.roboguice.appcompat;

import java.util.HashMap;
import java.util.Map;

import roboguice.RoboGuice;
import roboguice.activity.event.OnActivityResultEvent;
import roboguice.activity.event.OnConfigurationChangedEvent;
import roboguice.activity.event.OnContentChangedEvent;
import roboguice.activity.event.OnCreateEvent;
import roboguice.activity.event.OnDestroyEvent;
import roboguice.activity.event.OnNewIntentEvent;
import roboguice.activity.event.OnPauseEvent;
import roboguice.activity.event.OnRestartEvent;
import roboguice.activity.event.OnResumeEvent;
import roboguice.activity.event.OnStartEvent;
import roboguice.activity.event.OnStopEvent;
import roboguice.event.EventManager;
import roboguice.inject.ContentViewListener;
import roboguice.inject.RoboInjector;
import roboguice.util.RoboContext;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;

import com.google.inject.Inject;
import com.google.inject.Key;

public class RoboActionBarActivity extends ActionBarActivity implements RoboContext {

    protected EventManager eventManager;
    protected HashMap<Key<?>, Object> scopedObjects = new HashMap<Key<?>, Object>();

    @Inject
    ContentViewListener ignored; // BUG find a better place to put this

    @Override
    protected void onCreate( Bundle savedInstanceState ) {

        final RoboInjector injector = RoboGuice.getInjector( this );
        eventManager = injector.getInstance( EventManager.class );
        injector.injectMembersWithoutViews( this );
        super.onCreate( savedInstanceState );
        eventManager.fire( new OnCreateEvent( savedInstanceState ) );
    }

    @Override
    protected void onRestart() {

        super.onRestart();
        eventManager.fire( new OnRestartEvent() );
    }

    @Override
    protected void onStart() {

        super.onStart();
        eventManager.fire( new OnStartEvent() );
    }

    @Override
    protected void onResume() {

        super.onResume();
        eventManager.fire( new OnResumeEvent() );
    }

    @Override
    protected void onPause() {

        super.onPause();
        eventManager.fire( new OnPauseEvent() );
    }

    @Override
    protected void onNewIntent( Intent intent ) {

        super.onNewIntent( intent );
        eventManager.fire( new OnNewIntentEvent() );
    }

    @Override
    protected void onStop() {

        try {
            eventManager.fire( new OnStopEvent() );
        }
        finally {
            super.onStop();
        }
    }

    @Override
    protected void onDestroy() {

        try {
            eventManager.fire( new OnDestroyEvent() );
        }
        finally {
            try {
                RoboGuice.destroyInjector( this );
            }
            finally {
                super.onDestroy();
            }
        }
    }

    @Override
    public void onConfigurationChanged( Configuration newConfig ) {

        final Configuration currentConfig = getResources().getConfiguration();
        super.onConfigurationChanged( newConfig );
        eventManager.fire( new OnConfigurationChangedEvent( currentConfig, newConfig ) );
    }

    @Override
    public void onContentChanged() {

        super.onContentChanged();
        RoboGuice.getInjector( this ).injectViewMembers( this );
        eventManager.fire( new OnContentChangedEvent() );
    }

    @Override
    protected void onActivityResult( int requestCode, int resultCode, Intent data ) {

        super.onActivityResult( requestCode, resultCode, data );
        eventManager.fire( new OnActivityResultEvent( requestCode, resultCode, data ) );
    }

    @Override
    public Map<Key<?>, Object> getScopedObjectMap() {

        return scopedObjects;
    }
}

@@ -3232,16 +3232,23 @@
  void on
+Support
 ContentC
@@ -3275,16 +3275,23 @@
 super.on
+Support
 ContentC

Update RoboActionBarActivity.java