package org.gdg.frisbee.android.eventseries; import android.location.Location; import android.support.annotation.Nullable; import org.gdg.frisbee.android.api.model.Event; import java.util.Comparator; class TaggedEventDistanceComparator implements Comparator<EventAdapter.Item> { @Nullable private final Location lastLocation; TaggedEventDistanceComparator(@Nullable Location lastLocation) { this.lastLocation = lastLocation; } @Override public int compare(EventAdapter.Item eventItem1, EventAdapter.Item eventItem2) { float[] results = new float[1]; float[] results2 = new float[1]; Event event1 = (Event) eventItem1.getEvent(); Event event2 = (Event) eventItem2.getEvent(); if (lastLocation == null) { return event1.getStart().compareTo(event2.getStart()); } Event.LatLng latLng1 = event1.getLatLng(); Event.LatLng latLng2 = event2.getLatLng(); if (latLng1 == null && latLng2 == null) { return event1.getStart().compareTo(event2.getStart()); } if (latLng1 == null) { return 1; } if (latLng2 == null) { return -1; } Location.distanceBetween(lastLocation.getLatitude(), lastLocation.getLongitude(), latLng1.getLat(), latLng1.getLng(), results); Location.distanceBetween(lastLocation.getLatitude(), lastLocation.getLongitude(), latLng2.getLat(), latLng2.getLng(), results2); if (results[0] == results2[0]) { return 0; } else if (results[0] > results2[0]) { return 1; } else { return -1; } } @Override public boolean equals(Object obj) { return false; } }