mirror of
https://github.com/zxing/zxing.git
synced 2025-02-02 05:41:08 -08:00
More Issue 1067 - go back to original behavior - user chooses inclusive end date for all day events and app will compensate. End-less events have 0 duration by default.
git-svn-id: https://zxing.googlecode.com/svn/trunk@2042 59b500cc-1b3d-0410-9834-0bbf25fbcc57
This commit is contained in:
parent
7e234d9dfd
commit
3569162c69
|
@ -75,11 +75,13 @@ public final class CalendarResultHandler extends ResultHandler {
|
||||||
CalendarParsedResult calResult = (CalendarParsedResult) getResult();
|
CalendarParsedResult calResult = (CalendarParsedResult) getResult();
|
||||||
StringBuilder result = new StringBuilder(100);
|
StringBuilder result = new StringBuilder(100);
|
||||||
ParsedResult.maybeAppend(calResult.getSummary(), result);
|
ParsedResult.maybeAppend(calResult.getSummary(), result);
|
||||||
appendTime(calResult.getStart(), result);
|
String startString = calResult.getStart();
|
||||||
|
appendTime(startString, result, false, false);
|
||||||
|
|
||||||
String endString = calResult.getEnd();
|
String endString = calResult.getEnd();
|
||||||
if (endString != null) {
|
if (endString != null) {
|
||||||
appendTime(endString, result);
|
boolean sameStartEnd = startString.equals(endString);
|
||||||
|
appendTime(endString, result, true, sameStartEnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
ParsedResult.maybeAppend(calResult.getLocation(), result);
|
ParsedResult.maybeAppend(calResult.getLocation(), result);
|
||||||
|
@ -88,13 +90,19 @@ public final class CalendarResultHandler extends ResultHandler {
|
||||||
return result.toString();
|
return result.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void appendTime(String when, StringBuilder result) {
|
private static void appendTime(String when, StringBuilder result, boolean end, boolean sameStartEnd) {
|
||||||
if (when.length() == 8) {
|
if (when.length() == 8) {
|
||||||
// Show only year/month/day
|
// Show only year/month/day
|
||||||
Date date;
|
Date date;
|
||||||
synchronized (DATE_FORMAT) {
|
synchronized (DATE_FORMAT) {
|
||||||
date = DATE_FORMAT.parse(when, new ParsePosition(0));
|
date = DATE_FORMAT.parse(when, new ParsePosition(0));
|
||||||
}
|
}
|
||||||
|
// if it's all-day and this is the end date, it's exclusive, so show the user
|
||||||
|
// that it ends on the day before to make more intuitive sense.
|
||||||
|
// But don't do it if the event already (incorrectly?) specifies the same start/end
|
||||||
|
if (end && !sameStartEnd) {
|
||||||
|
date = new Date(date.getTime() - 24 * 60 * 60 * 1000);
|
||||||
|
}
|
||||||
ParsedResult.maybeAppend(DateFormat.getDateInstance().format(date.getTime()), result);
|
ParsedResult.maybeAppend(DateFormat.getDateInstance().format(date.getTime()), result);
|
||||||
} else {
|
} else {
|
||||||
// The when string can be local time, or UTC if it ends with a Z
|
// The when string can be local time, or UTC if it ends with a Z
|
||||||
|
|
|
@ -245,8 +245,7 @@ public abstract class ResultHandler {
|
||||||
// + 1 day
|
// + 1 day
|
||||||
endMilliseconds = startMilliseconds + 24 * 60 * 60 * 1000;
|
endMilliseconds = startMilliseconds + 24 * 60 * 60 * 1000;
|
||||||
} else {
|
} else {
|
||||||
// + 1 hour
|
endMilliseconds = startMilliseconds;
|
||||||
endMilliseconds = startMilliseconds + 60 * 60 * 1000;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
endMilliseconds = calculateMilliseconds(end);
|
endMilliseconds = calculateMilliseconds(end);
|
||||||
|
|
|
@ -244,16 +244,18 @@ public final class CalendarEventGenerator implements GeneratorSource {
|
||||||
if (date1 == null || date2 == null) {
|
if (date1 == null || date2 == null) {
|
||||||
throw new GeneratorException("Start and end dates must be set.");
|
throw new GeneratorException("Start and end dates must be set.");
|
||||||
}
|
}
|
||||||
if (date1.equals(date2) || date1.after(date2)) {
|
if (date1.after(date2)) {
|
||||||
throw new GeneratorException("End date must be at least a day after start date.");
|
throw new GeneratorException("End date cannot be before start date.");
|
||||||
}
|
}
|
||||||
|
// Specify end date as +1 day since it's exclusive
|
||||||
|
Date date2PlusDay = new Date(date2.getTime() + 24 * 60 * 60 * 1000);
|
||||||
DateTimeFormat isoFormatter = DateTimeFormat.getFormat("yyyyMMdd");
|
DateTimeFormat isoFormatter = DateTimeFormat.getFormat("yyyyMMdd");
|
||||||
StringBuilder output = new StringBuilder();
|
StringBuilder output = new StringBuilder();
|
||||||
output.append("DTSTART;VALUE=DATE:");
|
output.append("DTSTART;VALUE=DATE:");
|
||||||
output.append(isoFormatter.format(date1));
|
output.append(isoFormatter.format(date1));
|
||||||
output.append("\r\n");
|
output.append("\r\n");
|
||||||
output.append("DTEND;VALUE=DATE:");
|
output.append("DTEND;VALUE=DATE:");
|
||||||
output.append(isoFormatter.format(date2));
|
output.append(isoFormatter.format(date2PlusDay));
|
||||||
output.append("\r\n");
|
output.append("\r\n");
|
||||||
return output.toString();
|
return output.toString();
|
||||||
}
|
}
|
||||||
|
@ -273,8 +275,8 @@ public final class CalendarEventGenerator implements GeneratorSource {
|
||||||
}
|
}
|
||||||
Date dateTime1 = addMilliseconds(mergeDateAndTime(date1, time1), -diffTimeZone);
|
Date dateTime1 = addMilliseconds(mergeDateAndTime(date1, time1), -diffTimeZone);
|
||||||
Date dateTime2 = addMilliseconds(mergeDateAndTime(date2, time2), -diffTimeZone);
|
Date dateTime2 = addMilliseconds(mergeDateAndTime(date2, time2), -diffTimeZone);
|
||||||
if (dateTime1.equals(dateTime2) || dateTime1.after(dateTime2)) {
|
if (dateTime1.after(dateTime2)) {
|
||||||
throw new GeneratorException("Ending date/time must be after starting date.");
|
throw new GeneratorException("Ending date/time cannot be before starting date/time.");
|
||||||
}
|
}
|
||||||
DateTimeFormat isoFormatter = DateTimeFormat.getFormat("yyyyMMdd'T'HHmmss'Z'");
|
DateTimeFormat isoFormatter = DateTimeFormat.getFormat("yyyyMMdd'T'HHmmss'Z'");
|
||||||
StringBuilder output = new StringBuilder();
|
StringBuilder output = new StringBuilder();
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
application: zxing
|
application: zxing
|
||||||
version: 3
|
version: 4
|
||||||
runtime: python
|
runtime: python
|
||||||
api_version: 1
|
api_version: 1
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue