diff --git a/src/be/digitalia/fosdem/activities/SearchResultActivity.java b/src/be/digitalia/fosdem/activities/SearchResultActivity.java index ace6c94..445b22a 100644 --- a/src/be/digitalia/fosdem/activities/SearchResultActivity.java +++ b/src/be/digitalia/fosdem/activities/SearchResultActivity.java @@ -69,12 +69,8 @@ public class SearchResultActivity extends ActionBarActivity { } else if (Intent.ACTION_VIEW.equals(intentAction)) { // Search suggestion, dispatch to EventDetailsActivity - try { - Intent dispatchIntent = new Intent(this, EventDetailsActivity.class).setData(intent.getData()); - startActivity(dispatchIntent); - } catch (NumberFormatException e) { - // Ignore invalid data - } + Intent dispatchIntent = new Intent(this, EventDetailsActivity.class).setData(intent.getData()); + startActivity(dispatchIntent); if (!isNewIntent) { finish(); diff --git a/src/be/digitalia/fosdem/db/DatabaseManager.java b/src/be/digitalia/fosdem/db/DatabaseManager.java index 7a0d047..4069fd2 100644 --- a/src/be/digitalia/fosdem/db/DatabaseManager.java +++ b/src/be/digitalia/fosdem/db/DatabaseManager.java @@ -638,7 +638,7 @@ public class DatabaseManager { day.getDate().setTime(cursor.getLong(11)); } - event.setId(cursor.getInt(0)); + event.setId(cursor.getLong(0)); if (cursor.isNull(1)) { event.setStartTime(null); } else { @@ -678,8 +678,8 @@ public class DatabaseManager { return toEvent(cursor, null); } - public static int toEventId(Cursor cursor) { - return cursor.getInt(0); + public static long toEventId(Cursor cursor) { + return cursor.getLong(0); } public static long toEventStartTimeMillis(Cursor cursor) { @@ -721,7 +721,7 @@ public class DatabaseManager { if (person == null) { person = new Person(); } - person.setId(cursor.getInt(0)); + person.setId(cursor.getLong(0)); person.setName(cursor.getString(1)); return person; @@ -755,6 +755,8 @@ public class DatabaseManager { } public boolean addBookmark(Event event) { + boolean complete = false; + SQLiteDatabase db = helper.getWritableDatabase(); db.beginTransaction(); try { @@ -768,25 +770,29 @@ public class DatabaseManager { } db.setTransactionSuccessful(); + complete = true; return true; } finally { db.endTransaction(); - context.getContentResolver().notifyChange(URI_BOOKMARKS, null); - Intent intent = new Intent(ACTION_ADD_BOOKMARK).putExtra(EXTRA_EVENT, event); - LocalBroadcastManager.getInstance(context).sendBroadcast(intent); + if (complete) { + context.getContentResolver().notifyChange(URI_BOOKMARKS, null); + + Intent intent = new Intent(ACTION_ADD_BOOKMARK).putExtra(EXTRA_EVENT, event); + LocalBroadcastManager.getInstance(context).sendBroadcast(intent); + } } } public boolean removeBookmark(Event event) { - return removeBookmark(new int[] { event.getId() }); + return removeBookmarks(new long[] { event.getId() }); } - public boolean removeBookmark(int eventId) { - return removeBookmark(new int[] { eventId }); + public boolean removeBookmark(long eventId) { + return removeBookmarks(new long[] { eventId }); } - public boolean removeBookmark(int[] eventIds) { + public boolean removeBookmarks(long[] eventIds) { int length = eventIds.length; if (length == 0) { throw new IllegalArgumentException("At least one bookmark id to remove must be passed"); @@ -796,6 +802,8 @@ public class DatabaseManager { stringEventIds[i] = String.valueOf(eventIds[i]); } + boolean complete = false; + SQLiteDatabase db = helper.getWritableDatabase(); db.beginTransaction(); try { @@ -807,13 +815,17 @@ public class DatabaseManager { } db.setTransactionSuccessful(); + complete = true; return true; } finally { db.endTransaction(); - context.getContentResolver().notifyChange(URI_BOOKMARKS, null); - Intent intent = new Intent(ACTION_REMOVE_BOOKMARKS).putExtra(EXTRA_EVENT_IDS, eventIds); - LocalBroadcastManager.getInstance(context).sendBroadcast(intent); + if (complete) { + context.getContentResolver().notifyChange(URI_BOOKMARKS, null); + + Intent intent = new Intent(ACTION_REMOVE_BOOKMARKS).putExtra(EXTRA_EVENT_IDS, eventIds); + LocalBroadcastManager.getInstance(context).sendBroadcast(intent); + } } } } diff --git a/src/be/digitalia/fosdem/fragments/BookmarksListFragment.java b/src/be/digitalia/fosdem/fragments/BookmarksListFragment.java index 70fa85f..d9c06d7 100644 --- a/src/be/digitalia/fosdem/fragments/BookmarksListFragment.java +++ b/src/be/digitalia/fosdem/fragments/BookmarksListFragment.java @@ -21,6 +21,12 @@ import be.digitalia.fosdem.db.DatabaseManager; import be.digitalia.fosdem.loaders.SimpleCursorLoader; import be.digitalia.fosdem.model.Event; +/** + * Bookmarks list, optionally filterable. + * + * @author Christophe Beyls + * + */ public class BookmarksListFragment extends ListFragment implements LoaderCallbacks { private static final int BOOKMARKS_LOADER_ID = 1; diff --git a/src/be/digitalia/fosdem/model/Event.java b/src/be/digitalia/fosdem/model/Event.java index ece03d7..a275f8b 100644 --- a/src/be/digitalia/fosdem/model/Event.java +++ b/src/be/digitalia/fosdem/model/Event.java @@ -11,7 +11,7 @@ import be.digitalia.fosdem.db.DatabaseManager; public class Event implements Parcelable { - private int id; + private long id; private Day day; private Date startTime; private Date endTime; @@ -29,11 +29,11 @@ public class Event implements Parcelable { public Event() { } - public int getId() { + public long getId() { return id; } - public void setId(int id) { + public void setId(long id) { this.id = id; } @@ -166,7 +166,7 @@ public class Event implements Parcelable { @Override public int hashCode() { - return id; + return (int) (id ^ (id >>> 32)); } @Override @@ -186,7 +186,7 @@ public class Event implements Parcelable { @Override public void writeToParcel(Parcel out, int flags) { - out.writeInt(id); + out.writeLong(id); day.writeToParcel(out, flags); out.writeLong((startTime == null) ? 0L : startTime.getTime()); out.writeLong((endTime == null) ? 0L : endTime.getTime()); @@ -223,7 +223,7 @@ public class Event implements Parcelable { }; private Event(Parcel in) { - id = in.readInt(); + id = in.readLong(); day = Day.CREATOR.createFromParcel(in); long time = in.readLong(); if (time != 0L) { diff --git a/src/be/digitalia/fosdem/model/Person.java b/src/be/digitalia/fosdem/model/Person.java index 1ab3e3d..f1fe9d3 100644 --- a/src/be/digitalia/fosdem/model/Person.java +++ b/src/be/digitalia/fosdem/model/Person.java @@ -8,17 +8,17 @@ import android.os.Parcelable; public class Person implements Parcelable { - private int id; + private long id; private String name; public Person() { } - public int getId() { + public long getId() { return id; } - public void setId(int id) { + public void setId(long id) { this.id = id; } @@ -41,7 +41,7 @@ public class Person implements Parcelable { @Override public int hashCode() { - return id; + return (int) (id ^ (id >>> 32)); } @Override @@ -63,7 +63,7 @@ public class Person implements Parcelable { @Override public void writeToParcel(Parcel out, int flags) { - out.writeInt(id); + out.writeLong(id); out.writeString(name); } @@ -78,7 +78,7 @@ public class Person implements Parcelable { }; private Person(Parcel in) { - id = in.readInt(); + id = in.readLong(); name = in.readString(); } } diff --git a/src/be/digitalia/fosdem/parsers/EventsParser.java b/src/be/digitalia/fosdem/parsers/EventsParser.java index 4e4c3c9..0b0ba5b 100644 --- a/src/be/digitalia/fosdem/parsers/EventsParser.java +++ b/src/be/digitalia/fosdem/parsers/EventsParser.java @@ -80,7 +80,7 @@ public class EventsParser extends IterableAbstractPullParser { currentRoom = parser.getAttributeValue(null, "name"); } else if ("event".equals(name)) { Event event = new Event(); - event.setId(Integer.parseInt(parser.getAttributeValue(null, "id"))); + event.setId(Long.parseLong(parser.getAttributeValue(null, "id"))); event.setDay(currentDay); event.setRoomName(currentRoom); // Initialize empty lists @@ -129,7 +129,7 @@ public class EventsParser extends IterableAbstractPullParser { while (!isNextEndTag("persons")) { if (isStartTag("person")) { Person person = new Person(); - person.setId(Integer.parseInt(parser.getAttributeValue(null, "id"))); + person.setId(Long.parseLong(parser.getAttributeValue(null, "id"))); person.setName(parser.nextText()); persons.add(person); diff --git a/src/be/digitalia/fosdem/services/AlarmIntentService.java b/src/be/digitalia/fosdem/services/AlarmIntentService.java index 23edc87..4f83e78 100644 --- a/src/be/digitalia/fosdem/services/AlarmIntentService.java +++ b/src/be/digitalia/fosdem/services/AlarmIntentService.java @@ -51,7 +51,7 @@ public class AlarmIntentService extends IntentService { alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); } - private PendingIntent getAlarmPendingIntent(int eventId) { + private PendingIntent getAlarmPendingIntent(long eventId) { Intent intent = new Intent(this, AlarmReceiver.class).setAction(AlarmReceiver.ACTION_NOTIFY_EVENT).setData(Uri.parse(String.valueOf(eventId))); return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); } @@ -68,7 +68,7 @@ public class AlarmIntentService extends IntentService { Cursor cursor = DatabaseManager.getInstance().getBookmarks(now); try { while (cursor.moveToNext()) { - int eventId = DatabaseManager.toEventId(cursor); + long eventId = DatabaseManager.toEventId(cursor); long notificationTime = DatabaseManager.toEventStartTimeMillis(cursor) - delay; PendingIntent pi = getAlarmPendingIntent(eventId); if (notificationTime < now) { @@ -93,7 +93,7 @@ public class AlarmIntentService extends IntentService { Cursor cursor = DatabaseManager.getInstance().getBookmarks(System.currentTimeMillis()); try { while (cursor.moveToNext()) { - int eventId = DatabaseManager.toEventId(cursor); + long eventId = DatabaseManager.toEventId(cursor); alarmManager.cancel(getAlarmPendingIntent(eventId)); } } finally { @@ -114,8 +114,8 @@ public class AlarmIntentService extends IntentService { } else if (DatabaseManager.ACTION_REMOVE_BOOKMARKS.equals(action)) { // Cancel matching alarms, might they exist or not - int[] eventIds = intent.getIntArrayExtra(DatabaseManager.EXTRA_EVENT_IDS); - for (int eventId : eventIds) { + long[] eventIds = intent.getLongArrayExtra(DatabaseManager.EXTRA_EVENT_IDS); + for (long eventId : eventIds) { alarmManager.cancel(getAlarmPendingIntent(eventId)); } } else if (AlarmReceiver.ACTION_NOTIFY_EVENT.equals(action)) {