package com.eleith.calchoochoo; import android.content.Intent; import android.os.Bundle; import android.support.design.widget.FloatingActionButton; import android.support.v7.app.AppCompatActivity; import android.view.View; import com.eleith.calchoochoo.dagger.ChooChooComponent; import com.eleith.calchoochoo.dagger.ChooChooModule; import com.eleith.calchoochoo.data.ChooChooLoader; import com.eleith.calchoochoo.data.PossibleTrain; import com.eleith.calchoochoo.data.Stop; import com.eleith.calchoochoo.utils.BundleKeys; import com.eleith.calchoochoo.utils.RxBus; import com.eleith.calchoochoo.utils.RxBusMessage.RxMessage; import com.eleith.calchoochoo.utils.RxBusMessage.RxMessageKeys; import com.eleith.calchoochoo.utils.RxBusMessage.RxMessageNextTrains; import com.eleith.calchoochoo.utils.RxBusMessage.RxMessageStop; import com.eleith.calchoochoo.utils.TripUtils; import com.google.android.gms.common.api.GoogleApiClient; import org.joda.time.LocalDateTime; import java.util.ArrayList; import javax.inject.Inject; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import rx.Subscription; import rx.functions.Action1; public class StopActivity extends AppCompatActivity { private ChooChooComponent chooChooComponent; private Subscription subscription; private ArrayList possibleTrains; private Stop stop; private int direction; @Inject RxBus rxBus; @Inject ChooChooRouterManager chooChooRouterManager; @Inject ChooChooLoader chooChooLoader; @Override protected void onCreate(Bundle savedInstanceState) { chooChooComponent = ChooChooApplication.from(this).getAppComponent().activityComponent(new ChooChooModule(this)); chooChooComponent.inject(this); super.onCreate(savedInstanceState); setContentView(R.layout.activity_appbar_drawer_fab); ButterKnife.bind(this); subscription = rxBus.observeEvents(RxMessage.class).subscribe(new HandleRxMessages()); ChooChooFab chooChooFab = new ChooChooFab(this, rxBus, getWindow().getDecorView().getRootView()); ChooChooDrawer chooChooDrawer = new ChooChooDrawer(this, getWindow().getDecorView().getRootView()); chooChooFab.setImageDrawable(getDrawable(R.drawable.ic_swap_vert_black_24dp)); Intent intent = getIntent(); if (intent != null) { Bundle bundle = intent.getExtras(); if (bundle != null) { String stopId = bundle.getString(BundleKeys.STOP); direction = bundle.getInt(BundleKeys.DIRECTION); chooChooLoader.loadPossibleTrains(stopId, new LocalDateTime()); chooChooLoader.loadStopByParentId(stopId); chooChooDrawer.setStopSource(stopId); } } } @Override protected void onStart() { super.onStart(); if (subscription.isUnsubscribed()) { subscription = rxBus.observeEvents(RxMessage.class).subscribe(new HandleRxMessages()); } } @Override protected void onStop() { super.onStop(); subscription.unsubscribe(); } @Override protected void onPause() { super.onPause(); } @Override protected void onResume() { super.onResume(); } @Override protected void onDestroy() { super.onDestroy(); } public ChooChooComponent getComponent() { return chooChooComponent; } private void loadFragment() { if (possibleTrains != null && stop != null) { ArrayList filteredTrains = new ArrayList<>(); for (PossibleTrain possibleTrain : possibleTrains) { if (possibleTrain.getTripDirectionId() == direction) { filteredTrains.add(possibleTrain); } } chooChooRouterManager.loadStopsFragments(stop, filteredTrains, direction); } } private class HandleRxMessages implements Action1 { @Override public void call(RxMessage rxMessage) { if (rxMessage.isMessageValidFor(RxMessageKeys.LOADED_NEXT_TRAINS)) { possibleTrains = ((RxMessageNextTrains) rxMessage).getMessage(); loadFragment(); } else if (rxMessage.isMessageValidFor(RxMessageKeys.LOADED_STOP)) { stop = ((RxMessageStop) rxMessage).getMessage(); loadFragment(); } else if (rxMessage.isMessageValidFor(RxMessageKeys.FAB_CLICKED)) { direction = direction == TripUtils.DIRECTION_NORTH ? TripUtils.DIRECTION_SOUTH : TripUtils.DIRECTION_NORTH; loadFragment(); } } } }