diff options
| -rw-r--r-- | cgeo-calendar/src/cgeo/calendar/CalendarActivity.java | 42 | ||||
| -rw-r--r-- | main/res/values-de/strings.xml | 3 | ||||
| -rw-r--r-- | main/res/values/strings.xml | 3 | ||||
| -rw-r--r-- | main/src/cgeo/calendar/ICalendar.java | 1 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/CacheDetailActivity.java | 3 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/cgCache.java | 43 |
6 files changed, 80 insertions, 15 deletions
diff --git a/cgeo-calendar/src/cgeo/calendar/CalendarActivity.java b/cgeo-calendar/src/cgeo/calendar/CalendarActivity.java index 1bcb16e..ed17d4c 100644 --- a/cgeo-calendar/src/cgeo/calendar/CalendarActivity.java +++ b/cgeo-calendar/src/cgeo/calendar/CalendarActivity.java @@ -30,6 +30,7 @@ public final class CalendarActivity extends Activity { private String location; private String coords; private Uri uri; + private int startTimeMinutes = -1; /** Called when the activity is first created. */ @Override @@ -49,6 +50,13 @@ public final class CalendarActivity extends Activity { name = getParameter(ICalendar.PARAM_NAME); location = getParameter(ICalendar.PARAM_LOCATION); coords = getParameter(ICalendar.PARAM_COORDS); + final String startTime = getParameter(ICalendar.PARAM_START_TIME_MINUTES); + if (startTime.length() > 0) { + try { + startTimeMinutes = Integer.valueOf(startTime); + } catch (NumberFormatException e) { + } + } if (name.length() > 0 && hiddenDate.length() > 0) { if (Compatibility.isLevel14()) { @@ -147,12 +155,17 @@ public final class CalendarActivity extends Activity { * @return <code>Date</code> based on hidden date. Time is set to 00:00:00. */ private Date parseDate() { - final Date eventDate = new Date(Long.parseLong(hiddenDate)); - eventDate.setHours(0); - eventDate.setMinutes(0); - eventDate.setSeconds(0); - - return eventDate; + try { + final Date eventDate = new Date(Long.parseLong(hiddenDate)); + eventDate.setHours(0); + eventDate.setMinutes(0); + eventDate.setSeconds(0); + + return eventDate; + } catch (NumberFormatException e) { + // cannot happen normally, but static code analysis does not know + } + return null; } /** @@ -221,8 +234,12 @@ public final class CalendarActivity extends Activity { // values final ContentValues event = new ContentValues(); event.put("calendar_id", calendarId); - event.put("dtstart", eventDate.getTime() + 43200000); // noon - event.put("dtend", eventDate.getTime() + 43200000 + 3600000); // + one hour + if (startTimeMinutes >= 0) { + event.put("dtstart", eventDate.getTime() + startTimeMinutes * 60000); + } + else { + event.put("allDay", 1); + } event.put("eventTimezone", "UTC"); event.put("title", Html.fromHtml(name).toString()); event.put("description", description); @@ -230,7 +247,6 @@ public final class CalendarActivity extends Activity { if (eventLocation.length() > 0) { event.put("eventLocation", eventLocation); } - event.put("allDay", 1); event.put("hasAlarm", 0); getContentResolver().insert(calendarProvider, event); @@ -261,13 +277,17 @@ public final class CalendarActivity extends Activity { */ final Intent intent = new Intent(Intent.ACTION_INSERT) .setData(Compatibility.getCalendarEventsProviderURI()) - .putExtra("beginTime", eventDate.getTime() + 43200000) - .putExtra("allDay", true) .putExtra("title", Html.fromHtml(name).toString()) .putExtra("description", description) .putExtra("hasAlarm", false) .putExtra("eventTimezone", "UTC") .putExtra("eventLocation", eventLocation); + if (startTimeMinutes >= 0) { + intent.putExtra("beginTime", eventDate.getTime() + startTimeMinutes * 60000); + } + else { + intent.putExtra("allDay", true); + } startActivity(intent); } catch (Exception e) { showToast(getResources().getString(R.string.event_fail)); diff --git a/main/res/values-de/strings.xml b/main/res/values-de/strings.xml index e1a96fd..f811f44 100644 --- a/main/res/values-de/strings.xml +++ b/main/res/values-de/strings.xml @@ -598,7 +598,8 @@ <string name="cache_image_open_file">Als Datei öffnen</string> <string name="cache_image_open_browser">Im Browser öffnen</string> <string name="cache_share_field">Weiterleiten</string> - + <string name="cache_time_full_hours">Uhr</string> + <!-- file list base --> <string name="file_searching_in">Suche nach Dateien\nin</string> <string name="file_searching_sdcard_in">Keine Dateien in Standardverzeichnissen gefunden:\n%1$s\n\nDurchsuche komplette SD-Karte:\n</string> diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml index 2d9d50b..6735730 100644 --- a/main/res/values/strings.xml +++ b/main/res/values/strings.xml @@ -608,7 +608,8 @@ <string name="cache_image_open_file">Open as file</string> <string name="cache_image_open_browser">Open in browser</string> <string name="cache_share_field">Share</string> - + <string name="cache_time_full_hours">o\'clock</string> + <!-- file list base --> <string name="file_searching_in">Searching for files\nin</string> <string name="file_searching_sdcard_in">No files found in default folders:\n%1$s\n\nSearching whole SD card for files:\n</string> diff --git a/main/src/cgeo/calendar/ICalendar.java b/main/src/cgeo/calendar/ICalendar.java index 856de1a..933d248 100644 --- a/main/src/cgeo/calendar/ICalendar.java +++ b/main/src/cgeo/calendar/ICalendar.java @@ -15,4 +15,5 @@ public interface ICalendar { static final String PARAM_NAME = "name"; // cache name static final String PARAM_LOCATION = "location"; // cache location, or empty string static final String PARAM_COORDS = "coords"; // cache coords, or empty string + static final String PARAM_START_TIME_MINUTES = "time"; // time of start } diff --git a/main/src/cgeo/geocaching/CacheDetailActivity.java b/main/src/cgeo/geocaching/CacheDetailActivity.java index d1b0fde..93566c2 100644 --- a/main/src/cgeo/geocaching/CacheDetailActivity.java +++ b/main/src/cgeo/geocaching/CacheDetailActivity.java @@ -787,7 +787,8 @@ public class CacheDetailActivity extends AbstractActivity { ICalendar.PARAM_URL, StringUtils.defaultString(cache.getUrl()), ICalendar.PARAM_COORDS, cache.getCoords() == null ? "" : cache.getCoords().format(GeopointFormatter.Format.LAT_LON_DECMINUTE_RAW), ICalendar.PARAM_LOCATION, StringUtils.defaultString(cache.getLocation()), - ICalendar.PARAM_SHORT_DESC, StringUtils.defaultString(cache.getShortDescription()) + ICalendar.PARAM_SHORT_DESC, StringUtils.defaultString(cache.getShortDescription()), + ICalendar.PARAM_START_TIME_MINUTES, StringUtils.defaultString(cache.guessEventTimeMinutes()) ); startActivity(new Intent(ICalendar.INTENT, diff --git a/main/src/cgeo/geocaching/cgCache.java b/main/src/cgeo/geocaching/cgCache.java index b889d3e..b8590e5 100644 --- a/main/src/cgeo/geocaching/cgCache.java +++ b/main/src/cgeo/geocaching/cgCache.java @@ -1550,4 +1550,45 @@ public class cgCache implements ICache, IWaypoint { return listId >= StoredList.STANDARD_LIST_ID; } -} + /** + * guess an event start time from the description + * + * @return start time in minutes after midnight + */ + public String guessEventTimeMinutes() { + if (!isEventCache()) { + return null; + } + // 12:34 + final Pattern time = Pattern.compile("\\b(\\d{1,2})\\:(\\d\\d)\\b"); + final Matcher matcher = time.matcher(getDescription()); + while (matcher.find()) { + try { + final int hours = Integer.valueOf(matcher.group(1)); + final int minutes = Integer.valueOf(matcher.group(2)); + if (hours >= 0 && hours < 24 && minutes >= 0 && minutes < 60) { + return String.valueOf(hours * 60 + minutes); + } + } catch (NumberFormatException e) { + // cannot happen, but static code analysis doesn't know + } + } + // 12 o'clock + final String hourLocalized = cgeoapplication.getInstance().getString(R.string.cache_time_full_hours); + if (StringUtils.isNotBlank(hourLocalized)) { + final Pattern fullHours = Pattern.compile("\\b(\\d{1,2})\\s+" + Pattern.quote(hourLocalized), Pattern.CASE_INSENSITIVE); + final Matcher matcherHours = fullHours.matcher(getDescription()); + if (matcherHours.find()) { + try { + final int hours = Integer.valueOf(matcherHours.group(1)); + if (hours >= 0 && hours < 24) { + return String.valueOf(hours * 60); + } + } catch (NumberFormatException e) { + // cannot happen, but static code analysis doesn't know + } + } + } + return null; + } +}
\ No newline at end of file |
