package denominator.example.android.ui;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.view.KeyEvent;
import android.widget.Toast;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe;
import com.squareup.tape.TaskQueue;
import javax.inject.Inject;
import javax.inject.Singleton;
import dagger.ObjectGraph;
import dagger.Provides;
import denominator.Provider;
import denominator.example.android.DenominatorApplication;
import denominator.example.android.R;
import denominator.example.android.zone.ZoneList;
import static android.widget.Toast.LENGTH_LONG;
import static android.widget.Toast.LENGTH_SHORT;
public class HomeActivity extends FragmentActivity {
@Inject
Provider provider;
@Inject
ZoneList zoneList;
@Inject
TaskQueue<ZoneList> taskQueue;
@Inject
Bus bus;
private ObjectGraph activityGraph;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DenominatorApplication application = DenominatorApplication.class.cast(getApplication());
// make a child graph that injects us and our fragments
@dagger.Module(injects = {
HomeActivity.class,
ZoneListFragment.class
}, complete = false)
class ActivityModule {
@Provides
@Singleton
Activity provideActivityContext() {
return HomeActivity.this;
}
}
activityGraph = application.getApplicationGraph().plus(new ActivityModule());
activityGraph.inject(this);
setTitle(getString(R.string.home_title, provider.name()));
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(android.R.id.content, inject(new ZoneListFragment()))
.commit();
}
}
// wire up preferences screen when menu button is pressed.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
startActivity(new Intent(this, PreferencesActivity.class));
return true;
}
return super.onKeyDown(keyCode, event);
}
/**
* flash the response time of doing the list.
*/
@Subscribe
public void onZones(ZoneList.SuccessEvent event) {
String durationEvent = getString(R.string.list_duration, event.duration);
Toast.makeText(this, durationEvent, LENGTH_SHORT).show();
}
/**
* show any error messages posted to the bus.
*/
@Subscribe
public void onFailure(Throwable t) {
Toast.makeText(this, t.getMessage(), LENGTH_LONG).show();
}
@Override
public void onResume() {
super.onResume();
bus.register(this);
taskQueue.add(zoneList);
}
@Override
public void onPause() {
super.onPause();
bus.unregister(this);
}
@Override
protected void onDestroy() {
activityGraph = null;
super.onDestroy();
}
/**
* use this on {@link android.support.v4.app.Fragment#onActivityCreated} to restore injected
* fields.
*/
public <T> T inject(T toInject) {
return activityGraph.inject(toInject);
}
}