Fix time and refactor
This commit is contained in:
parent
b29871e263
commit
8e5a232d21
5 changed files with 132 additions and 120 deletions
|
@ -186,76 +186,84 @@ public class OpeningHoursParser {
|
|||
return isOpenDay || isOpenPrevious;
|
||||
}
|
||||
|
||||
public boolean isOpen24_7() {
|
||||
boolean open24_7 = false;
|
||||
public boolean isOpened24_7() {
|
||||
boolean opened24_7 = false;
|
||||
for (OpeningHoursRule r : rules) {
|
||||
open24_7 = r.isOpened24_7();
|
||||
opened24_7 = r.isOpened24_7();
|
||||
}
|
||||
return open24_7;
|
||||
return opened24_7;
|
||||
}
|
||||
|
||||
public String getOpenedFromTime(Calendar cal) {
|
||||
String openFrom = getOpenFromTimeDay(cal);
|
||||
if (Algorithms.isEmpty(openFrom)) {
|
||||
openFrom = getOpenFromTimePrevious(cal);
|
||||
}
|
||||
return openFrom;
|
||||
public String getNearToOpeningTime(Calendar cal) {
|
||||
return getOpeningTime(cal, false);
|
||||
}
|
||||
|
||||
private String getOpenFromTimeDay(Calendar cal) {
|
||||
String openFrom = "";
|
||||
public String getOpeningTime(Calendar cal) {
|
||||
return getOpeningTime(cal, true);
|
||||
}
|
||||
|
||||
private String getOpeningTime(Calendar cal, boolean nearToOpening) {
|
||||
String openingAt = getOpeningTimeDay(cal, nearToOpening);
|
||||
if (Algorithms.isEmpty(openingAt)) {
|
||||
openingAt = getOpeningTimePrevious(cal, nearToOpening);
|
||||
}
|
||||
return openingAt;
|
||||
}
|
||||
|
||||
private String getOpeningTimeDay(Calendar cal, boolean nearToOpening) {
|
||||
String openingAt = "";
|
||||
for (OpeningHoursRule r : rules) {
|
||||
if (r.containsDay(cal) && r.containsMonth(cal)) {
|
||||
openFrom = r.getOpenedFromTime(cal, false);
|
||||
openingAt = r.getTime(cal, false, nearToOpening, true);
|
||||
}
|
||||
}
|
||||
return openFrom;
|
||||
return openingAt;
|
||||
}
|
||||
|
||||
private String getOpenFromTimePrevious(Calendar cal) {
|
||||
String openFrom = "";
|
||||
private String getOpeningTimePrevious(Calendar cal, boolean nearToOpening) {
|
||||
String openingAt = "";
|
||||
for (OpeningHoursRule r : rules) {
|
||||
if (r.containsPreviousDay(cal) && r.containsMonth(cal)) {
|
||||
openFrom = r.getOpenedFromTime(cal, true);
|
||||
openingAt = r.getTime(cal, true, nearToOpening, true);
|
||||
}
|
||||
}
|
||||
return openFrom;
|
||||
return openingAt;
|
||||
}
|
||||
|
||||
public String getClosedAtTime(Calendar cal) {
|
||||
return getClosedTime(cal, true);
|
||||
public String getNearToClosingTime(Calendar cal) {
|
||||
return getClosingTime(cal, true);
|
||||
}
|
||||
|
||||
public String getOpenedTillTime(Calendar cal) {
|
||||
return getClosedTime(cal, false);
|
||||
public String getClosingTime(Calendar cal) {
|
||||
return getClosingTime(cal, false);
|
||||
}
|
||||
|
||||
private String getClosedTime(Calendar cal, boolean nearToClosing) {
|
||||
String closedAt = getClosedAtTimeDay(cal, nearToClosing);
|
||||
if (Algorithms.isEmpty(closedAt)) {
|
||||
closedAt = getClosedAtTimeNextDay(cal, nearToClosing);
|
||||
private String getClosingTime(Calendar cal, boolean nearToClosing) {
|
||||
String closingAt = getClosingTimeDay(cal, nearToClosing);
|
||||
if (Algorithms.isEmpty(closingAt)) {
|
||||
closingAt = getClosingTimeNext(cal, nearToClosing);
|
||||
}
|
||||
return closedAt;
|
||||
return closingAt;
|
||||
}
|
||||
|
||||
private String getClosedAtTimeDay(Calendar cal, boolean nearToClosing) {
|
||||
String closedAt = "";
|
||||
private String getClosingTimeDay(Calendar cal, boolean nearToClosing) {
|
||||
String closingAt = "";
|
||||
for (OpeningHoursRule r : rules) {
|
||||
if (r.containsDay(cal) && r.containsMonth(cal)) {
|
||||
closedAt = r.getClosedAtTime(cal, false, nearToClosing);
|
||||
closingAt = r.getTime(cal, false, nearToClosing, false);
|
||||
}
|
||||
}
|
||||
return closedAt;
|
||||
return closingAt;
|
||||
}
|
||||
|
||||
private String getClosedAtTimeNextDay(Calendar cal, boolean nearToClosing) {
|
||||
String closedAt = "";
|
||||
private String getClosingTimeNext(Calendar cal, boolean nearToClosing) {
|
||||
String closingAt = "";
|
||||
for (OpeningHoursRule r : rules) {
|
||||
if (r.containsNextDay(cal) && r.containsMonth(cal)) {
|
||||
closedAt = r.getClosedAtTime(cal, true, nearToClosing);
|
||||
closingAt = r.getTime(cal, true, nearToClosing, false);
|
||||
}
|
||||
}
|
||||
return closedAt;
|
||||
return closingAt;
|
||||
}
|
||||
|
||||
public String getCurrentRuleTime(Calendar cal) {
|
||||
|
@ -424,9 +432,7 @@ public class OpeningHoursParser {
|
|||
|
||||
boolean isOpened24_7();
|
||||
|
||||
String getOpenedFromTime(Calendar cal, boolean checkPrevious);
|
||||
|
||||
String getClosedAtTime(Calendar cal, boolean checkNext, boolean nearToClosing);
|
||||
String getTime(Calendar cal, boolean checkAnotherDay, boolean nearToEvent, boolean opening);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -857,62 +863,54 @@ public class OpeningHoursParser {
|
|||
}
|
||||
|
||||
@Override
|
||||
public String getOpenedFromTime(Calendar cal, boolean checkPrevious) {
|
||||
int limit = 300;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
int d = getCurrentDay(cal);
|
||||
int p = getPreviousDay(d);
|
||||
int time = getCurrentTimeInMinutes(cal);
|
||||
for (int i = 0; i < startTimes.size(); i++) {
|
||||
int startTime = startTimes.get(i);
|
||||
int endTime = endTimes.get(i);
|
||||
if (startTime < endTime || endTime == -1) {
|
||||
if (days[d] && !checkPrevious) {
|
||||
if (time - startTime <= limit && (endTime == -1 || time <= endTime)) {
|
||||
formatTime(startTime, sb);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (time >= startTime && days[d] && !checkPrevious) {
|
||||
formatTime(startTime, sb);
|
||||
break;
|
||||
} else if (time < endTime && days[p] && checkPrevious) {
|
||||
if (24 * 60 - endTime + time <= limit) {
|
||||
formatTime(startTime, sb);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getClosedAtTime(Calendar cal, boolean checkNext, boolean nearToClosing) {
|
||||
int nearToClosingLimit = 120;
|
||||
public String getTime(Calendar cal, boolean checkAnotherDay, boolean nearToEvent, boolean opening) {
|
||||
int nearToEventLimit = 120;
|
||||
int freeLimit = 300;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
int d = getCurrentDay(cal);
|
||||
int n = getNextDay(d);
|
||||
int ad = opening ? getNextDay(d) : getPreviousDay(d);
|
||||
int time = getCurrentTimeInMinutes(cal);
|
||||
for (int i = 0; i < startTimes.size(); i++) {
|
||||
int startTime = startTimes.get(i);
|
||||
int endTime = endTimes.get(i);
|
||||
int diff = endTime - time;
|
||||
if (startTime < endTime && endTime != -1) {
|
||||
if (days[d] && !checkNext) {
|
||||
if ((time <= endTime) && ((!nearToClosing && diff >= freeLimit) || (nearToClosing && diff <= nearToClosingLimit))) {
|
||||
formatTime(endTime, sb);
|
||||
if (opening) {
|
||||
if (startTime < endTime || endTime == -1) {
|
||||
if (days[d] && !checkAnotherDay) {
|
||||
int diff = startTime - time;
|
||||
if ((time <= startTime) && ((!nearToEvent && diff <= freeLimit) || (nearToEvent && diff <= nearToEventLimit))) {
|
||||
formatTime(startTime, sb);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
int diff = -1;
|
||||
if (time <= startTime && days[d] && !checkAnotherDay) {
|
||||
diff = startTime - time;
|
||||
} else if (time > endTime && days[ad] && checkAnotherDay) {
|
||||
diff = 24 * 60 - endTime + time;
|
||||
}
|
||||
if ((diff != -1) && ((!nearToEvent && diff <= freeLimit) || (nearToEvent && diff <= nearToEventLimit))) {
|
||||
formatTime(startTime, sb);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (time <= endTime && days[d] && !checkNext) {
|
||||
formatTime(endTime, sb);
|
||||
break;
|
||||
} else if (time < endTime && days[n] && checkNext) {
|
||||
if ((!nearToClosing && diff >= freeLimit) || (nearToClosing && diff <= nearToClosingLimit)) {
|
||||
if (startTime < endTime && endTime != -1) {
|
||||
if (days[d] && !checkAnotherDay) {
|
||||
int diff = endTime - time;
|
||||
if ((time <= endTime) && ((!nearToEvent && diff >= freeLimit) || (nearToEvent && diff <= nearToEventLimit))) {
|
||||
formatTime(endTime, sb);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
int diff = -1;
|
||||
if (time <= endTime && days[d] && !checkAnotherDay) {
|
||||
diff = 24 * 60 - time + endTime;
|
||||
} else if (time < endTime && days[ad] && checkAnotherDay) {
|
||||
diff = startTime - time;
|
||||
}
|
||||
if ((diff != -1) && ((!nearToEvent && diff >= freeLimit) || (nearToEvent && diff <= nearToEventLimit))) {
|
||||
formatTime(endTime, sb);
|
||||
break;
|
||||
}
|
||||
|
@ -1123,12 +1121,7 @@ public class OpeningHoursParser {
|
|||
}
|
||||
|
||||
@Override
|
||||
public String getOpenedFromTime(Calendar cal, boolean checkPrevious) {
|
||||
return "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getClosedAtTime(Calendar cal, boolean checkNext, boolean nearToClosing) {
|
||||
public String getTime(Calendar cal, boolean checkAnotherDay, boolean nearToEvent, boolean opening) {
|
||||
return "";
|
||||
}
|
||||
|
||||
|
|
|
@ -9,10 +9,10 @@
|
|||
3. All your modified/created strings are in the top of the file (to make easier find what\'s translated).
|
||||
PLEASE: Have a look at http://code.google.com/p/osmand/wiki/UIConsistency, it may really improve your and our work :-) Thx - Hardy
|
||||
-->
|
||||
<string name="shared_string_opened">Opened</string>
|
||||
<string name="opened_from">Opened from</string>
|
||||
<string name="opened_till">Opened till</string>
|
||||
<string name="will_be_closed_at">Will be closed at</string>
|
||||
<string name="will_be_opened_at">Will be opened at</string>
|
||||
<string name="additional_actions">Additional actions</string>
|
||||
<string name="release_3_0">
|
||||
\u2022 Detection of stop signs now considers driving direction\n\n
|
||||
|
|
|
@ -1106,17 +1106,19 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
|
|||
View openingHoursView = view.findViewById(R.id.opening_hours_view);
|
||||
TextView openingHoursTextView = (TextView) view.findViewById(R.id.opening_hours_text_view);
|
||||
OpeningHoursInfo openingHoursInfo = menu.getOpeningHoursInfo();
|
||||
if (openingHoursInfo != null) {
|
||||
if (openingHoursInfo != null && openingHoursInfo.containsInfo()) {
|
||||
openingHoursTextView.setTextColor(ContextCompat.getColor(getContext(), openingHoursInfo.isOpened() ? R.color.ctx_menu_amenity_opened_text_color : R.color.ctx_menu_amenity_closed_text_color));
|
||||
String openingHoursStr = "";
|
||||
if (openingHoursInfo.isOpened24_7()) {
|
||||
openingHoursStr = getString(R.string.shared_string_is_open_24_7);
|
||||
} else if (!Algorithms.isEmpty(openingHoursInfo.getOpenedFromTime())) {
|
||||
openingHoursStr = getString(R.string.opened_from) + " " + openingHoursInfo.getOpenedFromTime();
|
||||
} else if (!Algorithms.isEmpty(openingHoursInfo.getClosedAtTime())) {
|
||||
openingHoursStr = getString(R.string.will_be_closed_at) + " " + openingHoursInfo.getClosedAtTime();
|
||||
} else if (!Algorithms.isEmpty(openingHoursInfo.getOpenedTillTime())) {
|
||||
openingHoursStr = getString(R.string.opened_till) + " " + openingHoursInfo.getOpenedTillTime();
|
||||
} else if (!Algorithms.isEmpty(openingHoursInfo.getOpeningTime())) {
|
||||
openingHoursStr = getString(R.string.opened_from) + " " + openingHoursInfo.getOpeningTime();
|
||||
} else if (!Algorithms.isEmpty(openingHoursInfo.getNearToOpeningTime())) {
|
||||
openingHoursStr = getString(R.string.will_be_opened_at) + " " + openingHoursInfo.getNearToOpeningTime();
|
||||
} else if (!Algorithms.isEmpty(openingHoursInfo.getClosingTime())) {
|
||||
openingHoursStr = getString(R.string.opened_till) + " " + openingHoursInfo.getClosingTime();
|
||||
} else if (!Algorithms.isEmpty(openingHoursInfo.getNearToClosingTime())) {
|
||||
openingHoursStr = getString(R.string.will_be_closed_at) + " " + openingHoursInfo.getNearToClosingTime();
|
||||
}
|
||||
openingHoursTextView.setText(openingHoursStr);
|
||||
openingHoursView.setVisibility(View.VISIBLE);
|
||||
|
|
|
@ -1,12 +1,15 @@
|
|||
package net.osmand.plus.mapcontextmenu;
|
||||
|
||||
import net.osmand.util.Algorithms;
|
||||
|
||||
public class OpeningHoursInfo {
|
||||
|
||||
private boolean opened;
|
||||
private boolean opened24_7;
|
||||
private String openedFromTime = "";
|
||||
private String closedAtTime = "";
|
||||
private String openedTillTime = "";
|
||||
private String openingTime = "";
|
||||
private String nearToOpeningTime = "";
|
||||
private String closingTime = "";
|
||||
private String nearToClosingTime = "";
|
||||
|
||||
public boolean isOpened() {
|
||||
return opened;
|
||||
|
@ -24,27 +27,43 @@ public class OpeningHoursInfo {
|
|||
this.opened24_7 = opened24_7;
|
||||
}
|
||||
|
||||
public String getOpenedFromTime() {
|
||||
return openedFromTime;
|
||||
public String getOpeningTime() {
|
||||
return openingTime;
|
||||
}
|
||||
|
||||
public void setOpenedFromTime(String openFromTime) {
|
||||
this.openedFromTime = openFromTime;
|
||||
public void setOpeningTime(String openFromTime) {
|
||||
this.openingTime = openFromTime;
|
||||
}
|
||||
|
||||
public String getClosedAtTime() {
|
||||
return closedAtTime;
|
||||
public String getNearToOpeningTime() {
|
||||
return nearToOpeningTime;
|
||||
}
|
||||
|
||||
public void setClosedAtTime(String closedAtTime) {
|
||||
this.closedAtTime = closedAtTime;
|
||||
public void setNearToOpeningTime(String nearToOpeningTime) {
|
||||
this.nearToOpeningTime = nearToOpeningTime;
|
||||
}
|
||||
|
||||
public String getOpenedTillTime() {
|
||||
return openedTillTime;
|
||||
public String getClosingTime() {
|
||||
return closingTime;
|
||||
}
|
||||
|
||||
public void setOpenedTillTime(String openedTillTime) {
|
||||
this.openedTillTime = openedTillTime;
|
||||
public void setClosingTime(String closingTime) {
|
||||
this.closingTime = closingTime;
|
||||
}
|
||||
|
||||
public String getNearToClosingTime() {
|
||||
return nearToClosingTime;
|
||||
}
|
||||
|
||||
public void setNearToClosingTime(String nearToClosingTime) {
|
||||
this.nearToClosingTime = nearToClosingTime;
|
||||
}
|
||||
|
||||
public boolean containsInfo() {
|
||||
return opened24_7
|
||||
|| !Algorithms.isEmpty(openingTime)
|
||||
|| !Algorithms.isEmpty(nearToOpeningTime)
|
||||
|| !Algorithms.isEmpty(closingTime)
|
||||
|| !Algorithms.isEmpty(nearToClosingTime);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -143,14 +143,12 @@ public class AmenityMenuController extends MenuController {
|
|||
} else {
|
||||
OpeningHoursInfo info = new OpeningHoursInfo();
|
||||
Calendar cal = Calendar.getInstance();
|
||||
if (openingHours.isOpenedForTime(cal)) {
|
||||
info.setOpened(true);
|
||||
info.setOpened24_7(openingHours.isOpen24_7());
|
||||
// info.setOpenedFromTime(openingHours.getOpenedFromTime(cal));
|
||||
info.setOpenedFromTime("");
|
||||
info.setClosedAtTime(openingHours.getClosedAtTime(cal));
|
||||
info.setOpenedTillTime(openingHours.getOpenedTillTime(cal));
|
||||
}
|
||||
info.setOpened(openingHours.isOpenedForTime(cal));
|
||||
info.setOpened24_7(openingHours.isOpened24_7());
|
||||
info.setOpeningTime(openingHours.getOpeningTime(cal));
|
||||
info.setNearToOpeningTime(openingHours.getNearToOpeningTime(cal));
|
||||
info.setClosingTime(openingHours.getClosingTime(cal));
|
||||
info.setNearToClosingTime(openingHours.getNearToClosingTime(cal));
|
||||
return info;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue