eleith
/
calchoochoo
Archived
1
0
Fork 0
This repository has been archived on 2020-11-15. You can view files and clone it, but cannot push or open issues or pull requests.
calchoochoo/app/src/main/java/com/eleith/calchoochoo/TripActivity.java

231 lines
9.1 KiB
Java

package com.eleith.calchoochoo;
import android.content.Intent;
import android.content.res.ColorStateList;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.util.Pair;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
import com.eleith.calchoochoo.dagger.ChooChooComponent;
import com.eleith.calchoochoo.dagger.ChooChooModule;
import com.eleith.calchoochoo.data.ChooChooLoader;
import com.eleith.calchoochoo.data.PossibleTrip;
import com.eleith.calchoochoo.data.StopTimes;
import com.eleith.calchoochoo.data.Trips;
import com.eleith.calchoochoo.fragments.SetAlarmDialogFragment;
import com.eleith.calchoochoo.utils.BundleKeys;
import com.eleith.calchoochoo.utils.ColorUtils;
import com.eleith.calchoochoo.utils.Notifications;
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.RxMessageNotificationPair;
import com.eleith.calchoochoo.utils.RxBusMessage.RxMessagePossibleTrip;
import com.eleith.calchoochoo.utils.RxBusMessage.RxMessageTrip;
import com.eleith.calchoochoo.utils.RxBusMessage.RxMessageTripStops;
import com.eleith.calchoochoo.utils.StopTimesUtils;
import com.google.android.gms.common.api.GoogleApiClient;
import org.joda.time.LocalDateTime;
import org.parceler.Parcels;
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 TripActivity extends AppCompatActivity {
private ChooChooComponent chooChooComponent;
private Subscription subscription;
private String sourceId;
private String destinationId;
private ArrayList<StopTimes> tripStops;
private PossibleTrip possibleTrip;
private String tripId;
private Trips trip;
private Integer stopMethod;
private Long stopDateTime;
private static final String PREFS_NAME = "com.eleith.calchoochoo.TripActivity";
private static final String PREF_PREFIX_KEY = "choochoo_trip_";
private Notifications notifications;
private ChooChooFab chooChooFab;
private ChooChooDrawer chooChooDrawer;
@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);
postponeEnterTransition();
setContentView(R.layout.activity_appbar_drawer_fab);
ButterKnife.bind(this);
subscription = rxBus.observeEvents(RxMessage.class).subscribe(new HandleRxMessages());
notifications = new Notifications(this);
chooChooDrawer = new ChooChooDrawer(this, getWindow().getDecorView().getRootView());
chooChooFab = new ChooChooFab(this, rxBus, getWindow().getDecorView().getRootView());
chooChooFab.setImageDrawable(getDrawable(R.drawable.ic_add_alarm_black_24dp));
chooChooFab.setBackgroundTintList(ColorStateList.valueOf(ColorUtils.getThemeColor(this, R.attr.colorAccent)));
Intent intent = getIntent();
if (intent != null) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
tripId = bundle.getString(BundleKeys.TRIP);
sourceId = bundle.getString(BundleKeys.STOP_SOURCE);
destinationId = bundle.getString(BundleKeys.STOP_DESTINATION);
stopMethod = bundle.getInt(BundleKeys.STOP_METHOD);
stopDateTime = bundle.getLong(BundleKeys.STOP_DATETIME);
chooChooLoader.loadTripStops(tripId);
if (destinationId != null) {
chooChooLoader.loadPossibleTrip(tripId, sourceId, destinationId);
}
}
}
}
private void changeNotificationPreferences(int departureMinutes, int arrivalMinutes) {
Boolean haveNotifications = false;
Boolean hadNotifications = false;
Bundle bundle = new Bundle();
bundle.putString(BundleKeys.TRIP, tripId);
bundle.putString(BundleKeys.STOP_SOURCE, sourceId);
bundle.putString(BundleKeys.STOP_DESTINATION, destinationId);
bundle.putString(BundleKeys.STOP_SOURCE_NAME, possibleTrip.getFirstStopName());
bundle.putLong(BundleKeys.STOP_SOURCE_TIME, possibleTrip.getDepartureTime().toDateTimeToday().getMillis());
bundle.putString(BundleKeys.STOP_DESTINATION_NAME, possibleTrip.getLastStopName());
bundle.putLong(BundleKeys.STOP_DESTINATION_TIME, possibleTrip.getArrivalTime().toDateTimeToday().getMillis());
hadNotifications = notifications.getAlarmId(tripId, Notifications.ARRIVING) != -1 || notifications.getAlarmId(tripId, Notifications.DEPARTING) != -1;
notifications.cancel(tripId, Notifications.ARRIVING);
notifications.cancel(tripId, Notifications.DEPARTING);
chooChooFab.setBackgroundTintList(ColorStateList.valueOf(ColorUtils.getThemeColor(this, R.attr.colorAccent)));
if (arrivalMinutes > 0) {
LocalDateTime arrivingDateTime = new LocalDateTime(possibleTrip.getArrivalTime().toDateTimeToday());
bundle.putString(BundleKeys.STOP_METHOD, Notifications.ARRIVING);
notifications.set(tripId, arrivingDateTime, arrivalMinutes, Notifications.ARRIVING, bundle);
chooChooFab.setBackgroundTintList(ColorStateList.valueOf(ColorUtils.getThemeColor(this, R.attr.colorPrimary)));
haveNotifications = true;
}
if (departureMinutes > 0) {
LocalDateTime departingDateTime = new LocalDateTime(possibleTrip.getDepartureTime().toDateTimeToday());
bundle.putString(BundleKeys.STOP_METHOD, Notifications.DEPARTING);
notifications.set(tripId, departingDateTime, departureMinutes, Notifications.DEPARTING, bundle);
chooChooFab.setBackgroundTintList(ColorStateList.valueOf(ColorUtils.getThemeColor(this, R.attr.colorPrimary)));
haveNotifications = true;
}
if (haveNotifications) {
Toast.makeText(this, getString(R.string.notifications_saved), Toast.LENGTH_SHORT).show();
} else if (hadNotifications) {
Toast.makeText(this, getString(R.string.notifications_removed), Toast.LENGTH_SHORT).show();
}
}
@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 loadFragments() {
if (tripStops != null && possibleTrip != null) {
chooChooDrawer.setStopSource(possibleTrip.getFirstParentStopId());
if (notifications.getAlarmMinutes(possibleTrip.getTripId(), Notifications.ARRIVING) != -1) {
chooChooFab.setBackgroundTintList(ColorStateList.valueOf(ColorUtils.getThemeColor(this, R.attr.colorPrimary)));
}
if (notifications.getAlarmMinutes(possibleTrip.getTripId(), Notifications.DEPARTING) != -1) {
chooChooFab.setBackgroundTintList(ColorStateList.valueOf(ColorUtils.getThemeColor(this, R.attr.colorPrimary)));
}
tripStops = StopTimesUtils.filterAndOrder(tripStops, possibleTrip.getTripDirection(), sourceId, destinationId);
chooChooRouterManager.loadTripDetailsFragments(possibleTrip, tripStops, stopMethod, stopDateTime);
}
}
private class HandleRxMessages implements Action1<RxMessage> {
@Override
public void call(RxMessage rxMessage) {
if (rxMessage.isMessageValidFor(RxMessageKeys.LOADED_TRIP_DETAILS)) {
tripStops = ((RxMessageTripStops) rxMessage).getMessage();
if (destinationId != null) {
loadFragments();
} else {
chooChooLoader.loadTripById(tripId);
}
} else if (rxMessage.isMessageValidFor(RxMessageKeys.FAB_CLICKED)) {
Bundle bundle = new Bundle();
SetAlarmDialogFragment dialog = new SetAlarmDialogFragment();
bundle.putParcelable(BundleKeys.POSSIBLE_TRIP, Parcels.wrap(possibleTrip));
dialog.setArguments(bundle);
dialog.show(getSupportFragmentManager(), "dialog");
} else if (rxMessage.isMessageValidFor(RxMessageKeys.LOADED_POSSIBLE_TRIP)) {
possibleTrip = ((RxMessagePossibleTrip) rxMessage).getMessage();
loadFragments();
} else if (rxMessage.isMessageValidFor(RxMessageKeys.LOADED_TRIP)) {
trip = ((RxMessageTrip) rxMessage).getMessage();
tripStops = StopTimesUtils.filterAndOrder(tripStops, trip.direction_id, sourceId);
destinationId = tripStops.get(tripStops.size() - 1).stop_id;
chooChooLoader.loadPossibleTrip(tripId, sourceId, destinationId);
} else if (rxMessage.isMessageValidFor(RxMessageKeys.NOTIFICATION_SELECTED)) {
Pair<Integer, Integer> notifications = ((RxMessageNotificationPair) rxMessage).getMessage();
changeNotificationPreferences(notifications.first, notifications.second);
}
}
}
}