diff options
Diffstat (limited to 'cgeo-calendar/src/cgeo/calendar/CalendarActivity.java')
| -rw-r--r-- | cgeo-calendar/src/cgeo/calendar/CalendarActivity.java | 219 |
1 files changed, 17 insertions, 202 deletions
diff --git a/cgeo-calendar/src/cgeo/calendar/CalendarActivity.java b/cgeo-calendar/src/cgeo/calendar/CalendarActivity.java index ed17d4c..b1c106d 100644 --- a/cgeo-calendar/src/cgeo/calendar/CalendarActivity.java +++ b/cgeo-calendar/src/cgeo/calendar/CalendarActivity.java @@ -2,35 +2,18 @@ package cgeo.calendar; import android.app.Activity; import android.app.AlertDialog; -import android.content.ContentValues; import android.content.DialogInterface; -import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; -import android.text.Html; -import android.text.Spanned; -import android.text.style.ImageSpan; import android.util.Log; import android.util.SparseArray; import android.view.Gravity; import android.widget.Toast; -import java.io.UnsupportedEncodingException; -import java.net.URLDecoder; -import java.util.Date; - public final class CalendarActivity extends Activity { - private static final String LOG_TAG = "cgeo.calendar"; - private String shortDesc; - private String hiddenDate; - private String url; - private String personalNote; - private String name; - private String location; - private String coords; + static final String LOG_TAG = "cgeo.calendar"; private Uri uri; - private int startTimeMinutes = -1; /** Called when the activity is first created. */ @Override @@ -43,28 +26,15 @@ public final class CalendarActivity extends Activity { finish(); return; } - shortDesc = getParameter(ICalendar.PARAM_SHORT_DESC); - hiddenDate = getParameter(ICalendar.PARAM_HIDDEN_DATE); - url = getParameter(ICalendar.PARAM_URL); - personalNote = getParameter(ICalendar.PARAM_NOTE); - 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) { - } + final CalendarEntry entry = new CalendarEntry(uri); + if (!entry.isValid()) { + return; } - - if (name.length() > 0 && hiddenDate.length() > 0) { - if (Compatibility.isLevel14()) { - addToCalendarLevel14(); - finish(); - } else { - selectCalendarForAdding(); - } + if (Compatibility.isLevel14()) { + new AddEntryLevel14(entry, this).addEntryToCalendar(); + finish(); + } else { + selectCalendarForAdding(entry); } } catch (Exception e) { Log.e(LOG_TAG, e.getMessage(), e); @@ -72,29 +42,19 @@ public final class CalendarActivity extends Activity { } } - private String getParameter(final String paramKey) { - try { - final String param = uri.getQueryParameter(paramKey); - if (param == null) { - return ""; - } - return URLDecoder.decode(param, "UTF-8").trim(); - } catch (UnsupportedEncodingException e) { - } - return ""; - } - /** * Adds the cache to the Android-calendar if it is an event. + * + * @param entry */ - private void selectCalendarForAdding() { + private void selectCalendarForAdding(final CalendarEntry entry) { final String[] projection = new String[] { "_id", "displayName" }; final Uri calendarProvider = Compatibility.getCalendarProviderURI(); final Cursor cursor = managedQuery(calendarProvider, projection, "selected=1", null, null); if (cursor == null || cursor.getCount() <= 0) { - showToast(getResources().getString(R.string.event_fail)); + showToast(R.string.event_fail); finish(); return; } @@ -122,7 +82,7 @@ public final class CalendarActivity extends Activity { } while (cursor.moveToNext()); if (calendars.size() == 0) { - showToast(getResources().getString(R.string.event_fail)); + showToast(R.string.event_fail); finish(); return; } @@ -138,7 +98,7 @@ public final class CalendarActivity extends Activity { @Override public void onClick(DialogInterface dialog, int item) { final int calendarId = calendars.keyAt(item); - addToCalendar(calendarId); + new AddEntry(entry, CalendarActivity.this, calendarId).addEntryToCalendar(); finish(); } }); @@ -151,156 +111,11 @@ public final class CalendarActivity extends Activity { builder.create().show(); } - /** - * @return <code>Date</code> based on hidden date. Time is set to 00:00:00. - */ - private Date parseDate() { - 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; - } - - /** - * @return description string with images removed and personal note included - */ - private String parseDescription() { - final StringBuilder description = new StringBuilder(); - description.append(url); - if (shortDesc.length() > 0) { - // remove images in short description - final Spanned spanned = Html.fromHtml(shortDesc, null, null); - String text = spanned.toString(); - final ImageSpan[] spans = spanned.getSpans(0, spanned.length(), ImageSpan.class); - for (int i = spans.length - 1; i >= 0; i--) { - text = text.substring(0, spanned.getSpanStart(spans[i])) + text.substring(spanned.getSpanEnd(spans[i])); - } - if (text.length() > 0) { - description.append("\n\n"); - description.append(text); - } - } - - if (personalNote.length() > 0) { - description.append("\n\n").append(Html.fromHtml(personalNote).toString()); - } - - return description.toString(); - } - - /** - * @return location string with coordinates and location - */ - private String parseLocation() { - final StringBuilder locBuffer = new StringBuilder(); - if (coords.length() > 0) { - locBuffer.append(coords); - } - if (location.length() > 0) { - boolean addParentheses = false; - if (locBuffer.length() > 0) { - addParentheses = true; - locBuffer.append(" ("); - } - - locBuffer.append(Html.fromHtml(location).toString()); - if (addParentheses) { - locBuffer.append(')'); - } - } - - return locBuffer.toString(); - } - - /** - * @param calendarId - * The selected calendar - */ - private void addToCalendar(int calendarId) { - try { - final Uri calendarProvider = Compatibility.getCalendarEventsProviderURI(); - - final Date eventDate = parseDate(); - final String description = parseDescription(); - final String eventLocation = parseLocation(); - - // values - final ContentValues event = new ContentValues(); - event.put("calendar_id", calendarId); - 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); - - if (eventLocation.length() > 0) { - event.put("eventLocation", eventLocation); - } - event.put("hasAlarm", 0); - - getContentResolver().insert(calendarProvider, event); - - showToast(getResources().getString(R.string.event_success)); - } catch (Exception e) { - showToast(getResources().getString(R.string.event_fail)); - - Log.e(LOG_TAG, "CalendarActivity.addToCalendarFn", e); - } - } - - /** - * Add cache to calendar in Android versions 4.0 and greater using <code>Intent</code>. This does not require - * calendar permissions. - * TODO Does this work with apps other than default calendar app? - */ - private void addToCalendarLevel14() { - try { - final Date eventDate = parseDate(); - final String description = parseDescription(); - final String eventLocation = parseLocation(); - - /* - * TODO These strings are available as constants starting with API 14 and can be used when - * targetSdkVersion changes to 14. For example CalendarContract.EXTRA_EVENT_BEGIN_TIME and - * Events.TITLE - */ - final Intent intent = new Intent(Intent.ACTION_INSERT) - .setData(Compatibility.getCalendarEventsProviderURI()) - .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)); - - Log.e(LOG_TAG, "CalendarActivity.addToCalendarLevel14: " + e.toString()); - } - } - - public final void showToast(final String text) { + public final void showToast(final int res) { + final String text = getResources().getString(res); final Toast toast = Toast.makeText(this, text, Toast.LENGTH_LONG); toast.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM, 0, 100); toast.show(); } - }
\ No newline at end of file |
