aboutsummaryrefslogtreecommitdiffstats
path: root/cgeo-calendar/src/cgeo/calendar/CalendarActivity.java
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2012-08-12 14:31:15 +0200
committerBananeweizen <bananeweizen@gmx.de>2012-08-12 14:31:15 +0200
commit48708e5195aa4d95b547a6104f903c97b0a0a9c6 (patch)
treeb56bb141e00500c783aca11503fb876229e33a4e /cgeo-calendar/src/cgeo/calendar/CalendarActivity.java
parent1a68a9a5fd0d5456806a1fa1cb4a695b5326d019 (diff)
downloadcgeo-48708e5195aa4d95b547a6104f903c97b0a0a9c6.zip
cgeo-48708e5195aa4d95b547a6104f903c97b0a0a9c6.tar.gz
cgeo-48708e5195aa4d95b547a6104f903c97b0a0a9c6.tar.bz2
fix #1934: Calendar entry has wrong date
Diffstat (limited to 'cgeo-calendar/src/cgeo/calendar/CalendarActivity.java')
-rw-r--r--cgeo-calendar/src/cgeo/calendar/CalendarActivity.java219
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