package com.code44.finance.ui.common; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; import com.code44.finance.App; import com.code44.finance.R; import com.code44.finance.ui.settings.SettingsActivity; import com.code44.finance.utils.EventBus; import com.code44.finance.utils.analytics.Analytics; import com.code44.finance.utils.errors.AppError; import com.squareup.otto.Subscribe; import javax.inject.Inject; public abstract class BaseActivity extends ActionBarActivity { private final Object eventHandler = new Object() { @Subscribe public void onAppError(AppError error) { onHandleError(error); } }; @Inject EventBus eventBus; @Inject Analytics analytics; protected static Intent makeIntentForActivity(Context context, Class activityClass) { return new Intent(context, activityClass); } protected static void startActivity(Context context, Intent intent) { context.startActivity(intent); } protected static void startActivityForResult(Activity activity, Intent intent, int requestCode) { activity.startActivityForResult(intent, requestCode); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); App.with(this).inject(this); } @Override public void setContentView(int layoutResID) { super.setContentView(layoutResID); setupToolbar(); } @Override protected void onResume() { super.onResume(); getEventBus().register(eventHandler); final Analytics.Screen screen = getScreen(); if (screen == Analytics.Screen.None) { getAnalytics().clearScreen(); } else { getAnalytics().trackScreen(screen); } } @Override protected void onPause() { super.onPause(); getEventBus().unregister(eventHandler); getAnalytics().clearScreen(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.common, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: onBackPressed(); return true; case R.id.action_settings: SettingsActivity.start(this); return true; } return super.onOptionsItemSelected(item); } protected void onHandleError(AppError error) { Toast.makeText(this, error.getMessage(), Toast.LENGTH_SHORT).show(); } protected EventBus getEventBus() { return eventBus; } protected Analytics getAnalytics() { return analytics; } protected Analytics.Screen getScreen() { return Analytics.Screen.None; } protected Toolbar getToolbar() { return (Toolbar) findViewById(R.id.toolbar); } protected void setupToolbar() { final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); if (toolbar != null) { setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); } } }