package de.westnordost.streetcomplete.quests.opening_hours; import android.annotation.SuppressLint; public class TimeRange extends CircularSection { public final boolean isOpenEnded; public TimeRange(int minutesStart, int minutesEnd, boolean openEnded) { super(minutesStart, minutesEnd); isOpenEnded = openEnded; } @Override public boolean intersects(CircularSection other) { if(super.intersects(other)) return true; if(isOpenEnded && other.getStart() >= getStart()) return true; if(other instanceof TimeRange) { if(((TimeRange) other).isOpenEnded && getStart() >= other.getStart()) return true; } return false; } @Override public boolean equals(Object other) { if(other == null || !(other instanceof TimeRange)) return false; TimeRange o = (TimeRange) other; return o.isOpenEnded == isOpenEnded && super.equals(o); } @Override public int hashCode() { return super.hashCode() * 2 + (isOpenEnded ? 1 : 0); } @Override public String toString() { return toStringUsing("-"); } public String toStringUsing(String range) { StringBuilder sb = new StringBuilder(); sb.append(timeOfDayToString(getStart())); int end = getEnd(); if(end == 0) end = 60*24; if(getStart() != getEnd() || !isOpenEnded) { sb.append(range); sb.append(timeOfDayToString(end)); } if(isOpenEnded) { sb.append("+"); } return sb.toString(); } @SuppressLint("DefaultLocale") private static String timeOfDayToString(int minutes) { return String.format("%02d:%02d", minutes / 60, minutes % 60); } }