package moontime.droid.service; import java.util.Date; import java.util.EnumSet; import java.util.List; import moontime.MoonEvent; import moontime.MoonEventType; import moontime.MoonPhaseAlgorithm; import moontime.MoonUtil; import moontime.alg.MoonToolPhaseAlgorithm; import moontime.droid.util.Util; import android.util.Log; import com.google.common.collect.Iterables; import com.google.inject.Singleton; @Singleton public class MoontimeService { public static final MoonPhaseAlgorithm MOON_PHASE_ALGORITHM = new MoonToolPhaseAlgorithm(); private static final EnumSet<MoonEventType> MOON_EVENT_TYPES = EnumSet.of(MoonEventType.NEW_MOON, MoonEventType.FULL_MOON); private final static long SHOW_EVENT_AFTER_PASSED_AWAY_TIME = Util.hoursToMillis(48); private long _debugAdditionalTime = 0; public long getDebugAdditionalTime() { return _debugAdditionalTime; } public void setDebugAdditionalTime(long debugAdditionalTime) { _debugAdditionalTime = debugAdditionalTime; } public MoonEvent getNextMoonEvent() { return Iterables.getOnlyElement(getNextMoonEvents(1)); } public List<MoonEvent> getNextMoonEvents(int count) { long now = System.currentTimeMillis(); long phaseHuntStartTime = now - SHOW_EVENT_AFTER_PASSED_AWAY_TIME; // debug only phaseHuntStartTime += _debugAdditionalTime; now += _debugAdditionalTime; Log.d("debug", "now: " + new Date(now) + " (debug time: " + _debugAdditionalTime + " ms)"); return MOON_PHASE_ALGORITHM.getNextMoonEvents(MoonUtil.newCalender(phaseHuntStartTime), count, MOON_EVENT_TYPES); } public List<MoonEvent> getNextMoonEvents(long startTime, int count) { return MOON_PHASE_ALGORITHM.getNextMoonEvents(MoonUtil.newCalender(startTime), count, MOON_EVENT_TYPES); } }