From 8e5a232d21f4fbe45d47723d2b9c5bdb4c5d38bc Mon Sep 17 00:00:00 2001 From: PavelRatushny Date: Fri, 8 Dec 2017 14:25:34 +0200 Subject: [PATCH] Fix time and refactor --- .../net/osmand/util/OpeningHoursParser.java | 171 +++++++++--------- OsmAnd/res/values/strings.xml | 2 +- .../MapContextMenuFragment.java | 16 +- .../plus/mapcontextmenu/OpeningHoursInfo.java | 49 +++-- .../controllers/AmenityMenuController.java | 14 +- 5 files changed, 132 insertions(+), 120 deletions(-) diff --git a/OsmAnd-java/src/net/osmand/util/OpeningHoursParser.java b/OsmAnd-java/src/net/osmand/util/OpeningHoursParser.java index 7d09c8d9eb..91e6c48a03 100644 --- a/OsmAnd-java/src/net/osmand/util/OpeningHoursParser.java +++ b/OsmAnd-java/src/net/osmand/util/OpeningHoursParser.java @@ -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 ""; } diff --git a/OsmAnd/res/values/strings.xml b/OsmAnd/res/values/strings.xml index 1a9914b292..c439d6fe54 100644 --- a/OsmAnd/res/values/strings.xml +++ b/OsmAnd/res/values/strings.xml @@ -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 --> - Opened Opened from Opened till Will be closed at + Will be opened at Additional actions \u2022 Detection of stop signs now considers driving direction\n\n diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java index 98b4d78255..1bf87b7193 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java @@ -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); diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/OpeningHoursInfo.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/OpeningHoursInfo.java index fe507edcb9..c8305ca85e 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/OpeningHoursInfo.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/OpeningHoursInfo.java @@ -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); } } diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AmenityMenuController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AmenityMenuController.java index f0dd41ea0a..b2a0c8b1f8 100644 --- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AmenityMenuController.java +++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/AmenityMenuController.java @@ -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; } }